about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/misc
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/misc')
-rw-r--r--nixpkgs/pkgs/applications/misc/1password/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/ArchiSteamFarm/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/OSCAR/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/abook/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/adobe-reader/builder.sh42
-rw-r--r--nixpkgs/pkgs/applications/misc/adobe-reader/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/airtame/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/misc/albert/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/almanah/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/antfs-cli/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/ape/apeclex.nix8
-rw-r--r--nixpkgs/pkgs/applications/misc/ape/clex.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/ape/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/appeditor/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/appeditor/fix-build-vala-0.46.patch22
-rw-r--r--nixpkgs/pkgs/applications/misc/apvlv/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/misc/apvlv/fix-build-with-poppler-0.73.0.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/archiver/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/archivy/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/artha/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/artha/gio-underlink.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/asciiquarium/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/audio/sox/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/audio/soxr/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/audio/wavesurfer/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/audio/wavrsocvt/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/ausweisapp2/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/autospotting/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/avrdudess/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/azuredatastudio/default.nix115
-rw-r--r--nixpkgs/pkgs/applications/misc/barrier/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/bashSnippets/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/batsignal/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/bb/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/bemenu/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/bibletime/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/bicon/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/birdtray/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/birdtray/fix-qttranslations-path.diff13
-rw-r--r--nixpkgs/pkgs/applications/misc/bleachbit/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/blender/darwin.patch59
-rw-r--r--nixpkgs/pkgs/applications/misc/blender/default.nix159
-rw-r--r--nixpkgs/pkgs/applications/misc/blender/fix-include.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/blogc/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/bluetooth_battery/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/blugon/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/break-time/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/brewtarget/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/buku/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/misc/calcurse/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/calibre/default.nix171
-rw-r--r--nixpkgs/pkgs/applications/misc/calibre/disable_plugins.patch17
-rw-r--r--nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/calibre/no_updates_dialog.patch15
-rw-r--r--nixpkgs/pkgs/applications/misc/candle/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cardpeek/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/cataract/build.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/cataract/default.nix8
-rw-r--r--nixpkgs/pkgs/applications/misc/cataract/unstable.nix8
-rw-r--r--nixpkgs/pkgs/applications/misc/catclock/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/cbatticon/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/charm/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/cheat/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/cherrytree/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/cherrytree/subprocess.patch14
-rw-r--r--nixpkgs/pkgs/applications/misc/chewing-editor/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/chrysalis/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/cipher/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/cli-visualizer/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/clight/clightd.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/clight/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/clipcat/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/clipit/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/clipmenu/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/cmatrix/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/cointop/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/colort/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/confclerk/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/coolreader/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/copyq/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/corectrl/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/misc/coursera-dl/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/cpu-x/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/crow-translate/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/crow-translate/dont-fetch-external-libs.patch33
-rw-r--r--nixpkgs/pkgs/applications/misc/crow-translate/fix-qttranslations-path.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/crumbs/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/ctodo/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/cum/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/lulzbot/curaengine-openmp-compat.patch47
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/lulzbot/curaengine.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/lulzbot/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/lulzbot/libarcus.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/lulzbot/libsavitar.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/lulzbot/uranium.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/numpy-cast.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/plugins.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/stable.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/curabydagoma/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/misc/curaengine/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/curaengine/stable.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/dasel/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/dbeaver/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/ddcui/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/ddgr/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/deadd-notification-center/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/deco/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/devdocs-desktop/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/devilspie2/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/dfilemanager/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/diff-pdf/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/diffpdf/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/diffpdf/fix_path_poppler_qt5.patch16
-rw-r--r--nixpkgs/pkgs/applications/misc/digitalbitbox/default.nix142
-rw-r--r--nixpkgs/pkgs/applications/misc/ding/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/ding/dict.patch26
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15142.patch72
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15143.patch39
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15144.patch111
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15145.patch28
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-18804.patch32
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/fix_hongfuzz_crash.patch51
-rw-r--r--nixpkgs/pkgs/applications/misc/dmensamenu/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/dmensamenu/dmenu-path.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/dmenu/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/dmenu/wayland.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/dockbarx/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/doing/Gemfile2
-rw-r--r--nixpkgs/pkgs/applications/misc/doing/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/applications/misc/doing/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/doing/gemset.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/doomseeker/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/doomseeker/fix_paths.patch40
-rw-r--r--nixpkgs/pkgs/applications/misc/doomseeker/qt_build_fix.patch47
-rw-r--r--nixpkgs/pkgs/applications/misc/dotfiles/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/dozenal/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/dozenal/lua-header.patch16
-rw-r--r--nixpkgs/pkgs/applications/misc/dstask/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/dunst/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/dupeguru/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/eaglemode/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/effitask/cargo-lock.patch1091
-rw-r--r--nixpkgs/pkgs/applications/misc/effitask/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/electron-cash/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/misc/electrum/dash.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/electrum/default.nix155
-rw-r--r--nixpkgs/pkgs/applications/misc/electrum/ltc.nix63
-rw-r--r--nixpkgs/pkgs/applications/misc/electrum/update.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/elf-dissector/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/elfx86exts/cargo-lock.patch1091
-rw-r--r--nixpkgs/pkgs/applications/misc/elfx86exts/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/elogind/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/misc/emem/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/epdfview/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/epr/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/et/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/etesync-dav/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/eureka-editor/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/evtest-qt/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/evtest/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/exercism/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/expenses/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/extract_url/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/far2l/default.nix86
-rw-r--r--nixpkgs/pkgs/applications/misc/fbmenugen/0001-Fix-paths.patch69
-rw-r--r--nixpkgs/pkgs/applications/misc/fbmenugen/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/fbreader/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/fbreader/typecheck.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/fehlstart/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/fehlstart/use-nix-profiles.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/fetchmail/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/fff/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/filet/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/firestarter/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/fitnesstrax/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/flamerobin/default.nix33
-rwxr-xr-xnixpkgs/pkgs/applications/misc/fluxboxlauncher/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/fme/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/font-manager/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/fontpreview/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/formatter/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/formatter/fix-paths.patch53
-rw-r--r--nixpkgs/pkgs/applications/misc/foxtrotgps/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/foxtrotgps/gps-status-fix.patch14
-rw-r--r--nixpkgs/pkgs/applications/misc/freemind/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/fslint/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/fsv/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/fusee-interfacee-tk/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/fuzzel/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/gImageReader/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/galculator/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/gallery-dl/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/gammu/bashcomp-dir.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/gammu/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/gammu/systemd.patch30
-rw-r--r--nixpkgs/pkgs/applications/misc/ganttproject-bin/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/garmin-plugin/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/gcal/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/gcalcli/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/gcstar/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/genxword/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/misc/geoipupdate/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/get_iplayer/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/getxbook/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/girara/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/gitit/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/gkrellm/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/gksu/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/gksu/gksu-2.0.2-glib-2.31.patch29
-rw-r--r--nixpkgs/pkgs/applications/misc/glava/default.nix92
-rw-r--r--nixpkgs/pkgs/applications/misc/glom/default.nix131
-rw-r--r--nixpkgs/pkgs/applications/misc/gmrun/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/gmrun/find-config-file-in-system-etc-dir.patch18
-rw-r--r--nixpkgs/pkgs/applications/misc/gmrun/gcc43.patch51
-rw-r--r--nixpkgs/pkgs/applications/misc/gmrun/gmrun-0.9.2-xdg.patch58
-rw-r--r--nixpkgs/pkgs/applications/misc/gmtp/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-firmware-updater/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-multi-writer/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-passwordsafe/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-recipes/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-usage/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/go-jira/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/golden-cheetah/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/goldendict/0001-dont-check-for-updates.patch49
-rw-r--r--nixpkgs/pkgs/applications/misc/goldendict/0001-dont-use-maclibs.patch62
-rw-r--r--nixpkgs/pkgs/applications/misc/goldendict/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/gollum/Gemfile2
-rw-r--r--nixpkgs/pkgs/applications/misc/gollum/Gemfile.lock112
-rw-r--r--nixpkgs/pkgs/applications/misc/gollum/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/gollum/gemset.nix466
-rw-r--r--nixpkgs/pkgs/applications/misc/gomatrix/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/googleearth/default.nix106
-rw-r--r--nixpkgs/pkgs/applications/misc/googler/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/gopacked/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/gosmore/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/gosmore/pointer_int_comparison.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/gpa/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/misc/gpg-mdp/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/gphoto2/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/gphoto2/gphotofs.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/gpsbabel/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/gpsbabel/gui.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/gpscorrelate/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/gpsprune/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/gpx-viewer/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/gpx/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/gpxlab/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/gpxsee/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/gpxsee/fix-qttranslations-path.diff18
-rw-r--r--nixpkgs/pkgs/applications/misc/gramps/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/misc/green-pdfviewer/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/green-pdfviewer/gdk-libs.patch55
-rw-r--r--nixpkgs/pkgs/applications/misc/gremlin-console/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/grip/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/grsync/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/gsctl/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/gsimplecal/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/gtk2fontsel/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/gummi/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/gv/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/gxmessage/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/gxneur/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/hamster/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/haxor-news/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/hdate/default.nix16
-rw-r--r--nixpkgs/pkgs/applications/misc/heimer/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/hello-unfree/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/hello/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/herbe/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/hivemind/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/houdini/default.nix14
-rw-r--r--nixpkgs/pkgs/applications/misc/houdini/runtime.nix88
-rw-r--r--nixpkgs/pkgs/applications/misc/hovercraft/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/hr/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/hstr/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/html5validator/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/hubstaff/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/misc/hubstaff/revision.json5
-rwxr-xr-xnixpkgs/pkgs/applications/misc/hubstaff/update.sh18
-rw-r--r--nixpkgs/pkgs/applications/misc/hugo/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/icesl/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/ideamaker/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/ikiwiki/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/misc/ikiwiki/remove-markdown-tests.patch35
-rw-r--r--nixpkgs/pkgs/applications/misc/imag/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/misc/inkcut/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/ipmicfg/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/ipmiview/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/j4-dmenu-desktop/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/jbidwatcher/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile8
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile.lock102
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/basic/gemset.nix424
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile28
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile.lock158
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/full/gemset.nix737
-rwxr-xr-xnixpkgs/pkgs/applications/misc/jekyll/update.sh15
-rw-r--r--nixpkgs/pkgs/applications/misc/jgmenu/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/jigdo/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/jigdo/sizewidth.patch40
-rw-r--r--nixpkgs/pkgs/applications/misc/joplin-desktop/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/josm/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/jotta-cli/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/jp2a/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/jrnl/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/k2pdfopt/0001-Fix-CMakeLists.patch49
-rw-r--r--nixpkgs/pkgs/applications/misc/k2pdfopt/default.nix172
-rw-r--r--nixpkgs/pkgs/applications/misc/k4dirstat/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/kanboard/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/kapow/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/kdbplus/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/keeagent/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/keepasshttp/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass/default.nix118
-rwxr-xr-xnixpkgs/pkgs/applications/misc/keepass/extractWinRscIconsToStdFreeDesktopDir.sh61
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass/fix-paths.patch144
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass/keepass-plugins-load.patch1
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass/keepass-plugins.patch25
-rw-r--r--nixpkgs/pkgs/applications/misc/keepassx/2.0.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/keepassx/community.nix129
-rw-r--r--nixpkgs/pkgs/applications/misc/keepassx/darwin.patch53
-rw-r--r--nixpkgs/pkgs/applications/misc/keepassx/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/keepassx/random.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/keeweb/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/keystore-explorer/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/khal/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/khal/skip-broken-test.patch33
-rw-r--r--nixpkgs/pkgs/applications/misc/khard/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/kiwix/default.nix109
-rw-r--r--nixpkgs/pkgs/applications/misc/kjv/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/klayout/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/misc/kondo/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/koreader/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/krename/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/krusader/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/ksmoothdock/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/kupfer/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/misc/latte-dock/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/lenmus/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/libosmocore/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/librecad/default.nix103
-rw-r--r--nixpkgs/pkgs/applications/misc/librecad/fix_qt_5_11_build.patch36
-rw-r--r--nixpkgs/pkgs/applications/misc/lifelines/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/lighthouse/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/llpp/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/llpp/fix-build-bash.patch80
-rw-r--r--nixpkgs/pkgs/applications/misc/loxodo/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/lsd2dsl/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/ltwheelconf/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/lutris/default.nix119
-rw-r--r--nixpkgs/pkgs/applications/misc/lutris/fhsenv.nix120
-rw-r--r--nixpkgs/pkgs/applications/misc/lyx/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/madonctl/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/madonctl/deps.nix228
-rw-r--r--nixpkgs/pkgs/applications/misc/makeself/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/mako/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/mapproxy/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/marktext/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/masterpdfeditor/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/masterpdfeditor4/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/mbutil/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/mdp/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/mediaelch/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/mediainfo-gui/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/mediainfo/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/megacmd/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/misc/megasync/default.nix120
-rw-r--r--nixpkgs/pkgs/applications/misc/megasync/install-megasync.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/megasync/noinstall-distro-version.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/memo/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/mencal/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/menumaker/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/merkaartor/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/metamorphose2/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/metar/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/michabo/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/milu/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/minder/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/minergate-cli/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/minergate/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/build.xml.patch46
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/default.nix85
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/deps.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/fix-failing-test.patch22
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/splitter/build.xml.patch54
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/splitter/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/splitter/fix-failing-test.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/splitter/testinputs.nix18
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/testinputs.nix66
-rw-r--r--nixpkgs/pkgs/applications/misc/mob/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/moolticute/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/moonlight-embedded/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/mop/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/mop/deps.nix11
-rw-r--r--nixpkgs/pkgs/applications/misc/mps-youtube/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/mpvc/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/mqtt-bench/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/mqtt-bench/deps.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/mu-repo/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/mucommander/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/misc/multibootusb/default.nix114
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/1.17.nix95
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/darwin.patch30
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/default.nix108
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/default.upstream7
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/mupdf-1.14-shared_libs.patch39
-rw-r--r--nixpkgs/pkgs/applications/misc/mwic/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/mysql-workbench/default.nix189
-rw-r--r--nixpkgs/pkgs/applications/misc/mysql-workbench/fix-gdal-includes.patch47
-rw-r--r--nixpkgs/pkgs/applications/misc/mysql-workbench/fix-swig-build.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/mysql-workbench/hardcode-paths.patch187
-rw-r--r--nixpkgs/pkgs/applications/misc/mystem/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/nanoblogger/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/navi/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/navipowm/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/navit/CMakeLists.txt.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/navit/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/misc/neap/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/nix-tour/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/nixnote2/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/nnn/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/noice/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/notable/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/notejot/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/notify-osd-customizable/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/notify-osd/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/nrsc5/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/nut/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-launchers/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/obinskit/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/obsidian/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/misc/ocropus/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/octoprint/default.nix190
-rw-r--r--nixpkgs/pkgs/applications/misc/octoprint/plugins.nix337
-rw-r--r--nixpkgs/pkgs/applications/misc/octoprint/printtimegenius-logging.patch17
-rw-r--r--nixpkgs/pkgs/applications/misc/ola/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/olifant/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/omegat.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/onboard/default.nix181
-rw-r--r--nixpkgs/pkgs/applications/misc/onboard/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/onboard/hunspell-use-xdg-datadirs.patch20
-rw-r--r--nixpkgs/pkgs/applications/misc/oneko/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/openambit/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/openbox-menu/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/openbox-menu/with-svg.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/openbrf/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/opencpn/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/openjump/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/openrgb/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/opentx/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/orca/default.nix117
-rw-r--r--nixpkgs/pkgs/applications/misc/orca/fix-paths.patch78
-rw-r--r--nixpkgs/pkgs/applications/misc/orpie/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/osm2xmap/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/osmctools/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/osmium-tool/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/misc/overmind/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/overmind/deps.nix129
-rw-r--r--nixpkgs/pkgs/applications/misc/pass-secret-service/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/pastel/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/pbpst/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/pcmanfm/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/pcmanx-gtk2/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/pdf-quench/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfarranger/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfdiff/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfmod/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfpc/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfsam-basic/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/peaclock/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/pell/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/perkeep/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/pgadmin/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/pgmanage/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/pgmodeler/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/phwmon/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/pinfo/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/pipr/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/plank/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/misc/plank/hide-in-pantheon.patch9
-rw-r--r--nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/cmake.patch20
-rw-r--r--nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/plater/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/playonlinux/default.nix113
-rw-r--r--nixpkgs/pkgs/applications/misc/plover/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/polar-bookshelf/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/misc/polybar/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/misc/posterazor/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/prevo/data.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/prevo/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/prevo/tools.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/printrun/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/procmail/CVE-2014-3618.patch18
-rw-r--r--nixpkgs/pkgs/applications/misc/procmail/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/projectlibre/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/prusa-slicer/default.nix116
-rw-r--r--nixpkgs/pkgs/applications/misc/prusa-slicer/super-slicer.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/pstree/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/.bundle/config2
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/Gemfile3
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/Gemfile.lock69
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/default.nix17
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/gemset.nix273
-rw-r--r--nixpkgs/pkgs/applications/misc/ptask/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/ptask/json_c_is_error.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/ptask/tw-version.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/pueue/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/pwsafe/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/pydf/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/pyditz/cerberus.nix19
-rw-r--r--nixpkgs/pkgs/applications/misc/pyditz/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/pytrainer/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/misc/pytrainer/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/qMasterPassword/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/qcad/application-dir.patch48
-rw-r--r--nixpkgs/pkgs/applications/misc/qcad/default.nix102
-rw-r--r--nixpkgs/pkgs/applications/misc/qdirstat/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/qlandkartegt/default.nix93
-rw-r--r--nixpkgs/pkgs/applications/misc/qlandkartegt/garmindev.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/qlcplus/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/qmetro/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/qolibri/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/qpdfview/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/qsudo/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/qsyncthingtray/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/qsyncthingtray/qsyncthingtray-0.5.8-qt-5.6.3.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/qt-box-editor/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/qt-video-wlr/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/qtbitcointrader/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/qtpass/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/quicksynergy/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/raiseorlaunch/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/ranger/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/razergenie/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/reddsaver/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/redis-desktop-manager/default.nix83
-rw-r--r--nixpkgs/pkgs/applications/misc/redshift-plasma-applet/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/redshift/575.patch51
-rw-r--r--nixpkgs/pkgs/applications/misc/redshift/default.nix152
-rw-r--r--nixpkgs/pkgs/applications/misc/regextester/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/remarkable/rmapi/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/remarkable/rmview/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/rescuetime/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/robo3t/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/misc/robomongo/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-emoji/0001-Patch-plugindir-to-output.patch25
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-emoji/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-file-browser/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-menugen/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi/wrapper.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/rofimoji/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/rootbar/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/rsclock/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/rsibreak/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/rss-bridge-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/rtv/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/safeeyes/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/sampler/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/sbagen/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/sc-im/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/sdcv/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/sent/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/sequeler/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/sequelpro/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/sidequest/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/sigal/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/signumone-ks/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/simplenote/default.nix97
-rw-r--r--nixpkgs/pkgs/applications/misc/sl1-to-photon/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/slade/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/slade/git.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/sleepyhead/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/slic3r/boost-compile-error.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/slic3r/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/misc/slmenu/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/slstatus/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/smos/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/snapper-gui/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/snowsql/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/solaar/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/spacefm/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/spacefm/glibc-fix.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/speedread/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/spicetify-cli/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/sqliteman/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/ssocr/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/ssw/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/stag/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/stog/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/stog/install.patch18
-rw-r--r--nixpkgs/pkgs/applications/misc/stog/uri.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/stretchly/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/misc/styx/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/subsurface/default.nix109
-rw-r--r--nixpkgs/pkgs/applications/misc/swappy/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/sweethome3d/default.nix103
-rw-r--r--nixpkgs/pkgs/applications/misc/sweethome3d/editors.nix93
-rw-r--r--nixpkgs/pkgs/applications/misc/synapse/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/syncthing-tray/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/syncthing-tray/deps.nix93
-rw-r--r--nixpkgs/pkgs/applications/misc/syncthingtray/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/misc/synergy/build-tests.patch97
-rw-r--r--nixpkgs/pkgs/applications/misc/synergy/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/misc/synergy/macos_build_fix.patch29
-rw-r--r--nixpkgs/pkgs/applications/misc/systembus-notify/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/tabula/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/taizen/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/2.x/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/2.x/timezone-glibc.patch48
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/3.x/Gemfile2
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/3.x/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/3.x/default.nix15
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/3.x/gemset.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile2
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile.lock21
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/gemset.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/tasknc/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/taskopen/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/tasksh/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/taskwarrior-tui/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/taskwarrior/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/tdrop/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/teleprompter/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/tellico/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/tellico/hex.patch15
-rw-r--r--nixpkgs/pkgs/applications/misc/termdown/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/terminal-notifier/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/terminal-parrot/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/terminal-typeracer/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/termpdf.py/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/teseq/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/thinking-rock/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/tickrs/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/timewarrior/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/tint2/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/misc/tipp10/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/tippecanoe/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/tiramisu/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/tiv/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/tmatrix/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/tnef/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/todiff/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/todoist-electron/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/todoist/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/toggldesktop/TogglDesktop.pro19
-rw-r--r--nixpkgs/pkgs/applications/misc/toggldesktop/default.nix149
-rw-r--r--nixpkgs/pkgs/applications/misc/toggldesktop/libtoggl.pro20
-rw-r--r--nixpkgs/pkgs/applications/misc/tomboy/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/toot/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/tootle/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/topydo/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/tpmmanager/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/translate-shell/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/tthsum/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/tty-share/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/tty-solitaire/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/tuir/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/tut/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/tut/deps.nix318
-rw-r--r--nixpkgs/pkgs/applications/misc/tvbrowser/bin.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/twmn/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/tzupdate/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/udevil/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/udevil/device-info-sys-stat.patch14
-rw-r--r--nixpkgs/pkgs/applications/misc/udiskie/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/ulauncher/0001-Adjust-get_data_path-for-NixOS.patch55
-rw-r--r--nixpkgs/pkgs/applications/misc/ulauncher/default.nix120
-rw-r--r--nixpkgs/pkgs/applications/misc/ulauncher/fix-extensions.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/ulauncher/fix-path.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/ultralist/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/upwork/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/urlscan/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/urlview/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/usync/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/valentina/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/misc/variety/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/misc/vcal/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/veracrypt/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/misc/verbiste/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/vifm/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/viking/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/misc/visidata/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/vit/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/volnoti/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/vp/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/vue/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/vym/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/waybar/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/misc/wcalc/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/misc/weather/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/web-media-controller/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/wego/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/wego/deps.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/wikicurses/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/with-shell/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/misc/wmname/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/wofi/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/wofi/do_not_follow_symlinks.patch39
-rw-r--r--nixpkgs/pkgs/applications/misc/wordnet/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/worker/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/misc/workrave/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/wtf/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/xastir/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/xautoclick/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/xbattbar/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/xbattbar/sys-by-default.patch26
-rw-r--r--nixpkgs/pkgs/applications/misc/xca/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/xchm/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/xcruiser/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/xdg-launch/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/xdgmenumaker/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/xdragon/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/xfe/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/xfontsel/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/xiphos/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/xkbd/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/xkblayout-state/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/xkbmon/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/xmenu/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/xmind/default.nix92
-rw-r--r--nixpkgs/pkgs/applications/misc/xmind/java-env-config-fixes.patch40
-rw-r--r--nixpkgs/pkgs/applications/misc/xmr-stak/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/xmrig/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/xmrig/proxy.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/xneur/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/xpad/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/xpdf/cmake_version.patch15
-rw-r--r--nixpkgs/pkgs/applications/misc/xpdf/default.nix83
-rw-r--r--nixpkgs/pkgs/applications/misc/xpdf/libxpdf.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/xpdf/libxpdf.patch45
-rw-r--r--nixpkgs/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch74
-rw-r--r--nixpkgs/pkgs/applications/misc/xrandr-invert-colors/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/xrq/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/xscope/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/xsuspender/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/xsw/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/xsw/parse.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/xteddy/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/xxkb/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/xygrib/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/yarssr/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/yate/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/yokadi/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/yubioath-desktop/0001-replace-git-with-normal-python-package.patch24
-rw-r--r--nixpkgs/pkgs/applications/misc/yubioath-desktop/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/cb/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/core/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/djvu/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/pdf-mupdf/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/pdf-poppler/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/ps/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/wrapper.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/zettlr/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/zk-shell/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/zktree/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/zola/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/zscroll/default.nix27
766 files changed, 38602 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/misc/1password/default.nix b/nixpkgs/pkgs/applications/misc/1password/default.nix
new file mode 100644
index 000000000000..3728216da7ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/1password/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchzip, autoPatchelfHook, fetchurl, xar, cpio }:
+
+stdenv.mkDerivation rec {
+  pname = "1password";
+  version = "1.8.0";
+  src =
+    if stdenv.isLinux then fetchzip {
+      url = {
+        "i686-linux" = "https://cache.agilebits.com/dist/1P/op/pkg/v${version}/op_linux_386_v${version}.zip";
+        "x86_64-linux" = "https://cache.agilebits.com/dist/1P/op/pkg/v${version}/op_linux_amd64_v${version}.zip";
+      }.${stdenv.hostPlatform.system};
+      sha256 = {
+        "i686-linux" = "teoxscan+EZ76Q0sfKT6nt1w/LSsmDoiN2oh+NGO/4A=";
+        "x86_64-linux" = "nRK2GSwhQe5OgcAdR1fg0vUp3fzEkhwU/teIwsEEemw=";
+      }.${stdenv.hostPlatform.system};
+      stripRoot = false;
+    } else fetchurl {
+      url = "https://cache.agilebits.com/dist/1P/op/pkg/v${version}/op_darwin_amd64_v${version}.pkg";
+      sha256 = "0pycia75vdfh6gxfd2hr32cxrryfxydid804n0v76l2fpr9v9v3d";
+    };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ xar cpio ];
+
+  unpackPhase = lib.optionalString stdenv.isDarwin ''
+    xar -xf $src
+    zcat Payload | cpio -i
+  '';
+
+  installPhase = ''
+    install -D op $out/bin/op
+  '';
+
+  dontStrip = stdenv.isDarwin;
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ autoPatchelfHook ];
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/op --version
+  '';
+
+  meta = with lib; {
+    description  = "1Password command-line tool";
+    homepage     = "https://support.1password.com/command-line/";
+    downloadPage = "https://app-updates.agilebits.com/product_history/CLI";
+    maintainers  = with maintainers; [ joelburget marsam ];
+    license      = licenses.unfree;
+    platforms    = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/default.nix b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/default.nix
new file mode 100644
index 000000000000..c753721adbf0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper, dotnetCorePackages, jq }:
+
+stdenv.mkDerivation rec {
+  pname = "ArchiSteamFarm";
+  version = "4.3.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/JustArchiNET/ArchiSteamFarm/releases/download/${version}/ASF-generic.zip";
+    sha256 = "1q28byshh4wkfsfdb0sfdqq9a5da9k7i4nagsfpk0fzyajvzd4lx";
+  };
+
+  nativeBuildInputs = [ unzip makeWrapper jq ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    dist=$out/opt/asf
+    mkdir -p $dist
+    cp -r * $dist
+
+    jq "del(.runtimeOptions.framework.version)" ArchiSteamFarm.runtimeconfig.json > $dist/ArchiSteamFarm.runtimeconfig.json
+
+    makeWrapper ${dotnetCorePackages.aspnetcore_3_1}/bin/dotnet $out/bin/ArchiSteamFarm \
+      --add-flags $dist/ArchiSteamFarm.dll \
+      --add-flags "--path ~/.config/asf" \
+      --run "mkdir -p ~/.config/asf" \
+      --run "cd ~/.config/asf" \
+      --run "[ -d config ] || cp --no-preserve=mode -r $dist/config ." \
+      --run "[ -d logs ] || cp --no-preserve=mode -r $dist/logs ." \
+      --run "[ -d plugins ] || cp --no-preserve=mode -r $dist/plugins ." \
+      --run "ln -sf $dist/www ."
+  '';
+
+  meta = with lib; {
+    description = "Application with primary purpose of idling Steam cards from multiple accounts simultaneously";
+    homepage = "https://github.com/JustArchiNET/ArchiSteamFarm";
+    license = licenses.asl20;
+    platforms = dotnetCorePackages.aspnetcore_3_1.meta.platforms;
+    maintainers = with maintainers; [ gnidorah ];
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/OSCAR/default.nix b/nixpkgs/pkgs/applications/misc/OSCAR/default.nix
new file mode 100644
index 000000000000..7115801d00bb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/OSCAR/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, mkDerivation, fetchFromGitLab, qmake, qtbase, qttools, qtserialport, libGLU }:
+mkDerivation rec {
+  pname = "OSCAR";
+  version = "1.2.0";
+
+  src = fetchFromGitLab {
+    owner = "pholy";
+    repo = "OSCAR-code";
+    rev = "v${version}";
+    sha256 = "10r37d8c2avr167n2s9lhld1c9hmckm444fq163z1jsy9jpid6mg";
+  };
+
+  buildInputs = [ qtbase qttools qtserialport libGLU ];
+  nativeBuildInputs = [ qmake ];
+  postPatch = ''
+    substituteInPlace oscar/oscar.pro --replace "/bin/bash" "${stdenv.shell}"
+  '';
+
+  qmakeFlags = [ "OSCAR_QT.pro" ];
+
+  installPhase = ''
+    install -d $out/bin
+    install -d $out/share/OSCAR/Help
+    install -d $out/share/OSCAR/Html
+    install -d $out/share/OSCAR/Translations
+    install -d $out/share/icons/OSCAR
+    install -d $out/share/applications
+    install -T oscar/OSCAR $out/bin/OSCAR
+    # help browser was removed 'temporarily' in https://gitlab.com/pholy/OSCAR-code/-/commit/57c3e4c33ccdd2d0eddedbc24c0e4f2969da3841
+    # install oscar/Help/* $out/share/OSCAR/Help
+    install oscar/Html/* $out/share/OSCAR/Html
+    install oscar/Translations/* $out/share/OSCAR/Translations
+    install -T Building/Linux/OSCAR.png $out/share/icons/OSCAR/OSCAR.png
+    install -T Building/Linux/OSCAR.desktop $out/share/applications/OSCAR.desktop
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.sleepfiles.com/OSCAR/";
+    description = "Software for reviewing and exploring data produced by CPAP and related machines used in the treatment of sleep apnea";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.roconnor ];
+    # Someone needs to create a suitable installPhase for Darwin and Windows.
+    # See https://gitlab.com/pholy/OSCAR-code/-/tree/master/Building.
+    broken = !stdenv.hostPlatform.isLinux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/abook/default.nix b/nixpkgs/pkgs/applications/misc/abook/default.nix
new file mode 100644
index 000000000000..62cba4a5b736
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/abook/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, ncurses, readline, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  name = "abook-0.6.1";
+
+  src = fetchurl {
+    url = "http://abook.sourceforge.net/devel/${name}.tar.gz";
+    sha256 = "1yf0ifyjhq2r003pnpn92mn0924bn9yxjifxxj2ldcsgd7w0vagh";
+  };
+
+  patches = [
+    (fetchpatch {
+       url = "https://projects.archlinux.org/svntogit/packages.git/plain/trunk/gcc5.patch?h=packages/abook";
+       name = "gcc5.patch";
+       sha256 = "13n3qd6yy45i5n8ppjn9hj6y63ymjrq96280683xk7f7rjavw5nn";
+     })
+  ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ ncurses readline ];
+
+  meta = {
+    homepage = "http://abook.sourceforge.net/";
+    description = "Text-based addressbook program designed to use with mutt mail client";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.edwtjo ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/adobe-reader/builder.sh b/nixpkgs/pkgs/applications/misc/adobe-reader/builder.sh
new file mode 100644
index 000000000000..41281385c990
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/adobe-reader/builder.sh
@@ -0,0 +1,42 @@
+source $stdenv/setup
+
+echo "unpacking $src..."
+tar xvfa $src
+
+echo "unpacking reader..."
+p=$out/libexec/adobe-reader
+mkdir -p $out/libexec
+tar xvf AdobeReader/COMMON.TAR -C $out
+tar xvf AdobeReader/ILINXR.TAR -C $out
+mv $out/Adobe/Reader9 $p
+rmdir $out/Adobe
+
+# Disable this plugin for now (it needs LDAP, and I'm too lazy to add it).
+rm $p/Reader/intellinux/plug_ins/PPKLite.api
+
+# More pointless files.
+rm $p/bin/UNINSTALL
+
+patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+    --set-rpath $libPath \
+    $p/Reader/intellinux/bin/acroread
+
+# The "xargs -r" is to shut up a warning when Mozilla can't be found.
+substituteInPlace $p/bin/acroread \
+    --replace /bin/pwd $(type -P pwd) \
+    --replace /bin/ls $(type -P ls) \
+    --replace xargs "xargs -r"
+
+mkdir -p $out/bin
+ln -s $p/bin/acroread $out/bin/acroread
+
+mkdir -p $out/share/applications
+mv $p/Resource/Support/AdobeReader.desktop $out/share/applications/
+icon=$p/Resource/Icons/128x128/AdobeReader9.png
+[ -e $icon ]
+sed -i $out/share/applications/AdobeReader.desktop \
+    -e "s|Icon=.*|Icon=$icon|"
+
+# Not sure if this works.
+mkdir -p $out/share/mimelnk/application
+mv $p/Resource/Support/vnd*.desktop $out/share/mimelnk/application
diff --git a/nixpkgs/pkgs/applications/misc/adobe-reader/default.nix b/nixpkgs/pkgs/applications/misc/adobe-reader/default.nix
new file mode 100644
index 000000000000..8f1b3f5ca88f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/adobe-reader/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, libX11, cups, zlib, libxml2, pango, atk, gtk2, glib
+, gdk-pixbuf, gdk-pixbuf-xlib }:
+
+assert stdenv.hostPlatform.system == "i686-linux";
+
+let version = "9.5.5"; in
+
+stdenv.mkDerivation {
+  name = "adobe-reader-${version}-1";
+
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = "http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/${version}/enu/AdbeRdr${version}-1_i486linux_enu.tar.bz2";
+    sha256 = "0h35misxrqkl5zlmmvray1bqf4ywczkm89n9qw7d9arqbg3aj3pf";
+  };
+
+  # !!! Adobe Reader contains copies of OpenSSL, libcurl, and libicu.
+  # We should probably remove those and use the regular Nixpkgs
+  # versions.
+
+  libPath = lib.makeLibraryPath
+    [ stdenv.cc.cc libX11 zlib libxml2 cups pango atk gtk2 glib gdk-pixbuf gdk-pixbuf-xlib ];
+
+  passthru.mozillaPlugin = "/libexec/adobe-reader/Browser/intellinux";
+
+  meta = {
+    description = "Adobe Reader, a viewer for PDF documents";
+    homepage = "http://www.adobe.com/products/reader";
+    license = lib.licenses.unfree;
+    knownVulnerabilities = [
+      "Numerous unresolved vulnerabilities"
+      "See: https://www.cvedetails.com/product/497/Adobe-Acrobat-Reader.html?vendor_id=53"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/airtame/default.nix b/nixpkgs/pkgs/applications/misc/airtame/default.nix
new file mode 100644
index 000000000000..58fcf4cb10dd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/airtame/default.nix
@@ -0,0 +1,79 @@
+{ stdenv, lib, fetchurl, makeDesktopItem, makeWrapper
+, alsaLib, atk, cairo, cups, curl, dbus, expat, ffmpeg_3, fontconfig, freetype
+, gdk-pixbuf, glib, glibc, gnome2, gtk2, libX11, libXScrnSaver, libXcomposite
+, libXcursor, libXdamage, libXext, libXfixes, libXi, libXrandr, libXrender
+, libXtst, libopus, libpulseaudio, libxcb, nspr, nss, pango, udev, x264
+}:
+
+let libPath = lib.makeLibraryPath [
+  alsaLib atk cairo cups curl dbus expat ffmpeg_3 fontconfig freetype gdk-pixbuf
+  glib glibc gnome2.GConf gtk2 libopus nspr nss pango stdenv.cc.cc udev x264
+  libX11 libXScrnSaver libXcomposite libXcursor libXdamage libXext libXfixes
+  libXi libXrandr libXrender libXtst libpulseaudio libxcb
+];
+in stdenv.mkDerivation rec {
+  pname = "airtame";
+  version = "3.3.0";
+  longName = "${pname}-application";
+
+  src = fetchurl {
+    url = "https://downloads.airtame.com/application/ga/lin_x64/releases/${longName}-${version}.tar.gz";
+    sha256 = "16ca1vcxpka26jcrfbxpq74kcizgrm138j94bby6kzqp2swhrl76";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  desktopItem = makeDesktopItem rec {
+    name = "airtame";
+    exec = longName;
+    comment = "Airtame Streaming Client";
+    desktopName = "Airtame";
+    icon = name;
+    genericName = comment;
+    categories = "Network;";
+  };
+
+  installPhase = ''
+    opt="$out/opt/airtame"
+    mkdir -p "$opt"
+    cp -R . "$opt"
+    mkdir -p "$out/bin"
+    ln -s "$opt/${longName}" "$out/bin/"
+    mkdir -p "$out/share"
+    cp -r "${desktopItem}/share/applications" "$out/share/"
+    mkdir -p "$out/share/icons"
+    ln -s "$opt/icon.png" "$out/share/icons/airtame.png"
+
+    # Flags and rpath are copied from launch-airtame.sh.
+    vendorlib="\
+    $opt/resources/app.asar.unpacked/modules/streamer/dist/deps/airtame-modules:\
+    $opt/resources/app.asar.unpacked/encryption/out/lib:\
+    $opt/resources/deps/airtame-core/lib:\
+    $opt/resources/deps/airtame-encryption/lib"
+
+    echo $vendorlib
+
+    rpath="${libPath}:$opt:$vendorlib"
+
+    find "$opt" \( -type f -executable -o -name "*.so" -o -name "*.so.*" \) \
+      -exec patchelf --set-rpath "$rpath" {} \;
+
+    # The main binary also needs libudev which was removed by --shrink-rpath.
+    interp="$(< $NIX_CC/nix-support/dynamic-linker)"
+    patchelf --set-interpreter "$interp" $opt/${longName}
+
+    wrapProgram $opt/${longName} \
+      --prefix LD_LIBRARY_PATH=$rpath \
+      --add-flags "--disable-gpu --enable-transparent-visuals"
+  '';
+
+  dontPatchELF = true;
+
+  meta = with lib; {
+    homepage = "https://airtame.com/download";
+    description = "Wireless streaming client for Airtame devices";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ thanegill ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/albert/default.nix b/nixpkgs/pkgs/applications/misc/albert/default.nix
new file mode 100644
index 000000000000..c862872a7938
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/albert/default.nix
@@ -0,0 +1,45 @@
+{ mkDerivation, lib, fetchFromGitHub, makeWrapper, qtbase,
+  qtdeclarative, qtsvg, qtx11extras, muparser, cmake, python3,
+  qtcharts }:
+
+mkDerivation rec {
+  pname = "albert";
+  version = "0.17.2";
+
+  src = fetchFromGitHub {
+    owner  = "albertlauncher";
+    repo   = "albert";
+    rev    = "v${version}";
+    sha256 = "0lpp8rqx5b6rwdpcdldfdlw5327harr378wnfbc6rp3ajmlb4p7w";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+
+  buildInputs = [ qtbase qtdeclarative qtsvg qtx11extras muparser python3 qtcharts ];
+
+  # We don't have virtualbox sdk so disable plugin
+  cmakeFlags = [ "-DBUILD_VIRTUALBOX=OFF" "-DCMAKE_INSTALL_LIBDIR=libs" ];
+
+  postPatch = ''
+    sed -i "/QStringList dirs = {/a    \"$out/libs\"," \
+      src/app/main.cpp
+  '';
+
+  preBuild = ''
+    mkdir -p "$out/"
+    ln -s "$PWD/lib" "$out/lib"
+  '';
+
+  postBuild = ''
+    rm "$out/lib"
+  '';
+
+  meta = with lib; {
+    homepage    = "https://albertlauncher.github.io/";
+    description = "Desktop agnostic launcher";
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericsagnes synthetica ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/almanah/default.nix b/nixpkgs/pkgs/applications/misc/almanah/default.nix
new file mode 100644
index 000000000000..b8029b6229d2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/almanah/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv
+, fetchurl
+, atk
+, cairo
+, desktop-file-utils
+, evolution-data-server
+, evolution
+, gcr
+, gettext
+, glib
+, gnome3
+, gpgme
+, gtk3
+, gtksourceview3
+, gtkspell3
+, libcryptui
+, libxml2
+, meson
+, ninja
+, pkg-config
+, python3
+, sqlite
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "almanah";
+  version = "0.12.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "IWYOnOu0C9uQ9k1dgWkJ6Kv+o/jY+6Llfsi4PusHE24=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    libxml2
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    atk
+    cairo
+    evolution-data-server
+    gcr
+    glib
+    evolution
+    gpgme
+    gtk3
+    gtksourceview3
+    gtkspell3
+    libcryptui
+    sqlite
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      versionPolicy = "none"; # it is quite odd
+    };
+  };
+
+  meta = with lib; {
+    description = "Small GTK application to allow to keep a diary of your life";
+    homepage = "https://wiki.gnome.org/Apps/Almanah_Diary";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = teams.gnome.members;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/antfs-cli/default.nix b/nixpkgs/pkgs/applications/misc/antfs-cli/default.nix
new file mode 100644
index 000000000000..133194f7af51
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/antfs-cli/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication {
+  pname = "antfs-cli";
+  version = "unstable-2017-02-11";
+
+  meta = with lib; {
+    homepage = "https://github.com/Tigge/antfs-cli";
+    description = "Extracts FIT files from ANT-FS based sport watches";
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+
+  src = fetchFromGitHub {
+    owner = "Tigge";
+    repo = "antfs-cli";
+    rev = "85a6cc6fe6fc0ec38399f5aa30fb39177c565b52";
+    sha256 = "0v8y64kldfbs809j1g9d75dd1vxq7mfxnp4b45pz8anpxhjf64fy";
+  };
+
+  propagatedBuildInputs = [ python3Packages.openant ];
+}
diff --git a/nixpkgs/pkgs/applications/misc/ape/apeclex.nix b/nixpkgs/pkgs/applications/misc/ape/apeclex.nix
new file mode 100644
index 000000000000..b01bfbedb8a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ape/apeclex.nix
@@ -0,0 +1,8 @@
+{ lib, stdenv, attemptoClex, callPackage }:
+
+callPackage ./. {
+  pname = "ape-clex";
+  lexiconPath = "${attemptoClex}/clex_lexicon.pl";
+  description = "Parser for Attempto Controlled English (ACE) with a large lexicon (~100,000 entries)";
+  license = with lib; [ licenses.lgpl3 licenses.gpl3 ];
+}
diff --git a/nixpkgs/pkgs/applications/misc/ape/clex.nix b/nixpkgs/pkgs/applications/misc/ape/clex.nix
new file mode 100644
index 000000000000..a98695dab682
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ape/clex.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "attempto-clex";
+  version = "5133afe";
+
+  src = fetchFromGitHub {
+     owner = "Attempto";
+     repo = "Clex";
+     rev = version;
+     sha256 = "0p9s64g1jic213bwm6347jqckszgnni9szrrz31qjgaf32kf7nkp";
+  };
+
+  installPhase = ''
+    mkdir -p $out
+    cp clex_lexicon.pl $out
+  '';
+
+  meta = with lib; {
+    description = "Large lexicon for APE (~100,000 entries)";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yrashk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ape/default.nix b/nixpkgs/pkgs/applications/misc/ape/default.nix
new file mode 100644
index 000000000000..f16d6e157332
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ape/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, swiProlog, makeWrapper,
+  fetchFromGitHub,
+  lexiconPath ? "prolog/lexicon/clex_lexicon.pl",
+  pname ? "ape",
+  description ? "Parser for Attempto Controlled English (ACE)",
+  license ? with lib; licenses.lgpl3
+}:
+
+stdenv.mkDerivation rec {
+  inherit pname;
+  version = "2019-08-10";
+
+  buildInputs = [ swiProlog makeWrapper ];
+
+  src = fetchFromGitHub {
+     owner = "Attempto";
+     repo = "APE";
+     rev = "113b81621262d7a395779465cb09397183e6f74c";
+     sha256 = "0xyvna2fbr18hi5yvm0zwh77q02dfna1g4g53z9mn2rmlfn2mhjh";
+  };
+
+  patchPhase = ''
+    # We move the file first to avoid "same file" error in the default case
+    cp ${lexiconPath} new_lexicon.pl
+    rm prolog/lexicon/clex_lexicon.pl
+    cp new_lexicon.pl prolog/lexicon/clex_lexicon.pl
+  '';
+
+  buildPhase = ''
+    make SHELL=${stdenv.shell} build
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ape.exe $out
+    makeWrapper $out/ape.exe $out/bin/ape --add-flags ace
+  '';
+
+  meta = with lib; {
+    description = description;
+    license = license;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yrashk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/appeditor/default.nix b/nixpkgs/pkgs/applications/misc/appeditor/default.nix
new file mode 100644
index 000000000000..d0db2b12dfdb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/appeditor/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, vala
+, meson
+, ninja
+, pkg-config
+, pantheon
+, python3
+, gettext
+, glib
+, gtk3
+, libgee
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "appeditor";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "donadigo";
+    repo = "appeditor";
+    rev = version;
+    sha256 = "04x2f4x4dp5ca2y3qllqjgirbyl6383pfl4bi9bkcqlg8b5081rg";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    pantheon.granite
+    libgee
+  ];
+
+  patches = [
+    # See: https://github.com/donadigo/appeditor/issues/88
+    ./fix-build-vala-0.46.patch
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Edit the Pantheon desktop application menu";
+    homepage = "https://github.com/donadigo/appeditor";
+    maintainers = with maintainers; [ xiorcale ] ++ pantheon.maintainers;
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/appeditor/fix-build-vala-0.46.patch b/nixpkgs/pkgs/applications/misc/appeditor/fix-build-vala-0.46.patch
new file mode 100644
index 000000000000..f6c0b4cfd287
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/appeditor/fix-build-vala-0.46.patch
@@ -0,0 +1,22 @@
+diff --git a/src/DesktopApp.vala b/src/DesktopApp.vala
+index 0e6fa47..ebcde0c 100644
+--- a/src/DesktopApp.vala
++++ b/src/DesktopApp.vala
+@@ -130,7 +130,7 @@ public class AppEditor.DesktopApp : Object {
+ 
+     public unowned string get_path () {
+         if (path == null) {
+-            unowned string _path = info.get_string (KeyFileDesktop.KEY_PATH);
++            string _path = info.get_string (KeyFileDesktop.KEY_PATH);
+             if (_path == null) {
+                 _path = "";
+             }
+@@ -150,7 +150,7 @@ public class AppEditor.DesktopApp : Object {
+     }
+ 
+     public bool get_should_show () {
+-        return info.should_show () && !get_terminal (); 
++        return info.should_show () && !get_terminal ();
+     }
+ 
+     public string[] get_categories () {
diff --git a/nixpkgs/pkgs/applications/misc/apvlv/default.nix b/nixpkgs/pkgs/applications/misc/apvlv/default.nix
new file mode 100644
index 000000000000..140d6eb7d086
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/apvlv/default.nix
@@ -0,0 +1,74 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, pkg-config, pcre, libxkbcommon, epoxy
+, gtk3, poppler, freetype, libpthreadstubs, libXdmcp, libxshmfence, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.1.5";
+  pname = "apvlv";
+
+  src = fetchFromGitHub {
+    owner = "naihe2010";
+    repo = "apvlv";
+    rev = "v${version}";
+    sha256 = "1n4xiic8lqnv3mqi7wpdv866gyyakax71gffv3n9427rmcld465i";
+  };
+
+  NIX_CFLAGS_COMPILE = "-I${poppler.dev}/include/poppler";
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    poppler pcre libxkbcommon epoxy
+    freetype gtk3
+    libpthreadstubs libXdmcp libxshmfence # otherwise warnings in compilation
+  ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/naihe2010/apvlv/commit/d432635b9c5ea6c052a2ae1fb71aedec5c4ad57a.patch";
+      sha256 = "1am8dgv2kkpqmm2vaysa61czx8ppdx94zb3c59sx88np50jpy70w";
+    })
+    (fetchpatch {
+      url = "https://github.com/naihe2010/apvlv/commit/4c7a583e8431964def482e5471f02e6de8e62a7b.patch";
+      sha256 = "1dszm120lwm90hcg5zmd4vr6pjyaxc84qmb7k0fr59mmb3qif62j";
+    })
+    # fix build with gcc7
+    (fetchpatch {
+      url = "https://github.com/naihe2010/apvlv/commit/a3a895772a27d76dab0c37643f0f4c73f9970e62.patch";
+      sha256 = "1fpc7wr1ajilvwi5gjsy5g9jcx4bl03gp5dmajg90ljqbhwz2bfi";
+    })
+    ./fix-build-with-poppler-0.73.0.patch
+  ];
+
+  installPhase = ''
+    # binary
+    mkdir -p $out/bin
+    cp src/apvlv $out/bin/apvlv
+
+    # displays pdfStartup.pdf as default pdf entry
+    mkdir -p $out/share/doc/apvlv/
+    cp ../Startup.pdf $out/share/doc/apvlv/Startup.pdf
+    cp ../main_menubar.glade $out/share/doc/apvlv/main_menubar.glade
+  ''
+  + lib.optionalString (!stdenv.isDarwin) ''
+    install -D ../apvlv.desktop $out/share/applications/apvlv.desktop
+  '';
+
+  meta = with lib; {
+    homepage = "http://naihe2010.github.io/apvlv/";
+    description = "PDF viewer with Vim-like behaviour";
+    longDescription = ''
+      apvlv is a PDF/DJVU/UMD/TXT Viewer Under Linux/WIN32
+      with Vim-like behaviour.
+    '';
+
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ardumont ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/apvlv/fix-build-with-poppler-0.73.0.patch b/nixpkgs/pkgs/applications/misc/apvlv/fix-build-with-poppler-0.73.0.patch
new file mode 100644
index 000000000000..d2a7831dca63
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/apvlv/fix-build-with-poppler-0.73.0.patch
@@ -0,0 +1,13 @@
+diff --git a/src/ApvlvPdf.cc b/src/ApvlvPdf.cc
+index 765b112..83d133f 100644
+--- a/src/ApvlvPdf.cc
++++ b/src/ApvlvPdf.cc
+@@ -29,7 +29,7 @@
+ #include "ApvlvPdf.h"
+
+ #ifndef POPPLER_WITH_GDK
+-#include <goo/gtypes.h>
++#include <goo/gfile.h>
+
+ static void
+ copy_cairo_surface_to_pixbuf (cairo_surface_t *surface,
diff --git a/nixpkgs/pkgs/applications/misc/archiver/default.nix b/nixpkgs/pkgs/applications/misc/archiver/default.nix
new file mode 100644
index 000000000000..1691ab073610
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/archiver/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "archiver";
+  version = "3.5.0";
+
+  src = fetchFromGitHub {
+    owner = "mholt";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0fdkqfs87svpijccz8m11gvby8pvmznq6fs9k94vbzak0kxhw1wg";
+  };
+
+  vendorSha256 = "0avnskay23mpl3qkyf1h75rr7szpsxis2bj5pplhwf8q8q0212xf";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version} -X main.commit=${src.rev} -X main.date=unknown" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Easily create & extract archives, and compress & decompress files of various formats";
+    homepage = "https://github.com/mholt/archiver";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/archivy/default.nix b/nixpkgs/pkgs/applications/misc/archivy/default.nix
new file mode 100644
index 000000000000..c94011466ec3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/archivy/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, python3, fetchPypi, appdirs, attrs, requests,
+beautifulsoup4, click-plugins, elasticsearch, flask_login, flask_wtf,
+pypandoc, python-dotenv, python-frontmatter, tinydb, validators,
+watchdog, wtforms }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "archivy";
+  version = "0.9.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "b6ff08a9ecd0a929663c36c73844ac5cb4dc847e69aae639a450c64d4320a506";
+  };
+
+  # Relax some dependencies
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace 'WTForms ==' 'WTForms >=' \
+      --replace 'attrs == 20.2.0' 'attrs' \
+      --replace 'beautifulsoup4 ==' 'beautifulsoup4 >=' \
+      --replace 'elasticsearch ==' 'elasticsearch >=' \
+      --replace 'python_dotenv ==' 'python_dotenv >=' \
+      --replace 'python_frontmatter == 0.5.0' 'python_frontmatter' \
+      --replace 'requests ==' 'requests >=' \
+      --replace 'validators ==' 'validators >=' \
+      --replace 'watchdog ==' 'watchdog >='
+  '';
+
+  propagatedBuildInputs = [
+    appdirs
+    attrs
+    beautifulsoup4
+    click-plugins
+    elasticsearch
+    flask_login
+    flask_wtf
+    pypandoc
+    python-dotenv
+    python-frontmatter
+    tinydb
+    requests
+    validators
+    watchdog
+    wtforms
+  ];
+
+  # __init__.py attempts to mkdir in read-only file system
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Self-hosted knowledge repository";
+    homepage = "https://archivy.github.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/artha/default.nix b/nixpkgs/pkgs/applications/misc/artha/default.nix
new file mode 100644
index 000000000000..37a1cee79a65
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/artha/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, autoreconfHook, fetchurl, dbus-glib, gtk2, pkg-config, wordnet }:
+
+stdenv.mkDerivation {
+  pname = "artha";
+  version = "1.0.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/artha/1.0.3/artha-1.0.3.tar.bz2";
+    sha256 = "0qr4ihl7ma3cq82xi1fpzvf74mm9vsg0j035xvmcp3r6rmw2fycx";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ dbus-glib gtk2 wordnet ];
+
+  patches = [
+    ./gio-underlink.patch
+  ];
+
+  meta = with lib; {
+    description = "An offline thesaurus based on WordNet";
+    homepage = "http://artha.sourceforge.net";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.goibhniu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/artha/gio-underlink.patch b/nixpkgs/pkgs/applications/misc/artha/gio-underlink.patch
new file mode 100644
index 000000000000..08d9c4787369
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/artha/gio-underlink.patch
@@ -0,0 +1,13 @@
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 0236d72..bcc1182 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -38,7 +38,7 @@ artha_LDADD = libwni.a $(WORDNET_LIB)
+ 
+ if POSIX
+ AM_CFLAGS += @libdbus_CFLAGS@
+-artha_LDADD += -lX11 -ldbus-1 -ldbus-glib-1 -lgtk-x11-2.0 \
++artha_LDADD += -lX11 -ldbus-1 -ldbus-glib-1 -lgio-2.0 -lgtk-x11-2.0 \
+ 		-lgdk-x11-2.0 -lgmodule-2.0 -lgobject-2.0 -lglib-2.0
+ else
+ artha_LDADD += @GTK_LIBS@
diff --git a/nixpkgs/pkgs/applications/misc/asciiquarium/default.nix b/nixpkgs/pkgs/applications/misc/asciiquarium/default.nix
new file mode 100644
index 000000000000..a4276dac1d1f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/asciiquarium/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, makeWrapper, perlPackages }:
+
+let version = "1.1";
+in stdenv.mkDerivation {
+  pname = "asciiquarium";
+  inherit version;
+  src = fetchurl {
+    url = "https://robobunny.com/projects/asciiquarium/asciiquarium_${version}.tar.gz";
+    sha256 = "0qfkr5b7sxzi973nh0h84blz2crvmf28jkkgaj3mxrr56mhwc20v";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp asciiquarium $out/bin
+    chmod +x $out/bin/asciiquarium
+    wrapProgram $out/bin/asciiquarium \
+      --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.TermAnimation ] }
+  '';
+
+  meta = with lib; {
+    description = "Enjoy the mysteries of the sea from the safety of your own terminal!";
+    homepage = "https://robobunny.com/projects/asciiquarium/html/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.utdemir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/audio/sox/default.nix b/nixpkgs/pkgs/applications/misc/audio/sox/default.nix
new file mode 100644
index 000000000000..dd5dbde52868
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/audio/sox/default.nix
@@ -0,0 +1,52 @@
+{ config, lib, stdenv, fetchurl, pkg-config, CoreAudio
+, enableAlsa ? true, alsaLib ? null
+, enableLibao ? true, libao ? null
+, enableLame ? config.sox.enableLame or false, lame ? null
+, enableLibmad ? true, libmad ? null
+, enableLibogg ? true, libogg ? null, libvorbis ? null
+, enableOpusfile ? true, opusfile ? null
+, enableFLAC ? true, flac ? null
+, enablePNG ? true, libpng ? null
+, enableLibsndfile ? true, libsndfile ? null
+, enableWavpack ? true, wavpack ? null
+# amrnb and amrwb are unfree, disabled by default
+, enableAMR ? false, amrnb ? null, amrwb ? null
+, enableLibpulseaudio ? true, libpulseaudio ? null
+}:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  name = "sox-14.4.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sox/${name}.tar.gz";
+    sha256 = "0v2znlxkxxcd3f48hf3dx9pq7i6fdhb62kgj7wv8xggz8f35jpxl";
+  };
+
+  # configure.ac uses pkg-config only to locate libopusfile
+  nativeBuildInputs = optional enableOpusfile pkg-config;
+
+  buildInputs =
+    optional (enableAlsa && stdenv.isLinux) alsaLib ++
+    optional enableLibao libao ++
+    optional enableLame lame ++
+    optional enableLibmad libmad ++
+    optionals enableLibogg [ libogg libvorbis ] ++
+    optional enableOpusfile opusfile ++
+    optional enableFLAC flac ++
+    optional enablePNG libpng ++
+    optional enableLibsndfile libsndfile ++
+    optional enableWavpack wavpack ++
+    optionals enableAMR [ amrnb amrwb ] ++
+    optional enableLibpulseaudio libpulseaudio ++
+    optional (stdenv.isDarwin) CoreAudio;
+
+  meta = {
+    description = "Sample Rate Converter for audio";
+    homepage = "http://sox.sourceforge.net/";
+    maintainers = [ lib.maintainers.marcweber ];
+    license = if enableAMR then lib.licenses.unfree else lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/audio/soxr/default.nix b/nixpkgs/pkgs/applications/misc/audio/soxr/default.nix
new file mode 100644
index 000000000000..3f3ed0a0b156
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/audio/soxr/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, cmake }:
+
+stdenv.mkDerivation rec {
+  name = "soxr-0.1.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/soxr/${name}-Source.tar.xz";
+    sha256 = "12aql6svkplxq5fjycar18863hcq84c5kx8g6f4rj0lcvigw24di";
+  };
+
+  outputs = [ "out" "doc" ]; # headers are just two and very small
+
+  preConfigure = if stdenv.isDarwin then ''
+    export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH''${DYLD_LIBRARY_PATH:+:}"`pwd`/build/src
+  '' else ''
+    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}"`pwd`/build/src
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = {
+    description = "An audio resampling library";
+    homepage = "http://soxr.sourceforge.net";
+    license = lib.licenses.lgpl21Plus;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/audio/wavesurfer/default.nix b/nixpkgs/pkgs/applications/misc/audio/wavesurfer/default.nix
new file mode 100644
index 000000000000..6e276d592b0e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/audio/wavesurfer/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, snack, tcl, tk, makeWrapper }:
+
+stdenv.mkDerivation {
+  name = "wavesurfer-1.8.5";
+
+  src = fetchurl {
+    url = "https://www.speech.kth.se/wavesurfer/wavesurfer-1.8.5.tar.gz";
+    sha256 = "1yx9s1j47cq0v40cwq2gn7bdizpw46l95ba4zl9z4gg31mfvm807";
+  };
+
+  buildInputs = [ snack tcl tk makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,nix-support,share/wavesurfer/}
+    mv doc $out/share/wavesurfer
+    mv * $out/nix-support
+    ln -s $out/{nix-support,bin}/wavesurfer.tcl
+    wrapProgram "$out/nix-support/wavesurfer.tcl"  \
+                 --set TCLLIBPATH "${snack}/lib" \
+                 --prefix PATH : "${lib.makeBinPath [ tcl tk ]}"
+  '';
+
+  meta = {
+    description = "Tool for recording, playing, editing, viewing and labeling of audio";
+    homepage = "http://www.speech.kth.se/wavesurfer/";
+    license = lib.licenses.bsd0;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/audio/wavrsocvt/default.nix b/nixpkgs/pkgs/applications/misc/audio/wavrsocvt/default.nix
new file mode 100644
index 000000000000..3b32f0d7f30b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/audio/wavrsocvt/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "wavrsocvt-1.0.2.0";
+
+  src = fetchurl {
+    url = "http://bricxcc.sourceforge.net/wavrsocvt.tgz";
+    sha256 = "15qlvdfwbiclljj7075ycm78yzqahzrgl4ky8pymix5179acm05h";
+  };
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  unpackPhase = ''
+    tar -zxf $src
+    '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp wavrsocvt $out/bin
+    '';
+
+  meta = with lib; {
+    description = "Convert .wav files into sound files for Lego NXT brick";
+    longDescription = ''
+    wavrsocvt is a command-line utility which can be used from a
+    terminal window or script to convert .wav files into sound
+    files for the NXT brick (.rso files). It can also convert the
+    other direction (i.e., .rso -> .wav). It can produce RSO files
+    with a sample rate between 2000 and 16000 (the min/max range of
+    supported sample rates in the standard NXT firmware).
+    You can then upload these with e.g. nxt-python.
+    '';
+    homepage = "http://bricxcc.sourceforge.net/";
+    license = licenses.mpl11;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ausweisapp2/default.nix b/nixpkgs/pkgs/applications/misc/ausweisapp2/default.nix
new file mode 100644
index 000000000000..82e7c1bb21bc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ausweisapp2/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, cmake, pkg-config, pcsclite, qtsvg, qttools, qtwebsockets
+, qtquickcontrols2, qtgraphicaleffects }:
+
+mkDerivation rec {
+  pname = "AusweisApp2";
+  version = "1.22.0";
+
+  src = fetchFromGitHub {
+    owner = "Governikus";
+    repo = "AusweisApp2";
+    rev = version;
+    sha256 = "00isb8xcbm419nvxx2ri0n8x5d403733h2whjqjcd3hmpx3x4q1h";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ qtsvg qttools qtwebsockets qtquickcontrols2 qtgraphicaleffects pcsclite ];
+
+  meta = with lib; {
+    description = "Authentication software for the German ID card";
+    downloadPage = "https://github.com/Governikus/AusweisApp2/releases";
+    homepage = "https://www.ausweisapp.bund.de/ausweisapp2/";
+    license = licenses.eupl12;
+    maintainers = with maintainers; [ b4dm4n ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/autospotting/default.nix b/nixpkgs/pkgs/applications/misc/autospotting/default.nix
new file mode 100644
index 000000000000..0b57ad292661
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/autospotting/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage {
+  pname = "autospotting";
+  version = "unstable-2018-11-17";
+  goPackagePath = "github.com/AutoSpotting/AutoSpotting";
+
+  src = fetchFromGitHub {
+    owner = "AutoSpotting";
+    repo = "AutoSpotting";
+    rev = "122ab8f292a2f718dd85e79ec22acd455122907e";
+    sha256 = "0p48lgig9kblxvgq1kggczkn4qdbx6ciq9c8x0179i80vl4jf7v6";
+  };
+
+  # patching path where repository used to exist
+  postPatch = ''
+    sed -i "s+github.com/cristim/autospotting/core+github.com/AutoSpotting/AutoSpotting/core+" autospotting.go
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/AutoSpotting/AutoSpotting";
+    description = "Automatically convert your existing AutoScaling groups to up to 90% cheaper spot instances with minimal configuration changes";
+    license = licenses.free;
+    maintainers = [ maintainers.costrouc ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/avrdudess/default.nix b/nixpkgs/pkgs/applications/misc/avrdudess/default.nix
new file mode 100644
index 000000000000..696d69c701c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/avrdudess/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, runtimeShell, fetchurl, unzip, mono, avrdude, gtk2, xdg_utils }:
+
+stdenv.mkDerivation {
+  name = "avrdudess-2.2.20140102";
+
+  src = fetchurl {
+    url = "http://blog.zakkemble.co.uk/download/avrdudess_20140102.zip";
+    sha256 = "18llpvjsfhypzijrvfbzmcg3g141f307mzsrg11wcdxh9syxqak6";
+  };
+
+  buildInputs = [ unzip ];
+
+  phases = [ "buildPhase" ];
+
+  buildPhase = ''
+    mkdir -p "$out/avrdudess"
+    mkdir -p "$out/bin"
+
+    unzip "$src" -d "$out/avrdudess"
+
+    cat >> "$out/bin/avrdudess" << __EOF__
+    #!${runtimeShell}
+    export LD_LIBRARY_PATH="${lib.makeLibraryPath [gtk2 mono]}"
+    # We need PATH from user env for xdg-open to find its tools, which
+    # typically depend on the currently running desktop environment.
+    export PATH="${lib.makeBinPath [ avrdude xdg_utils ]}:\$PATH"
+
+    # avrdudess must have its resource files in its current working directory
+    cd $out/avrdudess && exec ${mono}/bin/mono "$out/avrdudess/avrdudess.exe" "\$@"
+    __EOF__
+
+    chmod a+x "$out/bin/"*
+  '';
+
+  meta = with lib; {
+    description = "GUI for AVRDUDE (AVR microcontroller programmer)";
+    homepage = "https://github.com/zkemble/AVRDUDESS";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/azuredatastudio/default.nix b/nixpkgs/pkgs/applications/misc/azuredatastudio/default.nix
new file mode 100644
index 000000000000..9472af7a16fe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/azuredatastudio/default.nix
@@ -0,0 +1,115 @@
+{ stdenv
+, lib
+, fetchurl
+, makeWrapper
+, libuuid
+, libunwind
+, icu
+, openssl
+, zlib
+, curl
+, at-spi2-core
+, at-spi2-atk
+, gnutar
+, atomEnv
+, kerberos
+}:
+
+# from justinwoo/azuredatastudio-nix
+# https://github.com/justinwoo/azuredatastudio-nix/blob/537c48aa3981cd1a82d5d6e508ab7e7393b3d7c8/default.nix
+
+stdenv.mkDerivation rec {
+
+  pname = "azuredatastudio";
+  version = "1.17.1";
+
+  src = fetchurl {
+    url = "https://azuredatastudiobuilds.blob.core.windows.net/releases/${version}/azuredatastudio-linux-${version}.tar.gz";
+    sha256 = "0px9n9vyjvyddca4x7d0zindd0dim7350vkjg5dd0506fm8dc38k";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    libuuid
+    at-spi2-core
+    at-spi2-atk
+  ];
+
+  phases = "unpackPhase fixupPhase";
+
+  # change this to azuredatastudio-insiders for insiders releases
+  edition = "azuredatastudio";
+  targetPath = "$out/${edition}";
+
+  unpackPhase = ''
+    mkdir -p ${targetPath}
+    ${gnutar}/bin/tar xf $src --strip 1 -C ${targetPath}
+  '';
+
+  sqltoolsserviceRpath = lib.makeLibraryPath [
+    stdenv.cc.cc
+    libunwind
+    libuuid
+    icu
+    openssl
+    zlib
+    curl
+  ];
+
+  # this will most likely need to be updated when azuredatastudio's version changes
+  sqltoolsservicePath = "${targetPath}/resources/app/extensions/mssql/sqltoolsservice/Linux/2.0.0-release.56";
+
+  rpath = lib.concatStringsSep ":" [
+    atomEnv.libPath
+    (
+      lib.makeLibraryPath [
+        libuuid
+        at-spi2-core
+        at-spi2-atk
+        stdenv.cc.cc.lib
+        kerberos
+      ]
+    )
+    targetPath
+    sqltoolsserviceRpath
+  ];
+
+  fixupPhase = ''
+    fix_sqltoolsservice()
+    {
+      mv ${sqltoolsservicePath}/$1 ${sqltoolsservicePath}/$1_old
+      patchelf \
+        --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \
+        ${sqltoolsservicePath}/$1_old
+
+      makeWrapper \
+        ${sqltoolsservicePath}/$1_old \
+        ${sqltoolsservicePath}/$1 \
+        --set LD_LIBRARY_PATH ${sqltoolsserviceRpath}
+    }
+
+    fix_sqltoolsservice MicrosoftSqlToolsServiceLayer
+    fix_sqltoolsservice MicrosoftSqlToolsCredentials
+    fix_sqltoolsservice SqlToolsResourceProviderService
+
+    patchelf \
+      --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \
+      ${targetPath}/${edition}
+
+    mkdir -p $out/bin
+    makeWrapper \
+      ${targetPath}/bin/${edition} \
+      $out/bin/azuredatastudio \
+      --set LD_LIBRARY_PATH ${rpath}
+  '';
+
+  meta = {
+    maintainers = with lib.maintainers; [ xavierzwirtz ];
+    description = "A data management tool that enables working with SQL Server, Azure SQL DB and SQL DW";
+    homepage = "https://docs.microsoft.com/en-us/sql/azure-data-studio/download-azure-data-studio";
+    license = lib.licenses.unfreeRedistributable;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/barrier/default.nix b/nixpkgs/pkgs/applications/misc/barrier/default.nix
new file mode 100644
index 000000000000..fa5980b115ee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/barrier/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, cmake, curl, xorg, avahi, qtbase, mkDerivation,
+  openssl, wrapGAppsHook,
+  avahiWithLibdnssdCompat ? avahi.override { withLibdnssdCompat = true; }
+}:
+
+mkDerivation rec {
+  pname = "barrier";
+  version = "2.3.3";
+
+  src = fetchFromGitHub {
+    owner = "debauchee";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "11vqkzpcjiv3pq6ps022223j6skgm1d23dj18n4a5nsf53wsvvp4";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ curl xorg.libX11 xorg.libXext xorg.libXtst avahiWithLibdnssdCompat qtbase ];
+  nativeBuildInputs = [ cmake wrapGAppsHook ];
+
+  postFixup = ''
+    substituteInPlace "$out/share/applications/barrier.desktop" --replace "Exec=barrier" "Exec=$out/bin/barrier"
+  '';
+
+  qtWrapperArgs = [
+    ''--prefix PATH : ${lib.makeBinPath [ openssl ]}''
+  ];
+
+  meta = {
+    description = "Open-source KVM software";
+    longDescription = ''
+      Barrier is KVM software forked from Symless's synergy 1.9 codebase.
+      Synergy was a commercialized reimplementation of the original
+      CosmoSynergy written by Chris Schoeneman.
+    '';
+    homepage = "https://github.com/debauchee/barrier";
+    downloadPage = "https://github.com/debauchee/barrier/releases";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.phryneas ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bashSnippets/default.nix b/nixpkgs/pkgs/applications/misc/bashSnippets/default.nix
new file mode 100644
index 000000000000..4a023849f390
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bashSnippets/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper
+, curl, python, bind, iproute, bc, gitMinimal }:
+let
+  version = "1.23.0";
+  deps = lib.makeBinPath [
+    curl
+    python
+    bind.dnsutils
+    iproute
+    bc
+    gitMinimal
+  ];
+in
+stdenv.mkDerivation {
+  pname = "bashSnippets";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "alexanderepstein";
+    repo = "Bash-Snippets";
+    rev = "v${version}";
+    sha256 = "044nxgd3ic2qr6hgq5nymn3dyf5i4s8mv5z4az6jvwlrjnvbg8cp";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  patchPhase = ''
+    patchShebangs install.sh
+    substituteInPlace install.sh --replace /usr/local "$out"
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out"/bin "$out"/share/man/man1
+    ./install.sh all
+    for file in "$out"/bin/*; do
+      wrapProgram "$file" --prefix PATH : "${deps}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "A collection of small bash scripts for heavy terminal users";
+    homepage = "https://github.com/alexanderepstein/Bash-Snippets";
+    license = licenses.mit;
+    maintainers = with maintainers; [ infinisil ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/batsignal/default.nix b/nixpkgs/pkgs/applications/misc/batsignal/default.nix
new file mode 100644
index 000000000000..93e16ea3469d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/batsignal/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, libnotify, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "batsignal";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "electrickite";
+    repo = "batsignal";
+    rev = version;
+    sha256 = "0yc7xgwb3i4m8m9kg2xspqig3s2qgh2i9bkalvnkziayjb7y59qn";
+  };
+
+  buildInputs = [ libnotify glib ];
+  nativeBuildInputs = [ pkg-config ];
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/electrickite/batsignal";
+    description = "Lightweight battery daemon written in C";
+    license = licenses.isc;
+    maintainers = with maintainers; [ SlothOfAnarchy ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bb/default.nix b/nixpkgs/pkgs/applications/misc/bb/default.nix
new file mode 100644
index 000000000000..fd7eb4990f06
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bb/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchurl, darwin, aalib, ncurses, xorg, libmikmod }:
+
+stdenv.mkDerivation rec {
+  pname = "bb";
+  version = "1.3rc1";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/aa-project/bb/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1i411glxh7g4pfg4gw826lpwngi89yrbmxac8jmnsfvrfb48hgbr";
+  };
+
+  buildInputs = [
+    aalib ncurses libmikmod
+    xorg.libXau xorg.libXdmcp xorg.libX11
+  ] ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.CoreAudio;
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    sed -i -e '/^#include <malloc.h>$/d' *.c
+  '';
+
+  meta = with lib; {
+    homepage    = "http://aa-project.sourceforge.net/bb";
+    description = "AA-lib demo";
+    license     = licenses.gpl2;
+    maintainers = [ maintainers.rnhmjoj ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bemenu/default.nix b/nixpkgs/pkgs/applications/misc/bemenu/default.nix
new file mode 100644
index 000000000000..8de0ceeae654
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bemenu/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, fetchFromGitHub, cairo, libxkbcommon
+, pango, fribidi, harfbuzz, pcre, pkg-config
+, ncursesSupport ? true, ncurses ? null
+, waylandSupport ? true, wayland ? null, wayland-protocols ? null
+, x11Support ? true, xlibs ? null, xorg ? null
+}:
+
+assert ncursesSupport -> ncurses != null;
+assert waylandSupport -> ! lib.elem null [wayland wayland-protocols];
+assert x11Support -> xlibs != null && xorg != null;
+
+stdenv.mkDerivation rec {
+  pname = "bemenu";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "Cloudef";
+    repo = pname;
+    rev = version;
+    sha256 = "1ifq5bk7782b9m6bl111x33fn38rpppdrww7hfavqia9a9gi2sl5";
+  };
+
+  nativeBuildInputs = [ pkg-config pcre ];
+
+  makeFlags = ["PREFIX=$(out)"];
+
+  buildFlags = ["clients"]
+    ++ lib.optional ncursesSupport "curses"
+    ++ lib.optional waylandSupport "wayland"
+    ++ lib.optional x11Support "x11";
+
+  buildInputs = with lib; [
+    cairo
+    fribidi
+    harfbuzz
+    libxkbcommon
+    pango
+  ] ++ optional ncursesSupport ncurses
+    ++ optionals waylandSupport [ wayland wayland-protocols ]
+    ++ optionals x11Support [
+      xlibs.libX11 xlibs.libXinerama xlibs.libXft
+      xorg.libXdmcp xorg.libpthreadstubs xorg.libxcb
+    ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Cloudef/bemenu";
+    description = "Dynamic menu library and client program inspired by dmenu";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lheckemann ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bibletime/default.nix b/nixpkgs/pkgs/applications/misc/bibletime/default.nix
new file mode 100644
index 000000000000..3213ed9edf0d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bibletime/default.nix
@@ -0,0 +1,36 @@
+{ lib, mkDerivation, stdenv, fetchurl, cmake, pkg-config, sword, boost, clucene_core
+, qtbase, qttools, qtsvg, qtwebkit
+}:
+
+mkDerivation rec {
+
+  version = "2.11.2";
+
+  pname = "bibletime";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bibletime/${pname}-${version}.tar.xz";
+    sha256 = "1s5bvmwbz1gyp3ml8sghpc00h8nhdvx2iyq96iri30kwx1y1jy6i";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+   sword boost clucene_core
+   qtbase qttools qtsvg qtwebkit
+ ];
+
+  preConfigure =  ''
+    export CLUCENE_HOME=${clucene_core};
+    export SWORD_HOME=${sword};
+  '';
+
+  cmakeFlags = [ "-DUSE_QT_WEBKIT=ON" "-DCMAKE_BUILD_TYPE=Debug" ];
+
+  meta = {
+    description = "A Qt4 Bible study tool";
+    homepage = "http://www.bibletime.info/";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.piotr ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bicon/default.nix b/nixpkgs/pkgs/applications/misc/bicon/default.nix
new file mode 100644
index 000000000000..72f5a639f11f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bicon/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv
+  , fetchFromGitHub
+  , autoreconfHook
+  , pkg-config
+  , perl
+  , fribidi
+  , kbd
+  , xkbutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bicon";
+  version = "unstable-2018-09-10";
+
+  src = fetchFromGitHub {
+    owner = "behdad";
+    repo = pname;
+    rev = "38725c062a83ab19c4e4b4bc20eb9535561aa76c";
+    sha256 = "0hdslrci8pq300f3rrjsvl5psfrxdwyxf9g2m5g789sr049dksnq";
+  };
+
+  buildInputs = [ fribidi kbd xkbutils perl ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  preConfigure = ''
+    patchShebangs .
+  '';
+
+  meta = with lib; {
+    description = "A bidirectional console";
+    homepage =  "https://github.com/behdad/bicon";
+    license = [ licenses.lgpl21 licenses.psfl licenses.bsd0 ];
+    maintainers = [ maintainers.linarcx ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/birdtray/default.nix b/nixpkgs/pkgs/applications/misc/birdtray/default.nix
new file mode 100644
index 000000000000..ce8db160a755
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/birdtray/default.nix
@@ -0,0 +1,46 @@
+{ mkDerivation
+  , lib
+  , fetchFromGitHub
+
+  , cmake
+  , pkg-config
+  , qtbase
+  , qttools
+  , qtx11extras
+  , qttranslations
+}:
+
+mkDerivation rec {
+  pname = "birdtray";
+  version = "1.9.0";
+
+  src = fetchFromGitHub {
+    owner = "gyunaev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1469ng6zk0qx0qfsihrnlz1j9i1wk0hx4vqdaplz9mdpyxvmlryk";
+  };
+
+  patches = [
+    # See https://github.com/NixOS/nixpkgs/issues/86054
+    ./fix-qttranslations-path.diff
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+    qtbase qttools qtx11extras
+  ];
+
+  postPatch = ''
+    substituteInPlace src/birdtrayapp.cpp \
+      --subst-var-by qttranslations ${qttranslations}
+  '';
+
+  meta = with lib; {
+    description = "Mail system tray notification icon for Thunderbird";
+    homepage = "https://github.com/gyunaev/birdtray";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ Flakebi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/birdtray/fix-qttranslations-path.diff b/nixpkgs/pkgs/applications/misc/birdtray/fix-qttranslations-path.diff
new file mode 100644
index 000000000000..2a379b5e2744
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/birdtray/fix-qttranslations-path.diff
@@ -0,0 +1,13 @@
+diff --git a/src/birdtrayapp.cpp b/src/birdtrayapp.cpp
+index 847b4d3..3a3709a 100644
+--- a/src/birdtrayapp.cpp
++++ b/src/birdtrayapp.cpp
+@@ -130,7 +130,7 @@ bool BirdtrayApp::loadTranslations() {
+             [](QString path) { return path.append("/translations"); });
+     QLocale locale = QLocale::system();
+     bool success = loadTranslation(
+-            qtTranslator, locale, "qt", {QLibraryInfo::location(QLibraryInfo::TranslationsPath)});
++            qtTranslator, locale, "qt", {QLatin1String("@qttranslations@/translations")});
+     success &= loadTranslation(dynamicTranslator, locale, "dynamic", locations);
+     success &= loadTranslation(mainTranslator, locale, "main", locations);
+     return success;
diff --git a/nixpkgs/pkgs/applications/misc/bleachbit/default.nix b/nixpkgs/pkgs/applications/misc/bleachbit/default.nix
new file mode 100644
index 000000000000..89686e50d175
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bleachbit/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv
+, python3Packages
+, fetchurl
+, gettext
+, gobject-introspection
+, wrapGAppsHook
+, glib
+, gtk3
+, libnotify
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "bleachbit";
+  version = "4.0.0";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "1dn3h6lr9ldbfpvgq9sdlk972sxhwalgj2f377qbqibm3yfxzpil";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    libnotify
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    chardet
+    pygobject3
+    requests
+    scandir
+  ];
+
+  # Patch the many hardcoded uses of /usr/share/ and /usr/bin
+  postPatch = ''
+    find -type f -exec sed -i -e 's@/usr/share@${placeholder "out"}/share@g' {} \;
+    find -type f -exec sed -i -e 's@/usr/bin@${placeholder "out"}/bin@g' {} \;
+  '';
+
+  dontBuild = true;
+
+  installFlags = [
+    "prefix=${placeholder "out"}"
+  ];
+
+  # prevent double wrapping from wrapGApps and wrapPythonProgram
+  dontWrapGApps = true;
+  makeWrapperArgs = [
+    "\${gappsWrapperArgs[@]}"
+  ];
+
+  strictDeps = false;
+
+  meta = with lib; {
+    homepage = "http://bleachbit.sourceforge.net";
+    description = "A program to clean your computer";
+    longDescription = "BleachBit helps you easily clean your computer to free space and maintain privacy.";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ leonardoce ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/blender/darwin.patch b/nixpkgs/pkgs/applications/misc/blender/darwin.patch
new file mode 100644
index 000000000000..bfbfb5e48e02
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blender/darwin.patch
@@ -0,0 +1,59 @@
+diff a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
+--- a/build_files/cmake/platform/platform_apple.cmake
++++ b/build_files/cmake/platform/platform_apple.cmake
+@@ -80,7 +80,6 @@ else()
+   message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
+ endif()
+ if(NOT EXISTS "${LIBDIR}/")
+-  message(FATAL_ERROR "Mac OSX requires pre-compiled libs at: '${LIBDIR}'")
+ endif()
+ 
+ # -------------------------------------------------------------------------
+@@ -112,10 +111,6 @@ if(WITH_CODEC_SNDFILE)
+   find_library(_sndfile_VORBIS_LIBRARY NAMES vorbis HINTS ${LIBDIR}/ffmpeg/lib)
+   find_library(_sndfile_VORBISENC_LIBRARY NAMES vorbisenc HINTS ${LIBDIR}/ffmpeg/lib)
+   list(APPEND LIBSNDFILE_LIBRARIES
+-    ${_sndfile_FLAC_LIBRARY}
+-    ${_sndfile_OGG_LIBRARY}
+-    ${_sndfile_VORBIS_LIBRARY}
+-    ${_sndfile_VORBISENC_LIBRARY}
+   )
+ 
+   print_found_status("SndFile libraries" "${LIBSNDFILE_LIBRARIES}")
+@@ -132,7 +127,7 @@ if(WITH_PYTHON)
+     # normally cached but not since we include them with blender
+     set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")
+     set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}m")
+-    set(PYTHON_LIBRARY ${LIBDIR}/python/lib/libpython${PYTHON_VERSION}m.a)
++    set(PYTHON_LIBRARY "${LIBDIR}/python/lib/libpython${PYTHON_VERSION}m.dylib")
+     set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
+     # set(PYTHON_LINKFLAGS "-u _PyMac_Error")  # won't  build with this enabled
+   else()
+@@ -173,9 +168,7 @@ endif()
+ if(WITH_CODEC_FFMPEG)
+   set(FFMPEG_FIND_COMPONENTS
+     avcodec avdevice avformat avutil
+-    mp3lame ogg opus swresample swscale
+-    theora theoradec theoraenc vorbis vorbisenc
+-    vorbisfile vpx x264 xvidcore)
++    swresample swscale)
+   find_package(FFmpeg)
+ endif()
+ 
+@@ -266,7 +259,6 @@ if(WITH_BOOST)
+ endif()
+ 
+ if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
+-  set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -liconv") # boost_locale and ffmpeg needs it !
+ endif()
+ 
+ if(WITH_OPENIMAGEIO)
+@@ -439,7 +431,7 @@ else()
+   set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic")
+ endif()
+ 
+-if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
++if(FALSE)
+   # Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
+   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
+ endif()
diff --git a/nixpkgs/pkgs/applications/misc/blender/default.nix b/nixpkgs/pkgs/applications/misc/blender/default.nix
new file mode 100644
index 000000000000..9921fdc7a797
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blender/default.nix
@@ -0,0 +1,159 @@
+{ config, stdenv, lib, fetchurl, fetchzip, boost, cmake, ffmpeg, gettext, glew
+, ilmbase, libXi, libX11, libXext, libXrender
+, libjpeg, libpng, libsamplerate, libsndfile
+, libtiff, libGLU, libGL, openal, opencolorio, openexr, openimagedenoise, openimageio2, openjpeg, python3Packages
+, openvdb, libXxf86vm, tbb, alembic
+, zlib, fftw, opensubdiv, freetype, jemalloc, ocl-icd, addOpenGLRunpath
+, jackaudioSupport ? false, libjack2
+, cudaSupport ? config.cudaSupport or false, cudatoolkit
+, colladaSupport ? true, opencollada
+, makeWrapper
+, pugixml, llvmPackages, SDL, Cocoa, CoreGraphics, ForceFeedback, OpenAL, OpenGL
+, embree, gmp
+}:
+
+with lib;
+let
+  python = python3Packages.python;
+  optix = fetchzip {
+    url = "https://developer.download.nvidia.com/redist/optix/v7.0/OptiX-7.0.0-include.zip";
+    sha256 = "1b3ccd3197anya2bj3psxdrvrpfgiwva5zfv2xmyrl73nb2dvfr7";
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "blender";
+  version = "2.91.0";
+
+  src = fetchurl {
+    url = "https://download.blender.org/source/${pname}-${version}.tar.xz";
+    sha256 = "0x396lgmk0dq9115yrc36s8zwxzmjr490sr5n2y6w27y17yllyjm";
+  };
+
+  patches = lib.optional stdenv.isDarwin ./darwin.patch;
+
+  nativeBuildInputs = [ cmake ] ++ optional cudaSupport addOpenGLRunpath;
+  buildInputs =
+    [ boost ffmpeg gettext glew ilmbase
+      freetype libjpeg libpng libsamplerate libsndfile libtiff
+      opencolorio openexr openimagedenoise openimageio2 openjpeg python zlib fftw jemalloc
+      alembic
+      (opensubdiv.override { inherit cudaSupport; })
+      tbb
+      makeWrapper
+      embree
+      gmp
+    ]
+    ++ (if (!stdenv.isDarwin) then [
+      libXi libX11 libXext libXrender
+      libGLU libGL openal
+      libXxf86vm
+      # OpenVDB currently doesn't build on darwin
+      openvdb
+    ]
+    else [
+      pugixml llvmPackages.openmp SDL Cocoa CoreGraphics ForceFeedback OpenAL OpenGL
+    ])
+    ++ optional jackaudioSupport libjack2
+    ++ optional cudaSupport cudatoolkit
+    ++ optional colladaSupport opencollada;
+
+  postPatch = ''
+    # allow usage of dynamically linked embree
+    rm build_files/cmake/Modules/FindEmbree.cmake
+  '' +
+    (if stdenv.isDarwin then ''
+      : > build_files/cmake/platform/platform_apple_xcode.cmake
+      substituteInPlace source/creator/CMakeLists.txt \
+        --replace '${"$"}{LIBDIR}/python' \
+                  '${python}' \
+        --replace '${"$"}{LIBDIR}/openmp' \
+                  '${llvmPackages.openmp}'
+      substituteInPlace build_files/cmake/platform/platform_apple.cmake \
+        --replace 'set(PYTHON_VERSION 3.7)' \
+                  'set(PYTHON_VERSION ${python.pythonVersion})' \
+        --replace '${"$"}{PYTHON_VERSION}m' \
+                  '${"$"}{PYTHON_VERSION}' \
+        --replace '${"$"}{LIBDIR}/python' \
+                  '${python}' \
+        --replace '${"$"}{LIBDIR}/opencollada' \
+                  '${opencollada}' \
+        --replace '${"$"}{PYTHON_LIBPATH}/site-packages/numpy' \
+                  '${python3Packages.numpy}/${python.sitePackages}/numpy'
+    '' else ''
+      substituteInPlace extern/clew/src/clew.c --replace '"libOpenCL.so"' '"${ocl-icd}/lib/libOpenCL.so"'
+    '');
+
+  cmakeFlags =
+    [
+      "-DWITH_ALEMBIC=ON"
+      "-DWITH_MOD_OCEANSIM=ON"
+      "-DWITH_CODEC_FFMPEG=ON"
+      "-DWITH_CODEC_SNDFILE=ON"
+      "-DWITH_INSTALL_PORTABLE=OFF"
+      "-DWITH_FFTW3=ON"
+      "-DWITH_SDL=OFF"
+      "-DWITH_OPENCOLORIO=ON"
+      "-DWITH_OPENSUBDIV=ON"
+      "-DPYTHON_LIBRARY=${python.libPrefix}"
+      "-DPYTHON_LIBPATH=${python}/lib"
+      "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}"
+      "-DPYTHON_VERSION=${python.pythonVersion}"
+      "-DWITH_PYTHON_INSTALL=OFF"
+      "-DWITH_PYTHON_INSTALL_NUMPY=OFF"
+      "-DPYTHON_NUMPY_PATH=${python3Packages.numpy}/${python.sitePackages}"
+      "-DWITH_OPENVDB=ON"
+      "-DWITH_TBB=ON"
+      "-DWITH_IMAGE_OPENJPEG=ON"
+      "-DWITH_OPENCOLLADA=${if colladaSupport then "ON" else "OFF"}"
+    ]
+    ++ optionals stdenv.isDarwin [
+      "-DWITH_CYCLES_OSL=OFF" # requires LLVM
+      "-DWITH_OPENVDB=OFF" # OpenVDB currently doesn't build on darwin
+
+      "-DLIBDIR=/does-not-exist"
+    ]
+    # Clang doesn't support "-export-dynamic"
+    ++ optional stdenv.cc.isClang "-DPYTHON_LINKFLAGS="
+    ++ optional jackaudioSupport "-DWITH_JACK=ON"
+    ++ optional cudaSupport [
+      "-DWITH_CYCLES_CUDA_BINARIES=ON"
+      "-DWITH_CYCLES_DEVICE_OPTIX=ON"
+      "-DOPTIX_ROOT_DIR=${optix}"
+    ];
+
+  NIX_CFLAGS_COMPILE = "-I${ilmbase.dev}/include/OpenEXR -I${python}/include/${python.libPrefix}";
+
+  # Since some dependencies are built with gcc 6, we need gcc 6's
+  # libstdc++ in our RPATH. Sigh.
+  NIX_LDFLAGS = optionalString cudaSupport "-rpath ${stdenv.cc.cc.lib}/lib";
+
+  blenderExecutable =
+    placeholder "out" + (if stdenv.isDarwin then "/Blender.app/Contents/MacOS/Blender" else "/bin/blender");
+  # --python-expr is used to workaround https://developer.blender.org/T74304
+  postInstall = ''
+    wrapProgram $blenderExecutable \
+      --prefix PYTHONPATH : ${python3Packages.numpy}/${python.sitePackages} \
+      --add-flags '--python-use-system-env'
+  '';
+
+  # Set RUNPATH so that libcuda and libnvrtc in /run/opengl-driver(-32)/lib can be
+  # found. See the explanation in libglvnd.
+  postFixup = optionalString cudaSupport ''
+    for program in $out/bin/blender $out/bin/.blender-wrapped; do
+      isELF "$program" || continue
+      addOpenGLRunpath "$program"
+    done
+  '';
+
+  meta = with lib; {
+    description = "3D Creation/Animation/Publishing System";
+    homepage = "https://www.blender.org";
+    # They comment two licenses: GPLv2 and Blender License, but they
+    # say: "We've decided to cancel the BL offering for an indefinite period."
+    # OptiX, enabled with cudaSupport, is non-free.
+    license = with licenses; [ gpl2Plus ] ++ optional cudaSupport unfree;
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ goibhniu veprbl ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/blender/fix-include.patch b/nixpkgs/pkgs/applications/misc/blender/fix-include.patch
new file mode 100644
index 000000000000..44e2147d073c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blender/fix-include.patch
@@ -0,0 +1,12 @@
+diff --git a/intern/smoke/intern/WAVELET_NOISE.h b/intern/smoke/intern/WAVELET_NOISE.h
+index fce901b..1f73c5e 100644
+--- a/intern/smoke/intern/WAVELET_NOISE.h
++++ b/intern/smoke/intern/WAVELET_NOISE.h
+@@ -43,6 +43,7 @@
+ #ifndef WAVELET_NOISE_H
+ #define WAVELET_NOISE_H
+ 
++#include <string.h>
+ #include <MERSENNETWISTER.h>
+ 
+ #ifdef WIN32
diff --git a/nixpkgs/pkgs/applications/misc/blogc/default.nix b/nixpkgs/pkgs/applications/misc/blogc/default.nix
new file mode 100644
index 000000000000..86d52625dc2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blogc/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, ronn, git, cmocka }:
+
+stdenv.mkDerivation rec {
+  pname = "blogc";
+  version = "0.20.1";
+
+  src = fetchFromGitHub {
+    owner = "blogc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YAwGgV5Vllz8JlIASbGIkdRzpciQbgPiXl5DjiSEJyE=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ ronn git cmocka ];
+
+  configureFlags = [
+    "--enable-git-receiver"
+    "--enable-make"
+    "--enable-runserver"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A blog compiler";
+    license = licenses.bsd3;
+    homepage = "https://blogc.rgm.io";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bluetooth_battery/default.nix b/nixpkgs/pkgs/applications/misc/bluetooth_battery/default.nix
new file mode 100644
index 000000000000..19c2f3b99a4d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bluetooth_battery/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, buildPythonApplication, pybluez }:
+
+buildPythonApplication rec {
+  pname = "bluetooth_battery";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "TheWeirdDev";
+    repo = "Bluetooth_Headset_Battery_Level";
+    rev = "v${version}";
+    sha256 = "121pkaq9z8p2i35cqs32aygjvf82r961w0axirpmsrbmrwq2hh6g";
+  };
+
+  propagatedBuildInputs = [ pybluez ];
+
+  format = "other";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/bluetooth_battery.py $out/bin/bluetooth_battery
+  '';
+
+  meta = with lib; {
+    description = "Fetch the battery charge level of some Bluetooth headsets";
+    homepage = "https://github.com/TheWeirdDev/Bluetooth_Headset_Battery_Level";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cheriimoya ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/blugon/default.nix b/nixpkgs/pkgs/applications/misc/blugon/default.nix
new file mode 100644
index 000000000000..d11a61e440fb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blugon/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, python3, libX11, libXrandr }:
+
+stdenv.mkDerivation rec {
+  pname = "blugon";
+  version = "1.12.1";
+
+  src = fetchFromGitHub {
+    owner = "jumper149";
+    repo = pname;
+    rev = version;
+    sha256 = "1i67v8jxvavgax3dwvns200iwwdcvgki04liq0x64q52lg0vrh7m";
+  };
+
+  buildInputs = [ python3 libX11 libXrandr ];
+
+  # Remove at next release
+  # https://github.com/jumper149/blugon/commit/d262cd05
+  postPatch = ''
+    sed -i 's,CC = gcc,CC ?= gcc,g' backends/scg/Makefile
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Simple and configurable Blue Light Filter for X";
+    longDescription = ''
+      blugon is a simple and fast Blue Light Filter, that is highly configurable and provides a command line interface.
+      The program can be run just once or as a daemon (manually or via systemd).
+      There are several different backends available.
+      blugon calculates the screen color from your local time and configuration.
+    '';
+    license = licenses.asl20;
+    homepage = "https://github.com/jumper149/blugon";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jumper149 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/break-time/default.nix b/nixpkgs/pkgs/applications/misc/break-time/default.nix
new file mode 100644
index 000000000000..05815e242f02
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/break-time/default.nix
@@ -0,0 +1,45 @@
+{ fetchFromGitHub
+, glib
+, gtk3
+, openssl
+, pkg-config
+, python3
+, rustPlatform
+, lib, stdenv
+, wrapGAppsHook
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "break-time";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "cdepillabout";
+    repo  = "break-time";
+    rev = "v${version}";
+    sha256 = "18p9gfp0inbnjsc7af38fghyklr7qnl2kkr25isfy9d5m8cpxqc6";
+  };
+
+  cargoSha256 = "0brmgrxhspcpcarm4lvnl95dw2n96r20w736giv18xcg7d5jmgca";
+
+  nativeBuildInputs = [
+    pkg-config
+    python3 # needed for Rust xcb package
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    openssl
+  ];
+
+  meta = with lib; {
+    description = "Break timer that forces you to take a break";
+    homepage    = "https://github.com/cdepillabout/break-time";
+    license     = with licenses; [ mit ];
+    maintainers = with maintainers; [ cdepillabout ];
+    platforms   = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/brewtarget/default.nix b/nixpkgs/pkgs/applications/misc/brewtarget/default.nix
new file mode 100644
index 000000000000..118245034500
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/brewtarget/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, bash
+, cmake
+, qtbase
+, qttools
+, qtmultimedia
+, qtwebkit
+, qtsvg
+}:
+
+mkDerivation rec {
+  pname = "brewtarget";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Brewtarget";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "14xmm6f8xmvypagx4qdw8q9llzmyi9zzfhnzh4kbbflhjbcr7isz";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ qtbase qttools qtmultimedia qtwebkit qtsvg ];
+
+  preConfigure = ''
+    chmod +x configure
+    substituteInPlace configure --replace /bin/bash "${bash}/bin/bash"
+  '';
+
+  meta = with lib; {
+    description = "Open source beer recipe creation tool";
+    homepage = "http://www.brewtarget.org/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.mmahut ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/buku/default.nix b/nixpkgs/pkgs/applications/misc/buku/default.nix
new file mode 100644
index 000000000000..772754ecc6d5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/buku/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, python3, fetchFromGitHub }:
+
+with python3.pkgs; buildPythonApplication rec {
+  version = "4.5";
+  pname = "buku";
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = "buku";
+    rev = "v${version}";
+    sha256 = "1lcq5fk8d5j2kfhn9m5l2hk46v7nj4vfa22m1psz35c9zpw4px8q";
+  };
+
+  checkInputs = [
+    pytestcov
+    hypothesis
+    pytest
+    pylint
+    flake8
+    pyyaml
+    mypy-extensions
+  ];
+
+  propagatedBuildInputs = [
+    cryptography
+    beautifulsoup4
+    requests
+    urllib3
+    flask
+    flask-admin
+    flask-api
+    flask-bootstrap
+    flask-paginate
+    flask-reverse-proxy-fix
+    flask_wtf
+    arrow
+    werkzeug
+    click
+    html5lib
+    vcrpy
+    toml
+  ];
+
+  postPatch = ''
+    # Jailbreak problematic dependencies
+    sed -i \
+      -e "s,'PyYAML.*','PyYAML',g" \
+      setup.py
+  '';
+
+  preCheck = ''
+    # Fixes two tests for wrong encoding
+    export PYTHONIOENCODING=utf-8
+
+    # Disables a test which requires internet
+    substituteInPlace tests/test_bukuDb.py \
+      --replace "@pytest.mark.slowtest" "@unittest.skip('skipping')" \
+      --replace "self.assertEqual(shorturl, 'http://tny.im/yt')" "" \
+      --replace "self.assertEqual(url, 'https://www.google.com')" ""
+    substituteInPlace setup.py \
+      --replace mypy-extensions==0.4.1 mypy-extensions>=0.4.1
+  '';
+
+  postInstall = ''
+    make install PREFIX=$out
+
+    mkdir -p $out/share/zsh/site-functions $out/share/bash-completion/completions $out/share/fish/vendor_completions.d
+    cp auto-completion/zsh/* $out/share/zsh/site-functions
+    cp auto-completion/bash/* $out/share/bash-completion/completions
+    cp auto-completion/fish/* $out/share/fish/vendor_completions.d
+  '';
+
+  meta = with lib; {
+    description = "Private cmdline bookmark manager";
+    homepage = "https://github.com/jarun/Buku";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ matthiasbeyer infinisil ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/calcurse/default.nix b/nixpkgs/pkgs/applications/misc/calcurse/default.nix
new file mode 100644
index 000000000000..ba8edb2baa50
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calcurse/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, ncurses, gettext, python3, python3Packages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "calcurse";
+  version = "4.7.0";
+
+  src = fetchurl {
+    url = "https://calcurse.org/files/${pname}-${version}.tar.gz";
+    sha256 = "0dc4bka2l9z03bnlygsnl06l1zi2wbn29rkc02b13x2kdab7arpg";
+  };
+
+  buildInputs = [ ncurses gettext python3 python3Packages.wrapPython ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    patchShebangs .
+    buildPythonPath ${python3Packages.httplib2}
+    patchPythonScript $out/bin/calcurse-caldav
+  '';
+
+  meta = with lib; {
+    description = "A calendar and scheduling application for the command line";
+    longDescription = ''
+      calcurse is a calendar and scheduling application for the command line. It helps
+      keep track of events, appointments and everyday tasks. A configurable notification
+      system reminds users of upcoming deadlines, the curses based interface can be
+      customized to suit user needs and a very powerful set of command line options can
+      be used to filter and format appointments, making it suitable for use in scripts.
+    '';
+    homepage = "https://calcurse.org/";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/calibre/default.nix b/nixpkgs/pkgs/applications/misc/calibre/default.nix
new file mode 100644
index 000000000000..d838cd4e859f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calibre/default.nix
@@ -0,0 +1,171 @@
+{ lib
+, mkDerivation
+, fetchurl
+, poppler_utils
+, pkg-config
+, libpng
+, imagemagick
+, libjpeg
+, fontconfig
+, podofo
+, qtbase
+, qmake
+, icu
+, sqlite
+, hunspell
+, hyphen
+, unrarSupport ? false
+, chmlib
+, pythonPackages
+, libusb1
+, libmtp
+, xdg_utils
+, makeDesktopItem
+, removeReferencesTo
+}:
+
+mkDerivation rec {
+  pname = "calibre";
+  version = "4.23.0";
+
+  src = fetchurl {
+    url = "https://download.calibre-ebook.com/${version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-Ft5RRzzw4zb5RqVyUaHk9Pu6H4V/F9j8FKoTLn61lRg=";
+  };
+
+  patches = [
+    # Patches from Debian that:
+    # - disable plugin installation (very insecure)
+    ./disable_plugins.patch
+    # - switches the version update from enabled to disabled by default
+    ./no_updates_dialog.patch
+    # the unrar patch is not from debian
+  ] ++ lib.optional (!unrarSupport) ./dont_build_unrar_plugin.patch;
+
+  prePatch = ''
+    sed -i "/pyqt_sip_dir/ s:=.*:= '${pythonPackages.pyqt5}/share/sip/PyQt5':"  \
+      setup/build_environment.py
+
+    # Remove unneeded files and libs
+    rm -rf resources/calibre-portable.* \
+           src/odf
+  '';
+
+  dontUseQmakeConfigure = true;
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkg-config qmake removeReferencesTo ];
+
+  CALIBRE_PY3_PORT = builtins.toString pythonPackages.isPy3k;
+
+  buildInputs = [
+    chmlib
+    fontconfig
+    hunspell
+    hyphen
+    icu
+    imagemagick
+    libjpeg
+    libmtp
+    libpng
+    libusb1
+    podofo
+    poppler_utils
+    qtbase
+    sqlite
+    xdg_utils
+  ] ++ (
+    with pythonPackages; [
+      apsw
+      beautifulsoup4
+      css-parser
+      cssselect
+      dateutil
+      dnspython
+      feedparser
+      html2text
+      html5-parser
+      lxml
+      markdown
+      mechanize
+      msgpack
+      netifaces
+      pillow
+      pyqt5
+      pyqtwebengine
+      python
+      regex
+      sip
+      # the following are distributed with calibre, but we use upstream instead
+      odfpy
+    ] ++ lib.optional (unrarSupport) unrardll
+  );
+
+  installPhase = ''
+    runHook preInstall
+
+    export HOME=$TMPDIR/fakehome
+    export POPPLER_INC_DIR=${poppler_utils.dev}/include/poppler
+    export POPPLER_LIB_DIR=${poppler_utils.out}/lib
+    export MAGICK_INC=${imagemagick.dev}/include/ImageMagick
+    export MAGICK_LIB=${imagemagick.out}/lib
+    export FC_INC_DIR=${fontconfig.dev}/include/fontconfig
+    export FC_LIB_DIR=${fontconfig.lib}/lib
+    export PODOFO_INC_DIR=${podofo.dev}/include/podofo
+    export PODOFO_LIB_DIR=${podofo.lib}/lib
+    export SIP_BIN=${pythonPackages.sip}/bin/sip
+    export XDG_DATA_HOME=$out/share
+    export XDG_UTILS_INSTALL_MODE="user"
+
+    ${pythonPackages.python.interpreter} setup.py install --root=$out \
+      --prefix=$out \
+      --libdir=$out/lib \
+      --staging-root=$out \
+      --staging-libdir=$out/lib \
+      --staging-sharedir=$out/share
+
+    PYFILES="$out/bin/* $out/lib/calibre/calibre/web/feeds/*.py
+      $out/lib/calibre/calibre/ebooks/metadata/*.py
+      $out/lib/calibre/calibre/ebooks/rtf2xml/*.py"
+
+    sed -i "s/env python[0-9.]*/python/" $PYFILES
+    sed -i "2i import sys; sys.argv[0] = 'calibre'" $out/bin/calibre
+
+    mkdir -p $out/share
+    cp -a man-pages $out/share/man
+
+    runHook postInstall
+  '';
+
+  # Wrap manually
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+
+  # Remove some references to shrink the closure size. This reference (as of
+  # 2018-11-06) was a single string like the following:
+  #   /nix/store/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-podofo-0.9.6-dev/include/podofo/base/PdfVariant.h
+  preFixup = ''
+    remove-references-to -t ${podofo.dev} \
+      $out/lib/calibre/calibre/plugins${lib.optionalString pythonPackages.isPy3k "/3"}/podofo.so
+
+    for program in $out/bin/*; do
+      wrapProgram $program \
+        ''${qtWrapperArgs[@]} \
+        ''${gappsWrapperArgs[@]} \
+        --prefix PYTHONPATH : $PYTHONPATH \
+        --prefix PATH : ${poppler_utils.out}/bin
+    done
+  '';
+
+  disallowedReferences = [ podofo.dev ];
+
+  meta = with lib; {
+    description = "Comprehensive e-book software";
+    homepage = "https://calibre-ebook.com";
+    license = with licenses; if unrarSupport then unfreeRedistributable else gpl3;
+    maintainers = with maintainers; [ domenkozar pSub AndersonTorres ];
+    platforms = platforms.linux;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/calibre/disable_plugins.patch b/nixpkgs/pkgs/applications/misc/calibre/disable_plugins.patch
new file mode 100644
index 000000000000..9ef1dd04251d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calibre/disable_plugins.patch
@@ -0,0 +1,17 @@
+Description: Disable plugin dialog. It uses a totally non-authenticated and non-trusted way of installing arbitrary code.
+Author: Martin Pitt <mpitt@debian.org>
+Bug-Debian: http://bugs.debian.org/640026
+
+Index: calibre-0.8.29+dfsg/src/calibre/gui2/actions/preferences.py
+===================================================================
+--- calibre-0.8.29+dfsg.orig/src/calibre/gui2/actions/preferences.py	2011-12-16 05:49:14.000000000 +0100
++++ calibre-0.8.29+dfsg/src/calibre/gui2/actions/preferences.py	2011-12-20 19:29:04.798468930 +0100
+@@ -28,8 +28,6 @@
+             pm.addAction(QIcon(I('config.png')), _('Preferences'), self.do_config)
+         cm('welcome wizard', _('Run welcome wizard'),
+                 icon='wizard.png', triggered=self.gui.run_wizard)
+-        cm('plugin updater', _('Get plugins to enhance calibre'),
+-                icon='plugins/plugin_updater.png', triggered=self.get_plugins)
+         if not DEBUG:
+             pm.addSeparator()
+             cm('restart', _('Restart in debug mode'), icon='debug.png',
diff --git a/nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch b/nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch
new file mode 100644
index 000000000000..5164b80a0bee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch
@@ -0,0 +1,12 @@
+diff --git a/src/calibre/ebooks/metadata/archive.py b/src/calibre/ebooks/metadata/archive.py
+index 938ab24..1e095f8 100644
+--- a/src/calibre/ebooks/metadata/archive.py
++++ b/src/calibre/ebooks/metadata/archive.py
+@@ -44,7 +44,7 @@
+     description = _('Extract common e-book formats from archive files '
+         '(ZIP/RAR). Also try to autodetect if they are actually '
+         'CBZ/CBR files.')
+-    file_types = {'zip', 'rar'}
++    file_types = {'zip'}
+     supported_platforms = ['windows', 'osx', 'linux']
+     on_import = True
diff --git a/nixpkgs/pkgs/applications/misc/calibre/no_updates_dialog.patch b/nixpkgs/pkgs/applications/misc/calibre/no_updates_dialog.patch
new file mode 100644
index 000000000000..faaaf2c19949
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calibre/no_updates_dialog.patch
@@ -0,0 +1,15 @@
+diff -burN calibre-2.9.0.orig/src/calibre/gui2/main.py calibre-2.9.0/src/calibre/gui2/main.py
+--- calibre-2.9.0.orig/src/calibre/gui2/main.py	2014-11-09 20:09:54.081231882 +0800
++++ calibre-2.9.0/src/calibre/gui2/main.py	2014-11-09 20:15:48.193033844 +0800
+@@ -37,8 +37,9 @@
+                       help=_('Start minimized to system tray.'))
+     parser.add_option('-v', '--verbose', default=0, action='count',
+                       help=_('Ignored, do not use. Present only for legacy reasons'))
+-    parser.add_option('--no-update-check', default=False, action='store_true',
+-            help=_('Do not check for updates'))
++    parser.add_option('--update-check', dest='no_update_check', default=True,
++            action='store_false',
++            help=_('Check for updates'))
+     parser.add_option('--ignore-plugins', default=False, action='store_true',
+             help=_('Ignore custom plugins, useful if you installed a plugin'
+                 ' that is preventing calibre from starting'))
diff --git a/nixpkgs/pkgs/applications/misc/candle/default.nix b/nixpkgs/pkgs/applications/misc/candle/default.nix
new file mode 100644
index 000000000000..d3357b41bd2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/candle/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, stdenv, fetchFromGitHub, qtbase, qtserialport, qmake }:
+
+mkDerivation rec {
+  pname = "candle";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner  = "Denvi";
+    repo   = "Candle";
+    rev    = "v${version}";
+    sha256 = "1gpx08gdz8awbsj6lsczwgffp19z3q0r2fvm72a73qd9az29pmm0";
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  sourceRoot = "source/src";
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 Candle $out/bin/candle
+    runHook postInstall
+  '';
+
+  buildInputs = [ qtbase qtserialport ];
+
+  meta = with lib; {
+    description = "GRBL controller application with G-Code visualizer written in Qt";
+    homepage = "https://github.com/Denvi/Candle";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ matti-kariluoma ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cardpeek/default.nix b/nixpkgs/pkgs/applications/misc/cardpeek/default.nix
new file mode 100644
index 000000000000..1d5baf9f6b34
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cardpeek/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook,
+  glib, gtk3, pcsclite, lua5_2, curl, readline }:
+let
+  version = "0.8.4";
+in
+  stdenv.mkDerivation {
+    pname = "cardpeek";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "L1L1";
+      repo = "cardpeek";
+      rev = "cardpeek-${version}";
+      sha256 = "1ighpl7nvcvwnsd6r5h5n9p95kclwrq99hq7bry7s53yr57l6588";
+    };
+
+    nativeBuildInputs = [ pkg-config autoreconfHook ];
+    buildInputs = [ glib gtk3 pcsclite lua5_2 curl readline ];
+
+    enableParallelBuilding = true;
+
+    meta = with lib; {
+      homepage = "https://github.com/L1L1/cardpeek";
+      description = "A tool to read the contents of ISO7816 smart cards";
+      license = licenses.gpl3Plus;
+      platforms = with platforms; linux ++ darwin;
+      maintainers = with maintainers; [ embr ];
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/misc/cataract/build.nix b/nixpkgs/pkgs/applications/misc/cataract/build.nix
new file mode 100644
index 000000000000..f894dc91bd8a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cataract/build.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv
+, fetchgit
+, autoreconfHook
+, glib
+, pkg-config
+, libxml2
+, exiv2
+, imagemagick
+, version
+, sha256
+, rev }:
+
+stdenv.mkDerivation {
+  inherit version;
+  pname = "cataract";
+
+  src = fetchgit {
+    url = "git://git.bzatek.net/cataract";
+    inherit sha256 rev;
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ glib libxml2 exiv2 imagemagick ];
+
+  prePatch = ''
+    sed -i 's|#include <exiv2/exif.hpp>|#include <exiv2/exiv2.hpp>|' src/jpeg-utils.cpp
+  '';
+
+  installPhase = ''
+    mkdir $out/{bin,share} -p
+    cp src/cgg{,-dirgen} $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "http://cgg.bzatek.net/";
+    description = "A simple static web photo gallery, designed to be clean and easily usable";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
+
+
diff --git a/nixpkgs/pkgs/applications/misc/cataract/default.nix b/nixpkgs/pkgs/applications/misc/cataract/default.nix
new file mode 100644
index 000000000000..3a9f20289227
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cataract/default.nix
@@ -0,0 +1,8 @@
+{ callPackage }:
+
+callPackage ./build.nix {
+  version = "1.1.0";
+  rev = "675e647dc8ae918d29f520a29be9201ae85a94dd";
+  sha256 = "13b9rvcy9k2ay8w36j28kc7f4lnxp4jc0494ck3xsmwgqsawmzdj";
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/cataract/unstable.nix b/nixpkgs/pkgs/applications/misc/cataract/unstable.nix
new file mode 100644
index 000000000000..397aed355a95
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cataract/unstable.nix
@@ -0,0 +1,8 @@
+{ callPackage }:
+
+callPackage ./build.nix {
+  version = "unstable-2016-10-18";
+  rev = "db3d992febbe703931840e9bdad95c43081694a5";
+  sha256 = "04f85piy675lq36w1mw6mw66n8911mmn4ifj8h9x47z8z806h3rf";
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/catclock/default.nix b/nixpkgs/pkgs/applications/misc/catclock/default.nix
new file mode 100644
index 000000000000..9c6b1812683a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/catclock/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, xlibsWrapper, motif }:
+
+stdenv.mkDerivation {
+  name = "catclock-2015-10-04";
+
+  src = fetchFromGitHub {
+    owner = "BarkyTheDog";
+    repo = "catclock";
+    rev = "d20b8825b38477a144e8a2a4bbd4779adb3620ac";
+    sha256 = "0fiv9rj8p8mifv24cxljdrrmh357q70zmzdci9bpbxnhs1gdpr63";
+  };
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+    cp xclock.man $out/share/man/man1/xclock.1
+  '';
+
+  makeFlags = [
+    "DESTINATION=$(out)/bin/"
+  ];
+
+  buildInputs = [ xlibsWrapper motif ];
+
+  meta = with lib; {
+    homepage = "http://codefromabove.com/2014/05/catclock/";
+    license = with licenses; mit;
+    maintainers = with maintainers; [ ramkromberg ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cbatticon/default.nix b/nixpkgs/pkgs/applications/misc/cbatticon/default.nix
new file mode 100644
index 000000000000..482bec9d0549
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cbatticon/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gettext, glib, gtk3, libnotify, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "cbatticon";
+  version = "1.6.10";
+
+  src = fetchFromGitHub {
+    owner = "valr";
+    repo = pname;
+    rev = version;
+    sha256 = "0ivm2dzhsa9ir25ry418r2qg2llby9j7a6m3arbvq5c3kaj8m9jr";
+  };
+
+  nativeBuildInputs = [ pkg-config gettext wrapGAppsHook ];
+
+  buildInputs =  [ glib gtk3 libnotify ];
+
+  patchPhase = ''
+    sed -i -e 's/ -Wno-format//g' Makefile
+  '';
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Lightweight and fast battery icon that sits in the system tray";
+    homepage = "https://github.com/valr/cbatticon";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.domenkozar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/charm/default.nix b/nixpkgs/pkgs/applications/misc/charm/default.nix
new file mode 100644
index 000000000000..becbbda8acff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/charm/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "charm";
+  version = "0.8.5";
+
+  src = fetchFromGitHub {
+    owner = "charmbracelet";
+    repo = "charm";
+    rev = "v${version}";
+    sha256 = "0cgl5dpyzc4lciij9q9yghppiclrdnrl1jsbizfgh2an3s18ab8k";
+  };
+
+  vendorSha256 = "1spzawnk2fslc1m14dp8lx4vpnxwz7xgm1hxbpz4bqlqz1hfd6ax";
+
+  doCheck = false;
+
+  buildFlagsArray = [ "-ldflags=" "-X=main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Manage your charm account on the CLI";
+    homepage = "https://github.com/charmbracelet/charm";
+    license = licenses.mit;
+    maintainers = with maintainers; [ penguwin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cheat/default.nix b/nixpkgs/pkgs/applications/misc/cheat/default.nix
new file mode 100644
index 000000000000..988af330deb5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cheat/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub
+, buildGoModule, installShellFiles }:
+
+buildGoModule rec {
+  pname = "cheat";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "cheat";
+    repo = "cheat";
+    rev = version;
+    sha256 = "sha256-Q/frWu82gB15LEzwYCbJr7k0yZ+AXBvcPWxoevSpeqU=";
+  };
+
+  subPackages = [ "cmd/cheat" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage doc/cheat.1
+    installShellCompletion scripts/cheat.{bash,fish,zsh}
+  '';
+
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Create and view interactive cheatsheets on the command-line";
+    maintainers = with maintainers; [ mic92 ];
+    license = with licenses; [ gpl3 mit ];
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cherrytree/default.nix b/nixpkgs/pkgs/applications/misc/cherrytree/default.nix
new file mode 100644
index 000000000000..c74ac5ffb306
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cherrytree/default.nix
@@ -0,0 +1,38 @@
+{ lib, fetchFromGitHub, pythonPackages, gettext }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "cherrytree";
+  version = "0.39.4";
+
+  src = fetchFromGitHub {
+    owner = "giuspen";
+    repo = "cherrytree";
+    rev = version;
+    sha256 = "1wycgn1f3b858qb6kn2bsaabak8n52qkpd24w54xz6fjizlnw7x0";
+
+  };
+
+  nativeBuildInputs = [ gettext ];
+
+  propagatedBuildInputs = with pythonPackages; [ pygtk dbus-python pygtksourceview ];
+
+  patches = [ ./subprocess.patch ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "An hierarchical note taking application";
+    longDescription = ''
+      Cherrytree is an hierarchical note taking application, featuring rich
+      text, syntax highlighting and powerful search capabilities. It organizes
+      all information in units called "nodes", as in a tree, and can be very
+      useful to store any piece of information, from tables and links to
+      pictures and even entire documents. All those little bits of information
+      you have scattered around your hard drive can be conveniently placed into
+      a Cherrytree document where you can easily find it.
+    '';
+    homepage = "http://www.giuspen.com/cherrytree";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cherrytree/subprocess.patch b/nixpkgs/pkgs/applications/misc/cherrytree/subprocess.patch
new file mode 100644
index 000000000000..1f80cde03b75
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cherrytree/subprocess.patch
@@ -0,0 +1,14 @@
+diff -Naur cherrytree-0.37.1-orig/setup.py cherrytree-0.37.1/setup.py
+--- cherrytree-0.37.1-orig/setup.py	2016-01-08 20:50:50.000000000 +0100
++++ cherrytree-0.37.1/setup.py	2016-07-05 20:30:27.768178682 +0200
+@@ -205,4 +205,9 @@
+           },
+        distclass=CherryTreeDist
+     )
+-    subprocess.call("update-desktop-database")
++    try:
++        subprocess.check_call(['update-desktop-database'])
++    except subprocess.CalledProcessError:
++        pass # handle errors in the called executable
++    except OSError:
++        pass # executable not found
diff --git a/nixpkgs/pkgs/applications/misc/chewing-editor/default.nix b/nixpkgs/pkgs/applications/misc/chewing-editor/default.nix
new file mode 100644
index 000000000000..fb5d9aed9596
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/chewing-editor/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, cmake, pkg-config, libchewing, qtbase
+, qttools }:
+
+mkDerivation rec {
+  pname = "chewing-editor";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "chewing";
+    repo = pname;
+    rev = version;
+    sha256 = "0kc2hjx1gplm3s3p1r5sn0cyxw3k1q4gyv08q9r6rs4sg7xh2w7w";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libchewing qtbase qttools ];
+
+  meta = with lib; {
+    description = "Cross platform chewing user phrase editor";
+    longDescription = ''
+      chewing-editor is a cross platform chewing user phrase editor. It provides a easy way to manage user phrase. With it, user can customize their user phrase to increase input performance.
+    '';
+    homepage = "https://github.com/chewing/chewing-editor";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.ShamrockLee ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/chrysalis/default.nix b/nixpkgs/pkgs/applications/misc/chrysalis/default.nix
new file mode 100644
index 000000000000..e79d989e22d8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/chrysalis/default.nix
@@ -0,0 +1,28 @@
+{ lib, appimageTools, fetchurl }:
+
+let
+  pname = "chrysalis";
+  version = "0.7.9";
+in appimageTools.wrapType2 rec {
+  name = "${pname}-${version}-binary";
+
+  src = fetchurl {
+    url = "https://github.com/keyboardio/${pname}/releases/download/${pname}-${version}/${pname}-${version}.AppImage";
+    sha256 = "12w4vv7dwfpvxpc8kpfas90y7yy8mb8dj2096z3vw1bli5lrn3zi";
+  };
+
+  multiPkgs = null;
+  extraPkgs = p: (appimageTools.defaultFhsEnvArgs.multiPkgs p) ++ [
+    p.glib
+  ];
+
+  extraInstallCommands = "mv $out/bin/${name} $out/bin/${pname}";
+
+  meta = with lib; {
+    description = "A graphical configurator for Kaleidoscope-powered keyboards";
+    homepage = "https://github.com/keyboardio/Chrysalis";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ aw ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cipher/default.nix b/nixpkgs/pkgs/applications/misc/cipher/default.nix
new file mode 100644
index 000000000000..eab1185edd81
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cipher/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, meson
+, ninja
+, vala
+, pkg-config
+, pantheon
+, python3
+, gettext
+, glib
+, gtk3
+, libgee
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "cipher";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "arshubham";
+    repo = "cipher";
+    rev = version;
+    sha256 = "00azc5ck17zkdypfza6x1viknwhimd9fqgk2ybff3mx6aphmla7a";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    pantheon.granite
+    libgee
+  ];
+
+  postPatch = ''
+    substituteInPlace data/com.github.arshubham.cipher.desktop.in \
+      --replace "gio" "${glib.bin}/bin/gio"
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "A simple application for encoding and decoding text, designed for elementary OS";
+    homepage = "https://github.com/arshubham/cipher";
+    maintainers = with maintainers; [ xiorcale ] ++ pantheon.maintainers;
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cli-visualizer/default.nix b/nixpkgs/pkgs/applications/misc/cli-visualizer/default.nix
new file mode 100644
index 000000000000..74dd82a3c6e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cli-visualizer/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, cmake, fftw, ncurses5, libpulseaudio, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "1.8";
+  pname = "cli-visualizer";
+
+  src = fetchFromGitHub {
+    owner = "dpayne";
+    repo = "cli-visualizer";
+    rev = "v${version}";
+    sha256 = "003mbbwsz43mg3d7llphpypqa9g7rs1p1cdbqi1mbc2bfrc1gcq2";
+  };
+
+  postPatch = ''
+    sed '1i#include <cmath>' -i src/Transformer/SpectrumCircleTransformer.cpp
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ fftw ncurses5 libpulseaudio makeWrapper ];
+
+  buildFlags = [ "ENABLE_PULSE=1" ];
+
+  postInstall = ''
+    # See https://github.com/dpayne/cli-visualizer/issues/62#issuecomment-330738075
+    wrapProgram $out/bin/vis --set TERM rxvt-256color
+  '';
+
+  meta = {
+    homepage = "https://github.com/dpayne/cli-visualizer";
+    description = "CLI based audio visualizer";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.matthiasbeyer ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clight/clightd.nix b/nixpkgs/pkgs/applications/misc/clight/clightd.nix
new file mode 100644
index 000000000000..51c61ca28e7a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clight/clightd.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchFromGitHub
+, dbus, cmake, pkg-config
+, glib, udev, polkit, libmodule
+, pcre, libXdmcp, util-linux, libpthreadstubs
+, enableDdc ? true, ddcutil
+, enableDpms ? true, libXext
+, enableGamma ? true, libXrandr
+, enableScreen ? true }:
+
+stdenv.mkDerivation rec {
+  pname = "clightd";
+  version = "4.2";
+
+  src = fetchFromGitHub {
+    owner = "FedeDP";
+    repo = "Clightd";
+    rev = version;
+    sha256 = "07z1m1x7nnczd51sg7m2lb6rb2c37c8glsnbrlq44hx176sj9cmj";
+  };
+
+  # dbus-1.pc has datadir=/etc
+  SYSTEM_BUS_DIR = "${placeholder "out"}/share/dbus-1/system-services";
+  # systemd.pc has prefix=${systemd.out}
+  MODULE_LOAD_DIR = "${placeholder "out"}/lib/modules-load.d";
+  # polkit-gobject-1.pc has prefix=${polkit.out}
+  POLKIT_ACTION_DIR = "${placeholder "out"}/share/polkit-1/actions";
+
+  postPatch = ''
+    sed -i "s@/etc@$out\0@" CMakeLists.txt
+    sed -i "s@pkg_get_variable(SYSTEM_BUS_DIR.*@set(SYSTEM_BUS_DIR $SYSTEM_BUS_DIR)@" CMakeLists.txt
+    sed -i "s@pkg_get_variable(MODULE_LOAD_DIR.*@set(MODULE_LOAD_DIR $MODULE_LOAD_DIR)@" CMakeLists.txt
+    sed -i "s@pkg_get_variable(POLKIT_ACTION_DIR.*@set(POLKIT_ACTION_DIR $POLKIT_ACTION_DIR)@" CMakeLists.txt
+  '';
+
+  cmakeFlags = with lib;
+     optional enableDdc "-DENABLE_DDC=1"
+  ++ optional enableDpms "-DENABLE_DPMS=1"
+  ++ optional enableGamma "-DENABLE_GAMMA=1"
+  ++ optional enableScreen "-DENABLE_SCREEN=1";
+
+  nativeBuildInputs = [
+    dbus
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = with lib; [
+    glib
+    udev
+    polkit
+    libmodule
+
+    pcre
+    libXdmcp
+    util-linux
+    libpthreadstubs
+  ] ++ optional enableDdc ddcutil
+    ++ optional enableDpms libXext
+    ++ optional enableGamma libXrandr;
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -svT $out/lib/clightd/clightd $out/bin/clightd
+  '';
+
+  meta = with lib; {
+    description = "Linux bus interface that changes screen brightness/temperature";
+    homepage = "https://github.com/FedeDP/Clightd";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [
+      eadwu
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clight/default.nix b/nixpkgs/pkgs/applications/misc/clight/default.nix
new file mode 100644
index 000000000000..6ef2e886a190
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clight/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchFromGitHub
+, dbus, cmake, pkg-config, bash-completion
+, gsl, popt, clightd, systemd, libconfig, libmodule
+, withGeoclue ? true, geoclue2
+, withUpower ? true, upower }:
+
+stdenv.mkDerivation rec {
+  pname = "clight";
+  version = "4.1";
+
+  src = fetchFromGitHub {
+    owner = "FedeDP";
+    repo = "Clight";
+    rev = version;
+    sha256 = "1j7va217g1k8lxl3lly13js8myf0shjc6knalq8q6lakc6j1mkxx";
+  };
+
+  # bash-completion.pc completionsdir=${bash-completion.out}
+  COMPLETIONS_DIR = "${placeholder "out"}/share/bash-completions/completions";
+  # dbus-1.pc has datadir=/etc
+  SESSION_BUS_DIR = "${placeholder "out"}/share/dbus-1/services";
+
+  postPatch = ''
+    sed -i "s@/usr@$out@" CMakeLists.txt
+    sed -i "s@/etc@$out\0@" CMakeLists.txt
+    sed -i "s@pkg_get_variable(COMPLETIONS_DIR.*@set(COMPLETIONS_DIR $COMPLETIONS_DIR)@" CMakeLists.txt
+    sed -i "s@pkg_get_variable(SESSION_BUS_DIR.*@set(SESSION_BUS_DIR $SESSION_BUS_DIR)@" CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [
+    dbus
+    cmake
+    pkg-config
+    bash-completion
+  ];
+
+  buildInputs = with lib; [
+    gsl
+    popt
+    upower
+    clightd
+    systemd
+    geoclue2
+    libconfig
+    libmodule
+  ] ++ optional withGeoclue geoclue2
+    ++ optional withUpower upower;
+
+  meta = with lib; {
+    description = "A C daemon that turns your webcam into a light sensor";
+    homepage = "https://github.com/FedeDP/Clight";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [
+      eadwu
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clipcat/default.nix b/nixpkgs/pkgs/applications/misc/clipcat/default.nix
new file mode 100644
index 000000000000..80e4982fc8a0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clipcat/default.nix
@@ -0,0 +1,64 @@
+{ lib, fetchFromGitHub, installShellFiles, rustPlatform, rustfmt, xorg
+, pkg-config, llvmPackages, clang, protobuf, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "clipcat";
+  version = "0.4.19";
+
+  src = fetchFromGitHub {
+    owner = "xrelkd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1lhnm521qqy3aw2iyk1dv4yc5ms0c5x5iipx96bz6v6y0cnmf4kw";
+  };
+
+  cargoSha256 = "04iflyvz8g53z658rkxafiyi2m9kzxwl3p1xgkjq7vacmz5jk15c";
+
+  LIBCLANG_PATH = "${llvmPackages.libclang}/lib";
+
+  # needed for internal protobuf c wrapper library
+  PROTOC = "${protobuf}/bin/protoc";
+  PROTOC_INCLUDE = "${protobuf}/include";
+
+  nativeBuildInputs = [
+    pkg-config
+
+    clang
+    llvmPackages.libclang
+
+    rustfmt
+    protobuf
+
+    python3
+
+    installShellFiles
+  ];
+  buildInputs = [ xorg.libxcb ];
+
+  cargoBuildFlags = [ "--features=all" ];
+
+  postInstall = ''
+    installShellCompletion --bash --name clipcatd             completions/bash-completion/completions/clipcatd
+    installShellCompletion --fish --name clipcatd.fish        completions/fish/completions/clipcatd.fish
+    installShellCompletion --zsh  --name _clipcatd            completions/zsh/site-functions/_clipcatd
+
+    installShellCompletion --bash --name clipcatctl           completions/bash-completion/completions/clipcatctl
+    installShellCompletion --fish --name clipcatctl.fish      completions/fish/completions/clipcatctl.fish
+    installShellCompletion --zsh  --name _clipcatctl          completions/zsh/site-functions/_clipcatctl
+
+    installShellCompletion --bash --name clipcat-menu         completions/bash-completion/completions/clipcat-menu
+    installShellCompletion --fish --name clipcat-menu.fish    completions/fish/completions/clipcat-menu.fish
+    installShellCompletion --zsh  --name _clipcat-menu        completions/zsh/site-functions/_clipcat-menu
+
+    installShellCompletion --bash --name clipcat-notify       completions/bash-completion/completions/clipcat-notify
+    installShellCompletion --fish --name clipcat-notify.fish  completions/fish/completions/clipcat-notify.fish
+    installShellCompletion --zsh  --name _clipcat-notify      completions/zsh/site-functions/_clipcat-notify
+  '';
+
+  meta = with lib; {
+    description = "Clipboard Manager written in Rust Programming Language";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ xrelkd ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clipit/default.nix b/nixpkgs/pkgs/applications/misc/clipit/default.nix
new file mode 100644
index 000000000000..630ee3c36830
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clipit/default.nix
@@ -0,0 +1,35 @@
+{ fetchFromGitHub, fetchpatch, lib, stdenv
+, autoreconfHook, intltool, pkg-config
+, gtk3, libayatana-appindicator, xdotool, which, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "clipit";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "CristianHenzel";
+    repo = "ClipIt";
+    rev = "45e2ea386d04dbfc411ea370299502450d589d0c";
+    sha256 = "0byqz9hanwmdc7i55xszdby2iqrk93lws7hmjda2kv17g34apwl7";
+  };
+
+  preConfigure = ''
+    intltoolize --copy --force --automake
+  '';
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook autoreconfHook intltool ];
+  configureFlags = [ "--with-gtk3" "--enable-appindicator=yes" ];
+  buildInputs = [ gtk3 libayatana-appindicator ];
+
+  gappsWrapperArgs = [
+    "--prefix" "PATH" ":" "${lib.makeBinPath [ xdotool which ]}"
+  ];
+
+  meta = with lib; {
+    description = "Lightweight GTK Clipboard Manager";
+    inherit (src.meta) homepage;
+    license     = licenses.gpl3;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ kamilchm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clipmenu/default.nix b/nixpkgs/pkgs/applications/misc/clipmenu/default.nix
new file mode 100644
index 000000000000..e3a0046205e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clipmenu/default.nix
@@ -0,0 +1,49 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, clipnotify
+, coreutils
+, dmenu
+, gawk
+, util-linux
+, xdotool
+, xsel
+}:
+stdenv.mkDerivation rec {
+  pname = "clipmenu";
+  version = "6.2.0";
+
+  src = fetchFromGitHub {
+    owner  = "cdown";
+    repo   = "clipmenu";
+    rev    = version;
+    sha256 = "sha256-nvctEwyho6kl4+NXi76jT2kG7nchmI2a7mgxlgjXA5A=";
+  };
+
+  postPatch = ''
+    sed -i init/clipmenud.service \
+      -e "s,/usr/bin,$out/bin,"
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildInputs = [ makeWrapper ];
+  nativeBuildInputs = [ xsel clipnotify ];
+
+  postFixup = ''
+    sed -i "$out/bin/clipctl" -e 's,clipmenud\$,\.clipmenud-wrapped\$,'
+
+    wrapProgram "$out/bin/clipmenu" \
+      --prefix PATH : "${lib.makeBinPath [ xsel ]}"
+
+    wrapProgram "$out/bin/clipmenud" \
+      --set PATH "${lib.makeBinPath [ clipnotify coreutils gawk util-linux xdotool xsel ]}"
+  '';
+
+  meta = with lib; {
+    description = "Clipboard management using dmenu";
+    inherit (src.meta) homepage;
+    maintainers = with maintainers; [ jb55 ];
+    license = licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cmatrix/default.nix b/nixpkgs/pkgs/applications/misc/cmatrix/default.nix
new file mode 100644
index 000000000000..8008edf09969
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cmatrix/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "cmatrix";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "abishekvashok";
+    repo = "cmatrix";
+    rev = "v${version}";
+    sha256 = "1h9jz4m4s5l8c3figaq46ja0km1gimrkfxm4dg7mf4s84icmasbm";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    description = "Simulates the falling characters theme from The Matrix movie";
+    license = licenses.gpl3;
+    longDescription = ''
+      CMatrix simulates the display from "The Matrix" and is based
+      on the screensaver from the movie's website.
+    '';
+    homepage = "https://github.com/abishekvashok/cmatrix";
+    platforms = ncurses.meta.platforms;
+    maintainers = [ maintainers.AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cointop/default.nix b/nixpkgs/pkgs/applications/misc/cointop/default.nix
new file mode 100644
index 000000000000..e57ffd352717
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cointop/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "cointop";
+  version = "1.5.5";
+
+  src = fetchFromGitHub {
+    owner = "miguelmota";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "051jxa07c58ym1w0mwckwxh60v28gqcpqw5nv8sm5wxil1crcayr";
+  };
+
+  goPackagePath = "github.com/miguelmota/cointop";
+
+  buildFlagsArray = [ "-ldflags=-s -w -X ${goPackagePath}/cointop.version=${version}" ];
+
+  meta = with lib; {
+    description = "The fastest and most interactive terminal based UI application for tracking cryptocurrencies";
+    longDescription = ''
+      cointop is a fast and lightweight interactive terminal based UI
+      application for tracking and monitoring cryptocurrency coin stats in
+      real-time.
+
+      The interface is inspired by htop and shortcut keys are inspired by vim.
+    '';
+    homepage = "https://cointop.sh";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/colort/default.nix b/nixpkgs/pkgs/applications/misc/colort/default.nix
new file mode 100644
index 000000000000..a4283e5ebb93
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/colort/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  name = "colort-unstable-2017-03-12";
+
+  src = fetchFromGitHub {
+    owner = "neeasade";
+    repo = "colort";
+    rev = "8470190706f358dc807b4c26ec3453db7f0306b6";
+    sha256 = "10n8rbr2h6hz86hcx73f86pjbbfiaw2rvxsk0yfajnma7bpxgdxw";
+  };
+
+  makeFlags = ["PREFIX=$(out)"];
+
+  meta = with lib; {
+    description = "A program for 'tinting' color values";
+    homepage = "https://github.com/neeasade/colort";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.neeasade ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/confclerk/default.nix b/nixpkgs/pkgs/applications/misc/confclerk/default.nix
new file mode 100644
index 000000000000..fb89d2a7e373
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/confclerk/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, qt4, qmake4Hook }:
+
+let version = "0.6.4"; in
+stdenv.mkDerivation {
+  pname = "confclerk";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://www.toastfreeware.priv.at/tarballs/confclerk/confclerk-${version}.tar.gz";
+    sha256 = "10rhg44px4nvbkd3p341cmp2ds43jn8r4rvgladda9v8zmsgr2b3";
+  };
+
+  buildInputs = [ qt4 ];
+
+  nativeBuildInputs = [ qmake4Hook ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp src/bin/confclerk $out/bin
+  '';
+
+  meta = {
+    description = "Offline conference schedule viewer";
+    homepage = "http://www.toastfreeware.priv.at/confclerk";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ ehmry ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/coolreader/default.nix b/nixpkgs/pkgs/applications/misc/coolreader/default.nix
new file mode 100644
index 000000000000..d3f3eb6fcf5a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/coolreader/default.nix
@@ -0,0 +1,26 @@
+{ mkDerivation, fetchFromGitHub, cmake, pkg-config, lib,
+  qttools, fribidi, libunibreak }:
+
+mkDerivation rec {
+  pname = "coolreader";
+  version = "3.2.49";
+
+  src = fetchFromGitHub {
+    owner = "buggins";
+    repo = pname;
+    rev = "cr${version}";
+    sha256 = "10i3w4zjlilz3smjzbwm50d91ns3w0wlgmsf38fn2lv76zczv8ia";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ qttools fribidi libunibreak ];
+
+  meta = with lib; {
+    homepage = "https://github.com/buggins/coolreader";
+    description = "Cross platform open source e-book reader";
+    license = licenses.gpl2Plus; # see https://github.com/buggins/coolreader/issues/80
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/copyq/default.nix b/nixpkgs/pkgs/applications/misc/copyq/default.nix
new file mode 100644
index 000000000000..de1dacd50c2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/copyq/default.nix
@@ -0,0 +1,32 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake
+, qtbase, qtscript, qtwebkit, libXfixes, libXtst, qtx11extras, git
+, webkitSupport ? true
+}:
+
+mkDerivation rec {
+  pname = "CopyQ";
+  version = "3.13.0";
+
+  src  = fetchFromGitHub {
+    owner = "hluk";
+    repo = "CopyQ";
+    rev = "v${version}";
+    sha256 = "0qssyavx0dkgsyj2myqg8n7sih8niy960nyb1yknsbjm37iqraah";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    git qtbase qtscript libXfixes libXtst qtx11extras
+  ] ++ lib.optional webkitSupport qtwebkit;
+
+  meta = with lib; {
+    homepage    = "https://hluk.github.io/CopyQ";
+    description = "Clipboard Manager with Advanced Features";
+    license     = licenses.gpl3;
+    maintainers = [ maintainers.willtim ];
+    # NOTE: CopyQ supports windows and osx, but I cannot test these.
+    # OSX build requires QT5.
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/corectrl/default.nix b/nixpkgs/pkgs/applications/misc/corectrl/default.nix
new file mode 100644
index 000000000000..f213faa44124
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/corectrl/default.nix
@@ -0,0 +1,74 @@
+{ lib, stdenv
+, fetchFromGitLab
+, extra-cmake-modules
+, botan2
+, karchive
+, kauth
+, libdrm
+, mesa-demos
+, procps
+, util-linux
+, vulkan-tools
+, qtbase
+, qtcharts
+, qtquickcontrols2
+, qtsvg
+, qttools
+, qtxmlpatterns
+, wrapQtAppsHook
+} :
+
+stdenv.mkDerivation rec{
+  pname = "corectrl";
+  version = "1.1.1";
+
+  src = fetchFromGitLab {
+    owner = "corectrl";
+    repo = "corectrl";
+    rev = "v${version}";
+    sha256 = "sha256-YQDrxPqCa3OzNKd3UiAffqqvOrgbXmDFJGjYPetolyY=";
+  };
+
+  nativeBuildInputs = [
+    extra-cmake-modules
+    wrapQtAppsHook
+  ];
+  buildInputs = [
+    botan2
+    karchive
+    kauth
+    libdrm
+    mesa-demos
+    procps
+    util-linux
+    vulkan-tools
+    qtbase
+    qtcharts
+    qtquickcontrols2
+    qtsvg
+    qttools
+    qtxmlpatterns
+  ];
+
+  runtimeDeps = [ mesa-demos vulkan-tools ];
+  binPath = lib.makeBinPath runtimeDeps;
+
+  dontWrapQtApps = true;
+
+  postInstall = ''
+    wrapQtApp $out/bin/corectrl --prefix PATH ":" ${binPath}
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/corectrl/corectrl/";
+    description = "Control your computer hardware via application profiles";
+    longDescription = ''
+      CoreCtrl is a Free and Open Source GNU/Linux application that allows you
+      to control with ease your computer hardware using application profiles. It
+      aims to be flexible, comfortable and accessible to regular users.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
+# TODO: report upstream that libdrm is not detected at configure time
diff --git a/nixpkgs/pkgs/applications/misc/coursera-dl/default.nix b/nixpkgs/pkgs/applications/misc/coursera-dl/default.nix
new file mode 100644
index 000000000000..631d53b506fc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/coursera-dl/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, glibcLocales, pandoc, python3 }:
+
+let
+  pythonPackages = python3.pkgs;
+
+in pythonPackages.buildPythonApplication rec {
+  pname = "coursera-dl";
+  version = "0.11.5";
+
+  src = fetchFromGitHub {
+    owner = "coursera-dl";
+    repo = "coursera-dl";
+    rev = version;
+    sha256 = "0akgwzrsx094jj30n4bd2ilwgva4qxx38v3bgm69iqfxi8c2bqbk";
+  };
+
+  nativeBuildInputs = with pythonPackages; [ pandoc ];
+
+  buildInputs = with pythonPackages; [ glibcLocales ];
+
+  propagatedBuildInputs = with pythonPackages; [ attrs beautifulsoup4 ConfigArgParse keyring pyasn1 requests six urllib3 ];
+
+  checkInputs = with pythonPackages; [ pytest mock ];
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace '==' '>='
+  '';
+
+  preConfigure = ''
+    export LC_ALL=en_US.utf-8
+  '';
+
+  checkPhase = ''
+    # requires dbus service
+    py.test -k 'not test_get_credentials_with_keyring' .
+  '';
+
+  meta = with lib; {
+    description = "CLI for downloading Coursera.org videos and naming them";
+    homepage = "https://github.com/coursera-dl/coursera-dl";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ alexfmpe ];
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cpu-x/default.nix b/nixpkgs/pkgs/applications/misc/cpu-x/default.nix
new file mode 100644
index 000000000000..d0ef6f05aebd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cpu-x/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, gtk3, ncurses
+, libcpuid, pciutils, procps, wrapGAppsHook, nasm, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "cpu-x";
+  version = "4.0.1";
+
+  src = fetchFromGitHub {
+    owner = "X0rg";
+    repo = "CPU-X";
+    rev = "v${version}";
+    sha256 = "191zkkswlbbsw492yygc3idf7wh3bxs97drrqvqqw0mqvrzykxm3";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config wrapGAppsHook nasm makeWrapper ];
+  buildInputs = [
+    gtk3 ncurses libcpuid pciutils procps
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cpu-x \
+      --prefix PATH : ${lib.makeBinPath [ stdenv.cc ]}
+  '';
+
+  meta = with lib; {
+    description = "Free software that gathers information on CPU, motherboard and more";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ gnidorah ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/crow-translate/default.nix b/nixpkgs/pkgs/applications/misc/crow-translate/default.nix
new file mode 100644
index 000000000000..7b9d7faba940
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/crow-translate/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, mkDerivation
+, fetchFromGitHub
+, substituteAll
+, cmake
+, extra-cmake-modules
+, qttools
+, leptonica
+, tesseract4
+, qtmultimedia
+, qtx11extras
+, qttranslations
+}:
+let
+  singleapplication = fetchFromGitHub {
+    owner = "itay-grudev";
+    repo = "SingleApplication";
+    rev = "v3.2.0";
+    sha256 = "0w3z97dcqcz3bf7w6fja4smkafmx9kvhzb9px4k2nfmmyxh4yfma";
+  };
+  qtaskbarcontrol = fetchFromGitHub {
+    owner = "Skycoder42";
+    repo = "QTaskbarControl";
+    rev = "2.0.2";
+    sha256 = "0iymcvq3pv07fs9l4kh6hi1igqr7957iqndhsmg9fqkalf8nqyad";
+  };
+  qhotkey = fetchFromGitHub {
+    owner = "Skycoder42";
+    repo = "QHotkey";
+    rev = "1.4.2";
+    sha256 = "0391fkqrxqmzpvms4rk06aq05l308k6sadp6y3czq0gx2kng8mn9";
+  };
+  qonlinetranslator = fetchFromGitHub {
+    owner = "crow-translate";
+    repo = "QOnlineTranslator";
+    rev = "1.4.1";
+    sha256 = "1c6a8mdxms5vh8l7shi2kqdhafbzm50pbz6g1hhgg6qslla0vfn0";
+  };
+in
+mkDerivation rec {
+  pname = "crow-translate";
+  version = "2.6.2";
+
+  src = fetchFromGitHub {
+    owner = "crow-translate";
+    repo = "crow-translate";
+    rev = version;
+    sha256 = "1jgpqynmxmh6mrknpk5fh96lbdg799axp4cyn5rvalg3sdxajmqc";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./dont-fetch-external-libs.patch;
+      inherit singleapplication qtaskbarcontrol qhotkey qonlinetranslator;
+    })
+    (substituteAll {
+      # See https://github.com/NixOS/nixpkgs/issues/86054
+      src = ./fix-qttranslations-path.patch;
+      inherit qttranslations;
+    })
+  ];
+
+  nativeBuildInputs = [ cmake extra-cmake-modules qttools ];
+
+  buildInputs = [ leptonica tesseract4 qtmultimedia qtx11extras ];
+
+  meta = with lib; {
+    description = "A simple and lightweight translator that allows to translate and speak text using Google, Yandex and Bing";
+    homepage = "https://crow-translate.github.io/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/crow-translate/dont-fetch-external-libs.patch b/nixpkgs/pkgs/applications/misc/crow-translate/dont-fetch-external-libs.patch
new file mode 100644
index 000000000000..b5f8d4606aa0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/crow-translate/dont-fetch-external-libs.patch
@@ -0,0 +1,33 @@
+diff --git i/cmake/ExternalLibraries.cmake w/cmake/ExternalLibraries.cmake
+index d8c88ae..47a12c0 100644
+--- i/cmake/ExternalLibraries.cmake
++++ w/cmake/ExternalLibraries.cmake
+@@ -2,24 +2,20 @@ include(FetchContent)
+ 
+ set(QAPPLICATION_CLASS QApplication)
+ FetchContent_Declare(SingleApplication
+-    GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication
+-    GIT_TAG v3.2.0
++    SOURCE_DIR @singleapplication@
+ )
+ 
+ FetchContent_Declare(QTaskbarControl
+-    GIT_REPOSITORY https://github.com/Skycoder42/QTaskbarControl
+-    GIT_TAG 2.0.2
++    SOURCE_DIR @qtaskbarcontrol@
+ )
+ 
+ option(QHOTKEY_INSTALL OFF)
+ FetchContent_Declare(QHotkey
+-    GIT_REPOSITORY https://github.com/Skycoder42/QHotkey
+-    GIT_TAG 1.4.2
++    SOURCE_DIR @qhotkey@
+ )
+ 
+ FetchContent_Declare(QOnlineTranslator
+-    GIT_REPOSITORY https://github.com/crow-translate/QOnlineTranslator
+-    GIT_TAG 1.4.1
++    SOURCE_DIR @qonlinetranslator@
+ )
+ 
+ FetchContent_MakeAvailable(SingleApplication QTaskbarControl QHotkey QOnlineTranslator)
diff --git a/nixpkgs/pkgs/applications/misc/crow-translate/fix-qttranslations-path.patch b/nixpkgs/pkgs/applications/misc/crow-translate/fix-qttranslations-path.patch
new file mode 100644
index 000000000000..816b6c51886a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/crow-translate/fix-qttranslations-path.patch
@@ -0,0 +1,13 @@
+diff --git i/src/settings/appsettings.cpp w/src/settings/appsettings.cpp
+index 7be4573..e65994e 100644
+--- i/src/settings/appsettings.cpp
++++ w/src/settings/appsettings.cpp
+@@ -82,7 +82,7 @@ void AppSettings::applyLanguage(QLocale::Language lang)
+         QLocale::setDefault(QLocale(lang));
+ 
+     s_appTranslator.load(QLocale(), QStringLiteral(PROJECT_NAME), QStringLiteral("_"), QStandardPaths::locate(QStandardPaths::AppDataLocation, QStringLiteral("translations"), QStandardPaths::LocateDirectory));
+-    s_qtTranslator.load(QLocale(), QStringLiteral("qt"), QStringLiteral("_"), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
++    s_qtTranslator.load(QLocale(), QStringLiteral("qt"), QStringLiteral("_"), QLatin1String("@qttranslations@/translations"));
+ }
+ 
+ QLocale::Language AppSettings::defaultLanguage()
diff --git a/nixpkgs/pkgs/applications/misc/crumbs/default.nix b/nixpkgs/pkgs/applications/misc/crumbs/default.nix
new file mode 100644
index 000000000000..5bb422058168
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/crumbs/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "crumbs";
+  version = "0.0.3";
+
+  src = fetchFromGitHub
+    { owner = "fasseg";
+      repo = "crumbs";
+      rev = version;
+      sha256 = "0jjvydn4i4n9xv8vsal2jxpa95mk2lw6myv0gx9wih242k9vy0l7";
+    };
+
+  prePatch = ''
+    sed -i 's|gfind|find|' crumbs-completion.fish
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/bash-completion/completions
+    mkdir -p $out/share/fish/vendor_completions.d
+
+    cp crumbs-completion.bash $out/share/bash-completion/completions/crumbs
+    cp crumbs-completion.fish $out/share/fish/vendor_completions.d/crumbs.fish
+  '';
+
+  meta = with lib;
+    { description = "Bookmarks for the command line";
+      homepage    = "https://github.com/fasseg/crumbs";
+      license     = licenses.wtfpl;
+      platforms   = platforms.all;
+      maintainers = with maintainers; [ thesola10 ];
+    };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ctodo/default.nix b/nixpkgs/pkgs/applications/misc/ctodo/default.nix
new file mode 100644
index 000000000000..224a79881e04
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ctodo/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, ncurses, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "ctodo";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "Acolarh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0mqy5b35cbdwfpbs91ilsgz3wc4cky38xfz9pnr4q88q1vybigna";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ ncurses readline ];
+
+  meta = with lib; {
+    homepage = "http://ctodo.apakoh.dk/";
+    description = "A simple ncurses-based task list manager";
+    license = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cum/default.nix b/nixpkgs/pkgs/applications/misc/cum/default.nix
new file mode 100644
index 000000000000..6b851e80f346
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cum/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "cum";
+  version = "0.9.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "15qc6agka2g3kcnpnz0hbjic1s3260cr9bda0rlcyninxs1vndq0";
+  };
+
+  propagatedBuildInputs = [
+    alembic beautifulsoup4 click natsort requests sqlalchemy
+  ];
+
+  # tests seem to fail for `config` not being defined,
+  # but it works once installed
+  doCheck = false;
+
+  # remove the top-level `tests` and `LICENSE` file
+  # they should not be installed, and there can be issues if another package
+  # has a collision (especially with the license file)
+  postInstall = ''
+    rm -rf $out/tests $out/LICENSE
+  '';
+
+  meta = with lib; {
+    description = "comic updater, mangafied";
+    homepage = "https://github.com/Hamuko/cum";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ tadeokondrak ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cura/default.nix b/nixpkgs/pkgs/applications/misc/cura/default.nix
new file mode 100644
index 000000000000..46143747f6d9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/default.nix
@@ -0,0 +1,65 @@
+{ mkDerivation, lib, fetchFromGitHub, cmake, python3, qtbase,
+ qtquickcontrols2, qtgraphicaleffects, curaengine, plugins ? [] }:
+
+mkDerivation rec {
+  pname = "cura";
+  version = "4.8.0";
+
+  src = fetchFromGitHub {
+    owner = "Ultimaker";
+    repo = "Cura";
+    rev = version;
+    sha256 = "060fqzspipm93ks0inrj7yrj5wmvkdfv8xaxrv22590yb9f95s9m";
+  };
+
+  materials = fetchFromGitHub {
+    owner = "Ultimaker";
+    repo = "fdm_materials";
+    rev = version;
+    sha256 = "0hi9w1fsnazlr0vvxdr3alsdb8m1vjjfp5zhmlz4kyyxhsy3bc33";
+  };
+
+  buildInputs = [ qtbase qtquickcontrols2 qtgraphicaleffects ];
+  propagatedBuildInputs = with python3.pkgs; [
+    libsavitar numpy-stl pyserial requests uranium zeroconf pynest2d
+    sentry-sdk trimesh
+  ] ++ plugins;
+  nativeBuildInputs = [ cmake python3.pkgs.wrapPython ];
+
+  cmakeFlags = [
+    "-DURANIUM_DIR=${python3.pkgs.uranium.src}"
+    "-DCURA_VERSION=${version}"
+  ];
+
+  makeWrapperArgs = [
+    # hacky workaround for https://github.com/NixOS/nixpkgs/issues/59901
+    "--set OMP_NUM_THREADS 1"
+  ];
+
+  postPatch = ''
+    sed -i 's,/python''${PYTHON_VERSION_MAJOR}/dist-packages,/python''${PYTHON_VERSION_MAJOR}.''${PYTHON_VERSION_MINOR}/site-packages,g' CMakeLists.txt
+    sed -i 's, executable_name = .*, executable_name = "${curaengine}/bin/CuraEngine",' plugins/CuraEngineBackend/CuraEngineBackend.py
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/cura/resources/materials
+    cp ${materials}/*.fdm_material $out/share/cura/resources/materials/
+    mkdir -p $out/lib/cura/plugins
+    for plugin in ${toString plugins}; do
+      ln -s $plugin/lib/cura/plugins/* $out/lib/cura/plugins
+    done
+  '';
+
+  postFixup = ''
+    wrapPythonPrograms
+    wrapQtApp $out/bin/cura
+  '';
+
+  meta = with lib; {
+    description = "3D printer / slicing GUI built on top of the Uranium framework";
+    homepage = "https://github.com/Ultimaker/Cura";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cura/lulzbot/curaengine-openmp-compat.patch b/nixpkgs/pkgs/applications/misc/cura/lulzbot/curaengine-openmp-compat.patch
new file mode 100644
index 000000000000..3826e92440f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/lulzbot/curaengine-openmp-compat.patch
@@ -0,0 +1,47 @@
+# Notes by Charles Duffy <charles@dyfis.net> --
+#
+# - The new version of OpenMP does not allow outside variables to be referenced
+#   *at all* without an explicit declaration of how they're supposed to be
+#   handled. Thus, this was an outright build failure beforehand. The new
+#   pragmas copy the initial value from the outer scope into each parallel
+#   thread. Since these variables are all constant within the loops, this is
+#   clearly correct. (Not sure it's *optimal*, but quite sure it isn't
+#   *wrong*).
+# - Upstream has been contacted -- I'm a Lulzbot customer with an active
+#   support contract and sent them the patch. That said, they're in the middle
+#   of some major corporate churn (sold themselves out of near-bankruptcy to an
+#   out-of-state business entity formed as a holding company; moved to that
+#   state; have been slowly restaffing after), so a response may take a while.
+# - The patch is purely my own work.
+
+--- curaengine/src/support.cpp.orig	2020-03-28 10:38:01.953912363 -0500
++++ curaengine/src/support.cpp	2020-03-28 10:45:28.999791908 -0500
+@@ -854,7 +854,7 @@
+     const double tan_angle = tan(angle) - 0.01;  // the XY-component of the supportAngle
+     xy_disallowed_per_layer[0] = storage.getLayerOutlines(0, false).offset(xy_distance);
+     // for all other layers (of non support meshes) compute the overhang area and possibly use that when calculating the support disallowed area
+-    #pragma omp parallel for default(none) shared(xy_disallowed_per_layer, storage, mesh) schedule(dynamic)
++    #pragma omp parallel for default(none) firstprivate(layer_count, is_support_mesh_place_holder, use_xy_distance_overhang, z_distance_top, tan_angle, xy_distance, xy_distance_overhang) shared(xy_disallowed_per_layer, storage, mesh) schedule(dynamic)
+     for (unsigned int layer_idx = 1; layer_idx < layer_count; layer_idx++)
+     {
+         Polygons outlines = storage.getLayerOutlines(layer_idx, false);
+@@ -1054,7 +1054,7 @@
+         const int max_checking_layer_idx = std::min(static_cast<int>(storage.support.supportLayers.size())
+                                                   , static_cast<int>(layer_count - (layer_z_distance_top - 1)));
+         const size_t max_checking_idx_size_t = std::max(0, max_checking_layer_idx);
+-#pragma omp parallel for default(none) shared(support_areas, storage) schedule(dynamic)
++#pragma omp parallel for default(none) firstprivate(max_checking_idx_size_t, layer_z_distance_top) shared(support_areas, storage) schedule(dynamic)
+         for (size_t layer_idx = 0; layer_idx < max_checking_idx_size_t; layer_idx++)
+         {
+             support_areas[layer_idx] = support_areas[layer_idx].difference(storage.getLayerOutlines(layer_idx + layer_z_distance_top - 1, false));
+--- curaengine/src/layerPart.cpp.orig	2020-03-28 10:36:40.381023651 -0500
++++ curaengine/src/layerPart.cpp	2020-03-28 10:39:54.584140465 -0500
+@@ -49,7 +49,7 @@
+ {
+     const auto total_layers = slicer->layers.size();
+     assert(mesh.layers.size() == total_layers);
+-#pragma omp parallel for default(none) shared(mesh, slicer) schedule(dynamic)
++#pragma omp parallel for default(none) firstprivate(total_layers) shared(mesh, slicer) schedule(dynamic)
+     for (unsigned int layer_nr = 0; layer_nr < total_layers; layer_nr++)
+     {
+         SliceLayer& layer_storage = mesh.layers[layer_nr];
diff --git a/nixpkgs/pkgs/applications/misc/cura/lulzbot/curaengine.nix b/nixpkgs/pkgs/applications/misc/cura/lulzbot/curaengine.nix
new file mode 100644
index 000000000000..5d1df20e224b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/lulzbot/curaengine.nix
@@ -0,0 +1,27 @@
+{ lib, gcc8Stdenv, callPackage, fetchgit, fetchpatch, cmake, libarcusLulzbot, stb, protobuf }:
+
+gcc8Stdenv.mkDerivation rec {
+  pname = "curaengine-lulzBot";
+  version = "3.6.21";
+
+  src = fetchgit {
+    url = "https://code.alephobjects.com/source/curaengine-lulzbot.git";
+    rev = "ec6a1a0f0aa387ef97e5c106633cf8d7fb9cd00d";
+    sha256 = "0wdkvg1hmqp1gaym804lw09x4ngf5ffasd861jhflpy7djbmkfn8";
+  };
+
+  patches = [ ./curaengine-openmp-compat.patch ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libarcusLulzbot stb protobuf ];
+
+  cmakeFlags = [ "-DCURA_ENGINE_VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A powerful, fast and robust engine for processing 3D models into 3D printing instruction";
+    homepage = "https://code.alephobjects.com/source/curaengine-lulzbot/";
+    license = licenses.agpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ chaduffy ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cura/lulzbot/default.nix b/nixpkgs/pkgs/applications/misc/cura/lulzbot/default.nix
new file mode 100644
index 000000000000..229966561c6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/lulzbot/default.nix
@@ -0,0 +1,82 @@
+{ lib, mkDerivation, wrapQtAppsHook, callPackage, fetchgit, cmake, jq, python3, qtbase, qtquickcontrols2 }:
+
+let
+  # admittedly, we're using (printer firmware) blobs when we could compile them ourselves.
+  curaBinaryDataVersion = "3.6.21"; # Marlin v2.0.0.174 for Bio, v2.0.0.144 for others.
+  curaBinaryData = fetchgit {
+    url = "https://code.alephobjects.com/diffusion/CBD/cura-binary-data.git";
+    rev = "5c75d0f6c10d8b7a903e2072a48cd1f08059509e";
+    sha256 = "1qdsj6rczwzdwzyr7nz7fnypbphckjrnwl8c9dr6izsxyzs465c4";
+  };
+
+  libarcusLulzbot = callPackage ./libarcus.nix {
+    inherit (python3.pkgs) buildPythonPackage sip pythonOlder;
+  };
+  libsavitarLulzbot = callPackage ./libsavitar.nix {
+    inherit (python3.pkgs) buildPythonPackage sip pythonOlder;
+  };
+
+  inherit (python3.pkgs) buildPythonPackage pyqt5 numpy scipy shapely pythonOlder;
+  curaengine = callPackage ./curaengine.nix {
+    inherit libarcusLulzbot;
+  };
+  uraniumLulzbot = callPackage ./uranium.nix {
+    inherit callPackage libarcusLulzbot;
+    inherit (python3.pkgs) buildPythonPackage pyqt5 numpy scipy shapely pythonOlder;
+  };
+in
+mkDerivation rec {
+  pname = "cura-lulzbot";
+  version = "3.6.21";
+
+  src = fetchgit {
+    url = "https://code.alephobjects.com/source/cura-lulzbot.git";
+    rev = "7faeb18604c83004846a02c60cb240708db0034f";
+    sha256 = "10q38s8c8x6xkh1vns4p3iqa5y267vrjh5vq8h55mg1q5001scyq";
+  };
+
+  buildInputs = [ qtbase qtquickcontrols2 ];
+  # numpy-stl temporarily disabled due to https://code.alephobjects.com/T8415
+  propagatedBuildInputs = with python3.pkgs; [ pyserial requests zeroconf ] ++ [ libsavitarLulzbot uraniumLulzbot libarcusLulzbot ]; # numpy-stl
+  nativeBuildInputs = [ cmake python3.pkgs.wrapPython ];
+
+  cmakeFlags = [
+    "-DURANIUM_DIR=${uraniumLulzbot.src}"
+    "-DCURA_VERSION=${version}"
+  ];
+
+  postPatch = ''
+    sed -i 's,/python''${PYTHON_VERSION_MAJOR}/dist-packages,/python''${PYTHON_VERSION_MAJOR}.''${PYTHON_VERSION_MINOR}/site-packages,g' CMakeLists.txt
+    sed -i 's, executable_name = .*, executable_name = "${curaengine}/bin/CuraEngine",' plugins/CuraEngineBackend/CuraEngineBackend.py
+  '';
+
+  preFixup = ''
+    substituteInPlace "$out/bin/cura-lulzbot" --replace 'import cura.CuraApplication' 'import Savitar; import cura.CuraApplication'
+    ln -sT "${curaBinaryData}/cura/resources/firmware" "$out/share/cura/resources/firmware"
+    ln -sT "${uraniumLulzbot}/share/uranium" "$out/share/uranium"
+    ${jq}/bin/jq --arg out "$out" '.build=$out' >"$out/version.json" <<'EOF'
+    ${builtins.toJSON {
+      cura = version;
+      cura_version = version;
+      binarydata = curaBinaryDataVersion;
+      engine = curaengine.version;
+      libarcus = libarcusLulzbot.version;
+      libsavitar = libsavitarLulzbot.version;
+      uranium = uraniumLulzbot.version;
+    }}
+    EOF
+  '';
+
+  postFixup = ''
+    wrapPythonPrograms
+    wrapQtApp "$out/bin/cura-lulzbot"
+  '';
+
+  meta = with lib; {
+    description = "3D printer / slicing GUI built on top of the Uranium framework";
+    homepage = "https://code.alephobjects.com/diffusion/CURA/";
+    license = licenses.agpl3;  # a partial relicense to LGPL has happened, but not certain that all AGPL bits are expunged
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ chaduffy ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cura/lulzbot/libarcus.nix b/nixpkgs/pkgs/applications/misc/cura/lulzbot/libarcus.nix
new file mode 100644
index 000000000000..1e186bdf5fd2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/lulzbot/libarcus.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, buildPythonPackage, fetchgit, fetchurl, cmake, sip, protobuf, pythonOlder }:
+
+buildPythonPackage {
+  pname = "libarcus";
+  version = "3.6.21";
+  format = "other";
+
+  src = fetchgit {
+    url = "https://code.alephobjects.com/source/arcus.git";
+    rev = "aeda02d7727f45b657afb72cef203283fbf09325";
+    sha256 = "1ak0d4k745sx7paic27was3s4987z9h3czscjs21hxbi6qy83g99";
+  };
+
+  disabled = pythonOlder "3.4.0";
+
+  propagatedBuildInputs = [ sip ];
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ protobuf ];
+
+  postPatch = ''
+    # To workaround buggy SIP detection which overrides PYTHONPATH
+    sed -i '/SET(ENV{PYTHONPATH}/d' cmake/FindSIP.cmake
+  '';
+
+  meta = with lib; {
+    description = "Communication library between internal components for Ultimaker software";
+    homepage = "https://code.alephobjects.com/source/arcus/";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ chaduffy ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/cura/lulzbot/libsavitar.nix b/nixpkgs/pkgs/applications/misc/cura/lulzbot/libsavitar.nix
new file mode 100644
index 000000000000..fb920235031f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/lulzbot/libsavitar.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, buildPythonPackage, pythonOlder, fetchgit, cmake, sip }:
+
+buildPythonPackage {
+  pname = "libsavitar-lulzbot";
+  name = "libsavitar-lulzbot";
+  version = "3.6.21";
+  format = "other";
+
+  src = fetchgit {
+    url = "https://code.alephobjects.com/source/savitar.git";
+    rev = "ee8ada42c55f54727ce4d275c294ba426d3d8234";
+    sha256 = "1wm5ii3cmni8dk3c65kw4wglpypkdsfpgd480d3hc1r5bqpq0d6j";
+  };
+
+  postPatch = ''
+    # To workaround buggy SIP detection which overrides PYTHONPATH
+    sed -i '/SET(ENV{PYTHONPATH}/d' cmake/FindSIP.cmake
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  propagatedBuildInputs = [ sip ];
+
+  disabled = pythonOlder "3.4.0";
+
+  meta = with lib; {
+    description = "C++ implementation of 3mf loading with SIP python bindings";
+    homepage = "https://github.com/Ultimaker/libSavitar";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ chaduffy ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cura/lulzbot/uranium.nix b/nixpkgs/pkgs/applications/misc/cura/lulzbot/uranium.nix
new file mode 100644
index 000000000000..77a4f3edef65
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/lulzbot/uranium.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, callPackage, fetchurl, fetchgit, buildPythonPackage, fetchFromGitHub, python, cmake
+, pyqt5, numpy, scipy, shapely, libarcusLulzbot, doxygen, gettext, pythonOlder }:
+
+buildPythonPackage {
+  version = "3.6.21";
+  pname = "uranium";
+  name = "uraniumLulzbot";
+  format = "other";
+
+  src = fetchgit {
+    url = "https://code.alephobjects.com/diffusion/U/uranium.git";
+    rev = "54d911edd2551c5875c554928896122835a0dd6c";
+    sha256 = "04bym3vwikaxw8ab0mymv9sc9n8i7yw5kfsv99ic811g9lzz3j1i";
+  };
+
+  disabled = pythonOlder "3.5.0";
+
+  buildInputs = [ python gettext ];
+  propagatedBuildInputs = [ pyqt5 numpy scipy shapely libarcusLulzbot ];
+  nativeBuildInputs = [ cmake doxygen ];
+
+  postPatch = ''
+    sed -i 's,/python''${PYTHON_VERSION_MAJOR}/dist-packages,/python''${PYTHON_VERSION_MAJOR}.''${PYTHON_VERSION_MINOR}/site-packages,g' CMakeLists.txt
+    sed -i \
+     -e "s,Resources.addSearchPath(os.path.join(os.path.abspath(os.path.dirname(__file__)).*,Resources.addSearchPath(\"$out/share/uranium/resources\")," \
+     -e "s,self._plugin_registry.addPluginLocation(os.path.join(os.path.abspath(os.path.dirname(__file__)).*,self._plugin_registry.addPluginLocation(\"$out/lib/uranium/plugins\")," \
+     UM/Application.py
+  '';
+
+  meta = with lib; {
+    description = "A Python framework for building Desktop applications";
+    homepage = "https://code.alephobjects.com/diffusion/U/";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ chaduffy ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/cura/numpy-cast.patch b/nixpkgs/pkgs/applications/misc/cura/numpy-cast.patch
new file mode 100644
index 000000000000..efb14182b3e6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/numpy-cast.patch
@@ -0,0 +1,12 @@
+diff -urN Cura-15.04.old/Cura/util/sliceEngine.py Cura-15.04/Cura/util/sliceEngine.py
+--- Cura-15.04.old/Cura/util/sliceEngine.py	2016-05-07 20:34:17.305020334 +0200
++++ Cura-15.04/Cura/util/sliceEngine.py	2016-05-07 20:40:02.993286467 +0200
+@@ -343,7 +343,7 @@
+ 						objMax[1] = max(oMax[1], objMax[1])
+ 			if objMin is None:
+ 				return
+-			pos += (objMin + objMax) / 2.0 * 1000
++			pos = numpy.add( pos, (objMin + objMax) / 2.0 * 1000, out=pos, casting='unsafe')
+ 			commandList += ['-s', 'posx=%d' % int(pos[0]), '-s', 'posy=%d' % int(pos[1])]
+ 
+ 			vertexTotal = [0] * 4
diff --git a/nixpkgs/pkgs/applications/misc/cura/plugins.nix b/nixpkgs/pkgs/applications/misc/cura/plugins.nix
new file mode 100644
index 000000000000..699df0e1936f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/plugins.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, python3Packages }:
+
+let
+
+  self = {
+
+    octoprint = stdenv.mkDerivation rec {
+      pname = "Cura-OctoPrintPlugin";
+      version = "3.5.16";
+
+      src = fetchFromGitHub {
+        owner = "fieldOfView";
+        repo = pname;
+        rev = "8affa8aa9796cb37129d3b7222fff03f86c936cd";
+        sha256 = "0l4qfcashkdmpdm8nm3klz6hmi1f0bmbpb9b1yn4mvg0fam6c5xi";
+      };
+
+      propagatedBuildInputs = with python3Packages; [
+        netifaces
+      ];
+
+      installPhase = ''
+        mkdir -p $out/lib/cura/plugins/OctoPrintPlugin
+        cp -rv . $out/lib/cura/plugins/OctoPrintPlugin/
+      '';
+
+      meta = with lib; {
+        description = "Enables printing directly to OctoPrint and monitoring the process";
+        homepage = "https://github.com/fieldOfView/Cura-OctoPrintPlugin";
+        license = licenses.agpl3;
+        maintainers = with maintainers; [ gebner ];
+      };
+    };
+
+  };
+
+in self
diff --git a/nixpkgs/pkgs/applications/misc/cura/stable.nix b/nixpkgs/pkgs/applications/misc/cura/stable.nix
new file mode 100644
index 000000000000..5383cbe9a23a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/stable.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, python27Packages, curaengine, makeDesktopItem, fetchurl }:
+let
+  py = python27Packages;
+  version = "15.04";
+in
+stdenv.mkDerivation rec {
+  pname = "cura";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://github.com/daid/Cura/archive/${version}.tar.gz";
+    sha256 = "0xbjvzhp8wzq9lnpmcg1fjf7j5h39bj5463sd5c8jzdjl96izizl";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "Cura";
+    exec = "cura";
+    icon = "cura";
+    comment = "Cura";
+    desktopName = "Cura";
+    genericName = "3D printing host software";
+    categories = "GNOME;GTK;Utility;";
+  };
+
+  python_deps = with py; [ pyopengl pyserial numpy wxPython30 power setuptools ];
+
+  pythonPath = python_deps;
+
+  propagatedBuildInputs = python_deps;
+
+  buildInputs = [ curaengine py.wrapPython ];
+
+  configurePhase = "";
+  buildPhase = "";
+
+  patches = [ ./numpy-cast.patch ];
+
+  installPhase = ''
+    # Install Python code.
+    site_packages=$out/lib/python2.7/site-packages
+    mkdir -p $site_packages
+    cp -r Cura $site_packages/
+
+    # Install resources.
+    resources=$out/share/cura
+    mkdir -p $resources
+    cp -r resources/* $resources/
+    sed -i 's|os.path.join(os.path.dirname(__file__), "../../resources")|"'$resources'"|g' $site_packages/Cura/util/resources.py
+
+    # Install executable.
+    mkdir -p $out/bin
+    cp Cura/cura.py $out/bin/cura
+    chmod +x $out/bin/cura
+    sed -i 's|#!/usr/bin/python|#!/usr/bin/env python|' $out/bin/cura
+    wrapPythonPrograms
+
+    # Make it find CuraEngine.
+    echo "def getEngineFilename(): return '${curaengine}/bin/CuraEngine'" >> $site_packages/Cura/util/sliceEngine.py
+
+    # Install desktop item.
+    mkdir -p "$out"/share/applications
+    cp "$desktopItem"/share/applications/* "$out"/share/applications/
+    mkdir -p "$out"/share/icons
+    ln -s "$resources/images/c.png" "$out"/share/icons/cura.png
+  '';
+
+  meta = with lib; {
+    description = "3D printing host software";
+    homepage = "https://github.com/daid/Cura";
+    license = licenses.agpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/curabydagoma/default.nix b/nixpkgs/pkgs/applications/misc/curabydagoma/default.nix
new file mode 100644
index 000000000000..821b88f9b20d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/curabydagoma/default.nix
@@ -0,0 +1,76 @@
+{ stdenv, runtimeShell, lib, fetchurl, python, pythonPackages, unzip }:
+
+# This package uses a precompiled "binary" distribution of CuraByDagoma,
+# distributed by the editor.
+#
+# To update the package, follow the links on https://dist.dagoma.fr/:
+# * Cura By Dagoma
+# * Linux
+# * 64 bits
+# * Genric archive
+#
+# I made the arbitrary choice to compile this package only for x86_64.
+# I guess people owning a 3D printer generally don't use i686.
+# If, however, someone needs it, we certainly can find a solution.
+
+stdenv.mkDerivation rec {
+  pname = "curabydagoma";
+  # Version is the date, UNIX format
+  version = "1520506579";
+  # Hash of the user's choice: os, arch, package type...
+  hash = "58228cce5bbdcf764b7116850956f1e5";
+
+  src = fetchurl {
+    url = "https://dist.dagoma.fr/get/zip/CuraByDagoma/${version}/${hash}";
+    sha256 = "16wfipdyjkf6dq8awjzs4zgkmqk6230277mf3iz8swday9hns8pq";
+  };
+  unpackCmd = "unzip $curSrc && tar zxf CuraByDagoma_amd64.tar.gz";
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ python pythonPackages.pyopengl pythonPackages.wxPython pythonPackages.pyserial pythonPackages.numpy ];
+
+  # Compile all pyc files because the included pyc files may be older than the
+  # py files. However, Python doesn't realize that because the packages
+  # have all dates set to epoch.
+  buildPhase = ''
+    python -m compileall -f curabydago
+  '';
+
+  # * Simply copy the stuff there
+  # * Create an executable with the correct path etc
+  # * Create a .desktop file to have a launcher in the desktop environments
+  installPhase = ''
+    mkdir $out
+    cp -r * $out/
+
+    mkdir $out/bin
+    cat > $out/bin/curabydago <<EOF
+    #!${runtimeShell}
+    export PYTHONPATH=$PYTHONPATH
+    ${python.out}/bin/python $out/curabydago/cura.py
+    EOF
+    chmod a+x $out/bin/curabydago
+
+    mkdir -p $out/share/applications
+    cat > $out/share/applications/curabydago.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Name=Cura-by-dagoma
+    Comment=CuraByDagoma is a fork of Legacy Cura made by Dagoma for its own printers.
+    Icon=$out/curabydago/resources/images/cura.ico
+    Exec=$out/bin/curabydago
+    Path=$out/
+    StartupNotify=true
+    Terminal=false
+    Categories=GNOME;GTK;Utility;
+    EOF
+
+  '';
+
+  meta = with lib; {
+    description = "Slicer for 3D printers built by Dagoma";
+    homepage = "https://dagoma.fr/cura-by-dagoma.html";
+    license = licenses.agpl3;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ tiramiseb ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/curaengine/default.nix b/nixpkgs/pkgs/applications/misc/curaengine/default.nix
new file mode 100644
index 000000000000..4a4558ba2893
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/curaengine/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libarcus, stb, protobuf }:
+
+stdenv.mkDerivation rec {
+  pname = "curaengine";
+  version = "4.8.0";
+
+  src = fetchFromGitHub {
+    owner = "Ultimaker";
+    repo = "CuraEngine";
+    rev = version;
+    sha256 = "083l327ry6hv3yaa1p8dx1hx7fm12b0lh5nlbshxjyym0vi15rw2";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libarcus stb protobuf ];
+
+  cmakeFlags = [ "-DCURA_ENGINE_VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A powerful, fast and robust engine for processing 3D models into 3D printing instruction";
+    homepage = "https://github.com/Ultimaker/CuraEngine";
+    license = licenses.agpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/curaengine/stable.nix b/nixpkgs/pkgs/applications/misc/curaengine/stable.nix
new file mode 100644
index 000000000000..23041c2fe37e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/curaengine/stable.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+let
+  version = "15.04.6";
+in
+stdenv.mkDerivation {
+  pname = "curaengine";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://github.com/Ultimaker/CuraEngine/archive/${version}.tar.gz";
+    sha256 = "1cd4dikzvqyj5g80rqwymvh4nwm76vsf78clb37kj6q0fig3qbjg";
+  };
+
+  postPatch = ''
+    sed -i 's,--static,,g' Makefile
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp build/CuraEngine $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Engine for processing 3D models into 3D printing instructions";
+    homepage = "https://github.com/Ultimaker/CuraEngine";
+    license = licenses.agpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dasel/default.nix b/nixpkgs/pkgs/applications/misc/dasel/default.nix
new file mode 100644
index 000000000000..3a46b5e2f9a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dasel/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "dasel";
+  version = "1.12.2";
+
+  src = fetchFromGitHub {
+    owner = "TomWright";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "/WB/SsOih0N5P4cUAD6zkCajplzZ/Jez0H80+CG08rc=";
+  };
+
+  vendorSha256 = "BdX4DO77mIf/+aBdkNVFUzClsIml1UMcgvikDbbdgcY=";
+
+  buildFlagsArray = ''
+    -ldflags=-s -w -X github.com/tomwright/dasel/internal.Version=${version}
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    if [[ "$("$out/bin/${pname}" --version)" == "${pname} version ${version}" ]]; then
+      echo "" | $out/bin/dasel put object -p yaml -t string -t int "my.favourites" colour=red number=3 | grep -q red
+      echo '${pname} smoke check passed'
+    else
+      echo '${pname} smoke check failed'
+      return 1
+    fi
+  '';
+
+  meta = with lib; {
+    description = "Query and update data structures from the command line";
+    longDescription = ''
+      Dasel (short for data-selector) allows you to query and modify data structures using selector strings.
+      Comparable to jq / yq, but supports JSON, YAML, TOML and XML with zero runtime dependencies.
+    '';
+    homepage = "https://github.com/TomWright/dasel";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ _0x4A6F ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dbeaver/default.nix b/nixpkgs/pkgs/applications/misc/dbeaver/default.nix
new file mode 100644
index 000000000000..05d282aaf064
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dbeaver/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchurl, makeDesktopItem, makeWrapper
+, fontconfig, freetype, glib, gtk3
+, jdk, libX11, libXrender, libXtst, zlib }:
+
+# The build process is almost like eclipse's.
+# See `pkgs/applications/editors/eclipse/*.nix`
+
+stdenv.mkDerivation rec {
+  pname = "dbeaver-ce";
+  version = "7.3.2";
+
+  desktopItem = makeDesktopItem {
+    name = "dbeaver";
+    exec = "dbeaver";
+    icon = "dbeaver";
+    desktopName = "dbeaver";
+    comment = "SQL Integrated Development Environment";
+    genericName = "SQL Integrated Development Environment";
+    categories = "Development;";
+  };
+
+  buildInputs = [
+    fontconfig freetype glib gtk3
+    jdk libX11 libXrender libXtst zlib
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  src = fetchurl {
+    url = "https://dbeaver.io/files/${version}/dbeaver-ce-${version}-linux.gtk.x86_64.tar.gz";
+    sha256 = "sha256-4BVXcR8/E4uIrPQJe9KU9577j4XLTxJWTO8g0vCHWts=";
+  };
+
+  installPhase = ''
+    # remove bundled jre
+    rm -rf jre
+
+    mkdir -p $out/
+    cp -r . $out/dbeaver
+
+    # Patch binaries.
+    interpreter=$(cat $NIX_CC/nix-support/dynamic-linker)
+    patchelf --set-interpreter $interpreter $out/dbeaver/dbeaver
+
+    makeWrapper $out/dbeaver/dbeaver $out/bin/dbeaver \
+      --prefix PATH : ${jdk}/bin \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath ([ glib gtk3 libXtst ])} \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+
+    # Create desktop item.
+    mkdir -p $out/share/applications
+    cp ${desktopItem}/share/applications/* $out/share/applications
+
+    mkdir -p $out/share/pixmaps
+    ln -s $out/dbeaver/icon.xpm $out/share/pixmaps/dbeaver.xpm
+  '';
+
+  meta = with lib; {
+    homepage = "https://dbeaver.io/";
+    description = "Universal SQL Client for developers, DBA and analysts. Supports MySQL, PostgreSQL, MariaDB, SQLite, and more";
+    longDescription = ''
+      Free multi-platform database tool for developers, SQL programmers, database
+      administrators and analysts. Supports all popular databases: MySQL,
+      PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access,
+      Teradata, Firebird, Derby, etc.
+    '';
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" ];
+    maintainers = [ maintainers.jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ddcui/default.nix b/nixpkgs/pkgs/applications/misc/ddcui/default.nix
new file mode 100644
index 000000000000..1ec288c678a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ddcui/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qtbase
+, qttools
+, ddcutil
+}:
+
+mkDerivation rec {
+  pname = "ddcui";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "rockowitz";
+    repo = "ddcui";
+    rev = "v${version}";
+    sha256 = "0myma1zw6dlygv3xbin662d91zcnwss10syf12q2fppkrd8qdgqf";
+  };
+
+  nativeBuildInputs = [
+    # Using cmake instead of the also-supported qmake because ddcui's qmake
+    # file is not currently written to support PREFIX installations.
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    qtbase
+    qttools
+    ddcutil
+  ];
+
+  meta = with lib; {
+    description = "Graphical user interface for ddcutil - control monitor settings";
+    homepage = "https://www.ddcutil.com/ddcui_main/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ nh2 ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ddgr/default.nix b/nixpkgs/pkgs/applications/misc/ddgr/default.nix
new file mode 100644
index 000000000000..850bca3320ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ddgr/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, python3, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  version = "1.9";
+  pname = "ddgr";
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = "ddgr";
+    rev = "v${version}";
+    sha256 = "0qbdq7k0mmvkjp6qzz88n7vf29liqn6y5w4y39ldqdc8hzw5sld7";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ python3 ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    installShellCompletion --bash --name ddgr.bash auto-completion/bash/ddgr-completion.bash
+    installShellCompletion --fish auto-completion/fish/ddgr.fish
+    installShellCompletion --zsh auto-completion/zsh/_ddgr
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jarun/ddgr";
+    description = "Search DuckDuckGo from the terminal";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ceedubs markus1189 ];
+    platforms = python3.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/deadd-notification-center/default.nix b/nixpkgs/pkgs/applications/misc/deadd-notification-center/default.nix
new file mode 100644
index 000000000000..35627b28d154
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/deadd-notification-center/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoPatchelfHook
+, wrapGAppsHook
+, hicolor-icon-theme
+, gtk3
+, gobject-introspection
+, libxml2
+}:
+stdenv.mkDerivation rec {
+  pname = "deadd-notification-center";
+  version = "1.7.3";
+
+  src = fetchFromGitHub {
+    owner = "phuhl";
+    repo = "linux_notification_center";
+    rev = version;
+    sha256 = "QaOLrtlhQyhMOirk6JO1yMGRrgycHmF9FAdKNbN2TRk=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    gobject-introspection
+    libxml2
+    hicolor-icon-theme
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/dbus-1/services
+
+    cp $src/.out/${pname} $out/bin/
+    chmod +x $out/bin/${pname}
+
+    sed "s|##PREFIX##|$out|g" $src/${pname}.service.in > \
+      $out/share/dbus-1/services/com.ph-uhl.deadd.notification.service
+  '';
+
+  meta = with lib; {
+    description = "A haskell-written notification center for users that like a desktop with style";
+    homepage = "https://github.com/phuhl/linux_notification_center";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.pacman99 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/deco/default.nix b/nixpkgs/pkgs/applications/misc/deco/default.nix
new file mode 100644
index 000000000000..2ea3483f1bac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/deco/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, scsh, feh, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "deco";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner = "ebzzry";
+    repo = pname;
+    rev = "49cded5ad123b0169f47cd0dc0f5420f4b581837";
+    sha256 = "19rvqhw0blwga8ck86yy8hj7j1l9hriphlld6yrfd3yip4jprjzz";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${pname} $out/bin
+    chmod +x $out/bin/${pname}
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/deco --replace "/usr/bin/env scsh" "${scsh}/bin/scsh"
+    substituteInPlace $out/bin/deco --replace "feh" "${feh}/bin/feh"
+    substituteInPlace $out/bin/deco --replace "xdpyinfo" "${xorg.xdpyinfo}/bin/xdpyinfo"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ebzzry/deco";
+    description = "A simple root image setter";
+    license = licenses.mit;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+  };
+
+  dontBuild = true;
+}
diff --git a/nixpkgs/pkgs/applications/misc/devdocs-desktop/default.nix b/nixpkgs/pkgs/applications/misc/devdocs-desktop/default.nix
new file mode 100644
index 000000000000..3425ceb44a93
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/devdocs-desktop/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, appimageTools, fetchurl, gsettings-desktop-schemas, gtk3 }:
+
+let
+  version = "0.7.1";
+  pname = "devdocs-desktop";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/egoist/devdocs-desktop/releases/download/v${version}/DevDocs-${version}.AppImage";
+    sha256 = "5bba99a34c90a65eff67aface0b7446cbf43d620a1c195f27e7bb33ab6d3d0c2";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+
+in appimageTools.wrapType2 rec {
+  inherit name src;
+
+  profile = ''
+    export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS
+  '';
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/devdocs.desktop $out/share/applications/devdocs.desktop
+    install -m 444 -D ${appimageContents}/devdocs.png $out/share/icons/hicolor/0x0/apps/devdocs.png
+    substituteInPlace $out/share/applications/devdocs.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "A full-featured desktop app for DevDocs.io";
+    longDescription = ''
+      DevDocs.io combines multiple API documentations in a fast, organized, and searchable interface. This is an unofficial desktop app for it.
+    '';
+    homepage = "https://github.com/egoist/devdocs-desktop";
+    downloadPage = "https://github.com/egoist/devdocs-desktop/releases";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ymarkus ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/devilspie2/default.nix b/nixpkgs/pkgs/applications/misc/devilspie2/default.nix
new file mode 100644
index 000000000000..2d3c28b2d715
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/devilspie2/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, intltool, pkg-config, glib, gtk, lua, libwnck3 }:
+
+stdenv.mkDerivation rec {
+  pname = "devilspie2";
+  version = "0.43";
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/devilspie2/devilspie2_${version}-src.tar.gz";
+    sha256 = "0a7qjl2qd4099kkkbwa1y2fk48s21jlr409lf9mij7mlc9yc3zzc";
+  };
+
+  nativeBuildInputs = [ intltool pkg-config ];
+  buildInputs = [ glib gtk lua libwnck3 ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp bin/devilspie2 $out/bin
+    cp devilspie2.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "A window matching utility";
+    longDescription = ''
+      Devilspie2 is a window matching utility, allowing the user to
+      perform scripted actions on windows as they are created. For
+      example you can script a terminal program to always be
+      positioned at a specific screen position, or position a window
+      on a specific workspace.
+    '';
+    homepage = "https://www.gusnan.se/devilspie2/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dfilemanager/default.nix b/nixpkgs/pkgs/applications/misc/dfilemanager/default.nix
new file mode 100644
index 000000000000..6af92285c2b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dfilemanager/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, cmake, file, qtbase, qttools, solid }:
+
+mkDerivation {
+  pname = "dfilemanager";
+  version = "git-2020-09-04";
+
+  src = fetchFromGitHub {
+    owner = "probonopd";
+    repo = "dfilemanager";
+    rev = "c592d643d76942dc2c2ccb6e4bfdf53f5e805e48";
+    sha256 = "7hIgaWjjOck5i4QbeVeQK7yrjK4yDoAZ5qY9RhM5ABY=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ qtbase qttools file solid ];
+
+  cmakeFlags = [ "-DQT5BUILD=true" ];
+
+  meta = {
+    homepage = "http://dfilemanager.sourceforge.net/";
+    description = "File manager written in Qt/C++";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/diff-pdf/default.nix b/nixpkgs/pkgs/applications/misc/diff-pdf/default.nix
new file mode 100644
index 000000000000..f5e5dccd0f39
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/diff-pdf/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, pkg-config, cairo, poppler, wxGTK ? null, wxmac ? null, darwin ? null }:
+
+let
+  wxInputs =
+    if stdenv.isDarwin then
+      [ wxmac darwin.apple_sdk.frameworks.Cocoa ]
+    else
+      [ wxGTK ];
+in
+stdenv.mkDerivation rec {
+  pname = "diff-pdf";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "vslavik";
+    repo = "diff-pdf";
+    rev = "v${version}";
+    sha256 = "1y5ji4c4m69vzs0z051fkhfdrjnyxb6kzac5flhdkfb2hgp1jnxl";
+  };
+
+  nativeBuildInputs = [ autoconf automake pkg-config ];
+  buildInputs = [ cairo poppler ] ++ wxInputs;
+
+  preConfigure = "./bootstrap";
+
+  meta = with lib; {
+    homepage = "https://vslavik.github.io/diff-pdf/";
+    description = "Simple tool for visually comparing two PDF files";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/diffpdf/default.nix b/nixpkgs/pkgs/applications/misc/diffpdf/default.nix
new file mode 100644
index 000000000000..c1a4d5e44405
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/diffpdf/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, mkDerivation, fetchurl, fetchpatch, qmake, qttools, qtbase, poppler }:
+
+mkDerivation rec {
+  version = "2.1.3";
+  pname = "diffpdf";
+
+  src = fetchurl {
+    url = "http://www.qtrac.eu/${pname}-${version}.tar.gz";
+    sha256 = "0cr468fi0d512jjj23r5flfzx957vibc9c25gwwhi0d773h2w566";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/gentoo/gentoo/9b971631588ff46e7c2d501bc35cd0d9ce2d98e2/app-text/diffpdf/files/diffpdf-2.1.3-qt5.patch";
+      sha256 = "0sax8gcqcmzf74hmdr3rarqs4nsxmml9qmh6pqyjmgl3lypxhafg";
+    })
+    ./fix_path_poppler_qt5.patch
+  ];
+
+  nativeBuildInputs = [ qmake qttools ];
+  buildInputs = [ qtbase poppler ];
+
+  preConfigure = ''
+    substituteInPlace diffpdf.pro --replace @@NIX_POPPLER_QT5@@ ${poppler.dev}
+    lrelease diffpdf.pro
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+
+    install -Dpm755 -D diffpdf $out/bin/diffpdf
+    install -Dpm644 -D diffpdf.1 $out/share/man/man1/diffpdf.1
+
+    install -dpm755 $out/share/doc/${pname}-${version} $out/share/licenses/${pname}-${version} $out/share/icons $out/share/pixmaps $out/share/applications
+    install -Dpm644 CHANGES README help.html $out/share/doc/${pname}-${version}/
+    install -Dpm644 gpl-2.0.txt $out/share/licenses/${pname}-${version}/
+    install -Dpm644 images/icon.png $out/share/pixmaps/diffpdf.png
+
+    cat > $out/share/applications/diffpdf.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Version=1.0
+    Name=diffpdf
+    Icon=diffpdf
+    Comment=PDF diffing tool
+    Exec=$out/bin/diffpdf
+    Terminal=false
+    EOF
+    '';
+
+  meta = {
+    homepage = "http://www.qtrac.eu/diffpdfc.html";
+    description = "Tool for diffing pdf files visually or textually";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ tstrobel ];
+    platforms = with lib.platforms; linux;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/diffpdf/fix_path_poppler_qt5.patch b/nixpkgs/pkgs/applications/misc/diffpdf/fix_path_poppler_qt5.patch
new file mode 100644
index 000000000000..9535ea2c6b0d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/diffpdf/fix_path_poppler_qt5.patch
@@ -0,0 +1,16 @@
+diff -uNr diffpdf-2.1.3/diffpdf.pro diffpdf-2.1.3-new/diffpdf.pro
+--- diffpdf-2.1.3/diffpdf.pro	2013-10-15 09:01:22.000000000 +0200
++++ diffpdf-2.1.3-new/diffpdf.pro	2015-07-07 23:13:36.445572148 +0200
+@@ -47,9 +47,9 @@
+ 	INCLUDEPATH += /c/poppler_lib/include/poppler/qt5
+ 	LIBS += -Wl,-rpath -Wl,/c/poppler_lib/bin -Wl,-L/c/poppler_lib/bin
+     } else {
+-	exists(/usr/include/poppler/qt5) {
+-	    INCLUDEPATH += /usr/include/poppler/cpp
+-	    INCLUDEPATH += /usr/include/poppler/qt5
++	exists(@@NIX_POPPLER_QT5@@/include/poppler/qt5) {
++	    INCLUDEPATH += @@NIX_POPPLER_QT5@@/include/poppler/cpp
++	    INCLUDEPATH += @@NIX_POPPLER_QT5@@/include/poppler/qt5
+ 	} else {
+ 	    INCLUDEPATH += /usr/local/include/poppler/cpp
+ 	    INCLUDEPATH += /usr/local/include/poppler/qt5
diff --git a/nixpkgs/pkgs/applications/misc/digitalbitbox/default.nix b/nixpkgs/pkgs/applications/misc/digitalbitbox/default.nix
new file mode 100644
index 000000000000..4771cebc3411
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/digitalbitbox/default.nix
@@ -0,0 +1,142 @@
+{ mkDerivation
+, lib
+, autoreconfHook
+, curl
+, fetchFromGitHub
+, git
+, libevent
+, libtool
+, qrencode
+, udev
+, libusb1
+, makeWrapper
+, pkg-config
+, qtbase
+, qttools
+, qtwebsockets
+, qtmultimedia
+, udevRule51 ? ''
+,   SUBSYSTEM=="usb", TAG+="uaccess", TAG+="udev-acl", SYMLINK+="dbb%n", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2402"
+, ''
+, udevRule52 ? ''
+,   KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2402", TAG+="uaccess", TAG+="udev-acl", SYMLINK+="dbbf%n"
+, ''
+, writeText
+}:
+
+# Enabling the digitalbitbox program
+#
+#     programs.digitalbitbox.enable = true;
+#
+# will install the digitalbitbox package and enable the corresponding hardware
+# module and is by far the easiest way to get started with the Digital Bitbox on
+# NixOS.
+
+# In case you install the package only, please be aware that you may need to
+# apply some udev rules to allow the application to identify and access your
+# wallet. In a nixos-configuration, one may accomplish this by enabling the
+# digitalbitbox hardware module
+#
+#     hardware.digitalbitbox.enable = true;
+#
+# or by adding the digitalbitbox package to system.udev.packages
+#
+#     system.udev.packages = [ pkgs.digitalbitbox ];
+
+# See https://digitalbitbox.com/start_linux for more information.
+let
+  copyUdevRuleToOutput = name: rule:
+    "cp ${writeText name rule} $out/etc/udev/rules.d/${name}";
+in mkDerivation rec {
+  pname = "digitalbitbox";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "digitalbitbox";
+    repo = "dbb-app";
+    rev = "v${version}";
+    sha256 = "ig3+TdYv277D9GVnkRSX6nc6D6qruUOw/IQdQCK6FoA=";
+  };
+
+  nativeBuildInputs = with lib; [
+    autoreconfHook
+    curl
+    git
+    makeWrapper
+    pkg-config
+    qttools
+  ];
+
+  buildInputs = [
+    libevent
+    libtool
+    udev
+    libusb1
+    qrencode
+
+    qtbase
+    qtwebsockets
+    qtmultimedia
+  ];
+
+  LUPDATE="${qttools.dev}/bin/lupdate";
+  LRELEASE="${qttools.dev}/bin/lrelease";
+  MOC="${qtbase.dev}/bin/moc";
+  QTDIR=qtbase.dev;
+  RCC="${qtbase.dev}/bin/rcc";
+  UIC="${qtbase.dev}/bin/uic";
+
+  configureFlags = [
+    "--enable-libusb"
+  ];
+
+  hardeningDisable = [
+    "format"
+  ];
+
+  qtWrapperArgs = [ "--prefix LD_LIBRARY_PATH : $out/lib" ];
+
+  postInstall = ''
+    mkdir -p "$out/lib"
+    cp src/libbtc/.libs/*.so* $out/lib
+    cp src/libbtc/src/secp256k1/.libs/*.so* $out/lib
+    cp src/hidapi/libusb/.libs/*.so* $out/lib
+    cp src/univalue/.libs/*.so* $out/lib
+
+    # [RPATH][patchelf] Avoid forbidden reference error
+    rm -rf $PWD
+
+    # Provide udev rules as documented in https://digitalbitbox.com/start_linux
+    mkdir -p "$out/etc/udev/rules.d"
+    ${copyUdevRuleToOutput "51-hid-digitalbox.rules" udevRule51}
+    ${copyUdevRuleToOutput "52-hid-digitalbox.rules" udevRule52}
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A QT based application for the Digital Bitbox hardware wallet";
+    longDescription = ''
+      Digital Bitbox provides dbb-app, a GUI tool, and dbb-cli, a CLI tool, to manage Digital Bitbox devices.
+
+      This package will only install the dbb-app and dbb-cli, however; in order for these applications to identify and access Digital Bitbox devices, one may want to enable the digitalbitbox hardware module by adding
+
+          hardware.digitalbitbox.enable = true;
+
+      to the configuration which is equivalent to adding this package to the udev.packages list.
+
+
+      The easiest way to use the digitalbitbox package in NixOS is by adding
+
+          programs.digitalbitbox.enable = true;
+
+      to the configuration which installs the package and enables the hardware module.
+    '';
+    homepage = "https://digitalbitbox.com/";
+    license = licenses.mit;
+    maintainers = with maintainers; [
+      vidbina
+    ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ding/default.nix b/nixpkgs/pkgs/applications/misc/ding/default.nix
new file mode 100644
index 000000000000..f0a7e2a779fe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ding/default.nix
@@ -0,0 +1,55 @@
+{ aspell, aspellDicts_de, aspellDicts_en, buildEnv, fetchurl, fortune, gnugrep, makeWrapper, lib, stdenv, tk, tre }:
+let
+  aspellEnv = buildEnv {
+    name = "env-ding-aspell";
+    paths = [
+      aspell
+      aspellDicts_de
+      aspellDicts_en
+    ];
+  };
+in
+stdenv.mkDerivation rec {
+  name = "ding-1.8.1";
+
+  src = fetchurl {
+    url = "http://ftp.tu-chemnitz.de/pub/Local/urz/ding/${name}.tar.gz";
+    sha256 = "0chjqs3z9zs1w3l7b5lsaj682rgnkf9kibcbzhggqqcn1pbvl5sq";
+  };
+
+  buildInputs = [ aspellEnv fortune gnugrep makeWrapper tk tre ];
+
+  patches = [ ./dict.patch ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/dict
+    mkdir -p $out/share/man/man1
+    mkdir -p $out/share/applications
+    mkdir -p $out/share/pixmaps
+
+    for f in ding ding.1; do
+      sed -i "s@/usr/share@$out/share@g" "$f"
+    done
+
+    sed -i "s@/usr/bin/fortune@fortune@g" ding
+
+    sed -i "s@/usr/bin/ding@$out/bin/ding@g" ding.desktop
+
+    cp -v ding $out/bin/
+    cp -v de-en.txt $out/share/dict/
+    cp -v ding.1 $out/share/man/man1/
+    cp -v ding.png $out/share/pixmaps/
+    cp -v ding.desktop $out/share/applications/
+
+    wrapProgram $out/bin/ding --prefix PATH : ${lib.makeBinPath [ gnugrep aspellEnv tk fortune ]} --prefix ASPELL_CONF : "\"prefix ${aspellEnv};\""
+  '';
+
+  meta = with lib; {
+    description = "Simple and fast dictionary lookup tool";
+    homepage = "https://www-user.tu-chemnitz.de/~fri/ding/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux; # homepage says: unix-like except darwin
+    maintainers = [ maintainers.exi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ding/dict.patch b/nixpkgs/pkgs/applications/misc/ding/dict.patch
new file mode 100644
index 000000000000..70ecea10550e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ding/dict.patch
@@ -0,0 +1,26 @@
+Ding persists its settings to $HOME/.dingrc on startup, this sadly includes the path to the dictionary.
+On all other distributions, that would be /usr/share/dict/de-en.txt and would hardly ever change.
+On nixos, this will indeed change on ever update and would break it for all users.
+This just comments out the dictionary path in the .dingrc so the user can still set it if she wants to, but it will not affect normal operations.
+--- a/ding
++++ b/ding
+@@ -899,7 +899,9 @@ if { ! [info exists ding_version]} {
+         }
+ 
+         # Change path of default ger-eng.txt when upgrading from version 1.1
+-        if {$searchmeth($i,dictfile) == {/usr/dict/ger-eng.txt} &&
++        if {! [info exists searchmeth($i,dictfile)]} {
++            set searchmeth($i,dictfile) $default_searchmeth(0,dictfile)
++        } elseif {$searchmeth($i,dictfile) == {/usr/dict/ger-eng.txt} &&
+             $ding_version == {1.1}} {
+             set searchmeth($i,dictfile) $default_searchmeth(0,dictfile)
+             debug 2 "New path and name of ger-eng.txt configured: $default_searchmeth(0,dictfile)"
+@@ -5065,7 +5067,7 @@ proc saveOptions {} {
+     foreach i $searchmpos {
+         puts $fd "set searchmeth($n,name) {$searchmeth($i,name)}"
+         puts $fd "set searchmeth($n,type) {$searchmeth($i,type)}"
+-        puts $fd "set searchmeth($n,dictfile) {$searchmeth($i,dictfile)}"
++        puts $fd "#set searchmeth($n,dictfile) {$searchmeth($i,dictfile)}"
+         puts $fd "set searchmeth($n,separator) {$searchmeth($i,separator)}"
+         puts $fd "set searchmeth($n,language1) {$searchmeth($i,language1)}"
+         puts $fd "set searchmeth($n,language2) {$searchmeth($i,language2)}"
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15142.patch b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15142.patch
new file mode 100644
index 000000000000..89ff3759451d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15142.patch
@@ -0,0 +1,72 @@
+commit 970fb11a296b5bbdc5e8425851253d2c5913c45e
+Author: Leon Bottou <leon@bottou.org>
+Date:   Tue Mar 26 20:36:31 2019 -0400
+
+    Fix bug#296
+
+diff --git a/libdjvu/DjVmDir.cpp b/libdjvu/DjVmDir.cpp
+index a6a39e0..0a0fac6 100644
+--- a/libdjvu/DjVmDir.cpp
++++ b/libdjvu/DjVmDir.cpp
+@@ -299,42 +299,44 @@ DjVmDir::decode(const GP<ByteStream> &gstr)
+          memcpy((char*) strings+strings_size, buffer, length);
+       }
+       DEBUG_MSG("size of decompressed names block=" << strings.size() << "\n");
+-      if (strings[strings.size()-1] != 0)
+-        {
+-         int strings_size=strings.size();
+-         strings.resize(strings_size+1);
+-         strings[strings_size] = 0;
+-        }
++      int strings_size=strings.size();
++      strings.resize(strings_size+3);
++      memset((char*) strings+strings_size, 0, 4);
+       
+-         // Copy names into the files
++      // Copy names into the files
+       const char * ptr=strings;
+       for(pos=files_list;pos;++pos)
+       {
+          GP<File> file=files_list[pos];
+-
++         if (ptr >= (const char*)strings + strings_size)
++           G_THROW( "DjVu document is corrupted (DjVmDir)" );
+          file->id=ptr;
+          ptr+=file->id.length()+1;
+          if (file->flags & File::HAS_NAME)
+          {
+-            file->name=ptr;
+-            ptr+=file->name.length()+1;
+-         } else
++           file->name=ptr;
++           ptr+=file->name.length()+1;
++         }
++         else
+          {
+             file->name=file->id;
+          }
+          if (file->flags & File::HAS_TITLE)
+          {
+-            file->title=ptr;
+-       ptr+=file->title.length()+1;
+-         } else
+-       file->title=file->id;
+-   /* msr debug:  multipage file, file->title is null.  
++           file->title=ptr;
++           ptr+=file->title.length()+1;
++         }
++         else
++         {
++           file->title=file->id;
++         }
++         /* msr debug:  multipage file, file->title is null.  
+          DEBUG_MSG(file->name << ", " << file->id << ", " << file->title << ", " <<
+                    file->offset << ", " << file->size << ", " <<
+                    file->is_page() << "\n"); */
+       }
+ 
+-         // Check that there is only one file with SHARED_ANNO flag on
++      // Check that there is only one file with SHARED_ANNO flag on
+       int shared_anno_cnt=0;
+       for(pos=files_list;pos;++pos)
+       {
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15143.patch b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15143.patch
new file mode 100644
index 000000000000..ef1905338fba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15143.patch
@@ -0,0 +1,39 @@
+commit b1f4e1b2187d9e5010cd01ceccf20b4a11ce723f
+Author: Leon Bottou <leon@bottou.org>
+Date:   Tue Mar 26 20:45:46 2019 -0400
+
+    fix for bug #297
+
+diff --git a/libdjvu/DjVmDir.cpp b/libdjvu/DjVmDir.cpp
+index 0a0fac6..5a49015 100644
+--- a/libdjvu/DjVmDir.cpp
++++ b/libdjvu/DjVmDir.cpp
+@@ -309,7 +309,7 @@ DjVmDir::decode(const GP<ByteStream> &gstr)
+       {
+          GP<File> file=files_list[pos];
+          if (ptr >= (const char*)strings + strings_size)
+-           G_THROW( "DjVu document is corrupted (DjVmDir)" );
++           G_THROW( ByteStream::EndOfFile );
+          file->id=ptr;
+          ptr+=file->id.length()+1;
+          if (file->flags & File::HAS_NAME)
+diff --git a/libdjvu/GBitmap.cpp b/libdjvu/GBitmap.cpp
+index 0e487f0..c2fdbe4 100644
+--- a/libdjvu/GBitmap.cpp
++++ b/libdjvu/GBitmap.cpp
+@@ -890,11 +890,13 @@ GBitmap::read_rle_raw(ByteStream &bs)
+   int c = 0;
+   while (n >= 0)
+     {
+-      bs.read(&h, 1);
++      if (bs.read(&h, 1) <= 0)
++        G_THROW( ByteStream::EndOfFile );
+       int x = h;
+       if (x >= (int)RUNOVERFLOWVALUE)
+         {
+-          bs.read(&h, 1);
++          if (bs.read(&h, 1) <= 0)
++            G_THROW( ByteStream::EndOfFile );
+           x = h + ((x - (int)RUNOVERFLOWVALUE) << 8);
+         }
+       if (c+x > ncolumns)
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15144.patch b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15144.patch
new file mode 100644
index 000000000000..6094be883385
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15144.patch
@@ -0,0 +1,111 @@
+commit e15d51510048927f172f1bf1f27ede65907d940d
+Author: Leon Bottou <leon@bottou.org>
+Date:   Mon Apr 8 22:25:55 2019 -0400
+
+    bug 299 fixed
+
+diff --git a/libdjvu/GContainer.h b/libdjvu/GContainer.h
+index 96b067c..0140211 100644
+--- a/libdjvu/GContainer.h
++++ b/libdjvu/GContainer.h
+@@ -550,52 +550,61 @@ public:
+ template <class TYPE> void
+ GArrayTemplate<TYPE>::sort(int lo, int hi)
+ {
+-  if (hi <= lo)
+-    return;
+-  if (hi > hibound || lo<lobound)
+-    G_THROW( ERR_MSG("GContainer.illegal_subscript") );
+   TYPE *data = (TYPE*)(*this);
+-  // Test for insertion sort
+-  if (hi <= lo + 50)
++  while(true)
+     {
+-      for (int i=lo+1; i<=hi; i++)
++      if (hi <= lo)
++        return;
++      if (hi > hibound || lo<lobound)
++        G_THROW( ERR_MSG("GContainer.illegal_subscript") );
++      // Test for insertion sort
++      if (hi <= lo + 50)
+         {
+-          int j = i;
+-          TYPE tmp = data[i];
+-          while ((--j>=lo) && !(data[j]<=tmp))
+-            data[j+1] = data[j];
+-          data[j+1] = tmp;
++          for (int i=lo+1; i<=hi; i++)
++            {
++              int j = i;
++              TYPE tmp = data[i];
++              while ((--j>=lo) && !(data[j]<=tmp))
++                data[j+1] = data[j];
++              data[j+1] = tmp;
++            }
++          return;
+         }
+-      return;
+-    }
+-  // -- determine suitable quick-sort pivot
+-  TYPE tmp = data[lo];
+-  TYPE pivot = data[(lo+hi)/2];
+-  if (pivot <= tmp)
+-    { tmp = pivot; pivot=data[lo]; }
+-  if (data[hi] <= tmp)
+-    { pivot = tmp; }
+-  else if (data[hi] <= pivot)
+-    { pivot = data[hi]; }
+-  // -- partition set
+-  int h = hi;
+-  int l = lo;
+-  while (l < h)
+-    {
+-      while (! (pivot <= data[l])) l++;
+-      while (! (data[h] <= pivot)) h--;
+-      if (l < h)
++      // -- determine median-of-three pivot
++      TYPE tmp = data[lo];
++      TYPE pivot = data[(lo+hi)/2];
++      if (pivot <= tmp)
++        { tmp = pivot; pivot=data[lo]; }
++      if (data[hi] <= tmp)
++        { pivot = tmp; }
++      else if (data[hi] <= pivot)
++        { pivot = data[hi]; }
++      // -- partition set
++      int h = hi;
++      int l = lo;
++      while (l < h)
+         {
+-          tmp = data[l];
+-          data[l] = data[h];
+-          data[h] = tmp;
+-          l = l+1;
+-          h = h-1;
++          while (! (pivot <= data[l])) l++;
++          while (! (data[h] <= pivot)) h--;
++          if (l < h)
++            {
++              tmp = data[l];
++              data[l] = data[h];
++              data[h] = tmp;
++              l = l+1;
++              h = h-1;
++            }
++        }
++      // -- recurse, small partition first
++      //    tail-recursion elimination
++      if (h - lo <= hi - l) {
++        sort(lo,h);
++        lo = l; // sort(l,hi)
++      } else {
++        sort(l,hi);
++        hi = h; // sort(lo,h)
+       }
+     }
+-  // -- recursively restart
+-  sort(lo, h);
+-  sort(l, hi);
+ }
+ 
+ template<class TYPE> inline TYPE&
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15145.patch b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15145.patch
new file mode 100644
index 000000000000..01108f9ee738
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-15145.patch
@@ -0,0 +1,28 @@
+commit 9658b01431cd7ff6344d7787f855179e73fe81a7
+Author: Leon Bottou <leon@bottou.org>
+Date:   Mon Apr 8 22:55:38 2019 -0400
+
+    fix bug #298
+
+diff --git a/libdjvu/GBitmap.h b/libdjvu/GBitmap.h
+index e8e0c9b..ca89a19 100644
+--- a/libdjvu/GBitmap.h
++++ b/libdjvu/GBitmap.h
+@@ -566,7 +566,7 @@ GBitmap::operator[](int row)
+ {
+   if (!bytes) 
+     uncompress();
+-  if (row<0 || row>=nrows) {
++  if (row<0 || row>=nrows || !bytes) {
+ #ifndef NDEBUG
+     if (zerosize < bytes_per_row + border)
+       G_THROW( ERR_MSG("GBitmap.zero_small") );
+@@ -581,7 +581,7 @@ GBitmap::operator[](int row) const
+ {
+   if (!bytes) 
+     ((GBitmap*)this)->uncompress();
+-  if (row<0 || row>=nrows) {
++  if (row<0 || row>=nrows || !bytes) {
+ #ifndef NDEBUG
+     if (zerosize < bytes_per_row + border)
+       G_THROW( ERR_MSG("GBitmap.zero_small") );
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-18804.patch b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-18804.patch
new file mode 100644
index 000000000000..132fed794888
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2019-18804.patch
@@ -0,0 +1,32 @@
+commit c8bec6549c10ffaa2f2fbad8bbc629efdf0dd125
+Author: Leon Bottou <leon@bottou.org>
+Date:   Thu Oct 17 22:20:31 2019 -0400
+
+    Fixed bug 309
+
+diff --git a/libdjvu/IW44EncodeCodec.cpp b/libdjvu/IW44EncodeCodec.cpp
+index 00752a0..f81eaeb 100644
+--- a/libdjvu/IW44EncodeCodec.cpp
++++ b/libdjvu/IW44EncodeCodec.cpp
+@@ -405,7 +405,7 @@ filter_fv(short *p, int w, int h, int rowsize, int scale)
+   int y = 0;
+   int s = scale*rowsize;
+   int s3 = s+s+s;
+-  h = ((h-1)/scale)+1;
++  h = (h>0) ? ((h-1)/scale)+1 : 0;
+   y += 1;
+   p += s;
+   while (y-3 < h)
+diff --git a/tools/ddjvu.cpp b/tools/ddjvu.cpp
+index 6d0df3b..7109952 100644
+--- a/tools/ddjvu.cpp
++++ b/tools/ddjvu.cpp
+@@ -279,7 +279,7 @@ render(ddjvu_page_t *page, int pageno)
+       prect.h = (ih * 100) / dpi;
+     }
+   /* Process aspect ratio */
+-  if (flag_aspect <= 0)
++  if (flag_aspect <= 0 && iw>0 && ih>0)
+     {
+       double dw = (double)iw / prect.w;
+       double dh = (double)ih / prect.h;
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/default.nix b/nixpkgs/pkgs/applications/misc/djvulibre/default.nix
new file mode 100644
index 000000000000..d4384e829cf5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv
+, fetchurl
+, libjpeg
+, libtiff
+, librsvg
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "djvulibre";
+  version = "3.5.27";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/djvu/${pname}-${version}.tar.gz";
+    sha256 = "0psh3zl9dj4n4r3lx25390nx34xz0bg0ql48zdskhq354ljni5p6";
+  };
+
+  outputs = [ "bin" "dev" "out" ];
+
+  buildInputs = [
+    libjpeg
+    libtiff
+    librsvg
+    libiconv
+  ];
+
+  patches = [
+    ./CVE-2019-18804.patch
+    # This one is needed to make the following
+    # two CVE patches apply cleanly
+    ./fix_hongfuzz_crash.patch
+    ./CVE-2019-15142.patch
+    ./CVE-2019-15143.patch
+    ./CVE-2019-15144.patch
+    ./CVE-2019-15145.patch
+  ];
+
+  meta = with lib; {
+    description = "The big set of CLI tools to make/modify/optimize/show/export DJVU files";
+    homepage = "http://djvu.sourceforge.net";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ Anton-Latukha ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/fix_hongfuzz_crash.patch b/nixpkgs/pkgs/applications/misc/djvulibre/fix_hongfuzz_crash.patch
new file mode 100644
index 000000000000..609b41cd9db7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/fix_hongfuzz_crash.patch
@@ -0,0 +1,51 @@
+commit 89d71b01d606e57ecec2c2930c145bb20ba5bbe3
+Author: Leon Bottou <leon@bottou.org>
+Date:   Fri Jul 13 08:46:22 2018 -0400
+
+    fix hongfuzz crash.
+
+diff --git a/libdjvu/DjVmDir.cpp b/libdjvu/DjVmDir.cpp
+index d322323..a6a39e0 100644
+--- a/libdjvu/DjVmDir.cpp
++++ b/libdjvu/DjVmDir.cpp
+@@ -299,7 +299,13 @@ DjVmDir::decode(const GP<ByteStream> &gstr)
+          memcpy((char*) strings+strings_size, buffer, length);
+       }
+       DEBUG_MSG("size of decompressed names block=" << strings.size() << "\n");
+-   
++      if (strings[strings.size()-1] != 0)
++        {
++         int strings_size=strings.size();
++         strings.resize(strings_size+1);
++         strings[strings_size] = 0;
++        }
++      
+          // Copy names into the files
+       const char * ptr=strings;
+       for(pos=files_list;pos;++pos)
+diff --git a/libdjvu/miniexp.cpp b/libdjvu/miniexp.cpp
+index 6a5cd90..828addc 100644
+--- a/libdjvu/miniexp.cpp
++++ b/libdjvu/miniexp.cpp
+@@ -1065,7 +1065,7 @@ print_c_string(const char *s, char *d, int flags, size_t len)
+       c = (unsigned char)(*s++);
+       if (char_quoted(c, flags))
+         {
+-          char buffer[10];
++          char buffer[16]; /* 10+1 */
+           static const char *tr1 = "\"\\tnrbf";
+           static const char *tr2 = "\"\\\t\n\r\b\f";
+           buffer[0] = buffer[1] = 0;
+diff --git a/tools/csepdjvu.cpp b/tools/csepdjvu.cpp
+index 7ed13ad..fab9472 100644
+--- a/tools/csepdjvu.cpp
++++ b/tools/csepdjvu.cpp
+@@ -1834,7 +1834,7 @@ main(int argc, const char **argv)
+                 ByteStream::create(GURL::Filename::UTF8(arg),"rb");
+               BufferByteStream ibs(*fbs);
+               do {
+-                char pagename[16];
++                char pagename[20];
+                 sprintf(pagename, "p%04d.djvu", ++pageno);
+                 if (opts.verbose > 1)
+                   DjVuPrintErrorUTF8("%s","--------------------\n");
diff --git a/nixpkgs/pkgs/applications/misc/dmensamenu/default.nix b/nixpkgs/pkgs/applications/misc/dmensamenu/default.nix
new file mode 100644
index 000000000000..a0b4237c7f67
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmensamenu/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, buildPythonApplication, fetchFromGitHub, substituteAll, requests, dmenu }:
+
+buildPythonApplication rec {
+  pname = "dmensamenu";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "dotlambda";
+    repo = "dmensamenu";
+    rev = version;
+    sha256 = "15c8g2vdban3dw3g979icypgpx52irpvv39indgk19adicgnzzqp";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./dmenu-path.patch;
+      inherit dmenu;
+    })
+  ];
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  # No tests implemented
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/dotlambda/dmensamenu";
+    description = "Print German canteen menus using dmenu and OpenMensa";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dmensamenu/dmenu-path.patch b/nixpkgs/pkgs/applications/misc/dmensamenu/dmenu-path.patch
new file mode 100644
index 000000000000..1508e5142d29
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmensamenu/dmenu-path.patch
@@ -0,0 +1,13 @@
+diff --git a/dmensamenu/dmensamenu.py b/dmensamenu/dmensamenu.py
+index 7df49f2..052ef1b 100644
+--- a/dmensamenu/dmensamenu.py
++++ b/dmensamenu/dmensamenu.py
+@@ -99,7 +99,7 @@ def main():
+     parser.add_argument('--city',
+                         help='When searching for a canteen, only show the ones from the city specified'
+                             +' (case-insensitive).')
+-    parser.add_argument('--dmenu', metavar='CMD', default='dmenu -i -l "$lines" -p "$date"',
++    parser.add_argument('--dmenu', metavar='CMD', default='@dmenu@/bin/dmenu -i -l "$lines" -p "$date"',
+                         help='Command to execute. '
+                              'Can be used to pass custom parameters to dmenu. '
+                              'The shell variable $lines will be set to the number of items on the menu '
diff --git a/nixpkgs/pkgs/applications/misc/dmenu/default.nix b/nixpkgs/pkgs/applications/misc/dmenu/default.nix
new file mode 100644
index 000000000000..62f02ce67142
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmenu/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, libX11, libXinerama, libXft, zlib, patches ? null }:
+
+stdenv.mkDerivation rec {
+  name = "dmenu-5.0";
+
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/${name}.tar.gz";
+    sha256 = "1lvfxzg3chsgcqbc2vr0zic7vimijgmbvnspayx73kyvqi1f267y";
+  };
+
+  buildInputs = [ libX11 libXinerama zlib libXft ];
+
+  inherit patches;
+
+  postPatch = ''
+    sed -ri -e 's!\<(dmenu|dmenu_path|stest)\>!'"$out/bin"'/&!g' dmenu_run
+    sed -ri -e 's!\<stest\>!'"$out/bin"'/&!g' dmenu_path
+  '';
+
+  preConfigure = ''
+    sed -i "s@PREFIX = /usr/local@PREFIX = $out@g" config.mk
+  '';
+
+  makeFlags = [ "CC:=$(CC)" ];
+
+  meta = with lib; {
+      description = "A generic, highly customizable, and efficient menu for the X Window System";
+      homepage = "https://tools.suckless.org/dmenu";
+      license = licenses.mit;
+      maintainers = with maintainers; [ pSub globin ];
+      platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dmenu/wayland.nix b/nixpkgs/pkgs/applications/misc/dmenu/wayland.nix
new file mode 100644
index 000000000000..8d77588ce8f1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmenu/wayland.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, cairo, pango, pkg-config, wayland-protocols
+, glib, wayland, libxkbcommon, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dmenu-wayland-unstable";
+  version = "2020-07-06";
+
+  src = fetchFromGitHub {
+    owner = "nyyManni";
+    repo = "dmenu-wayland";
+    rev = "304c8e917651ee02b16ebf0b7097a5c53fa2236b";
+    sha256 = "0rkpmpk7xkcfbnv9vpg8n65423z5xpgp0hm2vg0rxf9354bjin7k";
+  };
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ meson ninja pkg-config makeWrapper ];
+  buildInputs = [ cairo pango wayland-protocols glib wayland libxkbcommon ];
+
+  postInstall = ''
+    wrapProgram $out/bin/dmenu-wl_run \
+      --prefix PATH : $out/bin
+  '';
+
+  meta = with lib; {
+    license = licenses.mit;
+    platforms = platforms.linux;
+    description = "dmenu for wayland-compositors";
+    homepage = "https://github.com/nyyManni/dmenu-wayland";
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dockbarx/default.nix b/nixpkgs/pkgs/applications/misc/dockbarx/default.nix
new file mode 100644
index 000000000000..e0e9fcd6febf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dockbarx/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, pythonPackages, gnome2, keybinder }:
+
+pythonPackages.buildPythonApplication rec {
+  ver = "0.93";
+  name = "dockbarx-${ver}";
+
+  src = fetchFromGitHub {
+    owner = "M7S";
+    repo = "dockbarx";
+    rev = ver;
+    sha256 = "1h1g2vag5vnx87sa1f0qi8rq7wlr2ymvkrdr08kk7cma4wk0x6hg";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py                                --replace /usr/                   ""
+    substituteInPlace setup.py                                --replace '"/", "usr", "share",'  '"share",'
+    substituteInPlace dockbarx/applets.py                     --replace /usr/share/             $out/share/
+    substituteInPlace dockbarx/dockbar.py                     --replace /usr/share/             $out/share/
+    substituteInPlace dockbarx/iconfactory.py                 --replace /usr/share/             $out/share/
+    substituteInPlace dockbarx/theme.py                       --replace /usr/share/             $out/share/
+    substituteInPlace dockx_applets/battery_status.py         --replace /usr/share/             $out/share/
+    substituteInPlace dockx_applets/namebar.py                --replace /usr/share/             $out/share/
+    substituteInPlace dockx_applets/namebar_window_buttons.py --replace /usr/share/             $out/share/
+    substituteInPlace dockx_applets/volume-control.py         --replace /usr/share/             $out/share/
+  '';
+
+  propagatedBuildInputs = (with pythonPackages; [ pygtk pyxdg dbus-python pillow xlib ])
+    ++ (with gnome2; [ gnome_python gnome_python_desktop ])
+    ++ [ keybinder ];
+
+  # no tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://launchpad.net/dockbar/";
+    description = "Lightweight taskbar / panel replacement for Linux which works as a stand-alone dock";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.volth ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/doing/Gemfile b/nixpkgs/pkgs/applications/misc/doing/Gemfile
new file mode 100644
index 000000000000..2706a85e9d89
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doing/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'doing', '1.0.10pre'
diff --git a/nixpkgs/pkgs/applications/misc/doing/Gemfile.lock b/nixpkgs/pkgs/applications/misc/doing/Gemfile.lock
new file mode 100644
index 000000000000..1b969869f76c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doing/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chronic (0.10.2)
+    deep_merge (1.2.1)
+    doing (1.0.10pre)
+      chronic (~> 0.10, >= 0.10.2)
+      deep_merge
+      gli (~> 2.17.1)
+      haml (= 4.0.3)
+      json (~> 1.8.1)
+    gli (2.17.1)
+    haml (4.0.3)
+      tilt
+    json (1.8.6)
+    tilt (2.0.8)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  doing (= 1.0.10pre)
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/misc/doing/default.nix b/nixpkgs/pkgs/applications/misc/doing/default.nix
new file mode 100644
index 000000000000..e539cf3ae19e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doing/default.nix
@@ -0,0 +1,25 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript
+}:
+
+bundlerEnv {
+  pname = "doing";
+  version = (import ./gemset.nix).doing.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "doing";
+
+  meta = with lib; {
+    description = "A command line tool for keeping track of what you’re doing and tracking what you’ve done";
+    longDescription = ''
+      doing is a basic CLI for adding and listing "what was I doing" reminders
+      in a TaskPaper-formatted text file. It allows for multiple
+      sections/categories and flexible output formatting.
+    '';
+    homepage    = "https://brettterpstra.com/projects/doing/";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ktf nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/doing/gemset.nix b/nixpkgs/pkgs/applications/misc/doing/gemset.nix
new file mode 100644
index 000000000000..1e39123a83ba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doing/gemset.nix
@@ -0,0 +1,60 @@
+{
+  chronic = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  deep_merge = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q3picw7zx1xdkybmrnhmk2hycxzaa0jv4gqrby1s90dy5n7fmsb";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  doing = {
+    dependencies = ["chronic" "deep_merge" "gli" "haml" "json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y42yc7h45sz9hqj3g1dd77ipx58l7v64i7mrsj3is2f5rszd1rv";
+      type = "gem";
+    };
+    version = "1.0.10pre";
+  };
+  gli = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g7g3lxhh2b4h4im58zywj9vcfixfgndfsvp84cr3x67b5zm4kaq";
+      type = "gem";
+    };
+    version = "2.17.1";
+  };
+  haml = {
+    dependencies = ["tilt"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l9zhfdk9z7xjfdp108r9fw4xa55hflin7hh3lpafbf9bdz96knr";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  tilt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra";
+      type = "gem";
+    };
+    version = "2.0.8";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/doomseeker/default.nix b/nixpkgs/pkgs/applications/misc/doomseeker/default.nix
new file mode 100644
index 000000000000..48ea1a0296cf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doomseeker/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, mkDerivation, cmake, fetchFromBitbucket, pkg-config, qtbase, qttools, qtmultimedia, zlib, bzip2, xxd }:
+
+mkDerivation {
+  pname = "doomseeker";
+  version = "2018-03-05";
+
+  src = fetchFromBitbucket {
+    owner = "Doomseeker";
+    repo = "doomseeker";
+    rev = "c2c7f37b1afb";
+    sha256 = "17fna3a604miqsvply3klnmypps4ifz8axgd3pj96z46ybxs8akw";
+  };
+
+  patches = [ ./fix_paths.patch ./qt_build_fix.patch ];
+
+  nativeBuildInputs = [ cmake qttools pkg-config xxd ];
+  buildInputs = [ qtbase qtmultimedia zlib bzip2 ];
+
+  hardeningDisable = lib.optional stdenv.isDarwin "format";
+
+  meta = with lib; {
+    homepage = "http://doomseeker.drdteam.org/";
+    description = "Multiplayer server browser for many Doom source ports";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.MP2E ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/doomseeker/fix_paths.patch b/nixpkgs/pkgs/applications/misc/doomseeker/fix_paths.patch
new file mode 100644
index 000000000000..08654c2384cb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doomseeker/fix_paths.patch
@@ -0,0 +1,40 @@
+diff -ru3 source-old/src/core/datapaths.cpp source-new/src/core/datapaths.cpp
+--- source-old/src/core/datapaths.cpp	1970-01-01 03:00:01.000000000 +0300
++++ source-new/src/core/datapaths.cpp	2018-03-04 00:10:25.247262567 +0300
+@@ -335,7 +335,7 @@
+ 	paths.append(workingDirectory());
+ 	paths.append("./");
+ #ifndef Q_OS_WIN32
+-	paths.append(INSTALL_PREFIX "/" INSTALL_LIBDIR "/doomseeker/");
++	paths.append(INSTALL_PREFIX "/lib/doomseeker/");
+ #endif
+ 	paths = uniquePaths(paths);
+ 	return Strings::combineManyPaths(paths, "engines/");
+diff -ru3 source-old/src/core/pathfinder/pathfinder.cpp source-new/src/core/pathfinder/pathfinder.cpp
+--- source-old/src/core/pathfinder/pathfinder.cpp	1970-01-01 03:00:01.000000000 +0300
++++ source-new/src/core/pathfinder/pathfinder.cpp	2018-03-04 00:09:34.862556976 +0300
+@@ -128,9 +128,7 @@
+ 		<< DataPaths::programFilesDirectory(DataPaths::x64)
+ 		<< DataPaths::programFilesDirectory(DataPaths::x86);
+ #else
+-	paths << "/usr/bin" << "/usr/local/bin" << "/usr/share/bin"
+-		<< "/usr/games/" << "/usr/local/games/"
+-		<< "/usr/share/games/" << gDefaultDataPaths->workingDirectory() << ".";
++	paths << gDefaultDataPaths->workingDirectory() << ".";
+ #endif
+ 	QStringList pathsCopy(paths);
+ 	foreach (const QString &path, pathsCopy)
+diff -ru3 source-old/src/core/pathfinder/wadpathfinder.cpp source-new/src/core/pathfinder/wadpathfinder.cpp
+--- source-old/src/core/pathfinder/wadpathfinder.cpp	1970-01-01 03:00:01.000000000 +0300
++++ source-new/src/core/pathfinder/wadpathfinder.cpp	2018-03-04 00:09:56.822865339 +0300
+@@ -84,10 +84,6 @@
+ 		QStringList defaultPaths()

+ 		{

+ 			QStringList paths;

+-			#ifdef Q_OS_UNIX

+-			paths << "/usr/local/share/games/doom/"

+-				<< "/usr/share/games/doom/";

+-			#endif

+ 			return paths;

+ 		}

+ };

diff --git a/nixpkgs/pkgs/applications/misc/doomseeker/qt_build_fix.patch b/nixpkgs/pkgs/applications/misc/doomseeker/qt_build_fix.patch
new file mode 100644
index 000000000000..e21b53b3cc53
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doomseeker/qt_build_fix.patch
@@ -0,0 +1,47 @@
+diff -r c2c7f37b1afb src/core/gui/irc/ircdock.cpp
+--- a/src/core/gui/irc/ircdock.cpp	Tue Mar 06 00:14:23 2018 +0100
++++ b/src/core/gui/irc/ircdock.cpp	Sat Jul 28 16:53:04 2018 -0700
+@@ -32,6 +32,7 @@
+ #include <QInputDialog>
+ #include <QMessageBox>
+ #include <QToolBar>
++#include <QTabBar>
+ 
+ DClass<IRCDock> : public Ui::IRCDock
+ {
+diff -r c2c7f37b1afb src/core/gui/logdock.cpp
+--- a/src/core/gui/logdock.cpp	Tue Mar 06 00:14:23 2018 +0100
++++ b/src/core/gui/logdock.cpp	Sat Jul 28 16:53:04 2018 -0700
+@@ -21,6 +21,8 @@
+ // Copyright (C) 2009 "Zalewa" <zalewapl@gmail.com>
+ //------------------------------------------------------------------------------
+ 
++#include <QAction>
++
+ #include "clipboard.h"
+ #include "logdock.h"
+ #include "log.h"
+diff -r c2c7f37b1afb src/core/gui/serverdetailsdock.cpp
+--- a/src/core/gui/serverdetailsdock.cpp	Tue Mar 06 00:14:23 2018 +0100
++++ b/src/core/gui/serverdetailsdock.cpp	Sat Jul 28 16:53:04 2018 -0700
+@@ -21,6 +21,7 @@
+ // Copyright (C) 2014 Braden "Blzut3" Obrzut <admin@maniacsvault.net>
+ //------------------------------------------------------------------------------
+ 
++#include <QAction>
+ #include <QBoxLayout>
+ 
+ #include "serverdetailsdock.h"
+diff -r c2c7f37b1afb src/core/gui/serverfilterdock.cpp
+--- a/src/core/gui/serverfilterdock.cpp	Tue Mar 06 00:14:23 2018 +0100
++++ b/src/core/gui/serverfilterdock.cpp	Sat Jul 28 16:53:04 2018 -0700
+@@ -20,6 +20,9 @@
+ //------------------------------------------------------------------------------
+ // Copyright (C) 2011 "Zalewa" <zalewapl@gmail.com>
+ //------------------------------------------------------------------------------
++
++#include <QAction>
++
+ #include "serverfilterdock.h"
+ #include "ui_serverfilterdock.h"
+ 
diff --git a/nixpkgs/pkgs/applications/misc/dotfiles/default.nix b/nixpkgs/pkgs/applications/misc/dotfiles/default.nix
new file mode 100644
index 000000000000..913ed9523baa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dotfiles/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "dotfiles";
+  version = "0.6.4";
+
+  src = pythonPackages.fetchPypi {
+    inherit version pname;
+    sha256 = "03qis6m9r2qh00sqbgwsm883s4bj1ibwpgk86yh4l235mdw8jywv";
+  };
+
+  # No tests in archive
+  doCheck = false;
+
+  checkInputs = with pythonPackages; [ pytest ];
+  propagatedBuildInputs = with pythonPackages; [ click ];
+
+  meta = with lib; {
+    description = "Easily manage your dotfiles";
+    homepage = "https://github.com/jbernard/dotfiles";
+    license = licenses.isc;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dozenal/default.nix b/nixpkgs/pkgs/applications/misc/dozenal/default.nix
new file mode 100644
index 000000000000..ae5dd170eb92
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dozenal/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, hdate, lua5_2 }:
+
+stdenv.mkDerivation rec {
+  version = "12010904";
+  pname = "dozenal";
+  src = fetchFromGitHub {
+    owner = "dgoodmaniii";
+    repo = "dozenal";
+    rev = "v${version}";
+    sha256 = "1ic63gpdda762x6ks3al71dwgmsy2isicqyr2935bd245jx8s209";
+  };
+  makeFlags = [
+              # author do not use configure and prefix directly using $prefix
+              "prefix=$(out)"
+              # graphical version of dozdc requires xforms, which is not i nixpkgs so I turned it down
+              "XFORMS_FLAGS=-UXFORMS"
+              "LUALIB=-llua"
+              "bindir=$(prefix)/bin/"
+            ];
+  # some include hardcodes the lua libraries path. This is a patch for that
+  patches = [ ./lua-header.patch ];
+  preBuild = "cd dozenal";
+  buildInputs = [ ncurses hdate lua5_2 ];
+  # I remove gdozdc, as I didn't figure all it's dependency yet.
+  postInstall = "rm $out/bin/gdozdc";
+
+  meta = {
+    description = "A complete suite of dozenal (base twelve) programs";
+    longDescription = ''
+      Programs
+
+      doz --- a converter; converts decimal numbers into dozenal. Accepts
+         input in standard or exponential notation (i.e., "1492.2" or "1.4922e3").
+      dec --- a converter; converts dozenal numbers into decimal. Accepts input
+         in standard or exponential notation (i.e., "X44;4" or "X;444e2").
+      dozword --- converts a dozenal number (integers only) into words,
+         according to the Pendlebury system.
+      dozdc --- a full-featured scientific calculator which works in the
+         dozenal base. RPN command line.
+      tgmconv --- a converter for all standard measurements; converts to and
+         from TGM, Imperial, customary, and SI metric.
+      dozpret --- a pretty-printer for dozenal numbers; inserts spacing (or
+         other characters) as desired, and can also transform transdecimal digits
+         from 'X' to 'E' into any character or sequence of characters desired.
+      dozdate --- a more-or-less drop-in replacement for GNU and BSD date, it
+         outputs the date and time in dozenal, as well as containing some TGM
+         extensions.
+      dozstring --- a simple byte converter; absorbs a string either from
+         standard input or a command line argument, leaving it identical but
+         for the numbers, which it converts into dozenal. Options for padding
+         and for not converting specific numbers.
+      doman --- a converter which takes a dozenal integer and
+         emits its equivalent in a non-place-value system, such as
+         Roman numerals.  Arbitrary ranks and symbols may be used.
+         Defaults to dozenal Roman numerals.
+    '';
+    homepage = "https://github.com/dgoodmaniii/dozenal/";
+    maintainers = with lib.maintainers; [ CharlesHD ];
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dozenal/lua-header.patch b/nixpkgs/pkgs/applications/misc/dozenal/lua-header.patch
new file mode 100644
index 000000000000..45b76e159a11
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dozenal/lua-header.patch
@@ -0,0 +1,16 @@
+diff -ruN dozenal-12010904/dozenal/dozcal/call_lua.c dozenal-patched/dozenal/dozcal/call_lua.c
+--- dozenal-12010904/dozenal/dozcal/call_lua.c	2017-09-04 19:25:01.000000000 +0200
++++ dozenal-patched/dozenal/dozcal/call_lua.c	2018-06-13 10:19:57.821950327 +0200
+@@ -38,9 +38,9 @@
+ #include"utility.h"
+ #include"conv.h"
+ #include"proc_date.h"
+-#include<lua5.2/lua.h>
+-#include<lua5.2/lauxlib.h>
+-#include<lua5.2/lualib.h>
++#include<lua.h>
++#include<lauxlib.h>
++#include<lualib.h>
+ 
+ void bail(lua_State *L, int err_code, char *filename);
+ int file_prefix(char **s, char *t);
diff --git a/nixpkgs/pkgs/applications/misc/dstask/default.nix b/nixpkgs/pkgs/applications/misc/dstask/default.nix
new file mode 100644
index 000000000000..78efa133c1e4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dstask/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "dstask";
+  version = "0.23.1";
+
+  src = fetchFromGitHub {
+    owner = "naggie";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0rfz8jim0xqcwdb5n28942v9r3hbvhjrwdgzvbwc9f9psqg2s8d2";
+  };
+
+  # Set vendorSha256 to null because dstask vendors its dependencies (meaning
+  # that third party dependencies are stored in the repository).
+  #
+  # Ref <https://github.com/NixOS/nixpkgs/pull/87383#issuecomment-633204382>
+  # and <https://github.com/NixOS/nixpkgs/blob/d4226e3a4b5fcf988027147164e86665d382bbfa/pkgs/development/go-modules/generic/default.nix#L18>
+  vendorSha256 = null;
+
+  doCheck = false;
+
+  # The ldflags reduce the executable size by stripping some debug stuff.
+  # The other variables are set so that the output of dstask version shows the
+  # git ref and the release version from github.
+  # Ref <https://github.com/NixOS/nixpkgs/pull/87383#discussion_r432097657>
+  buildFlagsArray = [ ''
+    -ldflags=-w -s
+    -X "github.com/naggie/dstask.VERSION=${version}"
+    -X "github.com/naggie/dstask.GIT_COMMIT=v${version}"
+  '' ];
+
+  subPackages = [ "cmd/dstask.go" ];
+
+  meta = with lib; {
+    description = "Command line todo list with super-reliable git sync";
+    homepage = src.meta.homepage;
+    license = licenses.mit;
+    maintainers = with maintainers; [ stianlagstad foxit64 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dunst/default.nix b/nixpkgs/pkgs/applications/misc/dunst/default.nix
new file mode 100644
index 000000000000..eed07a2356e6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dunst/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper
+, pkg-config, which, perl, libXrandr
+, cairo, dbus, systemd, gdk-pixbuf, glib, libX11, libXScrnSaver
+, libXinerama, libnotify, pango, xorgproto, librsvg, dunstify ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dunst";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "dunst-project";
+    repo = "dunst";
+    rev = "v${version}";
+    sha256 = "0irwkqcgwkqaylcpvqgh25gn2ysbdm2kydipxfzcq1ddj9ns6f9c";
+  };
+
+  nativeBuildInputs = [ perl pkg-config which systemd makeWrapper ];
+
+  buildInputs = [
+    cairo dbus gdk-pixbuf glib libX11 libXScrnSaver
+    libXinerama libnotify pango xorgproto librsvg libXrandr
+  ];
+
+  outputs = [ "out" "man" ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "VERSION=$(version)"
+    "SERVICEDIR_DBUS=$(out)/share/dbus-1/services"
+    "SERVICEDIR_SYSTEMD=$(out)/lib/systemd/user"
+  ];
+
+  buildFlags = if dunstify then [ "dunstify" ] else [];
+
+  postInstall = lib.optionalString dunstify ''
+    install -Dm755 dunstify $out/bin
+  '' + ''
+    wrapProgram $out/bin/dunst \
+      --set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE"
+  '';
+
+  meta = with lib; {
+    description = "Lightweight and customizable notification daemon";
+    homepage = "https://dunst-project.org/";
+    license = licenses.bsd3;
+    # NOTE: 'unix' or even 'all' COULD work too, I'm not sure
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ domenkozar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dupeguru/default.nix b/nixpkgs/pkgs/applications/misc/dupeguru/default.nix
new file mode 100644
index 000000000000..418658fec228
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dupeguru/default.nix
@@ -0,0 +1,71 @@
+{lib, stdenv, python3Packages, fetchpatch, gettext, qt5, fetchFromGitHub}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "dupeguru";
+  version = "4.0.4";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "arsenetar";
+    repo = "dupeguru";
+    rev = version;
+    sha256 = "0ma4f1c6vmpz8gi4sdy43x1ik7wh42wayvk1iq520d3i714kfcpy";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # already merged to master, remove next version bump
+    (fetchpatch {
+      name = "remove-m-from-so-var.patch";
+      url = "https://github.com/arsenetar/dupeguru/commit/bd0f53bcbe463c48fe141b73af13542da36d82ba.patch";
+      sha256 = "07iisz8kcr7v8lb21inzj1avlpfhh9k8wcivbd33w49cr3mmnr26";
+    })
+  ];
+
+  nativeBuildInputs = [
+    gettext
+    python3Packages.pyqt5
+    qt5.wrapQtAppsHook
+  ];
+
+  pythonPath = with python3Packages; [
+    pyqt5
+    send2trash
+    sphinx
+    polib
+    hsaudiotag3k
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "NO_VENV=1"
+  ];
+
+  # TODO: package pytest-monkeyplus for running tests
+  # https://github.com/NixOS/nixpkgs/pull/75054/files#r357690123
+  doCheck = false;
+
+  # Avoid double wrapping Python programs.
+  dontWrapQtApps = true;
+
+  # TODO: A bug in python wrapper
+  # see https://github.com/NixOS/nixpkgs/pull/75054#discussion_r357656916
+  preFixup = ''
+    makeWrapperArgs="''${qtWrapperArgs[@]}"
+  '';
+
+  # Executable in $out/bin is a symlink to $out/share/dupeguru/run.py
+  # so wrapPythonPrograms hook does not handle it automatically.
+  postFixup = ''
+    wrapPythonProgramsIn "$out/share/dupeguru" "$out $pythonPath"
+  '';
+
+  meta = with lib; {
+    description = "GUI tool to find duplicate files in a system";
+    homepage = "https://github.com/arsenetar/dupeguru";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.novoxudonoser ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/eaglemode/default.nix b/nixpkgs/pkgs/applications/misc/eaglemode/default.nix
new file mode 100644
index 000000000000..d411ce7ae819
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/eaglemode/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, perl, libX11, libXinerama, libjpeg, libpng, libtiff, pkg-config,
+librsvg, glib, gtk2, libXext, libXxf86vm, poppler, xineLib, ghostscript, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "eaglemode";
+  version = "0.94.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/eaglemode/${pname}-${version}.tar.bz2";
+    sha256 = "10zxih7gmyhq0az1mnsw2x563l4bbwcns794s4png8rf4d6hjszm";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ perl libX11 libXinerama libjpeg libpng libtiff
+    librsvg glib gtk2 libXxf86vm libXext poppler xineLib ghostscript makeWrapper ];
+
+  # The program tries to dlopen Xxf86vm, Xext and Xinerama, so we use the
+  # trick on NIX_LDFLAGS and dontPatchELF to make it find them.
+  # I use 'yes y' to skip a build error linking with xineLib,
+  # because xine stopped exporting "_x_vo_new_port"
+  #  https://sourceforge.net/projects/eaglemode/forums/forum/808824/topic/5115261
+  buildPhase = ''
+    export NIX_LDFLAGS="$NIX_LDFLAGS -lXxf86vm -lXext -lXinerama"
+    perl make.pl build
+  '';
+
+  dontPatchELF = true;
+  # eaglemode expects doc to be in the root directory
+  forceShare = [ "man" "info" ];
+
+  installPhase = ''
+    perl make.pl install dir=$out
+    wrapProgram $out/bin/eaglemode --set EM_DIR "$out" --prefix LD_LIBRARY_PATH : "$out/lib" --prefix PATH : "${ghostscript}/bin"
+  '';
+
+  meta = with lib; {
+    homepage = "http://eaglemode.sourceforge.net";
+    description = "Zoomable User Interface";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/effitask/cargo-lock.patch b/nixpkgs/pkgs/applications/misc/effitask/cargo-lock.patch
new file mode 100644
index 000000000000..4f56b82368fa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/effitask/cargo-lock.patch
@@ -0,0 +1,1091 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..55e4495
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,1085 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "aho-corasick"
++version = "0.7.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "arrayvec"
++version = "0.4.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "atk"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "atk-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "autocfg"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "backtrace"
++version = "0.3.41"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "backtrace-sys"
++version = "0.1.35"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "bitflags"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cairo-rs"
++version = "0.7.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "cairo-sys-rs"
++version = "0.9.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "cc"
++version = "1.0.50"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cfg-if"
++version = "0.1.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "chrono"
++version = "0.4.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "effitask"
++version = "0.1.0"
++dependencies = [
++ "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gtk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "human-panic 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pulldown-cmark 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "relm 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "relm-attributes 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "relm-derive 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "todo-txt 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "filetime"
++version = "0.2.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "fragile"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "fsevent"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "fsevent-sys"
++version = "2.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "fuchsia-zircon"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "fuchsia-zircon-sys"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "gdk"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gdk-pixbuf"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gdk-pixbuf-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gdk-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "getopts"
++version = "0.2.21"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "getrandom"
++version = "0.1.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gio"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fragile 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gio-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "glib"
++version = "0.8.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "glib-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gobject-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gtk"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "atk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gtk-sys"
++version = "0.9.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "human-panic"
++version = "1.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "backtrace 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)",
++ "os_type 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
++ "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "inotify"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "inotify-sys"
++version = "0.1.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "iovec"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "kernel32-sys"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "lazycell"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "lexical-core"
++version = "0.6.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "libc"
++version = "0.2.68"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "log"
++version = "0.4.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "memchr"
++version = "2.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "mio"
++version = "0.6.21"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
++ "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "mio-extras"
++version = "2.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
++ "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "miow"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "net2"
++version = "0.2.33"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "nodrop"
++version = "0.1.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "nom"
++version = "5.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lexical-core 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "notify"
++version = "4.0.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "filetime 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "inotify 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-integer"
++version = "0.1.42"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-traits"
++version = "0.2.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "os_type"
++version = "2.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "pango"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "pango-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "pkg-config"
++version = "0.3.17"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "ppv-lite86"
++version = "0.2.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "proc-macro2"
++version = "0.4.30"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "pulldown-cmark"
++version = "0.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "quote"
++version = "0.6.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "quote"
++version = "1.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand"
++version = "0.7.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_hc"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "redox_syscall"
++version = "0.1.56"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "regex"
++version = "1.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
++ "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.17"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "relm"
++version = "0.18.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gtk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "relm-attributes"
++version = "0.16.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "relm-gen-widget 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "relm-derive"
++version = "0.18.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "relm-gen-widget"
++version = "0.16.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rustc-demangle"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "rustc_version"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "ryu"
++version = "1.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "same-file"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "semver"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "semver-parser"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "serde"
++version = "1.0.106"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "serde_derive"
++version = "1.0.106"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "slab"
++version = "0.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "static_assertions"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "syn"
++version = "0.15.44"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "syn"
++version = "1.0.17"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "termcolor"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "thread_local"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "time"
++version = "0.1.42"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "todo-txt"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "toml"
++version = "0.5.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicase"
++version = "2.6.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicode-width"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-xid"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "uuid"
++version = "0.8.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "version_check"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "walkdir"
++version = "2.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "wasi"
++version = "0.9.0+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi"
++version = "0.2.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi"
++version = "0.3.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "winapi-build"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi-util"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "ws2_32-sys"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "xdg"
++version = "2.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[metadata]
++"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
++"checksum arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
++"checksum atk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "86b7499272acf036bb5820c6e346bbfb5acc5dceb104bc2c4fd7e6e33dfcde6a"
++"checksum atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e552c1776737a4c80110d06b36d099f47c727335f9aaa5d942a72b6863a8ec6f"
++"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
++"checksum backtrace 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)" = "a4ed64ae6d9ebfd9893193c4b2532b1292ec97bd8271c9d7d0fa90cd78a34cba"
++"checksum backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118"
++"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
++"checksum cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e05db47de3b0f09a222fa4bba2eab957d920d4243962a86b2d77ab401e4a359c"
++"checksum cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff65ba02cac715be836f63429ab00a767d48336efc5497c5637afb53b4f14d63"
++"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
++"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
++"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
++"checksum filetime 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f59efc38004c988e4201d11d263b8171f49a2e7ec0bdbb71773433f271504a5e"
++"checksum fragile 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f8140122fa0d5dcb9fc8627cfce2b37cc1500f752636d46ea28bc26785c2f9"
++"checksum fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6"
++"checksum fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0"
++"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
++"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
++"checksum gdk 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6243e995f41f3a61a31847e54cc719edce93dd9140c89dca3b9919be1cfe22d5"
++"checksum gdk-pixbuf 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9726408ee1bbada83094326a99b9c68fea275f9dbb515de242a69e72051f4fcc"
++"checksum gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d8991b060a9e9161bafd09bf4a202e6fd404f5b4dd1a08d53a1e84256fb34ab0"
++"checksum gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6adf679e91d1bff0c06860287f80403e7db54c2d2424dce0a470023b56c88fbb"
++"checksum getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
++"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
++"checksum gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6261b5d34c30c2d59f879e643704cf54cb44731f3a2038000b68790c03e360e3"
++"checksum gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4fad225242b9eae7ec8a063bb86974aca56885014672375e5775dc0ea3533911"
++"checksum glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "be27232841baa43e0fd5ae003f7941925735b2f733a336dc75f07b9eff415e7b"
++"checksum glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "95856f3802f446c05feffa5e24859fe6a183a7cb849c8449afc35c86b1e316e2"
++"checksum gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31d1a804f62034eccf370006ccaef3708a71c31d561fee88564abe71177553d9"
++"checksum gtk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "709f1074259d4685b96133f92b75c7f35b504715b0fcdc96ec95de2607296a60"
++"checksum gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53def660c7b48b00b510c81ef2d2fbd3c570f1527081d8d7947f471513e1a4c1"
++"checksum human-panic 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "39f357a500abcbd7c5f967c1d45c8838585b36743823b9d43488f24850534e36"
++"checksum inotify 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24e40d6fd5d64e2082e0c796495c8ef5ad667a96d03e5aaa0becfd9d47bcbfb8"
++"checksum inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0"
++"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
++"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
++"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
++"checksum lexical-core 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f86d66d380c9c5a685aaac7a11818bdfa1f733198dfd9ec09c70b762cd12ad6f"
++"checksum libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0"
++"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
++"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
++"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f"
++"checksum mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
++"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
++"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
++"checksum nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
++"checksum nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6"
++"checksum notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "80ae4a7688d1fab81c5bf19c64fc8db920be8d519ce6336ed4e7efe024724dbd"
++"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
++"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
++"checksum os_type 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7edc011af0ae98b7f88cf7e4a83b70a54a75d2b8cb013d6efd02e5956207e9eb"
++"checksum pango 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "393fa071b144f8ffb83ede273758983cf414ca3c0b1d2a5a9ce325b3ba3dd786"
++"checksum pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "86b93d84907b3cf0819bff8f13598ba72843bee579d5ebc2502e4b0367b4be7d"
++"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
++"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
++"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
++"checksum proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3"
++"checksum pulldown-cmark 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1c205cc82214f3594e2d50686730314f817c67ffa80fe800cf0db78c3c2b9d9e"
++"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
++"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
++"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
++"checksum rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
++"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
++"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
++"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
++"checksum regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3"
++"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
++"checksum relm 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4127341a75eb96dc99ba39b87a2783bb011b20fbdbafc25ed2f58216d2ff714"
++"checksum relm-attributes 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4a8db24611fee7bb021f3aad7c4eaaba6d360947860b78b933a4d3ef86079b7f"
++"checksum relm-derive 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec66397054dc1ea6c658159866b9978add6a90655aba5dd4a90c34d2e63f9d69"
++"checksum relm-gen-widget 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49ad47b054bdc12c90fb6b37c81ef785ee2a4a8a92c4e150b18325052766fbb0"
++"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
++"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
++"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
++"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
++"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
++"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
++"checksum serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399"
++"checksum serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c"
++"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
++"checksum static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3"
++"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
++"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
++"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f"
++"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
++"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
++"checksum todo-txt 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0d77aa2f90bd72b990bb2b8de52289b7a34f51cf035627df5e3ce361b321b417"
++"checksum toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a"
++"checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
++"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
++"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
++"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
++"checksum uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11"
++"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
++"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
++"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
++"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
++"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
++"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
++"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++"checksum winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e"
++"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
++"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
++"checksum xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57"
diff --git a/nixpkgs/pkgs/applications/misc/effitask/default.nix b/nixpkgs/pkgs/applications/misc/effitask/default.nix
new file mode 100644
index 000000000000..b80ec80746f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/effitask/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, gtk3
+, rust
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "effitask";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "sanpii";
+    repo = pname;
+    rev = version;
+    sha256 = "09bffxdp43s8b1rpmsgqr2kyz3i4jbd2yrwbxw21fj3sf3mwb9ig";
+  };
+
+  # workaround for missing Cargo.lock file https://github.com/sanpii/effitask/issues/48
+  cargoPatches = [ ./cargo-lock.patch ];
+
+  cargoSha256 = "0dvmp23kny6rlv6c0mfyy3cmz1bi5wcm1mxps4z67lym5kxfd362";
+
+  buildInputs = [ openssl gtk3 ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  # default installPhase don't install assets
+  installPhase = ''
+    runHook preInstall
+    make install PREFIX="$out" TARGET="target/${rust.toRustTarget stdenv.hostPlatform}/release/effitask"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Graphical task manager, based on the todo.txt format";
+    longDescription = ''
+      To use it as todo.sh add-on, create a symlink like this:
+      mkdir ~/.todo.actions.d/
+      ln -s $(which effitask) ~/.todo.actions.d/et
+
+      Or use it as standalone program by defining some environment variables
+      like described in the projects readme.
+    '';
+    homepage = "https://github.com/sanpii/effitask";
+    maintainers = with maintainers; [ davidak ];
+    license = with licenses; [ mit ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electron-cash/default.nix b/nixpkgs/pkgs/applications/misc/electron-cash/default.nix
new file mode 100644
index 000000000000..fe263dd6692b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electron-cash/default.nix
@@ -0,0 +1,89 @@
+{ lib, fetchFromGitHub, python3Packages, qtbase, fetchpatch, wrapQtAppsHook
+, secp256k1 }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "electron-cash";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Electron-Cash";
+    repo = "Electron-Cash";
+    rev = version;
+    sha256 = "0ixsx4224jilc5zis6wbsbxqxv10mm5sksrzq15xp30zz0bzb6md";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    dnspython
+    ecdsa
+    jsonrpclib-pelix
+    matplotlib
+    pbkdf2
+    pyaes
+    pycrypto
+    pyqt5
+    pysocks
+    qrcode
+    requests
+    tlslite-ng
+    qdarkstyle
+    stem
+
+    # plugins
+    keepkey
+    trezor
+    btchip
+  ];
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  postPatch = ''
+    substituteInPlace contrib/requirements/requirements.txt \
+      --replace "qdarkstyle==2.6.8" "qdarkstyle<3"
+
+    substituteInPlace setup.py \
+      --replace "(share_dir" "(\"share\""
+  '';
+
+  checkInputs = with python3Packages; [ pytest ];
+
+  checkPhase = ''
+    unset HOME
+    pytest electroncash/tests
+  '';
+
+  postInstall = ''
+    substituteInPlace $out/share/applications/electron-cash.desktop \
+      --replace "Exec=electron-cash" "Exec=$out/bin/electron-cash"
+  '';
+
+  # If secp256k1 wasn't added to the library path, the following warning is given:
+  #
+  #   Electron Cash was unable to find the secp256k1 library on this system.
+  #   Elliptic curve cryptography operations will be performed in slow
+  #   Python-only mode.
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+    makeWrapperArgs+=(
+      "--prefix" "LD_LIBRARY_PATH" ":" "${secp256k1}/lib"
+    )
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/electron-cash help >/dev/null
+  '';
+
+  meta = with lib; {
+    description = "A Bitcoin Cash SPV Wallet";
+    longDescription = ''
+      An easy-to-use Bitcoin Cash client featuring wallets generated from
+      mnemonic seeds (in addition to other, more advanced, wallet options)
+      and the ability to perform transactions without downloading a copy
+      of the blockchain.
+    '';
+    homepage = "https://www.electroncash.org/";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lassulus nyanloutre ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electrum/dash.nix b/nixpkgs/pkgs/applications/misc/electrum/dash.nix
new file mode 100644
index 000000000000..29ac8b4484b5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electrum/dash.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, python2Packages }:
+
+python2Packages.buildPythonApplication rec {
+  version = "2.9.3.1";
+  pname = "electrum-dash";
+
+  src = fetchurl {
+    url = "https://github.com/akhavr/electrum-dash/releases/download/${version}/Electrum-DASH-${version}.tar.gz";
+    #"https://github.com/dashpay/electrum-dash/releases/download/v${version}/Electrum-DASH-${version}.tar.gz";
+    sha256 = "9b7ac205f63fd4bfb15d77a34a4451ef82caecf096f31048a7603bd276dfc33e";
+  };
+
+  propagatedBuildInputs = with python2Packages; [
+    dnspython
+    ecdsa
+    pbkdf2
+    protobuf
+    pyasn1
+    pyasn1-modules
+    pycrypto
+    pyqt4
+    qrcode
+    requests
+    pyaes
+    tlslite-ng
+    x11_hash
+    mnemonic
+    jsonrpclib
+
+    # plugins
+    trezor
+  ];
+
+  preInstall = ''
+    mkdir -p $out/share
+    sed -i 's@usr_share = .*@usr_share = os.getenv("out")+"/share"@' setup.py
+    pyrcc4 icons.qrc -o gui/qt/icons_rc.py
+  '';
+
+  meta = with lib; {
+    description = "Electrum DASH";
+    homepage = "https://github.com/dashpay/electrum-dash";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ np ];
+    knownVulnerabilities = [ "CVE-2018-1000022" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electrum/default.nix b/nixpkgs/pkgs/applications/misc/electrum/default.nix
new file mode 100644
index 000000000000..5a3e6265c25c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electrum/default.nix
@@ -0,0 +1,155 @@
+{ lib, stdenv
+, fetchurl
+, fetchFromGitHub
+, wrapQtAppsHook
+, python3
+, zbar
+, secp256k1
+, enableQt ? true
+# for updater.nix
+, writeScript
+, common-updater-scripts
+, bash
+, coreutils
+, curl
+, gnugrep
+, gnupg
+, gnused
+, nix
+}:
+
+let
+  version = "4.0.9";
+
+  libsecp256k1_name =
+    if stdenv.isLinux then "libsecp256k1.so.0"
+    else if stdenv.isDarwin then "libsecp256k1.0.dylib"
+    else "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}";
+
+  libzbar_name =
+    if stdenv.isLinux then "libzbar.so.0"
+    else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}";
+
+  # Not provided in official source releases, which are what upstream signs.
+  tests = fetchFromGitHub {
+    owner = "spesmilo";
+    repo = "electrum";
+    rev = version;
+    sha256 = "0cmdyfabllw4wnpqpdxp3l6hjnm0cvkwxn0z8ph4x54sf4zq9iz3";
+
+    extraPostFetch = ''
+      mv $out ./all
+      mv ./all/electrum/tests $out
+    '';
+  };
+in
+
+python3.pkgs.buildPythonApplication {
+  pname = "electrum";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://download.electrum.org/${version}/Electrum-${version}.tar.gz";
+    sha256 = "1fvjiagi78f32nxgr2rx8jas8hxfvpp1c8fpfcalvykmlhdc2gva";
+  };
+
+  postUnpack = ''
+    # can't symlink, tests get confused
+    cp -ar ${tests} $sourceRoot/electrum/tests
+  '';
+
+  nativeBuildInputs = lib.optionals enableQt [ wrapQtAppsHook ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    aiohttp-socks
+    aiorpcx
+    attrs
+    bitstring
+    cryptography
+    dnspython
+    jsonrpclib-pelix
+    matplotlib
+    pbkdf2
+    protobuf
+    pysocks
+    qrcode
+    requests
+    tlslite-ng
+    # plugins
+    ckcc-protocol
+    keepkey
+    trezor
+    btchip
+  ] ++ lib.optionals enableQt [ pyqt5 qdarkstyle ];
+
+  preBuild = ''
+    sed -i 's,usr_share = .*,usr_share = "'$out'/share",g' setup.py
+    substituteInPlace ./electrum/ecc_fast.py \
+      --replace ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}
+  '' + (if enableQt then ''
+    substituteInPlace ./electrum/qrscanner.py \
+      --replace ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary}
+  '' else ''
+    sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt
+  '');
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    # Despite setting usr_share above, these files are installed under
+    # $out/nix ...
+    mv $out/${python3.sitePackages}/nix/store"/"*/share $out
+    rm -rf $out/${python3.sitePackages}/nix
+
+    substituteInPlace $out/share/applications/electrum.desktop \
+      --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum %u"' \
+                "Exec=$out/bin/electrum %u" \
+      --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum --testnet %u"' \
+                "Exec=$out/bin/electrum --testnet %u"
+
+  '';
+
+  postFixup = lib.optionalString enableQt ''
+    wrapQtApp $out/bin/electrum
+  '';
+
+  checkInputs = with python3.pkgs; [ pytestCheckHook pycryptodomex ];
+
+  pytestFlagsArray = [ "electrum/tests" ];
+
+  disabledTests = [
+    "test_loop"  # test tries to bind 127.0.0.1 causing permission error
+  ];
+
+  postCheck = ''
+    $out/bin/electrum help >/dev/null
+  '';
+
+  passthru.updateScript = import ./update.nix {
+    inherit (stdenv) lib;
+    inherit
+      writeScript
+      common-updater-scripts
+      bash
+      coreutils
+      curl
+      gnupg
+      gnugrep
+      gnused
+      nix
+    ;
+  };
+
+  meta = with lib; {
+    description = "A lightweight Bitcoin wallet";
+    longDescription = ''
+      An easy-to-use Bitcoin client featuring wallets generated from
+      mnemonic seeds (in addition to other, more advanced, wallet options)
+      and the ability to perform transactions without downloading a copy
+      of the blockchain.
+    '';
+    homepage = "https://electrum.org/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ehmry joachifm np prusnak ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electrum/ltc.nix b/nixpkgs/pkgs/applications/misc/electrum/ltc.nix
new file mode 100644
index 000000000000..ad6ed6f7a783
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electrum/ltc.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv
+, fetchurl
+, python3Packages
+, wrapQtAppsHook
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "electrum-ltc";
+  version = "3.3.8.1";
+
+  src = fetchurl {
+    url = "https://electrum-ltc.org/download/Electrum-LTC-${version}.tar.gz";
+    sha256 = "0kxcx1xf6h9z8x0k483d6ykpnmfr30n6z3r6lgqxvbl42pq75li7";
+  };
+
+  nativeBuildInputs = with python3Packages; [ pyqt5 wrapQtAppsHook ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pyaes
+    ecdsa
+    pbkdf2
+    requests
+    qrcode
+    py_scrypt
+    pyqt5
+    protobuf
+    dnspython
+    jsonrpclib-pelix
+    pysocks
+    trezor
+    btchip
+  ];
+
+  preBuild = ''
+    sed -i 's,usr_share = .*,usr_share = "'$out'/share",g' setup.py
+    pyrcc5 icons.qrc -o gui/qt/icons_rc.py
+    # Recording the creation timestamps introduces indeterminism to the build
+    sed -i '/Created: .*/d' gui/qt/icons_rc.py
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
+  checkPhase = ''
+    $out/bin/electrum-ltc help >/dev/null
+  '';
+
+  meta = with lib; {
+    description = "Litecoin thin client";
+    longDescription = ''
+      Electrum-LTC is a simple, but powerful Litecoin wallet. A twelve-word
+      security passphrase (or “seed”) leaves intruders stranded and your peace
+      of mind intact. Keep it on paper, or in your head... and never worry
+      about losing your litecoins to theft or hardware failure. No waiting, no
+      lengthy blockchain downloads and no syncing to the network.
+    '';
+    homepage = "https://electrum-ltc.org/";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electrum/update.nix b/nixpkgs/pkgs/applications/misc/electrum/update.nix
new file mode 100644
index 000000000000..247fabe3891f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electrum/update.nix
@@ -0,0 +1,59 @@
+{ lib
+, writeScript
+, common-updater-scripts
+, bash
+, coreutils
+, curl
+, gnugrep
+, gnupg
+, gnused
+, nix
+}:
+
+with lib;
+
+let
+  downloadPageUrl = "https://download.electrum.org";
+
+  signingKeys = ["6694 D8DE 7BE8 EE56 31BE D950 2BD5 824B 7F94 70E6"];
+in
+
+writeScript "update-electrum" ''
+#! ${bash}/bin/bash
+
+set -eu -o pipefail
+
+export PATH=${makeBinPath [
+  common-updater-scripts
+  coreutils
+  curl
+  gnugrep
+  gnupg
+  gnused
+  nix
+]}
+
+version=$(curl -L --list-only -- '${downloadPageUrl}' \
+    | grep -Po '<a href="\K([[:digit:]]+\.?)+' \
+    | sort -Vu \
+    | tail -n1)
+
+srcName=Electrum-$version
+srcFile=$srcName.tar.gz
+srcUrl="${downloadPageUrl}/$version/$srcFile"
+sigUrl=$srcUrl.asc
+sigFile=$srcFile.asc
+
+[[ -e "$srcFile" ]] || curl -L -o "$srcFile" -- "$srcUrl"
+[[ -e "$sigFile" ]] || curl -L -o "$sigFile" -- "$sigUrl"
+
+export GNUPGHOME=$PWD/gnupg
+mkdir -m 700 -p "$GNUPGHOME"
+
+gpg --batch --recv-keys ${concatStringsSep " " (map (x: "'${x}'") signingKeys)}
+gpg --batch --verify "$sigFile" "$srcFile"
+
+sha256=$(nix-prefetch-url --type sha256 "file://$PWD/$srcFile")
+
+update-source-version electrum "$version" "$sha256"
+''
diff --git a/nixpkgs/pkgs/applications/misc/elf-dissector/default.nix b/nixpkgs/pkgs/applications/misc/elf-dissector/default.nix
new file mode 100644
index 000000000000..6edbcc0cce2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/elf-dissector/default.nix
@@ -0,0 +1,24 @@
+{ mkDerivation, fetchgit, lib, cmake, extra-cmake-modules, kitemmodels
+, libiberty, libelf, libdwarf, libopcodes }:
+
+mkDerivation rec {
+  pname = "elf-dissector";
+  version = "unstable-2020-11-14";
+
+  src = fetchgit {
+    url = "https://invent.kde.org/sdk/elf-dissector.git";
+    rev = "d1700e76e3f60aff0a2a9fb63bc001251d2be522";
+    sha256 = "1h1xr3ag1sbf005drcx8g8dc5mk7fb2ybs73swrld7clcawhxnk8";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  buildInputs = [ kitemmodels libiberty libelf libdwarf libopcodes ];
+
+  meta = with lib; {
+    homepage = "https://invent.kde.org/sdk/elf-dissector";
+    description = "Tools for inspecting, analyzing and optimizing ELF files";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/elfx86exts/cargo-lock.patch b/nixpkgs/pkgs/applications/misc/elfx86exts/cargo-lock.patch
new file mode 100644
index 000000000000..4f56b82368fa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/elfx86exts/cargo-lock.patch
@@ -0,0 +1,1091 @@
+diff --git a/Cargo.lock b/Cargo.lock
+new file mode 100644
+index 0000000..55e4495
+--- /dev/null
++++ b/Cargo.lock
+@@ -0,0 +1,1085 @@
++# This file is automatically @generated by Cargo.
++# It is not intended for manual editing.
++[[package]]
++name = "aho-corasick"
++version = "0.7.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "arrayvec"
++version = "0.4.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "atk"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "atk-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "autocfg"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "backtrace"
++version = "0.3.41"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "backtrace-sys"
++version = "0.1.35"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "bitflags"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cairo-rs"
++version = "0.7.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "cairo-sys-rs"
++version = "0.9.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "cc"
++version = "1.0.50"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "cfg-if"
++version = "0.1.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "chrono"
++version = "0.4.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "effitask"
++version = "0.1.0"
++dependencies = [
++ "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gtk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "human-panic 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pulldown-cmark 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "relm 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "relm-attributes 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "relm-derive 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "todo-txt 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "filetime"
++version = "0.2.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "fragile"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "fsevent"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "fsevent-sys"
++version = "2.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "fuchsia-zircon"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "fuchsia-zircon-sys"
++version = "0.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "gdk"
++version = "0.11.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gdk-pixbuf"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gdk-pixbuf-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gdk-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "getopts"
++version = "0.2.21"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "getrandom"
++version = "0.1.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gio"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fragile 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gio-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "glib"
++version = "0.8.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "glib-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gobject-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gtk"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "atk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "gtk-sys"
++version = "0.9.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "human-panic"
++version = "1.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "backtrace 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)",
++ "os_type 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
++ "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "inotify"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "inotify-sys"
++version = "0.1.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "iovec"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "kernel32-sys"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "lazy_static"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "lazycell"
++version = "1.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "lexical-core"
++version = "0.6.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "libc"
++version = "0.2.68"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "log"
++version = "0.4.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "memchr"
++version = "2.3.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "mio"
++version = "0.6.21"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
++ "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "mio-extras"
++version = "2.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
++ "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "miow"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "net2"
++version = "0.2.33"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "nodrop"
++version = "0.1.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "nom"
++version = "5.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lexical-core 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "notify"
++version = "4.0.15"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "filetime 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "inotify 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-integer"
++version = "0.1.42"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "num-traits"
++version = "0.2.11"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "os_type"
++version = "2.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "pango"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "pango-sys"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "pkg-config"
++version = "0.3.17"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "ppv-lite86"
++version = "0.2.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "proc-macro2"
++version = "0.4.30"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "proc-macro2"
++version = "1.0.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "pulldown-cmark"
++version = "0.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "quote"
++version = "0.6.13"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "quote"
++version = "1.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand"
++version = "0.7.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_chacha"
++version = "0.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_core"
++version = "0.5.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rand_hc"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "redox_syscall"
++version = "0.1.56"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "regex"
++version = "1.3.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
++ "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "regex-syntax"
++version = "0.6.17"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "relm"
++version = "0.18.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "gtk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "relm-attributes"
++version = "0.16.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "relm-gen-widget 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "relm-derive"
++version = "0.18.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "relm-gen-widget"
++version = "0.16.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "rustc-demangle"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "rustc_version"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "ryu"
++version = "1.0.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "same-file"
++version = "1.0.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "semver"
++version = "0.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "semver-parser"
++version = "0.7.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "serde"
++version = "1.0.106"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "serde_derive"
++version = "1.0.106"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "slab"
++version = "0.4.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "static_assertions"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "syn"
++version = "0.15.44"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "syn"
++version = "1.0.17"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "termcolor"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "thread_local"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "time"
++version = "0.1.42"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)",
++ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "todo-txt"
++version = "1.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "toml"
++version = "0.5.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicase"
++version = "2.6.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "unicode-width"
++version = "0.1.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-xid"
++version = "0.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "unicode-xid"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "uuid"
++version = "0.8.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "version_check"
++version = "0.9.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "walkdir"
++version = "2.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "wasi"
++version = "0.9.0+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi"
++version = "0.2.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi"
++version = "0.3.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "winapi-build"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi-i686-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "winapi-util"
++version = "0.1.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "winapi-x86_64-pc-windows-gnu"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[[package]]
++name = "ws2_32-sys"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++dependencies = [
++ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++]
++
++[[package]]
++name = "xdg"
++version = "2.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++
++[metadata]
++"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
++"checksum arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
++"checksum atk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "86b7499272acf036bb5820c6e346bbfb5acc5dceb104bc2c4fd7e6e33dfcde6a"
++"checksum atk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e552c1776737a4c80110d06b36d099f47c727335f9aaa5d942a72b6863a8ec6f"
++"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
++"checksum backtrace 0.3.41 (registry+https://github.com/rust-lang/crates.io-index)" = "a4ed64ae6d9ebfd9893193c4b2532b1292ec97bd8271c9d7d0fa90cd78a34cba"
++"checksum backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118"
++"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
++"checksum cairo-rs 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e05db47de3b0f09a222fa4bba2eab957d920d4243962a86b2d77ab401e4a359c"
++"checksum cairo-sys-rs 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff65ba02cac715be836f63429ab00a767d48336efc5497c5637afb53b4f14d63"
++"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
++"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
++"checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
++"checksum filetime 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f59efc38004c988e4201d11d263b8171f49a2e7ec0bdbb71773433f271504a5e"
++"checksum fragile 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f8140122fa0d5dcb9fc8627cfce2b37cc1500f752636d46ea28bc26785c2f9"
++"checksum fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6"
++"checksum fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0"
++"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
++"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
++"checksum gdk 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6243e995f41f3a61a31847e54cc719edce93dd9140c89dca3b9919be1cfe22d5"
++"checksum gdk-pixbuf 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9726408ee1bbada83094326a99b9c68fea275f9dbb515de242a69e72051f4fcc"
++"checksum gdk-pixbuf-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d8991b060a9e9161bafd09bf4a202e6fd404f5b4dd1a08d53a1e84256fb34ab0"
++"checksum gdk-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6adf679e91d1bff0c06860287f80403e7db54c2d2424dce0a470023b56c88fbb"
++"checksum getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
++"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
++"checksum gio 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6261b5d34c30c2d59f879e643704cf54cb44731f3a2038000b68790c03e360e3"
++"checksum gio-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4fad225242b9eae7ec8a063bb86974aca56885014672375e5775dc0ea3533911"
++"checksum glib 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "be27232841baa43e0fd5ae003f7941925735b2f733a336dc75f07b9eff415e7b"
++"checksum glib-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "95856f3802f446c05feffa5e24859fe6a183a7cb849c8449afc35c86b1e316e2"
++"checksum gobject-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31d1a804f62034eccf370006ccaef3708a71c31d561fee88564abe71177553d9"
++"checksum gtk 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "709f1074259d4685b96133f92b75c7f35b504715b0fcdc96ec95de2607296a60"
++"checksum gtk-sys 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "53def660c7b48b00b510c81ef2d2fbd3c570f1527081d8d7947f471513e1a4c1"
++"checksum human-panic 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "39f357a500abcbd7c5f967c1d45c8838585b36743823b9d43488f24850534e36"
++"checksum inotify 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24e40d6fd5d64e2082e0c796495c8ef5ad667a96d03e5aaa0becfd9d47bcbfb8"
++"checksum inotify-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e74a1aa87c59aeff6ef2cc2fa62d41bc43f54952f55652656b18a02fd5e356c0"
++"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
++"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
++"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
++"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
++"checksum lexical-core 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f86d66d380c9c5a685aaac7a11818bdfa1f733198dfd9ec09c70b762cd12ad6f"
++"checksum libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0"
++"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
++"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
++"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f"
++"checksum mio-extras 2.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
++"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
++"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
++"checksum nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
++"checksum nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6"
++"checksum notify 4.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "80ae4a7688d1fab81c5bf19c64fc8db920be8d519ce6336ed4e7efe024724dbd"
++"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
++"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
++"checksum os_type 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7edc011af0ae98b7f88cf7e4a83b70a54a75d2b8cb013d6efd02e5956207e9eb"
++"checksum pango 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "393fa071b144f8ffb83ede273758983cf414ca3c0b1d2a5a9ce325b3ba3dd786"
++"checksum pango-sys 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "86b93d84907b3cf0819bff8f13598ba72843bee579d5ebc2502e4b0367b4be7d"
++"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
++"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
++"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
++"checksum proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3"
++"checksum pulldown-cmark 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1c205cc82214f3594e2d50686730314f817c67ffa80fe800cf0db78c3c2b9d9e"
++"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
++"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
++"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
++"checksum rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
++"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
++"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
++"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
++"checksum regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3"
++"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
++"checksum relm 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4127341a75eb96dc99ba39b87a2783bb011b20fbdbafc25ed2f58216d2ff714"
++"checksum relm-attributes 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4a8db24611fee7bb021f3aad7c4eaaba6d360947860b78b933a4d3ef86079b7f"
++"checksum relm-derive 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec66397054dc1ea6c658159866b9978add6a90655aba5dd4a90c34d2e63f9d69"
++"checksum relm-gen-widget 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49ad47b054bdc12c90fb6b37c81ef785ee2a4a8a92c4e150b18325052766fbb0"
++"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
++"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
++"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
++"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
++"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
++"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
++"checksum serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399"
++"checksum serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c"
++"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
++"checksum static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3"
++"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
++"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03"
++"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f"
++"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
++"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
++"checksum todo-txt 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0d77aa2f90bd72b990bb2b8de52289b7a34f51cf035627df5e3ce361b321b417"
++"checksum toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a"
++"checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
++"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
++"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
++"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
++"checksum uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11"
++"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
++"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
++"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
++"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
++"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
++"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
++"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
++"checksum winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e"
++"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
++"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
++"checksum xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57"
diff --git a/nixpkgs/pkgs/applications/misc/elfx86exts/default.nix b/nixpkgs/pkgs/applications/misc/elfx86exts/default.nix
new file mode 100644
index 000000000000..8fc7fb32743d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/elfx86exts/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "elfx86exts";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "pkgw";
+    repo = pname;
+    rev = "${pname}@${version}";
+    sha256 = "1j9ca2lyxjsrf0rsfv83xi53vj6jz5nb76xibh367brcsc26mvd6";
+  };
+
+  cargoSha256 = "1dfhx40jr5llqa554wifd920mqdbm8s5fns98m6vcqdjxzan4nr2";
+
+  meta = with lib; {
+    description = "Decode x86 binaries and print out which instruction set extensions they use.";
+    longDescription = ''
+      Disassemble a binary containing x86 instructions and print out which extensions it uses.
+      Despite the utterly misleading name, this tool supports ELF and MachO binaries, and
+      perhaps PE-format ones as well. (It used to be more limited.)
+    '';
+    homepage = "https://github.com/pkgw/elfx86exts";
+    maintainers = with maintainers; [ rmcgibbo ];
+    license = with licenses; [ mit ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/elogind/default.nix b/nixpkgs/pkgs/applications/misc/elogind/default.nix
new file mode 100644
index 000000000000..a3919648f749
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/elogind/default.nix
@@ -0,0 +1,82 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, meson
+, ninja
+, m4
+, gperf
+, getent
+, libcap
+, gettext
+, pkg-config
+, udev
+, eudev
+, libxslt
+, python3
+, docbook5
+, docbook_xsl
+, docbook_xsl_ns
+, docbook_xml_dtd_42
+, docbook_xml_dtd_45
+
+# Defaulting to false because usually the rationale for using elogind is to
+# use it in situation where a systemd dependency does not work (especially
+# when building with musl, which elogind explicitly supports).
+, enableSystemd ? false
+}:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "elogind";
+  version = "243.7";
+
+  src = fetchFromGitHub {
+    owner = "elogind";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0cihdf7blhncm2359qxli24j9l3dkn15gjys5vpjwny80zlym5ma";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    m4
+    pkg-config
+    gperf
+    getent
+    libcap
+    gettext
+    libxslt.bin # xsltproc
+    docbook5 docbook_xsl docbook_xsl_ns docbook_xml_dtd_42 docbook_xml_dtd_45 # needed for docbook without Internet
+    (python3.withPackages (p: with p; [ lxml ]))  # fixes: man/meson.build:111:0: ERROR: Could not execute command "/build/source/tools/xml_helper.py".
+  ];
+
+  buildInputs =
+    if enableSystemd then [ udev ] else [ eudev ];
+
+  # Inspired by the systemd `preConfigure`.
+  # Conceptually we should patch all files required during the build, but not scripts
+  # supposed to run at run-time of the software (important for cross-compilation).
+  # This package seems to have mostly scripts that run at build time.
+  preConfigure = ''
+    for dir in tools src/test; do
+      patchShebangs $dir
+    done
+
+    patchShebangs src/basic/generate-*.{sh,py}
+  '';
+
+  mesonFlags = [
+    "-Drootprefix=${placeholder "out"}"
+    "-Dsysconfdir=${placeholder "out"}/etc"
+  ];
+
+  meta = {
+    homepage = "https://github.com/elogind/elogind";
+    description = ''The systemd project's "logind", extracted to a standalone package'';
+    platforms = platforms.linux; # probably more
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ nh2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/emem/default.nix b/nixpkgs/pkgs/applications/misc/emem/default.nix
new file mode 100644
index 000000000000..ab718cdffcf2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/emem/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, jdk }:
+
+stdenv.mkDerivation rec {
+  pname = "emem";
+  version = "0.2.50";
+
+  inherit jdk;
+
+  src = fetchurl {
+    url = "https://github.com/ebzzry/${pname}/releases/download/v${version}/${pname}.jar";
+    sha256 = "18x3s3jrph8k3pc75jgwkfqazygpsx93zjxx68zms58my17cybh1";
+  };
+
+  phases = [ "buildPhase" "installPhase" ];
+
+  buildPhase = ''
+    mkdir -p $out/bin $out/share/java
+  '';
+
+  installPhase = ''
+    cp $src $out/share/java/${pname}.jar
+
+    cat > $out/bin/${pname} << EOF
+#! $SHELL
+$jdk/bin/java -jar $out/share/java/${pname}.jar "\$@"
+EOF
+
+    chmod +x $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ebzzry/emem";
+    description = "A trivial Markdown to HTML converter";
+    license = licenses.epl10;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/epdfview/default.nix b/nixpkgs/pkgs/applications/misc/epdfview/default.nix
new file mode 100644
index 000000000000..9eea30e74f86
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/epdfview/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, gtk2, poppler }:
+
+stdenv.mkDerivation rec {
+  pname = "epdfview";
+  version = "0.1.8";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/e/epdfview/epdfview_${version}.orig.tar.gz";
+    sha256 = "0ibyb60a0b4n34bsjgvhdw8yf24463ky0hpmf6a2jjqsbm5g4v64";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 poppler ];
+
+  hardeningDisable = [ "format" ];
+
+  patches = [ (fetchpatch {
+                name = "epdfview-0.1.8-glib2-headers.patch";
+                url = "https://projects.archlinux.org/svntogit/community.git/plain/trunk/epdfview-0.1.8-glib2-headers.patch?h=packages/epdfview&id=40ba115c860bdec31d03a30fa594a7ec2864d634";
+                sha256 = "17df6s1zij5ficj67xszq6kd88cy620az3ic55065ccnmsd73f8h";
+              })
+              (fetchpatch {
+                name = "epdfview-0.1.8-modern-cups.patch";
+                url = "https://projects.archlinux.org/svntogit/community.git/plain/trunk/epdfview-0.1.8-modern-cups.patch?h=packages/epdfview&id=40ba115c860bdec31d03a30fa594a7ec2864d634";
+                sha256 = "07yvgvai2bvbr5fa1mv6lg7nqr0qyryjn1xyjlh8nidg9k9vv001";
+              })
+            ];
+
+  meta = with lib; {
+    homepage = "https://packages.debian.org/wheezy/epdfview";
+    description = "A lightweight PDF document viewer using Poppler and GTK";
+    longDescription = ''
+      ePDFView is a free lightweight PDF document viewer using Poppler and
+      GTK libraries. The aim of ePDFView is to make a simple PDF document
+      viewer, in the lines of Evince but without using the Gnome libraries.
+    '';
+    license = licenses.gpl2;
+    maintainers = [ maintainers.astsmtl ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/epr/default.nix b/nixpkgs/pkgs/applications/misc/epr/default.nix
new file mode 100644
index 000000000000..478422a1c5c8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/epr/default.nix
@@ -0,0 +1,21 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "epr";
+  version = "2.3.0b";
+
+  src = fetchFromGitHub {
+    owner = "wustho";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1a6md3015284hzmx0sby5kl59p7lwv73sq7sid35vrr15zrl0aw7";
+  };
+
+  meta = with lib; {
+    description = "CLI Epub Reader";
+    homepage = "https://github.com/wustho/epr";
+    license = licenses.mit;
+    maintainers = [ maintainers.Br1ght0ne ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/et/default.nix b/nixpkgs/pkgs/applications/misc/et/default.nix
new file mode 100644
index 000000000000..de47efc07ef5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/et/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, libnotify, gdk-pixbuf }:
+
+stdenv.mkDerivation rec {
+  pname = "et";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "oxzi";
+    repo = "et";
+    rev = version;
+    sha256 = "0i0lgmnly8n7y4y6pb10pxgxyz8s5zk26k8z1g1578v1wan01lnq";
+  };
+
+  buildInputs = [ libnotify gdk-pixbuf ];
+  nativeBuildInputs = [ pkg-config ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp et $out/bin
+    cp et-status.sh $out/bin/et-status
+  '';
+
+  meta = with lib; {
+    description = "Minimal libnotify-based (egg) timer";
+    homepage = "https://github.com/oxzi/et";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/etesync-dav/default.nix b/nixpkgs/pkgs/applications/misc/etesync-dav/default.nix
new file mode 100644
index 000000000000..ba3568f862c4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/etesync-dav/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, python3Packages, radicale3 }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "etesync-dav";
+  version = "0.30.7";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "16b3105834dd6d9e374e976cad0978e1acfed0f0328c5054bc214550aea3e2c5";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    etebase
+    etesync
+    flask
+    flask_wtf
+    radicale3
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://www.etesync.com/";
+    description = "Secure, end-to-end encrypted, and privacy respecting sync for contacts, calendars and tasks";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ valodim ];
+    broken = stdenv.isDarwin; # pyobjc-framework-Cocoa is missing
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/eureka-editor/default.nix b/nixpkgs/pkgs/applications/misc/eureka-editor/default.nix
new file mode 100644
index 000000000000..0b5922f8f699
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/eureka-editor/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchzip, fltk, zlib, xdg_utils, xorg, libjpeg, libGL }:
+
+stdenv.mkDerivation rec {
+  pname = "eureka-editor";
+  version = "1.21";
+  shortver = "121";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/eureka-editor/Eureka/${version}/eureka-${shortver}-source.tar.gz";
+    sha256 = "0fpj13aq4wh3f7473cdc5jkf1c71jiiqmjc0ihqa0nm3hic1d4yv";
+  };
+
+  buildInputs = [ fltk zlib xdg_utils libjpeg xorg.libXinerama libGL ];
+
+  enableParallelBuilding = true;
+
+  preBuild = ''
+    substituteInPlace src/main.cc \
+      --replace /usr/local $out
+    substituteInPlace Makefile \
+      --replace /usr/local $out \
+      --replace "-o root " ""
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $out/share/applications $out/share/icons $out/man/man6
+    cp misc/eureka.desktop $out/share/applications
+    cp misc/eureka.ico $out/share/icons
+    cp misc/eureka.6 $out/man/man6
+  '';
+
+  meta = with lib; {
+    homepage = "http://eureka-editor.sourceforge.net";
+    description = "A map editor for the classic DOOM games, and a few related games such as Heretic and Hexen";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    broken = stdenv.isDarwin;
+    maintainers = with maintainers; [ neonfuz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/evtest-qt/default.nix b/nixpkgs/pkgs/applications/misc/evtest-qt/default.nix
new file mode 100644
index 000000000000..86f2d0070923
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/evtest-qt/default.nix
@@ -0,0 +1,25 @@
+{ mkDerivation, lib, qtbase, cmake, fetchFromGitHub }:
+
+mkDerivation rec {
+  pname = "evtest-qt";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Grumbel";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1wfzkgq81764qzxgk0y5vvpxcrb3icvrr4dd4mj8njrqgbwmn0mw";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ qtbase ];
+
+  meta = with lib; {
+    description = "Simple input device tester for linux with Qt GUI";
+    homepage = "https://github.com/Grumbel/evtest-qt";
+    maintainers = with maintainers; [ alexarice ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/evtest/default.nix b/nixpkgs/pkgs/applications/misc/evtest/default.nix
new file mode 100644
index 000000000000..84fae703a0c3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/evtest/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchgit, autoreconfHook, pkg-config, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "evtest";
+  version = "1.34";
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libxml2 ];
+
+  src = fetchgit {
+    url = "git://anongit.freedesktop.org/${pname}";
+    rev = "refs/tags/${pname}-${version}";
+    sha256 = "168gdhzj11f4nk94a6z696sm8v1njzwww69bn6wr97l17897913g";
+  };
+
+  meta = with lib; {
+    description = "Simple tool for input event debugging";
+    license = lib.licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/exercism/default.nix b/nixpkgs/pkgs/applications/misc/exercism/default.nix
new file mode 100644
index 000000000000..1eeeba1b4391
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/exercism/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "exercism";
+  version = "3.0.13";
+
+  src = fetchFromGitHub {
+    owner  = "exercism";
+    repo   = "cli";
+    rev    = "v${version}";
+    sha256 = "17gvz9a0sn4p36hf4l77bxhhfipf4x998iay31layqwbnzmb4xy7";
+  };
+
+  vendorSha256 = "0b2m9xkac60k5rbxmb03cxf530m23av14pnsjk8067l998sm4vqi";
+
+  doCheck = false;
+
+  subPackages = [ "./exercism" ];
+
+  meta = with lib; {
+   inherit (src.meta) homepage;
+   description = "A Go based command line tool for exercism.io";
+   license     = licenses.mit;
+   maintainers = [ maintainers.rbasso maintainers.nobbz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/expenses/default.nix b/nixpkgs/pkgs/applications/misc/expenses/default.nix
new file mode 100644
index 000000000000..7f932b5b1e56
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/expenses/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, sqlite
+}:
+
+buildGoModule rec {
+  pname = "expenses";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "manojkarthick";
+    repo = "expenses";
+    rev = "v${version}";
+    sha256 = "11wxaqbnrrg0rykx5905chi6rhmai1nqggdbhh6hiappr5rksl0j";
+  };
+
+  vendorSha256 = "1kwj63wl4kb16zl3lmi9bzj1az7vi453asdy52na0mjx4ymmjyk1";
+
+  # package does not contain any tests as of v0.2.1
+  doCheck = false;
+
+  buildInputs = [ sqlite ];
+
+  buildFlagsArray = [
+    "-ldflags=-s -w -X github.com/manojkarthick/expenses/cmd.Version=${version}"
+  ];
+
+  meta = with lib; {
+   description = "An interactive command line expense logger";
+   license = licenses.mit;
+   maintainers = [ maintainers.manojkarthick ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/extract_url/default.nix b/nixpkgs/pkgs/applications/misc/extract_url/default.nix
new file mode 100644
index 000000000000..9daaf7268c39
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/extract_url/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, perlPackages
+, cursesSupport ? true
+, uriFindSupport ? true
+}:
+
+let
+  perlDeps =
+    [ perlPackages.MIMEtools perlPackages.HTMLParser ]
+    ++ lib.optional cursesSupport perlPackages.CursesUI
+    ++ lib.optional uriFindSupport perlPackages.URIFind;
+
+in stdenv.mkDerivation rec {
+  pname = "extract_url";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "m3m0ryh0l3";
+    repo = "extracturl";
+    rev = "v${version}";
+    sha256 = "05589lp15jmcpbj4y9a3hmf6n2gsqrm4ybcyh3hd4j6pc7hmnhny";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ] ++ perlDeps;
+
+  makeFlags = [ "prefix=$(out)" ];
+  installFlags = [ "INSTALL=install" ];
+
+  postFixup = ''
+    wrapProgram "$out/bin/extract_url" \
+      --set PERL5LIB "${perlPackages.makeFullPerlPath perlDeps}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.memoryhole.net/~kyle/extract_url/";
+    description = "Extracts URLs from MIME messages or plain text";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.qyliss ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/far2l/default.nix b/nixpkgs/pkgs/applications/misc/far2l/default.nix
new file mode 100644
index 000000000000..c3e9218b5886
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/far2l/default.nix
@@ -0,0 +1,86 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, makeWrapper, cmake, pkg-config, wxGTK30, glib, pcre, m4, bash,
+  xdg_utils, gvfs, zip, unzip, gzip, bzip2, gnutar, p7zip, xz, imagemagick, darwin }:
+
+let
+  newer-colorer-schemes = fetchFromGitHub {
+    owner = "colorer";
+    repo = "Colorer-schemes";
+    rev = "7c831f5e94a90530ace8b2bb9916210e3a2fcda6"; # 2019-11-28 (far2l has older Colorer-schemes)
+    sha256 = "18vaahdz5i7xdf00c9h9kjjswm4jszywm8zkhva4c4ivr4qqnv2c";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "far2l";
+  version = "2019-12-14.git${builtins.substring 0 7 src.rev}";
+
+  src = fetchFromGitHub {
+    owner = "elfmz";
+    repo = "far2l";
+    rev = "dceaa3918ea2c5e43600bad3fc63f861b8d26fc4";
+    sha256 = "1ssd3hwz4b7vl4r858d9whl61cn23pgcamcjmvfa6ysf4x2b7sgi";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config m4 makeWrapper imagemagick ];
+
+  buildInputs = [ wxGTK30 glib pcre ]
+    ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Cocoa;
+
+  postPatch = lib.optionalString stdenv.isLinux ''
+    substituteInPlace far2l/bootstrap/trash.sh \
+      --replace 'gvfs-trash'  '${gvfs}/bin/gvfs-trash'
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace far2l/CMakeLists.txt \
+      --replace "-framework System" -lSystem
+  '' + ''
+    echo 'echo ${version}' > far2l/bootstrap/scripts/vbuild.sh
+    substituteInPlace far2l/bootstrap/open.sh              \
+      --replace 'xdg-open'    '${xdg_utils}/bin/xdg-open'
+    substituteInPlace far2l/vtcompletor.cpp                \
+      --replace '"/bin/bash"' '"${bash}/bin/bash"'
+    substituteInPlace multiarc/src/formats/zip/zip.cpp     \
+      --replace '"unzip '     '"${unzip}/bin/unzip '       \
+      --replace '"zip '       '"${zip}/bin/zip '
+    substituteInPlace multiarc/src/formats/7z/7z.cpp       \
+      --replace '"^7z '       '"^${p7zip}/lib/p7zip/7z '   \
+      --replace '"7z '        '"${p7zip}/lib/p7zip/7z '
+    substituteInPlace multiarc/src/formats/targz/targz.cpp \
+      --replace '"xz '        '"${xz}/bin/xz '             \
+      --replace '"gzip '      '"${gzip}/bin/gzip '         \
+      --replace '"bzip2 '     '"${bzip2}/bin/bzip2 '       \
+      --replace '"tar '       '"${gnutar}/bin/tar '
+
+    cp ${newer-colorer-schemes}/hrc/hrc/base/nix.hrc     colorer/configs/base/hrc/base/
+    cp ${newer-colorer-schemes}/hrc/hrc/base/cpp.hrc     colorer/configs/base/hrc/base/
+    cp ${newer-colorer-schemes}/hrc/hrc/inet/jscript.hrc colorer/configs/base/hrc/base/
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/applications $out/share/icons/hicolor/scalable/apps
+    cp -dpR install $out/share/far2l
+    mv $out/share/far2l/far2l $out/bin/
+    ln -s -r --force $out/bin/far2l $out/share/far2l/far2l_askpass
+    ln -s -r --force $out/bin/far2l $out/share/far2l/far2l_sudoapp
+
+    cp ../far2l/DE/far2l.desktop $out/share/applications/far2l.desktop
+    substituteInPlace $out/share/applications/far2l.desktop --replace \''${CMAKE_INSTALL_PREFIX} "$out"
+
+    cp ../far2l/DE/icons/hicolor/1024x1024/apps/far2l.svg $out/share/icons/hicolor/scalable/apps/
+    convert -size 128x128 ../far2l/DE/icons/far2l.svg $out/share/icons/far2l.png
+    for size in 16x16 24x24 32x32 48x48 64x64 72x72 96x96 128x128 192x192 256x256 512x512 1024x1024; do
+      mkdir -p $out/share/icons/hicolor/$size/apps
+      convert -size $size ../far2l/DE/icons/hicolor/$size/apps/far2l.svg $out/share/icons/hicolor/$size/apps/far2l.png
+    done
+  '' + lib.optionalString stdenv.isDarwin ''
+    wrapProgram $out/bin/far2l --argv0 $out/bin/far2l
+  '';
+
+  stripDebugList = [ "bin" "share" ];
+
+  meta = with lib; {
+    description = "An orthodox file manager";
+    homepage = "https://github.com/elfmz/far2l";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.volth ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fbmenugen/0001-Fix-paths.patch b/nixpkgs/pkgs/applications/misc/fbmenugen/0001-Fix-paths.patch
new file mode 100644
index 000000000000..b52aeafb5f36
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fbmenugen/0001-Fix-paths.patch
@@ -0,0 +1,69 @@
+From 76c25147328d71960c70bbdd5a9396aac4a362a2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo=20Malaquias?= <malaquias@gmail.com>
+Date: Wed, 20 May 2020 14:19:07 -0300
+Subject: [PATCH] Fix paths
+
+---
+ fbmenugen | 14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/fbmenugen b/fbmenugen
+index 46a18dc..0c8eb08 100755
+--- a/fbmenugen
++++ b/fbmenugen
+@@ -214,9 +214,7 @@ my %CONFIG = (
+ 
+ #<<<
+         desktop_files_paths => [
+-            '/usr/share/applications',
+-            '/usr/local/share/applications',
+-            '/usr/share/applications/kde4',
++            '/run/current-system/sw/share/applications',
+             "$home_dir/.local/share/applications",
+         ],
+ #>>>
+@@ -232,7 +230,7 @@ my %CONFIG = (
+     force_icon_size  => 0,
+     generic_fallback => 0,
+     locale_support   => 1,
+-    use_gtk3         => 0,
++    use_gtk3         => 1,
+ 
+     VERSION => $version,
+              );
+@@ -252,7 +250,7 @@ if (not -e $config_file) {
+ }
+ 
+ if (not -e $schema_file) {
+-    if (-e (my $etc_schema_file = "/etc/xdg/$pkgname/schema.pl")) {
++    if (-e (my $etc_schema_file = "@fbmenugen@/etc/xdg/$pkgname/schema.pl")) {
+         require File::Copy;
+         File::Copy::copy($etc_schema_file, $schema_file)
+           or warn "$0: can't copy file `$etc_schema_file' to `$schema_file': $!\n";
+@@ -570,7 +568,7 @@ EXIT
+         $generated_menu .= begin_category(@{$schema->{fluxbox}}) . <<"FOOTER";
+ [config] (Configure)
+ [submenu] (System Styles) {Choose a style...}
+-  [stylesdir] (/usr/share/fluxbox/styles)
++  [stylesdir] (@fluxbox@/share/fluxbox/styles)
+ [end]
+ [submenu] (User Styles) {Choose a style...}
+   [stylesdir] (~/.fluxbox/styles)
+@@ -580,12 +578,12 @@ EXIT
+   [exec] (Screenshot - JPG) {import screenshot.jpg && display -resize 50% screenshot.jpg}
+   [exec] (Screenshot - PNG) {import screenshot.png && display -resize 50% screenshot.png}
+   [exec] (Run) {fbrun}
+-  [exec] (Regen Menu) {fluxbox-generate_menu}
++  [exec] (Regen Menu) {@fluxbox@/bin/fluxbox-generate_menu}
+ [end]
+ [commanddialog] (Fluxbox Command)
+   [reconfig] (Reload config)
+   [restart] (Restart)
+-  [exec] (About) {(fluxbox -v; fluxbox -info | sed 1d) | xmessage -file - -center}
++  [exec] (About) {(@fluxbox@/bin/fluxbox -v; @fluxbox@/bin/fluxbox -info | @gnused@/bin/sed 1d) | @xmessage@/bin/xmessage -file - -center}
+   [separator]
+   [exit] (Exit)
+ [end]
+-- 
+2.26.2
+
diff --git a/nixpkgs/pkgs/applications/misc/fbmenugen/default.nix b/nixpkgs/pkgs/applications/misc/fbmenugen/default.nix
new file mode 100644
index 000000000000..26b8beab19cd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fbmenugen/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fluxbox
+, gnused
+, makeWrapper
+, perlPackages
+, substituteAll
+, xorg
+, wrapGAppsHook
+}:
+
+perlPackages.buildPerlPackage rec {
+  pname = "fbmenugen";
+  version = "0.85";
+
+  src = fetchFromGitHub {
+    owner = "trizen";
+    repo = pname;
+    rev = version;
+    sha256 = "1pmms3wzkm8h41a8zrkpn6gq9m9yy5wr5rrzmb84lbacprqq6q7q";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./0001-Fix-paths.patch;
+      xmessage = xorg.xmessage;
+      inherit fluxbox gnused;
+    })
+  ];
+
+  outputs = [ "out" ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    fluxbox
+    gnused
+    perlPackages.DataDump
+    perlPackages.FileDesktopEntry
+    perlPackages.Gtk3
+    perlPackages.LinuxDesktopFiles
+    perlPackages.perl
+    xorg.xmessage
+  ];
+
+  dontConfigure = true;
+
+  dontBuild = true;
+
+  postPatch = ''
+    substituteInPlace fbmenugen --subst-var-by fbmenugen $out
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin ${pname}
+    install -D -t $out/etc/xdg/${pname} schema.pl
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    wrapProgram "$out/bin/${pname}" --prefix PERL5LIB : "$PERL5LIB"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/trizen/fbmenugen";
+    description = "Simple menu generator for the Fluxbox Window Manager";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fbreader/default.nix b/nixpkgs/pkgs/applications/misc/fbreader/default.nix
new file mode 100644
index 000000000000..c2347d5fbb8b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fbreader/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config
+, bzip2, curl, expat, fribidi, libunibreak, sqlite, zlib
+, uiTarget ? if !stdenv.isDarwin then "desktop" else "macosx"
+, uiType ? if !stdenv.isDarwin then "qt4" else "cocoa"
+, qt4, gtk2
+, AppKit, Cocoa
+}:
+
+with lib;
+
+assert elem uiTarget [ "desktop" "macosx" ];
+assert elem uiType [ "qt4" "gtk" "cocoa" ];
+assert uiTarget == "macosx" -> uiType == "cocoa";
+
+# Note: "qt" uiType option mentioned in ${src}/README.build is qt3,
+# which is way to old and no longer in nixpkgs.
+
+stdenv.mkDerivation {
+  name = "fbreader-${uiType}-0.99.6";
+
+  src = fetchFromGitHub {
+    owner = "geometer";
+    repo = "FBReader";
+    rev = "9e608db14372ae580beae4976eec7241fa069e75";
+    sha256 = "0lzafk02mv0cf2l2a61q5y4743zi913byik4bw1ix0gr1drnsa7y";
+  };
+
+  patches = [
+    ./typecheck.patch
+    (fetchpatch {
+      name = "curl-7_62.diff"; # see https://github.com/geometer/FBReader/pull/311
+      url = "https://github.com/geometer/FBReader/commit/b7c78e965d06f780.diff";
+      sha256 = "1dgnx9wps7hcf8fkidc7037vcf92fr3ccnjx7bgxm9x02j0hngjg";
+    })
+  ];
+
+  postPatch = ''
+    cat << EOF > makefiles/target.mk
+    TARGET_ARCH = ${uiTarget}
+    TARGET_STATUS = release
+    UI_TYPE = ${uiType}
+    EOF
+
+    substituteInPlace makefiles/arch/desktop.mk \
+      --replace ccache "" \
+      --replace moc-qt4 moc
+
+    # libunibreak supersedes liblinebreak
+    substituteInPlace zlibrary/text/Makefile \
+      --replace -llinebreak -lunibreak
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    bzip2 curl expat fribidi libunibreak sqlite zlib
+  ]
+  ++ optional (uiType == "qt4") qt4
+  ++ optional (uiType == "gtk") gtk2
+  ++ optionals (uiType == "cocoa") [ AppKit Cocoa ];
+
+  makeFlags = [ "INSTALLDIR=$(out)" ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=narrowing";
+
+  meta = with lib; {
+    description = "An e-book reader for Linux";
+    homepage = "http://www.fbreader.org/";
+    license = licenses.gpl3;
+    broken = stdenv.isDarwin  # untested, might work
+          || uiType == "gtk"; # builds, but the result is unusable, hangs a lot
+    platforms = platforms.unix;
+    maintainers = [ maintainers.coroa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fbreader/typecheck.patch b/nixpkgs/pkgs/applications/misc/fbreader/typecheck.patch
new file mode 100644
index 000000000000..cbac290e69c2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fbreader/typecheck.patch
@@ -0,0 +1,11 @@
+diff --git a/fbreader/src/database/booksdb/BooksDB.cpp b/fbreader/src/database/booksdb/BooksDB.cpp
+index e33a22e76..1b6092800 100644
+--- a/fbreader/src/database/booksdb/BooksDB.cpp
++++ b/fbreader/src/database/booksdb/BooksDB.cpp
+@@ -146,5 +146,5 @@ shared_ptr<Book> BooksDB::loadBook(const std::string &fileName) {
+ 	myFindFileId->setFileName(fileName);
+ 	if (!myFindFileId->run()) {
+-		return false;
++		return 0;
+ 	}
+ 	((DBIntValue&)*myLoadBook->parameter("@file_id").value()) = myFindFileId->fileId();
diff --git a/nixpkgs/pkgs/applications/misc/fehlstart/default.nix b/nixpkgs/pkgs/applications/misc/fehlstart/default.nix
new file mode 100644
index 000000000000..992b62780828
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fehlstart/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, pkg-config, gtk2, keybinder, fetchFromGitLab }:
+
+stdenv.mkDerivation {
+  name = "fehlstart-9f4342d7";
+
+  src = fetchFromGitLab {
+    owner = "fehlstart";
+    repo = "fehlstart";
+    rev = "9f4342d75ec5e2a46c13c99c34894bc275798441";
+    sha256 = "1rfzh7w6n2s9waprv7m1bhvqrk36a77ada7w655pqiwkhdj5q95i";
+  };
+
+  patches = [ ./use-nix-profiles.patch ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 keybinder ];
+
+  preConfigure = ''
+    export PREFIX=$out
+  '';
+
+  meta = with lib; {
+    description = "Small desktop application launcher with reasonable memory footprint";
+    homepage = "https://gitlab.com/fehlstart/fehlstart";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.mounium ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fehlstart/use-nix-profiles.patch b/nixpkgs/pkgs/applications/misc/fehlstart/use-nix-profiles.patch
new file mode 100644
index 000000000000..0c06e53f9814
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fehlstart/use-nix-profiles.patch
@@ -0,0 +1,21 @@
+--- fehlstart-9f4342d75ec5e2a46c13c99c34894bc275798441-src/fehlstart.c	1970-01-01 01:00:01.000000000 +0100
++++ fehlstart.c	2016-08-10 12:21:11.231638418 +0200
+@@ -779,8 +779,15 @@
+     read_settings(setting_file, &settings);
+     update_commands();
+     g_hash_table_foreach(action_map, update_launcher, NULL);
+-    add_launchers(STR_S(APPLICATIONS_DIR_0));
+-    add_launchers(STR_S(APPLICATIONS_DIR_1));
+-    add_launchers(STR_S(USER_APPLICATIONS_DIR));
++    const char* nixprofiles = getenv("NIX_PROFILES");
++    if(nixprofiles != NULL) {
++      const char* pch = strtok(nixprofiles, " ");
++      while (pch != NULL)
++      {
++          String nix_dir = str_concat((String) { pch, strlen(pch), false },STR_S("/share/applications"));
++          add_launchers(nix_dir);
++          pch = strtok(NULL, " ");
++      }
++    }
+     return NULL;
+ }
diff --git a/nixpkgs/pkgs/applications/misc/fetchmail/default.nix b/nixpkgs/pkgs/applications/misc/fetchmail/default.nix
new file mode 100644
index 000000000000..01493e131817
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fetchmail/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, openssl }:
+
+let
+  version = "6.4.15";
+in
+stdenv.mkDerivation {
+  pname = "fetchmail";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fetchmail/fetchmail-${version}.tar.xz";
+    sha256 = "sha256-c1shdHSTfhPPzeotQqNGv2hIfg1h7+vk0Nnt3LOia5Y=";
+  };
+
+  buildInputs = [ openssl ];
+
+  configureFlags = [ "--with-ssl=${openssl.dev}" ];
+
+  meta = {
+    homepage = "https://www.fetchmail.info/";
+    description = "A full-featured remote-mail retrieval and forwarding utility";
+    longDescription = ''
+      A full-featured, robust, well-documented remote-mail retrieval and
+      forwarding utility intended to be used over on-demand TCP/IP links
+      (such as SLIP or PPP connections). It supports every remote-mail
+      protocol now in use on the Internet: POP2, POP3, RPOP, APOP, KPOP,
+      all flavors of IMAP, ETRN, and ODMR. It can even support IPv6 and
+      IPSEC.
+    '';
+
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.peti ];
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fff/default.nix b/nixpkgs/pkgs/applications/misc/fff/default.nix
new file mode 100644
index 000000000000..2b21c984f34f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fff/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, bashInteractive, xdg_utils, file, coreutils, w3m, xdotool }:
+
+stdenv.mkDerivation rec {
+  pname = "fff";
+  version = "2.2";
+
+  src = fetchFromGitHub {
+    owner = "dylanaraps";
+    repo = pname;
+    rev = version;
+    sha256 = "14ymdw6l6phnil0xf1frd5kgznaiwppcic0v4hb61s1zpf4wrshg";
+  };
+
+  pathAdd = lib.makeSearchPath "bin" ([ xdg_utils file coreutils w3m xdotool ]);
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ bashInteractive ];
+  dontBuild = true;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/fff" --prefix PATH : $pathAdd
+  '';
+
+  meta = with lib; {
+    description = "Fucking Fast File-Manager";
+    homepage = "https://github.com/dylanaraps/fff";
+    license = licenses.mit;
+    maintainers = [ maintainers.tadeokondrak ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/filet/default.nix b/nixpkgs/pkgs/applications/misc/filet/default.nix
new file mode 100644
index 000000000000..0ee3f6fb221a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/filet/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "filet";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "buffet";
+    repo = "filet";
+    rev = version;
+    sha256 = "0hm7589ih30axafqxhhs4fg1pvfhlqzyzzmfi2ilx8haq5111fsf";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A fucking fucking fast file fucker (afffff)";
+    homepage = "https://github.com/buffet/filet";
+    license = licenses.mpl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ buffet ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/firestarter/default.nix b/nixpkgs/pkgs/applications/misc/firestarter/default.nix
new file mode 100644
index 000000000000..7215cc564490
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/firestarter/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, glibc, python3, cudatoolkit,
+  withCuda ? true
+}:
+
+with lib;
+stdenv.mkDerivation rec {
+  pname = "firestarter";
+  version = "1.7.4";
+
+  src = fetchFromGitHub {
+    owner = "tud-zih-energy";
+    repo = "FIRESTARTER";
+    rev = "v${version}";
+    sha256 = "0zqfqb7hf48z39g1qhbl1iraf8rz4d629h1q6ikizckpzfq23kd0";
+  };
+
+  nativeBuildInputs = [ python3 ];
+  buildInputs = [ glibc.static ] ++ optionals withCuda [ cudatoolkit ];
+  preBuild = ''
+    mkdir -p build
+    cd build
+    python ../code-generator.py ${optionalString withCuda "--enable-cuda"}
+  '';
+  makeFlags = optionals withCuda [ "LINUX_CUDA_PATH=${cudatoolkit}" ];
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp FIRESTARTER $out/bin/firestarter
+  '';
+
+  meta = with lib; {
+    homepage = "https://tu-dresden.de/zih/forschung/projekte/firestarter";
+    description = "Processor Stress Test Utility";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ astro marenz ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fitnesstrax/default.nix b/nixpkgs/pkgs/applications/misc/fitnesstrax/default.nix
new file mode 100644
index 000000000000..e90e364aaee9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fitnesstrax/default.nix
@@ -0,0 +1,45 @@
+{ fetchFromGitHub
+, glib
+, gtk3
+, lib
+, rustPlatform
+, wrapGAppsHook
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fitnesstrax";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "luminescent-dreams";
+    repo = "fitnesstrax";
+    rev = "${pname}-${version}";
+    sha256 = "1k6zhnbs0ggx7q0ig2abcnzprsgrychlpvsh6d36dw6mr8zpfkp7";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    glib
+    gtk3
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+  ];
+
+  cargoSha256 = "1xgyyxd2kz21xan0pk7rbxiym90s7m2qrzg2ddilcszva60bxdd9";
+
+  postInstall = ''
+    mkdir -p $out/share/glib-2.0/schemas
+    cp -r $src/share/* $out/share/
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  meta = with lib; {
+    description = "Privacy-first fitness tracking";
+    homepage = "https://github.com/luminescent-dreams/fitnesstrax";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ savannidgerinel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/flamerobin/default.nix b/nixpkgs/pkgs/applications/misc/flamerobin/default.nix
new file mode 100644
index 000000000000..8178288ba56e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/flamerobin/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, wxGTK30, boost, firebird }:
+
+stdenv.mkDerivation rec {
+  version = "0.9.3.1";
+  pname = "flamerobin";
+
+  src = fetchFromGitHub {
+    owner = "mariuz";
+    repo = "flamerobin";
+    rev = version;
+    sha256 = "1wwcsca01hpgi9z5flvbdhs9zv7jvahnbn97j6ymy0hdyb8lv6si";
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ wxGTK30 boost firebird ];
+
+  preBuild = ''
+    sed -i 's/CXXFLAGS = -g -O2/CXXFLAGS = -g -O2 -nostartfiles/' Makefile
+  '';
+
+  configureFlags = [
+    "--disable-debug"
+  ];
+
+  meta = with lib; {
+    description = "Database administration tool for Firebird RDBMS";
+    homepage = "https://github.com/mariuz/flamerobin";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ uralbash ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fluxboxlauncher/default.nix b/nixpkgs/pkgs/applications/misc/fluxboxlauncher/default.nix
new file mode 100755
index 000000000000..4794e14b4698
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fluxboxlauncher/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitHub
+, python3
+, gtk3
+, wrapGAppsHook
+, glibcLocales
+, gobject-introspection
+, gettext
+, pango
+, gdk-pixbuf
+, atk
+, fluxbox
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "fluxboxlauncher";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "mothsart";
+    repo = "fluxboxlauncher";
+    rev = "0.2.1";
+    sha256 = "024h1dk0bhc5s4dldr6pqabrgcqih9p8cys5lqgkgz406y4vyzvf";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gobject-introspection
+    pango
+    gdk-pixbuf
+    atk
+    gettext
+  ];
+
+  buildInputs = [
+    glibcLocales
+    gtk3
+    python3
+    fluxbox
+  ];
+
+  makeWrapperArgs = [ "--set LOCALE_ARCHIVE ${glibcLocales}/lib/locale/locale-archive"
+                      "--set CHARSET en_us.UTF-8" ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygobject3
+  ];
+
+  meta = with lib; {
+    description = "A Gui editor (gtk) to configure applications launching on a fluxbox session";
+    homepage = "https://github.com/mothsART/fluxboxlauncher";
+    maintainers = with maintainers; [ mothsart ];
+    license = licenses.bsdOriginal;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fme/default.nix b/nixpkgs/pkgs/applications/misc/fme/default.nix
new file mode 100644
index 000000000000..52ba2927fd46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fme/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, pkg-config, autoconf, automake, gettext
+, fluxbox, bc, gtkmm2, glibmm, libglademm, libsigcxx }:
+
+stdenv.mkDerivation rec {
+
+  pname = "fme";
+  version = "1.1.3";
+
+  src = fetchurl {
+    url = "https://github.com/rdehouss/fme/archive/v${version}.tar.gz";
+    sha256 = "d1c81a6a38c0faad02943ad65d6d0314bd205c6de841669a2efe43e4c503e63d";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ autoconf automake gettext fluxbox bc gtkmm2 glibmm libglademm libsigcxx ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "Editor for Fluxbox menus";
+    longDescription = ''
+      Fluxbox Menu Editor is a menu editor for the Window Manager Fluxbox written in C++
+      with the libraries Gtkmm, Glibmm, libglademm and gettext for internationalization.
+      Its user-friendly interface will help you to edit, delete, move (Drag and Drop)
+      a row, a submenu, etc very easily.
+    '';
+    homepage = "https://github.com/rdehouss/fme/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/font-manager/default.nix b/nixpkgs/pkgs/applications/misc/font-manager/default.nix
new file mode 100644
index 000000000000..3efef4553136
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/font-manager/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, gettext, python3,
+  pkg-config, libxml2, json-glib , sqlite, itstool, librsvg, yelp-tools,
+  vala, gtk3, gnome3, desktop-file-utils, wrapGAppsHook, gobject-introspection
+}:
+
+stdenv.mkDerivation rec {
+  pname = "font-manager";
+  version = "0.7.9";
+
+  src = fetchFromGitHub {
+    owner = "FontManager";
+    repo = "master";
+    rev = version;
+    sha256 = "1nc0i824v2szz0j9a5rwl8gygih15xbxnxpnx9d3wr0yq9057q6q";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    gettext
+    python3
+    itstool
+    desktop-file-utils
+    vala
+    yelp-tools
+    wrapGAppsHook
+    # For https://github.com/FontManager/master/blob/master/lib/unicode/meson.build
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    libxml2
+    json-glib
+    sqlite
+    librsvg
+    gtk3
+    gnome3.adwaita-icon-theme
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://fontmanager.github.io/";
+    description = "Simple font management for GTK desktop environments";
+    longDescription = ''
+      Font Manager is intended to provide a way for average users to
+      easily manage desktop fonts, without having to resort to command
+      line tools or editing configuration files by hand. While designed
+      primarily with the Gnome Desktop Environment in mind, it should
+      work well with other GTK desktop environments.
+
+      Font Manager is NOT a professional-grade font management solution.
+    '';
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fontpreview/default.nix b/nixpkgs/pkgs/applications/misc/fontpreview/default.nix
new file mode 100644
index 000000000000..7fa2e4d89102
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fontpreview/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, xdotool, fzf, imagemagick, sxiv, getopt }:
+
+stdenv.mkDerivation rec {
+  pname = "fontpreview";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "sdushantha";
+    repo = pname;
+    rev = version;
+    sha256 = "0g3i2k6n2yhp88rrcf0hp6ils7836db7hx73hw9qnpcbmckz0i4w";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  preInstall = "mkdir -p $out/bin";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/fontpreview \
+      --prefix PATH : ${lib.makeBinPath [ xdotool fzf imagemagick sxiv getopt ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/sdushantha/fontpreview";
+    description = "Highly customizable and minimal font previewer written in bash";
+    longDescription = ''
+      fontpreview is a commandline tool that lets you quickly search for fonts
+      that are installed on your machine and preview them. The fuzzy search
+      feature is provided by fzf and the preview is generated with imagemagick
+      and then displayed using sxiv. This tool is highly customizable, almost
+      all of the variables in this tool can be changed using the commandline
+      flags or you can configure them using environment variables.
+    '';
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.erictapen ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/formatter/default.nix b/nixpkgs/pkgs/applications/misc/formatter/default.nix
new file mode 100644
index 000000000000..26c6a8cbc708
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/formatter/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, meson
+, ninja
+, vala
+, pkg-config
+, pantheon
+, python3
+, substituteAll
+, glib
+, gtk3
+, dosfstools
+, e2fsprogs
+, exfat
+, hfsprogs
+, ntfs3g
+, libgee
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "formatter";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "Djaler";
+    repo = "Formatter";
+    rev = version;
+    sha256 = "0da1dvzsvbwg1ys19yf0n080xc0hjwin9zacjndb24jvphy3bxql";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      ext4 = "${e2fsprogs}/bin/mkfs.ext4";
+      exfat = "${exfat}/bin/mkfs.exfat";
+      fat = "${dosfstools}/bin/mkfs.fat";
+      ntfs = "${ntfs3g}/bin/mkfs.ntfs";
+      hfsplus = "${hfsprogs}/bin/mkfs.hfsplus";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    libgee
+    pantheon.granite
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "A simple formatter designed for elementary OS";
+    homepage = "https://github.com/Djaler/Formatter";
+    maintainers = with maintainers; [ xiorcale ] ++ pantheon.maintainers;
+    platforms = platforms.linux;
+    license = licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/formatter/fix-paths.patch b/nixpkgs/pkgs/applications/misc/formatter/fix-paths.patch
new file mode 100644
index 000000000000..67c1d2b43ccc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/formatter/fix-paths.patch
@@ -0,0 +1,53 @@
+diff --git a/src/Objects/DeviceFormatter.vala b/src/Objects/DeviceFormatter.vala
+index cf6a3b8..0de10a9 100644
+--- a/src/Objects/DeviceFormatter.vala
++++ b/src/Objects/DeviceFormatter.vala
+@@ -62,42 +62,42 @@ namespace Formatter {
+             string drive_identifier = drive.get_identifier ("unix-device");
+             switch (filesystem) {
+                 case Formatter.Filesystems.EXT4:
+-                    spawn_args = {"pkexec", "mkfs.ext4", drive_identifier, "-F"};
++                    spawn_args = {"pkexec", "@ext4@", drive_identifier, "-F"};
+                     if (label != "") {
+                         spawn_args += "-L";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.EXFAT:
+-                    spawn_args = {"pkexec", "mkfs.exfat", drive_identifier};
++                    spawn_args = {"pkexec", "@exfat@", drive_identifier};
+                     if (label != "") {
+                         spawn_args += "-n";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.FAT16:
+-                    spawn_args = {"pkexec", "mkfs.fat", "-F16", "-I", drive_identifier};
++                    spawn_args = {"pkexec", "@fat@", "-F16", "-I", drive_identifier};
+                     if (label != "") {
+                         spawn_args += "-n";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.FAT32:
+-                    spawn_args = {"pkexec", "mkfs.fat", "-F32", "-I", drive_identifier};
++                    spawn_args = {"pkexec", "@fat@", "-F32", "-I", drive_identifier};
+                     if (label != "") {
+                         spawn_args += "-n";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.NTFS:
+-                    spawn_args = {"pkexec", "mkfs.ntfs", drive_identifier, "-f", "-F"};
++                    spawn_args = {"pkexec", "@ntfs@", drive_identifier, "-f", "-F"};
+                     if (label != "") {
+                         spawn_args += "-L";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.HFS_PLUS:
+-                    spawn_args = {"pkexec", "mkfs.hfsplus", drive_identifier};
++                    spawn_args = {"pkexec", "@hfsplus@", drive_identifier};
+                     if (label != "") {
+                         spawn_args += "-v";
+                         spawn_args += label;
diff --git a/nixpkgs/pkgs/applications/misc/foxtrotgps/default.nix b/nixpkgs/pkgs/applications/misc/foxtrotgps/default.nix
new file mode 100644
index 000000000000..5d0f07492a1b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/foxtrotgps/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchbzr, autoreconfHook, texinfo, help2man, imagemagick, pkg-config
+, curl, gnome2, gpsd, gtk2, wrapGAppsHook
+, intltool, libexif, python3Packages, sqlite }:
+
+let
+  srcs = {
+    foxtrot = fetchbzr {
+      url = "lp:foxtrotgps";
+      rev = "326";
+      sha256 = "191pgcy5rng8djy22a5z9s8gssc73f9p5hm4ig52ra189cb48d8k";
+    };
+    screenshots = fetchbzr {
+      url = "lp:foxtrotgps/screenshots";
+      rev = "2";
+      sha256 = "1sgysn3dhfhrv7rj7wf8f2119vmhc1s1zzsp4r3nlrr45d20wmsv";
+    };
+  };
+in stdenv.mkDerivation rec {
+  pname = "foxtrotgps";
+  version = "1.2.2+326";
+
+  # Pull directly from bzr because gpsd API version 9 is not supported on latest release
+  src = srcs.foxtrot;
+
+  patches = [
+    ./gps-status-fix.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook texinfo help2man imagemagick wrapGAppsHook ];
+
+  buildInputs = [
+    curl.dev
+    gnome2.libglade.dev
+    gpsd
+    gtk2.dev
+    intltool
+    libexif
+    sqlite.dev
+    (python3Packages.python.withPackages (pythonPackages: with python3Packages;
+    [ beautifulsoup4 feedparser sqlalchemy ]))
+  ];
+
+  postUnpack = ''
+  cp -R ${srcs.screenshots} $sourceRoot/doc/screenshots
+  chmod -R u+w $sourceRoot/doc/screenshots
+  '';
+
+  preConfigure = ''
+  intltoolize --automake --copy --force
+  '';
+
+  meta = with lib; {
+    description = "GPS/GIS application optimized for small screens";
+    longDescription = ''
+      An easy to use, free & open-source GPS/GIS application that works well on
+      small screens, and is especially suited to touch input. It spun off of
+      tangoGPS in 2010 with a focus on cooperation and fostering community
+      innovation.
+    '';
+    homepage = "https://www.foxtrotgps.org/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ wucke13 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/foxtrotgps/gps-status-fix.patch b/nixpkgs/pkgs/applications/misc/foxtrotgps/gps-status-fix.patch
new file mode 100644
index 000000000000..e9b3624a174b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/foxtrotgps/gps-status-fix.patch
@@ -0,0 +1,14 @@
+--- foxtrot/src/gps_functions.c.orig	2020-12-04 15:02:22.290163204 -0600
++++ foxtrot/src/gps_functions.c	2020-12-04 15:04:54.470648534 -0600
+@@ -762,7 +762,11 @@
+ 		{
+ 			gpsdata->fix.time = (time_t) 0;
+ 		}
++#if GPSD_API_MAJOR_VERSION >= 9
++      gpsdata->valid = (libgps_gpsdata.fix.status != STATUS_NO_FIX);
++#else
+ 		gpsdata->valid = (libgps_gpsdata.status != STATUS_NO_FIX);
++#endif
+ 		if (gpsdata->valid)
+ 		{
+ 			gpsdata->seen_valid = TRUE;
diff --git a/nixpkgs/pkgs/applications/misc/freemind/default.nix b/nixpkgs/pkgs/applications/misc/freemind/default.nix
new file mode 100644
index 000000000000..b87c43226e0a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/freemind/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, jdk, jre, ant }:
+
+stdenv.mkDerivation rec {
+  pname = "freemind";
+  version = "1.0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/freemind/freemind-src-${version}.tar.gz";
+    sha256 = "06c6pm7hpwh9hbmyah3lj2wp1g957x8znfwc5cwygsi7dc98b0h1";
+  };
+
+  buildInputs = [ jdk ant ];
+
+  preConfigure = ''
+    chmod +x check_for_duplicate_resources.sh
+    sed 's,/bin/bash,${stdenv.shell},' -i check_for_duplicate_resources.sh
+
+    ## work around javac encoding errors
+    export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
+  '';
+
+  buildPhase = "ant dist";
+
+  installPhase = ''
+    mkdir -p $out/{bin,nix-support}
+    cp -r ../bin/dist $out/nix-support
+    sed -i 's/which/type -p/' $out/nix-support/dist/freemind.sh
+
+    cat >$out/bin/freemind <<EOF
+    #! ${stdenv.shell}
+    JAVA_HOME=${jre} $out/nix-support/dist/freemind.sh
+    EOF
+    chmod +x $out/{bin/freemind,nix-support/dist/freemind.sh}
+  '';
+
+  meta = with lib; {
+    description = "Mind-mapping software";
+    homepage = "http://freemind.sourceforge.net/wiki/index.php/Main_Page";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fslint/default.nix b/nixpkgs/pkgs/applications/misc/fslint/default.nix
new file mode 100644
index 000000000000..1f2ec2805490
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fslint/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, python2, makeWrapper }:
+
+let pythonEnv = python2.withPackages(ps: [ ps.pyGtkGlade]);
+in stdenv.mkDerivation rec {
+  pname   = "fslint";
+  version = "2.46";
+
+  src = fetchFromGitHub {
+    owner  = "pixelb";
+    repo   = "fslint";
+    rev    = version;
+    sha256 = "048pc1rsslbsrfchl2wmdd4hpa2gycglib7kdx8vqs947zcm0sfv";
+  };
+
+  buildInputs = [
+    pythonEnv makeWrapper
+  ];
+
+  prePatch = ''
+    substituteInPlace fslint-gui --replace "liblocation=os.path.dirname(os.path.abspath(sys.argv[0]))" "liblocation='$out'"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp * -R $out/
+    cp fslint-gui $out/bin/fslint
+
+    wrapProgram "$out/bin/fslint" \
+      --prefix PYTHONPATH : "${pythonEnv.interpreter}"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A utility to find and clean various forms of lint on a filesystem";
+    homepage = "https://www.pixelbeat.org/fslint/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.dasj19 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fsv/default.nix b/nixpkgs/pkgs/applications/misc/fsv/default.nix
new file mode 100644
index 000000000000..a965c615dfd3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fsv/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, autoreconfHook
+, libtool, pkg-config, gtk2, libGLU, file
+}:
+
+let
+  gtkglarea = stdenv.mkDerivation rec {
+    pname    = "gtkglarea";
+    version = "2.1.0";
+    src = fetchurl {
+      url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+      sha256 = "1pl2vdj6l64j864ilhkq1bcggb3hrlxjwk5m029i7xfjfxc587lf";
+    };
+    nativeBuildInputs = [ pkg-config ];
+    buildInputs       = [ gtk2 libGLU ];
+    hardeningDisable  = [ "format" ];
+  };
+
+in stdenv.mkDerivation rec {
+  pname   = "fsv";
+  version = "0.9-1";
+
+  src = fetchFromGitHub {
+    owner  = "mcuelenaere";
+    repo   = "fsv";
+    rev    = "${pname}-${version}";
+    sha256 = "0n09jd7yqj18mx6zqbg7kab4idg5llr15g6avafj74fpg1h7iimj";
+  };
+
+  postPatch = ''
+   # fix build with gettext 0.20
+   sed -i 's/AM_GNU_GETTEXT/AM_GNU_GETTEXT([external])/' configure.in
+  '';
+
+  nativeBuildInputs = [ autoreconfHook libtool pkg-config ];
+  buildInputs       = [ file gtk2 libGLU gtkglarea ];
+
+  meta = with lib; {
+    description     = "File system visualizer in cyberspace";
+    longDescription = ''
+      fsv (pronounced eff-ess-vee) is a file system visualizer in cyberspace.
+      It lays out files and directories in three dimensions, geometrically
+      representing the file system hierarchy to allow visual overview
+      and analysis. fsv can visualize a modest home directory, a workstation's
+      hard drive, or any arbitrarily large collection of files, limited only
+      by the host computer's memory and graphics hardware.
+    '';
+    homepage    = "https://github.com/mcuelenaere/fsv";
+    license     = licenses.lgpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fusee-interfacee-tk/default.nix b/nixpkgs/pkgs/applications/misc/fusee-interfacee-tk/default.nix
new file mode 100644
index 000000000000..813b8113ee30
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fusee-interfacee-tk/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv , fetchFromGitHub , python3 , makeWrapper }:
+
+let pythonEnv = python3.withPackages(ps: [ ps.tkinter ps.pyusb ]);
+in stdenv.mkDerivation rec {
+  pname = "fusee-interfacee-tk";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "nh-server";
+    repo = pname;
+    rev = "V${version}";
+    sha256 = "0ngwbwsj999flprv14xvhk7lp51nprrvcnlbnbk6y4qx5casm5md";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ pythonEnv ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    # The program isn't just called app, so I'm renaming it based on the repo name
+    # It also isn't a standard program, so we need to append the shebang to the top
+    echo "#!${pythonEnv.interpreter}" > $out/bin/fusee-interfacee-tk
+    cat app.py >> $out/bin/fusee-interfacee-tk
+    chmod +x $out/bin/fusee-interfacee-tk
+
+    # app.py depends on these to run
+    cp *.py $out/bin/
+    cp intermezzo.bin $out/bin/intermezzo.bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/nh-server/fusee-interfacee-tk";
+    description = "A tool to send .bin files to a Nintendo Switch in RCM mode";
+    longDescription = "A mod of falquinhos Fusée Launcher for use with Nintendo Homebrew Switch Guide. It also adds the ability to mount SD while in RCM.
+    Must be run as sudo.";
+    maintainers = with maintainers; [ kristian-brucaj ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fuzzel/default.nix b/nixpkgs/pkgs/applications/misc/fuzzel/default.nix
new file mode 100644
index 000000000000..337d68b4b20d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fuzzel/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchgit, pkg-config, meson, ninja, wayland, pixman, cairo, librsvg, wayland-protocols, wlroots, libxkbcommon, scdoc, git, tllist, fcft}:
+
+stdenv.mkDerivation rec {
+  pname = "fuzzel";
+  version = "1.4.2";
+
+  src = fetchgit {
+    url = "https://codeberg.org/dnkl/fuzzel";
+    rev = version;
+    sha256 = "0c0p9spklzmy9f7abz3mvw0vp6zgnk3ns1i6ks95ljjb3kqy9vs2";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja scdoc git ];
+  buildInputs = [ wayland pixman cairo librsvg wayland-protocols  wlroots libxkbcommon tllist fcft ];
+
+  meta = with lib; {
+    description = "Wayland-native application launcher, similar to rofi’s drun mode";
+    homepage = "https://codeberg.org/dnkl/fuzzel";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fionera ];
+    platforms = with platforms; linux;
+    changelog = "https://codeberg.org/dnkl/fuzzel/releases/tag/${version}";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gImageReader/default.nix b/nixpkgs/pkgs/applications/misc/gImageReader/default.nix
new file mode 100644
index 000000000000..2e1afa8053b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gImageReader/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libuuid
+, sane-backends, podofo, libjpeg, djvulibre, libxmlxx3, libzip, tesseract
+, intltool, poppler, json-glib
+, ninja
+, python3
+
+# Gtk deps
+# upstream gImagereader supports Qt too
+, gobject-introspection, wrapGAppsHook
+, gtkmm3, gtksourceview3, gtksourceviewmm, gtkspell3, gtkspellmm, cairomm
+}:
+
+let
+  variant = "gtk";
+  pythonEnv = python3.withPackages( ps: with ps;[ pygobject3 ] );
+in
+stdenv.mkDerivation rec {
+  pname = "gImageReader";
+  version = "3.3.1";
+
+  src = fetchFromGitHub {
+    owner= "manisandro";
+    repo = "gImageReader";
+    rev = "v${version}";
+    sha256 = "17hz2dgxx2j7hsk0lx3riidqvlsg0ylnicjd2gphsi3yp7w20zdj";
+  };
+
+  nativeBuildInputs = [
+    cmake ninja
+    intltool
+    pkg-config
+    pythonEnv
+
+    # Gtk specific
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    libxmlxx3
+    libzip
+    libuuid
+    sane-backends
+    podofo
+    libjpeg
+    djvulibre
+    tesseract
+    poppler
+
+    # Gtk specific
+    gtkmm3
+    gtkspell3
+    gtkspellmm
+    gtksourceview3
+    gtksourceviewmm
+    cairomm
+    json-glib
+  ];
+
+  # interface type can be where <type> is either gtk, qt5, qt4
+  cmakeFlags = [ "-DINTERFACE_TYPE=${variant}" ];
+
+  meta = with lib; {
+    description = "A simple Gtk/Qt front-end to tesseract-ocr";
+    homepage = "https://github.com/manisandro/gImageReader";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [teto];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/galculator/default.nix b/nixpkgs/pkgs/applications/misc/galculator/default.nix
new file mode 100644
index 000000000000..287a2fca3637
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/galculator/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, intltool
+, gtk, pkg-config, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "galculator";
+  version = "2.1.4";
+
+  src = fetchFromGitHub {
+    owner = "galculator";
+    repo = "galculator";
+    rev = "v${version}";
+    sha256 = "0q0hb62f266709ncyq96bpx4a40a1i6dc5869byvd7x285sx1c2w";
+  };
+
+  nativeBuildInputs = [ autoreconfHook intltool pkg-config ];
+  buildInputs = [ gtk flex ];
+
+  meta = with lib; {
+    description = "A GTK 2/3 algebraic and RPN calculator";
+    longDescription = ''
+      galculator is a GTK 2 / GTK 3 based calculator. Its main features include:
+
+      - Algebraic, RPN (Reverse Polish Notation), Formula Entry and Paper modes;
+      - Basic and Scientific Modes
+      - Decimal, hexadecimal, octal and binary number base
+      - Radiant, degree and grad support
+      - User defined constants and functions
+      - A bunch of common functions
+      - Binary arithmetic of configurable bit length and signedness
+      - Quad-precision floating point arithmetic, and 112-bit binary arithmetic
+    '';
+    homepage = "http://galculator.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gallery-dl/default.nix b/nixpkgs/pkgs/applications/misc/gallery-dl/default.nix
new file mode 100644
index 000000000000..60124f6aa73d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gallery-dl/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildPythonApplication, fetchPypi, requests, pytestCheckHook }:
+
+buildPythonApplication rec {
+  pname = "gallery_dl";
+  version = "1.16.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5926794d7a602cb9d4edf0a2094b266b790033db0a62689fa01e5272d7388587";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  checkInputs = [ pytestCheckHook ];
+  pytestFlagsArray = [
+    # requires network access
+    "--ignore=test/test_results.py"
+    "--ignore=test/test_downloader.py"
+  ];
+
+  meta = with lib; {
+    description = "Command-line program to download image-galleries and -collections from several image hosting sites";
+    homepage = "https://github.com/mikf/gallery-dl";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ dawidsowa ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gammu/bashcomp-dir.patch b/nixpkgs/pkgs/applications/misc/gammu/bashcomp-dir.patch
new file mode 100644
index 000000000000..de402595cd38
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gammu/bashcomp-dir.patch
@@ -0,0 +1,11 @@
+--- a/contrib/CMakeLists.txt
++++ b/contrib/CMakeLists.txt
+@@ -85,7 +85,7 @@ endif (INSTALL_PHP_EXAMPLES)
+ if (INSTALL_BASH_COMPLETION)
+     macro_optional_find_package (BashCompletion)
+     if (NOT BASH_COMPLETION_FOUND)
+-      set (BASH_COMPLETION_COMPLETIONSDIR "/etc/bash_completion.d" CACHE PATH "Location of bash_completion.d")
++      set (BASH_COMPLETION_COMPLETIONSDIR "${CMAKE_INSTALL_PREFIX}/share/bash-completion/completions" CACHE PATH "Location of bash_completion.d")
+     endif (NOT BASH_COMPLETION_FOUND)
+     install (
+         FILES bash-completion/gammu
diff --git a/nixpkgs/pkgs/applications/misc/gammu/default.nix b/nixpkgs/pkgs/applications/misc/gammu/default.nix
new file mode 100644
index 000000000000..0a6796a9b077
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gammu/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, python, pkg-config, cmake, bluez, libusb1, curl
+, libiconv, gettext, sqlite
+, dbiSupport ? false, libdbi ? null, libdbiDrivers ? null
+, postgresSupport ? false, postgresql ? null
+}:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "gammu";
+  version = "1.40.0";
+
+  src = fetchFromGitHub {
+    owner = "gammu";
+    repo = "gammu";
+    rev = version;
+    sha256 = "1jjaa9r3x6i8gv3yn1ngg815s6gsxblsw4wb5ddm77kamn2qyvpf";
+  };
+
+  patches = [ ./bashcomp-dir.patch ./systemd.patch ];
+
+  nativeBuildInputs = [ pkg-config cmake ];
+
+  buildInputs = [ python bluez libusb1 curl gettext sqlite libiconv ]
+  ++ optionals dbiSupport [ libdbi libdbiDrivers ]
+  ++ optionals postgresSupport [ postgresql ];
+
+  meta = {
+    homepage = "https://wammu.eu/gammu/";
+    description = "Command line utility and library to control mobile phones";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.coroa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gammu/systemd.patch b/nixpkgs/pkgs/applications/misc/gammu/systemd.patch
new file mode 100644
index 000000000000..22b49a5a2ffe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gammu/systemd.patch
@@ -0,0 +1,30 @@
+diff --git a/cmake/templates/gammu.spec.in b/cmake/templates/gammu.spec.in
+index 8302353..e3ca59a 100644
+--- a/cmake/templates/gammu.spec.in
++++ b/cmake/templates/gammu.spec.in
+@@ -387,9 +387,9 @@ fi
+ %doc %{_mandir}/man7/gammu-smsd-run.7*
+ %doc %{_mandir}/man7/gammu-smsd-sql.7*
+ %doc %{_mandir}/man7/gammu-smsd-tables.7*
+-%dir %{_libexecdir}/systemd
+-%dir %{_libexecdir}/systemd/system
+-%{_libexecdir}/systemd/system/gammu-smsd.service
++%dir %{_prefix}/systemd
++%dir %{_prefix}/systemd/system
++%{_prefix}/systemd/system/gammu-smsd.service
+ 
+ %files -n libGammu%{so_ver} -f libgammu.lang
+ %defattr(-,root,root,-)
+diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt
+index 78cc7fc..d674c36 100644
+--- a/contrib/CMakeLists.txt
++++ b/contrib/CMakeLists.txt
+@@ -97,7 +97,7 @@ endif (INSTALL_BASH_COMPLETION)
+ if (WITH_SYSTEMD)
+     install (
+         FILES init/gammu-smsd.service
+-        DESTINATION "${SYSTEMD_SERVICES_INSTALL_DIR}"
++        DESTINATION "${CMAKE_INSTALL_PREFIX}/systemd"
+         COMPONENT "systemd"
+     )
+ endif (WITH_SYSTEMD)
diff --git a/nixpkgs/pkgs/applications/misc/ganttproject-bin/default.nix b/nixpkgs/pkgs/applications/misc/ganttproject-bin/default.nix
new file mode 100644
index 000000000000..2b4504a1dce2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ganttproject-bin/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchzip, makeDesktopItem, makeWrapper
+, jre
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ganttproject-bin";
+  version = "2.8.10";
+
+  src = let build = "r2364"; in fetchzip {
+    sha256 = "0cclgyqv4f9pjsdlh93cqvgbzrp8ajvrpc2xszs03sknqz2kdh7r";
+    url = "https://dl.ganttproject.biz/ganttproject-${version}/"
+        + "ganttproject-${version}-${build}.zip";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
+
+  installPhase = let
+
+    desktopItem = makeDesktopItem {
+      name = "ganttproject";
+      exec = "ganttproject";
+      icon = "ganttproject";
+      desktopName = "GanttProject";
+      genericName = "Shedule and manage projects";
+      comment = meta.description;
+      categories = "Office;";
+    };
+
+    javaOptions = [
+      "-Dawt.useSystemAAFontSettings=on"
+    ];
+
+  in ''
+    mkdir -pv "$out/share/ganttproject"
+    cp -rv *  "$out/share/ganttproject"
+
+    mkdir -pv "$out/bin"
+    wrapProgram "$out/share/ganttproject/ganttproject" \
+      --set JAVA_HOME "${jre}" \
+      --set _JAVA_OPTIONS "${builtins.toString javaOptions}"
+
+    mv -v "$out/share/ganttproject/ganttproject" "$out/bin"
+
+    cp -rv "${desktopItem}/share/applications" "$out/share"
+  '';
+
+  meta = with lib; {
+    description = "Project scheduling and management";
+    homepage = "https://www.ganttproject.biz/";
+    downloadPage = "https://www.ganttproject.biz/download";
+    # GanttProject itself is GPL3+. All bundled libraries are declared
+    # ‘GPL3-compatible’. See ${downloadPage} for detailed information.
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.vidbina ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/garmin-plugin/default.nix b/nixpkgs/pkgs/applications/misc/garmin-plugin/default.nix
new file mode 100644
index 000000000000..c2c3a69140b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/garmin-plugin/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, garmintools, libgcrypt, libusb-compat-0_1, pkg-config, tinyxml, zlib }:
+stdenv.mkDerivation {
+  name = "garmin-plugin-0.3.26";
+  src = fetchurl {
+    url = "https://github.com/adiesner/GarminPlugin/archive/V0.3.26.tar.gz";
+    sha256 = "15gads1fj4sj970m5960dgnhys41ksi4cm53ldkf67wn8dc9i4k0";
+  };
+  sourceRoot = "GarminPlugin-0.3.26/src";
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ garmintools libusb-compat-0_1 libgcrypt tinyxml zlib ];
+  configureFlags = [
+    "--with-libgcrypt-prefix=${libgcrypt.dev}"
+    "--with-garmintools-incdir=${garmintools}/include"
+    "--with-garmintools-libdir=${garmintools}/lib"
+  ];
+  installPhase = ''
+    mkdir -p $out/lib/mozilla/plugins
+    cp npGarminPlugin.so $out/lib/mozilla/plugins
+  '';
+  meta = {
+    homepage = "http://www.andreas-diesner.de/garminplugin";
+    license = lib.licenses.gpl3;
+    maintainers = [ ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gcal/default.nix b/nixpkgs/pkgs/applications/misc/gcal/default.nix
new file mode 100644
index 000000000000..28de8e0eceae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gcal/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, ncurses, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "gcal";
+  version = "4.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/gcal/${pname}-${version}.tar.xz";
+    sha256 = "1av11zkfirbixn05hyq4xvilin0ncddfjqzc4zd9pviyp506rdci";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/gcal/raw/master/f/gcal-glibc-no-libio.patch";
+      sha256 = "0l4nw9kgzsay32rsdwvs75pbp4fhx6pfm85paynfbd20cdm2n2kv";
+    })
+  ];
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ ncurses ];
+
+  meta = {
+    description = "Program for calculating and printing calendars";
+    longDescription = ''
+      Gcal is the GNU version of the trusty old cal(1). Gcal is a
+      program for calculating and printing calendars. Gcal displays
+      hybrid and proleptic Julian and Gregorian calendar sheets.  It
+      also displays holiday lists for many countries around the globe.
+    '';
+    homepage = "https://www.gnu.org/software/gcal/";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gcalcli/default.nix b/nixpkgs/pkgs/applications/misc/gcalcli/default.nix
new file mode 100644
index 000000000000..20aefe2ab1d6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gcalcli/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchFromGitHub, python3
+, libnotify ? null }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "gcalcli";
+  version = "4.3.0";
+
+  src = fetchFromGitHub {
+    owner  = "insanum";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "0s5fhcmz3n0dwh3vkqr4aigi59q43v03ch5jhh6v75149icwr0df";
+  };
+
+  postPatch = lib.optionalString stdenv.isLinux ''
+    substituteInPlace gcalcli/argparsers.py \
+      --replace "'notify-send" "'${libnotify}/bin/notify-send"
+  '';
+
+  propagatedBuildInputs = [
+    dateutil gflags httplib2 parsedatetime six vobject
+    google_api_python_client oauth2client uritemplate
+    libnotify
+  ] ++ lib.optional (!isPy3k) futures;
+
+  # There are no tests as of 4.0.0a4
+  doCheck = false;
+
+  meta = with lib; {
+    description = "CLI for Google Calendar";
+    homepage = "https://github.com/insanum/gcalcli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nocoolnametom ];
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gcstar/default.nix b/nixpkgs/pkgs/applications/misc/gcstar/default.nix
new file mode 100644
index 000000000000..f482b8af2898
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gcstar/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv
+, fetchFromGitLab
+, perlPackages
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gcstar";
+  version = "1.7.2";
+
+  src = fetchFromGitLab {
+    owner = "Kerenoc";
+    repo = "GCstar";
+    rev = "v${version}";
+    sha256 = "1vqfff33sssvlvsva1dflggmwl00j5p64sn1669f9wrbvjkxgpv4";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+
+  buildInputs = with perlPackages; [
+    perl
+    ArchiveZip
+    DateCalc
+    DateTimeFormatStrptime
+    Glib
+    Gtk2
+    GD
+    GDGraph
+    GDText
+    HTMLParser
+    JSON
+    ImageExifTool
+    librelative
+    LWPUserAgent
+    LWPProtocolHttps
+    MP3Info
+    MP3Tag
+    NetFreeDB
+    OggVorbisHeaderPurePerl
+    Pango
+    XMLSimple
+    XMLParser
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    cd gcstar
+    perl install --text --prefix=$out
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/gcstar --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/Kerenoc/GCstar";
+    description = "Manage your collections of movies, games, books, music and more";
+    longDescription = ''
+      GCstar is an application for managing your collections.
+      It supports many types of collections, including movies, books, games, comics, stamps, coins, and many more.
+      You can even create your own collection type for whatever unique thing it is that you collect!
+      Detailed information on each item can be automatically retrieved from the internet and you can store additional data, such as the location or who you've lent it to.
+      You may also search and filter your collections by many criteria.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dasj19 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/genxword/default.nix b/nixpkgs/pkgs/applications/misc/genxword/default.nix
new file mode 100644
index 000000000000..f443618c685a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/genxword/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, python3
+, fetchFromGitHub
+, gettext
+, gobject-introspection
+, wrapGAppsHook
+, pango
+, gtksourceview3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "genxword";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "riverrun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17h8saja45bv612yk0pra9ncbp2mjnx5n10q25nqhl765ks4bmb5";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gobject-introspection
+    pango
+    gtksourceview3
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pycairo
+    pygobject3
+  ];
+
+  # to prevent double wrapping
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  # there are no tests
+  doCheck = false;
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Crossword generator";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/geoipupdate/default.nix b/nixpkgs/pkgs/applications/misc/geoipupdate/default.nix
new file mode 100644
index 000000000000..1e0aba0400f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/geoipupdate/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "geoipupdate";
+  version = "4.6.0";
+
+  src = fetchFromGitHub {
+    owner = "maxmind";
+    repo = "geoipupdate";
+    rev = "v${version}";
+    sha256 = "1rzc8kidm8nr9pbcbq96kax3cbf39afrk5vzpl04lzpw3jbbakjq";
+  };
+
+  vendorSha256 = "1f858k8cl0dgiw124jv0p9jhi9aqxnc3nmc7hksw70fla2nzjrv0";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatic GeoIP database updater";
+    homepage = "https://github.com/maxmind/geoipupdate";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/get_iplayer/default.nix b/nixpkgs/pkgs/applications/misc/get_iplayer/default.nix
new file mode 100644
index 000000000000..6664974a41ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/get_iplayer/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, atomicparsley, flvstreamer, ffmpeg_3, makeWrapper, perl, perlPackages, rtmpdump}:
+
+with lib;
+
+perlPackages.buildPerlPackage rec {
+  pname = "get_iplayer";
+  version = "3.24";
+
+  src = fetchFromGitHub {
+    owner = "get-iplayer";
+    repo = "get_iplayer";
+    rev = "v${version}";
+    sha256 = "0yd84ncb6cjrk4v4kz3zrddkl7iwkm3zlfbjyswd9hanp8fvd4q3";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+  propagatedBuildInputs = with perlPackages; [
+    HTMLParser HTTPCookies LWP LWPProtocolHttps XMLLibXML XMLSimple
+  ];
+
+  preConfigure = "touch Makefile.PL";
+  doCheck = false;
+  outputs = [ "out" "man" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp get_iplayer $out/bin
+    wrapProgram $out/bin/get_iplayer --suffix PATH : ${makeBinPath [ atomicparsley ffmpeg_3 flvstreamer rtmpdump ]} --prefix PERL5LIB : $PERL5LIB
+    cp get_iplayer.1 $out/share/man/man1
+  '';
+
+  meta = {
+    description = "Downloads TV and radio from BBC iPlayer";
+    license = licenses.gpl3Plus;
+    homepage = "https://squarepenguin.co.uk/";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rika ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/getxbook/default.nix b/nixpkgs/pkgs/applications/misc/getxbook/default.nix
new file mode 100644
index 000000000000..a69f8d7f0574
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/getxbook/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "getxbook";
+  version = "1.2";
+
+  src = fetchurl {
+    url    = "https://njw.me.uk/getxbook/${pname}-${version}.tar.xz";
+    sha256 = "0ihwrx4gspj8l7fc8vxch6dpjrw1lvv9z3c19f0wxnmnxhv1cjvs";
+  };
+
+  NIX_CFLAGS_COMPILE = builtins.toString [
+    "-Wno-error=format-truncation"
+    "-Wno-error=deprecated-declarations"
+    "-Wno-error=stringop-overflow"
+  ];
+
+  buildInputs = [ openssl ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A collection of tools to download books from Google Books";
+    homepage    = "https://njw.me.uk/getxbook/";
+    license     = licenses.isc;
+    maintainers = with maintainers; [ obadz ];
+    platforms   = platforms.all;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/girara/default.nix b/nixpkgs/pkgs/applications/misc/girara/default.nix
new file mode 100644
index 000000000000..f8ebd8aed7ec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/girara/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, meson, ninja, pkg-config, check, dbus, xvfb_run, glib, gtk, gettext, libiconv, json_c, libintl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "girara";
+  version = "0.3.5";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "https://git.pwmt.org/pwmt/${pname}/-/archive/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1n3i960b458172mc3pkq7m9dn5qxry6fms3c3k06v27cjp5whsyf";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config gettext check dbus xvfb_run ];
+  buildInputs = [ libintl libiconv json_c ];
+  propagatedBuildInputs = [ glib gtk ];
+
+  doCheck = !stdenv.isDarwin;
+
+  mesonFlags = [
+    "-Ddocs=disabled" # docs do not seem to be installed
+  ];
+
+  checkPhase = ''
+    export NO_AT_BRIDGE=1
+    xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
+      --config-file=${dbus.daemon}/share/dbus-1/session.conf \
+      meson test --print-errorlogs
+  '';
+
+  meta = with lib; {
+    homepage = "https://git.pwmt.org/pwmt/girara";
+    description = "User interface library";
+    longDescription = ''
+      girara is a library that implements a GTK based VIM-like user interface
+      that focuses on simplicity and minimalism.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gitit/default.nix b/nixpkgs/pkgs/applications/misc/gitit/default.nix
new file mode 100644
index 000000000000..a4ffd3bf88d3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gitit/default.nix
@@ -0,0 +1,61 @@
+{ lib, haskellPackages, haskell, removeReferencesTo
+# “Plugins” are a fancy way of saying gitit will invoke
+# GHC at *runtime*, which in turn makes it pull GHC
+# into its runtime closure. Only enable if you really need
+# that feature. But if you do you’ll want to use gitit
+# as a library anyway.
+, pluginSupport ? false
+}:
+
+# this is similar to what we do with the pandoc executable
+
+let
+  plain = haskellPackages.gitit;
+  plugins =
+    if pluginSupport
+    then plain
+    else haskell.lib.disableCabalFlag plain "plugins";
+  static = haskell.lib.justStaticExecutables plugins;
+
+in
+  (haskell.lib.overrideCabal static (drv: {
+    buildTools = (drv.buildTools or []) ++ [ removeReferencesTo ];
+  })).overrideAttrs (drv: {
+
+    # These libraries are still referenced, because they generate
+    # a `Paths_*` module for figuring out their version.
+    # The `Paths_*` module is generated by Cabal, and contains the
+    # version, but also paths to e.g. the data directories, which
+    # lead to a transitive runtime dependency on the whole GHC distribution.
+    # This should ideally be fixed in haskellPackages (or even Cabal),
+    # but a minimal gitit is important enough to patch it manually.
+    disallowedReferences = [
+      haskellPackages.pandoc-types
+      haskellPackages.HTTP
+      haskellPackages.pandoc
+      haskellPackages.happstack-server
+      haskellPackages.filestore
+    ];
+    postInstall = ''
+      remove-references-to \
+        -t ${haskellPackages.pandoc-types} \
+        $out/bin/gitit
+      remove-references-to \
+        -t ${haskellPackages.HTTP} \
+        $out/bin/gitit
+      remove-references-to \
+        -t ${haskellPackages.pandoc} \
+        $out/bin/gitit
+      remove-references-to \
+        -t ${haskellPackages.happstack-server} \
+        $out/bin/gitit
+      remove-references-to \
+        -t ${haskellPackages.filestore} \
+        $out/bin/gitit
+    '';
+
+    meta = drv.meta // {
+      maintainers = drv.meta.maintainers or []
+        ++ [ lib.maintainers.Profpatsch ];
+    };
+  })
diff --git a/nixpkgs/pkgs/applications/misc/gkrellm/default.nix b/nixpkgs/pkgs/applications/misc/gkrellm/default.nix
new file mode 100644
index 000000000000..2cc20b424b1d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gkrellm/default.nix
@@ -0,0 +1,46 @@
+{ lib, fetchurl, stdenv, gettext, pkg-config, glib, gtk2, libX11, libSM, libICE, which
+, IOKit ? null }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  name = "gkrellm-2.3.11";
+
+  src = fetchurl {
+    url = "http://gkrellm.srcbox.net/releases/${name}.tar.bz2";
+    sha256 = "01lccz4fga40isv09j8rjgr0qy10rff9vj042n6gi6gdv4z69q0y";
+  };
+
+  nativeBuildInputs = [ pkg-config which ];
+  buildInputs = [gettext glib gtk2 libX11 libSM libICE]
+    ++ optionals stdenv.isDarwin [ IOKit ];
+
+  hardeningDisable = [ "format" ];
+
+  # Makefiles are patched to fix references to `/usr/X11R6' and to add
+  # `-lX11' to make sure libX11's store path is in the RPATH.
+  patchPhase = ''
+    echo "patching makefiles..."
+    for i in Makefile src/Makefile server/Makefile
+    do
+      sed -i "$i" -e "s|/usr/X11R6|${libX11.dev}|g ; s|-lICE|-lX11 -lICE|g"
+    done
+  '';
+
+  makeFlags = [ "STRIP=-s" ];
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = {
+    description = "Themeable process stack of system monitors";
+    longDescription = ''
+      GKrellM is a single process stack of system monitors which
+      supports applying themes to match its appearance to your window
+      manager, Gtk, or any other theme.
+    '';
+
+    homepage = "http://gkrellm.srcbox.net";
+    license = licenses.gpl3Plus;
+    maintainers = [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gksu/default.nix b/nixpkgs/pkgs/applications/misc/gksu/default.nix
new file mode 100644
index 000000000000..9d8ce3cc4804
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gksu/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, pkg-config, gtk2, gnome2, gnome3, libgksu,
+  intltool, libstartup_notification, gtk-doc, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.0.2";
+  pname = "gksu";
+
+  src = fetchurl {
+    url = "http://people.debian.org/~kov/gksu/${pname}-${version}.tar.gz";
+    sha256 = "0npfanlh28daapkg25q4fncxd89rjhvid5fwzjaw324x0g53vpm1";
+  };
+
+  nativeBuildInputs = [
+    pkg-config intltool gtk-doc wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk2 gnome2.GConf libstartup_notification gnome3.libgnome-keyring
+  ];
+
+  propagatedBuildInputs = [
+    libgksu
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  patches = [
+    # https://savannah.nongnu.org/bugs/index.php?36127
+    ./gksu-2.0.2-glib-2.31.patch
+  ];
+
+  postPatch = ''
+    sed -i -e 's|/usr/bin/x-terminal-emulator|-l gnome-terminal|g' gksu.desktop
+  '';
+
+  configureFlags = [ "--disable-nautilus-extension" ];
+
+  meta = {
+    description = "A graphical frontend for libgksu";
+    longDescription = ''
+      GKSu is a library that provides a GTK frontend to su and sudo.
+      It supports login shells and preserving environment when acting as
+      a su frontend. It is useful to menu items or other graphical
+      programs that need to ask a user's password to run another program
+      as another user.
+    '';
+    homepage = "https://www.nongnu.org/gksu/";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.romildo ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gksu/gksu-2.0.2-glib-2.31.patch b/nixpkgs/pkgs/applications/misc/gksu/gksu-2.0.2-glib-2.31.patch
new file mode 100644
index 000000000000..fd711a321acf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gksu/gksu-2.0.2-glib-2.31.patch
@@ -0,0 +1,29 @@
+From 10c7e67e11a56e2fe1acf9b085772bc995d35bc0 Mon Sep 17 00:00:00 2001
+From: Alexandre Rostovtsev <tetromino@gentoo.org>
+Date: Sat, 7 Apr 2012 17:57:36 -0400
+Subject: [PATCH] Fix glib includes for building with >=glib-2.31
+
+glib-2.31 and newer no longer allow most glib subheaders to be included
+directly.
+
+https://savannah.nongnu.org/bugs/index.php?36127
+---
+ nautilus-gksu/libnautilus-gksu.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/nautilus-gksu/libnautilus-gksu.c b/nautilus-gksu/libnautilus-gksu.c
+index 8e44d29..4acf3f8 100644
+--- a/nautilus-gksu/libnautilus-gksu.c
++++ b/nautilus-gksu/libnautilus-gksu.c
+@@ -5,7 +5,7 @@
+ #include <string.h>
+ #include <pthread.h>
+ 
+-#include <glib/gkeyfile.h>
++#include <glib.h>
+ #include <gtk/gtk.h>
+ #include <gio/gio.h>
+ #include <libnautilus-extension/nautilus-extension-types.h>
+-- 
+1.7.8.5
+
diff --git a/nixpkgs/pkgs/applications/misc/glava/default.nix b/nixpkgs/pkgs/applications/misc/glava/default.nix
new file mode 100644
index 000000000000..a0af30ac84b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/glava/default.nix
@@ -0,0 +1,92 @@
+{ lib, stdenv, writeScript, fetchFromGitHub
+, libGL, libX11, libXext, python3, libXrandr, libXrender, libpulseaudio, libXcomposite
+, enableGlfw ? false, glfw, runtimeShell }:
+
+let
+  inherit (lib) optional makeLibraryPath;
+
+  wrapperScript = writeScript "glava" ''
+    #!${runtimeShell}
+    case "$1" in
+      --copy-config|-C)
+        # The binary would symlink it, which won't work in Nix because the
+        # garbage collector will eventually remove the original files after
+        # updates
+        echo "Nix wrapper: Copying glava config to ~/.config/glava"
+        cp -r --no-preserve=all @out@/etc/xdg/glava ~/.config/glava
+        ;;
+      *)
+        exec @out@/bin/.glava-unwrapped "$@"
+    esac
+  '';
+in
+  stdenv.mkDerivation rec {
+    pname = "glava";
+    version = "1.6.3";
+
+    src = fetchFromGitHub {
+      owner = "wacossusca34";
+      repo = "glava";
+      rev = "v${version}";
+      sha256 = "0kqkjxmpqkmgby05lsf6c6iwm45n33jk5qy6gi3zvjx4q4yzal1i";
+    };
+
+    buildInputs = [
+      libX11
+      libXext
+      libXrandr
+      libXrender
+      libpulseaudio
+      libXcomposite
+    ] ++ optional enableGlfw glfw;
+
+    nativeBuildInputs = [
+      python3
+    ];
+
+    preConfigure = ''
+      for f in $(find -type f);do
+        substituteInPlace $f \
+          --replace /etc/xdg $out/etc/xdg
+      done
+
+      substituteInPlace Makefile \
+        --replace '$(DESTDIR)$(SHADERDIR)' '$(SHADERDIR)'
+
+      substituteInPlace Makefile \
+        --replace 'unknown' 'v${version}'
+
+      export CFLAGS="-march=native"
+    '';
+
+    makeFlags = optional (!enableGlfw) "DISABLE_GLFW=1";
+
+    installFlags = [
+      "DESTDIR=$(out)"
+    ];
+
+    fixupPhase = ''
+      mkdir -p $out/bin
+      mv $out/usr/bin/glava $out/bin/.glava-unwrapped
+      rm -rf $out/usr
+
+      patchelf \
+        --set-rpath "$(patchelf --print-rpath $out/bin/.glava-unwrapped):${makeLibraryPath [ libGL ]}" \
+        $out/bin/.glava-unwrapped
+
+      substitute ${wrapperScript} $out/bin/glava --subst-var out
+      chmod +x $out/bin/glava
+    '';
+
+    meta = with lib; {
+      description = ''
+        OpenGL audio spectrum visualizer
+      '';
+      homepage = "https://github.com/wacossusca34/glava";
+      platforms = platforms.linux;
+      license = licenses.gpl3;
+      maintainers = with maintainers; [
+        eadwu
+      ];
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/misc/glom/default.nix b/nixpkgs/pkgs/applications/misc/glom/default.nix
new file mode 100644
index 000000000000..47d56288ed2f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/glom/default.nix
@@ -0,0 +1,131 @@
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, autoconf
+, automake
+, libtool
+, mm-common
+, intltool
+, itstool
+, doxygen
+, graphviz
+, makeFontsConf
+, freefont_ttf
+, boost
+, libxmlxx3
+, libxslt
+, libgdamm
+, libarchive
+, libepc
+, python3
+, ncurses
+, glibmm
+, gtk3
+, openssl
+, gtkmm3
+, goocanvasmm2
+, evince
+, isocodes
+, gtksourceview
+, gtksourceviewmm
+, postgresql
+, gobject-introspection
+, yelp-tools
+, wrapGAppsHook
+}:
+
+let
+  gda = libgdamm.override {
+    mysqlSupport = true;
+    postgresSupport = true;
+  };
+  python = python3.withPackages (pkgs: with pkgs; [ pygobject3 ]);
+  sphinx-build = python3.pkgs.sphinx.overrideAttrs (super: {
+    postFixup = super.postFixup or "" + ''
+      # Do not propagate Python
+      rm $out/nix-support/propagated-build-inputs
+    '';
+  });
+  boost_python = boost.override { enablePython = true; inherit python; };
+in stdenv.mkDerivation rec {
+  pname = "glom";
+  version = "1.32.0";
+
+  outputs = [ "out" "lib" "dev" "doc" "devdoc" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1wcd4kd3crwqjv0jfp73jkyyf5ws8mvykg37kqxmcb58piz21gsk";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoconf
+    automake
+    libtool
+    mm-common
+    intltool
+    yelp-tools
+    itstool
+    doxygen
+    graphviz
+    sphinx-build
+    wrapGAppsHook
+    gobject-introspection # for setup hook
+  ];
+
+  buildInputs = [
+    boost_python
+    glibmm
+    gtk3
+    openssl
+    libxmlxx3
+    libxslt
+    gda
+    libarchive
+    libepc
+    python
+    ncurses # for python
+    gtkmm3
+    goocanvasmm2
+    evince
+    isocodes
+    python3.pkgs.pygobject3
+    gtksourceview
+    gtksourceviewmm
+    postgresql # for pg_config
+  ];
+
+  enableParallelBuilding = true;
+
+  preConfigure = "NOCONFIGURE=1 ./autogen.sh";
+
+  configureFlags = [
+    "--with-boost-python=boost_python${lib.versions.major python3.version}${lib.versions.minor python3.version}"
+  ];
+
+  makeFlags = [
+    "libdocdir=${placeholder "doc"}/share/doc/$(book_name)"
+    "devhelpdir=${placeholder "devdoc"}/share/devhelp/books/$(book_name)"
+  ];
+
+  # Fontconfig error: Cannot load default config file
+  FONTCONFIG_FILE = makeFontsConf {
+    fontDirectories = [ freefont_ttf ];
+  };
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PYTHONPATH : "${placeholder "out"}/${python3.sitePackages}"
+      --set PYTHONHOME "${python}"
+    )
+  '';
+
+  meta = with lib; {
+    description = "An easy-to-use database designer and user interface";
+    homepage = "http://www.glom.org/";
+    license = [ licenses.lgpl2 licenses.gpl2 ];
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gmrun/default.nix b/nixpkgs/pkgs/applications/misc/gmrun/default.nix
new file mode 100644
index 000000000000..bd99adf94359
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmrun/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, glib, gtk2, pkg-config, popt }:
+
+let
+  version = "0.9.2";
+in
+
+stdenv.mkDerivation rec {
+  pname = "gmrun";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gmrun/${pname}-${version}.tar.gz";
+    sha256 = "180z6hbax1qypy5cyy2z6nn7fzxla4ib47ck8mqwr714ag77na8p";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib gtk2 popt ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  patches = [
+      ./gcc43.patch
+      ./find-config-file-in-system-etc-dir.patch
+      ./gmrun-0.9.2-xdg.patch
+    ];
+
+  meta = with lib; {
+    description = "Gnome Completion-Run Utility";
+    longDescription = ''
+      A simple program which provides a "run program" window, featuring a bash-like TAB completion.
+      It uses GTK interface.
+      Also, supports CTRL-R / CTRL-S / "!" for searching through history.
+      Running commands in a terminal with CTRL-Enter. URL handlers.
+    '';
+    homepage = "https://sourceforge.net/projects/gmrun/";
+    license = licenses.gpl2;
+    maintainers = [];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gmrun/find-config-file-in-system-etc-dir.patch b/nixpkgs/pkgs/applications/misc/gmrun/find-config-file-in-system-etc-dir.patch
new file mode 100644
index 000000000000..12d5370961c0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmrun/find-config-file-in-system-etc-dir.patch
@@ -0,0 +1,18 @@
+diff -ur gmrun-0.9.2-orig/src/prefs.cc gmrun-0.9.2/src/prefs.cc
+--- gmrun-0.9.2-orig/src/prefs.cc	2019-05-02 12:56:39.025088361 +0200
++++ gmrun-0.9.2/src/prefs.cc	2019-05-02 13:21:51.179778620 +0200
+@@ -31,9 +31,11 @@
+ 
+ Prefs::Prefs()
+ {
+-  string file_name = PACKAGE_DATA_DIR"/";
+-  file_name += GMRUNRC;
+-  init(file_name);
++  string file_name = "/etc/" GMRUNRC;
++  if (!init(file_name)) {
++    file_name = PACKAGE_DATA_DIR "/" GMRUNRC;;
++    init(file_name);
++  }
+ 
+   file_name = getenv("HOME");
+   if (!file_name.empty()) {
diff --git a/nixpkgs/pkgs/applications/misc/gmrun/gcc43.patch b/nixpkgs/pkgs/applications/misc/gmrun/gcc43.patch
new file mode 100644
index 000000000000..60e4338e893d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmrun/gcc43.patch
@@ -0,0 +1,51 @@
+--- a/src/gtkcompletionline.cc.orig	2003-11-16 11:55:07.000000000 +0100
++++ a/src/gtkcompletionline.cc	2008-05-08 08:51:22.000000000 +0200
+@@ -29,6 +29,7 @@
+ #include <set>
+ #include <sstream>
+ #include <string>
++#include <cstring>
+ #include <vector>
+ using namespace std;
+ 
+--- a/src/ci_string.h.orig	2001-05-16 16:39:31.000000000 +0200
++++ a/src/ci_string.h	2008-05-08 08:51:33.000000000 +0200
+@@ -7,6 +7,7 @@
+ #define __CI_STRING_H__
+ 
+ #include <string>
++#include <cstring>
+ #include <ctype.h>
+ 
+ struct ci_char_traits : public std::char_traits<char>
+--- a/src/prefs.cc.orig	2002-08-16 12:48:22.000000000 +0200
++++ a/src/prefs.cc	2008-05-08 08:51:54.000000000 +0200
+@@ -13,6 +13,7 @@
+ #include <fstream>
+ #include <iostream>
+ #include <stdio.h>
++#include <stdlib.h>
+ 
+ #include <list>
+ 
+--- a/src/main.cc.orig	2003-11-16 11:55:07.000000000 +0100
++++ a/src/main.cc	2008-05-08 09:03:11.000000000 +0200
+@@ -14,6 +14,7 @@
+ #include <gdk/gdkkeysyms.h>
+ 
+ #include <string>
++#include <cstring>
+ #include <iostream>
+ #include <sstream>
+ #include <vector>
+
+--- a/src/gtkcompletionline.cc.orig	2009-06-19 22:38:14.000000000 +0400
++++ a/src/gtkcompletionline.cc	2009-06-19 22:37:14.000000000 +0400
+@@ -376,7 +377,7 @@
+   return 0;
+ }
+ 
+-int my_alphasort(const void* va, const void* vb) {
++int my_alphasort(const dirent** va, const dirent** vb) {
+   const struct dirent** a = (const struct dirent**)va;
+   const struct dirent** b = (const struct dirent**)vb;
diff --git a/nixpkgs/pkgs/applications/misc/gmrun/gmrun-0.9.2-xdg.patch b/nixpkgs/pkgs/applications/misc/gmrun/gmrun-0.9.2-xdg.patch
new file mode 100644
index 000000000000..b5cd41a3c5b4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmrun/gmrun-0.9.2-xdg.patch
@@ -0,0 +1,58 @@
+diff -ur a/src/history.cc src/history.cc
+--- a/src/history.cc	2002-08-17 15:19:31.000000000 +0200
++++ a/src/history.cc	2012-06-04 23:42:35.314653414 +0200
+@@ -24,8 +24,15 @@
+ HistoryFile::HistoryFile()
+ {
+   m_file_entries = 0;
+-  m_filename = g_get_home_dir();
+-  m_filename += "/.gmrun_history";
++  const char* filename = getenv("XDG_CACHE_HOME");
++  if (filename != 0 && *filename != '\0') {
++    m_filename = filename;
++    m_filename += "/gmrun_history";
++  }
++  else {
++    m_filename = g_get_home_dir();
++    m_filename += "/.gmrun_history";
++  }
+   m_current = 0;
+   m_default_set = false;
+   read_the_file();
+diff -ur a/src/prefs.cc src/prefs.cc
+--- a/src/prefs.cc	2012-06-04 22:35:00.671949439 +0200
++++ a/src/prefs.cc	2012-06-04 23:24:24.184445962 +0200
+@@ -35,12 +35,29 @@
+   file_name += GMRUNRC;
+   init(file_name);
+ 
+-  file_name = getenv("HOME");
+-  if (!file_name.empty()) {
++  file_name.clear();
++  const char* filename = getenv("XDG_CONFIG_HOME");
++  if (filename != 0 && *filename != '\0') {
++    file_name = filename;
+     string::iterator i = file_name.end() - 1;
+-    if (*i == '/') file_name.erase(i);
+-    file_name += "/.";
++    if (*i != '/') {
++      file_name += '/';
++    }
+     file_name += GMRUNRC;
++  }
++  else {
++    filename = getenv("HOME");
++    if (filename != 0 && *filename != '\0') {
++      file_name = filename;
++      string::iterator i = file_name.end() - 1;
++      if (*i != '/') {
++        file_name += '/';
++      }
++      file_name += '.';
++      file_name += GMRUNRC;
++    }
++  }
++  if (!file_name.empty()) {
+     init(file_name);
+   }
+ }
diff --git a/nixpkgs/pkgs/applications/misc/gmtp/default.nix b/nixpkgs/pkgs/applications/misc/gmtp/default.nix
new file mode 100644
index 000000000000..1479fe7bc7d8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmtp/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, pkg-config, libmtp, libid3tag, flac, libvorbis, gtk3
+, gsettings-desktop-schemas, wrapGAppsHook
+}:
+
+let version = "1.3.11"; in
+
+stdenv.mkDerivation {
+  pname = "gmtp";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gmtp/gMTP-${version}/gmtp-${version}.tar.gz";
+    sha256 = "04q6byyq002fhzkc2rkkahwh5b6272xakaj4m3vwm8la8jf0r0ss";
+  };
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+  buildInputs = [ libmtp libid3tag flac libvorbis gtk3 gsettings-desktop-schemas ];
+
+  enableParallelBuilding = true;
+
+  preFixup = ''
+    gappsWrapperArgs+=(--add-flags "--datapath \"$out/share\"");
+  '';
+
+  meta = {
+    description = "A simple MP3 and Media player client for UNIX and UNIX like systems";
+    homepage = "https://gmtp.sourceforge.io";
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-firmware-updater/default.nix b/nixpkgs/pkgs/applications/misc/gnome-firmware-updater/default.nix
new file mode 100644
index 000000000000..30d3b57003d1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-firmware-updater/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv
+, fetchFromGitLab
+, fetchpatch
+, appstream-glib
+, desktop-file-utils
+, fwupd
+, gettext
+, glib
+, gtk3
+, libsoup
+, libxmlb
+, meson
+, ninja
+, pkg-config
+, systemd
+, help2man
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-firmware-updater";
+  version = "3.34.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "hughsie";
+    repo = "gnome-firmware-updater";
+    rev = version;
+    sha256 = "04pll0fzf4nr276kfw89r0524s6ppmls5rz4vq2j8c8gb50g0b6l";
+  };
+
+  patches = [
+    # Fixes manual build
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/hughsie/gnome-firmware-updater/commit/006b64dcb401d8c81a33222bc4be8274c23f3c9c.patch";
+      sha256 = "02303ip4ri5pv1bls8c0njb00qhn0jd0d8rmvsrig0fmacwfvc06";
+    })
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/hughsie/gnome-firmware-updater/commit/c4f076f2c902080618e0c27dec924fd0019f68a3.patch";
+      sha256 = "1yfxd7qsg3gwpamg0m2sbcfrgks59w70r9728arrc4pwx1hia2q1";
+    })
+  ];
+
+  nativeBuildInputs = [
+    appstream-glib # for ITS rules
+    desktop-file-utils
+    gettext
+    help2man
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    fwupd
+    glib
+    gtk3
+    libsoup
+    libxmlb
+    systemd
+  ];
+
+  mesonFlags = [
+    "-Dconsolekit=false"
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/hughsie/gnome-firmware-updater";
+    description = "Tool for installing firmware on devices";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-multi-writer/default.nix b/nixpkgs/pkgs/applications/misc/gnome-multi-writer/default.nix
new file mode 100644
index 000000000000..89a967d718bf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-multi-writer/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv
+, fetchurl
+, appstream-glib
+, desktop-file-utils
+, gettext
+, glib
+, gnome3
+, gtk3
+, gusb
+, libcanberra-gtk3
+, libgudev
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+, polkit
+, udisks
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-multi-writer";
+  version = "3.32.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1apdd8yi12zagf82k376a9wmdm27wzwdxpm2wf2pnwkaf786rmdw";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    gettext
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    gusb
+    libcanberra-gtk3
+    libgudev
+    polkit
+    udisks
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Tool for writing an ISO file to multiple USB devices at once";
+    homepage = "https://wiki.gnome.org/Apps/MultiWriter";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-passwordsafe/default.nix b/nixpkgs/pkgs/applications/misc/gnome-passwordsafe/default.nix
new file mode 100644
index 000000000000..c6617cc2324c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-passwordsafe/default.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv
+, meson
+, ninja
+, pkg-config
+, gettext
+, fetchFromGitLab
+, python3
+, libhandy_0
+, libpwquality
+, wrapGAppsHook
+, gtk3
+, glib
+, gdk-pixbuf
+, gobject-introspection
+, desktop-file-utils
+, appstream-glib }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gnome-passwordsafe";
+  version = "3.99.2";
+  format = "other";
+  strictDeps = false; # https://github.com/NixOS/nixpkgs/issues/56943
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "PasswordSafe";
+    rev = version;
+    sha256 = "0pi2l4gwf8paxm858mxrcsk5nr0c0zw5ycax40mghndb6b1qmmhf";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    pkg-config
+    wrapGAppsHook
+    desktop-file-utils
+    appstream-glib
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    gdk-pixbuf
+    libhandy_0
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygobject3
+    construct
+
+    # pykeepass 3.2.1 changed some exception types, and is not backwards compatible.
+    # Remove override once the MR is merged upstream.
+    # https://gitlab.gnome.org/World/PasswordSafe/-/merge_requests/79
+    (pykeepass.overridePythonAttrs (old: rec {
+      version = "3.2.0";
+      src = fetchPypi {
+        pname = "pykeepass";
+        inherit version;
+        sha256 = "1ysjn92bixq8wkwhlbhrjj9z0h80qnlnj7ks5478ndkzdw5gxvm1";
+      };
+      propagatedBuildInputs = old.propagatedBuildInputs ++ [ pycryptodome ];
+    }))
+
+  ] ++ [
+    libpwquality # using the python bindings
+  ];
+
+  meta = with lib; {
+    broken = stdenv.hostPlatform.isStatic; # libpwquality doesn't provide bindings when static
+    description = "Password manager for GNOME which makes use of the KeePass v.4 format";
+    homepage = "https://gitlab.gnome.org/World/PasswordSafe";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mvnetbiz ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/gnome-recipes/default.nix b/nixpkgs/pkgs/applications/misc/gnome-recipes/default.nix
new file mode 100644
index 000000000000..168d5b9fb5cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-recipes/default.nix
@@ -0,0 +1,79 @@
+{ lib, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, gnome3
+, desktop-file-utils
+, gettext
+, itstool
+, python3
+, wrapGAppsHook
+, gtk3
+, glib
+, libsoup
+, gnome-online-accounts
+, librest
+, json-glib
+, gnome-autoar
+, gspell
+, libcanberra }:
+
+let
+  pname = "gnome-recipes";
+  version = "2.0.2";
+in stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
+    sha256 = "1yymii3yf823d9x28fbhqdqm1wa30s40j94x0am9fjj0nzyd5s8v";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    desktop-file-utils
+    gettext
+    itstool
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    libsoup
+    gnome-online-accounts
+    librest
+    json-glib
+    gnome-autoar
+    gspell
+    libcanberra
+  ];
+
+  # https://github.com/NixOS/nixpkgs/issues/36468
+  # https://gitlab.gnome.org/GNOME/recipes/issues/76
+  NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+  postPatch = ''
+    chmod +x src/list_to_c.py
+    patchShebangs src/list_to_c.py
+    patchShebangs meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Recipe management application for GNOME";
+    homepage = "https://wiki.gnome.org/Apps/Recipes";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-usage/default.nix b/nixpkgs/pkgs/applications/misc/gnome-usage/default.nix
new file mode 100644
index 000000000000..fee4ba655c32
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-usage/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, vala
+, gettext
+, libxml2
+, desktop-file-utils
+, wrapGAppsHook
+, glib
+, gtk3
+, libgtop
+, libdazzle
+, gnome3
+, tracker
+, libhandy
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-usage";
+  version = "3.38.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0mqs39yi2cqwkzlmmgzrszsva5hbdpws6zk4lbi4w2cjzl185mcl";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    libxml2
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gnome3.adwaita-icon-theme
+    gtk3
+    libdazzle
+    libgtop
+    tracker
+    libhandy
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/postinstall.sh
+    patchShebangs build-aux/meson/postinstall.sh
+  '';
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "A nice way to view information about use of system resources, like memory and disk space";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = teams.gnome.members;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/go-jira/default.nix b/nixpkgs/pkgs/applications/misc/go-jira/default.nix
new file mode 100644
index 000000000000..c2871766debb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/go-jira/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-jira";
+  version = "1.0.27";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "go-jira";
+    repo = "jira";
+    sha256 = "1sw56aqghfxh88mfchf0nvqld0x7w22jfwx13pd24slxv1iag1nb";
+  };
+
+  vendorSha256 = "0d64gkkzfm6hbgqaibj26fpaqnjs50p1675ycrshdhn6blb5mbxg";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Simple command line client for Atlassian's Jira service written in Go";
+    homepage = "https://github.com/go-jira/jira";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ carlosdagos timstott ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/golden-cheetah/default.nix b/nixpkgs/pkgs/applications/misc/golden-cheetah/default.nix
new file mode 100644
index 000000000000..57e2d95f0430
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/golden-cheetah/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, mkDerivation
+, qtbase, qtsvg, qtserialport, qtwebengine, qtmultimedia, qttools
+, qtconnectivity, qtcharts, libusb-compat-0_1
+, yacc, flex, zlib, qmake, makeDesktopItem, makeWrapper
+}:
+
+let
+  desktopItem = makeDesktopItem {
+    name = "goldencheetah";
+    exec = "GoldenCheetah";
+    icon = "goldencheetah";
+    desktopName = "GoldenCheetah";
+    genericName = "GoldenCheetah";
+    comment = "Performance software for cyclists, runners and triathletes";
+    categories = "Utility;";
+  };
+in mkDerivation rec {
+  pname = "golden-cheetah";
+  version = "3.5";
+
+  src = fetchFromGitHub {
+    owner = "GoldenCheetah";
+    repo = "GoldenCheetah";
+    rev = "V${version}";
+    sha256 = "1lyd0b2s3s9c2ppj7l4hf3s4gfzscaaam2pbiaby714bi9nr0ka7";
+  };
+
+  buildInputs = [
+    qtbase qtsvg qtserialport qtwebengine qtmultimedia qttools zlib
+    qtconnectivity qtcharts libusb-compat-0_1
+  ];
+  nativeBuildInputs = [ flex makeWrapper qmake yacc ];
+
+  patches = [
+    # allow building with bison 3.7
+    # PR at https://github.com/GoldenCheetah/GoldenCheetah/pull/3590
+    (fetchpatch {
+      url = "https://github.com/GoldenCheetah/GoldenCheetah/commit/e1f42f8b3340eb4695ad73be764332e75b7bce90.patch";
+      sha256 = "1h0y9vfji5jngqcpzxna5nnawxs77i1lrj44w8a72j0ah0sznivb";
+    })
+  ];
+
+  NIX_LDFLAGS = "-lz";
+
+  qtWrapperArgs = [ "--set LD_LIBRARY_PATH ${zlib.out}/lib" ];
+
+  preConfigure = ''
+    cp src/gcconfig.pri.in src/gcconfig.pri
+    cp qwt/qwtconfig.pri.in qwt/qwtconfig.pri
+    echo 'QMAKE_LRELEASE = ${qttools.dev}/bin/lrelease' >> src/gcconfig.pri
+    echo 'LIBUSB_INSTALL = ${libusb-compat-0_1}' >> src/gcconfig.pri
+    echo 'LIBUSB_INCLUDE = ${libusb-compat-0_1.dev}/include' >> src/gcconfig.pri
+    echo 'LIBUSB_LIBS = -L${libusb-compat-0_1}/lib -lusb' >> src/gcconfig.pri
+    sed -i -e '21,23d' qwt/qwtconfig.pri # Removed forced installation to /usr/local
+
+    # Use qtwebengine instead of qtwebkit
+    substituteInPlace src/gcconfig.pri \
+      --replace "#DEFINES += NOWEBKIT" "DEFINES += NOWEBKIT"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp src/GoldenCheetah $out/bin
+    install -Dm644 "${desktopItem}/share/applications/"* -t $out/share/applications/
+    install -Dm644 src/Resources/images/gc.png $out/share/pixmaps/goldencheetah.png
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Performance software for cyclists, runners and triathletes";
+    platforms = platforms.linux;
+    maintainers = [ ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-check-for-updates.patch b/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-check-for-updates.patch
new file mode 100644
index 000000000000..31c7a6382292
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-check-for-updates.patch
@@ -0,0 +1,49 @@
+diff --git i/config.cc w/config.cc
+index 04b63f5..7a453d9 100644
+--- i/config.cc
++++ w/config.cc
+@@ -182,7 +182,7 @@ Preferences::Preferences():
+   pronounceOnLoadPopup( false ),
+   useInternalPlayer( InternalPlayerBackend::anyAvailable() ),
+   internalPlayerBackend( InternalPlayerBackend::defaultBackend() ),
+-  checkForNewReleases( true ),
++  checkForNewReleases( false ),
+   disallowContentFromOtherSites( false ),
+   enableWebPlugins( false ),
+   hideGoldenDictHeader( false ),
+@@ -867,8 +867,8 @@ Class load() THROW_SPEC( exError )
+       c.preferences.proxyServer.systemProxyPassword = proxy.namedItem( "systemProxyPassword" ).toElement().text();
+     }
+ 
+-    if ( !preferences.namedItem( "checkForNewReleases" ).isNull() )
+-      c.preferences.checkForNewReleases = ( preferences.namedItem( "checkForNewReleases" ).toElement().text() == "1" );
++    //if ( !preferences.namedItem( "checkForNewReleases" ).isNull() )
++    //  c.preferences.checkForNewReleases = ( preferences.namedItem( "checkForNewReleases" ).toElement().text() == "1" );
+ 
+     if ( !preferences.namedItem( "disallowContentFromOtherSites" ).isNull() )
+       c.preferences.disallowContentFromOtherSites = ( preferences.namedItem( "disallowContentFromOtherSites" ).toElement().text() == "1" );
+@@ -1819,9 +1819,9 @@ void save( Class const & c ) THROW_SPEC( exError )
+       proxy.appendChild( opt );
+     }
+ 
+-    opt = dd.createElement( "checkForNewReleases" );
+-    opt.appendChild( dd.createTextNode( c.preferences.checkForNewReleases ? "1" : "0" ) );
+-    preferences.appendChild( opt );
++    //opt = dd.createElement( "checkForNewReleases" );
++    //opt.appendChild( dd.createTextNode( c.preferences.checkForNewReleases ? "1" : "0" ) );
++    //preferences.appendChild( opt );
+ 
+     opt = dd.createElement( "disallowContentFromOtherSites" );
+     opt.appendChild( dd.createTextNode( c.preferences.disallowContentFromOtherSites ? "1" : "0" ) );
+diff --git i/preferences.cc w/preferences.cc
+index 72c3147..7e48f00 100644
+--- i/preferences.cc
++++ w/preferences.cc
+@@ -314,6 +314,7 @@ Preferences::Preferences( QWidget * parent, Config::Class & cfg_ ):
+            this, SLOT( customProxyToggled( bool ) ) );
+ 
+   ui.checkForNewReleases->setChecked( p.checkForNewReleases );
++  ui.checkForNewReleases->setEnabled( false );
+   ui.disallowContentFromOtherSites->setChecked( p.disallowContentFromOtherSites );
+   ui.enableWebPlugins->setChecked( p.enableWebPlugins );
+   ui.hideGoldenDictHeader->setChecked( p.hideGoldenDictHeader );
diff --git a/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-use-maclibs.patch b/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-use-maclibs.patch
new file mode 100644
index 000000000000..fc1fcbb0db07
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-use-maclibs.patch
@@ -0,0 +1,62 @@
+diff --git i/goldendict.pro w/goldendict.pro
+index 328dc20..5202a07 100644
+--- i/goldendict.pro
++++ w/goldendict.pro
+@@ -210,21 +210,18 @@ mac {
+         -llzo2
+     !CONFIG( no_ffmpeg_player ) {
+         LIBS += -lao \
+-            -lavutil-gd \
+-            -lavformat-gd \
+-            -lavcodec-gd
++            -lavutil \
++            -lavformat \
++            -lavcodec
+     }
+-    INCLUDEPATH = $${PWD}/maclibs/include
+-    LIBS += -L$${PWD}/maclibs/lib -framework AppKit -framework Carbon
++    LIBS += -framework AppKit -framework Carbon
+     OBJECTIVE_SOURCES += lionsupport.mm \
+                          machotkeywrapper.mm \
+                          macmouseover.mm \
+                          speechclient_mac.mm
+     ICON = icons/macicon.icns
+     QMAKE_INFO_PLIST = myInfo.plist
+-    QMAKE_POST_LINK = mkdir -p GoldenDict.app/Contents/Frameworks & \
+-                      cp -nR $${PWD}/maclibs/lib/ GoldenDict.app/Contents/Frameworks/ & \
+-                      mkdir -p GoldenDict.app/Contents/MacOS/locale & \
++    QMAKE_POST_LINK = mkdir -p GoldenDict.app/Contents/MacOS/locale & \
+                       cp -R locale/*.qm GoldenDict.app/Contents/MacOS/locale/ & \
+                       mkdir -p GoldenDict.app/Contents/MacOS/help & \
+                       cp -R $${PWD}/help/*.qch GoldenDict.app/Contents/MacOS/help/
+@@ -232,15 +229,6 @@ mac {
+     CONFIG += zim_support
+     !CONFIG( no_chinese_conversion_support ) {
+         CONFIG += chinese_conversion_support
+-        CONFIG( x86 ) {
+-            QMAKE_POST_LINK += & mkdir -p GoldenDict.app/Contents/MacOS/opencc & \
+-                                 cp -R $${PWD}/opencc/*.json GoldenDict.app/Contents/MacOS/opencc/ & \
+-                                 cp -R $${PWD}/opencc/*.ocd GoldenDict.app/Contents/MacOS/opencc/
+-        } else {
+-            QMAKE_POST_LINK += & mkdir -p GoldenDict.app/Contents/MacOS/opencc & \
+-                                 cp -R $${PWD}/opencc/x64/*.json GoldenDict.app/Contents/MacOS/opencc/ & \
+-                                 cp -R $${PWD}/opencc/x64/*.ocd GoldenDict.app/Contents/MacOS/opencc/
+-        }
+     }
+ }
+ DEFINES += PROGRAM_VERSION=\\\"$$VERSION\\\"
+diff --git i/tiff.cc w/tiff.cc
+index e3cb8bf..9ff880f 100644
+--- i/tiff.cc
++++ w/tiff.cc
+@@ -6,8 +6,8 @@
+ #include "tiff.hh"
+ 
+ #if defined (Q_OS_MAC) || defined (Q_OS_WIN)
+-#include "tiff/tiff.h"
+-#include "tiff/tiffio.h"
++#include "tiff.h"
++#include "tiffio.h"
+ #else
+ #include "tiff.h"
+ #include "tiffio.h"
diff --git a/nixpkgs/pkgs/applications/misc/goldendict/default.nix b/nixpkgs/pkgs/applications/misc/goldendict/default.nix
new file mode 100644
index 000000000000..307ef57c6252
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/goldendict/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, pkg-config
+, libXtst, libvorbis, hunspell, lzo, xz, bzip2, libiconv
+, qtbase, qtsvg, qtwebkit, qtx11extras, qttools, qmake
+, withCC ? true, opencc
+, withEpwing ? true, libeb
+, withExtraTiff ? true, libtiff
+, withFFmpeg ? true, libao, ffmpeg_3
+, withMultimedia ? true
+, withZim ? true, zstd }:
+
+mkDerivation rec {
+  pname = "goldendict";
+  version = "2020-12-09";
+
+  src = fetchFromGitHub {
+    owner = "goldendict";
+    repo = pname;
+    rev = "261e45a5d79f9df2fbc050292410bed0f4ef3132";
+    sha256 = "01pny06d4cmwf998hpqd7xx7mccbbasb8js1bv3rkdi1ljg01f7n";
+  };
+
+  patches = [
+    ./0001-dont-check-for-updates.patch
+  ] ++ lib.optionals stdenv.isDarwin [
+    ./0001-dont-use-maclibs.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace goldendict.pro \
+      --replace "hunspell-1.6.1" "hunspell-${lib.versions.majorMinor hunspell.version}"
+  '';
+
+  nativeBuildInputs = [ pkg-config qmake ];
+  buildInputs = [
+    qtbase qtsvg qtwebkit qttools
+    libvorbis hunspell xz lzo
+  ] ++ lib.optionals stdenv.isLinux [ qtx11extras libXtst ]
+    ++ lib.optionals stdenv.isDarwin [ bzip2 libiconv ]
+    ++ lib.optional withCC opencc
+    ++ lib.optional withEpwing libeb
+    ++ lib.optional withExtraTiff libtiff
+    ++ lib.optionals withFFmpeg [ libao ffmpeg_3 ]
+    ++ lib.optional withZim zstd;
+
+  qmakeFlags = with lib; [
+    "goldendict.pro"
+    (optional withCC "CONFIG+=chinese_conversion_support")
+    (optional (!withCC) "CONFIG+=no_chinese_conversion_support")
+    (optional (!withEpwing) "CONFIG+=no_epwing_support")
+    (optional (!withExtraTiff) "CONFIG+=no_extra_tiff_handler")
+    (optional (!withFFmpeg) "CONFIG+=no_ffmpeg_player")
+    (optional (!withMultimedia)"CONFIG+=no_qtmultimedia_player")
+    (optional withZim "CONFIG+=zim_support")
+  ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    mv GoldenDict.app $out/Applications
+    wrapQtApp $out/Applications/GoldenDict.app/Contents/MacOS/GoldenDict
+  '';
+
+  meta = with lib; {
+    homepage = "http://goldendict.org/";
+    description = "A feature-rich dictionary lookup program";
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ gebner astsmtl sikmir ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gollum/Gemfile b/nixpkgs/pkgs/applications/misc/gollum/Gemfile
new file mode 100644
index 000000000000..525f54838b75
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gollum/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'gollum'
diff --git a/nixpkgs/pkgs/applications/misc/gollum/Gemfile.lock b/nixpkgs/pkgs/applications/misc/gollum/Gemfile.lock
new file mode 100644
index 000000000000..eed618a5cbd1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gollum/Gemfile.lock
@@ -0,0 +1,112 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    concurrent-ruby (1.1.7)
+    crass (1.0.6)
+    execjs (2.7.0)
+    ffi (1.13.1)
+    gemojione (4.3.3)
+      json
+    github-markup (3.0.5)
+    gollum (5.1.2)
+      gemojione (~> 4.1)
+      gollum-lib (~> 5.0)
+      kramdown (~> 2.3)
+      kramdown-parser-gfm (~> 1.1.0)
+      mustache (>= 0.99.5, < 1.0.0)
+      octicons (~> 8.5)
+      rss (~> 0.2.9)
+      sass (~> 3.5)
+      sinatra (~> 2.0)
+      sinatra-contrib (~> 2.0)
+      sprockets (~> 3.7)
+      sprockets-helpers (~> 1.2)
+      therubyrhino (~> 2.1.0)
+      uglifier (~> 3.2)
+      useragent (~> 0.16.2)
+    gollum-lib (5.0.6)
+      gemojione (~> 4.1)
+      github-markup (~> 3.0)
+      gollum-rugged_adapter (~> 1.0)
+      loofah (~> 2.3)
+      nokogiri (~> 1.8)
+      octicons (~> 8.5)
+      rouge (~> 3.1)
+      twitter-text (= 1.14.7)
+    gollum-rugged_adapter (1.0)
+      mime-types (>= 1.15)
+      rugged (~> 0.99)
+    json (2.3.1)
+    kramdown (2.3.0)
+      rexml
+    kramdown-parser-gfm (1.1.0)
+      kramdown (~> 2.0)
+    loofah (2.8.0)
+      crass (~> 1.0.2)
+      nokogiri (>= 1.5.9)
+    mime-types (3.3.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2020.1104)
+    mini_portile2 (2.4.0)
+    multi_json (1.15.0)
+    mustache (0.99.8)
+    mustermann (1.1.1)
+      ruby2_keywords (~> 0.0.1)
+    nokogiri (1.10.10)
+      mini_portile2 (~> 2.4.0)
+    octicons (8.5.0)
+      nokogiri (>= 1.6.3.1)
+    rack (2.2.3)
+    rack-protection (2.1.0)
+      rack
+    rb-fsevent (0.10.4)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    rexml (3.2.4)
+    rouge (3.25.0)
+    rss (0.2.9)
+      rexml
+    ruby2_keywords (0.0.2)
+    rugged (0.99.0)
+    sass (3.7.4)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    sinatra (2.1.0)
+      mustermann (~> 1.0)
+      rack (~> 2.2)
+      rack-protection (= 2.1.0)
+      tilt (~> 2.0)
+    sinatra-contrib (2.1.0)
+      multi_json
+      mustermann (~> 1.0)
+      rack-protection (= 2.1.0)
+      sinatra (= 2.1.0)
+      tilt (~> 2.0)
+    sprockets (3.7.2)
+      concurrent-ruby (~> 1.0)
+      rack (> 1, < 3)
+    sprockets-helpers (1.4.0)
+      sprockets (>= 2.2)
+    therubyrhino (2.1.2)
+      therubyrhino_jar (>= 1.7.4, < 1.7.9)
+    therubyrhino_jar (1.7.8)
+    tilt (2.0.10)
+    twitter-text (1.14.7)
+      unf (~> 0.1.0)
+    uglifier (3.2.0)
+      execjs (>= 0.3.0, < 3)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.7)
+    useragent (0.16.10)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  gollum
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/misc/gollum/default.nix b/nixpkgs/pkgs/applications/misc/gollum/default.nix
new file mode 100644
index 000000000000..fc80a5ddb8aa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gollum/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, bundlerEnv, ruby, makeWrapper, bundlerUpdateScript
+, git }:
+
+stdenv.mkDerivation rec {
+  pname = "gollum";
+  # nix-shell -p bundix icu zlib cmake pkg-config openssl
+  version = (import ./gemset.nix).gollum.version;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  phases = [ "installPhase" ];
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "${pname}-${version}-gems";
+      inherit pname ruby;
+      gemdir = ./.;
+    };
+  in ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/gollum $out/bin/gollum \
+      --prefix PATH ":" ${lib.makeBinPath [ git ]}
+    makeWrapper ${env}/bin/gollum-migrate-tags $out/bin/gollum-migrate-tags \
+      --prefix PATH ":" ${lib.makeBinPath [ git ]}
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "gollum";
+
+  meta = with lib; {
+    description = "A simple, Git-powered wiki with a sweet API and local frontend";
+    homepage = "https://github.com/gollum/gollum";
+    changelog = "https://github.com/gollum/gollum/blob/v${version}/HISTORY.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jgillich primeos nicknovitski ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gollum/gemset.nix b/nixpkgs/pkgs/applications/misc/gollum/gemset.nix
new file mode 100644
index 000000000000..d259167856a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gollum/gemset.nix
@@ -0,0 +1,466 @@
+{
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vnxrbhi7cq3p4y2v9iwd10v1c7l15is4var14hwnb2jip4fyjzz";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  crass = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  execjs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12lpwaw82bb0rm9f52v1498bpba8aj2l2q359mkwbxsswhpga5af";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  gemojione = {
+    dependencies = ["json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fwd523pgr72w3w6jwpz9i6sggvz52d7831a1s4y3lv8m50j6ima";
+      type = "gem";
+    };
+    version = "4.3.3";
+  };
+  github-markup = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rlq9hnvhhndqskl087xwabbvfbfnrvx8ac79iin35wmzpyagl96";
+      type = "gem";
+    };
+    version = "3.0.5";
+  };
+  gollum = {
+    dependencies = ["gemojione" "gollum-lib" "kramdown" "kramdown-parser-gfm" "mustache" "octicons" "rss" "sass" "sinatra" "sinatra-contrib" "sprockets" "sprockets-helpers" "therubyrhino" "uglifier" "useragent"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pmvxj7pka7pjpw060a9pfxsci1hmx45hk9hbp5m49xkkiiqf1gx";
+      type = "gem";
+    };
+    version = "5.1.2";
+  };
+  gollum-lib = {
+    dependencies = ["gemojione" "github-markup" "gollum-rugged_adapter" "loofah" "nokogiri" "octicons" "rouge" "twitter-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02mc1w4hn9kjrgvg0r46x1bd0h8hq7lqs432dgjfn2dw36kchja4";
+      type = "gem";
+    };
+    version = "5.0.6";
+  };
+  gollum-rugged_adapter = {
+    dependencies = ["mime-types" "rugged"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ln12976vm1ks74yyrssdx576b1z0hs8r82fivr366knv5hlcrdm";
+      type = "gem";
+    };
+    version = "1.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "158fawfwmv2sq4whqqaksfykkiad2xxrrj0nmpnc6vnlzi1bp7iz";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  kramdown = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vmw752c26ny2jwl0npn0gbyqwgz4hdmlpxnsld9qi9xhk5b1qh7";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  loofah = {
+    dependencies = ["crass" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ndimir6k3kfrh8qrb7ir1j836l4r3qlwyclwjh88b86clblhszh";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ipjyfwn9nlvpcl8knq3jk4g5f12cflwdbaiqxcq1s7vwfwfxcag";
+      type = "gem";
+    };
+    version = "3.2020.1104";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  mustache = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g5hplm0k06vwxwqzwn1mq5bd02yp0h3rym4zwzw26aqi7drcsl2";
+      type = "gem";
+    };
+    version = "0.99.8";
+  };
+  mustermann = {
+    dependencies = ["ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ccm54qgshr1lq3pr1dfh7gphkilc19dp63rw6fcx7460pjwy88a";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xmf60nj5kg9vaj5bysy308687sgmkasgx06vbbnf94p52ih7si2";
+      type = "gem";
+    };
+    version = "1.10.10";
+  };
+  octicons = {
+    dependencies = ["nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fy6shpfmla58dxx3kb2zi1hs7vmdw6pqrksaa8yrva05s4l3y75";
+      type = "gem";
+    };
+    version = "8.5.0";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i5vs0dph9i5jn8dfc6aqd6njcafmb20rwqngrf759c9cvmyff16";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "159a4j4kragqh0z0z8vrpilpmaisnlz3n7kgiyf16bxkwlb3qlhz";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k9bsj7ni0g2fd7scyyy1sk9dy2pg9akniahab0iznvjmhn54h87";
+      type = "gem";
+    };
+    version = "0.10.4";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mkvkcw9fhpaizrhca0pdgjcrbns48rlz4g6lavl5gjjq3rk2sq3";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yvcv901lrh5rfnk1h4h56hf2m6n9pd6w8n96vag74aakgz3gaxn";
+      type = "gem";
+    };
+    version = "3.25.0";
+  };
+  rss = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b1zx07kr64kkpm4lssd4r1a1qyr829ppmfl85i4adcvx9mqfid0";
+      type = "gem";
+    };
+    version = "0.2.9";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17pcc0wgvh3ikrkr7bm3nx0qhyiqwidd13ij0fa50k7gsbnr2p0l";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
+  rugged = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04rkxwzaa6897da3mnm70g720gpxwyh71krfn6ag1dkk80x8a8yz";
+      type = "gem";
+    };
+    version = "0.99.0";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p95lhs0jza5l7hqci1isflxakz83xkj97lkvxl919is0lwhv2w0";
+      type = "gem";
+    };
+    version = "3.7.4";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  sinatra = {
+    dependencies = ["mustermann" "rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dd53rzpkxgs697pycbhhgc9vcnxra4ly4xar8ni6aiydx2f88zk";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  sinatra-contrib = {
+    dependencies = ["multi_json" "mustermann" "rack-protection" "sinatra" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl1iiafz51yzjd0vchl2lni7lmwppjql6cn1fnfxbma707qlcja";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  sprockets = {
+    dependencies = ["concurrent-ruby" "rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay";
+      type = "gem";
+    };
+    version = "3.7.2";
+  };
+  sprockets-helpers = {
+    dependencies = ["sprockets"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0513ma356g05lsskhsb363263177h6ccmp475il0p69y18his2ij";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  therubyrhino = {
+    dependencies = ["therubyrhino_jar"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "034mzpkxm3zjsi4rwa45dhhgq2b9vkabs5bnzbl1d3ka7210b3fc";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  therubyrhino_jar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "149a5lsvn2n7k7vcfs77n836q1alv8yjh0503sf9cs65p974ah25";
+      type = "gem";
+    };
+    version = "1.7.8";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rn8z8hda4h41a64l0zhkiwz2vxw9b1nb70gl37h1dg2k874yrlv";
+      type = "gem";
+    };
+    version = "2.0.10";
+  };
+  twitter-text = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg";
+      type = "gem";
+    };
+    version = "1.14.7";
+  };
+  uglifier = {
+    dependencies = ["execjs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wmqvn4xncw6h3d5gp2a44170zwxfyj3iq4rsjp16zarvzbdmgnz";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wc47r23h063l8ysws8sy24gzh74mks81cak3lkzlrw4qkqb3sg4";
+      type = "gem";
+    };
+    version = "0.0.7.7";
+  };
+  useragent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fv5kvq494swy0p17h9qya9r50w15xsi9zmvhzb8gh55kq6ki50p";
+      type = "gem";
+    };
+    version = "0.16.10";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gomatrix/default.nix b/nixpkgs/pkgs/applications/misc/gomatrix/default.nix
new file mode 100644
index 000000000000..c903f1ba1bbe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gomatrix/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gomatrix";
+  version = "101.0.0";
+
+  src = fetchFromGitHub {
+    owner = "GeertJohan";
+    repo = "gomatrix";
+    rev = "v${version}";
+    sha256 = "1wq55rvpyz0gjn8kiwwj49awsmi86zy1fdjcphzgb7883xalgr2m";
+  };
+
+  vendorSha256 = "1yw0gph4zfg8w4343882l6b9lggwyak2zz8ic1l1m2m44p3aq169";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = ''Displays "The Matrix" in a terminal'';
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ skykanin ];
+    homepage = "https://github.com/GeertJohan/gomatrix";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/googleearth/default.nix b/nixpkgs/pkgs/applications/misc/googleearth/default.nix
new file mode 100644
index 000000000000..edf1fc54ba9f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/googleearth/default.nix
@@ -0,0 +1,106 @@
+{ lib, stdenv, fetchurl, glibc, libGLU, libGL, freetype, glib, libSM, libICE, libXi, libXv
+, libXrender, libXrandr, libXfixes, libXcursor, libXinerama, libXext, libX11
+, zlib, fontconfig, dpkg, libproxy, libxml2, gst_all_1, dbus }:
+
+let
+  arch =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "amd64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "i386"
+    else throw "Unsupported system ${stdenv.hostPlatform.system}";
+  sha256 =
+    if arch == "amd64"
+    then "0dwnppn5snl5bwkdrgj4cyylnhngi0g66fn2k41j3dvis83x24k6"
+    else "0gndbxrj3kgc2dhjqwjifr3cl85hgpm695z0wi01wvwzhrjqs0l2";
+  version = "7.1.8.3036";
+  fullPath = lib.makeLibraryPath [
+    glibc
+    glib
+    stdenv.cc.cc
+    libSM
+    libICE
+    libXi
+    libXv
+    libGLU libGL
+    libXrender
+    libXrandr
+    libXfixes
+    libXcursor
+    libXinerama
+    freetype
+    libXext
+    libX11
+    zlib
+    fontconfig
+    libproxy
+    libxml2
+    dbus
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "googleearth";
+  inherit version;
+  src = fetchurl {
+    url = "https://dl.google.com/linux/earth/deb/pool/main/g/google-earth-stable/google-earth-stable_${version}-r0_${arch}.deb";
+    inherit sha256;
+  };
+
+  phases = [ "unpackPhase" "installPhase" "checkPhase" ];
+
+  doCheck = true;
+
+  buildInputs = [ dpkg ];
+
+  unpackPhase = ''
+    dpkg-deb -x ${src} ./
+  '';
+
+  installPhase =''
+    mkdir $out
+    mv usr/* $out/
+    rmdir usr
+    mv * $out/
+    rm $out/bin/google-earth $out/opt/google/earth/free/googleearth
+
+    # patch and link googleearth binary
+    ln -s $out/opt/google/earth/free/googleearth-bin $out/bin/googleearth
+    patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${fullPath}:\$ORIGIN" \
+      $out/opt/google/earth/free/googleearth-bin
+
+    # patch and link gpsbabel binary
+    ln -s $out/opt/google/earth/free/gpsbabel $out/bin/gpsbabel
+    patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${fullPath}:\$ORIGIN" \
+      $out/opt/google/earth/free/gpsbabel
+
+    # patch libraries
+    for a in $out/opt/google/earth/free/*.so* ; do
+      patchelf --set-rpath "${fullPath}:\$ORIGIN" $a
+    done
+
+    # Add desktop config file and icons
+    mkdir -p $out/share/{applications,icons/hicolor/{16x16,22x22,24x24,32x32,48x48,64x64,128x128,256x256}/apps,pixmaps}
+    ln -s $out/opt/google/earth/free/google-earth.desktop $out/share/applications/google-earth.desktop
+    sed -i -e "s|Exec=.*|Exec=$out/bin/googleearth|g" $out/opt/google/earth/free/google-earth.desktop
+    for size in 16 22 24 32 48 64 128 256; do
+      ln -s $out/opt/google/earth/free/product_logo_"$size".png $out/share/icons/hicolor/"$size"x"$size"/apps/google-earth.png
+    done
+    ln -s $out/opt/google/earth/free/product_logo_256.png $out/share/pixmaps/google-earth.png
+  '';
+
+  checkPhase = ''
+    $out/bin/gpsbabel -V > /dev/null
+  '';
+
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "A world sphere viewer";
+    homepage = "http://earth.google.com";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ markus1189 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/googler/default.nix b/nixpkgs/pkgs/applications/misc/googler/default.nix
new file mode 100644
index 000000000000..a7cd5ec64abd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/googler/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, python, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "googler";
+  version = "4.3.2";
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PgWg396AQ15CAnfTXGDpSg1UXx7mNCtknEjJd/KV4MU=";
+  };
+
+  buildInputs = [ python ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    installShellCompletion --bash --name googler.bash auto-completion/bash/googler-completion.bash
+    installShellCompletion --fish auto-completion/fish/googler.fish
+    installShellCompletion --zsh auto-completion/zsh/_googler
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jarun/googler";
+    description = "Google Search, Google Site Search, Google News from the terminal";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ koral Br1ght0ne ];
+    platforms = python.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gopacked/default.nix b/nixpkgs/pkgs/applications/misc/gopacked/default.nix
new file mode 100644
index 000000000000..57f6be40ab02
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gopacked/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gopacked";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "tulir";
+    repo = "gopacked";
+    rev = "v${version}";
+    sha256 = "03qr8rlnipziy16nbcpf631jh42gsyv2frdnh8yzsh8lm0p8p4ry";
+  };
+
+  vendorSha256 = "0fklr3lxh8g7gda65wf2wdkqv15869h7m1bwbzbiv8pasrf5b352";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A simple text-based Minecraft modpack manager";
+    license = licenses.agpl3;
+    homepage = src.meta.homepage;
+    maintainers = with maintainers; [ foxit64 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/gosmore/default.nix b/nixpkgs/pkgs/applications/misc/gosmore/default.nix
new file mode 100644
index 000000000000..854fec8642a8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gosmore/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchsvn, libxml2, gtk2, curl, pkg-config } :
+
+let
+  version = "31801";
+in
+stdenv.mkDerivation {
+  name = "gosmore-r${version}";
+  # the gosmore svn repository does not lock revision numbers of its externals
+  # so we explicitly disable them to avoid breaking the hash
+  # especially as the externals appear to be unused
+  src = fetchsvn {
+    url = "http://svn.openstreetmap.org/applications/rendering/gosmore";
+    sha256 = "0qsckpqx7i7f8gkqhkzdamr65250afk1rpnh3nbman35kdv3dsxi";
+    rev = version;
+    ignoreExternals = true;
+  };
+
+  buildInputs = [ libxml2 gtk2 curl ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  prePatch = ''
+    sed -e '/curl.types.h/d' -i *.{c,h,hpp,cpp}
+  '';
+
+  patches = [ ./pointer_int_comparison.patch ];
+  patchFlags = [ "-p1" "--binary" ]; # patch has dos style eol
+
+  meta = with lib; {
+    description = "Open Street Map viewer";
+    homepage = "https://sourceforge.net/projects/gosmore/";
+    maintainers = with maintainers; [
+      raskin
+    ];
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gosmore/pointer_int_comparison.patch b/nixpkgs/pkgs/applications/misc/gosmore/pointer_int_comparison.patch
new file mode 100644
index 000000000000..4a715b6d8591
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gosmore/pointer_int_comparison.patch
@@ -0,0 +1,11 @@
+--- blah_/jni/gosmore.cpp	1970-01-01 01:00:01.000000000 +0100

++++ /dev/stdin	2018-03-18 00:21:08.474217132 +0100

+@@ -1273,7 +1273,7 @@

+       if (deg[i] < -180 || deg[i] > 180) break;

+       if (i == 0 && (strncasecmp (t, "lat", 3) == 0 ||

+                      strncasecmp (t, "lon", 3) == 0)) { // lat=-25.7 lon=28.2

+-        for (t += 3; t != '\0' && !isalnum (*t); t++) {}

++        for (t += 3; *t != '\0' && !isalnum (*t); t++) {}

+       }

+       if (i == 1) { // Success !

+         //printf ("%lf %lf %u\n", deg[lonFirst ? 1 : 0], deg[lonFirst ? 0 : 1],

diff --git a/nixpkgs/pkgs/applications/misc/gpa/default.nix b/nixpkgs/pkgs/applications/misc/gpa/default.nix
new file mode 100644
index 000000000000..63bba909b6d5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpa/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, intltool, pkg-config, gtk2, gpgme, libgpgerror, libassuan }:
+
+stdenv.mkDerivation rec {
+  name = "gpa-0.10.0";
+
+  src = fetchurl {
+    url = "mirror://gnupg/gpa/${name}.tar.bz2";
+    sha256 = "1cbpc45f8qbdkd62p12s3q2rdq6fa5xdzwmcwd3xrj55bzkspnwm";
+  };
+
+  nativeBuildInputs = [ intltool pkg-config ];
+  buildInputs = [ gtk2 gpgme libgpgerror libassuan ];
+
+  meta = with lib; {
+    description = "Graphical user interface for the GnuPG";
+    homepage = "https://www.gnupg.org/related_software/gpa/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpg-mdp/default.nix b/nixpkgs/pkgs/applications/misc/gpg-mdp/default.nix
new file mode 100644
index 000000000000..48c7c7724ebf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpg-mdp/default.nix
@@ -0,0 +1,35 @@
+{ fetchurl, lib, stdenv, ncurses, gnupg }:
+
+let version = "0.7.4";
+in stdenv.mkDerivation {
+  # mdp renamed to gpg-mdp because there is a mdp package already.
+  pname = "gpg-mdp";
+  inherit version;
+  meta = {
+    homepage = "https://tamentis.com/projects/mdp/";
+    license = [lib.licenses.isc];
+    description = "Manage your passwords with GnuPG and a text editor";
+  };
+  src = fetchurl {
+    url = "https://tamentis.com/projects/mdp/files/mdp-${version}.tar.gz";
+    sha256 = "04mdnx4ccpxf9m2myy9nvpl9ma4jgzmv9bkrzv2b9affzss3r34g";
+  };
+  buildInputs = [ ncurses ];
+  prePatch = ''
+    substituteInPlace ./configure \
+      --replace "alias echo=/bin/echo" ""
+
+    substituteInPlace ./src/config.c \
+      --replace "/usr/bin/gpg" "${gnupg}/bin/gpg" \
+      --replace "/usr/bin/vi" "vi"
+
+    substituteInPlace ./mdp.1 \
+      --replace "/usr/bin/gpg" "${gnupg}/bin/gpg"
+  '';
+  # we add symlinks to the binary and man page with the name 'gpg-mdp', in case
+  # the completely unrelated program also named 'mdp' is already installed.
+  postFixup = ''
+    ln -s $out/bin/mdp $out/bin/gpg-mdp
+    ln -s $out/share/man/man1/mdp.1.gz $out/share/man/man1/gpg-mdp.1.gz
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/misc/gphoto2/default.nix b/nixpkgs/pkgs/applications/misc/gphoto2/default.nix
new file mode 100644
index 000000000000..5635aadda9df
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gphoto2/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, gettext
+, libexif
+, libgphoto2
+, libjpeg
+, libtool
+, popt
+, readline
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gphoto2";
+  version = "2.5.26";
+
+  src = fetchFromGitHub {
+    owner = "gphoto";
+    repo = "gphoto2";
+    rev = "v${version}";
+    sha256 = "1w01j3qvjl2nlfs38rnsmjvn3r0r2xf7prxz1i6yarbpj3fzwqqc";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    gettext
+    libtool
+  ];
+
+  buildInputs = [
+    libexif
+    libgphoto2
+    libjpeg
+    popt
+    readline
+  ];
+
+  meta = with lib; {
+    description = "A ready to use set of digital camera software applications";
+    longDescription = ''
+
+      A set of command line utilities for manipulating over 1400 different
+      digital cameras. Through libgphoto2, it supports PTP, MTP, and much more..
+
+    '';
+    homepage = "http://www.gphoto.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.jcumming ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gphoto2/gphotofs.nix b/nixpkgs/pkgs/applications/misc/gphoto2/gphotofs.nix
new file mode 100644
index 000000000000..afb02c9937f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gphoto2/gphotofs.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, libtool, pkg-config, libgphoto2, fuse, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "gphoto2fs";
+  version = "0.5.0";
+  src = fetchurl {
+    url="mirror://sourceforge/gphoto/gphotofs/${version}/gphotofs-0.5.tar.bz2";
+    sha256 = "1k23ncbsbh64r7kz050bg31jqamchyswgg9izhzij758d7gc8vk7";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libgphoto2 fuse glib libtool
+  ];
+
+  meta = with lib; {
+    description = "Fuse FS to mount a digital camera";
+    homepage = "http://www.gphoto.org/";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = with licenses; [ lgpl2 gpl2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpsbabel/default.nix b/nixpkgs/pkgs/applications/misc/gpsbabel/default.nix
new file mode 100644
index 000000000000..f043aa66947f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpsbabel/default.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, libusb1, qtbase, zlib, IOKit, which, expat }:
+
+stdenv.mkDerivation rec {
+  pname = "gpsbabel";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "gpsbabel";
+    repo = "gpsbabel";
+    rev = "gpsbabel_${lib.replaceStrings ["."] ["_"] version}";
+    sha256 = "010g0vd2f5knpq5p7qfnl31kv3r8m5sjdsafcinbj5gh02j2nzpy";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.net/data/main/g/gpsbabel/1.5.3-2/debian/patches/use_minizip";
+      sha256 = "03fpsmlx1wc48d1j405zkzp8j64hcp0z72islf4mk1immql3ibcr";
+    })
+  ];
+
+  buildInputs = [ libusb1 qtbase zlib ]
+    ++ lib.optionals stdenv.isDarwin [ IOKit ];
+
+  checkInputs = [ expat.dev which ]; # Avoid ./testo.d/kml.test: line 74: which: command not found. Skipping KML validation phase.
+
+  /* FIXME: Building the documentation, with "make doc", requires this:
+
+      [ libxml2 libxslt perl docbook_xml_dtd_412 docbook_xsl fop ]
+
+    But FOP isn't packaged yet.  */
+
+  configureFlags = [ "--with-zlib=system" ]
+    # Floating point behavior on i686 causes test failures. Preventing
+    # extended precision fixes this problem.
+    ++ lib.optionals stdenv.isi686 [
+      "CFLAGS=-ffloat-store" "CXXFLAGS=-ffloat-store"
+    ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+  preCheck = ''
+    patchShebangs testo
+    substituteInPlace testo \
+      --replace "-x /usr/bin/hexdump" ""
+
+    rm -v testo.d/alantrl.test
+  ''
+    # The raymarine and gtm tests fail on i686 despite -ffloat-store.
+  + lib.optionalString stdenv.isi686 "rm -v testo.d/raymarine.test testo.d/gtm.test;"
+    # The gtm, kml and tomtom asc tests fail on darwin, see PR #23572.
+  + lib.optionalString stdenv.isDarwin "rm -v testo.d/gtm.test testo.d/kml.test testo.d/tomtom_asc.test testo.d/classic-2.test"
+    # The arc-project test fails on aarch64.
+  + lib.optionalString stdenv.isAarch64 "rm -v testo.d/arc-project.test";
+
+  meta = with lib; {
+    description = "Convert, upload and download data from GPS and Map programs";
+    longDescription = ''
+      GPSBabel converts waypoints, tracks, and routes between popular
+      GPS receivers and mapping programs.  It also has powerful
+      manipulation tools for such data.
+
+      By flattening the Tower of Babel that the authors of various
+      programs for manipulating GPS data have imposed upon us, it
+      returns to us the ability to freely move our own waypoint data
+      between the programs and hardware we choose to use.
+
+      It contains extensive data manipulation abilities making it a
+      convenient for server-side processing or as the backend for
+      other tools.
+
+      It does not convert, transfer, send, or manipulate maps.  We
+      process data that may (or may not be) placed on a map, such as
+      waypoints, tracks, and routes.
+    '';
+    homepage = "http://www.gpsbabel.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpsbabel/gui.nix b/nixpkgs/pkgs/applications/misc/gpsbabel/gui.nix
new file mode 100644
index 000000000000..3de63203f24c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpsbabel/gui.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, mkDerivation, qmake, qttools, qtwebkit, qttranslations, gpsbabel }:
+
+mkDerivation {
+  pname = "gpsbabel-gui";
+
+  inherit (gpsbabel) src version;
+
+  sourceRoot = "source/gui";
+
+  nativeBuildInputs = [ qmake qttools ];
+  buildInputs = [ qtwebkit ];
+
+  postPatch = ''
+    substituteInPlace mainwindow.cc \
+      --replace "QApplication::applicationDirPath() + \"/" "\"" \
+      --replace "QApplication::applicationDirPath() + '/' + " "" \
+      --replace "translator.load(full_filename)" "translator.load(filename)" \
+      --replace "gpsbabelfe_%1.qm" "$out/share/gpsbabel/translations/gpsbabelfe_%1.qm" \
+      --replace "gpsbabel_%1.qm" "$out/share/gpsbabel/translations/gpsbabel_%1.qm" \
+      --replace "qt_%1.qm" "${qttranslations}/translations/qt_%1.qm"
+    substituteInPlace formatload.cc \
+      --replace "QApplication::applicationDirPath() + \"/" "\""
+    substituteInPlace gpsbabel.desktop \
+      --replace "gpsbabelfe-bin" "gpsbabelfe"
+  '';
+
+  preConfigure = ''
+    lrelease *.ts coretool/*.ts
+  '';
+
+  qtWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ gpsbabel ]}"
+  ];
+
+  postInstall = ''
+    install -Dm755 objects/gpsbabelfe -t $out/bin
+    install -Dm644 gpsbabel.desktop -t $out/share/applications
+    install -Dm644 images/appicon.png $out/share/icons/hicolor/512x512/apps/gpsbabel.png
+    install -Dm644 *.qm coretool/*.qm -t $out/share/gpsbabel/translations
+  '';
+
+  meta = with lib; {
+    description = "Qt-based GUI for gpsbabel";
+    homepage = "http://www.gpsbabel.org/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpscorrelate/default.nix b/nixpkgs/pkgs/applications/misc/gpscorrelate/default.nix
new file mode 100644
index 000000000000..a1357ff0a084
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpscorrelate/default.nix
@@ -0,0 +1,65 @@
+{ fetchFromGitHub, lib, stdenv, fetchpatch, pkg-config, exiv2, libxml2, gtk3
+, libxslt, docbook_xsl, docbook_xml_dtd_42, desktop-file-utils, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gpscorrelate";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "dfandrich";
+    repo = pname;
+    rev = version;
+    sha256 = "1wkpb0nqnm0ik46hp2sibf96h2gxi6n951zm8c72scgmh4ciq4fl";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    docbook_xml_dtd_42
+    docbook_xsl
+    libxslt
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    exiv2
+    gtk3
+    libxml2
+  ];
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+    "CC=cc"
+    "CXX=c++"
+    "CFLAGS=-DENABLE_NLS"
+  ];
+
+  doCheck = true;
+
+  installTargets = [ "install" "install-po" "install-desktop-file" ];
+
+  meta = with lib; {
+    description = "A GPS photo correlation tool, to add EXIF geotags";
+
+    longDescription = ''
+      Digital cameras are cool.  So is GPS.  And, EXIF tags are really
+      cool too.
+
+      What happens when you merge the three?  You end up with a set of
+      photos taken with a digital camera that are "stamped" with the
+      location at which they were taken.
+
+      The EXIF standard defines a number of tags that are for use with GPS.
+
+      A variety of programs exist around the place to match GPS data
+      with digital camera photos, but most of them are Windows or
+      MacOS only.  Which doesn't really suit me that much. Also, each
+      one takes the GPS data in a different format.
+    '';
+
+    license = licenses.gpl2Plus;
+    homepage = "https://dfandrich.github.io/gpscorrelate/";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpsprune/default.nix b/nixpkgs/pkgs/applications/misc/gpsprune/default.nix
new file mode 100644
index 000000000000..2348384abd0f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpsprune/default.nix
@@ -0,0 +1,43 @@
+{ fetchurl, lib, stdenv, makeDesktopItem, makeWrapper, unzip, jdk }:
+
+stdenv.mkDerivation rec {
+  pname = "gpsprune";
+  version = "20";
+
+  src = fetchurl {
+    url = "https://activityworkshop.net/software/gpsprune/gpsprune_${version}.jar";
+    sha256 = "1i9p6h98azgradrrkcwx18zwz4c6zkxp4bfykpa2imi1z3ry5q2b";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk ];
+
+  desktopItem = makeDesktopItem {
+    name = "gpsprune";
+    exec = "gpsprune";
+    icon = "gpsprune";
+    desktopName = "GpsPrune";
+    genericName = "GPS Data Editor";
+    comment = meta.description;
+    categories = "Education;Geoscience;";
+  };
+
+  buildCommand = ''
+    mkdir -p $out/bin $out/share/java
+    cp -v $src $out/share/java/gpsprune.jar
+    makeWrapper ${jdk}/bin/java $out/bin/gpsprune \
+      --add-flags "-jar $out/share/java/gpsprune.jar"
+    mkdir -p $out/share/applications
+    cp $desktopItem/share/applications"/"* $out/share/applications
+    mkdir -p $out/share/pixmaps
+    ${unzip}/bin/unzip -p $src tim/prune/gui/images/window_icon_64.png > $out/share/pixmaps/gpsprune.png
+  '';
+
+  meta = with lib; {
+    description = "Application for viewing, editing and converting GPS coordinate data";
+    homepage = "https://activityworkshop.net/software/gpsprune/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.rycee ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpx-viewer/default.nix b/nixpkgs/pkgs/applications/misc/gpx-viewer/default.nix
new file mode 100644
index 000000000000..89a4198a749f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpx-viewer/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, intltool, libxml2, pkg-config, gnome3, libchamplain, gdl, shared-mime-info, desktop-file-utils, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gpx-viewer";
+  version = "0.4.0";
+
+  src = fetchurl {
+    url = "https://launchpad.net/gpx-viewer/trunk/${version}/+download/${pname}-${version}.tar.gz";
+    sha256 = "956acfaf870ac436300cd9953dece630df7fd7dff8e4ae2577a6002884466f80";
+  };
+
+  patches = fetchurl {
+    url = "https://code.launchpad.net/~chkr/gpx-viewer/gtk3-bugfix/+merge/260766/+preview-diff/628965/+files/preview.diff";
+    sha256 = "1yl7jk7skkcx10nny5zdixswcymjd9s9c1zhm1i5y3aqhchvmfs7";
+  };
+  patchFlags = [ "-p0" ];
+
+  configureFlags = [ "--disable-database-updates" ];
+
+  nativeBuildInputs = [
+    intltool pkg-config
+    wrapGAppsHook # Fix error: GLib-GIO-ERROR **: No GSettings schemas are installed on the system
+  ];
+  buildInputs = [ gdl libchamplain gnome3.adwaita-icon-theme libxml2 ];
+
+  meta = with lib; {
+    homepage = "https://blog.sarine.nl/tag/gpxviewer/";
+    description = "Simple tool to visualize tracks and waypoints stored in a gpx file";
+    platforms = with platforms; linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpx/default.nix b/nixpkgs/pkgs/applications/misc/gpx/default.nix
new file mode 100644
index 000000000000..04ebd491c28d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpx/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gpx";
+  version = "2.6.8";
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  src = fetchFromGitHub {
+    owner = "markwal";
+    repo = "GPX";
+    rev = version;
+    sha256 = "1izs8s5npkbfrsyk17429hyl1vyrbj9dp6vmdlbb2vh6mfgl54h8";
+  };
+
+  meta = {
+    description = "Gcode to x3g conversion postprocessor";
+    homepage = "https://github.com/markwal/GPX/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.leo60228 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpxlab/default.nix b/nixpkgs/pkgs/applications/misc/gpxlab/default.nix
new file mode 100644
index 000000000000..3b432ff66b12
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpxlab/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, mkDerivation, lib, fetchFromGitHub, qmake, qttools, qttranslations }:
+
+mkDerivation rec {
+  pname = "gpxlab";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "BourgeoisLab";
+    repo = "GPXLab";
+    rev = "v${version}";
+    sha256 = "080vnwcciqblfrbfyz9gjhl2lqw1hkdpbgr5qfrlyglkd4ynjd84";
+  };
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ qttools qttranslations ];
+
+  preConfigure = ''
+    lrelease GPXLab/locale/*.ts
+  '';
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    mv GPXLab/GPXLab.app $out/Applications
+    wrapQtApp $out/Applications/GPXLab.app/Contents/MacOS/GPXLab
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/BourgeoisLab/GPXLab";
+    description = "Program to show and manipulate GPS tracks";
+    longDescription = ''
+      GPXLab is an application to display and manage GPS tracks
+      previously recorded with a GPS tracker.
+    '';
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpxsee/default.nix b/nixpkgs/pkgs/applications/misc/gpxsee/default.nix
new file mode 100644
index 000000000000..ed1b31559f53
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpxsee/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, qmake, qttools, qttranslations, substituteAll }:
+
+mkDerivation rec {
+  pname = "gpxsee";
+  version = "8.2";
+
+  src = fetchFromGitHub {
+    owner = "tumic0";
+    repo = "GPXSee";
+    rev = version;
+    sha256 = "05wn4kmvsswwd2q2pffxbplb38capwv7iddsghix3r5zds13142z";
+  };
+
+  patches = (substituteAll {
+    # See https://github.com/NixOS/nixpkgs/issues/86054
+    src = ./fix-qttranslations-path.diff;
+    inherit qttranslations;
+  });
+
+  nativeBuildInputs = [ qmake qttools ];
+
+  preConfigure = ''
+    lrelease gpxsee.pro
+  '';
+
+  postInstall = with stdenv; lib.optionalString isDarwin ''
+    mkdir -p $out/Applications
+    mv GPXSee.app $out/Applications
+    wrapQtApp $out/Applications/GPXSee.app/Contents/MacOS/GPXSee
+  '';
+
+  meta = with lib; {
+    description = "GPS log file viewer and analyzer";
+    longDescription = ''
+      GPXSee is a Qt-based GPS log file viewer and analyzer that supports
+      all common GPS log file formats.
+    '';
+    homepage = "https://www.gpxsee.org/";
+    changelog = "https://build.opensuse.org/package/view_file/home:tumic:GPXSee/gpxsee/gpxsee.changes";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ womfoo sikmir ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpxsee/fix-qttranslations-path.diff b/nixpkgs/pkgs/applications/misc/gpxsee/fix-qttranslations-path.diff
new file mode 100644
index 000000000000..757d9b8c6571
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpxsee/fix-qttranslations-path.diff
@@ -0,0 +1,18 @@
+diff --git i/src/GUI/app.cpp w/src/GUI/app.cpp
+index 37e9d3f..d4a065c 100644
+--- i/src/GUI/app.cpp
++++ w/src/GUI/app.cpp
+@@ -35,11 +35,10 @@ App::App(int &argc, char **argv) : QApplication(argc, argv)
+ 		installTranslator(gpxsee);
+ 
+ 	QTranslator *qt = new QTranslator(this);
+-#if defined(Q_OS_WIN32) || defined(Q_OS_MAC)
++#if defined(Q_OS_WIN32)
+ 	if (qt->load(QLocale::system(), "qt", "_", ProgramPaths::translationsDir()))
+ #else // Q_OS_WIN32 || Q_OS_MAC
+-	if (qt->load(QLocale::system(), "qt", "_", QLibraryInfo::location(
+-	  QLibraryInfo::TranslationsPath)))
++	if (qt->load(QLocale::system(), "qt", "_", QLatin1String("@qttranslations@/translations")))
+ #endif // Q_OS_WIN32 || Q_OS_MAC
+ 		installTranslator(qt);
+ 
diff --git a/nixpkgs/pkgs/applications/misc/gramps/default.nix b/nixpkgs/pkgs/applications/misc/gramps/default.nix
new file mode 100644
index 000000000000..4fc4586ca4e3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gramps/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchFromGitHub, gtk3, pythonPackages, intltool, gexiv2,
+  pango, gobject-introspection, wrapGAppsHook, gettext,
+# Optional packages:
+ enableOSM ? true, osm-gps-map,
+ enableGraphviz ? true, graphviz,
+ enableGhostscript ? true, ghostscript
+ }:
+
+let
+  inherit (pythonPackages) python buildPythonApplication;
+in buildPythonApplication rec {
+  version = "5.1.3";
+  pname = "gramps";
+
+  nativeBuildInputs = [ wrapGAppsHook intltool gettext ];
+  buildInputs = [ gtk3 gobject-introspection pango gexiv2 ]
+    # Map support
+    ++ lib.optional enableOSM osm-gps-map
+    # Graphviz support
+    ++ lib.optional enableGraphviz graphviz
+    # Ghostscript support
+    ++ lib.optional enableGhostscript ghostscript
+  ;
+
+  src = fetchFromGitHub {
+    owner = "gramps-project";
+    repo = "gramps";
+    rev = "v${version}";
+    sha256 = "109dwkswz2h2328xkqk2zj736d117s9pp7rz5cc1qg2vxn1lpm93";
+  };
+
+  pythonPath = with pythonPackages; [ bsddb3 PyICU pygobject3 pycairo ];
+
+  # Same installPhase as in buildPythonApplication but without --old-and-unmanageble
+  # install flag.
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/lib/${python.libPrefix}/site-packages"
+
+    export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
+
+    ${python}/bin/${python.executable} setup.py install \
+      --install-lib=$out/lib/${python.libPrefix}/site-packages \
+      --prefix="$out"
+
+    eapth="$out/lib/${python.libPrefix}"/site-packages/easy-install.pth
+    if [ -e "$eapth" ]; then
+        # move colliding easy_install.pth to specifically named one
+        mv "$eapth" $(dirname "$eapth")/${pname}-${version}.pth
+    fi
+
+    rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py*
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Genealogy software";
+    homepage = "https://gramps-project.org";
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/green-pdfviewer/default.nix b/nixpkgs/pkgs/applications/misc/green-pdfviewer/default.nix
new file mode 100644
index 000000000000..fe21631c0d67
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/green-pdfviewer/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, poppler, pkg-config, gdk-pixbuf, SDL, gtk2 }:
+
+stdenv.mkDerivation {
+  pname = "green-pdfviewer";
+  version = "nightly-2014-04-22";
+
+  src = fetchFromGitHub {
+    owner = "schandinat";
+    repo = "green";
+    rev = "0b516aec17915d9742d8e505d2ed383a3bdcea61";
+    sha256 = "0d0lv33flhgsxhc77kfp2avdz5gvml04r8l1j95yjz2rr096lzlj";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ poppler gdk-pixbuf SDL gtk2 ];
+
+  patches = [
+    ./gdk-libs.patch
+  ];
+
+  buildPhase = ''
+    make PREFIX=$out
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man1
+    make install PREFIX=$out MANDIR=$out/share
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/schandinat/green/";
+    description = "Viewer for PDF files, uses SDL and libpoppler";
+
+    platforms = platforms.unix;
+    license  = licenses.gpl3;
+    maintainers = [ maintainers.vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/green-pdfviewer/gdk-libs.patch b/nixpkgs/pkgs/applications/misc/green-pdfviewer/gdk-libs.patch
new file mode 100644
index 000000000000..cfcab32aac99
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/green-pdfviewer/gdk-libs.patch
@@ -0,0 +1,55 @@
+Common subdirectories: green.old/debian and green.new/debian
+diff -u green.old/green.h green.new/green.h
+--- green.old/green.h	2016-06-12 18:11:56.779434416 -0700
++++ green.new/green.h	2016-06-12 18:14:38.830557379 -0700
+@@ -19,7 +19,14 @@
+ 
+ 
+ #include <stdbool.h>
+-#include "glib/poppler.h"
++#include "poppler.h"
++#include "gdk-pixbuf/gdk-pixbuf.h"
++#include "gdk-pixbuf/gdk-pixbuf-core.h"
++#include "gdk-pixbuf/gdk-pixbuf-features.h"
++#include "gdk-pixbuf/gdk-pixbuf-enum-types.h"
++ 
++ #define GREEN_FULLSCREEN	0x0001
++ 
+ 
+ 
+ #define GREEN_FULLSCREEN	0x0001
+diff -u green.old/Makefile green.new/Makefile
+--- green.old/Makefile	2016-06-12 18:11:56.779434416 -0700
++++ green.new/Makefile	2016-06-12 18:13:09.591974048 -0700
+@@ -17,6 +17,12 @@
+ SDL_CFLAGS	:=	$$(sdl-config --cflags)
+ SDL_LIBS	:=	$$(sdl-config --libs)
+ 
++GDKPIXBUF_CFLAGS	:=	$$(pkg-config gdk-pixbuf-2.0 --cflags)
++GDKPIXBUF_LIBS	:=	$$(pkg-config gdk-pixbuf-2.0 --libs)
++
++GTK_CFLAGS	:=	$$(pkg-config gtk+-2.0 --cflags)
++GTK_LIBS	:=	$$(pkg-config gtk+-2.0 --libs)
++
+ 
+ all: green
+ 
+@@ -28,13 +34,14 @@
+ 	$(INSTALL) green.1 $(MANDIR)/man1/
+ 
+ green: main.o green.o sdl.o
+-	$(CC) $^ $(POPPLER_LIBS) $(SDL_LIBS) -o $@
++	$(CC) $^ $(POPPLER_LIBS) $(SDL_LIBS) $(GDKPIXBUF_LIBS) $(GTK_LIBS) -o $@
+ 
+ main.o: main.c green.h
+-	$(CC) $(CONFIG) $(CFLAGS) -c $< $(POPPLER_CFLAGS) -o $@
++	$(CC) $(CONFIG) $(CFLAGS) $(GDKPIXBUF_CFLAGS) -c $< $(POPPLER_CFLAGS) -o $@
+ 
+ green.o: green.c green.h
+-	$(CC) $(CFLAGS) -c $< $(POPPLER_CFLAGS) -o $@
++	$(CC) $(CFLAGS) -c $< $(POPPLER_CFLAGS)  $(GDKPIXBUF_CFLAGS) -o $@
+ 
+ sdl.o: sdl.c green.h
+-	$(CC) $(CFLAGS) -c $< $(POPPLER_CFLAGS) $(SDL_CFLAGS) -o $@
++	$(CC) $(CFLAGS) -c $< $(POPPLER_CFLAGS) $(SDL_CFLAGS) $(GDKPIXBUF_CFLAGS) $(GTK_CFLAGS) -o $@
++
diff --git a/nixpkgs/pkgs/applications/misc/gremlin-console/default.nix b/nixpkgs/pkgs/applications/misc/gremlin-console/default.nix
new file mode 100644
index 000000000000..6c3ba132d0b2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gremlin-console/default.nix
@@ -0,0 +1,29 @@
+{ fetchzip, lib, stdenv, makeWrapper, openjdk }:
+
+stdenv.mkDerivation rec {
+  pname = "gremlin-console";
+  version = "3.4.8";
+  src = fetchzip {
+    url = "http://www-eu.apache.org/dist/tinkerpop/${version}/apache-tinkerpop-gremlin-console-${version}-bin.zip";
+    sha256 = "13ycr6ppyrz9rq7dasabjdk8lcsxdj3krb4j7d2jmbh2hij1rdvf";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/opt
+    cp -r ext lib $out/opt/
+    install -D bin/gremlin.sh $out/opt/bin/gremlin-console
+    makeWrapper $out/opt/bin/gremlin-console $out/bin/gremlin-console \
+      --prefix PATH ":" "${openjdk}/bin/" \
+      --set CLASSPATH "$out/opt/lib/"
+  '';
+
+  meta = with lib; {
+    homepage = "https://tinkerpop.apache.org/";
+    description = "Console of the Apache TinkerPop graph computing framework";
+    license = licenses.asl20;
+    maintainers = [ maintainers.lewo ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/grip/default.nix b/nixpkgs/pkgs/applications/misc/grip/default.nix
new file mode 100644
index 000000000000..5ebe7765e50c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/grip/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, gtk2, glib, pkg-config, libgnome, libgnomeui, vte
+, curl, cdparanoia, libid3tag, ncurses, libtool }:
+
+stdenv.mkDerivation rec {
+  name = "grip-4.2.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/grip/${name}.tar.gz";
+    sha256 = "1si5kidwg0i2jg0brzyvjrzw24v3km2hdgd4kda1adzq81a3p1cs";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 glib libgnome libgnomeui vte curl cdparanoia
+    libid3tag ncurses libtool ];
+
+  hardeningDisable = [ "format" ];
+
+  # glib-2.62 deprecations
+  NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  meta = {
+    description = "GTK-based audio CD player/ripper";
+    homepage = "http://nostatic.org/grip";
+    license = lib.licenses.gpl2;
+
+    maintainers = with lib.maintainers; [ marcweber peti ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/grsync/default.nix b/nixpkgs/pkgs/applications/misc/grsync/default.nix
new file mode 100644
index 000000000000..f4d1b0852591
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/grsync/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, dee, gtk2, intltool, libdbusmenu-gtk2, libunity, pkg-config, rsync }:
+
+stdenv.mkDerivation rec {
+  version = "1.2.8";
+  pname = "grsync";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/grsync/grsync-${version}.tar.gz";
+    sha256 = "1c86jch73cy7ig9k4shvcd3jnaxk7jppfcr8nmkz8gbylsn5zsll";
+  };
+
+  nativeBuildInputs = [
+    intltool
+    pkg-config
+  ];
+
+  buildInputs = [
+    dee
+    gtk2
+    libdbusmenu-gtk2
+    libunity
+    rsync
+  ];
+
+  meta = with lib; {
+    description = "Synchronize folders, files and make backups";
+    homepage = "http://www.opbyte.it/grsync/";
+    license = licenses.gpl1;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.kuznero ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gsctl/default.nix b/nixpkgs/pkgs/applications/misc/gsctl/default.nix
new file mode 100644
index 000000000000..101baa093966
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gsctl/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "gsctl";
+  version = "0.15.4";
+
+  goPackagePath = "github.com/giantswarm/gsctl";
+
+  src = fetchFromGitHub {
+    owner = "giantswarm";
+    repo = pname;
+    rev  = version;
+    sha256 = "0s5bli08wfd9xszx3kc90k51vlgjc00r0qg4mikb6qdc4pxpgsxj";
+  };
+
+  meta = with lib; {
+    description = "The Giant Swarm command line interface";
+    homepage = "https://github.com/giantswarm/gsctl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ joesalisbury ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gsimplecal/default.nix b/nixpkgs/pkgs/applications/misc/gsimplecal/default.nix
new file mode 100644
index 000000000000..21128ac9119a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gsimplecal/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, automake, autoconf, pkg-config, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gsimplecal";
+  version = "2.1";
+
+  src = fetchurl {
+    url = "https://github.com/dmedvinsky/gsimplecal/archive/v${version}.tar.gz";
+    sha256 = "1sa05ifjp41xipfspk5n6l3wzpzmp3i45q88l01p4l6k6drsq336";
+  };
+
+  postPatch = ''
+    sed -ie '/sys\/sysctl.h/d' src/Unique.cpp
+  '';
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ automake autoconf gtk3 ];
+
+  preConfigure = "./autogen.sh";
+
+  meta = {
+    homepage = "http://dmedvinsky.github.io/gsimplecal/";
+    description = "Lightweight calendar application written in C++ using GTK";
+    longDescription = ''
+      gsimplecal was intentionally made for use with tint2 panel in the
+      openbox environment to be launched upon clock click, but of course it
+      will work without it. In fact, binding the gsimplecal to some hotkey in
+      you window manager will probably make you happy. The thing is that when
+      it is started it first shows up, when you run it again it closes the
+      running instance. In that way it is very easy to integrate anywhere. No
+      need to write some wrapper scripts or whatever.
+
+      Also, you can configure it to not only show the calendar, but also
+      display multiple clocks for different world time zones.
+    '';
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.romildo ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gtk2fontsel/default.nix b/nixpkgs/pkgs/applications/misc/gtk2fontsel/default.nix
new file mode 100644
index 000000000000..d635fa8d8657
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gtk2fontsel/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchurl, pkg-config, gtk2 }:
+
+stdenv.mkDerivation rec {
+  version = "0.1";
+  pname = "gtk2fontsel";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gtk2fontsel/${pname}-${version}.tar.gz";
+    sha256 = "0s2sj19n8ys92q9832hkn36ld91bb4qavicc6nygkry6qdpkkmjw";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ stdenv gtk2 ];
+
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    description = "A font selection program for X11 using the GTK 2 toolkit";
+    longDescription = ''
+      Font selection tool similar to xfontsel implemented using GTK 2.
+      Trivial, but useful nonetheless.
+    '';
+    homepage = "http://gtk2fontsel.sourceforge.net/";
+    downloadPage = "https://sourceforge.net/projects/gtk2fontsel/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.prikhi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gummi/default.nix b/nixpkgs/pkgs/applications/misc/gummi/default.nix
new file mode 100644
index 000000000000..f0416e232dcd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gummi/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, pkgs
+, glib, gnome3, gtk3, gtksourceview3, gtkspell3, poppler, texlive
+, pkg-config, intltool, autoreconfHook, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.8.1";
+  pname = "gummi";
+
+  src = pkgs.fetchFromGitHub {
+    owner = "alexandervdm";
+    repo = "gummi";
+    rev = version;
+    sha256 = "0wxgmzazqiq77cw42i5fn2hc22hhxf5gbpl9g8y3zlnp21lw9y16";
+  };
+
+  nativeBuildInputs = [
+    pkg-config intltool autoreconfHook wrapGAppsHook
+  ];
+  buildInputs = [
+    glib gtksourceview3 gtk3 gtkspell3 poppler
+    texlive.bin.core # needed for synctex
+  ];
+
+  postInstall = ''
+    install -Dpm644 COPYING $out/share/licenses/$name/COPYING
+  '';
+
+  meta = {
+    homepage = "https://gummi.app";
+    description = "Simple LaTex editor for GTK users";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ flokli ];
+    platforms = with lib.platforms; linux;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gv/default.nix b/nixpkgs/pkgs/applications/misc/gv/default.nix
new file mode 100644
index 000000000000..aa07058dc808
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gv/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, Xaw3d, ghostscriptX, perl, pkg-config, libiconv }:
+
+let
+  name = "gv-3.7.4";
+in
+stdenv.mkDerivation {
+  inherit name;
+
+  src = fetchurl {
+    url = "mirror://gnu/gv/${name}.tar.gz";
+    sha256 = "0q8s43z14vxm41pfa8s5h9kyyzk1fkwjhkiwbf2x70alm6rv6qi1";
+  };
+
+  configureFlags = lib.optionals stdenv.isDarwin [
+    "--enable-SIGCHLD-fallback"
+  ];
+
+  buildInputs = [
+    Xaw3d
+    ghostscriptX
+    perl
+    pkg-config
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+  ];
+
+  patchPhase = ''
+    sed 's|\<gs\>|${ghostscriptX}/bin/gs|g' -i "src/"*.in
+    sed 's|"gs"|"${ghostscriptX}/bin/gs"|g' -i "src/"*.c
+  '';
+
+  doCheck = true;
+
+  meta = {
+    homepage = "https://www.gnu.org/software/gv/";
+    description = "PostScript/PDF document viewer";
+
+    longDescription = ''
+      GNU gv allows users to view and navigate through PostScript and
+      PDF documents on an X display by providing a graphical user
+      interface for the Ghostscript interpreter.
+    '';
+
+    license = lib.licenses.gpl3Plus;
+    maintainers = [ ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gxmessage/default.nix b/nixpkgs/pkgs/applications/misc/gxmessage/default.nix
new file mode 100644
index 000000000000..9f09e3d978e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gxmessage/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, gtk3, intltool, pkg-config, texinfo }:
+
+stdenv.mkDerivation rec {
+  pname = "gxmessage";
+  version = "3.4.3";
+
+  src = fetchurl {
+    url = "http://homepages.ihug.co.nz/~trmusson/stuff/${pname}-${version}.tar.gz";
+    sha256 = "db4e1655fc58f31e5770a17dfca4e6c89028ad8b2c8e043febc87a0beedeef05";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ intltool gtk3 texinfo ];
+
+  meta = {
+    description = "A GTK enabled dropin replacement for xmessage";
+    homepage = "http://homepages.ihug.co.nz/~trmusson/programs.html#gxmessage";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [jfb];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gxneur/default.nix b/nixpkgs/pkgs/applications/misc/gxneur/default.nix
new file mode 100644
index 000000000000..9e8c5ddaef4a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gxneur/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, pkg-config, intltool, gtk2, xorg, glib, xneur, libglade, GConf, libappindicator-gtk2, pcre }:
+
+stdenv.mkDerivation {
+  name = "gxneur-0.20.0";
+
+  src = fetchurl {
+    url = "https://github.com/AndrewCrewKuznetsov/xneur-devel/raw/f66723feb272c68f7c22a8bf0dbcafa5e3a8a5ee/dists/0.20.0/gxneur_0.20.0.orig.tar.gz";
+    sha256 = "0avmhdcj0hpr55fc0iih8fjykmdhn34c8mwdnqvl8jh4nhxxchxr";
+  };
+
+  # glib-2.62 deprecations
+  NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  nativeBuildInputs = [ pkg-config intltool ];
+  buildInputs = [
+    xorg.libX11 glib gtk2 xorg.libXpm xorg.libXt xorg.libXext xneur
+    libglade GConf pcre libappindicator-gtk2
+  ];
+
+  meta = with lib; {
+    description = "GUI for XNEUR keyboard layout switcher";
+    platforms = platforms.linux;
+    license = with licenses; [ gpl2 gpl3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hamster/default.nix b/nixpkgs/pkgs/applications/misc/hamster/default.nix
new file mode 100644
index 000000000000..855123ef7931
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hamster/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages, intltool, glib, itstool
+, wrapGAppsHook, gobject-introspection, pango, gdk-pixbuf, atk, wafHook }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "hamster";
+  version = "3.0.2";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "projecthamster";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "09ikiwc2izjvwqbbyp8knn190x5y4anwslkmb9k2h3r3jwrg2vd2";
+  };
+
+  nativeBuildInputs = [
+    python3Packages.setuptools
+    wrapGAppsHook
+    intltool
+    itstool
+    wafHook
+    glib
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    pango
+    gdk-pixbuf
+    atk
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    pycairo
+    pyxdg
+    dbus-python
+  ];
+
+  # Setup hooks have trouble with strict deps.
+  # https://github.com/NixOS/nixpkgs/issues/56943
+  strictDeps = false;
+
+  dontWrapGApps = true;
+
+  # Arguments to be passed to `makeWrapper`, only used by buildPython*
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  postFixup = ''
+    wrapPythonProgramsIn $out/libexec "$out $pythonPath"
+  '';
+
+  meta = with lib; {
+    description = "Time tracking application";
+    homepage = "http://projecthamster.org/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.fabianhauser ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/haxor-news/default.nix b/nixpkgs/pkgs/applications/misc/haxor-news/default.nix
new file mode 100644
index 000000000000..467cbfad6568
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/haxor-news/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchFromGitHub, python3, fetchpatch }:
+
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      self = py;
+
+      # not compatible with prompt_toolkit >=2.0
+      prompt_toolkit = super.prompt_toolkit.overridePythonAttrs (oldAttrs: rec {
+        name = "${oldAttrs.pname}-${version}";
+        version = "1.0.18";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "09h1153wgr5x2ny7ds0w2m81n3bb9j8hjb8sjfnrg506r01clkyx";
+        };
+      });
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "haxor-news";
+  version = "unstable-2020-10-20";
+
+  # haven't done a stable release in 3+ years, but actively developed
+  src = fetchFromGitHub {
+    owner = "donnemartin";
+    repo = pname;
+    rev = "811a5804c09406465b2b02eab638c08bf5c4fa7f";
+    sha256 = "1g3dfsyk4727d9jh9w6j5r51ag07851cls7v7a7hmdvdixpvbzp6";
+  };
+
+  propagatedBuildInputs = [
+    click
+    colorama
+    requests
+    pygments
+    prompt_toolkit
+    six
+  ];
+
+  # will fail without pre-seeded config files
+  doCheck = false;
+
+  checkInputs = [ mock ];
+
+  checkPhase = ''
+    ${python.interpreter} -m unittest discover -s tests -v
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/donnemartin/haxor-news";
+    description = "Browse Hacker News like a haxor";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/hdate/default.nix b/nixpkgs/pkgs/applications/misc/hdate/default.nix
new file mode 100644
index 000000000000..899630b69099
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hdate/default.nix
@@ -0,0 +1,16 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "1.6.02";
+  pname = "hdate";
+  src = fetchurl {
+    url = "https://sourceforge.net/projects/libhdate/files/libhdate/libhdate-${version}/libhdate-${version}.tar.bz2";
+    sha256 = "3c930a8deb57c01896dc37f0d7804e5a330ee8e88c4ff610b71f9d2b02c17762";
+  };
+  meta = {
+    description = "Hebrew calendar and solar astronomical times library and utilities";
+    homepage = "https://sourceforge.net/projects/libhdate/";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ CharlesHD ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/heimer/default.nix b/nixpkgs/pkgs/applications/misc/heimer/default.nix
new file mode 100644
index 000000000000..9d8dc1eaa03d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/heimer/default.nix
@@ -0,0 +1,24 @@
+{ mkDerivation, lib, fetchFromGitHub, cmake, qttools, qtbase }:
+
+mkDerivation rec {
+  pname = "heimer";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "juzzlin";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-upsOmf46bCO8sVp5dBHPLUBZYZP3JyXa7H5KXbd76qo=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ qttools qtbase ];
+
+  meta = with lib; {
+    description = "Simple cross-platform mind map and note-taking tool written in Qt";
+    homepage = "https://github.com/juzzlin/Heimer";
+    license = licenses.gpl3;
+    maintainers  = with maintainers; [ dtzWill ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hello-unfree/default.nix b/nixpkgs/pkgs/applications/misc/hello-unfree/default.nix
new file mode 100644
index 000000000000..7c54c3201111
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hello-unfree/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "example-unfree-package";
+  version = "1.0";
+
+  phases = [ "installPhase" "fixupPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cat > $out/bin/hello-unfree << EOF
+    #!${runtimeShell}
+    echo "Hello, you are running an unfree system!"
+    EOF
+    chmod +x $out/bin/hello-unfree
+  '';
+
+  meta = {
+    description = "An example package with unfree license (for testing)";
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.oxij ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hello/default.nix b/nixpkgs/pkgs/applications/misc/hello/default.nix
new file mode 100644
index 000000000000..a885b1643fe2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hello/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "hello";
+  version = "2.10";
+
+  src = fetchurl {
+    url = "mirror://gnu/hello/${pname}-${version}.tar.gz";
+    sha256 = "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i";
+  };
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A program that produces a familiar, friendly greeting";
+    longDescription = ''
+      GNU Hello is a program that prints "Hello, world!" when you run it.
+      It is fully customizable.
+    '';
+    homepage = "https://www.gnu.org/software/hello/manual/";
+    changelog = "https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.eelco ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/herbe/default.nix b/nixpkgs/pkgs/applications/misc/herbe/default.nix
new file mode 100644
index 000000000000..0d05228b63eb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/herbe/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub, libX11, libXft, freetype, patches ? [ ],
+  extraLibs ? [ ] }:
+
+stdenv.mkDerivation rec {
+  pname = "herbe";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "dudik";
+    repo = pname;
+    rev = version;
+    sha256 = "0358i5jmmlsvy2j85ij7m1k4ar2jr5lsv7y1c58dlf9710h186cv";
+  };
+
+  inherit patches;
+
+  postPatch = ''
+    sed -i 's_/usr/include/freetype2_${freetype.dev}/include/freetype2_' Makefile
+  '';
+
+  buildInputs = [ libX11 libXft freetype ] ++ extraLibs;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Daemon-less notifications without D-Bus";
+    homepage = "https://github.com/dudik/herbe";
+    license = licenses.mit;
+    # NOTE: Could also work on 'unix'.
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wishfort36 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hivemind/default.nix b/nixpkgs/pkgs/applications/misc/hivemind/default.nix
new file mode 100644
index 000000000000..fc22d3a854a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hivemind/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, buildGoPackage, fetchFromGitHub, runtimeShell }:
+
+buildGoPackage rec {
+  pname = "hivemind";
+  version = "1.0.6";
+  goPackagePath = "github.com/DarthSim/hivemind";
+
+  postPatch = ''
+    substituteInPlace process.go --replace \"/bin/sh\" \"${runtimeShell}\"
+  '';
+
+  src = fetchFromGitHub {
+    owner = "DarthSim";
+    repo = "hivemind";
+    rev = "v${version}";
+    sha256 = "0afcnd03wsdphbbpha65rv5pnv0x6ldnnm6rnv1m6xkkywgnzx95";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/DarthSim/";
+    description = "Process manager for Procfile-based applications";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.sveitser ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/houdini/default.nix b/nixpkgs/pkgs/applications/misc/houdini/default.nix
new file mode 100644
index 000000000000..ce35e91d9278
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/houdini/default.nix
@@ -0,0 +1,14 @@
+{ callPackage, buildFHSUserEnv, undaemonize }:
+
+let
+  houdini-runtime = callPackage ./runtime.nix { };
+in buildFHSUserEnv {
+  name = "houdini-${houdini-runtime.version}";
+
+  extraBuildCommands = ''
+    mkdir -p $out/usr/lib/sesi
+  '';
+
+  runScript = "${undaemonize}/bin/undaemonize ${houdini-runtime}/bin/houdini";
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/houdini/runtime.nix b/nixpkgs/pkgs/applications/misc/houdini/runtime.nix
new file mode 100644
index 000000000000..b1c7949d258c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/houdini/runtime.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv, requireFile, zlib, libpng, libSM, libICE, fontconfig, xorg, libGLU, libGL, alsaLib, dbus, xkeyboardconfig, bc, addOpenGLRunpath }:
+
+let
+  ld_library_path = builtins.concatStringsSep ":" [
+    "${stdenv.cc.cc.lib}/lib64"
+    (lib.makeLibraryPath [
+      libGLU
+      libGL
+      xorg.libXmu
+      xorg.libXi
+      xorg.libXext
+      xorg.libX11
+      xorg.libXrender
+      xorg.libXcursor
+      xorg.libXfixes
+      xorg.libXrender
+      xorg.libXcomposite
+      xorg.libXdamage
+      xorg.libXtst
+      alsaLib
+      fontconfig
+      libSM
+      libICE
+      zlib
+      libpng
+      dbus
+      addOpenGLRunpath.driverLink
+    ])
+  ];
+  license_dir = "~/.config/houdini";
+in
+stdenv.mkDerivation rec {
+  version = "17.5.327";
+  pname = "houdini-runtime";
+  src = requireFile rec {
+    name = "houdini-${version}-linux_x86_64_gcc6.3.tar.gz";
+    sha256 = "1byigmhmby8lgi2vmgxy9jlrrqk7jyr507zqkihq5bv8kfsanv1x";
+    message = ''
+      This nix expression requires that ${name} is already part of the store.
+      Download it from https://www.sidefx.com and add it to the nix store with:
+
+          nix-prefetch-url <URL>
+
+      This can't be done automatically because you need to create an account on
+      their website and agree to their license terms before you can download
+      it. That's what you get for using proprietary software.
+    '';
+  };
+
+  buildInputs = [ bc ];
+  installPhase = ''
+    patchShebangs houdini.install
+    mkdir -p $out
+    sed -i "s|/usr/lib/sesi|${license_dir}|g" houdini.install
+    ./houdini.install --install-houdini \
+                      --no-install-menus \
+                      --no-install-bin-symlink \
+                      --auto-install \
+                      --no-root-check \
+                      --accept-EULA \
+                      $out
+    echo -e "localValidatorDir = ${license_dir}\nlicensingMode = localValidator" > $out/houdini/Licensing.opt
+    sed -i "s|/usr/lib/sesi|${license_dir}|g" $out/houdini/sbin/sesinetd_safe
+    sed -i "s|/usr/lib/sesi|${license_dir}|g" $out/houdini/sbin/sesinetd.startup
+    echo "export LD_LIBRARY_PATH=${ld_library_path}" >> $out/bin/app_init.sh
+    echo "export QT_XKB_CONFIG_ROOT="${xkeyboardconfig}/share/X11/xkb"" >> $out/bin/app_init.sh
+    echo "export LD_LIBRARY_PATH=${ld_library_path}" >> $out/houdini/sbin/app_init.sh
+    echo "export QT_XKB_CONFIG_ROOT="${xkeyboardconfig}/share/X11/xkb"" >> $out/houdini/sbin/app_init.sh
+  '';
+  postFixup = ''
+    INTERPRETER="$(cat "$NIX_CC"/nix-support/dynamic-linker)"
+    for BIN in $(find $out/bin -type f -executable); do
+      if patchelf $BIN 2>/dev/null ; then
+        echo "Patching ELF $BIN"
+        patchelf --set-interpreter "$INTERPRETER" "$BIN"
+      fi
+    done
+  '';
+  meta = {
+    description = "3D animation application software";
+    homepage = "https://www.sidefx.com";
+    license = lib.licenses.unfree;
+    platforms = lib.platforms.linux;
+    hydraPlatforms = [ ]; # requireFile src's should be excluded
+    maintainers = [ lib.maintainers.canndrew ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/hovercraft/default.nix b/nixpkgs/pkgs/applications/misc/hovercraft/default.nix
new file mode 100644
index 000000000000..5a03cfe23bac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hovercraft/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildPythonApplication
+, isPy3k
+, fetchFromGitHub
+, manuel
+, setuptools
+, docutils
+, lxml
+, svg-path
+, pygments
+, watchdog
+}:
+
+buildPythonApplication rec {
+  pname = "hovercraft";
+  version = "2.7";
+  disabled = ! isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "regebro";
+    repo = "hovercraft";
+    rev = version;
+    sha256 = "0k0gjlqjz424rymcfdjpj6a71ppblfls5f8y2hd800d1as4im8az";
+  };
+
+  checkInputs = [ manuel ];
+  propagatedBuildInputs = [ setuptools docutils lxml svg-path pygments watchdog ];
+
+  meta = with lib; {
+    description = "Makes impress.js presentations from reStructuredText";
+    homepage = "https://github.com/regebro/hovercraft";
+    license = licenses.mit;
+    maintainers = with maintainers; [ goibhniu makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hr/default.nix b/nixpkgs/pkgs/applications/misc/hr/default.nix
new file mode 100644
index 000000000000..706a8ff74955
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hr/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "hr";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "LuRsT";
+    repo = "hr";
+    rev = version;
+    sha256 = "068kq37lbqfjzh28rlvkprni38ii991naawylwvq6d43y9dpzs2b";
+  };
+
+  dontBuild = true;
+  installFlags = [ "PREFIX=$(out)" "MANPREFIX=$(out)/share" ];
+
+  preInstall = ''
+    mkdir -p $out/{bin,share}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/LuRsT/hr";
+    description = "A horizontal bar for your terminal";
+    license = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hstr/default.nix b/nixpkgs/pkgs/applications/misc/hstr/default.nix
new file mode 100644
index 000000000000..3cda6d0a3181
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hstr/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, readline, ncurses
+, autoreconfHook, pkg-config, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "hstr";
+  version = "2.3";
+
+  src = fetchFromGitHub {
+    owner  = "dvorka";
+    repo   = "hstr";
+    rev    = version;
+    sha256 = "1chmfdi1dwg3sarzd01nqa82g65q7wdr6hrnj96l75vikwsg986y";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ readline ncurses gettext ];
+
+  configureFlags = [ "--prefix=$(out)" ];
+
+  meta = {
+    homepage = "https://github.com/dvorka/hstr";
+    description = "Shell history suggest box - easily view, navigate, search and use your command history";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.matthiasbeyer ];
+    platforms = with lib.platforms; linux ++ darwin;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/html5validator/default.nix b/nixpkgs/pkgs/applications/misc/html5validator/default.nix
new file mode 100644
index 000000000000..657996d1da9f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/html5validator/default.nix
@@ -0,0 +1,25 @@
+{ buildPythonApplication, fetchFromGitHub, nose, openjdk, lib }:
+
+buildPythonApplication rec {
+  pname = "html5validator";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "svenkreiss";
+    repo = "html5validator";
+    rev = "v${version}";
+    sha256 = "130acqi0dsy3midg7hwslykzry6crr4ln6ia0f0avyywkz4bplsv";
+  };
+
+  propagatedBuildInputs = [ openjdk ];
+
+  checkInputs = [ nose ];
+  checkPhase = "PATH=$PATH:$out/bin nosetests";
+
+  meta = with lib; {
+    homepage = "https://github.com/svenkreiss/html5validator";
+    description = "Command line tool that tests files for HTML5 validity";
+    license = licenses.mit;
+    maintainers = [ maintainers.phunehehe ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hubstaff/default.nix b/nixpkgs/pkgs/applications/misc/hubstaff/default.nix
new file mode 100644
index 000000000000..f291ab898e3d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hubstaff/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper, libX11, zlib, libSM, libICE
+, libXext , freetype, libXrender, fontconfig, libXft, libXinerama
+, libXfixes, libXScrnSaver, libnotify, glib , gtk3, libappindicator-gtk3
+, curl }:
+
+let
+
+  data = builtins.fromJSON (builtins.readFile ./revision.json);
+
+  inherit (data) version url sha256;
+
+  rpath = lib.makeLibraryPath
+    [ libX11 zlib libSM libICE libXext freetype libXrender fontconfig libXft
+      libXinerama stdenv.cc.cc.lib libnotify glib gtk3 libappindicator-gtk3
+      curl libXfixes libXScrnSaver ];
+
+in
+
+stdenv.mkDerivation {
+  pname = "hubstaff";
+  inherit version;
+
+  src = fetchurl { inherit sha256 url; };
+
+  nativeBuildInputs = [ unzip makeWrapper ];
+
+  unpackCmd = ''
+    # MojoSetups have a ZIP file at the end. ZIP’s magic string is
+    # most often PK\x03\x04. This has worked for all past updates,
+    # but feel free to come up with something more reasonable.
+    dataZipOffset=$(grep --max-count=1 --byte-offset --only-matching --text ''$'PK\x03\x04' $curSrc | cut -d: -f1)
+    dd bs=$dataZipOffset skip=1 if=$curSrc of=data.zip 2>/dev/null
+    unzip -q data.zip "data/*"
+    rm data.zip
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    # TODO: handle 32-bit arch?
+    rm -r x86
+    rm -r x86_64/lib64
+
+    opt=$out/opt/hubstaff
+    mkdir -p $out/bin $opt
+    cp -r . $opt/
+
+    for f in "$opt/x86_64/"*.bin.x86_64 ; do
+      patchelf --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) $f
+      wrapProgram $f --prefix LD_LIBRARY_PATH : ${rpath}
+    done
+
+    ln -s $opt/x86_64/HubstaffClient.bin.x86_64 $out/bin/HubstaffClient
+
+    # Why is this needed? SEGV otherwise.
+    ln -s $opt/data/resources $opt/x86_64/resources
+  '';
+
+  meta = with lib; {
+    description = "Time tracking software";
+    homepage = "https://hubstaff.com/";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ michalrus srghma ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hubstaff/revision.json b/nixpkgs/pkgs/applications/misc/hubstaff/revision.json
new file mode 100644
index 000000000000..9b0ffe67f0cd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hubstaff/revision.json
@@ -0,0 +1,5 @@
+{
+  "url": "https://hubstaff-production.s3.amazonaws.com/downloads/HubstaffClient/Builds/Release/1.5.15-28673d1c/Hubstaff-1.5.15-28673d1c.sh",
+  "version": "1.5.15-28673d1c",
+  "sha256": "0ging41l3a3sdj6bggh913h71gqmb8l3rplp4civpgclnfzv7fg2"
+}
diff --git a/nixpkgs/pkgs/applications/misc/hubstaff/update.sh b/nixpkgs/pkgs/applications/misc/hubstaff/update.sh
new file mode 100755
index 000000000000..c4c1caf55db4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hubstaff/update.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix-prefetch-git curl
+
+SCRIPT_DIR=$(dirname "$(readlink -f "$BASH_SOURCE")")
+
+installation_script_url=$(curl --fail --head --location --silent --output /dev/null --write-out %{url_effective} https://app.hubstaff.com/download/linux)
+
+version=$(echo "$installation_script_url" | sed -r 's/^https:\/\/hubstaff\-production\.s3\.amazonaws\.com\/downloads\/HubstaffClient\/Builds\/Release\/([^\/]+)\/Hubstaff.+$/\1/')
+
+sha256=$(nix-prefetch-url "$installation_script_url")
+
+cat <<EOT > $SCRIPT_DIR/revision.json
+{
+  "url": "$installation_script_url",
+  "version": "$version",
+  "sha256": "$sha256"
+}
+EOT
diff --git a/nixpkgs/pkgs/applications/misc/hugo/default.nix b/nixpkgs/pkgs/applications/misc/hugo/default.nix
new file mode 100644
index 000000000000..2d2ccefe934e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hugo/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "hugo";
+  version = "0.80.0";
+
+  src = fetchFromGitHub {
+    owner = "gohugoio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0xs9y5lj0mya6ag625x8j91mn9l9r13gxaqxyvl1fl40y2yjz1zm";
+  };
+
+  vendorSha256 = "172mcs8p43bsdkd2hxg9qn6018fh8f36kxx0vgnq5q6fqsb6s1f6";
+
+  doCheck = false;
+
+  runVend = true;
+
+  buildFlags = [ "-tags" "extended" ];
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "A fast and modern static website engine";
+    homepage = "https://gohugo.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ schneefux Br1ght0ne Frostman ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/icesl/default.nix b/nixpkgs/pkgs/applications/misc/icesl/default.nix
new file mode 100644
index 000000000000..9f1431a23409
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/icesl/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchzip, freeglut, libXmu, libXi, libX11, libICE, libGLU, libGL, libSM, libXext, dialog, makeWrapper }:
+let
+  lpath = lib.makeLibraryPath [ libXmu libXi libX11 freeglut libICE libGLU libGL libSM libXext ];
+in
+stdenv.mkDerivation rec {
+  pname = "iceSL";
+  version = "2.1.10";
+
+  src =  if stdenv.hostPlatform.system == "x86_64-linux" then fetchzip {
+    url = "https://gforge.inria.fr/frs/download.php/file/37268/icesl${version}-amd64.zip";
+    sha256 = "0dv3mq6wy46xk9blzzmgbdxpsjdaxid3zadfrysxlhmgl7zb2cn2";
+  } else if stdenv.hostPlatform.system == "i686-linux" then fetchzip {
+    url = "https://gforge.inria.fr/frs/download.php/file/37267/icesl${version}-i386.zip";
+    sha256 = "0sl54fsb2gz6dy0bwdscpdq1ab6ph5b7zald3bwzgkqsvna7p1jr";
+  } else throw "Unsupported architecture";
+
+  buildInputs = [ makeWrapper ];
+  installPhase = ''
+    cp -r ./ $out
+    mkdir $out/oldbin
+    mv $out/bin/IceSL-slicer $out/oldbin/IceSL-slicer
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${lpath}" \
+      $out/oldbin/IceSL-slicer
+    makeWrapper $out/oldbin/IceSL-slicer $out/bin/icesl --prefix PATH : ${dialog}/bin
+  '';
+
+  meta = with lib; {
+    description = "GPU-accelerated procedural modeler and slicer for 3D printing";
+    homepage = "http://shapeforge.loria.fr/icesl/index.html";
+    license = licenses.inria-icesl;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = with maintainers; [ mgttlinger ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ideamaker/default.nix b/nixpkgs/pkgs/applications/misc/ideamaker/default.nix
new file mode 100644
index 000000000000..7b2eeec292bf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ideamaker/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, autoPatchelfHook
+, curl
+, dpkg
+, fetchurl
+, gcc
+, lib
+, libGLU
+, libcork
+, makeDesktopItem
+, qt5
+, quazip_qt4
+, zlib
+}:
+stdenv.mkDerivation rec {
+  pname = "ideamaker";
+  version = "4.0.1";
+
+  src = fetchurl {
+    # N.B. Unfortunately ideamaker adds a number after the patch number in
+    # their release scheme which is not referenced anywhere other than in
+    # the download URL. Because of this, I have chosen to not use ${version}
+    # and just handwrite the correct values in the following URL, hopefully
+    # avoiding surprises for the next person that comes to update this
+    # package.
+    url = "https://download.raise3d.com/ideamaker/release/4.0.1/ideaMaker_4.0.1.4802-ubuntu_amd64.deb";
+    sha256 = "0a1jcakdglcr4kz0kyq692dbjk6aq2yqcp3i6gzni91k791h49hp";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook dpkg qt5.wrapQtAppsHook ];
+  buildInputs = [
+    curl
+    gcc.cc.lib
+    libGLU
+    libcork
+    qt5.qtbase
+    qt5.qtserialport
+    quazip_qt4
+    zlib
+  ];
+
+  unpackPhase = ''
+    runHook preUnpack
+    dpkg-deb -x $src .
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,share/pixmaps}
+
+    cp usr/lib/x86_64-linux-gnu/ideamaker/ideamaker $out/bin
+    ln -s "${desktopItem}/share/applications" $out/share/
+    cp usr/share/ideamaker/icons/ideamaker-icon.png $out/share/pixmaps/${pname}.png
+
+    runHook postInstall
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = pname;
+    icon = pname;
+    desktopName = "Ideamaker";
+    genericName = meta.description;
+    categories = "Utility;Viewer;Engineering;";
+    mimeType = "application/sla";
+  };
+
+  meta = with lib; {
+    homepage = "https://www.raise3d.com/ideamaker/";
+    description = "Raise3D's 3D slicer software";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ikiwiki/default.nix b/nixpkgs/pkgs/applications/misc/ikiwiki/default.nix
new file mode 100644
index 000000000000..8865435339c3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ikiwiki/default.nix
@@ -0,0 +1,90 @@
+{ lib, stdenv, fetchurl, perlPackages, gettext, makeWrapper, PerlMagick, which, highlight
+, gitSupport ? false, git ? null
+, docutilsSupport ? false, python ? null, docutils ? null
+, monotoneSupport ? false, monotone ? null
+, bazaarSupport ? false, breezy ? null
+, cvsSupport ? false, cvs ? null, cvsps ? null
+, subversionSupport ? false, subversion ? null
+, mercurialSupport ? false, mercurial ? null
+, extraUtils ? []
+}:
+
+assert docutilsSupport -> (python != null && docutils != null);
+assert gitSupport -> (git != null);
+assert monotoneSupport -> (monotone != null);
+assert bazaarSupport -> (breezy != null);
+assert cvsSupport -> (cvs != null && cvsps != null && perlPackages.Filechdir != null);
+assert subversionSupport -> (subversion != null);
+assert mercurialSupport -> (mercurial != null);
+
+let
+  name = "ikiwiki";
+  version = "3.20200202.3";
+in
+stdenv.mkDerivation {
+  name = "${name}-${version}";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/i/ikiwiki/${name}_${version}.orig.tar.xz";
+    sha256 = "0skrc8r4wh4mjfgw1c94awr5sacfb9nfsbm4frikanc9xsy16ksr";
+  };
+
+  buildInputs = [ which highlight ]
+    ++ (with perlPackages; [ perl TextMarkdown URI HTMLParser HTMLScrubber HTMLTemplate
+          TimeDate gettext makeWrapper DBFile CGISession CGIFormBuilder LocaleGettext
+          RpcXML XMLSimple PerlMagick YAML YAMLLibYAML HTMLTree AuthenPassphrase
+          NetOpenIDConsumer LWPxParanoidAgent CryptSSLeay ])
+    ++ lib.optionals docutilsSupport [python docutils]
+    ++ lib.optionals gitSupport [git]
+    ++ lib.optionals monotoneSupport [monotone]
+    ++ lib.optionals bazaarSupport [breezy]
+    ++ lib.optionals cvsSupport [cvs cvsps perlPackages.Filechdir]
+    ++ lib.optionals subversionSupport [subversion]
+    ++ lib.optionals mercurialSupport [mercurial];
+
+  # A few markdown tests fail, but this is expected when using Text::Markdown
+  # instead of Text::Markdown::Discount.
+  patches = [ ./remove-markdown-tests.patch ];
+
+  postPatch = ''
+    sed -i s@/usr/bin/perl@${perlPackages.perl}/bin/perl@ pm_filter mdwn2man
+    sed -i s@/etc/ikiwiki@$out/etc@ Makefile.PL
+    sed -i /ENV{PATH}/d ikiwiki.in
+    # State the gcc dependency, and make the cgi use our wrapper
+    sed -i -e 's@$0@"'$out/bin/ikiwiki'"@' \
+        -e "s@'cc'@'${stdenv.cc}/bin/gcc'@" IkiWiki/Wrapper.pm
+  '';
+
+  configurePhase = "perl Makefile.PL PREFIX=$out";
+
+  postInstall = ''
+    for a in "$out/bin/"*; do
+      wrapProgram $a --suffix PERL5LIB : $PERL5LIB --prefix PATH : ${perlPackages.perl}/bin:$out/bin \
+      ${lib.optionalString gitSupport "--prefix PATH : ${git}/bin "} \
+      ${lib.optionalString monotoneSupport "--prefix PATH : ${monotone}/bin "} \
+      ${lib.optionalString bazaarSupport "--prefix PATH : ${breezy}/bin "} \
+      ${lib.optionalString cvsSupport "--prefix PATH : ${cvs}/bin "} \
+      ${lib.optionalString cvsSupport "--prefix PATH : ${cvsps}/bin "} \
+      ${lib.optionalString subversionSupport "--prefix PATH : ${subversion.out}/bin "} \
+      ${lib.optionalString mercurialSupport "--prefix PATH : ${mercurial}/bin "} \
+      ${lib.optionalString docutilsSupport ''--prefix PYTHONPATH : "$(toPythonPath ${docutils})" ''} \
+      ${lib.concatMapStrings (x: "--prefix PATH : ${x}/bin ") extraUtils}
+    done
+  '';
+
+  preCheck = ''
+    # Git needs some help figuring this out during test suite run.
+    export EMAIL="nobody@example.org"
+  '';
+
+  checkTarget = "test";
+  doCheck = true;
+
+  meta = {
+    description = "Wiki compiler, storing pages and history in a RCS";
+    homepage = "http://ikiwiki.info/";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.peti ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ikiwiki/remove-markdown-tests.patch b/nixpkgs/pkgs/applications/misc/ikiwiki/remove-markdown-tests.patch
new file mode 100644
index 000000000000..bae63a10bf67
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ikiwiki/remove-markdown-tests.patch
@@ -0,0 +1,35 @@
+diff --git a/t/mdwn.t b/t/mdwn.t
+index 966aad2..2756173 100755
+--- a/t/mdwn.t
++++ b/t/mdwn.t
+@@ -22,30 +22,13 @@ foreach my $multimarkdown (qw(1 0)) {
+ 		"<p>C. S. Lewis wrote books</p>\n",
+ 		"alphalist off by default for multimarkdown = $multimarkdown");
+ 
+-	like(IkiWiki::htmlize("foo", "foo", "mdwn",
+-		"This works[^1]\n\n[^1]: Sometimes it doesn't.\n"),
+-		qr{<p>This works.*fnref:1.*},
+-		"footnotes on by default for multimarkdown = $multimarkdown");
+-
+ 	$config{mdwn_footnotes} = 0;
+ 	unlike(IkiWiki::htmlize("foo", "foo", "mdwn",
+ 		"An unusual link label: [^1]\n\n[^1]: http://example.com/\n"),
+ 		qr{<p>An unusual link label: .*fnref:1.*},
+ 		"footnotes can be disabled for multimarkdown = $multimarkdown");
+-
+-	$config{mdwn_footnotes} = 1;
+-	like(IkiWiki::htmlize("foo", "foo", "mdwn",
+-		"This works[^1]\n\n[^1]: Sometimes it doesn't.\n"),
+-		qr{<p>This works.*fnref:1.*},
+-		"footnotes can be enabled for multimarkdown = $multimarkdown");
+ }
+ 
+-$config{mdwn_alpha_lists} = 1;
+-like(IkiWiki::htmlize("foo", "foo", "mdwn",
+-	"A. One\n".
+-	"B. Two\n"),
+-	qr{<ol\W}, "alphalist can be enabled");
+-
+ $config{mdwn_alpha_lists} = 0;
+ like(IkiWiki::htmlize("foo", "foo", "mdwn",
+ 	"A. One\n".
diff --git a/nixpkgs/pkgs/applications/misc/imag/default.nix b/nixpkgs/pkgs/applications/misc/imag/default.nix
new file mode 100644
index 000000000000..09f734df9a11
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/imag/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv
+, rustPlatform
+, fetchFromGitHub
+, llvmPackages
+, openssl
+, pkg-config
+, installShellFiles
+, Security
+, gitMinimal
+, util-linuxMinimal
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "imag";
+  version = "0.10.1";
+
+  src = fetchFromGitHub {
+    owner = "matthiasbeyer";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0f9915f083z5qqcxyavj0w6m973c8m1x7kfb89pah5agryy5mkaq";
+  };
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+  checkInputs = [ gitMinimal util-linuxMinimal ];
+
+  LIBCLANG_PATH = "${llvmPackages.libclang}/lib";
+
+  cargoSha256 = "0n8cw70qh8g4hfwfaxwwxbrrx5hm2z037z8kdhvdpqkxljl9189x";
+
+  checkPhase = ''
+    export HOME=$TMPDIR
+    git config --global user.email "nobody@example.com"
+    git config --global user.name "Nobody"
+
+    # UI tests uses executables directly, so we need to build them before
+    # launching the tests
+    cargo build
+  '' + (
+    # CLI uses the presence of a controlling TTY to check if arguments are
+    # passed in stdin, or in the command-line, so we use script to create
+    # a PTY for us.
+    if !stdenv.isDarwin then ''
+      script -qfec "cargo test --workspace"
+    '' else ''
+      script -q "cargo test --workspace"
+    ''
+  );
+
+  postInstall = ''
+    installShellCompletion target/imag.{bash,fish} --zsh target/_imag
+  '';
+
+  meta = with lib; {
+    description = "Commandline personal information management suite";
+    homepage = "https://imag-pim.org/";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ Br1ght0ne minijackson ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/inkcut/default.nix b/nixpkgs/pkgs/applications/misc/inkcut/default.nix
new file mode 100644
index 000000000000..4ca373ee2751
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/inkcut/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, wrapQtAppsHook
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "inkcut";
+  version = "2.1.3";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0px0xdv6kyzkkpmvryrdfavv1qy2xrqdxkpmhvx1gj649xcabv32";
+  };
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  propagatedBuildInputs = [
+    enamlx
+    twisted
+    lxml
+    qreactor
+    jsonpickle
+    pyserial
+    pycups
+    qtconsole
+    pyqt5
+  ];
+
+  # QtApplication.instance() does not work during tests?
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "inkcut"
+    "inkcut.cli"
+    "inkcut.console"
+    "inkcut.core"
+    "inkcut.device"
+    "inkcut.job"
+    "inkcut.joystick"
+    "inkcut.monitor"
+    "inkcut.preview"
+  ];
+
+  dontWrapQtApps = true;
+  makeWrapperArgs = [ "\${qtWrapperArgs[@]}" ];
+
+  postInstall = ''
+    mkdir -p $out/share/inkscape/extensions
+
+    cp plugins/inkscape/* $out/share/inkscape/extensions
+
+    sed -i "s|cmd = \['inkcut'\]|cmd = \['$out/bin/inkcut'\]|" $out/share/inkscape/extensions/inkcut_cut.py
+    sed -i "s|cmd = \['inkcut'\]|cmd = \['$out/bin/inkcut'\]|" $out/share/inkscape/extensions/inkcut_open.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.codelv.com/projects/inkcut/";
+    description = "Control 2D plotters, cutters, engravers, and CNC machines";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ raboof ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ipmicfg/default.nix b/nixpkgs/pkgs/applications/misc/ipmicfg/default.nix
new file mode 100644
index 000000000000..120affb988c0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ipmicfg/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "ipmicfg";
+  version = "1.32.0";
+  buildVersion = "200910";
+
+  src = fetchzip {
+    url = "https://www.supermicro.com/wftp/utility/IPMICFG/IPMICFG_${version}_build.${buildVersion}.zip";
+    sha256 = "1mncinwgx5d8jkvnvhccqlj2xp0xa5xjsab4r5mblmcnvm609rr3";
+  };
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/opt/ipmicfg"
+    cp Linux/64bit/* "$out/opt/ipmicfg"
+
+    patchelf \
+       --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+       --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc ]}" \
+       "$out/opt/ipmicfg/IPMICFG-Linux.x86_64"
+
+    ln -s "$out/opt/ipmicfg/IPMICFG-Linux.x86_64" "$out/bin/ipmicfg"
+  '';
+
+   dontPatchShebangs = true; # There are no scripts and it complains about null bytes.
+
+   meta = with lib; {
+     description = "Supermicro IPMI configuration tool";
+     homepage = "http://www.supermicro.com/products/nfo/ipmi.cfm";
+     license = licenses.unfree;
+     platforms = [ "x86_64-linux" ];
+     maintainers = with maintainers; [ sorki ];
+   };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ipmiview/default.nix b/nixpkgs/pkgs/applications/misc/ipmiview/default.nix
new file mode 100644
index 000000000000..0c7fc750cfd5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ipmiview/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv
+, fetchurl
+, makeDesktopItem
+, makeWrapper
+, patchelf
+, fontconfig
+, freetype
+, gcc
+, gcc-unwrapped
+, iputils
+, psmisc
+, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "IPMIView";
+  version = "2.18.0";
+  buildVersion = "201007";
+
+  src = fetchurl {
+    url = "https://www.supermicro.com/wftp/utility/IPMIView/Linux/IPMIView_${version}_build.${buildVersion}_bundleJRE_Linux_x64.tar.gz";
+    sha256 = "10cv63yhh81gjxahsg4y3zp4mjivc217m4z1vcpwvvnds46c65h8";
+  };
+
+  nativeBuildInputs = [ patchelf makeWrapper ];
+  buildPhase = with xorg;
+    let
+      stunnelBinary = if stdenv.hostPlatform.system == "x86_64-linux" then "linux/stunnel64"
+      else if stdenv.hostPlatform.system == "i686-linux" then "linux/stunnel32"
+      else throw "IPMIView is not supported on this platform";
+    in
+  ''
+    patchelf --set-rpath "${lib.makeLibraryPath [ libX11 libXext libXrender libXtst libXi ]}" ./jre/lib/amd64/libawt_xawt.so
+    patchelf --set-rpath "${lib.makeLibraryPath [ freetype ]}" ./jre/lib/amd64/libfontmanager.so
+    patchelf --set-rpath "${gcc.cc}/lib:$out/jre/lib/amd64/jli" --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" ./jre/bin/java
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" ./BMCSecurity/${stunnelBinary}
+  '';
+
+  desktopItem = makeDesktopItem rec {
+    name = "IPMIView";
+    exec = "IPMIView";
+    desktopName = name;
+    genericName = "Supermicro BMC manager";
+    categories = "Network";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -R . $out/
+
+    ln -s ${desktopItem}/share $out/share
+
+    # LD_LIBRARY_PATH: fontconfig is used from java code
+    # PATH: iputils is used for ping, and psmisc is for killall
+    # WORK_DIR: unfortunately the ikvm related binaries are loaded from
+    #           and user configuration is written to files in the CWD
+    makeWrapper $out/jre/bin/java $out/bin/IPMIView \
+      --set LD_LIBRARY_PATH "${lib.makeLibraryPath [ fontconfig gcc-unwrapped.lib ]}" \
+      --prefix PATH : "$out/jre/bin:${iputils}/bin:${psmisc}/bin" \
+      --add-flags "-jar $out/IPMIView20.jar" \
+      --run 'WORK_DIR=''${XDG_DATA_HOME:-~/.local/share}/ipmiview
+             mkdir -p $WORK_DIR
+             ln -snf '$out'/iKVM.jar '$out'/iKVM_ssl.jar '$out'/libiKVM* '$out'/libSharedLibrary* $WORK_DIR
+             cd $WORK_DIR'
+  '';
+
+  meta = with lib; {
+    license = licenses.unfree;
+    maintainers = with maintainers; [ vlaci ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/j4-dmenu-desktop/default.nix b/nixpkgs/pkgs/applications/misc/j4-dmenu-desktop/default.nix
new file mode 100644
index 000000000000..eca79c6521c0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/j4-dmenu-desktop/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, cmake, dmenu }:
+
+stdenv.mkDerivation rec {
+  pname = "j4-dmenu-desktop";
+  version = "2.18";
+
+  src = fetchFromGitHub {
+    owner = "enkore";
+    repo = pname;
+    rev = "r${version}";
+    sha256 = "1gxpgifzy0hnpd0ymw3r32amzr32z3bgb90ldjzl438p6h1q0i26";
+  };
+
+  postPatch = ''
+    sed -e 's,dmenu -i,${dmenu}/bin/dmenu -i,g' -i ./src/Main.hh
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  # tests are fetching an external git repository
+  cmakeFlags = [
+    "-DWITH_TESTS=OFF"
+    "-DWITH_GIT_CATCH=OFF"
+  ];
+
+  meta = with lib; {
+    description = "A wrapper for dmenu that recognize .desktop files";
+    homepage = "https://github.com/enkore/j4-dmenu-desktop";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jbidwatcher/default.nix b/nixpkgs/pkgs/applications/misc/jbidwatcher/default.nix
new file mode 100644
index 000000000000..0b8bcbfffac1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jbidwatcher/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, java, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "jbidwatcher";
+  version = "2.5.6";
+
+  src = fetchurl {
+    url = "http://www.jbidwatcher.com/download/JBidwatcher-${version}.jar";
+    sha256 = "1cw59wh72w1zzibs8x64dma3jc4hry64wjksqs52nc3vpnf0fzfr";
+  };
+
+  buildInputs = [ java ];
+
+  jarfile = "$out/share/java/${pname}/JBidwatcher.jar";
+
+  dontUnpack = true;
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    echo > "$out/bin/${pname}" "#!${runtimeShell}"
+    echo >>"$out/bin/${pname}" "${java}/bin/java -Xmx512m -jar ${jarfile}"
+    chmod +x "$out/bin/${pname}"
+    install -D -m644 ${src} ${jarfile}
+  '';
+
+  meta = {
+    homepage = "http://www.jbidwatcher.com/";
+    description = "Monitor and snipe Ebay auctions";
+    license = "LGPL";
+
+    longDescription = ''
+      A Java-based application allowing you to monitor auctions you're
+      not part of, submit bids, snipe (bid at the last moment), and
+      otherwise track your auction-site experience. It includes
+      adult-auction management, MANY currencies (pound, dollar (US,
+      Canada, Australian, and New Taiwanese) and euro, presently),
+      drag-and-drop of auction URLs, an original, unique and powerful
+      'multisniping' feature, a relatively nice UI, and is known to work
+      cleanly under Linux, Windows, Solaris, and MacOSX from the same
+      binary.
+    '';
+
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile b/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile
new file mode 100644
index 000000000000..c4ba46e2ac6a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile
@@ -0,0 +1,8 @@
+source "https://rubygems.org"
+gem "jekyll"
+# jekyll alone might be enough for most use-cases
+gem "jekyll-avatar"
+gem "jekyll-mentions"
+gem "jekyll-seo-tag"
+gem "jekyll-sitemap"
+gem "jemoji"
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile.lock b/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile.lock
new file mode 100644
index 000000000000..65c747c40a50
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile.lock
@@ -0,0 +1,102 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (6.1.0)
+      concurrent-ruby (~> 1.0, >= 1.0.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)
+    colorator (1.1.0)
+    concurrent-ruby (1.1.7)
+    em-websocket (0.5.2)
+      eventmachine (>= 0.12.9)
+      http_parser.rb (~> 0.6.0)
+    eventmachine (1.2.7)
+    ffi (1.13.1)
+    forwardable-extended (2.6.0)
+    gemoji (3.0.1)
+    html-pipeline (2.14.0)
+      activesupport (>= 2)
+      nokogiri (>= 1.4)
+    http_parser.rb (0.6.0)
+    i18n (1.8.5)
+      concurrent-ruby (~> 1.0)
+    jekyll (4.2.0)
+      addressable (~> 2.4)
+      colorator (~> 1.0)
+      em-websocket (~> 0.5)
+      i18n (~> 1.0)
+      jekyll-sass-converter (~> 2.0)
+      jekyll-watch (~> 2.0)
+      kramdown (~> 2.3)
+      kramdown-parser-gfm (~> 1.0)
+      liquid (~> 4.0)
+      mercenary (~> 0.4.0)
+      pathutil (~> 0.9)
+      rouge (~> 3.0)
+      safe_yaml (~> 1.0)
+      terminal-table (~> 2.0)
+    jekyll-avatar (0.7.0)
+      jekyll (>= 3.0, < 5.0)
+    jekyll-mentions (1.6.0)
+      html-pipeline (~> 2.3)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-sass-converter (2.1.0)
+      sassc (> 2.0.1, < 3.0)
+    jekyll-seo-tag (2.7.1)
+      jekyll (>= 3.8, < 5.0)
+    jekyll-sitemap (1.4.0)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-watch (2.2.1)
+      listen (~> 3.0)
+    jemoji (0.12.0)
+      gemoji (~> 3.0)
+      html-pipeline (~> 2.2)
+      jekyll (>= 3.0, < 5.0)
+    kramdown (2.3.0)
+      rexml
+    kramdown-parser-gfm (1.1.0)
+      kramdown (~> 2.0)
+    liquid (4.0.3)
+    listen (3.3.3)
+      rb-fsevent (~> 0.10, >= 0.10.3)
+      rb-inotify (~> 0.9, >= 0.9.10)
+    mercenary (0.4.0)
+    mini_portile2 (2.4.0)
+    minitest (5.14.2)
+    nokogiri (1.10.10)
+      mini_portile2 (~> 2.4.0)
+    pathutil (0.16.2)
+      forwardable-extended (~> 2.6)
+    public_suffix (4.0.6)
+    rb-fsevent (0.10.4)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    rexml (3.2.4)
+    rouge (3.26.0)
+    safe_yaml (1.0.5)
+    sassc (2.4.0)
+      ffi (~> 1.9)
+    terminal-table (2.0.0)
+      unicode-display_width (~> 1.1, >= 1.1.1)
+    tzinfo (2.0.3)
+      concurrent-ruby (~> 1.0)
+    unicode-display_width (1.7.0)
+    zeitwerk (2.4.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  jekyll
+  jekyll-avatar
+  jekyll-mentions
+  jekyll-seo-tag
+  jekyll-sitemap
+  jemoji
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/basic/gemset.nix b/nixpkgs/pkgs/applications/misc/jekyll/basic/gemset.nix
new file mode 100644
index 000000000000..cc7be93510c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/basic/gemset.nix
@@ -0,0 +1,424 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pflc2fch1bbgzk1rqgj21l6mgx025l92kd9arxjls98nf5am44v";
+      type = "gem";
+    };
+    version = "6.1.0";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  colorator = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vnxrbhi7cq3p4y2v9iwd10v1c7l15is4var14hwnb2jip4fyjzz";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  em-websocket = {
+    dependencies = ["eventmachine" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mg1mx735a0k1l8y14ps2mxdwhi5r01ikydf34b0sp60v66nvbkb";
+      type = "gem";
+    };
+    version = "0.5.2";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12lpwaw82bb0rm9f52v1498bpba8aj2l2q359mkwbxsswhpga5af";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  forwardable-extended = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  gemoji = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vgklpmhdz98xayln5hhqv4ffdyrglzwdixkn5gsk9rj94pkymc0";
+      type = "gem";
+    };
+    version = "3.0.1";
+  };
+  html-pipeline = {
+    dependencies = ["activesupport" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "080sn9z1a64gv04p318jz10y6lv6qd3avip08rrcmq9k4ihai0f1";
+      type = "gem";
+    };
+    version = "2.14.0";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153sx77p16vawrs4qpkv7qlzf9v5fks4g7xqcj1dwk40i6g7rfzk";
+      type = "gem";
+    };
+    version = "1.8.5";
+  };
+  jekyll = {
+    dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cqkh78jw8scrajyx5nla0vwm9fvp2qql3kdcvvplcq9mazy8snq";
+      type = "gem";
+    };
+    version = "4.2.0";
+  };
+  jekyll-avatar = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03bys2pl60vq92skfhlfqr2j68zhfjc86jffpg32f94wzjk8n0wk";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  jekyll-mentions = {
+    dependencies = ["html-pipeline" "jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n8y67plydfmay3jn865igvgb3h6s2crk8kq7ydk3wmn9h103s1r";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  jekyll-sass-converter = {
+    dependencies = ["sassc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04ncr44wrilz26ayqwlg7379yjnkb29mvx4j04i62b7czmdrc9dv";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  jekyll-seo-tag = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fsi75hymk2wswy216fs224p5ycrzjw1kshw1bsl5czhv42wr2w3";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  jekyll-sitemap = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0622rwsn5i0m5xcyzdn86l68wgydqwji03lqixdfm1f1xdfqrq0d";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  jekyll-watch = {
+    dependencies = ["listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  jemoji = {
+    dependencies = ["gemoji" "html-pipeline" "jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09sxbnrqz5vf6rxmh6lzism31gz2g3hw86ymg37r1ccknclv3cp9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  kramdown = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vmw752c26ny2jwl0npn0gbyqwgz4hdmlpxnsld9qi9xhk5b1qh7";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  liquid = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zhg5ha8zy8zw9qr3fl4wgk4r5940n4128xm2pn4shpbzdbsj5by";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zpcgha7g33wvy2xbbc663cbjyvg9l1325lg3gzgcn3baydr9rha";
+      type = "gem";
+    };
+    version = "3.3.3";
+  };
+  mercenary = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "170y2cvx51gm3cm3nhdf7j36sxnkh6vv8ls36p90ric7w8w16h4v";
+      type = "gem";
+    };
+    version = "5.14.2";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xmf60nj5kg9vaj5bysy308687sgmkasgx06vbbnf94p52ih7si2";
+      type = "gem";
+    };
+    version = "1.10.10";
+  };
+  pathutil = {
+    dependencies = ["forwardable-extended"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k9bsj7ni0g2fd7scyyy1sk9dy2pg9akniahab0iznvjmhn54h87";
+      type = "gem";
+    };
+    version = "0.10.4";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mkvkcw9fhpaizrhca0pdgjcrbns48rlz4g6lavl5gjjq3rk2sq3";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b4b300i3m4m4kw7w1n9wgxwy16zccnb7271miksyzd0wq5b9pm3";
+      type = "gem";
+    };
+    version = "3.26.0";
+  };
+  safe_yaml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  sassc = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18rbrh464ysqbdv53iwj0r8frshn65566kyj044cp3x9c2754jwh";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1av5jzdij6vriwmf8crfvwaz2kik721ymg8svpxj3kx47kfha5vg";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1746czsjarixq0x05f7p3hpzi38ldg6wxnxxw74kbjzh1sdjgmpl";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/default.nix b/nixpkgs/pkgs/applications/misc/jekyll/default.nix
new file mode 100644
index 000000000000..54857d614206
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/default.nix
@@ -0,0 +1,55 @@
+{ lib, bundlerApp, ruby
+, writeShellScriptBin, makeWrapper
+, withOptionalDependencies ? false
+}:
+
+let
+  rubyWrapper = writeShellScriptBin "ruby" ''
+    if [[ "$#" -eq 2 ]]; then
+      if [[ "''${1##*/}" == "bundle" && "$2" == "install" ]]; then
+        # See https://github.com/NixOS/nixpkgs/issues/58126 for more details.
+        echo 'Skipping "bundle install" as it fails due to the Nix wrapper.'
+        echo 'Please enter the new directory and run the following commands to serve the page:'
+        echo 'nix-shell -p bundler --run "bundle install --gemfile=Gemfile --path vendor/cache"'
+        echo 'nix-shell -p bundler --run "bundle exec jekyll serve"'
+        exit 0
+        # The following nearly works:
+        unset BUNDLE_FROZEN
+        exec ${ruby}/bin/ruby "$@" --gemfile=Gemfile --path=vendor/cache
+      fi
+    fi
+    # Else: Don't modify the arguments:
+    exec ${ruby}/bin/ruby "$@"
+  '';
+in bundlerApp {
+  pname = "jekyll";
+  exes = [ "jekyll" ];
+
+  inherit ruby;
+  gemdir = if withOptionalDependencies
+    then ./full
+    else ./basic;
+
+  buildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/jekyll --prefix PATH : ${rubyWrapper}/bin
+  '';
+
+  meta = with lib; {
+    description = "A blog-aware, static site generator, written in Ruby";
+    longDescription = ''
+      Jekyll is a simple, blog-aware, static site generator, written in Ruby.
+      Think of it like a file-based CMS, without all the complexity. Jekyll
+      takes your content, renders Markdown and Liquid templates, and spits out a
+      complete, static website ready to be served by Apache, Nginx or another
+      web server. Jekyll is the engine behind GitHub Pages, which you can use to
+      host sites right from your GitHub repositories.
+    '';
+    homepage    = "https://jekyllrb.com/";
+    #changelog   = "https://raw.githubusercontent.com/jekyll/jekyll/v${version}/History.markdown";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ primeos pesterhazy ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile b/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile
new file mode 100644
index 000000000000..2e72350f7e5e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile
@@ -0,0 +1,28 @@
+source "https://rubygems.org"
+
+gem "jekyll"
+
+gem "jekyll-avatar"
+gem "jekyll-mentions"
+gem "jekyll-seo-tag"
+gem "jekyll-sitemap"
+gem "jemoji"
+
+# Optional dependencies:
+gem "jekyll-coffeescript"
+#gem "jekyll-docs"
+gem "jekyll-feed", "~> 0.9"
+gem "jekyll-gist"
+gem "jekyll-paginate"
+gem "jekyll-polyglot"
+gem "jekyll-redirect-from"
+gem "kramdown-syntax-coderay"
+gem "mime-types", "~> 3.0"
+gem "rdoc", "~> 6.0"
+gem "tomlrb", "~> 1.2"
+
+platform :ruby, :mswin, :mingw, :x64_mingw do
+  gem "classifier-reborn", "~> 2.2"
+  gem "liquid-c", "~> 4.0"
+  gem "yajl-ruby", "~> 1.4"
+end
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile.lock b/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile.lock
new file mode 100644
index 000000000000..969909ca6d0a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile.lock
@@ -0,0 +1,158 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (6.1.0)
+      concurrent-ruby (~> 1.0, >= 1.0.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)
+    classifier-reborn (2.2.0)
+      fast-stemmer (~> 1.0)
+    coderay (1.1.3)
+    coffee-script (2.4.1)
+      coffee-script-source
+      execjs
+    coffee-script-source (1.12.2)
+    colorator (1.1.0)
+    concurrent-ruby (1.1.7)
+    em-websocket (0.5.2)
+      eventmachine (>= 0.12.9)
+      http_parser.rb (~> 0.6.0)
+    eventmachine (1.2.7)
+    execjs (2.7.0)
+    faraday (1.1.0)
+      multipart-post (>= 1.2, < 3)
+      ruby2_keywords
+    fast-stemmer (1.0.2)
+    ffi (1.13.1)
+    forwardable-extended (2.6.0)
+    gemoji (3.0.1)
+    html-pipeline (2.14.0)
+      activesupport (>= 2)
+      nokogiri (>= 1.4)
+    http_parser.rb (0.6.0)
+    i18n (1.8.5)
+      concurrent-ruby (~> 1.0)
+    jekyll (4.2.0)
+      addressable (~> 2.4)
+      colorator (~> 1.0)
+      em-websocket (~> 0.5)
+      i18n (~> 1.0)
+      jekyll-sass-converter (~> 2.0)
+      jekyll-watch (~> 2.0)
+      kramdown (~> 2.3)
+      kramdown-parser-gfm (~> 1.0)
+      liquid (~> 4.0)
+      mercenary (~> 0.4.0)
+      pathutil (~> 0.9)
+      rouge (~> 3.0)
+      safe_yaml (~> 1.0)
+      terminal-table (~> 2.0)
+    jekyll-avatar (0.7.0)
+      jekyll (>= 3.0, < 5.0)
+    jekyll-coffeescript (2.0.0)
+      coffee-script (~> 2.2)
+      coffee-script-source (~> 1.12)
+    jekyll-feed (0.15.1)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-gist (1.5.0)
+      octokit (~> 4.2)
+    jekyll-mentions (1.6.0)
+      html-pipeline (~> 2.3)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-paginate (1.1.0)
+    jekyll-polyglot (1.3.3)
+      jekyll (>= 3.0)
+    jekyll-redirect-from (0.16.0)
+      jekyll (>= 3.3, < 5.0)
+    jekyll-sass-converter (2.1.0)
+      sassc (> 2.0.1, < 3.0)
+    jekyll-seo-tag (2.7.1)
+      jekyll (>= 3.8, < 5.0)
+    jekyll-sitemap (1.4.0)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-watch (2.2.1)
+      listen (~> 3.0)
+    jemoji (0.12.0)
+      gemoji (~> 3.0)
+      html-pipeline (~> 2.2)
+      jekyll (>= 3.0, < 5.0)
+    kramdown (2.3.0)
+      rexml
+    kramdown-parser-gfm (1.1.0)
+      kramdown (~> 2.0)
+    kramdown-syntax-coderay (1.0.1)
+      coderay (~> 1.1)
+      kramdown (~> 2.0)
+    liquid (4.0.3)
+    liquid-c (4.0.0)
+      liquid (>= 3.0.0)
+    listen (3.3.3)
+      rb-fsevent (~> 0.10, >= 0.10.3)
+      rb-inotify (~> 0.9, >= 0.9.10)
+    mercenary (0.4.0)
+    mime-types (3.3.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2020.1104)
+    mini_portile2 (2.4.0)
+    minitest (5.14.2)
+    multipart-post (2.1.1)
+    nokogiri (1.10.10)
+      mini_portile2 (~> 2.4.0)
+    octokit (4.19.0)
+      faraday (>= 0.9)
+      sawyer (~> 0.8.0, >= 0.5.3)
+    pathutil (0.16.2)
+      forwardable-extended (~> 2.6)
+    public_suffix (4.0.6)
+    rb-fsevent (0.10.4)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    rdoc (6.2.1)
+    rexml (3.2.4)
+    rouge (3.26.0)
+    ruby2_keywords (0.0.2)
+    safe_yaml (1.0.5)
+    sassc (2.4.0)
+      ffi (~> 1.9)
+    sawyer (0.8.2)
+      addressable (>= 2.3.5)
+      faraday (> 0.8, < 2.0)
+    terminal-table (2.0.0)
+      unicode-display_width (~> 1.1, >= 1.1.1)
+    tomlrb (1.3.0)
+    tzinfo (2.0.3)
+      concurrent-ruby (~> 1.0)
+    unicode-display_width (1.7.0)
+    yajl-ruby (1.4.1)
+    zeitwerk (2.4.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  classifier-reborn (~> 2.2)
+  jekyll
+  jekyll-avatar
+  jekyll-coffeescript
+  jekyll-feed (~> 0.9)
+  jekyll-gist
+  jekyll-mentions
+  jekyll-paginate
+  jekyll-polyglot
+  jekyll-redirect-from
+  jekyll-seo-tag
+  jekyll-sitemap
+  jemoji
+  kramdown-syntax-coderay
+  liquid-c (~> 4.0)
+  mime-types (~> 3.0)
+  rdoc (~> 6.0)
+  tomlrb (~> 1.2)
+  yajl-ruby (~> 1.4)
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/full/gemset.nix b/nixpkgs/pkgs/applications/misc/jekyll/full/gemset.nix
new file mode 100644
index 000000000000..bfbe428c861d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/full/gemset.nix
@@ -0,0 +1,737 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pflc2fch1bbgzk1rqgj21l6mgx025l92kd9arxjls98nf5am44v";
+      type = "gem";
+    };
+    version = "6.1.0";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  classifier-reborn = {
+    dependencies = ["fast-stemmer"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04nxmm5b7j7r0ij9pcpdr7xqpig559gfzrw042ycxcfyav2pv6ij";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  coffee-script = {
+    dependencies = ["coffee-script-source" "execjs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rc7scyk7mnpfxqv5yy4y5q1hx3i7q3ahplcp4bq2g5r24g2izl2";
+      type = "gem";
+    };
+    version = "2.4.1";
+  };
+  coffee-script-source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1907v9q1zcqmmyqzhzych5l7qifgls2rlbnbhy5vzyr7i7yicaz1";
+      type = "gem";
+    };
+    version = "1.12.2";
+  };
+  colorator = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vnxrbhi7cq3p4y2v9iwd10v1c7l15is4var14hwnb2jip4fyjzz";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  em-websocket = {
+    dependencies = ["eventmachine" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mg1mx735a0k1l8y14ps2mxdwhi5r01ikydf34b0sp60v66nvbkb";
+      type = "gem";
+    };
+    version = "0.5.2";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  execjs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16dapwi5pivrl25r4lkr1mxjrzkznj4wlcb08fzkmxnj4g5c6y35";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  fast-stemmer = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0688clyk4xxh3kdb18vi089k90mca8ji5fwaknh3da5wrzcrzanh";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12lpwaw82bb0rm9f52v1498bpba8aj2l2q359mkwbxsswhpga5af";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  forwardable-extended = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  gemoji = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vgklpmhdz98xayln5hhqv4ffdyrglzwdixkn5gsk9rj94pkymc0";
+      type = "gem";
+    };
+    version = "3.0.1";
+  };
+  html-pipeline = {
+    dependencies = ["activesupport" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "080sn9z1a64gv04p318jz10y6lv6qd3avip08rrcmq9k4ihai0f1";
+      type = "gem";
+    };
+    version = "2.14.0";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153sx77p16vawrs4qpkv7qlzf9v5fks4g7xqcj1dwk40i6g7rfzk";
+      type = "gem";
+    };
+    version = "1.8.5";
+  };
+  jekyll = {
+    dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cqkh78jw8scrajyx5nla0vwm9fvp2qql3kdcvvplcq9mazy8snq";
+      type = "gem";
+    };
+    version = "4.2.0";
+  };
+  jekyll-avatar = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03bys2pl60vq92skfhlfqr2j68zhfjc86jffpg32f94wzjk8n0wk";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  jekyll-coffeescript = {
+    dependencies = ["coffee-script" "coffee-script-source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17fjk0bfm0rs3myid24y2scsf5vzzza185bissjmcc44cbxp571j";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  jekyll-feed = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zxqkrnix0xiw98531h5ga6h69jhzlx2jh9qhvcl67p8nq3sgza9";
+      type = "gem";
+    };
+    version = "0.15.1";
+  };
+  jekyll-gist = {
+    dependencies = ["octokit"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03wz9j6yq3552nzf4g71qrdm9pfdgbm68abml9sjjgiaan1n8ns9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  jekyll-mentions = {
+    dependencies = ["html-pipeline" "jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n8y67plydfmay3jn865igvgb3h6s2crk8kq7ydk3wmn9h103s1r";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  jekyll-paginate = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  jekyll-polyglot = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "4ad9140733250b65bc1ffab84650c588d036d23129e82f0349d31e56f1fe10a8";
+      type = "gem";
+    };
+    version = "1.3.3";
+  };
+  jekyll-redirect-from = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nz6kd6qsa160lmjmls4zgx7fwcpp8ac07mpzy80z6zgd7jwldb6";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  jekyll-sass-converter = {
+    dependencies = ["sassc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04ncr44wrilz26ayqwlg7379yjnkb29mvx4j04i62b7czmdrc9dv";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  jekyll-seo-tag = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fsi75hymk2wswy216fs224p5ycrzjw1kshw1bsl5czhv42wr2w3";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  jekyll-sitemap = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0622rwsn5i0m5xcyzdn86l68wgydqwji03lqixdfm1f1xdfqrq0d";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  jekyll-watch = {
+    dependencies = ["listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  jemoji = {
+    dependencies = ["gemoji" "html-pipeline" "jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09sxbnrqz5vf6rxmh6lzism31gz2g3hw86ymg37r1ccknclv3cp9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  kramdown = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vmw752c26ny2jwl0npn0gbyqwgz4hdmlpxnsld9qi9xhk5b1qh7";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  kramdown-syntax-coderay = {
+    dependencies = ["coderay" "kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03vpfpmxcdbqyh6kxrjf5xa9qgvwqj0cfv2khz5h32fp5f5dmrda";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  liquid = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zhg5ha8zy8zw9qr3fl4wgk4r5940n4128xm2pn4shpbzdbsj5by";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  liquid-c = {
+    dependencies = ["liquid"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ibcpajsgq530xrz3dk578mfvivrlfd624j6ifz6ms4w69j8jqj6";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zpcgha7g33wvy2xbbc663cbjyvg9l1325lg3gzgcn3baydr9rha";
+      type = "gem";
+    };
+    version = "3.3.3";
+  };
+  mercenary = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj12l9qk62anvk9bjvandpa6vy4xslil15wl6wlivyf51z773vh";
+      type = "gem";
+    };
+    version = "3.3.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ipjyfwn9nlvpcl8knq3jk4g5f12cflwdbaiqxcq1s7vwfwfxcag";
+      type = "gem";
+    };
+    version = "3.2020.1104";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "170y2cvx51gm3cm3nhdf7j36sxnkh6vv8ls36p90ric7w8w16h4v";
+      type = "gem";
+    };
+    version = "5.14.2";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xmf60nj5kg9vaj5bysy308687sgmkasgx06vbbnf94p52ih7si2";
+      type = "gem";
+    };
+    version = "1.10.10";
+  };
+  octokit = {
+    dependencies = ["faraday" "sawyer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dz8na8fk445yqrwpkl31fimnap7p4xf9m9qm9i7cpvaxxgk2n24";
+      type = "gem";
+    };
+    version = "4.19.0";
+  };
+  pathutil = {
+    dependencies = ["forwardable-extended"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k9bsj7ni0g2fd7scyyy1sk9dy2pg9akniahab0iznvjmhn54h87";
+      type = "gem";
+    };
+    version = "0.10.4";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rdoc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08862mr1575j8g32wma4pv2qwj4xpllk29i5j61hgf9nwn64afhc";
+      type = "gem";
+    };
+    version = "6.2.1";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mkvkcw9fhpaizrhca0pdgjcrbns48rlz4g6lavl5gjjq3rk2sq3";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b4b300i3m4m4kw7w1n9wgxwy16zccnb7271miksyzd0wq5b9pm3";
+      type = "gem";
+    };
+    version = "3.26.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17pcc0wgvh3ikrkr7bm3nx0qhyiqwidd13ij0fa50k7gsbnr2p0l";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
+  safe_yaml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  sassc = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yrdchs3psh583rjapkv33mljdivggqn99wkydkjdckcjn43j3cz";
+      type = "gem";
+    };
+    version = "0.8.2";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18rbrh464ysqbdv53iwj0r8frshn65566kyj044cp3x9c2754jwh";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00x5y9h4fbvrv4xrjk4cqlkm4vq8gv73ax4alj3ac2x77zsnnrk8";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1av5jzdij6vriwmf8crfvwaz2kik721ymg8svpxj3kx47kfha5vg";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  yajl-ruby = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16v0w5749qjp13xhjgr2gcsvjv6mf35br7iqwycix1n2h7kfcckf";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1746czsjarixq0x05f7p3hpzi38ldg6wxnxxw74kbjzh1sdjgmpl";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/update.sh b/nixpkgs/pkgs/applications/misc/jekyll/update.sh
new file mode 100755
index 000000000000..528f1062c733
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/update.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p bundix zlib
+
+set -o errexit
+set -o nounset
+
+readonly BASEDIR="$(dirname $(readlink -f $0))"
+
+for directory in "basic" "full"; do
+  pushd "$BASEDIR/$directory"
+  rm -f Gemfile.lock gemset.nix
+  bundix --magic
+  rm -rf .bundle vendor
+  popd
+done
diff --git a/nixpkgs/pkgs/applications/misc/jgmenu/default.nix b/nixpkgs/pkgs/applications/misc/jgmenu/default.nix
new file mode 100644
index 000000000000..d0b9eff35f4f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jgmenu/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, python3Packages
+, pango
+, librsvg
+, libxml2
+, menu-cache
+, xorg
+, makeWrapper
+, enableXfcePanelApplet ? false
+, xfce
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jgmenu";
+  version = "4.2.1";
+
+  src = fetchFromGitHub {
+    owner = "johanmalm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "00q4v31x4q7nm61wda4v0gznv18bm3qs8mp04pcns60qacdv9lkk";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+    python3Packages.wrapPython
+  ];
+
+  buildInputs = [
+    pango
+    librsvg
+    libxml2
+    menu-cache
+    xorg.libXinerama
+    xorg.libXrandr
+    python3Packages.python
+  ] ++ lib.optionals enableXfcePanelApplet [
+    gtk3
+    xfce.libxfce4util
+    xfce.xfce4-panel
+  ];
+
+  configureFlags = [
+  ]
+  ++ lib.optionals enableXfcePanelApplet [
+    "--with-xfce4-panel-applet"
+  ];
+
+  postFixup = ''
+    wrapPythonProgramsIn "$out/lib/jgmenu"
+    for f in $out/bin/jgmenu{,_run}; do
+      wrapProgram $f --prefix PATH : $out/bin
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/johanmalm/jgmenu";
+    description = "Small X11 menu intended to be used with openbox and tint2";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jigdo/default.nix b/nixpkgs/pkgs/applications/misc/jigdo/default.nix
new file mode 100644
index 000000000000..b4573a816359
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jigdo/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, db, gtk2, bzip2 }:
+
+stdenv.mkDerivation {
+  name = "jigdo-0.7.3";
+
+  # Debian sources
+  src = fetchurl {
+    url = "http://ftp.de.debian.org/debian/pool/main/j/jigdo/jigdo_0.7.3.orig.tar.gz";
+    sha256 = "1qvqzgzb0dzq82fa1ffs6hyij655rajnfwkljk1y0mnkygnha1xv";
+  };
+
+  patches = [
+    (fetchurl {
+      url = "http://ftp.de.debian.org/debian/pool/main/j/jigdo/jigdo_0.7.3-4.diff.gz";
+      sha256 = "03zsh57fijciiv23lf55k6fbfhhzm866xjhx83x54v5s1g2h6m8y";
+    })
+    ./sizewidth.patch
+  ];
+
+  buildInputs = [ db gtk2 bzip2 ];
+
+  configureFlags = [ "--without-libdb" ];
+
+  meta = {
+    description = "Download utility that can fetch files from several sources simultaneously";
+    homepage = "http://atterer.net/jigdo/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jigdo/sizewidth.patch b/nixpkgs/pkgs/applications/misc/jigdo/sizewidth.patch
new file mode 100644
index 000000000000..17b1749fcf77
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jigdo/sizewidth.patch
@@ -0,0 +1,40 @@
+diff --git i/src/mkimage.cc w/src/mkimage.cc
+index 02e65b1..b263796 100755
+--- i/src/mkimage.cc
++++ w/src/mkimage.cc
+@@ -285,27 +285,27 @@ bostream& JigdoDescVec::put(bostream& file, MD5Sum* md) const {
+ //______________________________________________________________________
+ 
+ namespace {
+-  const int SIZE_WIDTH = 12;
++  const int MKIMAGE_SIZE_WIDTH = 12;
+ }
+ 
+ ostream& JigdoDesc::ImageInfo::put(ostream& s) const {
+-  s << "image-info  " << setw(SIZE_WIDTH) << size() << "              "
++  s << "image-info  " << setw(MKIMAGE_SIZE_WIDTH) << size() << "              "
+     << md5() << ' ' << blockLength() << '\n';
+   return s;
+ }
+ ostream& JigdoDesc::UnmatchedData::put(ostream& s) const {
+-  s << "in-template " << setw(SIZE_WIDTH) << offset() << ' '
+-    << setw(SIZE_WIDTH) << size() << '\n';
++  s << "in-template " << setw(MKIMAGE_SIZE_WIDTH) << offset() << ' '
++    << setw(MKIMAGE_SIZE_WIDTH) << size() << '\n';
+   return s;
+ }
+ ostream& JigdoDesc::MatchedFile::put(ostream& s) const {
+-  s << "need-file   " << setw(SIZE_WIDTH) << offset() << ' '
+-    << setw(SIZE_WIDTH) << size() << ' ' << md5() << ' ' << rsync() << '\n';
++  s << "need-file   " << setw(MKIMAGE_SIZE_WIDTH) << offset() << ' '
++    << setw(MKIMAGE_SIZE_WIDTH) << size() << ' ' << md5() << ' ' << rsync() << '\n';
+   return s;
+ }
+ ostream& JigdoDesc::WrittenFile::put(ostream& s) const {
+-  s << "have-file   " << setw(SIZE_WIDTH) << offset() << ' '
+-    << setw(SIZE_WIDTH) << size() << ' ' << md5() << ' ' << rsync() << '\n';
++  s << "have-file   " << setw(MKIMAGE_SIZE_WIDTH) << offset() << ' '
++    << setw(MKIMAGE_SIZE_WIDTH) << size() << ' ' << md5() << ' ' << rsync() << '\n';
+   return s;
+ }
+ 
diff --git a/nixpkgs/pkgs/applications/misc/joplin-desktop/default.nix b/nixpkgs/pkgs/applications/misc/joplin-desktop/default.nix
new file mode 100644
index 000000000000..8433cc9c87f6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/joplin-desktop/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, appimageTools, fetchurl, gsettings-desktop-schemas, gtk3, undmg }:
+
+let
+  pname = "joplin-desktop";
+  version = "1.6.7";
+  name = "${pname}-${version}";
+
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "Unsupported system: ${system}";
+
+  suffix = {
+    x86_64-linux = "AppImage";
+    x86_64-darwin = "dmg";
+  }.${system} or throwSystem;
+
+  src = fetchurl {
+    url = "https://github.com/laurent22/joplin/releases/download/v${version}/Joplin-${version}.${suffix}";
+    sha256 = {
+      x86_64-linux = "0g1fac8l0w0b11bs4c9mi2k426hcqa7q4ks48fzxq0yl9ricjlrb";
+      x86_64-darwin = "1h5crdjzvjg30hdmh3fkygxi5gy714wpz4gwy5dn8s3xr12mmgka";
+    }.${system} or throwSystem;
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+
+  meta = with lib; {
+    description = "An open source note taking and to-do application with synchronisation capabilities";
+    longDescription = ''
+      Joplin is a free, open source note taking and to-do application, which can
+      handle a large number of notes organised into notebooks. The notes are
+      searchable, can be copied, tagged and modified either from the
+      applications directly or from your own text editor. The notes are in
+      Markdown format.
+    '';
+    homepage = "https://joplinapp.org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hugoreeves ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+
+  linux = appimageTools.wrapType2 rec {
+    inherit name src meta;
+
+    profile = ''
+      export LC_ALL=C.UTF-8
+      export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS
+    '';
+
+    multiPkgs = null; # no 32bit needed
+    extraPkgs = appimageTools.defaultFhsEnvArgs.multiPkgs;
+    extraInstallCommands = ''
+      mv $out/bin/{${name},${pname}}
+      install -Dm444 ${appimageContents}/@joplinapp-desktop.desktop -t $out/share/applications
+      install -Dm444 ${appimageContents}/@joplinapp-desktop.png -t $out/share/pixmaps
+      substituteInPlace $out/share/applications/@joplinapp-desktop.desktop \
+        --replace 'Exec=AppRun' 'Exec=${pname}'
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit name src meta;
+
+    nativeBuildInputs = [ undmg ];
+
+    sourceRoot = "Joplin.app";
+
+    installPhase = ''
+      mkdir -p $out/Applications/Joplin.app
+      cp -R . $out/Applications/Joplin.app
+    '';
+  };
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/misc/josm/default.nix b/nixpkgs/pkgs/applications/misc/josm/default.nix
new file mode 100644
index 000000000000..28c7de12c8c8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/josm/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, fetchsvn, makeWrapper, unzip, jre, libXxf86vm }:
+let
+  pname = "josm";
+  version = "17428";
+  srcs = {
+    jar = fetchurl {
+      url = "https://josm.openstreetmap.de/download/josm-snapshot-${version}.jar";
+      sha256 = "0fhnq0836jp72br808hhw1ki70zc9wqcwfhnizb8pzjvs4wgx36w";
+    };
+    macosx = fetchurl {
+      url = "https://josm.openstreetmap.de/download/macosx/josm-macosx-${version}.zip";
+      sha256 = "126yy6y7mkpqzkrkqkzzn3mwnl1yjkmd5k895k7mmk2inmcsvqgm";
+    };
+    pkg = fetchsvn {
+      url = "https://josm.openstreetmap.de/svn/trunk/native/linux/tested";
+      rev = version;
+      sha256 = "198kq490y5wzxz0a5prb9anykq6dzg0imxfkchsas233inbzggql";
+    };
+  };
+in
+stdenv.mkDerivation {
+  inherit pname version;
+
+  dontUnpack = true;
+
+  buildInputs = lib.optionals (!stdenv.isDarwin) [ jre makeWrapper ];
+
+  installPhase =
+    if stdenv.isDarwin then ''
+      mkdir -p $out/Applications
+      ${unzip}/bin/unzip ${srcs.macosx} 'JOSM.app/*' -d $out/Applications
+    '' else ''
+      install -Dm644 ${srcs.jar} $out/share/josm/josm.jar
+      cp -R ${srcs.pkg}/usr/share $out
+
+      # Add libXxf86vm to path because it is needed by at least Kendzi3D plugin
+      makeWrapper ${jre}/bin/java $out/bin/josm \
+        --add-flags "-Djosm.restart=true -Djava.net.useSystemProxies=true" \
+        --add-flags "-jar $out/share/josm/josm.jar" \
+        --prefix LD_LIBRARY_PATH ":" '${libXxf86vm}/lib'
+    '';
+
+  meta = with lib; {
+    description = "An extensible editor for OpenStreetMap";
+    homepage = "https://josm.openstreetmap.de/";
+    changelog = "https://josm.openstreetmap.de/wiki/Changelog";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ rycee sikmir ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jotta-cli/default.nix b/nixpkgs/pkgs/applications/misc/jotta-cli/default.nix
new file mode 100644
index 000000000000..ad7ca25324d6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jotta-cli/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchzip }:
+
+let
+  arch = "amd64";
+in
+stdenv.mkDerivation rec {
+  pname = "jotta-cli";
+  version = "0.7.35160";
+  src = fetchzip {
+      url = "https://repo.jotta.us/archives/linux/${arch}/jotta-cli-${version}_linux_${arch}.tar.gz";
+      sha256 = "00fzycy199l9y738cj71s88qz96ppczb5sqsk3x9w4jj4m6ks239";
+      stripRoot = false;
+    };
+
+  installPhase = ''
+    install -D usr/bin/jotta-cli usr/bin/jottad -t $out/bin/
+    mkdir -p $out/share/bash-completion/completions
+  '';
+
+  postFixup = ''
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $out/bin/jotta-cli
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $out/bin/jottad
+    $out/bin/jotta-cli completion > $out/share/bash-completion/completions/jotta-cli.bash
+  '';
+
+  meta = with lib; {
+    description  = "Jottacloud CLI";
+    homepage     = "https://www.jottacloud.com/";
+    downloadPage = "https://repo.jotta.us/archives/linux/";
+    maintainers  = with maintainers; [ evenbrenden ];
+    license      = licenses.unfree;
+    platforms    = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jp2a/default.nix b/nixpkgs/pkgs/applications/misc/jp2a/default.nix
new file mode 100644
index 000000000000..a48716a3dd2b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jp2a/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, libjpeg, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.7";
+  pname = "jp2a";
+
+  src = fetchFromGitHub {
+    owner = "cslarsen";
+    repo = "jp2a";
+    rev = "v${version}";
+    sha256 = "12a1z9ba2j16y67f41y8ax5sgv1wdjd71pg7circdxkj263n78ql";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libjpeg ];
+
+  meta = with lib; {
+    homepage = "https://csl.name/jp2a/";
+    description = "A small utility that converts JPG images to ASCII";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jrnl/default.nix b/nixpkgs/pkgs/applications/misc/jrnl/default.nix
new file mode 100644
index 000000000000..7fc8ef88330f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jrnl/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv
+, python3
+}:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "jrnl";
+  version = "1.9.8";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "d254c9c8f24dcf985b98a1d5311337c7f416e6305107eec34c567f58c95b06f4";
+  };
+
+  propagatedBuildInputs = [
+    pytz six tzlocal keyring dateutil
+    parsedatetime pycrypto
+  ];
+
+  # No tests in archive
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "http://maebert.github.io/jrnl/";
+    description = "A simple command line journal application that stores your journal in a plain text file";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zalakain ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/k2pdfopt/0001-Fix-CMakeLists.patch b/nixpkgs/pkgs/applications/misc/k2pdfopt/0001-Fix-CMakeLists.patch
new file mode 100644
index 000000000000..8f9271ac996b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/k2pdfopt/0001-Fix-CMakeLists.patch
@@ -0,0 +1,49 @@
+From 2629af4ed00d7ca65359178203d80fb146901cdb Mon Sep 17 00:00:00 2001
+From: Daniel Fullmer <danielrf12@gmail.com>
+Date: Fri, 3 Jul 2020 21:00:45 -0700
+Subject: [PATCH 1/2] Fix CMakeLists
+
+---
+ CMakeLists.txt | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e218279..4341de9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -57,6 +57,7 @@ endif(JPEG_FOUND)
+ include(FindJasper)
+ if(JASPER_FOUND)
+   set(HAVE_JASPER_LIB 1)
++  set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${JASPER_LIBRARY})
+ endif(JASPER_FOUND)
+ 
+ # paths from willuslib/wgs.c
+@@ -71,9 +72,12 @@ else()
+   message(STATUS "Could NOT find ghostscript executable")
+ endif(GHOSTSCRIPT_EXECUTABLE)
+ 
+-# willus.h
+-# HAVE_GSL_LIB
+-
++pkg_check_modules(GSL gsl)
++if(GSL_FOUND)
++  set(HAVE_GSL_LIB 1)
++  include_directories(SYSTEM ${GSL_INCLUDEDIR})
++  set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${GSL_LDFLAGS})
++endif(GSL_FOUND)
+ 
+ # libfreetype6 (>= 2.3.9), libjbig2dec0, libjpeg8 (>= 8c), libx11-6, libxext6, zlib1g (>= 1:1.2.0)
+ # MUPDF_STATIC_LDFLAGS misses mupdf-js-none, and doubles libs ...
+@@ -85,7 +89,7 @@ if(MUPDF_FOUND)
+   include_directories(SYSTEM ${MUPDF_INCLUDEDIR})
+   message(STATUS "mupdf libraries: ${MUPDF_LDFLAGS}")
+   set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${MUPDF_LDFLAGS} 
+-    -lmupdf-js-none -lopenjpeg -ljbig2dec -ljpeg -lfreetype
++
+   )
+ endif(MUPDF_FOUND)
+ 
+-- 
+2.27.0
+
diff --git a/nixpkgs/pkgs/applications/misc/k2pdfopt/default.nix b/nixpkgs/pkgs/applications/misc/k2pdfopt/default.nix
new file mode 100644
index 000000000000..6b594f196c94
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/k2pdfopt/default.nix
@@ -0,0 +1,172 @@
+{ lib, stdenv, runCommand, fetchzip, fetchurl, fetchpatch, fetchFromGitHub
+, cmake, pkg-config, zlib, libpng, makeWrapper
+, enableGSL ? true, gsl
+, enableGhostScript ? true, ghostscript
+, enableMuPDF ? true, mupdf_1_17
+, enableDJVU ? true, djvulibre
+, enableGOCR ? false, gocr # Disabled by default due to crashes
+, enableTesseract ? true, leptonica, tesseract4
+}:
+
+with lib;
+
+# k2pdfopt is a pain to package. It requires modified versions of mupdf,
+# leptonica, and tesseract.  Instead of shipping patches for these upstream
+# packages, k2pdfopt includes just the modified source files for these
+# packages.  The individual files from the {mupdf,leptonica,tesseract}_mod/
+# directories are intended to replace the corresponding source files in the
+# upstream packages, for a particular version of that upstream package.
+#
+# There are a few ways we could approach packaging these modified versions of
+# mupdf, leptonica, and mupdf:
+# 1) Override the upstream source with a new derivation that involves copying
+# the modified source files from k2pdfopt and replacing the corresponding
+# source files in the upstream packages. Since the files are intended for a
+# particular version of the upstream package, this would not allow us to easily
+# use updates to those packages in nixpkgs.
+# 2) Manually produce patches which can be applied against the upstream
+# project, and have the same effect as replacing those files.  This is what I
+# believe k2pdfopt should do this for us anyway.  The benefit of creating and
+# applying patches in this way is that minor updates (esp. security fixes) to
+# upstream packages might still allow these patches to apply successfully.
+# 3) Automatically produce these patches inside a nix derivation. This is the
+# approach taken here, using the "mkPatch" provided below.  This has the
+# benefit of easier review and should hopefully be simpler to update in the
+# future.
+
+let
+  # Create a patch against src based on changes applied in patchCommands
+  mkPatch = { name, src, patchCommands }: runCommand "${name}-k2pdfopt.patch" { inherit src; } ''
+    source $stdenv/setup
+    unpackPhase
+
+    orig=$sourceRoot
+    new=$sourceRoot-modded
+    cp -r $orig/. $new/
+
+    pushd $new >/dev/null
+    ${patchCommands}
+    popd >/dev/null
+
+    diff -Naur $orig $new > $out || true
+  '';
+
+  pname = "k2pdfopt";
+  version = "2.53";
+  k2pdfopt_src = fetchzip {
+    url = "http://www.willus.com/${pname}/src/${pname}_v${version}_src.zip";
+    sha256 = "1fna8bg3pascjfc3hmc6xn0xi2yh7f1qp0d344mw9hqanbnykyy8";
+  };
+in stdenv.mkDerivation rec {
+  inherit pname version;
+  src = k2pdfopt_src;
+
+  patches = [
+    ./0001-Fix-CMakeLists.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace willuslib/bmpdjvu.c \
+      --replace "<djvu.h>" "<libdjvu/ddjvuapi.h>"
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+
+  buildInputs =
+  let
+    # We use specific versions of these sources below to match the versions
+    # used in the k2pdfopt source. Note that this does _not_ need to match the
+    # version used elsewhere in nixpkgs, since it is only used to create the
+    # patch that can then be applied to the version in nixpkgs.
+    mupdf_patch = mkPatch {
+      name = "mupdf";
+      src = fetchurl {
+        url = "https://mupdf.com/downloads/archive/mupdf-1.17.0-source.tar.gz";
+        sha256 = "13nl9nrcx2awz9l83mlv2psi1lmn3hdnfwxvwgwiwbxlkjl3zqq0";
+      };
+      patchCommands = ''
+        cp ${k2pdfopt_src}/mupdf_mod/{filter-basic,font,stext-device,string}.c ./source/fitz/
+        cp ${k2pdfopt_src}/mupdf_mod/pdf-* ./source/pdf/
+      '';
+    };
+    mupdf_modded = mupdf_1_17.overrideAttrs ({ patches ? [], ... }: {
+      patches = patches ++ [ mupdf_patch ];
+      # This function is missing in font.c, see font-win32.c
+      postPatch = ''
+        echo "void pdf_install_load_system_font_funcs(fz_context *ctx) {}" >> source/fitz/font.c
+      '';
+    });
+
+    leptonica_patch = mkPatch {
+      name = "leptonica";
+      src = fetchurl {
+        url = "http://www.leptonica.org/source/leptonica-1.79.0.tar.gz";
+        sha256 = "1n004gv1dj3pq1fcnfdclvvx5nang80336aa67nvs3nnqp4ncn84";
+      };
+      patchCommands = "cp -r ${k2pdfopt_src}/leptonica_mod/. ./src/";
+    };
+    leptonica_modded = leptonica.overrideAttrs ({ patches ? [], ... }: {
+      patches = patches ++ [ leptonica_patch ];
+    });
+
+    tesseract_patch = mkPatch {
+      name = "tesseract";
+      src = fetchFromGitHub {
+        owner = "tesseract-ocr";
+        repo = "tesseract";
+        rev = "4.1.1";
+        sha256 = "1ca27zbjpx35nxh9fha410z3jskwyj06i5hqiqdc08s2d7kdivwn";
+      };
+      patchCommands = ''
+        cp ${k2pdfopt_src}/tesseract_mod/{baseapi,tesscapi,tesseract}.* src/api/
+        cp ${k2pdfopt_src}/tesseract_mod/{tesscapi,tessedit,tesseract}.* src/ccmain/
+        cp ${k2pdfopt_src}/tesseract_mod/dotproduct{avx,fma,sse}.* src/arch/
+        cp ${k2pdfopt_src}/tesseract_mod/{intsimdmatrixsse,simddetect}.* src/arch/
+        cp ${k2pdfopt_src}/tesseract_mod/{errcode,genericvector,mainblk,params,serialis,tessdatamanager,tess_version,tprintf,unicharset}.* src/ccutil/
+        cp ${k2pdfopt_src}/tesseract_mod/{input,lstmrecognizer}.* src/lstm/
+        cp ${k2pdfopt_src}/tesseract_mod/openclwrapper.* src/opencl/
+      '';
+    };
+    tesseract_modded = tesseract4.override {
+      tesseractBase = tesseract4.tesseractBase.overrideAttrs ({ patches ? [], ... }: {
+        patches = patches ++ [ tesseract_patch ];
+        # Additional compilation fixes
+        postPatch = ''
+          echo libtesseract_api_la_SOURCES += tesscapi.cpp >> src/api/Makefile.am
+          substituteInPlace src/api/tesseract.h \
+            --replace "#include <leptonica.h>" "//#include <leptonica.h>"
+        '';
+      });
+    };
+  in
+    [ zlib libpng ] ++
+    optional enableGSL gsl ++
+    optional enableGhostScript ghostscript ++
+    optional enableMuPDF mupdf_modded ++
+    optional enableDJVU djvulibre ++
+    optional enableGOCR gocr ++
+    optionals enableTesseract [ leptonica_modded tesseract_modded ];
+
+  dontUseCmakeBuildDir = true;
+
+  cmakeFlags = [ "-DCMAKE_C_FLAGS=-I${src}/include_mod" ];
+
+  NIX_LDFLAGS = "-lpthread";
+
+  installPhase = ''
+    install -D -m 755 k2pdfopt $out/bin/k2pdfopt
+  '';
+
+  preFixup = optionalString enableTesseract ''
+    wrapProgram $out/bin/k2pdfopt --set-default TESSDATA_PREFIX ${tesseract4}/share/tessdata
+  '';
+
+  meta = with lib; {
+    description = "Optimizes PDF/DJVU files for mobile e-readers (e.g. the Kindle) and smartphones";
+    homepage = "http://www.willus.com/k2pdfopt";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bosu danielfullmer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/k4dirstat/default.nix b/nixpkgs/pkgs/applications/misc/k4dirstat/default.nix
new file mode 100644
index 000000000000..341341c3ca88
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/k4dirstat/default.nix
@@ -0,0 +1,33 @@
+{ mkDerivation
+, extra-cmake-modules
+, fetchFromGitHub
+, kdoctools
+, kiconthemes
+, kio
+, kjobwidgets
+, kxmlgui
+, lib, stdenv
+}:
+
+mkDerivation rec {
+  pname = "k4dirstat";
+  version = "3.2.2";
+
+  src = fetchFromGitHub {
+    owner = "jeromerobert";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-U5p/gW5GPxRoM9XknP8G7iVhLDoqmvgspeRsmCRdxDg=";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ kiconthemes kio kjobwidgets kxmlgui ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jeromerobert/k4dirstat";
+    description = "A small utility program that sums up disk usage for directory trees";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.raboof ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kanboard/default.nix b/nixpkgs/pkgs/applications/misc/kanboard/default.nix
new file mode 100644
index 000000000000..ffb787a9bd98
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kanboard/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "kanboard";
+  version = "1.2.18";
+
+  src = fetchFromGitHub {
+    owner = "kanboard";
+    repo = "kanboard";
+    rev = "v${version}";
+    sha256 = "sha256-raXPRoydd3CfciF7S0cZiuY7EPFKfE8IU3qj2dOztHU=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/kanboard
+    cp -rv . $out/share/kanboard
+  '';
+
+  meta = with lib; {
+    description = "Kanban project management software";
+    homepage = "https://kanboard.net";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fpletz lheckemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kapow/default.nix b/nixpkgs/pkgs/applications/misc/kapow/default.nix
new file mode 100644
index 000000000000..49fbed7b1efb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kapow/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, qmake, fetchFromGitHub, qtbase, qttools, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "kapow";
+  version = "1.5.10";
+
+  src = fetchFromGitHub {
+    owner = "gottcode";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1fz9fb4w21ax8hjs6dwfn2410ig4lqvzdlijq0jcj3jbgxd4i1gw";
+  };
+
+  nativeBuildInputs = [ qmake qttools wrapQtAppsHook ];
+
+  buildInputs = [ qtbase ];
+
+  meta = with lib; {
+    description = "Punch clock to track time spent on projects";
+    homepage = "https://gottcode.org/kapow/";
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kdbplus/default.nix b/nixpkgs/pkgs/applications/misc/kdbplus/default.nix
new file mode 100644
index 000000000000..d27a10af20c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kdbplus/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, requireFile, unzip, rlwrap, bash, zlib }:
+
+assert (stdenv.hostPlatform.system == "i686-linux");
+
+let
+  libPath = lib.makeLibraryPath
+    [ stdenv.cc.libc stdenv.cc.cc zlib ];
+in
+stdenv.mkDerivation rec {
+  pname = "kdbplus";
+  version = "3.6";
+
+  src = requireFile rec {
+    message = ''
+      Nix can't download kdb+ for you automatically. Go to
+      http://kx.com and download the free, 32-bit version for
+      Linux. Then run "nix-prefetch-url file://\$PWD/${name}" in
+      the directory where you saved it. Note you need version ${version}.
+    '';
+    name   = "linuxx86.zip";
+    sha256 = "0w6znd9warcqx28vf648n0vgmxyyy9kvsfpsfw37d1kp5finap4p";
+  };
+
+  dontStrip = true;
+  buildInputs = [ unzip ];
+
+  phases = "unpackPhase installPhase";
+  unpackPhase = "mkdir ${pname}-${version} && cd ${pname}-${version} && unzip -qq ${src}";
+  installPhase = ''
+    mkdir -p $out/bin $out/libexec
+
+    patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath ${libPath} \
+      ./q/l32/q
+    mv ./q/l32/q $out/libexec/q
+
+    # Shell script wrappers to make things more convenient...
+
+    cat > $out/bin/q-install <<- EOF
+    #!${bash}/bin/bash
+    if [ -f \$HOME/q/q.k ]; then
+      echo "kdb has already been unpacked in \$HOME. Skipping..."
+      exit 0
+    fi
+    echo -n "Unzipping ${src} into \$HOME... "
+    cd \$HOME && ${unzip}/bin/unzip -qq ${src}
+    echo "Done"
+    EOF
+
+    cat > $out/bin/q <<- EOF
+    #!${bash}/bin/bash
+    if [ ! -f \$HOME/q/q.k ]; then
+      echo "ERROR: You need to unzip the Q sources into \$HOME before running q."
+      echo
+      echo "Try:"
+      echo "  cd \$HOME && unzip ${src}"
+      echo "(or run q-install)"
+      exit 1
+    fi
+
+    exec ${rlwrap}/bin/rlwrap $out/libexec/q \$@
+    EOF
+
+    chmod +x $out/bin/q $out/bin/q-install
+  '';
+
+  meta = {
+    description = "Analytics and time-series database";
+    homepage    = "http://www.kx.com/";
+    license     = lib.licenses.unfree;
+    platforms   = [ "i686-linux" ];
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/keeagent/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/keeagent/default.nix
new file mode 100644
index 000000000000..7dc75f604265
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/keeagent/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, buildEnv, fetchzip, mono }:
+
+let
+  version = "0.12.0";
+  drv = stdenv.mkDerivation {
+    pname = "keeagent";
+    inherit version;
+
+    src = fetchzip {
+      url = "https://lechnology.com/wp-content/uploads/2020/05/KeeAgent_v0.12.0.zip";
+      sha256 = "0fcfbj3yikiv3dmp69236h9r3c416amdq849kn131w1129gb68xd";
+      stripRoot = false;
+    };
+
+    meta = {
+      description = "KeePass plugin to allow other programs to access SSH keys stored in a KeePass database for authentication";
+      homepage    = "http://lechnology.com/software/keeagent";
+      platforms   = with lib.platforms; linux;
+      license     = lib.licenses.gpl2;
+      maintainers = [ ];
+    };
+
+    pluginFilename = "KeeAgent.plgx";
+
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $pluginFilename $out/lib/dotnet/keepass/$pluginFilename
+    '';
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/keepasshttp/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/keepasshttp/default.nix
new file mode 100644
index 000000000000..be58f0e34cb3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/keepasshttp/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, buildEnv, fetchFromGitHub, mono }:
+
+let
+  version = "1.8.4.2";
+  drv = stdenv.mkDerivation {
+    pname = "keepasshttp";
+    inherit version;
+    src = fetchFromGitHub {
+      owner = "pfn";
+      repo = "keepasshttp";
+      # rev = version;
+      # for 1.8.4.2 the tag is at the wrong commit (they fixed stuff
+      # afterwards and didn't move the tag), hence reference by commitid
+      rev = "c2c4eb5388a02169400cba7a67be325caabdcc37";
+      sha256 = "0bkzxggbqx7sql3sp46bqham6r457in0vrgh3ai3lw2jrw79pwmh";
+    };
+
+    meta = {
+      description = "KeePass plugin to expose password entries securely (256bit AES/CBC) over HTTP";
+      homepage    = "https://github.com/pfn/keepasshttp";
+      platforms   = with lib.platforms; linux;
+      license     = lib.licenses.gpl3;
+    };
+
+    pluginFilename = "KeePassHttp.plgx";
+
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $pluginFilename $out/lib/dotnet/keepass/$pluginFilename
+    '';
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix
new file mode 100644
index 000000000000..cbcb88b9d1a8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, buildEnv, fetchurl, mono }:
+
+let
+  version = "1.14.0";
+  drv = stdenv.mkDerivation {
+    pname = "keepassrpc";
+    inherit version;
+    src = fetchurl {
+      url    = "https://github.com/kee-org/keepassrpc/releases/download/v${version}/KeePassRPC.plgx";
+      sha256 = "1c410cc93c0252e7cfdb02507b8172c13e18d12c97f08630b721d897dc9b8b24";
+    };
+
+    meta = with lib; {
+      description = "The KeePassRPC plugin that needs to be installed inside KeePass in order for Kee to be able to connect your browser to your passwords";
+      homepage    = "https://github.com/kee-org/keepassrpc";
+      platforms   = [ "x86_64-linux" ];
+      license     = licenses.gpl2;
+      maintainers = with maintainers; [ mjanczyk svsdep mgregoire ];
+    };
+
+    pluginFilename = "KeePassRPC.plgx";
+
+    unpackCmd = ''
+      mkdir deps/
+      cp -p $src deps/$pluginFilename
+    '';
+    sourceRoot = "deps";
+
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $pluginFilename $out/lib/dotnet/keepass/$pluginFilename
+    '';
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix
new file mode 100644
index 000000000000..780de142c5fd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, buildEnv, fetchzip, mono }:
+
+let
+  version = "2.6";
+  drv = stdenv.mkDerivation {
+    pname = "otpkeyprov";
+    inherit version;
+
+    src = fetchzip {
+      url = "https://keepass.info/extensions/v2/otpkeyprov/OtpKeyProv-${version}.zip";
+      sha256 = "1p60k55v2sxnv1varmp0dgbsi2rhjg9kj19cf54mkc87nss5h1ki";
+      stripRoot = false;
+    };
+
+    meta = {
+      description = "OtpKeyProv is a key provider based on one-time passwords";
+      homepage    = "https://keepass.info/plugins.html#otpkeyprov";
+      platforms   = with lib.platforms; linux;
+      license     = lib.licenses.gpl2;
+      maintainers = [ lib.maintainers.ente ];
+    };
+
+    pluginFilename = "OtpKeyProv.plgx";
+
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $pluginFilename $out/lib/dotnet/keepass/$pluginFilename
+    '';
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass/default.nix b/nixpkgs/pkgs/applications/misc/keepass/default.nix
new file mode 100644
index 000000000000..c1d9448c6a6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass/default.nix
@@ -0,0 +1,118 @@
+{ stdenv, lib, fetchurl, buildDotnetPackage, substituteAll, makeWrapper, makeDesktopItem,
+  unzip, icoutils, gtk2, xorg, xdotool, xsel, coreutils, unixtools, glib, plugins ? [] }:
+
+with builtins; buildDotnetPackage rec {
+  baseName = "keepass";
+  version = "2.46";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/keepass/KeePass-${version}-Source.zip";
+    sha256 = "0zyclydgyg8nhwxrzw7x4f82975cqdmp12py33k6sballx6jhgiy";
+  };
+
+  sourceRoot = ".";
+
+  buildInputs = [ unzip makeWrapper icoutils ];
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      xsel = "${xsel}/bin/xsel";
+      xprop = "${xorg.xprop}/bin/xprop";
+      xdotool = "${xdotool}/bin/xdotool";
+      uname = "${coreutils}/bin/uname";
+      whereis = "${unixtools.whereis}/bin/whereis";
+      gsettings = "${glib}/bin/gsettings";
+    })
+  ];
+
+  # KeePass looks for plugins in under directory in which KeePass.exe is
+  # located. It follows symlinks where looking for that directory, so
+  # buildEnv is not enough to bring KeePass and plugins together.
+  #
+  # This derivation patches KeePass to search for plugins in specified
+  # plugin derivations in the Nix store and nowhere else.
+  pluginLoadPathsPatch =
+    let outputLc = toString (add 7 (length plugins));
+        patchTemplate = readFile ./keepass-plugins.patch;
+        loadTemplate  = readFile ./keepass-plugins-load.patch;
+        loads =
+          lib.concatStrings
+            (map
+              (p: replaceStrings ["$PATH$"] [ (unsafeDiscardStringContext (toString p)) ] loadTemplate)
+              plugins);
+    in replaceStrings ["$OUTPUT_LC$" "$DO_LOADS$"] [outputLc loads] patchTemplate;
+
+  passAsFile = [ "pluginLoadPathsPatch" ];
+  postPatch = ''
+    sed -i 's/\r*$//' KeePass/Forms/MainForm.cs
+    patch -p1 <$pluginLoadPathsPatchPath
+  '';
+
+  preConfigure = ''
+    rm -rvf Build/*
+    find . -name "*.sln" -print -exec sed -i 's/Format Version 10.00/Format Version 11.00/g' {} \;
+    find . -name "*.csproj" -print -exec sed -i '
+      s#ToolsVersion="3.5"#ToolsVersion="4.0"#g
+      s#<TargetFrameworkVersion>.*</TargetFrameworkVersion>##g
+      s#<PropertyGroup>#<PropertyGroup><TargetFrameworkVersion>v4.5</TargetFrameworkVersion>#g
+      s#<SignAssembly>.*$#<SignAssembly>false</SignAssembly>#g
+      s#<PostBuildEvent>.*sgen.exe.*$##
+    ' {} \;
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "keepass";
+    exec = "keepass";
+    comment = "Password manager";
+    icon = "keepass";
+    desktopName = "Keepass";
+    genericName = "Password manager";
+    categories = "Utility;";
+    mimeType = lib.concatStringsSep ";" [
+      "application/x-keepass2"
+      ""
+    ];
+  };
+
+  outputFiles = [ "Build/KeePass/Release/*" "Build/KeePassLib/Release/*" ];
+  dllFiles = [ "KeePassLib.dll" ];
+  exeFiles = [ "KeePass.exe" ];
+
+  # plgx plugin like keefox requires mono to compile at runtime
+  # after loading. It is brought into plugins bin/ directory using
+  # buildEnv in the plugin derivation. Wrapper below makes sure it
+  # is found and does not pollute output path.
+  binPaths = lib.concatStrings (lib.intersperse ":" (map (x: x + "/bin") plugins));
+
+  dynlibPath = lib.makeLibraryPath [ gtk2 ];
+
+  postInstall =
+  let
+    extractFDeskIcons = ./extractWinRscIconsToStdFreeDesktopDir.sh;
+  in
+  ''
+    mkdir -p "$out/share/applications"
+    cp ${desktopItem}/share/applications/* $out/share/applications
+    wrapProgram $out/bin/keepass \
+      --prefix PATH : "$binPaths" \
+      --prefix LD_LIBRARY_PATH : "$dynlibPath"
+
+    ${extractFDeskIcons} \
+      "./Translation/TrlUtil/Resources/KeePass.ico" \
+      '[^\.]+_[0-9]+_([0-9]+x[0-9]+)x[0-9]+\.png' \
+      '\1' \
+      '([^\.]+).+' \
+      'keepass' \
+      "$out" \
+      "./tmp"
+  '';
+
+  meta = {
+    description = "GUI password manager with strong cryptography";
+    homepage = "http://www.keepass.info/";
+    maintainers = with lib.maintainers; [ amorsillo obadz jraygauthier ];
+    platforms = with lib.platforms; all;
+    license = lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keepass/extractWinRscIconsToStdFreeDesktopDir.sh b/nixpkgs/pkgs/applications/misc/keepass/extractWinRscIconsToStdFreeDesktopDir.sh
new file mode 100755
index 000000000000..dec7367379e4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass/extractWinRscIconsToStdFreeDesktopDir.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+# The file from which to extract *.ico files.
+#rscFile="./KeePass.exe"
+rscFile=$1
+
+# A regexp that can extract the image size from the file name.
+# sizeRegex='[^\.]+\.exe_[0-9]+_[0-9]+_[0-9]+_[0-9]+_([0-9]+x[0-9]+)x[0-9]+\.png'
+sizeRegex=$2
+
+# sizeReplaceExp='\1'
+sizeReplaceExp=$3
+
+# A regexp that can extract the name of the target image from the file name.
+# nameRegex='([^\.]+)\.exe.+'
+nameRegex=$4
+
+# nameReplaceExp='\1'
+nameReplaceExp=$5
+
+# out=./myOut
+out=$6
+
+# An optional temp dir. TODO: Generate it randomly by default instead.
+tmp=./tmp
+if [ "" != "$4" ]; then
+    tmp=$7
+fi
+
+
+
+rm -rf $tmp/png $tmp/ico
+mkdir -p $tmp/png $tmp/ico
+
+# Extract the ressource file's extension.
+rscFileExt=`echo "$rscFile" | sed -re 's/.+\.(.+)$/\1/'`
+
+# Debug ressource file extension.
+echo "rscFileExt=$rscFileExt"
+
+if [ "ico" = "$rscFileExt" ]; then
+    cp -p $rscFile $tmp/ico
+else
+    wrestool -x --output=$tmp/ico -t14 $rscFile
+fi
+
+icotool --icon -x --palette-size=0 -o $tmp/png $tmp/ico/*.ico
+
+mkdir -p $out
+
+for i in $tmp/png/*.png; do
+  fn=`basename "$i"`
+  size=$(echo $fn | sed -re 's/'${sizeRegex}'/'${sizeReplaceExp}'/')
+  name=$(echo $fn | sed -re 's/'${nameRegex}'/'${nameReplaceExp}'/')
+  targetDir=$out/share/icons/hicolor/$size/apps
+  targetFile=$targetDir/$name.png
+  mkdir -p $targetDir
+  mv $i $targetFile
+done
+
+rm -rf $tmp/png $tmp/ico
diff --git a/nixpkgs/pkgs/applications/misc/keepass/fix-paths.patch b/nixpkgs/pkgs/applications/misc/keepass/fix-paths.patch
new file mode 100644
index 000000000000..5ff36a21c002
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass/fix-paths.patch
@@ -0,0 +1,144 @@
+From 830d0db80f2fce09e12c117f8338b8e4b05866ff Mon Sep 17 00:00:00 2001
+From: Pascal Winkelmann <pascal@wnklmnn.de>
+Date: Tue, 19 May 2020 10:28:31 +0200
+Subject: [PATCH] fixpaths
+
+---
+ KeePass/Native/NativeMethods.Unix.cs  |  2 +-
+ KeePass/UI/UISystemFonts.cs           |  2 +-
+ KeePass/Util/AppLocator.cs            |  2 +-
+ KeePass/Util/ClipboardUtil.Unix.cs    | 14 +++++++-------
+ KeePassLib/Native/ClipboardU.cs       |  2 +-
+ KeePassLib/Native/NativeLib.cs        |  2 +-
+ KeePassLib/Utility/MonoWorkarounds.cs |  4 ++--
+ 7 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/KeePass/Native/NativeMethods.Unix.cs b/KeePass/Native/NativeMethods.Unix.cs
+index 4c47258..79cfdb2 100644
+--- a/KeePass/Native/NativeMethods.Unix.cs
++++ b/KeePass/Native/NativeMethods.Unix.cs
+@@ -130,7 +130,7 @@ namespace KeePass.Native
+ 			try

+ 			{

+ 				Application.DoEvents(); // E.g. for clipboard updates

+-				string strOutput = NativeLib.RunConsoleApp("xdotool", strParams);

++				string strOutput = NativeLib.RunConsoleApp("@xdotool@", strParams);

+ 				Application.DoEvents(); // E.g. for clipboard updates

+ 				return (strOutput ?? string.Empty);

+ 			}

+diff --git a/KeePass/UI/UISystemFonts.cs b/KeePass/UI/UISystemFonts.cs
+index 08d6134..2bfa4a2 100644
+--- a/KeePass/UI/UISystemFonts.cs
++++ b/KeePass/UI/UISystemFonts.cs
+@@ -188,7 +188,7 @@ namespace KeePass.UI
+ 

+ 		private static void UbuntuLoadFonts()

+ 		{

+-			string strDef = NativeLib.RunConsoleApp("gsettings",

++			string strDef = NativeLib.RunConsoleApp("@gsettings@",

+ 				"get org.gnome.desktop.interface font-name");

+ 			if(strDef == null) return;

+ 

+diff --git a/KeePass/Util/AppLocator.cs b/KeePass/Util/AppLocator.cs
+index af02803..8a32c9d 100644
+--- a/KeePass/Util/AppLocator.cs
++++ b/KeePass/Util/AppLocator.cs
+@@ -429,7 +429,7 @@ namespace KeePass.Util
+ 			if(NativeLib.GetPlatformID() == PlatformID.MacOSX)

+ 				strArgPrefix = string.Empty; // FR 3535696

+ 

+-			string str = NativeLib.RunConsoleApp("whereis", strArgPrefix + strApp);

++			string str = NativeLib.RunConsoleApp("@whereis@", strArgPrefix + strApp);

+ 			if(str == null) return null;

+ 

+ 			str = str.Trim();

+diff --git a/KeePass/Util/ClipboardUtil.Unix.cs b/KeePass/Util/ClipboardUtil.Unix.cs
+index ab49ee2..7f6c50f 100644
+--- a/KeePass/Util/ClipboardUtil.Unix.cs
++++ b/KeePass/Util/ClipboardUtil.Unix.cs
+@@ -62,7 +62,7 @@ namespace KeePass.Util
+ 			//	"-out -selection clipboard");

+ 			// if(str != null) return str;

+ 

+-			string str = NativeLib.RunConsoleApp("xsel",

++			string str = NativeLib.RunConsoleApp("@xsel@",

+ 				"--output --clipboard", null, XSelFlags);

+ 			if(str != null) return str;

+ 

+@@ -83,10 +83,10 @@ namespace KeePass.Util
+ 			if(string.IsNullOrEmpty(str))

+ 			{

+ 				// xsel with an empty input can hang, thus use --clear

+-				if(NativeLib.RunConsoleApp("xsel", "--clear --primary",

++				if(NativeLib.RunConsoleApp("@xsel@", "--clear --primary",

+ 					null, XSelFlags) != null)

+ 				{

+-					NativeLib.RunConsoleApp("xsel", "--clear --clipboard",

++					NativeLib.RunConsoleApp("@xsel@", "--clear --clipboard",

+ 						null, XSelFlags);

+ 					return;

+ 				}

+@@ -97,10 +97,10 @@ namespace KeePass.Util
+ 			}

+ 

+ 			// xsel does not support --primary and --clipboard together

+-			if(NativeLib.RunConsoleApp("xsel", "--input --primary",

++			if(NativeLib.RunConsoleApp("@xsel@", "--input --primary",

+ 				str, XSelFlags) != null)

+ 			{

+-				NativeLib.RunConsoleApp("xsel", "--input --clipboard",

++				NativeLib.RunConsoleApp("@xsel@", "--input --clipboard",

+ 					str, XSelFlags);

+ 				return;

+ 			}

+diff --git a/KeePassLib/Native/ClipboardU.cs b/KeePassLib/Native/ClipboardU.cs
+index 291c51d..3c76380 100644
+--- a/KeePassLib/Native/ClipboardU.cs
++++ b/KeePassLib/Native/ClipboardU.cs
+@@ -27,7 +27,7 @@ namespace KeePassLib.Native
+ {

+ 	internal static class ClipboardU

+ 	{

+-		internal const string XSel = "xsel";

++		internal const string XSel = "@xsel@";

+ 		private const string XSelV = "--version";

+ 		private const string XSelR = "--output --clipboard";

+ 		private const string XSelC = "--clear --clipboard";

+diff --git a/KeePassLib/Native/NativeLib.cs b/KeePassLib/Native/NativeLib.cs
+index 2d227a3..243f4ee 100644
+--- a/KeePassLib/Native/NativeLib.cs
++++ b/KeePassLib/Native/NativeLib.cs
+@@ -145,7 +145,7 @@ namespace KeePassLib.Native
+ 			// Mono returns PlatformID.Unix on Mac OS X, workaround this

+ 			if(m_platID.Value == PlatformID.Unix)

+ 			{

+-				if((RunConsoleApp("uname", null) ?? string.Empty).Trim().Equals(

++				if((RunConsoleApp("@uname@", null) ?? string.Empty).Trim().Equals(

+ 					"Darwin", StrUtil.CaseIgnoreCmp))

+ 					m_platID = PlatformID.MacOSX;

+ 			}

+diff --git a/KeePassLib/Utility/MonoWorkarounds.cs b/KeePassLib/Utility/MonoWorkarounds.cs
+index e20bb3a..4fd875b 100644
+--- a/KeePassLib/Utility/MonoWorkarounds.cs
++++ b/KeePassLib/Utility/MonoWorkarounds.cs
+@@ -41,7 +41,7 @@ namespace KeePassLib.Utility
+ {

+ 	public static class MonoWorkarounds

+ 	{

+-		private const string AppXDoTool = "xdotool";

++		private const string AppXDoTool = "@xdotool@";

+ 

+ 		private static Dictionary<uint, bool> g_dForceReq = new Dictionary<uint, bool>();

+ 		private static Thread g_thFixClip = null;

+@@ -335,7 +335,7 @@ namespace KeePassLib.Utility
+ 				// }

+ 				// else { Debug.Assert(false); }

+ 

+-				string strWmClass = (NativeLib.RunConsoleApp("xprop",

++				string strWmClass = (NativeLib.RunConsoleApp("@xprop@",

+ 					"-id " + strHandle + " WM_CLASS") ?? string.Empty);

+ 

+ 				if(strWmClass.IndexOf("\"" + PwDefs.ResClass + "\"",

+-- 
+2.25.4
+
diff --git a/nixpkgs/pkgs/applications/misc/keepass/keepass-plugins-load.patch b/nixpkgs/pkgs/applications/misc/keepass/keepass-plugins-load.patch
new file mode 100644
index 000000000000..e6a6bff8dad3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass/keepass-plugins-load.patch
@@ -0,0 +1 @@
++			m_pluginManager.LoadAllPlugins("$PATH$/lib/dotnet/keepass", System.IO.SearchOption.TopDirectoryOnly, new string[] {});
diff --git a/nixpkgs/pkgs/applications/misc/keepass/keepass-plugins.patch b/nixpkgs/pkgs/applications/misc/keepass/keepass-plugins.patch
new file mode 100644
index 000000000000..891be1ffa314
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass/keepass-plugins.patch
@@ -0,0 +1,25 @@
+From 4cb0b18f5326a07927453897180289a4b254ac4f Mon Sep 17 00:00:00 2001
+From: Pascal Winkelmann <pascal@wnklmnn.de>
+Date: Tue, 19 May 2020 10:43:49 +0200
+Subject: [PATCH] loadplugin
+
+---
+ KeePass/Forms/MainForm.cs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/KeePass/Forms/MainForm.cs b/KeePass/Forms/MainForm.cs
+index 347eaf5..b92e1e2 100644
+--- a/KeePass/Forms/MainForm.cs
++++ b/KeePass/Forms/MainForm.cs
+@@ -440,7 +440,$OUTPUT_LC$ @@ namespace KeePass.Forms
+ 				ToolStripItemCollection tsicT = m_ctxTray.Items;
+ 				ToolStripItem tsiPrevT = m_ctxTrayOptions;
+ 
+-				m_pluginManager.LoadAllPlugins();
+$DO_LOADS$+
+ 
+ 				m_pluginManager.AddMenuItems(PluginMenuType.Main, tsicM, tsiPrevM);
+ 				m_pluginManager.AddMenuItems(PluginMenuType.Group, tsicGM, tsiPrevGM);
+-- 
+2.25.4
+
diff --git a/nixpkgs/pkgs/applications/misc/keepassx/2.0.nix b/nixpkgs/pkgs/applications/misc/keepassx/2.0.nix
new file mode 100644
index 000000000000..86bd7d0849ec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepassx/2.0.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, cmake, libgcrypt, qt4, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "keepassx2";
+  version = "2.0.3";
+
+  src = fetchurl {
+    url = "https://www.keepassx.org/releases/${version}/keepassx-${version}.tar.gz";
+    sha256 = "1ia7cqx9ias38mnffsl7da7g1f66bcbjsi23k49sln0c6spb9zr3";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libgcrypt qt4 xorg.libXtst ];
+
+  meta = {
+    description = "Qt password manager compatible with its Win32 and Pocket PC versions";
+    homepage = "https://www.keepassx.org/";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ qknight ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keepassx/community.nix b/nixpkgs/pkgs/applications/misc/keepassx/community.nix
new file mode 100644
index 000000000000..548356992c33
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepassx/community.nix
@@ -0,0 +1,129 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, makeWrapper
+, qttools
+, darwin
+
+, asciidoctor
+, curl
+, glibcLocales
+, libXi
+, libXtst
+, libargon2
+, libgcrypt
+, libgpgerror
+, libsodium
+, libyubikey
+, pkg-config
+, qrencode
+, qtbase
+, qtmacextras
+, qtsvg
+, qtx11extras
+, quazip
+, wrapQtAppsHook
+, yubikey-personalization
+, zlib
+
+, withKeePassBrowser ? true
+, withKeePassKeeShare ? true
+, withKeePassKeeShareSecure ? true
+, withKeePassSSHAgent ? true
+, withKeePassNetworking ? true
+, withKeePassTouchID ? true
+, withKeePassFDOSecrets ? true
+}:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "keepassxc";
+  version = "2.6.3";
+
+  src = fetchFromGitHub {
+    owner = "keepassxreboot";
+    repo = "keepassxc";
+    rev = version;
+    sha256 = "1jd2mvafyn095crfs2hnfprqiy8yqsvfybwbjq8n0agapnz4bl5h";
+  };
+
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang [
+    "-Wno-old-style-cast"
+    "-Wno-error"
+    "-D__BIG_ENDIAN__=${if stdenv.isBigEndian then "1" else "0"}"
+  ];
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-rpath ${libargon2}/lib";
+
+  patches = [
+    ./darwin.patch
+  ];
+
+  cmakeFlags = [
+    "-DKEEPASSXC_BUILD_TYPE=Release"
+    "-DWITH_GUI_TESTS=ON"
+    "-DWITH_XC_AUTOTYPE=ON"
+    "-DWITH_XC_UPDATECHECK=OFF"
+    "-DWITH_XC_YUBIKEY=ON"
+  ]
+  ++ (optional withKeePassBrowser "-DWITH_XC_BROWSER=ON")
+  ++ (optional withKeePassKeeShare "-DWITH_XC_KEESHARE=ON")
+  ++ (optional withKeePassKeeShareSecure "-DWITH_XC_KEESHARE_SECURE=ON")
+  ++ (optional withKeePassNetworking "-DWITH_XC_NETWORKING=ON")
+  ++ (optional (withKeePassTouchID && stdenv.isDarwin) "-DWITH_XC_TOUCHID=ON")
+  ++ (optional (withKeePassFDOSecrets && stdenv.isLinux) "-DWITH_XC_FDOSECRETS=ON")
+  ++ (optional withKeePassSSHAgent "-DWITH_XC_SSHAGENT=ON");
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+
+    export LC_ALL="en_US.UTF-8"
+    export QT_QPA_PLATFORM=offscreen
+    export QT_PLUGIN_PATH="${qtbase.bin}/${qtbase.qtPluginPrefix}"
+    # testcli and testgui are flaky - skip them both
+    make test ARGS+="-E 'testcli|testgui' --output-on-failure"
+
+    runHook postCheck
+  '';
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook qttools pkg-config ];
+
+  buildInputs = [
+    asciidoctor
+    curl
+    glibcLocales
+    libXi
+    libXtst
+    libargon2
+    libgcrypt
+    libgpgerror
+    libsodium
+    libyubikey
+    qrencode
+    qtbase
+    qtsvg
+    qtx11extras
+    yubikey-personalization
+    zlib
+  ]
+  ++ lib.optional withKeePassKeeShareSecure quazip
+  ++ lib.optional stdenv.isDarwin qtmacextras
+  ++ lib.optional (stdenv.isDarwin && withKeePassTouchID) darwin.apple_sdk.frameworks.LocalAuthentication;
+
+  preFixup = optionalString stdenv.isDarwin ''
+    # Make it work without Qt in PATH.
+    wrapQtApp $out/Applications/KeePassXC.app/Contents/MacOS/KeePassXC
+  '';
+
+  meta = {
+    description = "Password manager to store your passwords safely and auto-type them into your everyday websites and applications";
+    longDescription = "A community fork of KeePassX, which is itself a port of KeePass Password Safe. The goal is to extend and improve KeePassX with new features and bugfixes to provide a feature-rich, fully cross-platform and modern open-source password manager. Accessible via native cross-platform GUI, CLI, and browser integration with the KeePassXC Browser Extension (https://github.com/keepassxreboot/keepassxc-browser).";
+    homepage = "https://keepassxc.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jonafato turion ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keepassx/darwin.patch b/nixpkgs/pkgs/applications/misc/keepassx/darwin.patch
new file mode 100644
index 000000000000..95ca5d4587fe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepassx/darwin.patch
@@ -0,0 +1,53 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 74b1a7ff..0a713a32 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -307,6 +307,7 @@ if(MINGW)
+     set(PLUGIN_INSTALL_DIR ".")
+     set(DATA_INSTALL_DIR "share")
+ elseif(APPLE AND WITH_APP_BUNDLE)
++    set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/Applications")
+     set(BUNDLE_INSTALL_DIR "${PROGNAME}.app/Contents")
+     set(CMAKE_INSTALL_MANDIR "${PROGNAME}.app/Contents/Resources/man")
+     set(CLI_INSTALL_DIR "${PROGNAME}.app/Contents/MacOS")
+@@ -369,12 +370,6 @@ set(CMAKE_AUTORCC ON)
+ 
+ if(APPLE)
+     set(CMAKE_MACOSX_RPATH TRUE)
+-    find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH)
+-    if(NOT MACDEPLOYQT_EXE)
+-        message(FATAL_ERROR "macdeployqt is required to build on macOS")
+-    else()
+-        message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}")
+-    endif()
+ elseif(MINGW)
+     find_program(WINDEPLOYQT_EXE windeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH)
+     if(NOT WINDEPLOYQT_EXE)
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index f142f368..0742512d 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -351,11 +351,6 @@ if(APPLE AND WITH_APP_BUNDLE)
+     set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSXC_VERSION}")
+     include(CPack)
+ 
+-    add_custom_command(TARGET ${PROGNAME}
+-            POST_BUILD
+-            COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app
+-            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
+-            COMMENT "Deploying app bundle")
+ endif()
+ 
+ install(TARGETS ${PROGNAME}
+diff --git a/src/autotype/mac/CMakeLists.txt b/src/autotype/mac/CMakeLists.txt
+index 7427450a..a0a58d71 100644
+--- a/src/autotype/mac/CMakeLists.txt
++++ b/src/autotype/mac/CMakeLists.txt
+@@ -8,7 +8,6 @@ if(WITH_APP_BUNDLE)
+     add_custom_command(TARGET keepassx-autotype-cocoa
+             POST_BUILD
+             COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libkeepassx-autotype-cocoa.so ${PLUGIN_INSTALL_DIR}
+-            COMMAND ${MACDEPLOYQT_EXE} ${PROGNAME}.app -executable=${PLUGIN_INSTALL_DIR}/libkeepassx-autotype-cocoa.so -no-plugins
+             WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
+             COMMENT "Deploying autotype plugin")
+ else()
diff --git a/nixpkgs/pkgs/applications/misc/keepassx/default.nix b/nixpkgs/pkgs/applications/misc/keepassx/default.nix
new file mode 100644
index 000000000000..0fad28d94d3f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepassx/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, bzip2, qt4, qmake4Hook, libX11, xorgproto, libXtst }:
+
+stdenv.mkDerivation rec {
+  pname = "keepassx";
+  version = "0.4.4";
+
+  src = fetchurl {
+    url = "https://www.keepassx.org/releases/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1i5dq10x28mg7m4c0yacm32xfj4j7imir4ph8x9p0s2ym260c9ry";
+  };
+
+  patches = [ ./random.patch ];
+
+  buildInputs = [ bzip2 qt4 libX11 xorgproto libXtst ];
+
+  nativeBuildInputs = [ qmake4Hook ];
+
+  meta = {
+    description = "Qt password manager compatible with its Win32 and Pocket PC versions";
+    homepage = "https://www.keepassx.org/";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ qknight ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keepassx/random.patch b/nixpkgs/pkgs/applications/misc/keepassx/random.patch
new file mode 100644
index 000000000000..0a0b26f6e8c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepassx/random.patch
@@ -0,0 +1,13 @@
+--- a/src/lib/random.cpp	2014-01-21 21:15:55.829312723 +0000
++++ b/src/lib/random.cpp	2014-01-21 21:16:36.752535839 +0000
+@@ -28,6 +28,10 @@
+ 	#include <wincrypt.h>
+ 	#include <QSysInfo>
+ #endif
++#ifndef Q_WS_WIN
++	#include <sys/types.h>
++	#include <unistd.h>
++#endif
+ 
+ #include <QCryptographicHash>
+ #include <QCursor>
diff --git a/nixpkgs/pkgs/applications/misc/keeweb/default.nix b/nixpkgs/pkgs/applications/misc/keeweb/default.nix
new file mode 100644
index 000000000000..cf14679cd9bb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keeweb/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchurl, appimageTools, undmg, libsecret }:
+let
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "Unsupported system: ${system}";
+
+  pname = "keeweb";
+  version = "1.16.5";
+  name = "${pname}-${version}";
+
+  suffix = {
+    x86_64-linux = "linux.AppImage";
+    x86_64-darwin = "mac.x64.dmg";
+    aarch64-darwin = "mac.arm64.dmg";
+  }.${system} or throwSystem;
+
+  src = fetchurl {
+    url = "https://github.com/keeweb/keeweb/releases/download/v${version}/KeeWeb-${version}.${suffix}";
+    sha256 = {
+      x86_64-linux = "18qcr8zyn20n5zrrha0qwgq2ic10bp189fps87lbnmcjknrkac9g";
+      x86_64-darwin = "0crpjkcqgs7q5c814bx2npjh9kpyyb87yagm5wcy9j21kwrbqv6k";
+      aarch64-darwin = "1wkf9inrm5qg0c4xrk0s97mx5j21xvlqwwkvydl513gyfzi2g9gp";
+    }.${system} or throwSystem;
+  };
+
+  appimageContents = appimageTools.extract {
+    inherit name src;
+  };
+
+  meta = with lib; {
+    description = "Free cross-platform password manager compatible with KeePass";
+    homepage = "https://keeweb.info/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
+  };
+
+  linux = appimageTools.wrapType2 rec {
+    inherit name src meta;
+
+    extraPkgs = pkgs: with pkgs; [ libsecret ];
+
+    extraInstallCommands = ''
+      mv $out/bin/{${name},${pname}}
+      install -Dm644 ${appimageContents}/keeweb.desktop -t $out/share/applications
+      install -Dm644 ${appimageContents}/keeweb.png -t $out/share/icons/hicolor/256x256/apps
+      install -Dm644 ${appimageContents}/usr/share/mime/keeweb.xml -t $out/share/mime
+      substituteInPlace $out/share/applications/keeweb.desktop \
+        --replace 'Exec=AppRun' 'Exec=${pname}'
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src meta;
+
+    nativeBuildInputs = [ undmg ];
+
+    sourceRoot = "KeeWeb.app";
+
+    installPhase = ''
+      mkdir -p $out/Applications/KeeWeb.app
+      cp -R . $out/Applications/KeeWeb.app
+    '';
+  };
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/misc/keystore-explorer/default.nix b/nixpkgs/pkgs/applications/misc/keystore-explorer/default.nix
new file mode 100644
index 000000000000..f98e21edf5bc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keystore-explorer/default.nix
@@ -0,0 +1,40 @@
+{ fetchzip, lib, stdenv, jdk8, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  version = "5.4.4";
+  pname = "keystore-explorer";
+  src = fetchzip {
+    url = "https://github.com/kaikramer/keystore-explorer/releases/download/v${version}/kse-544.zip";
+    sha256 = "01kpa8g6p6vcqq9y70w5bm8jbw4kp55pbywj2zrhgjibrhgjqi0b";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/share/keystore-explorer
+    cp -R icons licenses lib kse.jar $out/share/keystore-explorer/
+
+    # keystore-explorer's kse.sh tries to detect the path of Java by using
+    # Python on Darwin; just write our own start script to avoid unnecessary dependencies
+    cat > $out/bin/keystore-explorer <<EOF
+    #!${runtimeShell}
+    export JAVA_HOME=${jdk8.home}
+    exec ${jdk8}/bin/java -jar $out/share/keystore-explorer/kse.jar "\$@"
+    EOF
+    chmod +x $out/bin/keystore-explorer
+
+    runHook postInstall
+  '';
+
+  dontStrip = true;
+  dontBuild = true;
+  dontConfigure = true;
+
+  meta = {
+    description = "Open source GUI replacement for the Java command-line utilities keytool and jarsigner";
+    license = lib.licenses.gpl3Only;
+    maintainers = [ lib.maintainers.numinit ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/khal/default.nix b/nixpkgs/pkgs/applications/misc/khal/default.nix
new file mode 100644
index 000000000000..7bd4a3bbf7f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/khal/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, pkgs, python3, fetchpatch, glibcLocales }:
+
+with python3.pkgs; buildPythonApplication rec {
+  pname = "khal";
+  version = "0.10.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "11qhrga44knlnp88py9p547d4nr5kn041d2nszwa3dqw7mf22ks9";
+  };
+
+  patches = [
+    ./skip-broken-test.patch
+  ];
+
+  propagatedBuildInputs = [
+    atomicwrites
+    click
+    click-log
+    configobj
+    dateutil
+    icalendar
+    lxml
+    pkgs.vdirsyncer
+    pytz
+    pyxdg
+    requests_toolbelt
+    tzlocal
+    urwid
+    pkginfo
+    freezegun
+  ];
+  nativeBuildInputs = [ setuptools_scm sphinx sphinxcontrib_newsfeed ];
+  checkInputs = [ pytest glibcLocales ];
+  LC_ALL = "en_US.UTF-8";
+
+  postPatch = ''
+    sed -i \
+      -e "s/Invalid value for \"ics\"/Invalid value for \\\'ics\\\'/" \
+      -e "s/Invalid value for \"\[ICS\]\"/Invalid value for \\\'\[ICS\]\\\'/" \
+      tests/cli_test.py
+  '';
+
+  postInstall = ''
+    # zsh completion
+    install -D misc/__khal $out/share/zsh/site-functions/__khal
+
+    # man page
+    PATH="${python3.withPackages (ps: with ps; [ sphinx sphinxcontrib_newsfeed ])}/bin:$PATH" \
+    make -C doc man
+    install -Dm755 doc/build/man/khal.1 -t $out/share/man/man1
+
+    # desktop
+    install -Dm755 misc/khal.desktop -t $out/share/applications
+  '';
+
+  doCheck = !stdenv.isAarch64;
+
+  checkPhase = ''
+    py.test -k "not test_vertical_month_abbr_fr and not test_vertical_month_unicode_weekdeays_gr \
+      and not test_event_different_timezones and not test_default_calendar and not test_birthdays \
+      and not test_birthdays_no_year"
+  '';
+
+  meta = with lib; {
+    homepage = "http://lostpackets.de/khal/";
+    description = "CLI calendar application";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/khal/skip-broken-test.patch b/nixpkgs/pkgs/applications/misc/khal/skip-broken-test.patch
new file mode 100644
index 000000000000..fc37f6acc86e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/khal/skip-broken-test.patch
@@ -0,0 +1,33 @@
+diff --git a/tests/cli_test.py b/tests/cli_test.py
+index 5e354a5..d8fbcd5 100644
+--- a/tests/cli_test.py
++++ b/tests/cli_test.py
+@@ -493,6 +493,7 @@ def test_import_invalid_choice_and_prefix(runner):
+     assert result.output == '09.04.-09.04. An Event\n'
+ 
+ 
++@pytest.mark.skip(reason="Mocking breaks in this testcase")
+ def test_import_from_stdin(runner, monkeypatch):
+     ics_data = 'This is some really fake icalendar data'
+ 
+diff --git a/tests/ui/test_editor.py b/tests/ui/test_editor.py
+index 27b7fa5..5978d72 100644
+--- a/tests/ui/test_editor.py
++++ b/tests/ui/test_editor.py
+@@ -1,5 +1,7 @@
+ import datetime as dt
+ 
++import pytest
++
+ import icalendar
+ from khal.ui.editor import RecurrenceEditor, StartEndEditor
+ 
+@@ -19,7 +21,7 @@ palette = {
+     'edit': 'blue',
+ }
+ 
+-
++@pytest.mark.skip(reason="Mocking breaks in this testcase")
+ def test_popup(monkeypatch):
+     """making sure the popup calendar gets callend with the right inital value
+ 
diff --git a/nixpkgs/pkgs/applications/misc/khard/default.nix b/nixpkgs/pkgs/applications/misc/khard/default.nix
new file mode 100644
index 000000000000..5effc88acb00
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/khard/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, glibcLocales, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  version = "0.17.0";
+  pname = "khard";
+
+  src = python3.pkgs.fetchPypi {
+    inherit pname version;
+    sha256 = "062nv4xkfsjc11k9m52dh6xjn9z68a4a6x1s8z05wwv4jbp1lkhn";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    atomicwrites
+    configobj
+    vobject
+    ruamel_yaml
+    ruamel_base
+    unidecode
+  ];
+
+  postInstall = ''
+    install -D misc/zsh/_khard $out/share/zsh/site-functions/_khard
+  '';
+
+  preCheck = ''
+    # see https://github.com/scheibler/khard/issues/263
+    export COLUMNS=80
+  '';
+
+  meta = {
+    homepage = "https://github.com/scheibler/khard";
+    description = "Console carddav client";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kiwix/default.nix b/nixpkgs/pkgs/applications/misc/kiwix/default.nix
new file mode 100644
index 000000000000..dff50bafaf80
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kiwix/default.nix
@@ -0,0 +1,109 @@
+{ lib, stdenv, fetchurl, makeWrapper, pkg-config
+, zip, python, zlib, which, icu, libmicrohttpd, lzma, aria2, wget, bc
+, libuuid, libX11, libXext, libXt, libXrender, glib, dbus, dbus-glib
+, gtk2, gdk-pixbuf, pango, cairo, freetype, fontconfig, alsaLib, atk, cmake
+, xapian, ctpp2, zimlib
+}:
+
+with lib;
+
+let
+  xulrunner64_tar = fetchurl {
+    url = "http://download.kiwix.org/dev/xulrunner-29.0.en-US.linux-x86_64.tar.bz2";
+    sha256 = "0i3m30gm5z7qmas14id6ypvbmnb2k7jhz8aby2wz5vvv49zqmx3s";
+  };
+  xulrunnersdk64_tar = fetchurl {
+    url = "http://download.kiwix.org/dev/xulrunner-29.0.en-US.linux-x86_64.sdk.tar.bz2";
+    sha256 = "0z90v7c4mq15g5klmsj8vs2r10fbygj3qzynx4952hkv8ihw8n3a";
+  };
+  xulrunner32_tar = fetchurl {
+    url = "http://download.kiwix.org/dev/xulrunner-29.0.en-US.linux-i686.tar.bz2";
+    sha256 = "0yln6pxz8f6b9wm9124sx049z8mgi17lgd63rcv2hnix825y8gjb";
+  };
+  xulrunnersdk32_tar = fetchurl {
+    url = "http://download.kiwix.org/dev/xulrunner-29.0.en-US.linux-i686.sdk.tar.bz2";
+    sha256 = "1h9vcbvf8wgds6i2z20y7krpys0mqsqhv1ijyfljanp6vyll9fvi";
+  };
+
+  xulrunner = if stdenv.hostPlatform.system == "x86_64-linux"
+              then { tar = xulrunner64_tar; sdk = xulrunnersdk64_tar; }
+              else { tar = xulrunner32_tar; sdk = xulrunnersdk32_tar; };
+
+  pugixml = stdenv.mkDerivation rec {
+    version = "1.2";
+    pname = "pugixml";
+
+    src = fetchurl {
+      url = "http://download.kiwix.org/dev/${pname}-${version}.tar.gz";
+      sha256 = "0sqk0vdwjq44jxbbkj1cy8qykrmafs1sickzldb2w2nshsnjshhg";
+    };
+
+    nativeBuildInputs = [ cmake ];
+
+    unpackPhase = ''
+      # not a nice src archive: all the files are in the root :(
+      mkdir ${pname}-${version}
+      cd ${pname}-${version}
+      tar -xf ${src}
+
+      # and the build scripts are in there :'(
+      cd scripts
+    '';
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "kiwix";
+  version = "0.9";
+
+  src = fetchurl {
+    url = "http://download.kiwix.org/src/kiwix-${version}-src.tar.xz";
+    sha256 = "0577phhy2na59cpcqjgldvksp0jwczyg0l6c9ghnr19i375l7yqc";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    zip python zlib xapian which icu libmicrohttpd
+    lzma zimlib ctpp2 aria2 wget bc libuuid makeWrapper pugixml
+  ];
+
+  postUnpack = ''
+    cd kiwix*
+    mkdir static
+    cp Makefile.in static/
+
+    cd src/dependencies
+
+    tar -xf ${xulrunner.tar}
+    tar -xf ${xulrunner.sdk}
+
+    cd ../../..
+  '';
+
+  configureFlags = [
+    "--disable-staticbins"
+  ];
+
+  postInstall = ''
+    cp -r src/dependencies/xulrunner $out/lib/kiwix
+
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/lib/kiwix/xulrunner/xulrunner
+
+    rm $out/bin/kiwix
+    makeWrapper $out/lib/kiwix/kiwix-launcher $out/bin/kiwix \
+      --suffix LD_LIBRARY_PATH : ${makeLibraryPath [stdenv.cc.cc libX11 libXext libXt libXrender glib dbus dbus-glib gtk2 gdk-pixbuf pango cairo freetype fontconfig alsaLib atk]} \
+      --suffix PATH : ${aria2}/bin
+  '';
+
+  meta = {
+    description = "An offline reader for Web content";
+    homepage = "https://kiwix.org";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ robbinch ];
+    knownVulnerabilities = [
+      "CVE-2015-1032"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kjv/default.nix b/nixpkgs/pkgs/applications/misc/kjv/default.nix
new file mode 100644
index 000000000000..5247207d1493
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kjv/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch }:
+
+let
+
+patch-base = "https://github.com/LukeSmithxyz/kjv/commit/";
+
+add-apocrypha = fetchpatch {
+  url = patch-base + "b92b7622285d10464f9274f11e740bef90705bbc.patch";
+  sha256 = "0n4sj8p9m10fcair4msc129jxkkx5whqzhjbr5k4lfgp6nb1zk8k";
+};
+
+add-install-target = fetchpatch {
+  url = patch-base + "f4ad73539eb73f1890f4b791d8d38dd95900a4a4.patch";
+  sha256 = "1yzj72i5fkzn2i4wl09q6jx7nwn2h4jwm49fc23nxfwchzar9m1q";
+};
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "kjv";
+  version = "unstable-2018-12-25";
+
+  src = fetchFromGitHub {
+    owner = "bontibon";
+    repo = pname;
+    rev = "fda81a610e4be0e7c5cf242de655868762dda1d4";
+    sha256 = "1favfcjvd3pzz1ywwv3pbbxdg7v37s8vplgsz8ag016xqf5ykqqf";
+  };
+
+  patches = [ add-apocrypha add-install-target ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "The Bible, King James Version";
+    homepage = "https://github.com/bontibon/kjv";
+    license = licenses.publicDomain;
+    maintainers = [ maintainers.jtobin ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/klayout/default.nix b/nixpkgs/pkgs/applications/misc/klayout/default.nix
new file mode 100644
index 000000000000..60905be3b1b2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/klayout/default.nix
@@ -0,0 +1,63 @@
+{ lib, mkDerivation, fetchFromGitHub, fetchpatch
+, python, ruby, qtbase, qtmultimedia, qttools, qtxmlpatterns
+, which, perl, makeWrapper
+}:
+
+mkDerivation rec {
+  pname = "klayout";
+  version = "0.26.8";
+
+  src = fetchFromGitHub {
+    owner = "KLayout";
+    repo = "klayout";
+    rev = "v${version}";
+    sha256 = "0pkhvxcfk70dnmgczyyq585mxrfwqai44ikshs4c1imh92z25llq";
+  };
+
+  postPatch = ''
+    substituteInPlace src/klayout.pri --replace "-Wno-reserved-user-defined-literal" ""
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = [
+    which
+  ];
+
+  buildInputs = [
+    python
+    ruby
+    qtbase
+    qtmultimedia
+    qttools
+    qtxmlpatterns
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    mkdir -p $out/lib
+    ./build.sh -qt5 -prefix $out/lib -j$NIX_BUILD_CORES
+    runHook postBuild
+  '';
+
+  postBuild = ''
+    mkdir $out/bin
+    mv $out/lib/klayout $out/bin/
+  '';
+
+  NIX_CFLAGS_COMPILE = [ "-Wno-parentheses" ];
+
+  dontInstall = true; # Installation already happens as part of "build.sh"
+
+  # Fix: "gsiDeclQMessageLogger.cc:126:42: error: format not a string literal
+  # and no format arguments [-Werror=format-security]"
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "High performance layout viewer and editor with support for GDS and OASIS";
+    license = with licenses; [ gpl3 ];
+    homepage = "https://www.klayout.de/";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ knedlsepp ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/kondo/default.nix b/nixpkgs/pkgs/applications/misc/kondo/default.nix
new file mode 100644
index 000000000000..545dc85efebf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kondo/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kondo";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "tbillington";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0kl2zn6ir3w75ny25ksgxl93vlyb13gzx2795zyimqqnsrdpbbrf";
+  };
+
+  cargoSha256 = "1ax81a2828z3yla1psg5xi8ild65m6zcsvx48ncz902mpzqlj92b";
+
+  meta = with lib; {
+    description = "Save disk space by cleaning unneeded files from software projects";
+    homepage = "https://github.com/tbillington/kondo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/koreader/default.nix b/nixpkgs/pkgs/applications/misc/koreader/default.nix
new file mode 100644
index 000000000000..fd00cefdf394
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/koreader/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv
+, fetchurl
+, makeWrapper
+, dpkg
+, luajit
+, gtk3-x11
+, SDL2
+, glib
+, noto-fonts
+, nerdfonts }:
+let font-droid = nerdfonts.override { fonts = [ "DroidSansMono" ]; };
+in stdenv.mkDerivation rec {
+  pname = "koreader";
+  version = "2021.01";
+
+  src = fetchurl {
+    url =
+      "https://github.com/koreader/koreader/releases/download/v${version}/koreader-${version}-amd64.deb";
+    sha256 = "0cc7pk27wlvziihggzlrb3wsjmndafa13cy1snqr5x71bb81fv6r";
+  };
+
+  sourceRoot = ".";
+  nativeBuildInputs = [ makeWrapper dpkg ];
+  buildInputs = [ luajit gtk3-x11 SDL2 glib ];
+  unpackCmd = "dpkg-deb -x ${src} .";
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R usr/* $out/
+    cp ${luajit}/bin/luajit $out/lib/koreader/luajit
+    find $out -xtype l -delete
+    for i in ${noto-fonts}/share/fonts/truetype/noto/*; do
+        ln -s "$i" $out/lib/koreader/fonts/noto/
+    done
+    ln -s "${font-droid}/share/fonts/opentype/NerdFonts/Droid Sans Mono Nerd Font Complete Mono.otf" $out/lib/koreader/fonts/droid/DroidSansMono.ttf
+    wrapProgram $out/bin/koreader --prefix LD_LIBRARY_PATH : ${
+      lib.makeLibraryPath [ gtk3-x11 SDL2 glib ]
+    }
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/koreader/koreader";
+    description =
+      "An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices";
+    platforms = intersectLists platforms.x86_64 platforms.linux;
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ contrun neonfuz];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/krename/default.nix b/nixpkgs/pkgs/applications/misc/krename/default.nix
new file mode 100644
index 000000000000..c1e031b7277d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/krename/default.nix
@@ -0,0 +1,35 @@
+{
+  mkDerivation, fetchurl, lib,
+  extra-cmake-modules, kdoctools, wrapGAppsHook,
+  kconfig, kinit, kjsembed, taglib, exiv2, podofo,
+  kcrash
+}:
+
+let
+  pname = "krename";
+  version = "5.0.1";
+
+in mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/src/${name}.tar.xz";
+    sha256 = "0zbadxjp13jqxgb58wslhm0wy2lhpdq1bgbvyhyn21mssfppib6a";
+  };
+
+  buildInputs = [ taglib exiv2 podofo ];
+
+  nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook ];
+
+  propagatedBuildInputs = [ kconfig kcrash kinit kjsembed ];
+
+  NIX_LDFLAGS = "-ltag";
+
+  meta = with lib; {
+    description = "A powerful batch renamer for KDE";
+    homepage = "https://kde.org/applications/utilities/krename/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (kconfig.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/krusader/default.nix b/nixpkgs/pkgs/applications/misc/krusader/default.nix
new file mode 100644
index 000000000000..585dfe3e04f1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/krusader/default.nix
@@ -0,0 +1,26 @@
+{
+  mkDerivation, fetchurl, lib,
+  extra-cmake-modules, kdoctools, wrapGAppsHook,
+  karchive, kconfig, kcrash, kguiaddons, kinit, kparts, kwindowsystem
+}:
+
+mkDerivation rec {
+  pname = "krusader";
+  version = "2.7.2";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/${pname}-${version}.tar.xz";
+    sha256 = "02b1jz5a7cjr13v6c7fczrhs1xmg1krnva5fxk8x2bf4nd1rm8s1";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook ];
+
+  propagatedBuildInputs = [ karchive kconfig kcrash kguiaddons kinit kparts kwindowsystem ];
+
+  meta = with lib; {
+    description = "Norton/Total Commander clone for KDE";
+    homepage = "http://www.krusader.org";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ sander turion ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ksmoothdock/default.nix b/nixpkgs/pkgs/applications/misc/ksmoothdock/default.nix
new file mode 100644
index 000000000000..e5cb6f5816e3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ksmoothdock/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, extra-cmake-modules
+, kactivities
+, qtbase
+}:
+
+mkDerivation rec {
+  pname = "KSmoothDock";
+  version = "6.2";
+
+  src = fetchFromGitHub {
+    owner = "dangvd";
+    repo = "ksmoothdock";
+    rev = "v${version}";
+    sha256 = "182x47cymgnp5xisa0xx93hmd5wrfigy8zccrr23p4r9hp8xbnam";
+  };
+
+  patches = [
+    # Fixed hard coded installation path to use CMAKE_INSTALL_BINDIR and CMAKE_INSTALL_PREFIX instead
+    (fetchpatch {
+      url = "https://github.com/dangvd/ksmoothdock/commit/00799bef8a1c1fe61ef9274866267d9fe9194041.patch";
+      sha256 = "1nmb7gf1ggzicxz8k4fd67xhwjy404myqzjpgjym66wqxm0arni4";
+    })
+    # Pull request to fix build on Qt 5.15 https://github.com/dangvd/ksmoothdock/pull/123
+    (fetchpatch {
+      url = "https://github.com/dangvd/ksmoothdock/commit/259527aacadb0fd9110d4425b9bf41a15bedce72.patch";
+      sha256 = "12nj58v9qqrynarn3gpywih3w27mr4n51z1b8mh0rfbnd2kib8dc";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  buildInputs = [ kactivities qtbase ];
+
+  cmakeDir = "../src";
+
+  meta = with lib; {
+    description = "A cool desktop panel for KDE Plasma 5";
+    license = licenses.mit;
+    homepage = "https://dangvd.github.io/ksmoothdock/";
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kupfer/default.nix b/nixpkgs/pkgs/applications/misc/kupfer/default.nix
new file mode 100644
index 000000000000..ce21ea75b307
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kupfer/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv
+, fetchurl
+, intltool
+, python3Packages
+, gobject-introspection
+, gtk3
+, libwnck3
+, keybinder3
+, wrapGAppsHook
+, wafHook
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "kupfer";
+  version = "319";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "https://github.com/kupferlauncher/kupfer/releases/download/v${version}/kupfer-v${version}.tar.xz";
+    sha256 = "0c9xjx13r8ckfr4az116bhxsd3pk78v04c3lz6lqhraak0rp4d92";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook intltool
+    # For setup hook
+    gobject-introspection wafHook
+  ];
+  buildInputs = [ docutils libwnck3 keybinder3 ];
+  propagatedBuildInputs = [ pygobject3 gtk3 pyxdg dbus-python pycairo ];
+
+  # without strictDeps kupfer fails to build: Could not find the python module 'gi.repository.Gtk'
+  # see https://github.com/NixOS/nixpkgs/issues/56943 for details
+  strictDeps = false;
+
+  postInstall = ''
+    gappsWrapperArgs+=(
+      "--prefix" "PYTHONPATH" : "${makePythonPath propagatedBuildInputs}"
+      "--set" "PYTHONNOUSERSITE" "1"
+    )
+  '';
+
+  doCheck = false; # no tests
+
+  meta = with lib; {
+    description = "A smart, quick launcher";
+    homepage    = "https://kupferlauncher.github.io/";
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ cobbal ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/latte-dock/default.nix b/nixpkgs/pkgs/applications/misc/latte-dock/default.nix
new file mode 100644
index 000000000000..424da3ad3605
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/latte-dock/default.nix
@@ -0,0 +1,30 @@
+{ mkDerivation, lib, cmake, xorg, plasma-framework, fetchurl
+, extra-cmake-modules, karchive, kwindowsystem, qtx11extras, kcrash, knewstuff }:
+
+mkDerivation rec {
+  pname = "latte-dock";
+  version = "0.9.11";
+
+  src = fetchurl {
+    url = "https://download.kde.org/stable/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "0x7a93a7axsa0fzpbkkv1z722k9za4p51xcpzdpnh5ih1zij0csi";
+    name = "${pname}-${version}.tar.xz";
+  };
+
+  buildInputs = [ plasma-framework xorg.libpthreadstubs xorg.libXdmcp xorg.libSM ];
+
+  nativeBuildInputs = [ extra-cmake-modules cmake karchive kwindowsystem
+    qtx11extras kcrash knewstuff ];
+
+
+
+  meta = with lib; {
+    description = "Dock-style app launcher based on Plasma frameworks";
+    homepage = "https://github.com/psifidotos/Latte-Dock";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.benley maintainers.ysndr ];
+  };
+
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/lenmus/default.nix b/nixpkgs/pkgs/applications/misc/lenmus/default.nix
new file mode 100644
index 000000000000..a9aef85753ec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lenmus/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, pkg-config, fetchFromGitHub, fetchpatch
+, cmake, boost
+, portmidi, sqlite
+, freetype, libpng, pngpp, zlib
+, wxGTK30, wxsqlite3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lenmus";
+  version = "5.4.2";
+
+  src = fetchFromGitHub {
+    owner = "lenmus";
+    repo = "lenmus";
+    rev = "Release_${version}";
+    sha256 = "1n639xr1qxx6rhqs0c6sjxp3bv8cwkmw1vfk1cji7514gj2a9v3p";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/lenmus/lenmus/commit/421760d84694a0e6e72d0e9b1d4fd30a7e129c6f.patch";
+      sha256 = "1z1wwh0pcr8w1zlr8swx99si9y2kxx5bmavgwvy6bvdhxgm58yqs";
+    })
+    (fetchpatch {
+      url = "https://github.com/lenmus/lenmus/commit/6613d20d4051effc782203c9c6d92962a3f66b5f.patch";
+      sha256 = "01vvzzpamv90jpqbbq1f2m2b4gb9xab9z70am8i41d90nqvg6agn";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+    boost
+    portmidi sqlite
+    freetype libpng pngpp zlib
+    wxGTK30 wxsqlite3
+  ];
+
+  meta = with lib; {
+    description = "LenMus Phonascus is a program for learning music";
+    longDescription = ''
+      LenMus Phonascus is a free open source program (GPL v3) for learning music.
+      It allows you to focus on specific skills and exercises, on both theory and aural training.
+      The different activities can be customized to meet your needs
+    '';
+    homepage = "http://www.lenmus.org/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers;  [ ramkromberg ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/libosmocore/default.nix b/nixpkgs/pkgs/applications/misc/libosmocore/default.nix
new file mode 100644
index 000000000000..273ca0245a2b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/libosmocore/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, pcsclite, talloc, python2, gnutls
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libosmocore";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "osmocom";
+    repo = "libosmocore";
+    rev = version;
+    sha256 = "1535y6r4csvslrxcki80ya6zhhc5jw2nvy9bymb55ln77pf853vg";
+  };
+
+  propagatedBuildInputs = [
+    talloc
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook pkg-config
+  ];
+
+  buildInputs = [
+    pcsclite python2 gnutls
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Set of Osmocom core libraries";
+    homepage = "https://github.com/osmocom/libosmocore";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mog ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/librecad/default.nix b/nixpkgs/pkgs/applications/misc/librecad/default.nix
new file mode 100644
index 000000000000..08bf01aea611
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/librecad/default.nix
@@ -0,0 +1,103 @@
+{ lib
+, boost
+, fetchFromGitHub
+, fetchpatch
+, installShellFiles
+, mkDerivationWith
+, muparser
+, pkg-config
+, qmake
+, qtbase
+, qtsvg
+, qttools
+, runtimeShell
+, gcc8Stdenv
+}:
+
+let
+  stdenv = gcc8Stdenv;
+in
+
+  # Doesn't build with gcc9
+mkDerivationWith stdenv.mkDerivation rec {
+  pname = "librecad";
+  version = "2.2.0-rc1";
+
+  src = fetchFromGitHub {
+    owner = "LibreCAD";
+    repo = "LibreCAD";
+    rev = version;
+    sha256 = "0kwj838hqzbw95gl4x6scli9gj3gs72hdmrrkzwq5rjxam18k3f3";
+  };
+
+  patches = [
+    ./fix_qt_5_11_build.patch
+    (
+      fetchpatch {
+        # Fix missing app name and icon on Wayland.
+        url = "https://github.com/LibreCAD/LibreCAD/commit/a17f8281093403f0c7c36996232665ed21906688.patch";
+        sha256 = "1x46psh4bcx2hxck4l83ki43g1252vb033i2x94h4rpai9hww4d5";
+      }
+    )
+  ];
+
+  postPatch = ''
+    substituteInPlace scripts/postprocess-unix.sh \
+      --replace /bin/sh ${runtimeShell}
+
+    substituteInPlace librecad/src/lib/engine/rs_system.cpp \
+      --replace /usr/share $out/share
+
+    substituteInPlace librecad/src/main/qc_applicationwindow.cpp \
+      --replace __DATE__ 0
+  '';
+
+  qmakeFlags = [
+    "MUPARSER_DIR=${muparser}"
+    "BOOST_DIR=${boost.dev}"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin                unix/{librecad,ttf2lff}
+    install -Dm444 -t $out/share/applications desktop/librecad.desktop
+    install -Dm644 -t $out/share/pixmaps      librecad/res/main/librecad.png
+    install -Dm444 desktop/librecad.sharedmimeinfo $out/share/mime/packages/librecad.xml
+    install -Dm444 desktop/graphics_icons_and_splash/Icon\ LibreCAD/Icon_Librecad.svg \
+      $out/share/icons/hicolor/scalable/apps/librecad.svg
+
+    installManPage desktop/librecad.?
+
+    cp -R unix/resources $out/share/librecad
+
+    runHook postInstall
+  '';
+
+  buildInputs = [
+    boost
+    muparser
+    qtbase
+    qtsvg
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+    qmake
+    qttools
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "2D CAD package based on Qt";
+    homepage = "https://librecad.org";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [
+      kiwi
+      viric
+    ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/librecad/fix_qt_5_11_build.patch b/nixpkgs/pkgs/applications/misc/librecad/fix_qt_5_11_build.patch
new file mode 100644
index 000000000000..04701e5ab1ee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/librecad/fix_qt_5_11_build.patch
@@ -0,0 +1,36 @@
+diff --git a/librecad/src/ui/forms/qg_commandwidget.cpp b/librecad/src/ui/forms/qg_commandwidget.cpp
+index 835e47d..2c878e8 100644
+--- a/librecad/src/ui/forms/qg_commandwidget.cpp
++++ b/librecad/src/ui/forms/qg_commandwidget.cpp
+@@ -27,6 +27,7 @@
+ 
+ #include <algorithm>
+ 
++#include <QAction>
+ #include <QKeyEvent>
+ #include <QFileDialog>
+ #include <QSettings>
+diff --git a/librecad/src/ui/generic/colorwizard.cpp b/librecad/src/ui/generic/colorwizard.cpp
+index 2beaceb..84068ad 100644
+--- a/librecad/src/ui/generic/colorwizard.cpp
++++ b/librecad/src/ui/generic/colorwizard.cpp
+@@ -27,6 +27,7 @@
+ #include "colorwizard.h"
+ #include "ui_colorwizard.h"
+ 
++#include <QAction>
+ #include <QColorDialog>
+ #include <QLineEdit>
+ #include <QListWidget>
+diff --git a/librecad/src/ui/generic/widgetcreator.cpp b/librecad/src/ui/generic/widgetcreator.cpp
+index 7c35144..0e394f2 100644
+--- a/librecad/src/ui/generic/widgetcreator.cpp
++++ b/librecad/src/ui/generic/widgetcreator.cpp
+@@ -27,6 +27,7 @@
+ #include "widgetcreator.h"
+ #include "ui_widgetcreator.h"
+ 
++#include <QActionGroup>
+ #include <QSettings>
+ #include <QLineEdit>
+ #include <QPushButton>
diff --git a/nixpkgs/pkgs/applications/misc/lifelines/default.nix b/nixpkgs/pkgs/applications/misc/lifelines/default.nix
new file mode 100644
index 000000000000..50827355cac0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lifelines/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, gettext, libiconv, bison, ncurses, perl, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "lifelines";
+  version = "unstable-2019-05-07";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "43f29285ed46fba322b6a14322771626e6b02c59";
+    sha256 = "1agszzlmkxmznpc1xj0vzxkskrcfagfjvqsdyw1yp5yg6bsq272y";
+  };
+
+  buildInputs = [
+    gettext
+    libiconv
+    ncurses
+    perl
+  ];
+  nativeBuildInputs = [ autoreconfHook bison ];
+
+  meta = with lib; {
+    description = "Genealogy tool with ncurses interface";
+    homepage = "https://lifelines.github.io/lifelines/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ disassembler ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lighthouse/default.nix b/nixpkgs/pkgs/applications/misc/lighthouse/default.nix
new file mode 100644
index 000000000000..e9aa79dcdd83
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lighthouse/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config
+, libX11, libxcb, cairo, gtk2, pango, python27, python3
+}:
+
+stdenv.mkDerivation rec {
+  name = "lighthouse-${date}";
+  date = "2016-07-20";
+
+  src = fetchFromGitHub {
+    owner = "emgram769";
+    repo = "lighthouse";
+    rev = "d1813ef8e2aca9f6b3609b1e0c6d1d5ee683281a";
+    sha256 = "0v6ylm49f1b44zwq1y1gqxp2csyqblplr24ajllc2q3r0sc9m1ys";
+   };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libX11 libxcb cairo gtk2 pango python27 python3
+  ];
+
+  makeFlags = [ "PREFIX=\${out}" ];
+
+  preFixup = "chmod +x $out/share/lighthouse/.config/lighthouse/google.py";
+
+  postFixup = "chmod -x $out/share/lighthouse/.config/lighthouse/google.py";
+
+  meta = with lib; {
+    description = "A simple flexible popup dialog to run on X";
+    homepage = "https://github.com/emgram769/lighthouse";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ramkromberg ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/llpp/default.nix b/nixpkgs/pkgs/applications/misc/llpp/default.nix
new file mode 100644
index 000000000000..7004d0dce34f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/llpp/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, substituteAll, makeWrapper, fetchgit, ocaml, mupdf, libX11, jbig2dec, openjpeg, libjpeg , lcms2, harfbuzz,
+libGLU, libGL, gumbo, freetype, zlib, xclip, inotify-tools, procps }:
+
+assert lib.versionAtLeast (lib.getVersion ocaml) "4.07";
+
+stdenv.mkDerivation rec {
+  pname = "llpp";
+  version = "33";
+
+  src = fetchgit {
+    url = "git://repo.or.cz/llpp.git";
+    rev = "v${version}";
+    sha256 = "0shqzhaflm2yhkx6c0csq9lxp1s1r7lh5kgpx9q5k06xya2a7yvs";
+    fetchSubmodules = false;
+  };
+
+  patches = (substituteAll {
+    inherit version;
+    src = ./fix-build-bash.patch;
+  });
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ ocaml mupdf libX11 libGLU libGL freetype zlib gumbo jbig2dec openjpeg libjpeg lcms2 harfbuzz ];
+
+  dontStrip = true;
+
+  configurePhase = ''
+    mkdir -p build/mupdf/thirdparty
+    ln -s ${freetype.dev} build/mupdf/thirdparty/freetype
+  '';
+
+  buildPhase = ''
+    bash ./build.bash build
+  '';
+
+  installPhase = ''
+    install -d $out/bin
+    install build/llpp $out/bin
+    install misc/llpp.inotify $out/bin/llpp.inotify
+
+    wrapProgram $out/bin/llpp \
+        --prefix PATH ":" "${xclip}/bin"
+
+    wrapProgram $out/bin/llpp.inotify \
+        --prefix PATH ":" "$out/bin" \
+        --prefix PATH ":" "${inotify-tools}/bin" \
+        --prefix PATH ":" "${procps}/bin"
+  '';
+
+  meta = with lib; {
+    homepage = "https://repo.or.cz/w/llpp.git";
+    description = "A MuPDF based PDF pager written in OCaml";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/llpp/fix-build-bash.patch b/nixpkgs/pkgs/applications/misc/llpp/fix-build-bash.patch
new file mode 100644
index 000000000000..c12828f2d94d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/llpp/fix-build-bash.patch
@@ -0,0 +1,80 @@
+diff --git a/build.bash b/build.bash
+index 7c278b6..41494c5 100755
+with manual adjustments
+--- a/build.bash
++++ b/build.bash
+@@ -30,7 +30,6 @@ srcd="$(dirname $0)"
+ mudir=$outd/mupdf
+ muinc="-I $mudir/include -I $mudir/thirdparty/freetype/include"
+ 
+-test -d "$mudir" || die muPDF not found, consult $(dirname $0)/BUILDING
+ 
+ mkdir -p $outd/{$wsid,lablGL}
+ :>$outd/ordered
+@@ -41,12 +40,6 @@ isfresh() { test -r "$1.past" && . "$1.past" && test "$k" = "$2"; }
+ mulibst="$mudir/build/$mbt/libs"
+ mulibs="$mudir/build/$mbt/libmupdf.a $mudir/build/$mbt/libmupdf-third.a"
+ 
+-keycmd="(cd $mudir && make -q build=$mbt libs && echo); digest $mulibs"
+-isfresh "$mulibst" "$(eval $keycmd)" || (
+-    make -C "$mudir" build=$mbt -j $mjobs libs
+-    eval $keycmd >${mulibst}.past
+-) && vecho "fresh mupdf"
+-
+ oincs() {
+     local i=
+     local incs1=
+@@ -100,35 +93,6 @@ mflags() {
+ }
+ 
+ overs="$(ocamlc -vnum 2>/dev/null)" || overs=""
+-test "$overs" = "4.11.1" || {
+-    url=https://caml.inria.fr/pub/distrib/ocaml-4.11/ocaml-4.11.1.tar.xz
+-    txz=$outd/$(basename $url)
+-    keycmd="printf $url; digest $txz;"
+-    isfresh $txz "$(eval $keycmd)" || {
+-        executable_p() { command -v "$1" >/dev/null 2>&1; }
+-        if executable_p wget; then dl() { wget -q "$1" -O "$2"; }
+-        elif executable_p curl; then dl() { curl -L "$1" -o "$2"; }
+-        else die "no program to fetch remote urls found"
+-        fi
+-        dl $url $txz
+-        eval $keycmd >$txz.past
+-    } && vecho "fresh $txz"
+-    absprefix=$(cd $outd &>/dev/null; pwd -P)
+-    export PATH=$absprefix/bin:$PATH
+-    ocamlc=$absprefix/bin/ocamlc
+-    keycmd="printf $url; digest $ocamlc;"
+-    isfresh $ocamlc "$(eval $keycmd)" || (
+-        tar xf $txz -C $outd
+-        bn=$(basename $url)
+-        cd $outd/${bn%.tar.xz}
+-        ./configure --disable-ocamldoc --disable-ocamltest      \
+-                    --enable-debugger=no --prefix=$absprefix
+-        make -j $mjobs world
+-        make install
+-        eval $keycmd >$absprefix/bin/ocamlc.past
+-    ) && vecho "fresh ocamlc"
+-    overs=$(ocamlc -vnum 2>/dev/null)
+-}
+ 
+ ccomp=${LLPP_CC-$(ocamlc -config | grep "^c_compiler: " | \
+                       { read _ c; echo $c; })}
+@@ -243,7 +208,7 @@ bobjc() {
+     } && vecho "fresh $o"
+ }
+ 
+-ver=$(cd $srcd && git describe --tags --dirty) || ver=unknown
++ver=@version@
+ 
+ cmd="(. $srcd/genconfstr.sh >$outd/confstruct.ml)"
+ keycmd="digest $srcd/genconfstr.sh $outd/confstruct.ml"
+@@ -291,7 +256,7 @@ for m in ml_gl ml_glarray ml_raw; do
+ done
+ 
+ libs="str.cma unix.cma"
+-clibs="-L$mudir/build/$mbt -lmupdf -lmupdf-third -lpthread"
++clibs="-lmupdf -lmupdf-third -lfreetype -lgumbo -ljpeg -lopenjp2 -ljbig2dec -llcms2 -lharfbuzz -lpthread -lz"
+ if $darwin; then
+     mcomp=$(ocamlc -config | grep bytecomp_c_co | { read _ c; echo $c; })
+     clibs="$clibs -framework Cocoa -framework OpenGL"
diff --git a/nixpkgs/pkgs/applications/misc/loxodo/default.nix b/nixpkgs/pkgs/applications/misc/loxodo/default.nix
new file mode 100644
index 000000000000..e32535d4445e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/loxodo/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, python27Packages, fetchgit }:
+let
+  py = python27Packages;
+  python = py.python;
+in
+py.buildPythonApplication {
+  name = "loxodo-0.20150124";
+
+  src = fetchgit {
+    url = "https://github.com/sommer/loxodo.git";
+    rev = "6c56efb4511fd6f645ad0f8eb3deafc8071c5795";
+    sha256 = "1cg0dfcv57ps54f1a0ksib7hgkrbdi9q699w302xyyfyvjcb5dd2";
+  };
+
+  propagatedBuildInputs = with py; [ wxPython ];
+
+  postInstall = ''
+    mv $out/bin/loxodo.py $out/bin/loxodo
+    mkdir -p $out/share/applications
+    cat > $out/share/applications/loxodo.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Exec=$out/bin/loxodo
+    Icon=$out/lib/${python.libPrefix}/site-packages/resources/loxodo-icon.png
+    Name=Loxodo
+    GenericName=Password Vault
+    Categories=Application;Other;
+    EOF
+  '';
+
+  meta = with lib; {
+    description = "A Password Safe V3 compatible password vault";
+    homepage = "https://www.christoph-sommer.de/loxodo/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lsd2dsl/default.nix b/nixpkgs/pkgs/applications/misc/lsd2dsl/default.nix
new file mode 100644
index 000000000000..b30d652584f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lsd2dsl/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, mkDerivation, lib, fetchFromGitHub, cmake
+, boost, libvorbis, libsndfile, minizip, gtest, qtwebkit }:
+
+mkDerivation rec {
+  pname = "lsd2dsl";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "nongeneric";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0s0la6zkg584is93p4nj1ha3pbnvadq84zgsv8nym3r35n7k8czi";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ boost libvorbis libsndfile minizip gtest qtwebkit ];
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=unused-result -Wno-error=missing-braces";
+
+  installPhase = ''
+    install -Dm755 console/lsd2dsl gui/lsd2dsl-qtgui -t $out/bin
+  '' + lib.optionalString stdenv.isDarwin ''
+    wrapQtApp $out/bin/lsd2dsl
+    wrapQtApp $out/bin/lsd2dsl-qtgui
+  '';
+
+  meta = with lib; {
+    homepage = "https://rcebits.com/lsd2dsl/";
+    description = "Lingvo dictionaries decompiler";
+    longDescription = ''
+      A decompiler for ABBYY Lingvo’s proprietary dictionaries.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ltwheelconf/default.nix b/nixpkgs/pkgs/applications/misc/ltwheelconf/default.nix
new file mode 100644
index 000000000000..52fac4941562
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ltwheelconf/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, libusb1, pkg-config, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "ltwheelconf";
+  version = "0.2.7";
+
+  src = fetchFromGitHub {
+    owner = "thk";
+    repo = "ltwheelconf";
+    rev = "df55451f059d593b0259431662612ab5c2bef859";
+    sha256 = "1fsz7k73yln987gcx1jvb5irxfbp1x2c457a60a8yap27nkp5y2w";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ltwheelconf $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thk/LTWheelConf";
+    description = "Logitech wheels configuration tool";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lutris/default.nix b/nixpkgs/pkgs/applications/misc/lutris/default.nix
new file mode 100644
index 000000000000..cb8494e1c48d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lutris/default.nix
@@ -0,0 +1,119 @@
+{ buildPythonApplication, lib, fetchFromGitHub, fetchpatch
+
+# build inputs
+, atk
+, gdk-pixbuf
+, glib-networking
+, gnome-desktop
+, gobject-introspection
+, gst_all_1
+, gtk3
+, libnotify
+, pango
+, webkitgtk
+, wrapGAppsHook
+
+# python dependencies
+, dbus-python
+, distro
+, evdev
+, pillow
+, pygobject3
+, pyyaml
+, requests
+, keyring
+
+# commands that lutris needs
+, xrandr
+, pciutils
+, psmisc
+, glxinfo
+, vulkan-tools
+, xboxdrv
+, pulseaudio
+, p7zip
+, xgamma
+, libstrangle
+, wine
+, fluidsynth
+, xorgserver
+, xorg
+}:
+
+let
+  # See lutris/util/linux.py
+  binPath = lib.makeBinPath [
+    xrandr
+    pciutils
+    psmisc
+    glxinfo
+    vulkan-tools
+    xboxdrv
+    pulseaudio
+    p7zip
+    xgamma
+    libstrangle
+    wine
+    fluidsynth
+    xorgserver
+    xorg.setxkbmap
+    xorg.xkbcomp
+  ];
+
+  gstDeps = with gst_all_1; [
+    gst-libav
+    gst-plugins-bad
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-ugly
+    gstreamer
+  ];
+
+in buildPythonApplication rec {
+  pname = "lutris-original";
+  version = "0.5.7.1";
+
+  src = fetchFromGitHub {
+    owner = "lutris";
+    repo = "lutris";
+    rev = "v${version}";
+    sha256 = "12ispwkbbm5aq263n3bdjmjfkpwplizacnqs2c0wnag4zj4kpm29";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+  buildInputs = [
+    atk
+    gdk-pixbuf
+    glib-networking
+    gnome-desktop
+    gobject-introspection
+    gtk3
+    libnotify
+    pango
+    webkitgtk
+  ] ++ gstDeps;
+
+  propagatedBuildInputs = [
+    evdev distro pyyaml pygobject3 requests pillow dbus-python keyring
+  ];
+
+  # avoid double wrapping
+  dontWrapGApps = true;
+  makeWrapperArgs = [
+    "--prefix PATH : ${binPath}"
+    "\${gappsWrapperArgs[@]}"
+  ];
+  # needed for glib-schemas to work correctly (will crash on dialogues otherwise)
+  # see https://github.com/NixOS/nixpkgs/issues/56943
+  strictDeps = false;
+
+  preCheck = "export HOME=$PWD";
+
+  meta = with lib; {
+    homepage = "https://lutris.net";
+    description = "Open Source gaming platform for GNU/Linux";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ chiiruno ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lutris/fhsenv.nix b/nixpkgs/pkgs/applications/misc/lutris/fhsenv.nix
new file mode 100644
index 000000000000..d7eabae0e8e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lutris/fhsenv.nix
@@ -0,0 +1,120 @@
+{ lib, buildFHSUserEnv, lutris-unwrapped
+, steamSupport ? true
+}:
+
+let
+
+  qt5Deps = pkgs: with pkgs.qt5; [ qtbase qtmultimedia ];
+  gnome3Deps = pkgs: with pkgs; [ gnome3.zenity gtksourceview gnome3.gnome-desktop gnome3.libgnome-keyring webkitgtk ];
+  xorgDeps = pkgs: with pkgs.xorg; [
+    libX11 libXrender libXrandr libxcb libXmu libpthreadstubs libXext libXdmcp
+    libXxf86vm libXinerama libSM libXv libXaw libXi libXcursor libXcomposite
+  ];
+
+in buildFHSUserEnv {
+  name = "lutris";
+
+  runScript = "lutris";
+
+  targetPkgs = pkgs: with pkgs; [
+    lutris-unwrapped
+
+    # Adventure Game Studio
+    allegro dumb
+
+    # Desmume
+    lua agg soundtouch openal desktop-file-utils atk
+
+    # DGen // TODO: libarchive is broken
+
+    # Dolphin
+    bluez ffmpeg_3 gettext portaudio wxGTK30 miniupnpc mbedtls lzo sfml gsm
+    wavpack orc nettle gmp pcre vulkan-loader
+
+    # DOSBox
+    SDL_net SDL_sound
+
+    # GOG
+    glib-networking
+
+    # Higan // TODO: "higan is not available for the x86_64 architecture"
+
+    # Libretro
+    fluidsynth hidapi mesa libdrm
+
+    # MAME
+    qt48 fontconfig SDL2_ttf
+
+    # Mednafen
+    freeglut mesa_glu
+
+    # MESS
+    expat
+
+    # Minecraft
+    nss
+
+    # Mupen64Plus
+    boost dash
+
+    # Osmose
+    qt4
+
+    # PPSSPP
+    glew snappy
+
+    # Redream // "redream is not available for the x86_64 architecture"
+
+    # ResidualVM
+    flac
+
+    # rpcs3 // TODO: "error while loading shared libraries: libz.so.1..."
+    llvm
+
+    # ScummVM
+    nasm sndio
+
+    # Snes9x
+    epoxy minizip
+
+    # Vice
+    bison flex
+
+    # WINE
+    xorg.xrandr perl which p7zip gnused gnugrep psmisc opencl-headers
+
+    # ZDOOM
+    soundfont-fluid bzip2 game-music-emu
+  ] ++ qt5Deps pkgs
+    ++ gnome3Deps pkgs
+    ++ lib.optional steamSupport pkgs.steam;
+
+  multiPkgs = pkgs: with pkgs; [
+    # Common
+    libsndfile libtheora libogg libvorbis libopus libGLU libpcap libpulseaudio
+    libao libevdev udev libgcrypt libxml2 libusb-compat-0_1 libpng libmpeg2 libv4l
+    libjpeg libxkbcommon libass libcdio libjack2 libsamplerate libzip libmad libaio
+    libcap libtiff libva libgphoto2 libxslt libsndfile giflib zlib glib
+    alsaLib zziplib bash dbus keyutils zip cabextract freetype unzip coreutils
+    readline gcc SDL SDL2 curl graphite2 gtk2 gtk3 udev ncurses wayland libglvnd
+    vulkan-loader xdg_utils sqlite gnutls p11-kit libbsd harfbuzz
+
+    # PCSX2 // TODO: "libgobject-2.0.so.0: wrong ELF class: ELFCLASS64"
+
+    # WINE
+    cups lcms2 mpg123 cairo unixODBC samba4 sane-backends openldap
+    ocl-icd util-linux libkrb5
+
+    # Proton
+    libselinux
+
+    # Winetricks
+    fribidi
+  ] ++ xorgDeps pkgs;
+
+  extraInstallCommands = ''
+    mkdir -p $out/share
+    ln -sf ${lutris-unwrapped}/share/applications $out/share
+    ln -sf ${lutris-unwrapped}/share/icons $out/share
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/misc/lyx/default.nix b/nixpkgs/pkgs/applications/misc/lyx/default.nix
new file mode 100644
index 000000000000..800de77f1c57
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lyx/default.nix
@@ -0,0 +1,45 @@
+{ fetchurl, lib, mkDerivation, pkg-config, python, file, bc
+, qtbase, qtsvg, hunspell, makeWrapper #, mythes, boost
+}:
+
+mkDerivation rec {
+  version = "2.3.6";
+  pname = "lyx";
+
+  src = fetchurl {
+    url = "ftp://ftp.lyx.org/pub/lyx/stable/2.3.x/${pname}-${version}.tar.xz";
+    sha256 = "160whjwwrmxizdakjlkf9xc86bhqfnslw47fixgqq4qhbapcxxkg";
+  };
+
+  # LaTeX is used from $PATH, as people often want to have it with extra pkgs
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    qtbase qtsvg python file/*for libmagic*/ bc
+    hunspell makeWrapper # enchant
+  ];
+
+  configureFlags = [
+    "--enable-qt5"
+    #"--without-included-boost"
+    /*  Boost is a huge dependency from which 1.4 MB of libs would be used.
+        Using internal boost stuff only increases executable by around 0.2 MB. */
+    #"--without-included-mythes" # such a small library isn't worth a separate package
+  ];
+
+  enableParallelBuilding = true;
+  doCheck = true;
+
+  # python is run during runtime to do various tasks
+  qtWrapperArgs = [
+    " --prefix PATH : ${python}/bin"
+  ];
+
+  meta = with lib; {
+    description = "WYSIWYM frontend for LaTeX, DocBook";
+    homepage = "http://www.lyx.org";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.vcunat ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/madonctl/default.nix b/nixpkgs/pkgs/applications/misc/madonctl/default.nix
new file mode 100644
index 000000000000..249ed48bd1c4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/madonctl/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "madonctl";
+  version = "1.1.0";
+
+  goPackagePath = "github.com/McKael/madonctl";
+
+  src = fetchFromGitHub {
+    owner = "McKael";
+    repo = "madonctl";
+    rev  = "v${version}";
+    sha256 = "1dnc1xaafhwhhf5afhb0wc2wbqq0s1r7qzj5k0xzc58my541gadc";
+  };
+
+  # How to update:
+  # go get -u github.com/McKael/madonctl
+  # cd $GOPATH/src/github.com/McKael/madonctl
+  # git checkout v<version-number>
+  # go2nix save
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "CLI for the Mastodon social network API";
+    homepage = "https://github.com/McKael/madonctl";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/madonctl/deps.nix b/nixpkgs/pkgs/applications/misc/madonctl/deps.nix
new file mode 100644
index 000000000000..9f94bb09ce4e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/madonctl/deps.nix
@@ -0,0 +1,228 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.0
+[
+  {
+    goPackagePath = "github.com/McKael/madon";
+    fetch = {
+      type = "git";
+      url = "https://github.com/McKael/madon";
+      rev = "e580cd41ac42bbb0b2ea5b3843b3f1f854db357c";
+      sha256 = "0jvvfkf3wlzisvcq54xv3jxncx178ks5wxd6cx8k8215437b3hra";
+    };
+  }
+  {
+    goPackagePath = "github.com/fsnotify/fsnotify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fsnotify/fsnotify";
+      rev = "4da3e2cfbabc9f751898f250b49f2439785783a1";
+      sha256 = "1y2l9jaf99j6gidcfdgq3hifxyiwv4f7awpll80p170ixdbqxvl3";
+    };
+  }
+  {
+    goPackagePath = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7";
+      sha256 = "0skwmimpy7hlh7pva2slpcplnm912rp3igs98xnqmn859kwa5v8g";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "a91eba7f97777409bc2c443f5534d41dd20c5720";
+      sha256 = "13cg6wwkk2ddqbm0nh9fpx4mq7f6qym12ch4lvs53n028ycdgw87";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/hcl";
+      rev = "392dba7d905ed5d04a5794ba89f558b27e2ba1ca";
+      sha256 = "1rfm67kma2hpakabf7hxlj196jags4rpjpcirwg4kan4g9b6j0kb";
+    };
+  }
+  {
+    goPackagePath = "github.com/kr/text";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kr/text";
+      rev = "7cafcd837844e784b526369c9bce262804aebc60";
+      sha256 = "0br693pf6vdr1sfvzdz6zxq7hjpdgci0il4wj0v636r8lyy21vsx";
+    };
+  }
+  {
+    goPackagePath = "github.com/m0t0k1ch1/gomif";
+    fetch = {
+      type = "git";
+      url = "https://github.com/m0t0k1ch1/gomif";
+      rev = "f5864f63e1ed5a138f015cc2cb71a2e99c148d21";
+      sha256 = "0djg8chax1g0m02xz84ic19758jzv5m50b7vpwjkpjk3181j5z9k";
+    };
+  }
+  {
+    goPackagePath = "github.com/magiconair/properties";
+    fetch = {
+      type = "git";
+      url = "https://github.com/magiconair/properties";
+      rev = "51463bfca2576e06c62a8504b5c0f06d61312647";
+      sha256 = "0d7hr78y8gg2mrm5z4jjgm2w3awkznz383b7wvyzk3l33jw6i288";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "fc9e8d8ef48496124e79ae0df75490096eccf6fe";
+      sha256 = "1r5f9gkavkb1w6sr0qs5kj16706xirl3qnlq3hqpszkw9w27x65a";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure";
+      rev = "cc8532a8e9a55ea36402aa21efdf403a60d34096";
+      sha256 = "0705c0hq7b993sabnjy65yymvpy9w1j84bg9bjczh5607z16nw86";
+    };
+  }
+  {
+    goPackagePath = "github.com/pelletier/go-buffruneio";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-buffruneio";
+      rev = "c37440a7cf42ac63b919c752ca73a85067e05992";
+      sha256 = "0l83p1gg6g5mmhmxjisrhfimhbm71lwn1r2w7d6siwwqm9q08sd2";
+    };
+  }
+  {
+    goPackagePath = "github.com/pelletier/go-toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-toml";
+      rev = "5c26a6ff6fd178719e15decac1c8196da0d7d6d1";
+      sha256 = "0f4l7mq0nb2p2vjfjqx251s6jzkl646n1vw45chykwvv1sbad8nq";
+    };
+  }
+  {
+    goPackagePath = "github.com/pkg/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pkg/errors";
+      rev = "c605e284fe17294bda444b34710735b29d1a9d90";
+      sha256 = "1izjk4msnc6wn1mclg0ypa6i31zfwb1r3032k8q4jfbd57hp0bz6";
+    };
+  }
+  {
+    goPackagePath = "github.com/sendgrid/rest";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sendgrid/rest";
+      rev = "14de1ac72d9ae5c3c0d7c02164c52ebd3b951a4e";
+      sha256 = "0wrggvgnqdmhscim52hvhg77jhksprxp52sc4ipd69kasd32b5dm";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/afero";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/afero";
+      rev = "9be650865eab0c12963d8753212f4f9c66cdcf12";
+      sha256 = "12dhh6d07304lsjv7c4p95hkip0hnshqhwivdw39pbypgg0p8y34";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cast";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cast";
+      rev = "acbeb36b902d72a7a4c18e8f3241075e7ab763e4";
+      sha256 = "0w25s6gjbbwv47b9208hysyqqphd6pib3d2phg24mjy4wigkm050";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/cobra";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/cobra";
+      rev = "ca5710c94eabe15aa1f74490b8e5976dc652e8c6";
+      sha256 = "1z5fxh9akwn95av6ra8p6804nhyxjc63m0s6abxi3l424n30b08i";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/jwalterweatherman";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/jwalterweatherman";
+      rev = "8f07c835e5cc1450c082fe3a439cf87b0cbb2d99";
+      sha256 = "1dhl6kdbyczhnsgiyc8mcb7kmxd9garx8gy3q2gx5mmv96xxzxx7";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/pflag";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/pflag";
+      rev = "e57e3eeb33f795204c1ca35f56c44f83227c6e66";
+      sha256 = "13mhx4i913jil32j295m3a36jzvq1y64xig0naadiz7q9ja011r2";
+    };
+  }
+  {
+    goPackagePath = "github.com/spf13/viper";
+    fetch = {
+      type = "git";
+      url = "https://github.com/spf13/viper";
+      rev = "0967fc9aceab2ce9da34061253ac10fb99bba5b2";
+      sha256 = "016syis0rvccp2indjqi1vnz3wk7c9dhkvkgam0j79sb019kl80f";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "513929065c19401a1c7b76ecd942f9f86a0c061b";
+      sha256 = "19ziin0k3n45nccjbk094f61hr198wzqnas93cmcxdja8f8fz27q";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/oauth2";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/oauth2";
+      rev = "f047394b6d14284165300fd82dad67edb3a4d7f6";
+      sha256 = "1l1a2iz1nmfmzzbjj1h8066prag4jvjqh13iv1jdlh05fgv6769i";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "a2e06a18b0d52d8cb2010e04b372a1965d8e3439";
+      sha256 = "0m0r2w2qk8jkdk21h52n66g4yqckmzpx3mph73cilkhvdfgwfd21";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "19e51611da83d6be54ddafce4a4af510cb3e9ea4";
+      sha256 = "09pcfzx7nrma0gjv93jx57c28farf8m1qm4x07vk5505wlcgvvfl";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b";
+      sha256 = "1hj2ag9knxflpjibck0n90jrhsrqz7qvad4qnif7jddyapi9bqzl";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/misc/makeself/default.nix b/nixpkgs/pkgs/applications/misc/makeself/default.nix
new file mode 100644
index 000000000000..205d526ed941
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/makeself/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, which }:
+
+stdenv.mkDerivation rec {
+  version = "2.4.2";
+  pname = "makeself";
+
+  src = fetchFromGitHub {
+    owner = "megastep";
+    repo = "makeself";
+    rev = "release-${version}";
+    fetchSubmodules = true;
+    sha256 = "07cq7q71bv3fwddkp2863ylry2ivds00f8sjy8npjpdbkailxm21";
+  };
+
+  patchPhase = "patchShebangs test";
+
+  doCheck = true;
+  checkTarget = "test";
+  checkInputs = [ which ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/{${pname}-${version},man/man1}}
+    cp makeself.lsm README.md $out/share/${pname}-${version}
+    cp makeself.sh $out/bin/makeself
+    cp makeself.1  $out/share/man/man1/
+    cp makeself-header.sh $out/share/${pname}-${version}
+  '';
+
+  fixupPhase = ''
+    sed -e "s|^HEADER=.*|HEADER=$out/share/${pname}-${version}/makeself-header.sh|" -i $out/bin/makeself
+  '';
+
+  meta = with lib; {
+    homepage = "http://megastep.org/makeself";
+    description = "Utility to create self-extracting packages";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.wmertens ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mako/default.nix b/nixpkgs/pkgs/applications/misc/mako/default.nix
new file mode 100644
index 000000000000..a845a767b2aa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mako/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, scdoc
+, systemd, pango, cairo, gdk-pixbuf
+, wayland, wayland-protocols
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "mako";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "emersion";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hwvibpnrximb628w9dsfjpi30b5jy7nfkm4d94z5vhp78p43vxh";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-protocols wrapGAppsHook ];
+  buildInputs = [ systemd pango cairo gdk-pixbuf wayland ];
+
+  mesonFlags = [ "-Dzsh-completions=true" ];
+
+  meta = with lib; {
+    description = "A lightweight Wayland notification daemon";
+    homepage = "https://wayland.emersion.fr/mako/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dywedir synthetica ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mapproxy/default.nix b/nixpkgs/pkgs/applications/misc/mapproxy/default.nix
new file mode 100644
index 000000000000..48e2a3960ee7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mapproxy/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, pkgs
+, python3
+}:
+
+with python3.pkgs;
+buildPythonApplication rec {
+  pname = "MapProxy";
+  version = "1.13.0";
+  src = fetchPypi {
+  inherit pname version;
+  sha256 = "0qi63ap8yi5g2cas33jv4jsmdrl6yv3qp6bh0zxrfpkb704lcng4";
+  };
+  prePatch = ''
+    substituteInPlace mapproxy/util/ext/serving.py --replace "args = [sys.executable] + sys.argv" "args = sys.argv"
+  '';
+  propagatedBuildInputs = [
+    boto3 # needed for caches service
+    pillow
+    pyyaml
+    pyproj
+    shapely
+    gdal
+    lxml
+    setuptools
+  ];
+  # Tests are disabled:
+  # 1) Dependency list is huge.
+  #    https://github.com/mapproxy/mapproxy/blob/master/requirements-tests.txt
+  #
+  # 2) There are security issues with package Riak
+  #    https://github.com/NixOS/nixpkgs/issues/33876
+  #    https://github.com/NixOS/nixpkgs/pull/56480
+  doCheck = false;
+  meta = with lib; {
+  description = "Open source proxy for geospatial data";
+  homepage = "https://mapproxy.org/";
+  license = licenses.asl20;
+  maintainers = with maintainers; [ rakesh4g ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/marktext/default.nix b/nixpkgs/pkgs/applications/misc/marktext/default.nix
new file mode 100644
index 000000000000..83a7aabaef7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/marktext/default.nix
@@ -0,0 +1,41 @@
+{ appimageTools, fetchurl, lib, gsettings-desktop-schemas, gtk3 }:
+
+let
+  pname = "marktext";
+  version = "v0.16.2";
+in
+appimageTools.wrapType2 rec {
+  name = "${pname}-${version}-binary";
+
+  src = fetchurl {
+    url = "https://github.com/marktext/marktext/releases/download/${version}/marktext-x86_64.AppImage";
+    sha256 = "0ivf9lvv2jk7dvxmqprzcsxgya3617xmx5bppjvik44z14b5x8r7";
+  };
+
+  profile = ''
+    export LC_ALL=C.UTF-8
+  ''
+  # Fixes file open dialog error
+  #     GLib-GIO-ERROR **: 20:36:48.243: No GSettings schemas are installed on the system
+  # See https://github.com/NixOS/nixpkgs/pull/83701#issuecomment-608034097
+  + ''
+    export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS
+  '';
+
+  multiPkgs = null; # no 32bit needed
+  extraPkgs = p: (appimageTools.defaultFhsEnvArgs.multiPkgs p) ++ [
+    p.libsecret
+    p.xlibs.libxkbfile
+  ];
+
+  # Strip version from binary name.
+  extraInstallCommands = "mv $out/bin/${name} $out/bin/${pname}";
+
+  meta = with lib; {
+    description = "A simple and elegant markdown editor, available for Linux, macOS and Windows";
+    homepage = "https://marktext.app";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nh2 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/masterpdfeditor/default.nix b/nixpkgs/pkgs/applications/misc/masterpdfeditor/default.nix
new file mode 100644
index 000000000000..a743a9fbc27d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/masterpdfeditor/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, fetchurl, sane-backends, qtbase, qtsvg, nss, autoPatchelfHook, lib, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "masterpdfeditor";
+  version = "5.6.09";
+
+  src = fetchurl {
+    url = "https://code-industry.net/public/master-pdf-editor-${version}-qt5.amd64.tar.gz";
+    sha256 = "0v9j6fwr0xl03kr77vf4wdb06zlplmn4mr3jyzxhvs8a77scmfzb";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook wrapQtAppsHook ];
+
+  buildInputs = [ nss qtbase qtsvg sane-backends stdenv.cc.cc ];
+
+  dontStrip = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    p=$out/opt/masterpdfeditor
+    mkdir -p $out/bin
+
+    substituteInPlace masterpdfeditor5.desktop \
+      --replace 'Exec=/opt/master-pdf-editor-5' "Exec=$out/bin" \
+      --replace 'Path=/opt/master-pdf-editor-5' "Path=$out/bin" \
+      --replace 'Icon=/opt/master-pdf-editor-5' "Icon=$out/share/pixmaps"
+
+    install -Dm644 -t $out/share/pixmaps      masterpdfeditor5.png
+    install -Dm644 -t $out/share/applications masterpdfeditor5.desktop
+    install -Dm755 -t $p                      masterpdfeditor5
+    install -Dm644 license.txt $out/share/$name/LICENSE
+    ln -s $p/masterpdfeditor5 $out/bin/masterpdfeditor5
+    cp -v -r stamps templates lang fonts $p
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Master PDF Editor";
+    homepage = "https://code-industry.net/free-pdf-editor/";
+    license = licenses.unfreeRedistributable;
+    platforms = with platforms; [ "x86_64-linux" ];
+    maintainers = with maintainers; [ cmcdragonkai flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/masterpdfeditor4/default.nix b/nixpkgs/pkgs/applications/misc/masterpdfeditor4/default.nix
new file mode 100644
index 000000000000..b4b9a4d62446
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/masterpdfeditor4/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, sane-backends, qtbase, qtsvg, autoPatchelfHook, lib, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "masterpdfeditor4";
+  version = "4.3.89";
+
+  src = fetchurl {
+    url = "https://code-industry.net/public/master-pdf-editor-${version}_qt5.amd64.tar.gz";
+    sha256 = "0k5bzlhqglskiiq86nmy18mnh5bf2w3mr9cq3pibrwn5pisxnxxc";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook wrapQtAppsHook ];
+
+  buildInputs = [ qtbase qtsvg sane-backends stdenv.cc.cc ];
+
+  installPhase = ''
+    runHook preInstall
+
+    app_dir=$out/opt/masterpdfeditor4
+    mkdir -p $out/bin
+
+    substituteInPlace masterpdfeditor4.desktop \
+      --replace 'Exec=/opt/master-pdf-editor-4' "Exec=$out/bin" \
+      --replace 'Path=/opt/master-pdf-editor-4' "Path=$out/bin" \
+      --replace 'Icon=/opt/master-pdf-editor-4' "Icon=$out/share/pixmaps"
+
+    install -Dm644 -t $out/share/pixmaps      masterpdfeditor4.png
+    install -Dm644 -t $out/share/applications masterpdfeditor4.desktop
+    install -Dm755 -t $app_dir                masterpdfeditor4
+    install -Dm644 license.txt $out/share/$name/LICENSE
+    ln -s $app_dir/masterpdfeditor4 $out/bin/masterpdfeditor4
+    cp -v -r stamps templates lang fonts $app_dir
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Master PDF Editor - version 4, without watermark";
+    homepage = "https://code-industry.net/free-pdf-editor/";
+    license = licenses.unfreeRedistributable;
+    platforms = with platforms; [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mbutil/default.nix b/nixpkgs/pkgs/applications/misc/mbutil/default.nix
new file mode 100644
index 000000000000..b108d1a5647e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mbutil/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonApplication, fetchFromGitHub, nose }:
+
+buildPythonApplication rec {
+  pname = "mbutil";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "mapbox";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06d62r89h026asaa4ryzb23m86j0cmbvy54kf4zl5f35sgiha45z";
+  };
+
+  checkInputs = [ nose ];
+  checkPhase = "nosetests";
+
+  meta = with lib; {
+    description = "An importer and exporter for MBTiles";
+    homepage = "https://github.com/mapbox/mbutil";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mdp/default.nix b/nixpkgs/pkgs/applications/misc/mdp/default.nix
new file mode 100644
index 000000000000..2c13ed4ecc9e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mdp/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.15";
+  pname = "mdp";
+
+  src = fetchFromGitHub {
+    owner = "visit1985";
+    repo = "mdp";
+    rev = version;
+    sha256 = "1m9a0vvyw2m55cn7zcq011vrjkiaj5a3g5g6f2dpq953gyi7gff9";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    homepage = "https://github.com/visit1985/mdp";
+    description = "A command-line based markdown presentation tool";
+    maintainers = with maintainers; [ matthiasbeyer vrthra ];
+    license = licenses.gpl3;
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mediaelch/default.nix b/nixpkgs/pkgs/applications/misc/mediaelch/default.nix
new file mode 100644
index 000000000000..f19cbee8b79f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mediaelch/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv
+, mkDerivation
+, fetchFromGitHub
+, qmake
+, curl
+, ffmpeg
+, libmediainfo
+, libzen
+, qtbase
+, qtdeclarative
+, qtmultimedia
+}:
+
+mkDerivation rec {
+  pname = "mediaelch";
+  version = "2.8.6";
+
+  src = fetchFromGitHub {
+    owner = "Komet";
+    repo = "MediaElch";
+    rev = "v${version}";
+    sha256 = "1134vw7hr0mpqcsxjq4bqmg5760dngz17bzj97ypfc5cvzcxjh43";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  buildInputs = [ curl libmediainfo libzen ffmpeg qtbase qtdeclarative qtmultimedia ];
+
+  prePatch = ''
+    substituteInPlace MediaElch.pro --replace "/usr" "$out"
+  '';
+
+  meta = with lib; {
+    homepage = "https://mediaelch.de/mediaelch/";
+    description = "Media Manager for Kodi";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ stunkymonkey ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mediainfo-gui/default.nix b/nixpkgs/pkgs/applications/misc/mediainfo-gui/default.nix
new file mode 100644
index 000000000000..3e8aacb98957
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mediainfo-gui/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, libzen, libmediainfo, wxGTK30-gtk3
+, desktop-file-utils, libSM, imagemagick }:
+
+stdenv.mkDerivation rec {
+  version = "20.09";
+  pname = "mediainfo-gui";
+  src = fetchurl {
+    url = "https://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
+    sha256 = "0rqg9z7s5bk7vlvjrs4gackzg7ib05a0dffi2ihsjf5a7kw7wcir";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libzen libmediainfo wxGTK30-gtk3 desktop-file-utils libSM
+                  imagemagick ];
+
+  sourceRoot = "./MediaInfo/Project/GNU/GUI/";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Supplies technical and tag information about a video or audio file (GUI version)";
+    longDescription = ''
+      MediaInfo is a convenient unified display of the most relevant technical
+      and tag data for video and audio files.
+    '';
+    homepage = "https://mediaarea.net/";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mediainfo/default.nix b/nixpkgs/pkgs/applications/misc/mediainfo/default.nix
new file mode 100644
index 000000000000..7c81e9607f92
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mediainfo/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, libzen, libmediainfo, zlib }:
+
+stdenv.mkDerivation rec {
+  version = "20.09";
+  pname = "mediainfo";
+  src = fetchurl {
+    url = "https://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
+    sha256 = "0rqg9z7s5bk7vlvjrs4gackzg7ib05a0dffi2ihsjf5a7kw7wcir";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libzen libmediainfo zlib ];
+
+  sourceRoot = "./MediaInfo/Project/GNU/CLI/";
+
+  configureFlags = [ "--with-libmediainfo=${libmediainfo}" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Supplies technical and tag information about a video or audio file";
+    longDescription = ''
+      MediaInfo is a convenient unified display of the most relevant technical
+      and tag data for video and audio files.
+    '';
+    homepage = "https://mediaarea.net/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/megacmd/default.nix b/nixpkgs/pkgs/applications/misc/megacmd/default.nix
new file mode 100644
index 000000000000..23d34f30d64c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/megacmd/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, autoconf
+, automake
+, c-ares
+, cryptopp
+, curl
+, fetchFromGitHub
+, ffmpeg_3
+, freeimage
+, gcc-unwrapped
+, libmediainfo
+, libraw
+, libsodium
+, libtool
+, libuv
+, libzen
+, pcre-cpp
+, pkg-config
+, readline
+, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "megacmd";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "meganz";
+    repo = "MEGAcmd";
+    rev = "${version}_Linux";
+    sha256 = "0czyhsms0a0237d6h9b21n9p4nm4zkjanhhbvw26k6266g6c1nyr";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    libtool
+    pkg-config
+  ];
+
+  buildInputs = [
+    c-ares
+    cryptopp
+    curl
+    ffmpeg_3
+    freeimage
+    gcc-unwrapped
+    libmediainfo
+    libraw
+    libsodium
+    libtool
+    libuv
+    libzen
+    pcre-cpp
+    readline
+    sqlite
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = [
+    "--disable-curl-checks"
+    "--disable-examples"
+    "--with-cares"
+    "--with-cryptopp"
+    "--with-curl"
+    "--with-ffmpeg"
+    "--with-freeimage"
+    "--with-libmediainfo"
+    "--with-libuv"
+    "--with-libzen"
+    "--with-pcre"
+    "--with-readline"
+    "--with-sodium"
+    "--with-termcap"
+  ];
+
+  meta = with lib; {
+    description = "MEGA Command Line Interactive and Scriptable Application";
+    homepage    = "https://mega.nz/";
+    license     = licenses.unfree;
+    platforms   = [ "i686-linux" "x86_64-linux" ];
+    maintainers = [ maintainers.wedens ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/megasync/default.nix b/nixpkgs/pkgs/applications/misc/megasync/default.nix
new file mode 100644
index 000000000000..c302a4b4a074
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/megasync/default.nix
@@ -0,0 +1,120 @@
+{ lib, stdenv
+, autoconf
+, automake
+, c-ares
+, cryptopp
+, curl
+, doxygen
+, fetchFromGitHub
+, fetchpatch
+, ffmpeg_3
+, libmediainfo
+, libraw
+, libsodium
+, libtool
+, libuv
+, libzen
+, lsb-release
+, mkDerivation
+, pkg-config
+, qtbase
+, qttools
+, qtx11extras
+, sqlite
+, swig
+, unzip
+, wget
+}:
+
+mkDerivation rec {
+  pname = "megasync";
+  version = "4.3.5.0";
+
+  src = fetchFromGitHub {
+    owner = "meganz";
+    repo = "MEGAsync";
+    rev = "v${version}_Linux";
+    sha256 = "0rr1jjy0n5bj1lh6xi3nbbcikvq69j3r9qnajp4mhywr5izpccvs";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs =
+    [ autoconf automake doxygen lsb-release pkg-config qttools swig ];
+  buildInputs = [
+    c-ares
+    cryptopp
+    curl
+    ffmpeg_3
+    libmediainfo
+    libraw
+    libsodium
+    libtool
+    libuv
+    libzen
+    qtbase
+    qtx11extras
+    sqlite
+    unzip
+    wget
+  ];
+
+  patches = [
+    # Distro and version targets attempt to use lsb_release which is broken
+    # (see issue: https://github.com/NixOS/nixpkgs/issues/22729)
+    ./noinstall-distro-version.patch
+    # megasync target is not part of the install rule thanks to a commented block
+    ./install-megasync.patch
+  ];
+
+  postPatch = ''
+    for file in $(find src/ -type f \( -iname configure -o -iname \*.sh  \) ); do
+      substituteInPlace "$file" --replace "/bin/bash" "${stdenv.shell}"
+    done
+  '';
+
+  dontUseQmakeConfigure = true;
+  enableParallelBuilding = true;
+
+  preConfigure = ''
+    cd src/MEGASync/mega
+    ./autogen.sh
+  '';
+
+  configureFlags = [
+    "--disable-examples"
+    "--disable-java"
+    "--disable-php"
+    "--enable-chat"
+    "--with-cares"
+    "--with-cryptopp"
+    "--with-curl"
+    "--with-ffmpeg"
+    "--without-freeimage" # unreferenced even when found
+    "--without-readline"
+    "--without-termcap"
+    "--with-sodium"
+    "--with-sqlite"
+    "--with-zlib"
+  ];
+
+  postConfigure = ''
+    cd ../..
+  '';
+
+  preBuild = ''
+    qmake CONFIG+="release" MEGA.pro
+    pushd MEGASync
+      lrelease MEGASync.pro
+      DESKTOP_DESTDIR="$out" qmake PREFIX="$out" -o Makefile MEGASync.pro CONFIG+=release
+    popd
+  '';
+
+  meta = with lib; {
+    description =
+      "Easy automated syncing between your computers and your MEGA Cloud Drive";
+    homepage = "https://mega.nz/";
+    license = licenses.unfree;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = [ maintainers.michojel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/megasync/install-megasync.patch b/nixpkgs/pkgs/applications/misc/megasync/install-megasync.patch
new file mode 100644
index 000000000000..7d8748528e7f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/megasync/install-megasync.patch
@@ -0,0 +1,21 @@
+Index: source/src/MEGASync/MEGASync.pro
+===================================================================
+--- source.orig/src/MEGASync/MEGASync.pro
++++ source/src/MEGASync/MEGASync.pro
+@@ -28,11 +28,11 @@ unix:!macx {
+     TARGET = megasync
+ 
+ #    Uncomment the following if "make install" doesn't copy megasync in /usr/bin directory
+-#    isEmpty(PREFIX) {
+-#        PREFIX = /usr
+-#    }
+-#    target.path = $$PREFIX/bin
+-#    INSTALLS += target
++    isEmpty(PREFIX) {
++        PREFIX = /usr
++    }
++    target.path = $$PREFIX/bin
++    INSTALLS += target
+ }
+ else {
+     TARGET = MEGAsync
diff --git a/nixpkgs/pkgs/applications/misc/megasync/noinstall-distro-version.patch b/nixpkgs/pkgs/applications/misc/megasync/noinstall-distro-version.patch
new file mode 100644
index 000000000000..bbf100737bc4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/megasync/noinstall-distro-version.patch
@@ -0,0 +1,13 @@
+Index: source/src/MEGASync/platform/platform.pri
+===================================================================
+--- source.orig/src/MEGASync/platform/platform.pri
++++ source/src/MEGASync/platform/platform.pri
+@@ -37,7 +37,7 @@ unix:!macx {
+     system(command -v lsb_release): version.commands = lsb_release -rs > $$version.target
+ 	version.files = $$version.target
+ 
+-	INSTALLS += distro version
++	# INSTALLS += distro version
+ 
+     QT += dbus
+     SOURCES += $$PWD/linux/LinuxPlatform.cpp \
diff --git a/nixpkgs/pkgs/applications/misc/memo/default.nix b/nixpkgs/pkgs/applications/misc/memo/default.nix
new file mode 100644
index 000000000000..885e5466f8b3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/memo/default.nix
@@ -0,0 +1,52 @@
+{ fetchFromGitHub, silver-searcher, tree, man, lib, stdenv,
+  git,
+  pandocSupport ? true, pandoc ? null
+  , ... }:
+
+assert pandocSupport -> pandoc != null;
+
+stdenv.mkDerivation rec {
+
+  pname = "memo";
+
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner  = "mrVanDalo";
+    repo   = "memo";
+    rev    = version;
+    sha256 = "0azx2bx6y7j0637fg3m8zigcw09zfm2mw9wjfg218sx88cm1wdkp";
+  };
+
+  installPhase = let
+    pandocReplacement = if pandocSupport then
+      "pandoc_cmd=${pandoc}/bin/pandoc"
+    else
+      "#pandoc_cmd=pandoc";
+  in ''
+    mkdir -p $out/{bin,share/man/man1,share/bash-completion/completions,share/zsh/site-functions}
+    substituteInPlace memo \
+      --replace "ack_cmd=ack"       "ack_cmd=${silver-searcher}/bin/ag" \
+      --replace "tree_cmd=tree"     "tree_cmd=${tree}/bin/tree" \
+      --replace "man_cmd=man"       "man_cmd=${man}/bin/man" \
+      --replace "git_cmd=git"       "git_cmd=${git}/bin/git" \
+      --replace "pandoc_cmd=pandoc" "${pandocReplacement}"
+    mv memo $out/bin/
+    mv doc/memo.1 $out/share/man/man1/memo.1
+    mv completion/bash/memo.sh $out/share/bash-completion/completions/memo.sh
+    mv completion/zsh/_memo    $out/share/zsh/site-functions/_memo
+  '';
+
+  meta = {
+    description = "A simple tool written in bash to memorize stuff";
+    longDescription = ''
+      A simple tool written in bash to memorize stuff.
+      Memo organizes is structured through topics which are folders in ~/memo.
+    '';
+    homepage = "http://palovandalo.com/memo/";
+    downloadPage = "https://github.com/mrVanDalo/memo/releases";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.mrVanDalo ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mencal/default.nix b/nixpkgs/pkgs/applications/misc/mencal/default.nix
new file mode 100644
index 000000000000..806d6a53cfaa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mencal/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  name = "mencal-3.0";
+
+  src = fetchurl {
+    url = "http://kyberdigi.cz/projects/mencal/files/${name}.tar.gz";
+    sha256 = "9328d0b2f3f57847e8753c5184531f4832be7123d1b6623afdff892074c03080";
+  };
+
+  installPhase = ''
+      mkdir -p $out/bin
+      cp mencal $out/bin/
+    '';
+
+  buildInputs = [ perl ];
+
+  meta = with lib; {
+    description = "Menstruation calendar";
+    longDescription = ''
+      Mencal is a simple variation of the well-known unix command cal.
+      The main difference is that you can have some periodically repeating
+      days highlighted in color. This can be used to track
+      menstruation (or other) cycles conveniently.
+    '';
+    homepage = "http://www.kyberdigi.cz/projects/mencal/english.html";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.mmahut ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/menumaker/default.nix b/nixpkgs/pkgs/applications/misc/menumaker/default.nix
new file mode 100644
index 000000000000..192228de5d91
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/menumaker/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "menumaker";
+  version = "0.99.12";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/menumaker/${pname}-${version}.tar.gz";
+    sha256 = "034v5204bsgkzzk6zfa5ia63q95gln47f7hwf96yvad5hrhmd8z3";
+  };
+
+  format = "other";
+
+  meta = with lib; {
+    description = "Heuristics-driven menu generator for several window managers";
+    homepage = "http://menumaker.sourceforge.net";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/merkaartor/default.nix b/nixpkgs/pkgs/applications/misc/merkaartor/default.nix
new file mode 100644
index 000000000000..8eee8c1f09fe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/merkaartor/default.nix
@@ -0,0 +1,36 @@
+{ mkDerivation, lib, fetchFromGitHub, qmake, pkg-config, fetchpatch
+, boost, gdal, proj, qtbase, qtsvg, qtwebview, qtwebkit }:
+
+mkDerivation rec {
+  pname = "merkaartor";
+  version = "0.18.4";
+
+  src = fetchFromGitHub {
+    owner = "openstreetmap";
+    repo = "merkaartor";
+    rev = version;
+    sha256 = "vwO4/a7YF9KbpxcFGTFCdG6SfwEyhISlEtcA+rMebUA=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/openstreetmap/merkaartor/commit/e72553a7ea2c7ba0634cc3afcd27a9f7cfef089c.patch";
+      sha256 = "NAisplnS3xHSlRpX+fH15NpbaD+uM57OCsTYGKlIR7U=";
+    })
+  ];
+
+  nativeBuildInputs = [ qmake pkg-config ];
+
+  buildInputs = [ boost gdal proj qtbase qtsvg qtwebview qtwebkit ];
+
+  enableParallelBuilding = true;
+
+  NIX_CFLAGS_COMPILE = "-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H";
+
+  meta = with lib; {
+    description = "OpenStreetMap editor";
+    homepage = "http://merkaartor.be/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/metamorphose2/default.nix b/nixpkgs/pkgs/applications/misc/metamorphose2/default.nix
new file mode 100644
index 000000000000..277d00fe050b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/metamorphose2/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchgit, makeWrapper, gettext
+, python27, python2Packages
+}:
+
+stdenv.mkDerivation {
+  pname = "metamorphose2";
+  version = "0.9.0beta";
+
+  # exif-py vendored via submodule
+  # mutagen vendored via copy
+  src = fetchgit {
+    url = "https://github.com/metamorphose/metamorphose2.git";
+    #rev = "refs/tags/v2.${version}"; #for when wxPython3 support is released
+    rev = "d2bdd6a86340b9668e93b35a6a568894c9909d68";
+    sha256 = "0ivcb3c8hidrff0ivl4dnwa2p3ihpqjdbvdig8dhg9mm5phdbabn";
+  };
+
+  postPatch = ''
+    substituteInPlace messages/Makefile \
+      --replace "\$(shell which msgfmt)" "${gettext}/bin/msgfmt"
+  '';
+
+  postInstall = ''
+    rm $out/bin/metamorphose2
+    makeWrapper ${python27}/bin/python $out/bin/metamorphose2 \
+      --prefix PYTHONPATH : $PYTHONPATH:$(toPythonPath "$out") \
+      --add-flags "-O $out/share/metamorphose2/metamorphose2.py -w=3"
+  '';
+
+  buildInput = [ gettext python27 ];
+  nativeBuildInputs = [ makeWrapper ];
+  propagatedBuildInputs = [ python2Packages.wxPython python2Packages.pillow ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "a graphical mass renaming program for files and folders";
+    homepage    = "https://github.com/metamorphose/metamorphose2";
+    license     = with licenses; gpl3Plus;
+    maintainers = with maintainers; [ ramkromberg ];
+    platforms   = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/metar/default.nix b/nixpkgs/pkgs/applications/misc/metar/default.nix
new file mode 100644
index 000000000000..d9e1922f1c48
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/metar/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchgit, curl }:
+
+stdenv.mkDerivation {
+  name = "metar-20161013.1";
+
+  src = fetchgit {
+    url = "https://github.com/keesL/metar.git";
+    rev = "20e9ca69faea330f6c2493b6829131c24cb55147";
+    sha256 = "1fgrlnpasqf1ihh9y6zy6mzzybqx0lxvh7gmv03rjdb55dr42dxj";
+  };
+
+  buildInputs = [ curl ];
+
+  meta = with lib; {
+    homepage = "https://github.com/keesL/metar";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.zalakain ];
+    description = "Downloads weather reports and optionally decodes them";
+    longDescription = ''
+      METAR reports are meteorogical weather reports for aviation. Metar is a small
+      program which downloads weather reports for user-specified stations and
+      optionally decodes them into a human-readable format.
+
+      Currently, metar supports decoding date/time, wind, visibility, cloud layers,
+      temperature, air pressure and weather phenomena, such as rain, fog, etc. Also,
+      more work in the area of clouds need to be done, as support for Cumulus or
+      Cumulunimbus is not yet decoded.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/michabo/default.nix b/nixpkgs/pkgs/applications/misc/michabo/default.nix
new file mode 100644
index 000000000000..015a326fdc9b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/michabo/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, mkDerivation
+, makeDesktopItem
+, fetchFromGitLab
+, qmake
+# qt
+, qtbase
+, qtwebsockets
+}:
+
+let
+  desktopItem = makeDesktopItem {
+    type = "Application";
+    name = "Michabo";
+    desktopName = "Michabo";
+    exec = "Michabo";
+  };
+
+in mkDerivation rec {
+  pname = "michabo";
+  version = "0.1";
+
+  src = fetchFromGitLab {
+    domain = "git.pleroma.social";
+    owner = "kaniini";
+    repo = "michabo";
+    rev = "v${version}";
+    sha256 = "0pl4ymdb36r0kwlclfjjp6b1qml3fm9ql7ag5inprny5y8vcjpzn";
+  };
+
+  nativeBuildInputs = [
+    qmake
+  ];
+  buildInputs = [
+    qtbase
+    qtwebsockets
+  ];
+
+  qmakeFlags = [ "michabo.pro" "DESTDIR=${placeholder "out"}/bin" ];
+
+  postInstall = ''
+    ln -s ${desktopItem}/share $out/share
+  '';
+
+  meta = with lib; {
+    description = "A native desktop app for Pleroma and Mastodon servers";
+    homepage = "https://git.pleroma.social/kaniini/michabo";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/milu/default.nix b/nixpkgs/pkgs/applications/misc/milu/default.nix
new file mode 100644
index 000000000000..23da8abc6682
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/milu/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, unzip, pkg-config, glib, llvmPackages }:
+
+stdenv.mkDerivation {
+  pname = "milu-nightly";
+  version = "2016-05-09";
+
+  src = fetchFromGitHub {
+    sha256 = "14cglw04cliwlpvw7qrs6rfm5sv6qa558d7iby5ng3wdjcwx43nk";
+    rev = "b5f2521859c0319d321ad3c1ad793b826ab5f6e1";
+    repo = "Milu";
+    owner = "yuejia";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    sed -i 's#/usr/bin/##g' Makefile
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/milu $out/bin
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+     glib
+     unzip
+     llvmPackages.libclang
+  ];
+
+  meta = {
+    description = "Higher Order Mutation Testing Tool for C and C++ programs";
+    homepage = "https://github.com/yuejia/Milu";
+    license = lib.licenses.bsd2;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.vrthra ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/minder/default.nix b/nixpkgs/pkgs/applications/misc/minder/default.nix
new file mode 100644
index 000000000000..16fa17609e1e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/minder/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub
+, pkg-config, meson, ninja, python3
+, wrapGAppsHook, vala, shared-mime-info
+, cairo, pantheon, glib, gtk3, libxml2, libgee, libarchive
+, discount, gtksourceview3
+, hicolor-icon-theme # for setup-hook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "minder";
+  version = "1.11.3";
+
+  src = fetchFromGitHub {
+    owner = "phase1geo";
+    repo = pname;
+    rev = version;
+    sha256 = "137kyf82n5a2v0cm9q02rhv8rmbjgnj60h64prq90h0d42prj3gd";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja python3 wrapGAppsHook vala shared-mime-info ];
+  buildInputs = [ cairo pantheon.granite glib gtk3 libxml2 libgee libarchive hicolor-icon-theme discount gtksourceview3 ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  postFixup = ''
+    for x in $out/bin/*; do
+      ln -vrs $x "$out/bin/''${x##*.}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Mind-mapping application for Elementary OS";
+    homepage = "https://github.com/phase1geo/Minder";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/minergate-cli/default.nix b/nixpkgs/pkgs/applications/misc/minergate-cli/default.nix
new file mode 100644
index 000000000000..0fe4103f613c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/minergate-cli/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, lib, stdenv, dpkg, makeWrapper, openssl }:
+
+stdenv.mkDerivation {
+  version = "8.2";
+  pname = "minergate-cli";
+  src = fetchurl {
+    url = "https://minergate.com/download/ubuntu-cli";
+    sha256 = "393c5ba236f6f92c449496fcda9509f4bfd3887422df98ffa59b3072124a99d8";
+  };
+
+  nativeBuildInputs = [ dpkg makeWrapper ];
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    dpkg-deb -x $src $out
+    pgm=$out/opt/minergate-cli/minergate-cli
+
+    interpreter=${stdenv.glibc}/lib/ld-linux-x86-64.so.2
+    patchelf --set-interpreter "$interpreter" $pgm
+
+    wrapProgram $pgm --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ openssl stdenv.cc.cc ]}
+
+    rm $out/usr/bin/minergate-cli
+    mkdir -p $out/bin
+    ln -s $pgm $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Minergate CPU/GPU console client mining software";
+    homepage = "https://www.minergate.com/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ bfortz ];
+    platforms = [ "x86_64-linux" ];
+};
+}
diff --git a/nixpkgs/pkgs/applications/misc/minergate/default.nix b/nixpkgs/pkgs/applications/misc/minergate/default.nix
new file mode 100644
index 000000000000..f6ec20b0df7e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/minergate/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, lib, stdenv, dpkg, makeWrapper, fontconfig, freetype, openssl, xorg, xkeyboard_config }:
+
+stdenv.mkDerivation {
+  version = "8.1";
+  pname = "minergate";
+  src = fetchurl {
+    url = "https://minergate.com/download/ubuntu";
+    sha256 = "1dbbbb8e0735cde239fca9e82c096dcc882f6cecda20bba7c14720a614c16e13";
+  };
+
+  nativeBuildInputs = [ dpkg makeWrapper ];
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    dpkg-deb -x $src $out
+    pgm=$out/opt/minergate/minergate
+
+    interpreter=${stdenv.glibc}/lib/ld-linux-x86-64.so.2
+    patchelf --set-interpreter "$interpreter" $pgm
+
+    wrapProgram $pgm --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ fontconfig freetype openssl stdenv.cc.cc xorg.libX11 xorg.libxcb ]} --prefix "QT_XKB_CONFIG_ROOT" ":" "${xkeyboard_config}/share/X11/xkb"
+
+    rm $out/usr/bin/minergate
+    mkdir -p $out/bin
+    ln -s $out/opt/minergate/minergate $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Minergate CPU/GPU mining software";
+    homepage = "https://www.minergate.com/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ bfortz ];
+    platforms = [ "x86_64-linux" ];
+};
+}
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/build.xml.patch b/nixpkgs/pkgs/applications/misc/mkgmap/build.xml.patch
new file mode 100644
index 000000000000..2aced4452062
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/build.xml.patch
@@ -0,0 +1,46 @@
+--- a/build.xml	(revision 4555)
++++ a/build.xml	(working copy)
+@@ -222,13 +222,13 @@
+ 		<property name="svn.version.build" value="none"/>
+ 
+ 		<propertyfile file="${build.classes}/mkgmap-version.properties">
+-			<entry key="svn.version" value="${svn.version.build}" />
+-			<entry key="build.timestamp" value="${build.timestamp}" />
++			<entry key="svn.version" value="@version@" />
++			<entry key="build.timestamp" value="unknown" />
+ 		</propertyfile>
+ 	</target>
+ 
+ 	<!-- Compile the product itself (no tests). -->
+-	<target name="compile" depends="prepare, resolve-compile"
++	<target name="compile" depends="prepare"
+ 					description="main compilation">
+ 
+ 		<javac srcdir="${src}" destdir="${build.classes}" encoding="utf-8" debug="true" includeantruntime="false">
+@@ -263,7 +263,7 @@
+ 	</target>
+ 
+ 	<!-- Compile the test classes -->
+-	<target name="build-test" depends="build, resolve-test">
++	<target name="build-test" depends="build">
+ 		<mkdir dir="${build.test}" />
+ 		<javac srcdir="${test}" destdir="${build.test}" encoding="utf-8" debug="true" includeantruntime="false">
+ 			<include name="**/*.java" />
+@@ -271,7 +271,7 @@
+ 		</javac>
+ 	</target>
+ 
+-	<target name="test" depends="build-test, obtain-test-input-files" description="Run the junit tests">
++	<target name="test" depends="build-test" description="Run the junit tests">
+ 		<mkdir dir="tmp/report"/>
+ 		<junit printsummary="yes" failureproperty="junit.failure" forkmode="once">
+ 
+@@ -351,7 +351,7 @@
+ 			ignoreerrors="true"/>
+ 	</target>
+ 
+-	<target name="dist" depends="build, check-version, version-file"
++	<target name="dist" depends="build, version-file"
+ 					description="Make the distribution area">
+ 
+ 		<mkdir dir="${dist}"/>
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/default.nix b/nixpkgs/pkgs/applications/misc/mkgmap/default.nix
new file mode 100644
index 000000000000..15464c0e6a68
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/default.nix
@@ -0,0 +1,85 @@
+{ lib, stdenv
+, fetchurl
+, fetchsvn
+, jdk
+, jre
+, ant
+, makeWrapper
+, doCheck ? true
+, withExamples ? false
+}:
+let
+  version = "4565";
+  sha256 = "0cfh0msky5812l28mavy6p3k2zgyxb698xk79mvla9l45zcicnvw";
+
+  deps = import ./deps.nix { inherit fetchurl; };
+  testInputs = import ./testinputs.nix { inherit fetchurl; };
+in
+stdenv.mkDerivation {
+  pname = "mkgmap";
+  inherit version;
+
+  src = fetchsvn {
+    inherit sha256;
+    url = "https://svn.mkgmap.org.uk/mkgmap/mkgmap/trunk";
+    rev = version;
+  };
+
+  patches = [
+    # Disable automatic download of dependencies
+    ./build.xml.patch
+
+    # Fix testJavaRules test
+    ./fix-failing-test.patch
+  ];
+
+  postPatch = with deps; ''
+    substituteInPlace build.xml \
+      --subst-var-by version ${version}
+
+    mkdir -p lib/compile
+    cp ${fastutil} lib/compile/${fastutil.name}
+    cp ${osmpbf} lib/compile/${osmpbf.name}
+    cp ${protobuf} lib/compile/${protobuf.name}
+  '' + lib.optionalString doCheck ''
+    mkdir -p lib/test
+    cp ${fastutil} lib/test/${fastutil.name}
+    cp ${osmpbf} lib/test/${osmpbf.name}
+    cp ${protobuf} lib/test/${protobuf.name}
+    cp ${jaxb-api} lib/test/${jaxb-api.name}
+    cp ${junit} lib/test/${junit.name}
+    cp ${hamcrest-core} lib/test/${hamcrest-core.name}
+
+    mkdir -p test/resources/in/img
+    ${lib.concatMapStringsSep "\n" (res: ''
+      cp ${res} test/resources/in/${builtins.replaceStrings [ "__" ] [ "/" ] res.name}
+    '') testInputs}
+  '';
+
+  nativeBuildInputs = [ jdk ant makeWrapper ];
+
+  buildPhase = "ant";
+
+  inherit doCheck;
+
+  checkPhase = "ant test";
+
+  installPhase = ''
+    install -Dm644 dist/mkgmap.jar $out/share/java/mkgmap/mkgmap.jar
+    install -Dm644 dist/doc/mkgmap.1 $out/share/man/man1/mkgmap.1
+    cp -r dist/lib/ $out/share/java/mkgmap/
+    makeWrapper ${jre}/bin/java $out/bin/mkgmap \
+      --add-flags "-jar $out/share/java/mkgmap/mkgmap.jar"
+  '' + lib.optionalString withExamples ''
+    mkdir -p $out/share/mkgmap
+    cp -r dist/examples $out/share/mkgmap/
+  '';
+
+  meta = with lib; {
+    description = "Create maps for Garmin GPS devices from OpenStreetMap (OSM) data";
+    homepage = "http://www.mkgmap.org.uk";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/deps.nix b/nixpkgs/pkgs/applications/misc/mkgmap/deps.nix
new file mode 100644
index 000000000000..22b5410d6bbc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/deps.nix
@@ -0,0 +1,31 @@
+{ fetchurl }:
+{
+  fastutil = fetchurl {
+    url = "http://ivy.mkgmap.org.uk/repo/it.unimi.dsi/fastutil/6.5.15-mkg.1b/jars/fastutil.jar";
+    sha256 = "0d88m0rpi69wgxhnj5zh924q4zsvxq8m4ybk7m9mr3gz1hx0yx8c";
+  };
+  osmpbf = fetchurl {
+    url = "http://ivy.mkgmap.org.uk/repo/crosby/osmpbf/1.3.3/jars/osmpbf.jar";
+    sha256 = "0zb4pqkwly5z30ww66qhhasdhdrzwmrw00347yrbgyk2ii4wjad3";
+  };
+  protobuf = fetchurl {
+    url = "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0.jar";
+    sha256 = "0x6c4pbsizvk3lm6nxcgi1g2iqgrxcna1ip74lbn01f0fm2wdhg0";
+  };
+  xpp3 = fetchurl {
+    url = "https://repo1.maven.org/maven2/xpp3/xpp3/1.1.4c/xpp3-1.1.4c.jar";
+    sha256 = "1f9ifnxxj295xb1494jycbfm76476xm5l52p7608gf0v91d3jh83";
+  };
+  jaxb-api = fetchurl {
+    url = "https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar";
+    sha256 = "00rxpc0m30d3jc572ni01ryxq8gcbnr955xsabrijg9pknc0fc48";
+  };
+  junit = fetchurl {
+    url = "https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar";
+    sha256 = "1zh6klzv8w30dx7jg6pkhllk4587av4znflzhxz8x97c7rhf3a4h";
+  };
+  hamcrest-core = fetchurl {
+    url = "https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar";
+    sha256 = "1sfqqi8p5957hs9yik44an3lwpv8ln2a6sh9gbgli4vkx68yzzb6";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/fix-failing-test.patch b/nixpkgs/pkgs/applications/misc/mkgmap/fix-failing-test.patch
new file mode 100644
index 000000000000..9cfe75583c86
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/fix-failing-test.patch
@@ -0,0 +1,22 @@
+--- a/test/uk/me/parabola/imgfmt/app/srt/SrtCollatorTest.java	(revision 4555)
++++ a/test/uk/me/parabola/imgfmt/app/srt/SrtCollatorTest.java	(working copy)
+@@ -125,7 +125,7 @@
+ 		assertEquals("prim: different letter", -1, collator.compare("aaac", "aaad"));
+ 		assertEquals("prim: different letter", 1, collator.compare("aaae", "aaad"));
+ 		assertEquals(0, collator.compare("aaaa", "aaaa"));
+-		assertEquals(0, collator.compare("aáÄâ", "aaaa"));
++		//assertEquals(0, collator.compare("aáÄâ", "aaaa"));
+ 
+ 		collator.setStrength(Collator.SECONDARY);
+ 		assertEquals(0, collator.compare("AabBb", "aabbb"));
+@@ -132,8 +132,8 @@
+ 		assertEquals(0, collator.compare("aabBb", "aabBb"));
+ 		assertEquals(0, collator.compare("aabbB", "aabBb"));
+ 		assertEquals(1, collator.compare("aáÄâ", "aaaa"));
+-		assertEquals("prim len diff", -1, collator.compare("aáÄâ", "aaaaa"));
+-		assertEquals(-1, collator.compare("aáÄâa", "aaaab"));
++		//assertEquals("prim len diff", -1, collator.compare("aáÄâ", "aaaaa"));
++		//assertEquals(-1, collator.compare("aáÄâa", "aaaab"));
+ 
+ 		collator.setStrength(Collator.TERTIARY);
+ 		assertEquals("prim: different case", 1, collator.compare("AabBb", "aabbb"));
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/splitter/build.xml.patch b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/build.xml.patch
new file mode 100644
index 000000000000..a028dbef0314
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/build.xml.patch
@@ -0,0 +1,54 @@
+--- a/build.xml	(revision 597)
++++ a/build.xml	(working copy)
+@@ -207,12 +207,12 @@
+ 		<property name="svn.version.build" value="unknown"/>
+ 
+ 		<propertyfile file="${build.classes}/splitter-version.properties">
+-			<entry key="svn.version" value="${svn.version.build}" />
+-			<entry key="build.timestamp" value="${build.timestamp}" />
++			<entry key="svn.version" value="@version@" />
++			<entry key="build.timestamp" value="unknown" />
+ 		</propertyfile>
+ 	</target>
+ 
+-  <target name="compile" depends="prepare, resolve-compile" description="main compilation">
++  <target name="compile" depends="prepare" description="main compilation">
+     <javac srcdir="${src}" destdir="${build.classes}" debug="yes" includeantruntime="false">
+       <include name="**/*.java"/>
+       <classpath refid="classpath"/>
+@@ -219,7 +219,7 @@
+     </javac>
+   </target>
+ 
+-  <target name="compile.tests" depends="prepare, resolve-test" description="test compilation">
++  <target name="compile.tests" depends="prepare" description="test compilation">
+     <javac srcdir="${test}" destdir="${build.test-classes}" debug="yes" includeantruntime="false">
+       <include name="**/*.java"/>
+       <classpath refid="test.classpath"/>
+@@ -261,7 +261,7 @@
+ 	  <fail if="junit.failure" message="Test failed.  See test-reports/index.html"/>
+ 	</target>
+ 
+-  <target name="dist" depends="build, check-version, version-file" description="Make the distribution area">
++  <target name="dist" depends="build, version-file" description="Make the distribution area">
+ 
+     <mkdir dir="${dist}"/>
+     <mkdir dir="${dist}/doc/api"/>
+@@ -324,7 +324,7 @@
+ 	</target>
+ 
+ 	<!-- Main -->
+-  <target name="build" depends="compile,compile.tests,run.tests">
++  <target name="build" depends="compile">
+     <copy todir="${build.classes}">
+       <fileset dir="${resources}">
+         <include name="*.properties"/>
+@@ -349,7 +349,7 @@
+ 			ignoreerrors="true"/>
+ 	</target>
+  
+-	<target name="run.func-tests" depends="compile,compile.tests,obtain-test-input-files" description="Run the functional tests">
++	<target name="run.func-tests" depends="compile,compile.tests" description="Run the functional tests">
+ 		<mkdir dir="tmp/report"/>
+ 		<junit printsummary="yes" failureproperty="junit.failure" forkmode="once">
+ 	
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/splitter/default.nix b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/default.nix
new file mode 100644
index 000000000000..6baf4f763070
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv
+, fetchurl
+, fetchsvn
+, jdk
+, jre
+, ant
+, makeWrapper
+, doCheck ? true
+}:
+let
+  version = "597";
+  sha256 = "1al3160amw0gdarrc707dsppm0kcai9mpkfak7ffspwzw9alsndx";
+
+  deps = import ../deps.nix { inherit fetchurl; };
+  testInputs = import ./testinputs.nix { inherit fetchurl; };
+in
+stdenv.mkDerivation {
+  pname = "splitter";
+  inherit version;
+
+  src = fetchsvn {
+    inherit sha256;
+    url = "https://svn.mkgmap.org.uk/mkgmap/splitter/trunk";
+    rev = version;
+  };
+
+  patches = [
+    # Disable automatic download of dependencies
+    ./build.xml.patch
+
+    # Fix func.SolverAndProblemGeneratorTest test
+    ./fix-failing-test.patch
+  ];
+
+  postPatch = with deps; ''
+    substituteInPlace build.xml \
+      --subst-var-by version ${version}
+
+    mkdir -p lib/compile
+    cp ${fastutil} lib/compile/${fastutil.name}
+    cp ${osmpbf} lib/compile/${osmpbf.name}
+    cp ${protobuf} lib/compile/${protobuf.name}
+    cp ${xpp3} lib/compile/${xpp3.name}
+  '' + lib.optionalString doCheck ''
+    mkdir -p lib/test
+    cp ${junit} lib/test/${junit.name}
+    cp ${hamcrest-core} lib/test/${hamcrest-core.name}
+
+    mkdir -p test/resources/in/osm
+    ${lib.concatMapStringsSep "\n" (res: ''
+      cp ${res} test/resources/in/${builtins.replaceStrings [ "__" ] [ "/" ] res.name}
+    '') testInputs}
+  '';
+
+  nativeBuildInputs = [ jdk ant makeWrapper ];
+
+  buildPhase = "ant";
+
+  inherit doCheck;
+
+  checkPhase = "ant run.tests && ant run.func-tests";
+
+  installPhase = ''
+    install -Dm644 dist/splitter.jar $out/share/java/splitter/splitter.jar
+    install -Dm644 doc/splitter.1 $out/share/man/man1/splitter.1
+    cp -r dist/lib/ $out/share/java/splitter/
+    makeWrapper ${jre}/bin/java $out/bin/splitter \
+      --add-flags "-jar $out/share/java/splitter/splitter.jar"
+  '';
+
+  meta = with lib; {
+    description = "Utility for splitting OpenStreetMap maps into tiles";
+    homepage = "http://www.mkgmap.org.uk";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/splitter/fix-failing-test.patch b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/fix-failing-test.patch
new file mode 100644
index 000000000000..9248fb025361
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/fix-failing-test.patch
@@ -0,0 +1,11 @@
+--- a/test/func/SolverAndProblemGeneratorTest.java	(revision 597)
++++ a/test/func/SolverAndProblemGeneratorTest.java	(working copy)
+@@ -89,7 +89,7 @@
+ 			for (String l : lines) {
+ 				realSize += l.length();
+ 			}
+-			assertEquals(f + " has wrong size", expectedSize, realSize);
++			//assertEquals(f + " has wrong size", expectedSize, realSize);
+ 		}
+ 	}
+ 
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/splitter/testinputs.nix b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/testinputs.nix
new file mode 100644
index 000000000000..ab81b07ed8dd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/testinputs.nix
@@ -0,0 +1,18 @@
+{ fetchurl }:
+let
+  fetchTestInput = { res, sha256 }: fetchurl {
+    inherit sha256;
+    url = "http://www.mkgmap.org.uk/testinput/${res}";
+    name = builtins.replaceStrings [ "/" ] [ "__" ] res;
+  };
+in
+[
+  (fetchTestInput {
+    res = "osm/alaska-2016-12-27.osm.pbf";
+    sha256 = "0hmb5v71a1bxgvrg1cbfj5l27b3vvdazs4pyggpmhcdhbwpw7ppm";
+  })
+  (fetchTestInput {
+    res = "osm/hamburg-2016-12-26.osm.pbf";
+    sha256 = "08bny4aavwm3z2114q99fv3fi2w905zxi0fl7bqgjyhgk0fxjssf";
+  })
+]
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/testinputs.nix b/nixpkgs/pkgs/applications/misc/mkgmap/testinputs.nix
new file mode 100644
index 000000000000..0c4516190e00
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/testinputs.nix
@@ -0,0 +1,66 @@
+{ fetchurl }:
+let
+  fetchTestInput = { res, sha256 }: fetchurl {
+    inherit sha256;
+    url = "http://www.mkgmap.org.uk/testinput/${res}";
+    name = builtins.replaceStrings [ "/" ] [ "__" ] res;
+  };
+in
+[
+  (fetchTestInput {
+    res = "osm/lon1.osm.gz";
+    sha256 = "1r8sl67hayjgybxy9crqwp7f1w0ljxvxh0apqcvr888yhsbb8drv";
+  })
+  (fetchTestInput {
+    res = "osm/uk-test-1.osm.gz";
+    sha256 = "0jdngkjn22jvi8q7hrzpqb9mnjlz82h1dwdmc4qrb64kkhzm4dfk";
+  })
+  (fetchTestInput {
+    res = "osm/uk-test-2.osm.gz";
+    sha256 = "05mw0qcdgki151ldmxayry0gqlb72jm5wrvxq3dkwq5i7jb21qs4";
+  })
+  (fetchTestInput {
+    res = "osm/is-in-samples.osm";
+    sha256 = "18vqfbq25ys59bj6dl6dq3q4m2ri3ki2xazim14fm94k1pbyhbh3";
+  })
+  (fetchTestInput {
+    res = "mp/test1.mp";
+    sha256 = "1dykr0z84c3fqgm9kdp2dzvxc3galjbx0dn9zxjw8cfk7mvnspj2";
+  })
+  (fetchTestInput {
+    res = "img/63240001.img";
+    sha256 = "1wmqgy940q1svazw85z8di20xyjm3vpaiaj9hizr47b549klw74q";
+  })
+  (fetchTestInput {
+    res = "img/63240002.img";
+    sha256 = "12ivywkiw6lrglyk0clnx5ff2wqj4z0c3f5yqjsqlsaawbmxqa1f";
+  })
+  (fetchTestInput {
+    res = "img/63240003.img";
+    sha256 = "19mgxqv6kqk8ahs8s819sj7cc79id67373ckwfsq7vvqyfrbasz1";
+  })
+  (fetchTestInput {
+    res = "hgt/N00W090.hgt.zip";
+    sha256 = "16hb06bgf47sz2mfbbx3xqmrh1nmm04wj4ngm512sng4rjhksxgn";
+  })
+  (fetchTestInput {
+    res = "hgt/N00W091.hgt.zip";
+    sha256 = "153j4wj7170qj81nr7sr6dp9zar62gnrkh6ww62bygpfqqyzdr1x";
+  })
+  (fetchTestInput {
+    res = "hgt/S01W090.hgt.zip";
+    sha256 = "0czgs9rhp7bnzmzm7907vprj3nhm2lj6q1piafk8dm9rcqkfg8sj";
+  })
+  (fetchTestInput {
+    res = "hgt/S01W091.hgt.zip";
+    sha256 = "0z58q3ai499mflxfjqhqv9i1di3fmp05pkv39886k1na107g3wbn";
+  })
+  (fetchTestInput {
+    res = "hgt/S02W090.hgt.zip";
+    sha256 = "0q7817gdxk2vq73ci6ffks288zqywc21f5ns73b6p5ds2lrxhf5n";
+  })
+  (fetchTestInput {
+    res = "hgt/S02W091.hgt.zip";
+    sha256 = "1mwpgd85v9n99gmx2bn8md7d312wvhq86w3c9k92y8ayrs20lmdr";
+  })
+]
diff --git a/nixpkgs/pkgs/applications/misc/mob/default.nix b/nixpkgs/pkgs/applications/misc/mob/default.nix
new file mode 100644
index 000000000000..821dc1ccc3ce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mob/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoPackage, fetchFromGitHub}:
+
+buildGoPackage rec {
+  pname = "mob";
+  version = "0.0.25";
+  goPackagePath = "github.com/remotemobprogramming/mob";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "remotemobprogramming";
+    repo = pname;
+    sha256 = "1gs0mv4j66278srrck7llvi5gnfdqxz3a489qn5sx3mw46yx5q93";
+  };
+
+  meta = with lib; {
+    description = "Tool for swift git handover";
+    homepage = "https://github.com/remotemobprogramming/mob";
+    license = licenses.mit;
+    maintainers = [ maintainers.ericdallo ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/moolticute/default.nix b/nixpkgs/pkgs/applications/misc/moolticute/default.nix
new file mode 100644
index 000000000000..804ba33209af
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/moolticute/default.nix
@@ -0,0 +1,46 @@
+{ lib, mkDerivation, fetchFromGitHub
+, libusb1
+, pkg-config
+, qmake
+, qtbase
+, qttools
+, qtwebsockets
+}:
+
+mkDerivation rec {
+  pname = "moolticute";
+  version = "0.44.21";
+
+  src = fetchFromGitHub {
+    owner = "mooltipass";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1m3iy2v8mimyb25xisr7i4ga6qlggv1i2aji9qfgagns7ffp53nf";
+  };
+
+  outputs = [ "out" "udev" ];
+
+  nativeBuildInputs = [ pkg-config qmake qttools ];
+  buildInputs = [ libusb1 qtbase qtwebsockets ];
+
+  preConfigure = "mkdir -p build && cd build";
+  qmakeFlags = [ "../Moolticute.pro" ];
+
+  preInstall = ''
+    mkdir -p $udev/lib/udev/rules.d
+    sed -n '/^ \+cat > "$tmpfile" <<- EOF$/,/^EOF$/p' ../data/moolticute.sh |
+        sed '1d;$d' > $udev/lib/udev/rules.d/50-mooltipass.rules
+ '';
+
+  meta = with lib; {
+    description = "GUI app and daemon to work with Mooltipass device via USB";
+    longDescription = ''
+      To install udev rules, add `services.udev.packages == [ moolticute.udev ]`
+      into `nixos/configuration.nix`.
+    '';
+    homepage = "https://github.com/mooltipass/moolticute";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.kirikaza ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/moonlight-embedded/default.nix b/nixpkgs/pkgs/applications/misc/moonlight-embedded/default.nix
new file mode 100644
index 000000000000..9fa4089c4cdb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/moonlight-embedded/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, cmake, perl
+, alsaLib, libevdev, libopus, udev, SDL2
+, ffmpeg_3, pkg-config, xorg, libvdpau, libpulseaudio, libcec
+, curl, expat, avahi, enet, libuuid, libva
+}:
+
+stdenv.mkDerivation rec {
+  pname = "moonlight-embedded";
+  version = "2.4.10";
+
+  src = fetchFromGitHub {
+    owner = "irtimmer";
+    repo = "moonlight-embedded";
+    rev = "v${version}";
+    sha256 = "0m5i3q3hbjl51cndjpz5hxi3br6fvpn1fzdv0f6lxjxgw9z32413";
+    fetchSubmodules = true;
+  };
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ cmake perl ];
+  buildInputs = [
+    alsaLib libevdev libopus udev SDL2
+    ffmpeg_3 pkg-config xorg.libxcb libvdpau libpulseaudio libcec
+    xorg.libpthreadstubs curl expat avahi enet libuuid libva
+  ];
+
+  meta = with lib; {
+    description = "Open source implementation of NVIDIA's GameStream";
+    homepage = "https://github.com/irtimmer/moonlight-embedded";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.globin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mop/default.nix b/nixpkgs/pkgs/applications/misc/mop/default.nix
new file mode 100644
index 000000000000..07102fe56f23
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mop/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "mop";
+  version = "0.2.0";
+  rev = "bc666ec165d08b43134f7ec0bf29083ad5466243";
+
+  goPackagePath = "github.com/michaeldv/mop";
+  goDeps = ./deps.nix;
+
+  preConfigure = ''
+    for i in $(find . -type f);do
+        substituteInPlace $i --replace michaeldv/termbox-go nsf/termbox-go
+    done
+    substituteInPlace Makefile --replace mop/cmd mop/mop
+    mv cmd mop
+  '';
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/mop-tracker/mop";
+    sha256 = "0zp51g9i8rw6acs4vnrxclbxa5z1v0a0m1xx27szszp0rphcczkx";
+  };
+
+  meta = with lib; {
+    description = "Simple stock tracker implemented in go";
+    homepage =  "https://github.com/mop-tracker/mop";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mop/deps.nix b/nixpkgs/pkgs/applications/misc/mop/deps.nix
new file mode 100644
index 000000000000..4081cd1ddaa2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mop/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/nsf/termbox-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nsf/termbox-go";
+      rev = "9aecf65084a5754f12d27508fa2e6ed56851953b";
+      sha256 = "16sak07bgvmax4zxfrd4jia1dgygk733xa8vk8cdx28z98awbfsh";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/misc/mps-youtube/default.nix b/nixpkgs/pkgs/applications/misc/mps-youtube/default.nix
new file mode 100644
index 000000000000..b1118cfc5977
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mps-youtube/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "mps-youtube";
+  version = "unstable-2020-01-28";
+
+  src = fetchFromGitHub {
+    owner = "mps-youtube";
+    repo = "mps-youtube";
+    rev = "b808697133ec2ad7654953232d1e841b20aa7cc3";
+    sha256 = "0lqprlpc0v092xqkjc0cc395ag45lijwgd34dpg2jy6i0f2szywv";
+  };
+
+  propagatedBuildInputs = [ pafy ];
+
+  # disabled due to error in loading unittest
+  # don't know how to make test from: <mps_youtube. ...>
+  doCheck = false;
+
+  # before check create a directory and redirect XDG_CONFIG_HOME to it
+  preCheck = ''
+    mkdir -p check-phase
+    export XDG_CONFIG_HOME=$(pwd)/check-phase
+  '';
+
+  meta = with lib; {
+    description = "Terminal based YouTube player and downloader";
+    homepage = "https://github.com/mps-youtube/mps-youtube";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ koral odi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mpvc/default.nix b/nixpkgs/pkgs/applications/misc/mpvc/default.nix
new file mode 100644
index 000000000000..64b55cce7a04
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mpvc/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, socat, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation {
+  name = "mpvc-unstable-2017-03-18";
+
+  src = fetchFromGitHub {
+    owner = "wildefyr";
+    repo = "mpvc";
+    rev = "aea5c661455248cde7ac9ddba5f63cc790d26512";
+    sha256 = "0qiyvb3ck1wyd3izajwvlq4bwgsbq7x8ya3fgi5i0g2qr39a1qml";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/mpvc --prefix PATH : "${socat}/bin/"
+  '';
+
+  buildInputs = [ socat makeWrapper ];
+
+  meta = with lib; {
+    description = "A mpc-like control interface for mpv";
+    homepage = "https://github.com/wildefyr/mpvc";
+    license = licenses.mit;
+    maintainers = [ maintainers.neeasade ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mqtt-bench/default.nix b/nixpkgs/pkgs/applications/misc/mqtt-bench/default.nix
new file mode 100644
index 000000000000..c01a1b9cbc69
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mqtt-bench/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, buildGoPackage, fetchFromGitHub, fetchpatch }:
+
+buildGoPackage rec {
+  pname = "mqtt-bench";
+  version = "0.3.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/takanorig/mqtt-bench";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "takanorig";
+    repo = "mqtt-bench";
+    sha256 = "03b9ak2j303iwq6abd7j10f2cs2ianwnbflwmyx9g96i7zd74f5m";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/takanorig/mqtt-bench/pull/13.patch";
+      name = "mqtt-paho-changes.patch";
+      sha256 = "17c8ajrp5dmbsasj6njxrlhy0x08b65fignzm3yccqbhb4ijcvha";
+    })
+  ];
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "Mosquitto benchmark tool";
+    homepage = "https://github.com/takanorig/mqtt-bench";
+    maintainers = with maintainers; [ disassembler ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mqtt-bench/deps.nix b/nixpkgs/pkgs/applications/misc/mqtt-bench/deps.nix
new file mode 100644
index 000000000000..d93d3c468145
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mqtt-bench/deps.nix
@@ -0,0 +1,21 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/eclipse/paho.mqtt.golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/eclipse/paho.mqtt.golang";
+      rev = "65f43bda5f7edbbf6b7533d3a5a13b2c67cf3545";
+      sha256 = "1ad136xf78br599ya43j45f8dycjip1k0hkplayy1slg8ckwrhdr";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "8351a756f30f1297fe94bbf4b767ec589c6ea6d0";
+      sha256 = "0b6m579i3wrx1m69mqkdng5gjfssprxx0pg45kzrdi68sh0zr5d1";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/misc/mu-repo/default.nix b/nixpkgs/pkgs/applications/misc/mu-repo/default.nix
new file mode 100644
index 000000000000..eacd1971610f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mu-repo/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, buildPythonApplication, pytestCheckHook, git }:
+
+buildPythonApplication rec {
+  pname = "mu-repo";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "fabioz";
+    repo = pname;
+    rev = "mu_repo_${lib.replaceStrings [ "." ] [ "_" ] version}";
+    sha256 = "0mmjdkvmdlsndi2q56ybxyz2988ppxsbbr1g54nzzkkvab2bc2na";
+  };
+
+  propagatedBuildInputs = [ git ];
+
+  checkInputs = [ pytestCheckHook git ];
+
+  meta = with lib; {
+    description = "Tool to help in dealing with multiple git repositories";
+    homepage = "http://fabioz.github.io/mu-repo/";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mucommander/default.nix b/nixpkgs/pkgs/applications/misc/mucommander/default.nix
new file mode 100644
index 000000000000..c42ae1e815b3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mucommander/default.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv, fetchFromGitHub, gradle_6, perl, makeWrapper, jdk11, gsettings-desktop-schemas }:
+
+let
+  version = "0.9.3-3";
+  name = "mucommander-${version}";
+
+  src = fetchFromGitHub {
+    owner = "mucommander";
+    repo = "mucommander";
+    rev = version;
+    sha256 = "1zhglsx3b5k6np3ppfkkrqz9wg0j7ip598xxfgn75gjl020w0can";
+  };
+
+  postPatch = ''
+    # there is no .git anyway
+    substituteInPlace build.gradle \
+      --replace "git = org.ajoberstar.grgit.Grgit.open(file('.'))"  "" \
+      --replace "revision = git.head().id"                          "revision = 'abcdefgh'" \
+      --replace "proguard.enabled =" "// proguard.enabled =" \
+      --replace "version = '0.9.4'" "version = '${version}'"
+
+    # disable gradle plugins with native code and their targets
+    perl -i.bak1 -pe "s#(^\s*id '.+' version '.+'$)#// \1#" build.gradle
+    perl -i.bak2 -pe "s#(.*)#// \1# if /^(buildscript|task portable|task nsis|task proguard|task tgz|task\(afterEclipseImport\)|launch4j|macAppBundle|buildRpm|buildDeb|shadowJar)/ ... /^}/" build.gradle
+
+    # fix source encoding
+    find . -type f -name build.gradle \
+      -exec perl -i.bak3 -pe "s#(repositories\.jcenter\(\))#
+                                \1
+                                compileJava.options.encoding = 'UTF-8'
+                                compileTestJava.options.encoding = 'UTF-8'
+                               #" {} \;
+  '';
+
+  # fake build to pre-download deps into fixed-output derivation
+  deps = stdenv.mkDerivation {
+    name = "${name}-deps";
+    inherit src postPatch;
+    nativeBuildInputs = [ gradle_6 perl ];
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d)
+      gradle --no-daemon build
+    '';
+    # perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "1v5a76pvk7llbyv2rg50wlxc2wf468l2cslz1vi20aihycbyky7j";
+  };
+
+in stdenv.mkDerivation {
+  inherit name src postPatch;
+  nativeBuildInputs = [ gradle_6 perl makeWrapper ];
+
+  buildPhase = ''
+    export GRADLE_USER_HOME=$(mktemp -d)
+
+    # point to offline repo
+    find . -type f -name build.gradle \
+      -exec perl -i.bak3 -pe "s#repositories\.jcenter\(\)#
+                                repositories { mavenLocal(); maven { url '${deps}' } }
+                               #" {} \;
+
+    gradle --offline --no-daemon distTar
+  '';
+
+  installPhase = ''
+    mkdir $out
+    tar xvf build/distributions/mucommander-${version}.tar --directory=$out --strip=1
+    wrapProgram $out/bin/mucommander \
+      --prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name} \
+      --set JAVA_HOME ${jdk11}
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.mucommander.com/";
+    description = "Cross-platform file manager";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ volth ];
+    # build is broken on MacOS
+    # https://github.com/NixOS/nixpkgs/pull/105784
+    broken = stdenv.isDarwin;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/multibootusb/default.nix b/nixpkgs/pkgs/applications/misc/multibootusb/default.nix
new file mode 100644
index 000000000000..173291183dab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/multibootusb/default.nix
@@ -0,0 +1,114 @@
+{ fetchFromGitHub, libxcb, mtools, p7zip, parted, procps, qemu, unzip, zip,
+  coreutils, gnugrep, which, gnused, e2fsprogs, autoPatchelfHook, gptfdisk,
+  python36Packages, qt5, runtimeShell, lib, stdenv, util-linux, wrapQtAppsHook }:
+
+# Note: Multibootusb is tricky to maintain. It relies on the
+# $PYTHONPATH variable containing some of their code, so that
+# something like:
+#
+# from scripts import config
+#
+# works. It also relies on the current directory to find some runtime
+# resources thanks to a use of __file__.
+#
+# https://github.com/mbusb/multibootusb/blob/0d34d70c3868f1d7695cfd141141b17c075de967/scripts/osdriver.py#L59
+
+python36Packages.buildPythonApplication rec {
+  pname = "multibootusb";
+  name = "${pname}-${version}";
+  version = "9.2.0";
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    autoPatchelfHook
+    unzip
+    zip
+  ];
+
+  runTimeDeps = [
+    coreutils
+    gnugrep
+    which
+    parted
+    util-linux
+    qemu
+    p7zip
+    gnused
+    mtools
+    procps
+    e2fsprogs
+    gptfdisk
+  ];
+
+  buildInputs = [
+    libxcb
+    python36Packages.python
+    qt5.full
+  ];
+
+  src = fetchFromGitHub {
+    owner = "mbusb";
+    repo = pname;
+    rev = "v${version}";
+
+    sha256 = "0wlan0cp6c2i0nahixgpmkm0h4n518gj8rc515d579pqqp91p2h3";
+  };
+
+  # Tests can't run inside the NixOS sandbox
+  # "Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory"
+  doCheck = false;
+
+  pythonPath = [
+    python36Packages.dbus-python
+    python36Packages.pyqt5
+    python36Packages.pytest-shutil
+    python36Packages.pyudev
+    python36Packages.six
+  ];
+
+  # multibootusb ships zips with various versions of syslinux, we need to patchelf them
+  postPatch = ''
+    for zip in $(find . -name "*.zip"); do
+      zip=$(readlink -f $zip)
+      target="$(mktemp -d)"
+      pushd $target
+      unzip $zip
+      rm $zip
+      autoPatchelf .
+      zip -r $zip *
+      popd
+    done
+  '';
+
+  postInstall = ''
+    # This script doesn't work and it doesn't add much anyway
+    rm $out/bin/multibootusb-pkexec
+
+    # The installed data isn't sufficient for whatever reason, missing gdisk/gdisk.exe
+    mkdir -p "$out/share/${pname}"
+    cp -r data "$out/share/${pname}/data"
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      # Firstly, add all necessary QT variables
+      "''${qtWrapperArgs[@]}"
+
+      # Then, add the installed scripts/ directory to the python path
+      --prefix "PYTHONPATH" ":" "$out/lib/${python36Packages.python.libPrefix}/site-packages"
+
+      # Add some runtime dependencies
+      --prefix "PATH" ":" "${lib.makeBinPath runTimeDeps}"
+
+      # Finally, move to directory that contains data
+      --run "cd $out/share/${pname}"
+    )
+  '';
+
+  meta = with lib; {
+    description = "Multiboot USB creator for Linux live disks";
+    homepage = "http://multibootusb.org/";
+    license = licenses.gpl2;
+    maintainers = []; # Looking for a maintainer!
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/1.17.nix b/nixpkgs/pkgs/applications/misc/mupdf/1.17.nix
new file mode 100644
index 000000000000..95e9c7c3307a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/1.17.nix
@@ -0,0 +1,95 @@
+{ stdenv, lib, fetchurl, fetchpatch, pkg-config, freetype, harfbuzz, openjpeg
+, jbig2dec, libjpeg , darwin
+, enableX11 ? true, libX11, libXext, libXi, libXrandr
+, enableCurl ? true, curl, openssl
+, enableGL ? true, freeglut, libGLU
+}:
+
+let
+
+  # OpenJPEG version is hardcoded in package source
+  openJpegVersion = with stdenv;
+    lib.versions.majorMinor (lib.getVersion openjpeg);
+
+
+in stdenv.mkDerivation rec {
+  version = "1.17.0";
+  pname = "mupdf";
+
+  src = fetchurl {
+    url = "https://mupdf.com/downloads/archive/${pname}-${version}-source.tar.gz";
+    sha256 = "13nl9nrcx2awz9l83mlv2psi1lmn3hdnfwxvwgwiwbxlkjl3zqq0";
+  };
+
+  patches =
+    # Use shared libraries to decrease size
+    lib.optional (!stdenv.isDarwin) ./mupdf-1.14-shared_libs.patch
+    ++ lib.optional stdenv.isDarwin ./darwin.patch
+  ;
+
+  postPatch = ''
+    sed -i "s/__OPENJPEG__VERSION__/${openJpegVersion}/" source/fitz/load-jpx.c
+  '';
+
+  makeFlags = [ "prefix=$(out) USE_SYSTEM_LIBS=yes" ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ freetype harfbuzz openjpeg jbig2dec libjpeg freeglut libGLU ]
+                ++ lib.optionals enableX11 [ libX11 libXext libXi libXrandr ]
+                ++ lib.optionals enableCurl [ curl openssl ]
+                ++ lib.optionals enableGL (
+                  if stdenv.isDarwin then
+                    with darwin.apple_sdk.frameworks; [ GLUT OpenGL ]
+                  else
+                    [ freeglut libGLU ])
+                ;
+  outputs = [ "bin" "dev" "out" "man" "doc" ];
+
+  preConfigure = ''
+    # Don't remove mujs because upstream version is incompatible
+    rm -rf thirdparty/{curl,freetype,glfw,harfbuzz,jbig2dec,libjpeg,openjpeg,zlib}
+  '';
+
+  postInstall = ''
+    mkdir -p "$out/lib/pkgconfig"
+    cat >"$out/lib/pkgconfig/mupdf.pc" <<EOF
+    prefix=$out
+    libdir=$out/lib
+    includedir=$out/include
+
+    Name: mupdf
+    Description: Library for rendering PDF documents
+    Version: ${version}
+    Libs: -L$out/lib -lmupdf -lmupdf-third
+    Cflags: -I$dev/include
+    EOF
+
+    moveToOutput "bin" "$bin"
+    ln -s "$bin/bin/mupdf-x11" "$bin/bin/mupdf"
+    mkdir -p $bin/share/applications
+    cat > $bin/share/applications/mupdf.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Version=1.0
+    Name=mupdf
+    Comment=PDF viewer
+    Exec=$bin/bin/mupdf-x11 %f
+    Terminal=false
+    MimeType=application/pdf;application/x-pdf;application/x-cbz;application/oxps;application/vnd.ms-xpsdocument;application/epub+zip
+    EOF
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://mupdf.com";
+    repositories.git = "git://git.ghostscript.com/mupdf.git";
+    description = "Lightweight PDF, XPS, and E-book viewer and toolkit written in portable C";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ vrthra fpletz ];
+    platforms = platforms.unix;
+    knownVulnerabilities = [
+      "CVE-2020-26519: denial of service when parsing JBIG2"
+      "CVE-2017-5991: NULL pointer dereference"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/darwin.patch b/nixpkgs/pkgs/applications/misc/mupdf/darwin.patch
new file mode 100644
index 000000000000..be1b84b0012f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/darwin.patch
@@ -0,0 +1,30 @@
+diff -ruN mupdf-1.14.0-source.orig/Makerules mupdf-1.14.0-source/Makerules
+--- mupdf-1.14.0-source.orig/Makerules	2018-11-02 06:57:12.114012496 +0100
++++ mupdf-1.14.0-source/Makerules	2018-11-02 10:11:56.717232992 +0100
+@@ -80,13 +80,6 @@
+   HAVE_GLUT := yes
+   SYS_GLUT_CFLAGS := -Wno-deprecated-declarations
+   SYS_GLUT_LIBS := -framework GLUT -framework OpenGL
+-  CC = xcrun cc
+-  AR = xcrun ar
+-  LD = xcrun ld
+-  RANLIB = xcrun ranlib
+-
+-else ifeq ($(OS),Linux)
+-  HAVE_OBJCOPY := yes
+ 
+   ifeq ($(shell pkg-config --exists freetype2 && echo yes),yes)
+ 	SYS_FREETYPE_CFLAGS := $(shell pkg-config --cflags freetype2)
+@@ -119,12 +112,6 @@
+ 	SYS_CURL_LIBS := $(shell pkg-config --libs libcurl)
+   endif
+ 
+-  HAVE_GLUT := yes
+-  ifeq ($(HAVE_GLUT),yes)
+-	SYS_GLUT_CFLAGS :=
+-	SYS_GLUT_LIBS := -lglut -lGL
+-  endif
+-
+   HAVE_X11 := $(shell pkg-config --exists x11 xext && echo yes)
+   ifeq ($(HAVE_X11),yes)
+ 	X11_CFLAGS := $(shell pkg-config --cflags x11 xext)
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/default.nix b/nixpkgs/pkgs/applications/misc/mupdf/default.nix
new file mode 100644
index 000000000000..61c395e64a9b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/default.nix
@@ -0,0 +1,108 @@
+{ stdenv, lib, fetchurl, fetchpatch, pkg-config, freetype, harfbuzz, openjpeg
+, jbig2dec, libjpeg , darwin
+, gumbo
+, enableX11 ? true, libX11, libXext, libXi, libXrandr
+, enableCurl ? true, curl, openssl
+, enableGL ? true, freeglut, libGLU
+}:
+
+let
+
+  # OpenJPEG version is hardcoded in package source
+  openJpegVersion = with stdenv;
+    lib.versions.majorMinor (lib.getVersion openjpeg);
+
+
+in stdenv.mkDerivation rec {
+  version = "1.18.0";
+  pname = "mupdf";
+
+  src = fetchurl {
+    url = "https://mupdf.com/downloads/archive/${pname}-${version}-source.tar.gz";
+    sha256 = "0rljl44y8p8hgaqializlyrgpij1wbnrzyp0ll5kcg7w05nylq48";
+  };
+
+  patches =
+    lib.optional stdenv.isDarwin ./darwin.patch ++ [
+    (fetchpatch {
+        name = "pdfocr.patch";
+        url = "http://git.ghostscript.com/?p=mupdf.git;a=patch;h=a507b139adf37d2c742e039815601cdc2aa00a84";
+        sha256 = "1fx6pdgwrbk3bqsx53764d61llfj9s5q8lxqkna7mjnp7mg4krj3";
+      })
+    (fetchpatch {
+        name = "pdf-layer.patch";
+        url = "http://git.ghostscript.com/?p=mupdf.git;a=patch;h=b82e9b6d6b46877e5c3763cc3bc641c66fa7eb54";
+        sha256 = "0ma8jq8d9a0mf26qjklgi4gdaflpjik1br1nhafzvjz7ccl56ksm";
+      })
+    (fetchpatch {
+        name = "pixmap.patch";
+        url = "http://git.ghostscript.com/?p=mupdf.git;a=patch;h=32e4e8b4bcbacbf92af7c88337efae21986d9603";
+        sha256 = "1zqkxgwrhcwsdya98pcmpq2815jjmv3fwsp0sba9f5nq5xi6whbj";
+      })
+    ];
+
+  postPatch = ''
+    sed -i "s/__OPENJPEG__VERSION__/${openJpegVersion}/" source/fitz/load-jpx.c
+  '';
+
+  # Use shared libraries to decrease size
+  buildFlags = [ "shared" ];
+
+  makeFlags = [ "prefix=$(out) USE_SYSTEM_LIBS=yes" ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ freetype harfbuzz openjpeg jbig2dec libjpeg freeglut libGLU gumbo ]
+                ++ lib.optionals enableX11 [ libX11 libXext libXi libXrandr ]
+                ++ lib.optionals enableCurl [ curl openssl ]
+                ++ lib.optionals enableGL (
+                  if stdenv.isDarwin then
+                    with darwin.apple_sdk.frameworks; [ GLUT OpenGL ]
+                  else
+                    [ freeglut libGLU ])
+                ;
+  outputs = [ "bin" "dev" "out" "man" "doc" ];
+
+  preConfigure = ''
+    # Don't remove mujs because upstream version is incompatible
+    rm -rf thirdparty/{curl,freetype,glfw,harfbuzz,jbig2dec,libjpeg,openjpeg,zlib}
+  '';
+
+  postInstall = ''
+    mkdir -p "$out/lib/pkgconfig"
+    cat >"$out/lib/pkgconfig/mupdf.pc" <<EOF
+    prefix=$out
+    libdir=$out/lib
+    includedir=$out/include
+
+    Name: mupdf
+    Description: Library for rendering PDF documents
+    Version: ${version}
+    Libs: -L$out/lib -lmupdf -lmupdf-third
+    Cflags: -I$dev/include
+    EOF
+
+    moveToOutput "bin" "$bin"
+    ln -s "$bin/bin/mupdf-x11" "$bin/bin/mupdf"
+    mkdir -p $bin/share/applications
+    cat > $bin/share/applications/mupdf.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Version=1.0
+    Name=mupdf
+    Comment=PDF viewer
+    Exec=$bin/bin/mupdf-x11 %f
+    Terminal=false
+    MimeType=application/pdf;application/x-pdf;application/x-cbz;application/oxps;application/vnd.ms-xpsdocument;application/epub+zip
+    EOF
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://mupdf.com";
+    repositories.git = "git://git.ghostscript.com/mupdf.git";
+    description = "Lightweight PDF, XPS, and E-book viewer and toolkit written in portable C";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ vrthra fpletz ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/default.upstream b/nixpkgs/pkgs/applications/misc/mupdf/default.upstream
new file mode 100644
index 000000000000..852233633ca5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/default.upstream
@@ -0,0 +1,7 @@
+url https://mupdf.com/downloads/archive/
+do_overwrite(){
+  ensure_hash
+  ensure_version
+  set_var_value version $CURRENT_VERSION
+  set_var_value sha256 $CURRENT_HASH
+}
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/mupdf-1.14-shared_libs.patch b/nixpkgs/pkgs/applications/misc/mupdf/mupdf-1.14-shared_libs.patch
new file mode 100644
index 000000000000..131a1bbbf6bd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/mupdf-1.14-shared_libs.patch
@@ -0,0 +1,39 @@
+--- mupdf-1.14.0-source.orig/Makefile	2018-11-02 06:57:12.114012496 +0100
++++ mupdf-1.14.0-source/Makefile	2018-11-02 09:57:10.067945307 +0100
+@@ -20,7 +20,7 @@
+ # Do not specify CFLAGS or LIBS on the make invocation line - specify
+ # XCFLAGS or XLIBS instead. Make ignores any lines in the makefile that
+ # set a variable that was set on the command line.
+-CFLAGS += $(XCFLAGS) -Iinclude
++CFLAGS += $(XCFLAGS) -Iinclude -fPIC
+ LIBS += $(XLIBS) -lm
+ 
+ ifneq ($(threading),no)
+@@ -190,17 +190,21 @@
+ 
+ # --- Library ---
+ 
+-MUPDF_LIB = $(OUT)/libmupdf.a
+-THIRD_LIB = $(OUT)/libmupdf-third.a
+-THREAD_LIB = $(OUT)/libmupdf-threads.a
+-PKCS7_LIB = $(OUT)/libmupdf-pkcs7.a
++MUPDF_LIB = $(OUT)/libmupdf.so
++THIRD_LIB = $(OUT)/libmupdf-third.so
++THREAD_LIB = $(OUT)/libmupdf-threads.so
++PKCS7_LIB = $(OUT)/libmupdf-pkcs7.so
+ 
+-$(MUPDF_LIB) : $(MUPDF_OBJ)
++$(MUPDF_LIB) : $(MUPDF_OBJ) $(THIRD_LIB) $(THREAD_LIB)
++	$(LINK_CMD) $(THIRD_LIBS) -shared -Wl,-soname -Wl,libmupdf.so -Wl,--no-undefined
+ $(THIRD_LIB) : $(THIRD_OBJ)
++	$(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-third.so -Wl,--no-undefined
+ $(THREAD_LIB) : $(THREAD_OBJ)
++	$(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-threads.so -Wl,--no-undefined -lpthread
+ $(PKCS7_LIB) : $(PKCS7_OBJ)
++	$(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-pkcs7.so
+ 
+-INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB)
++INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB) $(THREAD_LIB) $(PKCS7_LIB)
+ 
+ # --- Main tools and viewers ---
+ 
diff --git a/nixpkgs/pkgs/applications/misc/mwic/default.nix b/nixpkgs/pkgs/applications/misc/mwic/default.nix
new file mode 100644
index 000000000000..970c89b2acfc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mwic/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, pythonPackages }:
+
+stdenv.mkDerivation rec {
+  version = "0.7.8";
+  pname = "mwic";
+
+  src = fetchurl {
+    url = "https://github.com/jwilk/mwic/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "0nnhziz9v523hpciylnxfajmxabh2ig5iawzwrfpf7aww70v330x";
+  };
+
+  makeFlags=["PREFIX=\${out}"];
+
+  nativeBuildInputs = [
+    pythonPackages.wrapPython
+  ];
+
+  propagatedBuildInputs = with pythonPackages; [ pyenchant regex ];
+
+  postFixup = ''
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    homepage = "http://jwilk.net/software/mwic";
+    description = "spell-checker that groups possible misspellings and shows them in their contexts";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/mysql-workbench/default.nix b/nixpkgs/pkgs/applications/misc/mysql-workbench/default.nix
new file mode 100644
index 000000000000..63dde76fabcc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mysql-workbench/default.nix
@@ -0,0 +1,189 @@
+{ lib, stdenv
+, fetchurl
+, substituteAll
+, cmake
+, ninja
+, pkg-config
+, glibc
+, gtk3
+, gtkmm3
+, pcre
+, swig
+, antlr4_8
+, sudo
+, mysql
+, libxml2
+, libmysqlconnectorcpp
+, vsqlite
+, gdal
+, libiodbc
+, libpthreadstubs
+, libXdmcp
+, libuuid
+, libzip
+, libsecret
+, libssh
+, python2
+, jre
+, boost
+, libsigcxx
+, libX11
+, openssl
+, rapidjson
+, proj
+, cairo
+, libxkbcommon
+, epoxy
+, wrapGAppsHook
+, at-spi2-core
+, dbus
+, bash
+, coreutils
+}:
+
+let
+  inherit (python2.pkgs) paramiko pycairo pyodbc;
+in stdenv.mkDerivation rec {
+  pname = "mysql-workbench";
+  version = "8.0.21";
+
+  src = fetchurl {
+    url = "http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-${version}-src.tar.gz";
+    sha256 = "0rqgr1dcbf6yp60hninbw5dnwykx5ngbyhhx0sbhgv0m0cq5a44h";
+  };
+
+  patches = [
+    ./fix-gdal-includes.patch
+
+    (substituteAll {
+      src = ./hardcode-paths.patch;
+      catchsegv = "${glibc.bin}/bin/catchsegv";
+      bash = "${bash}/bin/bash";
+      cp = "${coreutils}/bin/cp";
+      dd = "${coreutils}/bin/dd";
+      ls = "${coreutils}/bin/ls";
+      mkdir = "${coreutils}/bin/mkdir";
+      nohup = "${coreutils}/bin/nohup";
+      rm = "${coreutils}/bin/rm";
+      rmdir = "${coreutils}/bin/rmdir";
+      sudo = "${sudo}/bin/sudo";
+    })
+
+    # Fix swig not being able to find headers
+    # https://github.com/NixOS/nixpkgs/pull/82362#issuecomment-597948461
+    (substituteAll {
+      src = ./fix-swig-build.patch;
+      cairoDev = "${cairo.dev}";
+    })
+  ];
+
+  # have it look for 4.7.2 instead of 4.7.1
+  preConfigure = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "antlr-4.7.1-complete.jar" "antlr-4.8-complete.jar"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    pkg-config
+    jre
+    swig
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    gtkmm3
+    libX11
+    antlr4_8.runtime.cpp
+    python2
+    mysql
+    libxml2
+    libmysqlconnectorcpp
+    vsqlite
+    gdal
+    boost
+    libssh
+    openssl
+    rapidjson
+    libiodbc
+    pcre
+    cairo
+    libuuid
+    libzip
+    libsecret
+    libsigcxx
+    proj
+
+    # python dependencies:
+    paramiko
+    pycairo
+    pyodbc
+    # TODO: package sqlanydb and add it here
+
+    # transitive dependencies:
+    libpthreadstubs
+    libXdmcp
+    libxkbcommon
+    epoxy
+    at-spi2-core
+    dbus
+  ];
+
+  postPatch = ''
+    patchShebangs tools/get_wb_version.sh
+  '';
+
+  # error: 'OGRErr OGRSpatialReference::importFromWkt(char**)' is deprecated
+  NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
+
+  cmakeFlags = [
+    "-DMySQL_CONFIG_PATH=${mysql}/bin/mysql_config"
+    "-DIODBC_CONFIG_PATH=${libiodbc}/bin/iodbc-config"
+    "-DWITH_ANTLR_JAR=${antlr4_8.jarLocation}"
+    # mysql-workbench 8.0.21 depends on libmysqlconnectorcpp 1.1.8.
+    # Newer versions of connector still provide the legacy library when enabled
+    # but the headers are in a different location.
+    "-DMySQLCppConn_INCLUDE_DIR=${libmysqlconnectorcpp}/include/jdbc"
+  ];
+
+  # There is already an executable and a wrapper in bindir
+  # No need to wrap both
+  dontWrapGApps = true;
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : "${python2}/bin"
+      --prefix PROJSO : "${proj}/lib/libproj.so"
+      --set PYTHONPATH $PYTHONPATH
+    )
+  '';
+
+  # Let’s wrap the programs not ending with bin
+  # until https://bugs.mysql.com/bug.php?id=91948 is fixed
+  postFixup = ''
+    find -L "$out/bin" -type f -executable -print0 \
+      | while IFS= read -r -d ''' file; do
+      if [[ "''${file}" != *-bin ]]; then
+        echo "Wrapping program $file"
+        wrapGApp "$file"
+      fi
+    done
+  '';
+
+  meta = with lib; {
+    description = "Visual MySQL database modeling, administration and querying tool";
+    longDescription = ''
+      MySQL Workbench is a modeling tool that allows you to design
+      and generate MySQL databases graphically. It also has administration
+      and query development modules where you can manage MySQL server instances
+      and execute SQL queries.
+    '';
+
+    homepage = "http://wb.mysql.com/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.kkallio ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-gdal-includes.patch b/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-gdal-includes.patch
new file mode 100644
index 000000000000..0a5c31fd40a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-gdal-includes.patch
@@ -0,0 +1,47 @@
+--- a/backend/wbpublic/grt/spatial_handler.h
++++ b/backend/wbpublic/grt/spatial_handler.h
+@@ -24,12 +24,12 @@
+ #ifndef SPATIAL_HANDLER_H_
+ #define SPATIAL_HANDLER_H_
+ 
+-#include <gdal/ogrsf_frmts.h>
+-#include <gdal/ogr_api.h>
+-#include <gdal/gdal_pam.h>
+-#include <gdal/memdataset.h>
+-#include <gdal/gdal_alg.h>
+-#include <gdal/gdal.h>
++#include <ogrsf_frmts.h>
++#include <ogr_api.h>
++#include <gdal_pam.h>
++#include <memdataset.h>
++#include <gdal_alg.h>
++#include <gdal.h>
+ #include <deque>
+ #include "base/geometry.h"
+ #include "wbpublic_public_interface.h"
+--- a/backend/wbpublic/grtui/geom_draw_box.h
++++ b/backend/wbpublic/grtui/geom_draw_box.h
+@@ -25,7 +25,7 @@
+ #define _GEOM_DRAW_BOX_H_
+ 
+ #include <mforms/drawbox.h>
+-#include <gdal/ogr_geometry.h>
++#include <ogr_geometry.h>
+ #include "wbpublic_public_interface.h"
+ 
+ class WBPUBLICBACKEND_PUBLIC_FUNC GeomDrawBox : public mforms::DrawBox {
+--- a/backend/wbpublic/objimpl/db.query/db_query_Resultset.cpp
++++ b/backend/wbpublic/objimpl/db.query/db_query_Resultset.cpp
+@@ -21,9 +21,9 @@
+  * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 
+  */
+ 
+-#include <gdal/ogrsf_frmts.h>
+-#include <gdal/ogr_api.h>
+-#include <gdal/gdal.h>
++#include <ogrsf_frmts.h>
++#include <ogr_api.h>
++#include <gdal.h>
+ 
+ #include <grts/structs.db.query.h>
+ #include <grtpp_util.h>
diff --git a/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-swig-build.patch b/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-swig-build.patch
new file mode 100644
index 000000000000..ace1e5add43f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-swig-build.patch
@@ -0,0 +1,12 @@
+--- a/library/forms/swig/CMakeLists.txt
++++ b/library/forms/swig/CMakeLists.txt
+@@ -57,7 +57,7 @@
+ 
+ set(CMAKE_SWIG_FLAGS -w312)
+ set_source_files_properties(cairo.i PROPERTIES CPLUSPLUS ON)
+-set_property(SOURCE cairo.i PROPERTY SWIG_FLAGS -DCAIRO_HAS_PNG_FUNCTIONS=1 -fcompact -DSWIG_PYTHON_LEGACY_BOOL -I/usr/include)
++set_property(SOURCE cairo.i PROPERTY SWIG_FLAGS -DCAIRO_HAS_PNG_FUNCTIONS=1 -fcompact -DSWIG_PYTHON_LEGACY_BOOL -I@cairoDev@/include)
+ if(CMAKE_VERSION VERSION_LESS 3.8)
+   swig_add_module(cairo python cairo.i)
+ else()
+
diff --git a/nixpkgs/pkgs/applications/misc/mysql-workbench/hardcode-paths.patch b/nixpkgs/pkgs/applications/misc/mysql-workbench/hardcode-paths.patch
new file mode 100644
index 000000000000..dddf992e4c12
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mysql-workbench/hardcode-paths.patch
@@ -0,0 +1,187 @@
+--- a/frontend/linux/workbench/mysql-workbench.in
++++ b/frontend/linux/workbench/mysql-workbench.in
+@@ -99,8 +99,8 @@
+ if test "$WB_DEBUG" != ""; then
+   $WB_DEBUG $MWB_BINARIES_DIR/mysql-workbench-bin "$@"
+ else
+-  if type -p catchsegv > /dev/null; then
+-  catchsegv $MWB_BINARIES_DIR/mysql-workbench-bin "$@"
++  if type -p @catchsegv@ > /dev/null; then
++  @catchsegv@ $MWB_BINARIES_DIR/mysql-workbench-bin "$@"
+   else
+   $MWB_BINARIES_DIR/mysql-workbench-bin "$@"
+   fi
+--- a/plugins/migration/frontend/migration_bulk_copy_data.py
++++ b/plugins/migration/frontend/migration_bulk_copy_data.py
+@@ -110,7 +110,7 @@
+         return 'sh'
+ 
+     def generate_import_script(self, connection_args, path_to_file, schema_name):
+-        output = ['#!/bin/bash']
++        output = ['#!/usr/bin/env bash']
+         output.append('MYPATH=\`pwd\`')
+         
+         output.append('if [ -f \$MYPATH/%s ] ; then' % self.error_log_name)
+@@ -164,7 +164,7 @@
+         return 'sh'
+ 
+     def generate_import_script(self, connection_args, path_to_file, schema_name):
+-        output = ['#!/bin/bash']
++        output = ['#!/usr/bin/env bash']
+         output.append('MYPATH=\`pwd\`')
+         
+         output.append('if [ -f \$MYPATH/%s ] ; then' % self.error_log_name)
+@@ -417,7 +417,7 @@
+     
+         with open(script_path, 'w+') as f:
+             os.chmod(script_path, 0700)
+-            f.write('#!/bin/bash\n\n')
++            f.write('#!/usr/bin/env bash\n\n')
+             f.write('MYPATH=`pwd`\n')
+             
+             f.write("arg_source_password=\"<put source password here>\"\n")
+@@ -521,7 +521,7 @@
+     
+         with open(script_path, 'w+') as f:
+             os.chmod(script_path, 0700)
+-            f.write('#!/bin/bash\n\n')
++            f.write('#!/usr/bin/env bash\n\n')
+             f.write('MYPATH=`pwd`\n')
+             
+             f.write("arg_source_password=\"<put source password here>\"\n")
+--- a/plugins/wb.admin/backend/wb_server_control.py
++++ b/plugins/wb.admin/backend/wb_server_control.py
+@@ -39,7 +39,7 @@
+ 
+ UnixVariant = {
+     "" : {
+-        'sudo_command' : "/usr/bin/sudo -k -S -p EnterPasswordHere ",
++        'sudo_command' : "@sudo@ -k -S -p EnterPasswordHere ",
+     }
+ }
+ 
+--- a/plugins/wb.admin/backend/wb_server_management.py
++++ b/plugins/wb.admin/backend/wb_server_management.py
+@@ -40,7 +40,7 @@
+ 
+ def reset_sudo_prefix():
+     global default_sudo_prefix
+-    default_sudo_prefix       = '/usr/bin/sudo -k -S -p EnterPasswordHere'
++    default_sudo_prefix       = '@sudo@ -k -S -p EnterPasswordHere'
+ 
+ reset_sudo_prefix()
+ 
+@@ -100,7 +100,7 @@
+ 
+     if to_spawn:
+         command += ' &'
+-        sudo_prefix += ' /usr/bin/nohup'
++        sudo_prefix += ' @nohup@'
+       
+     # If as_user is the CURRENT then there's no need to sudo
+     if as_user != Users.CURRENT:
+@@ -111,7 +111,7 @@
+         if '/bin/sh' in sudo_prefix or '/bin/bash' in sudo_prefix:
+             command = "LANG=C " + sudo_prefix + " \"" + command.replace('\\', '\\\\').replace('"', r'\"').replace('$','\\$') + "\""
+         else:
+-            command = "LANG=C " + sudo_prefix + " /bin/bash -c \"" + command.replace('\\', '\\\\').replace('"', r'\"').replace('$','\\$') + "\""
++            command = "LANG=C " + sudo_prefix + " @bash@ -c \"" + command.replace('\\', '\\\\').replace('"', r'\"').replace('$','\\$') + "\""
+ 
+     return command
+ 
+@@ -896,9 +896,9 @@
+             if as_user == Users.CURRENT:
+                 raise PermissionDeniedError("Cannot set owner of directory %s" % path)        
+             else:
+-                command = "/bin/mkdir %s && chown %s %s" % (quote_path(path), with_owner, quote_path(path))
++                command = "@mkdir@ %s && chown %s %s" % (quote_path(path), with_owner, quote_path(path))
+         else:
+-            command = "/bin/mkdir %s" % (quote_path(path))
++            command = "@mkdir@ %s" % (quote_path(path))
+             
+         res = self.process_ops.exec_cmd(command,
+                                         as_user   = as_user,
+@@ -927,7 +927,7 @@
+     @useAbsPath("path")
+     def remove_directory(self, path, as_user = Users.CURRENT, user_password = None):
+         output = StringIO.StringIO()
+-        res = self.process_ops.exec_cmd('/bin/rmdir ' + quote_path(path),
++        res = self.process_ops.exec_cmd('@rmdir@ ' + quote_path(path),
+                                         as_user   = as_user,
+                                         user_password = user_password,
+                                         output_handler = output.write,
+@@ -940,7 +940,7 @@
+     @useAbsPath("path")
+     def remove_directory_recursive(self, path, as_user = Users.CURRENT, user_password = None):
+         output = StringIO.StringIO()
+-        res = self.process_ops.exec_cmd('/bin/rm -R ' + quote_path(path),
++        res = self.process_ops.exec_cmd('@rm@ -R ' + quote_path(path),
+                                         as_user   = as_user,
+                                         user_password = user_password,
+                                         output_handler = output.write,
+@@ -953,7 +953,7 @@
+     @useAbsPath("path")
+     def delete_file(self, path, as_user = Users.CURRENT, user_password = None):
+         output = StringIO.StringIO()
+-        res = self.process_ops.exec_cmd("/bin/rm " + quote_path(path),
++        res = self.process_ops.exec_cmd("@rm@ " + quote_path(path),
+                                         as_user   = as_user,
+                                         user_password = user_password,
+                                         output_handler = output.write,
+@@ -1001,7 +1001,7 @@
+     def _copy_file(self, source, dest, as_user = Users.CURRENT, user_password = None):
+         output = StringIO.StringIO()
+         
+-        res = self.process_ops.exec_cmd("LC_ALL=C /bin/cp " + quote_path(source) + " " + quote_path(dest),
++        res = self.process_ops.exec_cmd("LC_ALL=C @cp@ " + quote_path(source) + " " + quote_path(dest),
+                       as_user   = as_user,
+                       user_password = user_password,
+                       output_handler = output.write,
+@@ -1077,9 +1077,9 @@
+             # for ls -l, the output format changes depending on stdout being a terminal or not
+             # since both cases are possible, we need to handle both at the same time (1st line being total <nnnn> or not)
+             # the good news is that if the line is there, then it will always start with total, regardless of the locale
+-            command = 'LC_ALL=C /bin/ls -l -p %s' % quote_path(path)
++            command = 'LC_ALL=C @ls@ -l -p %s' % quote_path(path)
+         else:
+-            command = 'LC_ALL=C /bin/ls -1 -p %s' % quote_path(path)
++            command = 'LC_ALL=C @ls@ -1 -p %s' % quote_path(path)
+             
+         output = StringIO.StringIO()
+         res = self.process_ops.exec_cmd(command,
+@@ -2160,9 +2160,9 @@
+     def get_range(self, start, end):
+         f = StringIO.StringIO()
+         if not self._need_sudo:
+-            ret = self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i count=%i 2> /dev/null" % (quote_path(self.path), start, end-start), as_user = Users.CURRENT, user_password=None, output_handler=f.write)
++            ret = self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i count=%i 2> /dev/null" % (quote_path(self.path), start, end-start), as_user = Users.CURRENT, user_password=None, output_handler=f.write)
+         else:
+-            ret = self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i count=%i 2> /dev/null" % (quote_path(self.path), start, end-start), as_user = Users.ADMIN, user_password=self.get_password, output_handler=f.write)
++            ret = self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i count=%i 2> /dev/null" % (quote_path(self.path), start, end-start), as_user = Users.ADMIN, user_password=self.get_password, output_handler=f.write)
+ 
+         if ret != 0:
+             raise RuntimeError("Could not get data from file %s" % self.path)
+@@ -2170,9 +2170,9 @@
+ 
+     def read_task(self, offset, file):
+         if not self._need_sudo:
+-            self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.CURRENT, user_password=None, output_handler=file.write)
++            self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.CURRENT, user_password=None, output_handler=file.write)
+         else:
+-            self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.ADMIN, user_password=self.get_password, output_handler=file.write)
++            self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.ADMIN, user_password=self.get_password, output_handler=file.write)
+         # this will signal the reader end that there's no more data
+         file.close()
+ 
+@@ -2198,9 +2198,9 @@
+         self._pos = offset
+         f = StringIO.StringIO()
+         if not self._need_sudo:
+-            self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.CURRENT, user_password=None, output_handler=f.write)
++            self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.CURRENT, user_password=None, output_handler=f.write)
+         else:
+-            self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.ADMIN, user_password=self._password, output_handler=f.write)
++            self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.ADMIN, user_password=self._password, output_handler=f.write)
+         self.data = f
+         self.data.seek(0)
+         if self.skip_first_newline:
diff --git a/nixpkgs/pkgs/applications/misc/mystem/default.nix b/nixpkgs/pkgs/applications/misc/mystem/default.nix
new file mode 100644
index 000000000000..62c1834d26ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mystem/default.nix
@@ -0,0 +1,26 @@
+{lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mystem";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://download.cdn.yandex.net/mystem/${pname}-${version}-linux-64bit.tar.gz";
+    sha256 = "0qha7jvkdmil3jiwrpsfhkqsbkqn9dzgx3ayxwjdmv73ikmg95j6";
+  };
+
+  buildCommand = ''
+    tar -xaf "$src"
+    mkdir -p $out/bin
+    install -Dm755 mystem $out/bin/mystem
+    patchelf --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) $out/bin/mystem
+  '';
+
+  meta = with lib; {
+    description = "Morphological analysis of Russian text";
+    homepage = "https://yandex.ru/dev/mystem/";
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nanoblogger/default.nix b/nixpkgs/pkgs/applications/misc/nanoblogger/default.nix
new file mode 100644
index 000000000000..e8fa4d4fd379
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nanoblogger/default.nix
@@ -0,0 +1,30 @@
+{ fetchurl, lib, stdenv, bash }:
+
+stdenv.mkDerivation rec {
+  version = "3.5-rc1";
+  pname = "nanoblogger";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/nanoblogger/${pname}-${version}.tar.gz";
+    sha256 = "09mv52a5f0h3das8x96irqyznm69arfskx472b7w3b9q4a2ipxbq";
+  };
+
+  buildInputs = [ ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r * $out
+    cat > $out/bin/nb << EOF
+    #!${bash}/bin/bash
+    $out/nb "\$@"
+    EOF
+    chmod 755 $out/bin/nb
+  '';
+
+  meta = {
+    description = "Small weblog engine written in Bash for the command line";
+    homepage = "http://nanoblogger.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/navi/default.nix b/nixpkgs/pkgs/applications/misc/navi/default.nix
new file mode 100644
index 000000000000..da8d387d1668
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/navi/default.nix
@@ -0,0 +1,31 @@
+{ fetchFromGitHub, fzf, lib, makeWrapper, rustPlatform, wget }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "navi";
+  version = "2.14.0";
+
+  src = fetchFromGitHub {
+    owner = "denisidoro";
+    repo = "navi";
+    rev = "v${version}";
+    sha256 = "sha256-4XR+HazX65jiMvZpLNMNOc8gVVAxMx3bNcVNT6UPJ3o=";
+  };
+
+  cargoSha256 = "sha256-ZBs9/yoY3na21rQd5zJzFujZZSq2BDoENKYAWI1fnTg=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/navi \
+      --prefix PATH : "$out/bin" \
+      --prefix PATH : ${lib.makeBinPath [ fzf wget ]}
+  '';
+
+  meta = with lib; {
+    description = "An interactive cheatsheet tool for the command-line and application launchers";
+    homepage = "https://github.com/denisidoro/navi";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cust0dian ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/navipowm/default.nix b/nixpkgs/pkgs/applications/misc/navipowm/default.nix
new file mode 100644
index 000000000000..0727f8672910
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/navipowm/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, qt4, qmake4Hook }:
+stdenv.mkDerivation rec {
+  name = "navipowm-0.2.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/navipowm/NaviPOWM-0.2.4.tar.gz";
+    sha256 = "1kdih8kwpgcgfh6l6njkr9gq2j5hv39xvzmzgvhip553kn6bss7b";
+  };
+
+  preConfigure = ''
+    cd Qt/KDevelop
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/${name}/Icons
+    cp bin/NaviPOWM $out/bin
+    cp ../../common/Config/navipowm.ini $out/share/${name}
+    cp ../../common/Images/* $out/share/${name}
+  '';
+
+  buildInputs = [ qt4 ];
+  nativeBuildInputs = [ qmake4Hook ];
+
+  meta = {
+    homepage = "http://navipowm.sourceforge.net/";
+    description = "Car navigation system";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/navit/CMakeLists.txt.patch b/nixpkgs/pkgs/applications/misc/navit/CMakeLists.txt.patch
new file mode 100644
index 000000000000..7f8a75f319be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/navit/CMakeLists.txt.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 763f75b..defa74a 100755
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -212,7 +212,7 @@ CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H)
+ CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
+ CHECK_INCLUDE_FILES(byteswap.h HAVE_BYTESWAP_H)
+ CHECK_LIBRARY_EXISTS(gypsy gypsy_control_get_default "" GYPSY_FOUND)
+-CHECK_INCLUDE_FILES(libspeechd.h HAVE_LIBSPEECHD)
++CHECK_INCLUDE_FILES(speech-dispatcher/libspeechd.h HAVE_LIBSPEECHD)
+ CHECK_INCLUDE_FILES(sys/socket.h HAVE_SOCKET)
+ CHECK_INCLUDE_FILES(sys/shm.h HAVE_SHMEM)
+ CHECK_FUNCTION_EXISTS(snprintf   HAVE_SNPRINTF)
diff --git a/nixpkgs/pkgs/applications/misc/navit/default.nix b/nixpkgs/pkgs/applications/misc/navit/default.nix
new file mode 100644
index 000000000000..c041c2969274
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/navit/default.nix
@@ -0,0 +1,90 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gtk2, fontconfig, freetype, imlib2
+, SDL_image, libGLU, libGL, libXmu, freeglut, pcre, dbus, dbus-glib, glib
+, librsvg, freeimage, libxslt, cairo, gdk-pixbuf, pango
+, atk, patchelf, fetchurl, bzip2, python, gettext, quesoglc
+, gd, cmake, shapelib, SDL_ttf, fribidi, makeWrapper
+, qtquickcontrols, qtmultimedia, qtspeech, qtsensors
+, qtlocation, qtdeclarative, qtsvg
+, qtSupport ? false, qtbase #need to fix qt_qpainter
+, sdlSupport ? true, SDL
+, xkbdSupport ? true, xkbd
+, espeakSupport ? true, espeak
+, postgresqlSupport ? false, postgresql
+, speechdSupport ? false, speechd ? null
+}:
+
+assert speechdSupport -> speechd != null;
+
+with lib;
+stdenv.mkDerivation rec {
+  pname = "navit";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "navit-gps";
+    repo = "navit";
+    rev = "v${version}";
+    sha256 = "071drvqzxpxbfh0lf0lra5a97rv8ny40l96n9xl0dx0s8w30j61i";
+  };
+
+  sample_map = fetchurl {
+    url = "http://www.navit-project.org/maps/osm_bbox_11.3,47.9,11.7,48.2.osm.bz2";
+    name = "sample_map.bz2";
+    sha256 = "0vg6b6rhsa2cxqj4rbhfhhfss71syhnfa6f1jg2i2d7l88dm5x7d";
+  };
+
+  patches = [ ./CMakeLists.txt.patch ];
+
+  NIX_CFLAGS_COMPILE = toString (optional sdlSupport "-I${SDL.dev}/include/SDL"
+    ++ optional speechdSupport "-I${speechd}/include/speech-dispatcher");
+
+  # we choose only cmdline and speech-dispatcher speech options.
+  # espeak builtins is made for non-cmdline OS as winCE
+  cmakeFlags = [
+    "-DSAMPLE_MAP=n " "-DCMAKE_BUILD_TYPE=Release"
+    "-Dspeech/qt5_espeak=FALSE" "-Dsupport/espeak=FALSE"
+  ];
+
+  buildInputs = [
+    gtk2 fontconfig freetype imlib2 libGLU libGL freeimage
+    libxslt libXmu freeglut python gettext quesoglc gd
+    fribidi pcre  dbus dbus-glib librsvg shapelib glib
+    cairo gdk-pixbuf pango atk
+  ] ++ optionals sdlSupport [ SDL SDL_ttf SDL_image ]
+    ++ optional postgresqlSupport postgresql
+    ++ optional speechdSupport speechd
+    ++ optionals qtSupport [
+      qtquickcontrols qtmultimedia qtspeech qtsensors
+      qtbase qtlocation qtdeclarative qtsvg
+  ];
+
+  nativeBuildInputs = [ makeWrapper pkg-config cmake patchelf bzip2 ];
+
+  # we dont want blank screen by defaut
+  postInstall = ''
+    # emulate DSAMPLE_MAP
+    mkdir -p $out/share/navit/maps/
+    bzcat "${sample_map}" | $out/bin/maptool "$out/share/navit/maps/osm_bbox_11.3,47.9,11.7,48.2.bin"
+  '';
+
+  # TODO: fix upstream?
+  libPath = lib.makeLibraryPath ([ stdenv.cc.libc ] ++ buildInputs );
+  postFixup =
+  ''
+    find "$out/lib" -type f -name "*.so" -exec patchelf --set-rpath $libPath {} \;
+
+    wrapProgram $out/bin/navit \
+      --prefix PATH : ${makeBinPath (
+        optional xkbdSupport xkbd
+        ++ optional espeakSupport espeak
+        ++ optional speechdSupport speechd ) }
+  '';
+
+  meta = {
+    homepage = "https://www.navit-project.org";
+    description = "Car navigation system with routing engine using OSM maps";
+    license = licenses.gpl2;
+    maintainers = [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/neap/default.nix b/nixpkgs/pkgs/applications/misc/neap/default.nix
new file mode 100644
index 000000000000..e5f50dd33706
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/neap/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, python2Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "neap";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "vzxwco";
+    repo = "neap";
+    rev = "v${version}";
+    sha256 = "04da8rq23rl1qcvrdm5m3l90xbwyli7x601sckv7hmkip2q3g1kz";
+  };
+
+  nativeBuildInputs = [
+    python2Packages.wrapPython
+  ];
+
+  buildInputs = [
+    python2Packages.python
+  ];
+
+  pythonPath = [
+    python2Packages.xlib
+    python2Packages.pygtk
+  ];
+
+  installPhase = ''
+    install -D -t $out/bin neap
+    install -D -t $out/share/man/man1 neap.1
+    install -D -t $out/share/applications neap.desktop
+  '';
+
+  postFixup = ''
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "Systray workspace pager";
+    homepage = "https://github.com/vzxwco/neap";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nix-tour/default.nix b/nixpkgs/pkgs/applications/misc/nix-tour/default.nix
new file mode 100644
index 000000000000..dda4dcb47e57
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nix-tour/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchgit, electron, runtimeShell } :
+
+stdenv.mkDerivation rec {
+  pname = "nix-tour";
+  version = "0.0.1";
+
+  buildInputs = [ electron ];
+
+  src = fetchgit {
+    url = "https://github.com/nixcloud/tour_of_nix";
+    rev = "v${version}";
+    sha256 = "09b1vxli4zv1nhqnj6c0vrrl51gaira94i8l7ww96fixqxjgdwvb";
+  };
+
+  phases = [ "unpackPhase" "installPhase" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share
+    cp -R * $out/share
+    chmod 0755 $out/share/ -R
+    echo "#!${runtimeShell}" > $out/bin/nix-tour
+    echo "cd $out/share/" >> $out/bin/nix-tour
+    echo "${electron}/bin/electron $out/share/electron-main.js" >> $out/bin/nix-tour
+    chmod 0755 $out/bin/nix-tour
+  '';
+
+  meta = with lib; {
+    description = "'the tour of nix' from nixcloud.io/tour as offline version";
+    homepage = "https://nixcloud.io/tour";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ qknight ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/nixnote2/default.nix b/nixpkgs/pkgs/applications/misc/nixnote2/default.nix
new file mode 100644
index 000000000000..b23c41e6feec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nixnote2/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, boost
+, qtbase, qtwebkit, poppler, qmake, hunspell, html-tidy}:
+
+mkDerivation rec {
+  pname = "nixnote2";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "baumgarr";
+    repo = "nixnote2";
+    rev = "v${version}";
+    sha256 = "0cfq95mxvcgby66r61gclm1a2c6zck5aln04xmg2q8kg6p9d31fr";
+  };
+
+  buildInputs = [ boost qtbase qtwebkit poppler hunspell ];
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ qmake ];
+
+  postPatch = ''
+    # Fix location of poppler-qt5.h
+    for f in threads/indexrunner.cpp html/noteformatter.cpp utilities/noteindexer.cpp gui/plugins/popplerviewer.h gui/plugins/pluginfactory.h gui/plugins/popplerviewer.cpp ; do
+      substituteInPlace $f \
+        --replace '#include <poppler-qt5.h>' '#include <poppler/qt5/poppler-qt5.h>'
+    done
+
+    substituteInPlace help/about.html --replace '__VERSION__' '${version}'
+
+    substituteInPlace nixnote.cpp --replace 'tidyProcess.start("tidy' 'tidyProcess.start("${html-tidy}/bin/tidy'
+  '';
+
+  postInstall = ''
+    cp images/windowIcon.png $out/share/pixmaps/nixnote2.png
+    cp theme.ini $out/share/nixnote2/theme.ini
+  '';
+
+  meta = with lib; {
+    description = "An unofficial client of Evernote";
+    homepage = "http://www.nixnote.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ htr ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nnn/default.nix b/nixpkgs/pkgs/applications/misc/nnn/default.nix
new file mode 100644
index 000000000000..4a72eecf9b37
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nnn/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, ncurses, readline
+, conf ? null, withIcons ? false, withNerdIcons ? false }:
+
+# Mutually exclusive options
+assert withIcons -> withNerdIcons == false;
+assert withNerdIcons -> withIcons == false;
+
+stdenv.mkDerivation rec {
+  pname = "nnn";
+  version = "3.5";
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1fa7cmwrzn6kx87kms8i98p9azdlwyh2gnif29l340syl9hkr5qy";
+  };
+
+  configFile = lib.optionalString (conf != null) (builtins.toFile "nnn.h" conf);
+  preBuild = lib.optionalString (conf != null) "cp ${configFile} src/nnn.h";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ readline ncurses ];
+
+  makeFlags = [
+    "DESTDIR=${placeholder "out"}"
+    "PREFIX="
+  ] ++ lib.optional withIcons [ "O_ICONS=1" ]
+    ++ lib.optional withNerdIcons [ "O_NERD=1" ];
+
+  # shell completions
+  postInstall = ''
+    install -Dm555 misc/auto-completion/bash/nnn-completion.bash $out/share/bash-completion/completions/nnn.bash
+    install -Dm555 misc/auto-completion/zsh/_nnn -t $out/share/zsh/site-functions
+    install -Dm555 misc/auto-completion/fish/nnn.fish -t $out/share/fish/vendor_completions.d
+  '';
+
+  meta = with lib; {
+    description = "Small ncurses-based file browser forked from noice";
+    homepage = "https://github.com/jarun/nnn";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ jfrankenau Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/noice/default.nix b/nixpkgs/pkgs/applications/misc/noice/default.nix
new file mode 100644
index 000000000000..73648d896d08
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/noice/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchgit, ncurses, conf ? null }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "noice";
+  version = "0.8";
+
+  src = fetchgit {
+    url = "git://git.2f30.org/noice.git";
+    rev = "refs/tags/v${version}";
+    sha256 = "0975j4m93s9a21pazwdzn4gqhkngwq7q6ghp0q8a75r6c4fb7aar";
+  };
+
+  configFile = optionalString (conf!=null) (builtins.toFile "config.def.h" conf);
+  preBuild = optionalString (conf!=null) "cp ${configFile} config.def.h";
+
+  buildInputs = [ ncurses ];
+
+  buildFlags = [ "LDLIBS=-lncurses" ];
+
+  installFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
+
+  meta = {
+    description = "Small ncurses-based file browser";
+    homepage = "https://git.2f30.org/noice/";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ jfrankenau ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/notable/default.nix b/nixpkgs/pkgs/applications/misc/notable/default.nix
new file mode 100644
index 000000000000..923f5fb4528e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notable/default.nix
@@ -0,0 +1,47 @@
+{ appimageTools, fetchurl, lib, gsettings-desktop-schemas, gtk3 }:
+
+let
+  pname = "notable";
+  version = "1.8.4";
+  sha256 = "0rvz8zwsi62kiq89pv8n2wh9h5yb030kvdr1vf65xwqkhqcrzrby";
+
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/notable/notable/releases/download/v${version}/Notable-${version}.AppImage";
+    inherit sha256;
+  };
+
+  appimageContents = appimageTools.extract {
+    inherit name src;
+  };
+
+in
+appimageTools.wrapType2 rec {
+
+  inherit name src;
+
+  profile = ''
+    export LC_ALL=C.UTF-8
+    export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS
+  '';
+
+  multiPkgs = null; # no 32bit needed
+  extraPkgs = p: (appimageTools.defaultFhsEnvArgs.multiPkgs p) ++ [ p.at-spi2-atk p.at-spi2-core ];
+  extraInstallCommands = ''
+    mv $out/bin/{${name},${pname}}
+    install -m 444 -D ${appimageContents}/notable.desktop $out/share/applications/notable.desktop
+    install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/1024x1024/apps/notable.png \
+      $out/share/icons/hicolor/1024x1024/apps/notable.png
+    substituteInPlace $out/share/applications/notable.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "The markdown-based note-taking app that doesn't suck";
+    homepage = "https://github.com/notable/notable";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/notejot/default.nix b/nixpkgs/pkgs/applications/misc/notejot/default.nix
new file mode 100644
index 000000000000..0b781f61369a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notejot/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, nix-update-script, vala, pkg-config, meson, ninja, python3, pantheon
+, gtk3, gtksourceview, json-glib, libgee, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "notejot";
+  version = "1.6.3";
+
+  src = fetchFromGitHub {
+    owner = "lainsce";
+    repo = pname;
+    rev = version;
+    sha256 = "170dzgd6cnf2k3hfifjysmdggpskx6v1pjmblqgbwaj2d3snf3h8";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    gtksourceview
+    json-glib
+    libgee
+    pantheon.elementary-icon-theme
+    pantheon.granite
+  ];
+
+  postPatch = ''
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Stupidly-simple sticky notes applet";
+    homepage = "https://github.com/lainsce/notejot";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ worldofpeace ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/notify-osd-customizable/default.nix b/nixpkgs/pkgs/applications/misc/notify-osd-customizable/default.nix
new file mode 100644
index 000000000000..e62b3a334876
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notify-osd-customizable/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv
+, dbus-glib
+, fetchurl
+, glib
+, gnome3
+, libnotify
+, libtool
+, libwnck3
+, makeWrapper
+, pkg-config
+, gsettings-desktop-schemas
+}:
+
+let baseURI = "https://launchpad.net/~leolik/+archive/leolik";
+in stdenv.mkDerivation rec {
+  pname = "notify-osd";
+  version = "0.9.35+16.04.20160415";
+
+  src = fetchurl {
+    url = "${baseURI}/+files/notify-osd_${version}-0ubuntu1-leolik~ppa0.tar.gz";
+    sha256 = "026dr46jh3xc4103wnslzy7pxbxkkpflh52c59j8vzwaa7bvvzkv";
+    name = "notify-osd-customizable.tar.gz";
+  };
+
+  preConfigure = "./autogen.sh --libexecdir=$(out)/bin";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    glib libwnck3 libnotify dbus-glib makeWrapper
+    gsettings-desktop-schemas gnome3.gnome-common
+    libtool
+  ];
+
+  configureFlags = [ "--libexecdir=$(out)/bin" ];
+
+  preFixup = ''
+    wrapProgram "$out/bin/notify-osd" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+  '';
+
+  meta = with lib; {
+    description = "Daemon that displays passive pop-up notifications";
+    homepage = "https://launchpad.net/notify-osd";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.imalison ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/notify-osd/default.nix b/nixpkgs/pkgs/applications/misc/notify-osd/default.nix
new file mode 100644
index 000000000000..d68601ca6ec7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notify-osd/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, libwnck3, libnotify, dbus-glib, makeWrapper, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+  pname = "notify-osd";
+  version = "0.9.34";
+
+  src = fetchurl {
+    url = "https://launchpad.net/notify-osd/precise/${version}/+download/notify-osd-${version}.tar.gz";
+    sha256 = "0g5a7a680b05x27apz0y1ldl5csxpp152wqi42s107jymbp0s20j";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    glib libwnck3 libnotify dbus-glib makeWrapper
+    gsettings-desktop-schemas
+  ];
+
+  configureFlags = [ "--libexecdir=$(out)/bin" ];
+
+  preFixup = ''
+    wrapProgram "$out/bin/notify-osd" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+  '';
+
+  meta = with lib; {
+    description = "Daemon that displays passive pop-up notifications";
+    homepage = "https://launchpad.net/notify-osd";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.bodil ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nrsc5/default.nix b/nixpkgs/pkgs/applications/misc/nrsc5/default.nix
new file mode 100644
index 000000000000..8b8fa16fc213
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nrsc5/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub,
+  autoconf, automake, libtool, cmake,
+  rtl-sdr, libao, fftwFloat
+} :
+let
+  src_faad2 = fetchFromGitHub {
+    owner = "dsvensson";
+    repo = "faad2";
+    rev = "b7aa099fd3220b71180ed2b0bc19dc6209a1b418";
+    sha256 = "0pcw2x9rjgkf5g6irql1j4m5xjb4lxj6468z8v603921bnir71mf";
+  };
+
+  version = "1.0";
+
+in stdenv.mkDerivation {
+  pname = "nrsc5";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "theori-io";
+    repo = "nrsc5";
+    rev = "v${version}";
+    sha256 = "09zzh3h1zzf2lwrbz3i7rif2hw36d9ska8irvxaa9lz6xc1y68pg";
+  };
+
+  postUnpack = ''
+    export srcRoot=`pwd`
+    export faadSrc="$srcRoot/faad2-prefix/src/faad2_external"
+    mkdir -p $faadSrc
+    cp -r ${src_faad2}/* $faadSrc
+    chmod -R u+w $faadSrc
+  '';
+
+  postPatch = ''
+    sed -i '/GIT_REPOSITORY/d' CMakeLists.txt
+    sed -i '/GIT_TAG/d' CMakeLists.txt
+    sed -i "s:set (FAAD2_PREFIX .*):set (FAAD2_PREFIX \"$srcRoot/faad2-prefix\"):" CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [ cmake autoconf automake libtool ];
+  buildInputs = [ rtl-sdr libao fftwFloat ];
+
+  cmakeFlags = [ "-DUSE_COLOR=ON" "-DUSE_FAAD2=ON" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/theori-io/nrsc5";
+    description = "HD-Radio decoder for RTL-SDR";
+    platforms = lib.platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ markuskowa ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/nut/default.nix b/nixpkgs/pkgs/applications/misc/nut/default.nix
new file mode 100644
index 000000000000..4694c243b391
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nut/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, pkg-config, neon, libusb-compat-0_1, openssl, udev, avahi, freeipmi
+, libtool, makeWrapper, autoreconfHook, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nut";
+  version = "2.7.4";
+
+  src = fetchurl {
+    url = "https://networkupstools.org/source/2.7/${pname}-${version}.tar.gz";
+    sha256 = "19r5dm07sfz495ckcgbfy0pasx0zy3faa0q7bih69lsjij8q43lq";
+  };
+
+  patches = [
+    (fetchpatch {
+      # Fix build with openssl >= 1.1.0
+      url = "https://github.com/networkupstools/nut/commit/612c05efb3c3b243da603a3a050993281888b6e3.patch";
+      sha256 = "0jdbii1z5sqyv24286j5px65j7b3gp8zk3ahbph83pig6g46m3hs";
+    })
+  ];
+
+  buildInputs = [ neon libusb-compat-0_1 openssl udev avahi freeipmi ];
+
+  nativeBuildInputs = [ autoreconfHook libtool pkg-config makeWrapper ];
+
+  configureFlags =
+    [ "--with-all"
+      "--with-ssl"
+      "--without-snmp" # Until we have it ...
+      "--without-powerman" # Until we have it ...
+      "--without-cgi"
+      "--without-hal"
+      "--with-systemdsystemunitdir=$(out)/etc/systemd/system"
+      "--with-udev-dir=$(out)/etc/udev"
+    ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/nut-scanner --prefix LD_LIBRARY_PATH : \
+      "$out/lib:${neon}/lib:${libusb-compat-0_1.out}/lib:${avahi}/lib:${freeipmi}/lib"
+  '';
+
+  meta = with lib; {
+    description = "Network UPS Tools";
+    longDescription = ''
+      Network UPS Tools is a collection of programs which provide a common
+      interface for monitoring and administering UPS, PDU and SCD hardware.
+      It uses a layered approach to connect all of the parts.
+    '';
+    homepage = "https://networkupstools.org/";
+    repositories.git = "https://github.com/networkupstools/nut.git";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.pierron ];
+    license = with licenses; [ gpl1Plus gpl2Plus gpl3Plus ];
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nwg-launchers/default.nix b/nixpkgs/pkgs/applications/misc/nwg-launchers/default.nix
new file mode 100644
index 000000000000..c4c54ba7c53b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-launchers/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, gtkmm3
+, meson
+, ninja
+, nlohmann_json
+, pkg-config
+, swaylock
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nwg-launchers";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vuvYL9N9xdg27uhiTe2OqxZ3/n/9EjlqPxtNMXpqpE8=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    cmake
+    makeWrapper
+  ];
+
+  buildInputs = [
+    gtkmm3
+    nlohmann_json
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/nwgbar \
+      --prefix PATH : "${swaylock}/bin"
+  '';
+
+  meta = with lib; {
+    description = "GTK-based launchers: application grid, button bar, dmenu for sway and other window managers";
+    homepage = "https://github.com/nwg-piotr/nwg-launchers";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/obinskit/default.nix b/nixpkgs/pkgs/applications/misc/obinskit/default.nix
new file mode 100644
index 000000000000..5e37e74902e4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/obinskit/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, lib
+, fetchurl
+, libxkbcommon
+, systemd
+, xorg
+, electron_3
+, makeWrapper
+, makeDesktopItem
+}:
+let
+  desktopItem = makeDesktopItem rec {
+    name = "Obinskit";
+    exec = "obinskit";
+    icon = "obinskit";
+    desktopName = "Obinskit";
+    genericName = "Obinskit keyboard configurator";
+    categories = "Utility";
+  };
+  electron = electron_3;
+in
+stdenv.mkDerivation rec {
+  pname = "obinskit";
+  version = "1.1.4";
+
+  src = fetchurl {
+    url = "http://releases.obins.net/occ/linux/tar/ObinsKit_${version}_x64.tar.gz";
+    sha256 = "0q422rmfn4k4ww1qlgrwdmxz4l10dxkd6piynbcw5cr4i5icnh2l";
+  };
+
+  unpackPhase = "tar -xzf $src";
+
+  sourceRoot = "ObinsKit_${version}_x64";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/opt/obinskit
+
+    cp -r resources $out/opt/obinskit/
+    cp -r locales $out/opt/obinskit/
+
+    mkdir -p $out/share/{applications,pixmaps}
+    install resources/icons/tray-darwin@2x.png $out/share/pixmaps/obinskit.png
+    ln -s ${desktopItem}/share/applications/* $out/share/applications
+  '';
+
+  postFixup = ''
+    makeWrapper ${electron}/bin/electron $out/bin/${pname} \
+      --add-flags $out/opt/obinskit/resources/app.asar \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc.lib libxkbcommon (lib.getLib systemd) xorg.libXt ]}"
+  '';
+
+  meta = with lib; {
+    description = "Graphical configurator for Anne Pro and Anne Pro II keyboards";
+    homepage = "http://en.obins.net/obinskit/"; # https is broken
+    license = licenses.unfree;
+    maintainers = with maintainers; [ shou ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/obsidian/default.nix b/nixpkgs/pkgs/applications/misc/obsidian/default.nix
new file mode 100644
index 000000000000..0d10767e5b10
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/obsidian/default.nix
@@ -0,0 +1,74 @@
+{ stdenv, fetchurl, lib, makeWrapper, electron, makeDesktopItem, graphicsmagick
+, writeScript }:
+
+let
+  icon = fetchurl {
+    url =
+      "https://forum.obsidian.md/uploads/default/original/1X/bf119bd48f748f4fd2d65f2d1bb05d3c806883b5.png";
+    sha256 = "18ylnbvxr6k4x44c4i1d55wxy2dq4fdppp43a4wl6h6zar0sc9s2";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "obsidian";
+    desktopName = "Obsidian";
+    comment = "Knowledge base";
+    icon = "obsidian";
+    exec = "obsidian";
+    categories = "Office";
+  };
+
+  updateScript = writeScript "obsidian-updater" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl jq common-updater-scripts
+
+    set -eu -o pipefail
+
+    latestVersion="$(curl -sS https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/desktop-releases.json | jq -r '.latestVersion')"
+
+    update-source-version obsidian "$latestVersion"
+  '';
+
+in stdenv.mkDerivation rec {
+  pname = "obsidian";
+  version = "0.10.8";
+
+  src = fetchurl {
+    url =
+      "https://github.com/obsidianmd/obsidian-releases/releases/download/v${version}/obsidian-${version}.asar.gz";
+    sha256 = "M+iIvnenfe+4JUKLvGDJXub8d5t2BLoPTo5MrF+5xy4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper graphicsmagick ];
+
+  unpackPhase = ''
+    gzip -dc $src > obsidian.asar
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    makeWrapper ${electron}/bin/electron $out/bin/obsidian \
+      --add-flags $out/share/electron/obsidian.asar
+
+    install -m 444 -D obsidian.asar $out/share/electron/obsidian.asar
+
+    install -m 444 -D "${desktopItem}/share/applications/"* \
+      -t $out/share/applications/
+
+    for size in 16 24 32 48 64 128 256 512; do
+      mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+      gm convert -resize "$size"x"$size" ${icon} $out/share/icons/hicolor/"$size"x"$size"/apps/obsidian.png
+    done
+  '';
+
+  passthru.updateScript = updateScript;
+
+  meta = with lib; {
+    description =
+      "A powerful knowledge base that works on top of a local folder of plain text Markdown files";
+    homepage = "https://obsidian.md";
+    license = licenses.obsidian;
+    maintainers = with maintainers; [ conradmearns zaninime ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ocropus/default.nix b/nixpkgs/pkgs/applications/misc/ocropus/default.nix
new file mode 100644
index 000000000000..2b0986eeba66
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ocropus/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, pythonPackages, curl }:
+
+let
+  getmodel = name: sha256: {
+    inherit name;
+    src = fetchurl {
+      url = "http://www.tmbdev.net/ocropy/${name}";
+      inherit sha256;
+    };
+  };
+
+  models = [
+    (getmodel "en-default.pyrnn.gz"
+      "1xyi3k3p81mfw0491gb1haisazfyi2i18f1wjs1m34ak39qfqjdp")
+    (getmodel "fraktur.pyrnn.gz"
+      "1wlwvxn91ilgmlri1hj81arl3mbzxc24ycdnkf5icq4hdi4c6y8b")
+  ];
+
+in
+pythonPackages.buildPythonApplication rec {
+  pname = "ocropus";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    sha256 = "02p1334mic5cfhvpfphfrbim4036yfd8s2zzpwm0xmm829z71nr7";
+    rev = "v${version}";
+    repo = "ocropy";
+    owner = "tmbdev";
+  };
+
+  propagatedBuildInputs = with pythonPackages; [ curl numpy scipy pillow
+    matplotlib beautifulsoup4 pygtk lxml ];
+
+  enableParallelBuilding = true;
+
+  preConfigure = with lib; ''
+    ${concatStrings (map (x: "cp -R ${x.src} models/`basename ${x.name}`;")
+      models)}
+
+    substituteInPlace ocrolib/common.py --replace /usr/local $out
+    substituteInPlace ocrolib/default.py --replace /usr/local $out
+  '';
+
+  doCheck = false;  # fails
+  checkPhase = ''
+    patchShebangs .
+    substituteInPlace ./run-test \
+      --replace 'ocropus-rpred' 'ocropus-rpred -Q $NIX_BUILD_CORES'
+    PATH=".:$PATH" ./run-test
+  '';
+
+  meta = with lib; {
+    description = "Open source document analysis and OCR system";
+    license = licenses.asl20;
+    homepage = "https://github.com/tmbdev/ocropy/";
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/octoprint/default.nix b/nixpkgs/pkgs/applications/misc/octoprint/default.nix
new file mode 100644
index 000000000000..f35d03c6d172
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/octoprint/default.nix
@@ -0,0 +1,190 @@
+{ pkgs
+, stdenv
+, lib
+, fetchFromGitHub
+, python3
+  # To include additional plugins, pass them here as an overlay.
+, packageOverrides ? self: super: {}
+}:
+let
+  mkOverride = attrname: version: sha256:
+  self: super: {
+    ${attrname} = super.${attrname}.overridePythonAttrs (
+      oldAttrs: {
+        inherit version;
+        src = oldAttrs.src.override {
+          inherit version sha256;
+        };
+      }
+    );
+  };
+
+  py = python3.override {
+    self = py;
+    packageOverrides = lib.foldr lib.composeExtensions (self: super: {}) (
+      [
+        # the following dependencies are non trivial to update since later versions introduce backwards incompatible
+        # changes that might affect plugins, or due to other observed problems
+        (mkOverride "flask-babel" "1.0.0" "0gmb165vkwv5v7dxsxa2i3zhafns0fh938m2zdcrv4d8z5l099yn")
+        (mkOverride "rsa" "4.0" "1a836406405730121ae9823e19c6e806c62bbad73f890574fff50efa4122c487")
+        (mkOverride "markdown" "3.1.1" "2e50876bcdd74517e7b71f3e7a76102050edec255b3983403f1a63e7c8a41e7a")
+        (mkOverride "tornado" "5.1.1" "4e5158d97583502a7e2739951553cbd88a72076f152b4b11b64b9a10c4c49409")
+        (mkOverride "unidecode" "0.04.21" "280a6ab88e1f2eb5af79edff450021a0d3f0448952847cd79677e55e58bad051")
+        (mkOverride "sarge" "0.1.5.post0" "1c1ll7pys9vra5cfi8jxlgrgaql6c27l6inpy15aprgqhc4ck36s")
+
+        # Octoprint needs zeroconf >=0.24 <0.25. While this should be done in
+        # the mkOverride aboves, this package also has broken tests, so we need
+        # a proper override.
+        (
+          self: super: {
+            zeroconf = super.zeroconf.overrideAttrs (oldAttrs: rec {
+              version = "0.24.5";
+              src = oldAttrs.src.override {
+                inherit version;
+                sha256 = "0jpgd0rk91si93857mjrizan5gc42kj1q4fi4160qgk68la88fl9";
+              };
+              buildInputs = [ self.nose ];
+              checkPhase = "nosetests";
+            });
+          }
+        )
+
+        # Built-in dependency
+        (
+          self: super: {
+            octoprint-filecheck = self.buildPythonPackage rec {
+              pname = "OctoPrint-FileCheck";
+              version = "2020.08.07";
+
+              src = fetchFromGitHub {
+                owner = "OctoPrint";
+                repo = "OctoPrint-FileCheck";
+                rev = version;
+                sha256 = "05ys05l5x7d2bkg3yqrga6m65v3g5fcnnzbfab7j9w2pzjdapx5b";
+              };
+              doCheck = false;
+            };
+          }
+        )
+
+        # Built-in dependency
+        (
+          self: super: {
+            octoprint-firmwarecheck = self.buildPythonPackage rec {
+              pname = "OctoPrint-FirmwareCheck";
+              version = "2020.09.23";
+
+              src = fetchFromGitHub {
+                owner = "OctoPrint";
+                repo = "OctoPrint-FirmwareCheck";
+                rev = version;
+                sha256 = "1l1ajhnsc39prgk59mp93h90dgl9gh660cci00z5b5gj2h6dv1d1";
+              };
+              doCheck = false;
+            };
+          }
+        )
+
+        (
+          self: super: {
+            octoprint = self.buildPythonPackage rec {
+              pname = "OctoPrint";
+              version = "1.5.1";
+
+              src = fetchFromGitHub {
+                owner = "OctoPrint";
+                repo = "OctoPrint";
+                rev = version;
+                sha256 = "04x58cjivslsrld341ip11c50d50p2q01090nsyji0j255v986j9";
+              };
+
+              propagatedBuildInputs = with super; [
+                blinker
+                cachelib
+                click
+                emoji
+                feedparser
+                filetype
+                flask
+                flask-babel
+                flask_assets
+                flask_login
+                frozendict
+                future
+                itsdangerous
+                jinja2
+                markdown
+                markupsafe
+                netaddr
+                netifaces
+                octoprint-filecheck
+                octoprint-firmwarecheck
+                pkginfo
+                psutil
+                pylru
+                pyserial
+                pyyaml
+                regex
+                requests
+                rsa
+                sarge
+                semantic-version
+                sentry-sdk
+                tornado
+                unidecode
+                watchdog
+                websocket_client
+                werkzeug
+                wrapt
+                zeroconf
+              ] ++ lib.optionals stdenv.isDarwin [ py.pkgs.appdirs ];
+
+              checkInputs = with super; [ pytestCheckHook mock ddt ];
+
+              postPatch = let
+                ignoreVersionConstraints = [
+                  "sentry-sdk"
+                ];
+              in
+                ''
+                  sed -r -i \
+                    ${lib.concatStringsSep "\n" (
+                  map (
+                    e:
+                      ''-e 's@${e}[<>=]+.*@${e}",@g' \''
+                  ) ignoreVersionConstraints
+                )}
+                    setup.py
+                '';
+
+              dontUseSetuptoolsCheck = true;
+
+              preCheck = ''
+                export HOME=$(mktemp -d)
+                rm pytest.ini
+              '';
+
+              disabledTests = [
+                "test_check_setup" # Why should it be able to call pip?
+              ] ++ lib.optionals stdenv.isDarwin [
+                "test_set_external_modification"
+              ];
+
+              passthru.python = self.python;
+
+              meta = with lib; {
+                homepage = "https://octoprint.org/";
+                description = "The snappy web interface for your 3D printer";
+                license = licenses.agpl3;
+                maintainers = with maintainers; [ abbradar gebner WhittlesJr ];
+              };
+            };
+          }
+        )
+        (import ./plugins.nix { inherit pkgs; })
+        packageOverrides
+      ]
+    );
+  };
+in
+  with py.pkgs; toPythonApplication octoprint
diff --git a/nixpkgs/pkgs/applications/misc/octoprint/plugins.nix b/nixpkgs/pkgs/applications/misc/octoprint/plugins.nix
new file mode 100644
index 000000000000..df0409c8be48
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/octoprint/plugins.nix
@@ -0,0 +1,337 @@
+{ pkgs }:
+
+with pkgs;
+
+self: super: let
+  buildPlugin = args: self.buildPythonPackage (args // {
+    pname = "OctoPrintPlugin-${args.pname}";
+    inherit (args) version;
+    propagatedBuildInputs = (args.propagatedBuildInputs or []) ++ [ super.octoprint ];
+    # none of the following have tests
+    doCheck = false;
+  });
+in {
+  inherit buildPlugin;
+
+  abl-expert = buildPlugin rec {
+    pname = "ABL_Expert";
+    version = "0.6";
+
+    src = fetchgit {
+      url = "https://framagit.org/razer/Octoprint_ABL_Expert/";
+      rev = version;
+      sha256 = "0ij3rvdwya1sbymwm5swlh2j4jagb6fal945g88zrzh5xf26hzjh";
+    };
+
+    meta = with lib; {
+      description = "Marlin auto bed leveling control, mesh correction, and z probe handling";
+      homepage = "https://framagit.org/razer/Octoprint_ABL_Expert/";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ WhittlesJr ];
+    };
+  };
+
+  bedlevelvisualizer = buildPlugin rec {
+    pname = "BedLevelVisualizer";
+    version = "0.1.15";
+
+    src = fetchFromGitHub {
+      owner = "jneilliii";
+      repo = "OctoPrint-${pname}";
+      rev = version;
+      sha256 = "1bq39fnarnpk8phxfbpx6l4n9anf358z1cgid5r89nadmn2a0cny";
+    };
+
+    propagatedBuildInputs = with super; [ numpy ];
+
+    meta = with lib; {
+      description = "Displays 3D mesh of bed topography report";
+      homepage = "https://github.com/jneilliii/OctoPrint-BedLevelVisualizer";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ lovesegfault ];
+    };
+  };
+
+  curaenginelegacy = buildPlugin rec {
+    pname = "CuraEngineLegacy";
+    version = "1.1.1";
+
+    src = fetchFromGitHub {
+      owner = "OctoPrint";
+      repo = "OctoPrint-${pname}";
+      rev = version;
+      sha256 = "1a7pxlmj1a7blkv97sn1k390pbjcxx2860011pbjcdnli74zpvv5";
+    };
+
+    meta = with lib; {
+      description = "Plugin for slicing via Cura Legacy from within OctoPrint";
+      homepage = "https://github.com/OctoPrint/OctoPrint-CuraEngineLegacy";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ gebner ];
+    };
+  };
+
+  displaylayerprogress = buildPlugin rec {
+    pname = "OctoPrint-DisplayLayerProgress";
+    version = "1.24.0";
+
+    src = fetchFromGitHub {
+      owner = "OllisGit";
+      repo = pname;
+      rev = version;
+      sha256 = "1lbivg3rcjzv8zqvp8n8gcaczxdm7gvd5ihjb6jq0fgf958lv59n";
+    };
+
+    meta = with lib; {
+      description = "OctoPrint-Plugin that sends the current progress of a print via M117 command";
+      homepage = "https://github.com/OllisGit/OctoPrint-DisplayLayerProgress";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ j0hax ];
+    };
+  };
+
+  gcodeeditor = buildPlugin rec {
+    pname = "GcodeEditor";
+    version = "0.2.9";
+
+    src = fetchFromGitHub {
+      owner = "ieatacid";
+      repo = "OctoPrint-${pname}";
+      rev = version;
+      sha256 = "1yjj9lmxbzmzrn7gahw9lj7554fphalbjjp8ns0rr9py3rshwxkm";
+    };
+
+    meta = with lib; {
+      description = "Edit gcode on OctoPrint";
+      homepage = "https://github.com/ieatacid/OctoPrint-GcodeEditor";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ WhittlesJr ];
+    };
+  };
+
+  marlingcodedocumentation = buildPlugin rec {
+    pname = "MarlinGcodeDocumentation";
+    version = "0.11.0";
+
+    src = fetchFromGitHub {
+      owner = "costas-basdekis";
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "0vx06w9hqwy0k4r8g67y8gdckfdx7wl8ghfx6hmxc1s8fgkghfkc";
+    };
+
+    meta = with lib; {
+      description = "Displays GCode documentation for Marlin in the Octoprint terminal command line";
+      homepage = "https://github.com/costas-basdekis/MarlinGcodeDocumentation";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ lovesegfault ];
+    };
+  };
+
+  mqtt = buildPlugin rec {
+    pname = "MQTT";
+    version = "0.8.7";
+
+    src = fetchFromGitHub {
+      owner = "OctoPrint";
+      repo = "OctoPrint-MQTT";
+      rev = version;
+      sha256 = "0k82h7wafbcqdvk5wjw4dp9lydwszfj1lf8vvymwbqdn7pf5h0dy";
+    };
+
+    propagatedBuildInputs = with super; [ paho-mqtt ];
+
+    meta = with lib; {
+      description = "Publish printer status MQTT";
+      homepage = "https://github.com/OctoPrint/OctoPrint-MQTT";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ peterhoeg ];
+    };
+  };
+
+  printtimegenius = buildPlugin rec {
+    pname = "PrintTimeGenius";
+    version = "2.2.6";
+
+    src = fetchFromGitHub {
+      owner = "eyal0";
+      repo = "OctoPrint-${pname}";
+      rev = version;
+      sha256 = "04zfgd3x3lbriyzwhpqnwdcfdm19fsqgsb7l2ix5d0ssmqxwg2r6";
+    };
+
+    preConfigure = ''
+      # PrintTimeGenius ships with marlin-calc binaries for multiple architectures
+      rm */analyzers/marlin-calc*
+      sed 's@"{}.{}".format(binary_base_name, machine)@"${pkgs.marlin-calc}/bin/marlin-calc"@' -i */analyzers/analyze_progress.py
+    '';
+
+    patches = [
+      ./printtimegenius-logging.patch
+    ];
+
+    meta = with lib; {
+      description = "Better print time estimation for OctoPrint";
+      homepage = "https://github.com/eyal0/OctoPrint-PrintTimeGenius";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ gebner ];
+    };
+  };
+
+  psucontrol = buildPlugin rec {
+    pname = "PSUControl";
+    version = "0.1.9";
+
+    src = fetchFromGitHub {
+      owner = "kantlivelong";
+      repo = "OctoPrint-${pname}";
+      rev = version;
+      sha256 = "1cn009bdgn6c9ba9an5wfj8z02wi0xcsmbhkqggiqlnqy1fq45ca";
+    };
+
+    preConfigure = ''
+      # optional; RPi.GPIO is broken on vanilla kernels
+      sed /RPi.GPIO/d -i requirements.txt
+    '';
+
+    meta = with lib; {
+      description = "OctoPrint plugin to control ATX/AUX power supply";
+      homepage = "https://github.com/kantlivelong/OctoPrint-PSUControl";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ gebner ];
+    };
+  };
+
+  simpleemergencystop = buildPlugin rec {
+    pname = "SimpleEmergencyStop";
+    version = "1.0.3";
+
+    src = fetchFromGitHub {
+      owner = "Sebclem";
+      repo = "OctoPrint-${pname}";
+      rev = version;
+      sha256 = "0hhh5grmn32abkix1b9fr1d0pcpdi2r066iypcxdxcza9qzwjiyi";
+    };
+
+    meta = with lib; {
+      description = "A simple plugin that add an emergency stop buton on NavBar of OctoPrint";
+      homepage = "https://github.com/Sebclem/OctoPrint-SimpleEmergencyStop";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ WhittlesJr ];
+    };
+  };
+
+  stlviewer = buildPlugin rec {
+    pname = "STLViewer";
+    version = "0.4.2";
+
+    src = fetchFromGitHub {
+      owner = "jneilliii";
+      repo = "OctoPrint-STLViewer";
+      rev = version;
+      sha256 = "0mkvh44fn2ch4z2avsdjwi1rp353ylmk9j5fln4x7rx8ph8y7g2b";
+    };
+
+    meta = with lib; {
+      description = "A simple stl viewer tab for OctoPrint";
+      homepage = "https://github.com/jneilliii/Octoprint-STLViewer";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ abbradar ];
+    };
+  };
+
+  themeify = buildPlugin rec {
+    pname = "Themeify";
+    version = "1.2.2";
+
+    src = fetchFromGitHub {
+      owner = "Birkbjo";
+      repo = "Octoprint-${pname}";
+      rev = "v${version}";
+      sha256 = "0j1qs6kyh947npdy7pqda25fjkqinpas3sy0qyscqlxi558lhvx2";
+    };
+
+    meta = with lib; {
+      description = "Beautiful themes for OctoPrint";
+      homepage = "https://github.com/birkbjo/OctoPrint-Themeify";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ lovesegfault ];
+    };
+  };
+
+  titlestatus = buildPlugin rec {
+    pname = "TitleStatus";
+    version = "0.0.5";
+
+    src = fetchFromGitHub {
+      owner = "MoonshineSG";
+      repo = "OctoPrint-TitleStatus";
+      rev = version;
+      sha256 = "10nxjrixg0i6n6x8ghc1ndshm25c97bvkcis5j9kmlkkzs36i2c6";
+    };
+
+    meta = with lib; {
+      description = "Show printers status in window title";
+      homepage = "https://github.com/MoonshineSG/OctoPrint-TitleStatus";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ abbradar ];
+    };
+  };
+
+  touchui = buildPlugin rec {
+    pname = "TouchUI";
+    version = "0.3.16";
+
+    src = fetchFromGitHub {
+      owner = "BillyBlaze";
+      repo = "OctoPrint-${pname}";
+      rev = version;
+      sha256 = "1jlqjirc4ygl4k7jp93l2h6b18jap3mzz8sf2g61j9w0kgv9l365";
+    };
+
+    meta = with lib; {
+      description = "Touch friendly interface for a small TFT module or phone for OctoPrint";
+      homepage = "https://github.com/BillyBlaze/OctoPrint-TouchUI";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ gebner ];
+    };
+  };
+
+  octoklipper = buildPlugin rec {
+    pname = "OctoKlipper";
+    version = "0.3.2";
+
+    src = fetchFromGitHub {
+      owner = "AliceGrey";
+      repo = "OctoprintKlipperPlugin";
+      rev = version;
+      sha256 = "15yg2blbgqp2gdpsqqm8qiiznq5qaq8wss07jimkl0865vrvlz7l";
+    };
+
+    meta = with lib; {
+      description = "A plugin for a better integration of Klipper into OctoPrint";
+      homepage = "https://github.com/AliceGrey/OctoprintKlipperPlugin";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ lovesegfault ];
+    };
+  };
+
+  octoprint-dashboard = buildPlugin rec {
+    pname = "OctoPrint-Dashboard";
+    version = "1.15.2";
+
+    src = fetchFromGitHub {
+      owner = "StefanCohen";
+      repo = pname;
+      rev = version;
+      sha256 = "0p94jwd7kagh3sixhcrqmsgbay4aaf9l1pgyi2b45jym8pvld5n4";
+    };
+
+    meta = with lib; {
+      description = "A dashboard for Octoprint";
+      homepage = "https://github.com/StefanCohen/OctoPrint-Dashboard";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ j0hax ];
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/octoprint/printtimegenius-logging.patch b/nixpkgs/pkgs/applications/misc/octoprint/printtimegenius-logging.patch
new file mode 100644
index 000000000000..66c2e83d62ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/octoprint/printtimegenius-logging.patch
@@ -0,0 +1,17 @@
+diff --git a/setup.py b/setup.py
+index 6a6610e..cc45902 100644
+--- a/setup.py
++++ b/setup.py
+@@ -35,9 +35,9 @@ plugin_license = "AGPLv3"
+ # Any additional requirements besides OctoPrint should be listed here
+ # For now, require the working release, which is only 1.3.9rc1.
+ plugin_requires = ["OctoPrint>=1.3.9rc1", "psutil", "sarge"]
+-from sys import version_info
+-if version_info[0] < 3:
+-    plugin_requires.append("logging")
++#from sys import version_info
++#if version_info[0] < 3:
++#    plugin_requires.append("logging")
+ 
+ ### --------------------------------------------------------------------------------------------------------------------
+ ### More advanced options that you usually shouldn't have to touch follow after this point
diff --git a/nixpkgs/pkgs/applications/misc/ola/default.nix b/nixpkgs/pkgs/applications/misc/ola/default.nix
new file mode 100644
index 000000000000..224b5921baa8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ola/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, bison
+, flex
+, pkg-config
+, libuuid
+, cppunit
+, protobuf
+, zlib
+, avahi
+, libmicrohttpd
+, perl
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ola";
+  version = "unstable-2020-07-17";
+
+  src = fetchFromGitHub {
+    owner = "OpenLightingProject";
+    repo = "ola";
+    rev = "e2cd699c7792570500578fd092fb6bfb3d511023"; # HEAD of "0.10" branch
+    sha256 = "17a3z3zhx00rjk58icd3zlqfw3753f3y8bwy2sza0frdim09lqr4";
+  };
+
+  nativeBuildInputs = [ autoreconfHook bison flex pkg-config perl ];
+  buildInputs = [ libuuid cppunit protobuf zlib avahi libmicrohttpd python3 ];
+  propagatedBuildInputs = [
+    python3.pkgs.protobuf
+    python3.pkgs.numpy
+  ];
+
+  configureFlags = [ "--enable-python-libs" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A framework for controlling entertainment lighting equipment";
+    homepage = "https://www.openlighting.org/ola/";
+    maintainers = with maintainers; [ globin ];
+    license = with licenses; [ lgpl21 gpl2Plus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/olifant/default.nix b/nixpkgs/pkgs/applications/misc/olifant/default.nix
new file mode 100644
index 000000000000..fbaf140a9f78
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/olifant/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, fetchpatch
+, vala
+, meson
+, ninja
+, pkg-config
+, python3
+, libgee
+, gsettings-desktop-schemas
+, gnome3
+, pantheon
+, wrapGAppsHook
+, gtk3
+, json-glib
+, glib
+, glib-networking
+}:
+
+stdenv.mkDerivation rec {
+  pname = "olifant";
+  version = "0.2.1-beta6";
+
+  src = fetchFromGitHub {
+    owner = "cleac";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-3hnEa4Q1dH0R8Jp+Ew0+dH1PEm3F+56jYwqhJ+vll4M=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    glib-networking
+    gnome3.libsoup
+    gsettings-desktop-schemas
+    gtk3
+    json-glib
+    libgee
+    pantheon.granite
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "A simple Mastodon client designed for elementary OS, originally developed by @bleakgrey";
+    homepage = "https://github.com/cleac/olifant";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ worldofpeace ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/omegat.nix b/nixpkgs/pkgs/applications/misc/omegat.nix
new file mode 100644
index 000000000000..7b91d245f810
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/omegat.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, unzip, jdk, makeWrapper}:
+
+stdenv.mkDerivation {
+  version = "4.3.0";
+  pname = "omegat";
+
+  src = fetchurl {  # their zip has repeated files or something, so no fetchzip
+    url = "mirror://sourceforge/project/omegat/OmegaT%20-%20Standard/OmegaT%204.3.0/OmegaT_4.3.0_Without_JRE.zip";
+    sha256 = "0axz7r30p34z5hgvdglznc82g7yvm3g56dv5190jixskx6ba58rs";
+  };
+
+  buildInputs = [ unzip makeWrapper ];
+
+  unpackCmd = "unzip -o $curSrc";  # tries to go interactive without -o
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r lib docs images plugins scripts *.txt *.html OmegaT.jar $out/
+
+    cat > $out/bin/omegat <<EOF
+    #! $SHELL -e
+    CLASSPATH="$out/lib"
+    exec ${jdk}/bin/java -jar -Xmx1024M $out/OmegaT.jar "\$@"
+    EOF
+    chmod +x $out/bin/omegat
+  '';
+
+  meta = with lib; {
+    description = "The free computer aided translation (CAT) tool for professionals";
+    longDescription = ''
+      OmegaT is a free and open source multiplatform Computer Assisted Translation
+      tool with fuzzy matching, translation memory, keyword search, glossaries, and
+      translation leveraging into updated projects.
+    '';
+    homepage = "http://www.omegat.org/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ t184256 ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/onboard/default.nix b/nixpkgs/pkgs/applications/misc/onboard/default.nix
new file mode 100644
index 000000000000..42433936aba4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/onboard/default.nix
@@ -0,0 +1,181 @@
+{ fetchurl
+, lib, stdenv
+, substituteAll
+, aspellWithDicts
+, at-spi2-core ? null
+, atspiSupport ? true
+, bash
+, glib
+, glibcLocales
+, dconf
+, gobject-introspection
+, gsettings-desktop-schemas
+, gtk3
+, hunspell
+, hunspellDicts
+, hunspellWithDicts
+, intltool
+, isocodes
+, libcanberra-gtk3
+, mousetweaks
+, udev
+, libxkbcommon
+, pkg-config
+, procps
+, python3
+, wrapGAppsHook
+, xorg
+, yelp
+}:
+
+let
+
+  customHunspell = hunspellWithDicts [
+    hunspellDicts.en-us
+  ];
+
+  majorVersion = "1.4";
+
+in
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "onboard";
+  version = "${majorVersion}.1";
+
+  src = fetchurl {
+    url = "https://launchpad.net/onboard/${majorVersion}/${version}/+download/${pname}-${version}.tar.gz";
+    sha256 = "0r9q38ikmr4in4dwqd8m9gh9xjbgxnfxglnjbfcapw8ybfnf3jh1";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit mousetweaks;
+    })
+    # Allow loading hunspell dictionaries installed in NixOS system path
+    ./hunspell-use-xdg-datadirs.patch
+  ];
+
+  nativeBuildInputs = [
+    gobject-introspection
+    intltool
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    bash
+    glib
+    dconf
+    gsettings-desktop-schemas
+    gtk3
+    hunspell
+    isocodes
+    libcanberra-gtk3
+    libxkbcommon
+    mousetweaks
+    udev
+    xorg.libXtst
+    xorg.libxkbfile
+  ] ++ lib.optional atspiSupport at-spi2-core;
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dbus-python
+    distutils_extra
+    pyatspi
+    pycairo
+    pygobject3
+    systemd
+  ];
+
+  propagatedUserEnvPkgs = [
+    dconf
+  ];
+
+  checkInputs = [
+    # for Onboard.SpellChecker.aspell_cmd doctests
+    (aspellWithDicts (dicts: with dicts; [ en ]))
+
+    # for Onboard.SpellChecker.hunspell_cmd doctests
+    customHunspell
+
+    # for Onboard.SpellChecker.hunspell doctests
+    hunspellDicts.en-us
+    hunspellDicts.es-es
+    hunspellDicts.it-it
+
+    python3.pkgs.nose
+  ];
+
+  # Temporary fix, see https://github.com/NixOS/nixpkgs/issues/56943
+  strictDeps = false;
+
+  doCheck = false;
+
+  preBuild = ''
+    # Unnecessary file, has been removed upstream
+    # https://github.com/NixOS/nixpkgs/pull/24986#issuecomment-296114062
+    rm -r Onboard/pypredict/attic
+
+    substituteInPlace  ./scripts/sokSettings.py \
+      --replace "#!/usr/bin/python3" "" \
+      --replace "PYTHON_EXECUTABLE," "\"$out/bin/onboard-settings\"" \
+      --replace '"-cfrom Onboard.settings import Settings\ns = Settings(False)"' ""
+
+    chmod -x ./scripts/sokSettings.py
+
+    patchShebangs .
+
+    substituteInPlace setup.py \
+      --replace "/etc" "$out/etc"
+
+    substituteInPlace  ./Onboard/LanguageSupport.py \
+      --replace "/usr/share/xml/iso-codes" "${isocodes}/share/xml/iso-codes" \
+      --replace "/usr/bin/yelp" "${yelp}/bin/yelp"
+
+    substituteInPlace  ./Onboard/Indicator.py \
+      --replace   "/usr/bin/yelp" "${yelp}/bin/yelp"
+
+    substituteInPlace  ./gnome/Onboard_Indicator@onboard.org/extension.js \
+      --replace "/usr/bin/yelp" "${yelp}/bin/yelp"
+
+    substituteInPlace  ./Onboard/SpellChecker.py \
+      --replace "/usr/lib" "$out/lib"
+
+    substituteInPlace  ./data/org.onboard.Onboard.service  \
+      --replace "/usr/bin" "$out/bin"
+
+    substituteInPlace  ./Onboard/utils.py \
+      --replace "/usr/share" "$out/share"
+    substituteInPlace  ./onboard-defaults.conf.example \
+      --replace "/usr/share" "$out/share"
+    substituteInPlace  ./Onboard/Config.py \
+      --replace "/usr/share/onboard" "$out/share/onboard"
+
+    substituteInPlace  ./Onboard/WordSuggestions.py \
+      --replace "/usr/bin" "$out/bin"
+
+    # killall is dangerous on non-gnu platforms. Use pkill instead.
+    substituteInPlace  ./setup.py \
+      --replace '"killall",' '"${procps}/bin/pkill", "-x",'
+  '';
+
+  installPhase = ''
+    ${python3.interpreter} setup.py install --prefix="$out"
+
+    cp onboard-default-settings.gschema.override.example $out/share/glib-2.0/schemas/10_onboard-default-settings.gschema.override
+    glib-compile-schemas $out/share/glib-2.0/schemas/
+  '';
+
+  # Remove ubuntu icons.
+  postFixup = ''
+    rm -rf  $out/share/icons/ubuntu-mono-*
+  '';
+
+  meta = with lib; {
+    homepage = "https://launchpad.net/onboard";
+    description = "Onscreen keyboard useful for tablet PC users and for mobility impaired users";
+    maintainers = with maintainers; [ johnramsden ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/onboard/fix-paths.patch b/nixpkgs/pkgs/applications/misc/onboard/fix-paths.patch
new file mode 100644
index 000000000000..64acc9b138c4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/onboard/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/Onboard/ClickSimulator.py
++++ b/Onboard/ClickSimulator.py
+@@ -479,7 +479,7 @@ class CSMousetweaks(ConfigObject, ClickSimulator):
+         self._daemon_running_notify_callbacks = []
+
+     def _launch_daemon(self, delay):
+-        self.launcher.launch_delayed(["mousetweaks"], delay)
++        self.launcher.launch_delayed(["@mousetweaks@/bin/mousetweaks"], delay)
+
+     def _set_connection(self, active):
+         ''' Update interface object, state and notify listeners '''
diff --git a/nixpkgs/pkgs/applications/misc/onboard/hunspell-use-xdg-datadirs.patch b/nixpkgs/pkgs/applications/misc/onboard/hunspell-use-xdg-datadirs.patch
new file mode 100644
index 000000000000..2463c8d5f5ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/onboard/hunspell-use-xdg-datadirs.patch
@@ -0,0 +1,20 @@
+diff --git a/Onboard/SpellChecker.py b/Onboard/SpellChecker.py
+index 6a92757..46e755e 100644
+--- a/Onboard/SpellChecker.py
++++ b/Onboard/SpellChecker.py
+@@ -506,6 +506,10 @@ class hunspell(SCBackend):
+         if dicpath:
+             paths.extend(dicpath.split(pathsep))
+ 
++        datadirs = os.getenv("XDG_DATA_DIRS")
++        if datadirs:
++            paths.extend(map(lambda datadir: os.path.join(datadir, 'hunspell'), datadirs.split(pathsep)))
++
+         paths.extend(LIBDIRS)
+ 
+         home = os.getenv("HOME")
+@@ -723,4 +727,3 @@ class aspell_cmd(SCBackend):
+             _logger.error(_format("Failed to execute '{}', {}", \
+                             " ".join(args), e))
+         return [id for id in dict_ids if id]
+-
diff --git a/nixpkgs/pkgs/applications/misc/oneko/default.nix b/nixpkgs/pkgs/applications/misc/oneko/default.nix
new file mode 100644
index 000000000000..48b29f4b561d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/oneko/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, imake, gccmakedep, xlibsWrapper }:
+
+stdenv.mkDerivation rec {
+  version_name = "1.2.sakura.5";
+  version = "1.2.5";
+  pname = "oneko";
+  src = fetchurl {
+    url = "http://www.daidouji.com/oneko/distfiles/oneko-${version_name}.tar.gz";
+    sha256 = "2c2e05f1241e9b76f54475b5577cd4fb6670de058218d04a741a04ebd4a2b22f";
+  };
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ xlibsWrapper ];
+
+  makeFlags = [ "BINDIR=$(out)/bin" "MANPATH=$(out)/share/man" ];
+  installTargets = [ "install" "install.man" ];
+
+  meta = with lib; {
+    description = "Creates a cute cat chasing around your mouse cursor";
+    longDescription = ''
+    Oneko changes your mouse cursor into a mouse
+    and creates a little cute cat, which starts
+    chasing around your mouse cursor.
+    When the cat is done catching the mouse, it starts sleeping.
+    '';
+    homepage = "http://www.daidouji.com/oneko/";
+    license = licenses.publicDomain;
+    maintainers = [ maintainers.xaverdh ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openambit/default.nix b/nixpkgs/pkgs/applications/misc/openambit/default.nix
new file mode 100644
index 000000000000..5ef6d4ae84d4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openambit/default.nix
@@ -0,0 +1,48 @@
+{ cmake
+, fetchFromGitHub
+, lib
+, libusb1
+, mkDerivation
+, python3
+, qtbase
+, qttools
+, udev
+, zlib
+}:
+
+mkDerivation rec {
+  pname = "openambit";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "openambitproject";
+    repo = pname;
+    rev = version;
+    sha256 = "1074kvkamwnlkwdajsw1799wddcfkjh2ay6l842r0s4cvrxrai85";
+  };
+
+  nativeBuildInputs = [ cmake qttools ];
+  buildInputs = [ libusb1 python3 qtbase udev zlib ];
+
+  cmakeFlags = [ "-DCMAKE_INSTALL_UDEVRULESDIR=${placeholder "out"}/lib/udev/rules.d" ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/openambit --version
+  '';
+
+  postInstall = ''
+    install -m755 -D $src/tools/openambit2gpx.py $out/bin/openambit2gpx
+
+    mv -v $out/lib/udev/rules.d/libambit.rules \
+          $out/lib/udev/rules.d/20-libambit.rules
+  '';
+
+  meta = with lib; {
+    description = "Helps fetch data from Suunto Ambit GPS watches";
+    homepage = "https://github.com/openambitproject/openambit/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ rycee ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openbox-menu/default.nix b/nixpkgs/pkgs/applications/misc/openbox-menu/default.nix
new file mode 100644
index 000000000000..9d2695f97fff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openbox-menu/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, gtk2, menu-cache }:
+
+stdenv.mkDerivation rec {
+  pname = "openbox-menu";
+  version = "0.8.0";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/fabriceT/openbox-menu/downloads/${pname}-${version}.tar.bz2";
+    sha256 = "1hi4b6mq97y6ajq4hhsikbkk23aha7ikaahm92djw48mgj2f1w8l";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib gtk2 menu-cache ];
+
+  patches = [ ./with-svg.patch ];
+
+  installPhase = "make install prefix=$out";
+
+  meta = {
+    homepage = "http://fabrice.thiroux.free.fr/openbox-menu_en.html";
+    description = "Dynamic XDG menu generator for Openbox";
+    longDescription = ''
+      Openbox-menu is a pipemenu for Openbox window manager. It provides a
+      dynamic menu listing installed applications. Most of the work is done by
+      the LXDE library menu-cache.
+    '';
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.romildo ];
+    platforms   = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openbox-menu/with-svg.patch b/nixpkgs/pkgs/applications/misc/openbox-menu/with-svg.patch
new file mode 100644
index 000000000000..dd6710f5cfc9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openbox-menu/with-svg.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.old	2013-12-11 06:39:44.397358610 +0100
++++ b/Makefile	2013-12-11 06:39:51.082275037 +0100
+@@ -7,7 +7,7 @@
+ CFLAGS+=-DWITH_ICONS
+ # Uncomment this line if Openbox can display SVG icons 
+ # Check SVG support with '$ ldd /usr/bin/openbox | grep svg', librsvg must appear..
+-# CFLAGS+=-DWITH_SVG
++CFLAGS+=-DWITH_SVG
+ 
+ prefix= /usr/local
+ DESTDIR ?= $(prefix)
diff --git a/nixpkgs/pkgs/applications/misc/openbrf/default.nix b/nixpkgs/pkgs/applications/misc/openbrf/default.nix
new file mode 100644
index 000000000000..e815fd7a39f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openbrf/default.nix
@@ -0,0 +1,47 @@
+{ mkDerivation, lib, stdenv, fetchFromGitHub, qtbase, vcg, glew, qmake, libGLU, libGL }:
+
+
+mkDerivation {
+  name = "openbrf-unstable-2016-01-09";
+
+  src = fetchFromGitHub {
+    owner = "cfcohen";
+    repo = "openbrf";
+    rev = "4bdc66e38def5e5184f5379c84a7558b7484c70a";
+    sha256 = "16254cnr60ihcn7bki7wl1qm6gkvzb99cn66md1pnb7za8nvzf4j";
+  };
+
+  buildInputs = [ qtbase vcg glew ];
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ qmake ];
+
+  qmakeFlags = [ "openBrf.pro" ];
+
+  postPatch = ''
+    sed -i 's,^VCGLIB .*,VCGLIB = ${vcg}/include,' openBrf.pro
+  '';
+
+  installPhase = ''
+    install -Dm755 openBrf $out/share/openBrf/openBrf
+    install -Dm644 carry_positions.txt $out/share/openBrf/carry_positions.txt
+    install -Dm644 reference.brf $out/share/openBrf/reference.brf
+
+    patchelf  \
+      --set-rpath "${lib.makeLibraryPath [ qtbase glew stdenv.cc.cc libGLU libGL ]}" \
+      $out/share/openBrf/openBrf
+
+    mkdir -p "$out/bin"
+    ln -s "$out/share/openBrf/openBrf" "$out/bin/openBrf"
+  '';
+
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "A tool to edit resource files (BRF)";
+    homepage = "https://github.com/cfcohen/openbrf";
+    maintainers = with lib.maintainers; [ abbradar ];
+    license = licenses.free;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/opencpn/default.nix b/nixpkgs/pkgs/applications/misc/opencpn/default.nix
new file mode 100644
index 000000000000..522c5739a882
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/opencpn/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, cmake, gtk2, wxGTK30, libpulseaudio, curl,
+  gettext, glib, portaudio }:
+
+stdenv.mkDerivation rec {
+  pname = "opencpn-unstable";
+  version = "2019-11-21";
+
+  src = fetchFromGitHub {
+    owner = "OpenCPN";
+    repo = "OpenCPN";
+    rev = "e73dc935545b2bbcf193cc61d987a0178c52d7a7";
+    sha256 = "0yiqahkzwcbzgabc5xgxmwlngapkfiaqyva3mwz29xj0c5lg2bdk";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ gtk2 wxGTK30 libpulseaudio curl gettext
+                  glib portaudio ];
+
+  cmakeFlags = [
+    "-DGTK2_GDKCONFIG_INCLUDE_DIR=${gtk2.out}/lib/gtk-2.0/include"
+    "-DGTK2_GLIBCONFIG_INCLUDE_DIR=${glib.out}/lib/glib-2.0/include"
+  ];
+
+  meta = {
+    description = "A concise ChartPlotter/Navigator";
+    maintainers = [ lib.maintainers.kragniz ];
+    platforms = [ "x86_64-linux" ];
+    license = lib.licenses.gpl2;
+    homepage = "https://opencpn.org/";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openjump/default.nix b/nixpkgs/pkgs/applications/misc/openjump/default.nix
new file mode 100644
index 000000000000..28becefa5b12
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openjump/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper
+, coreutils, gawk, which, gnugrep, findutils
+, jdk
+}:
+
+stdenv.mkDerivation {
+  pname = "openjump";
+  version = "1.15";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/jump-pilot/OpenJUMP/1.15/OpenJUMP-Portable-1.15-r6241-CORE.zip";
+    sha256 = "12snzkv83w6khcdqzp6xahqapwp82af6c7j2q8n0lj62hk79rfgl";
+  };
+
+  # TODO: build from source
+  unpackPhase = ''
+    mkdir -p $out/bin;
+    cd $out; unzip $src
+  '';
+
+  buildInputs = [unzip makeWrapper];
+
+  installPhase = ''
+    dir=$(echo $out/OpenJUMP-*)
+
+    chmod +x $dir/bin/oj_linux.sh
+    makeWrapper $dir/bin/oj_linux.sh $out/bin/OpenJump \
+      --set JAVA_HOME ${jdk.home} \
+      --set PATH "${coreutils}/bin:${gawk}/bin:${which}/bin:${gnugrep}/bin:${findutils}/bin"
+  '';
+
+  meta = {
+    description = "Open source Geographic Information System (GIS) written in the Java programming language";
+    homepage = "http://www.openjump.org/index.html";
+    license = lib.licenses.gpl2;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openrgb/default.nix b/nixpkgs/pkgs/applications/misc/openrgb/default.nix
new file mode 100644
index 000000000000..df9e149d9a7c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openrgb/default.nix
@@ -0,0 +1,39 @@
+{ lib, mkDerivation, fetchFromGitLab, qmake, libusb1, hidapi, pkg-config }:
+
+mkDerivation rec {
+  pname = "openrgb";
+  version = "0.5";
+
+  src = fetchFromGitLab {
+    owner = "CalcProgrammer1";
+    repo = "OpenRGB";
+    rev = "release_${version}";
+    sha256 = "001x2ycfmlb9s21sp91aw5gxizcn6kzm8x7bvkps4b1iq0ap5fzv";
+  };
+
+  nativeBuildInputs = [ qmake pkg-config ];
+  buildInputs = [ libusb1 hidapi ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp openrgb $out/bin
+
+    mkdir -p $out/etc/udev/rules.d
+    cp 60-openrgb.rules $out/etc/udev/rules.d
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    HOME=$TMPDIR $out/bin/openrgb --help > /dev/null
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Open source RGB lighting control";
+    homepage = "https://gitlab.com/CalcProgrammer1/OpenRGB";
+    maintainers = with maintainers; [ jonringer ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/opentx/default.nix b/nixpkgs/pkgs/applications/misc/opentx/default.nix
new file mode 100644
index 000000000000..bb8f8d4013f1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/opentx/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub
+, cmake, gcc-arm-embedded, python3Packages
+, qtbase, qtmultimedia, qttranslations, SDL, gtest
+, dfu-util, avrdude
+}:
+
+mkDerivation rec {
+  pname = "opentx";
+  version = "2.3.11";
+
+  src = fetchFromGitHub {
+    owner = "opentx";
+    repo = "opentx";
+    rev = "release/${version}";
+    sha256 = "sha256-0B41TkTs4sNGYzpMGbsgCLT2ThkP6foeuwLUIzKKGkU=";
+  };
+
+  nativeBuildInputs = [ cmake gcc-arm-embedded python3Packages.pillow ];
+
+  buildInputs = [ qtbase qtmultimedia qttranslations SDL ];
+
+  postPatch = ''
+    sed -i companion/src/burnconfigdialog.cpp \
+      -e 's|/usr/.*bin/dfu-util|${dfu-util}/bin/dfu-util|' \
+      -e 's|/usr/.*bin/avrdude|${avrdude}/bin/avrdude|'
+  '';
+
+  cmakeFlags = [
+    "-DGTEST_ROOT=${gtest.src}/googletest"
+    "-DQT_TRANSLATIONS_DIR=${qttranslations}/translations"
+    # XXX I would prefer to include these here, though we will need to file a bug upstream to get that changed.
+    #"-DDFU_UTIL_PATH=${dfu-util}/bin/dfu-util"
+    #"-DAVRDUDE_PATH=${avrdude}/bin/avrdude"
+  ];
+
+  meta = with lib; {
+    description = "OpenTX Companion transmitter support software";
+    longDescription = ''
+      OpenTX Companion is used for many different tasks like loading OpenTX
+      firmware to the radio, backing up model settings, editing settings and
+      running radio simulators.
+    '';
+    homepage = "https://www.open-tx.org/";
+    license = licenses.gpl2;
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ elitak lopsided98 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/orca/default.nix b/nixpkgs/pkgs/applications/misc/orca/default.nix
new file mode 100644
index 000000000000..25cca1536f8d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/orca/default.nix
@@ -0,0 +1,117 @@
+{ lib, stdenv
+, pkg-config
+, fetchurl
+, buildPythonApplication
+, autoreconfHook
+, wrapGAppsHook
+, gobject-introspection
+, gettext
+, yelp-tools
+, itstool
+, libxmlxx3
+, python
+, pygobject3
+, gtk3
+, gnome3
+, substituteAll
+, at-spi2-atk
+, at-spi2-core
+, pyatspi
+, dbus
+, dbus-python
+, pyxdg
+, xkbcomp
+, procps
+, lsof
+, coreutils
+, gsettings-desktop-schemas
+, speechd
+, brltty
+, liblouis
+, setproctitle
+, gst_all_1
+, gst-python
+}:
+
+buildPythonApplication rec {
+  pname = "orca";
+  version = "3.38.2";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "UAX/LhHdH3E/WswZA6JwEZvFjDD9uMn4K8rHFJfGwjw=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      cat = "${coreutils}/bin/cat";
+      lsof = "${lsof}/bin/lsof";
+      pgrep = "${procps}/bin/pgrep";
+      xkbcomp = "${xkbcomp}/bin/xkbcomp";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    wrapGAppsHook
+    pkg-config
+    libxmlxx3
+    gettext
+    yelp-tools
+    itstool
+    gobject-introspection
+  ];
+
+  propagatedBuildInputs = [
+    pygobject3
+    pyatspi
+    dbus-python
+    pyxdg
+    brltty
+    liblouis
+    speechd
+    gst-python
+    setproctitle
+  ];
+
+  strictDeps = false;
+
+  buildInputs = [
+    python
+    gtk3
+    at-spi2-atk
+    at-spi2-core
+    dbus
+    gsettings-desktop-schemas
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+  ];
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Projects/Orca";
+    description = "Screen reader";
+    longDescription = ''
+      A free, open source, flexible and extensible screen reader that provides
+      access to the graphical desktop via speech and refreshable braille.
+      It works with applications and toolkits that support the Assistive
+      Technology Service Provider Interface (AT-SPI). That includes the GNOME
+      GTK toolkit, the Java platform's Swing toolkit, LibreOffice, Gecko, and
+      WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.
+
+      Needs `services.gnome3.at-spi2-core.enable = true;` in `configuration.nix`.
+    '';
+    maintainers = with maintainers; [ berce ] ++ teams.gnome.members;
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/orca/fix-paths.patch b/nixpkgs/pkgs/applications/misc/orca/fix-paths.patch
new file mode 100644
index 000000000000..ffb56dbe239c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/orca/fix-paths.patch
@@ -0,0 +1,78 @@
+--- a/src/orca/debug.py
++++ b/src/orca/debug.py
+@@ -474,7 +474,7 @@
+     return traceit
+ 
+ def getOpenFDCount(pid):
+-    procs = subprocess.check_output([ 'lsof', '-w', '-Ff', '-p', str(pid)])
++    procs = subprocess.check_output([ '@lsof@', '-w', '-Ff', '-p', str(pid)])
+     procs = procs.decode('UTF-8').split('\n')
+     files = list(filter(lambda s: s and s[0] == 'f' and s[1:].isdigit(), procs))
+ 
+@@ -482,7 +482,7 @@
+ 
+ def getCmdline(pid):
+     try:
+-        openFile = os.popen('cat /proc/%s/cmdline' % pid)
++        openFile = os.popen('@cat@ /proc/%s/cmdline' % pid)
+         cmdline = openFile.read()
+         openFile.close()
+     except:
+@@ -492,7 +492,7 @@
+     return cmdline
+ 
+ def pidOf(procName):
+-    openFile = subprocess.Popen('pgrep %s' % procName,
++    openFile = subprocess.Popen('@pgrep@ %s' % procName,
+                                 shell=True,
+                                 stdout=subprocess.PIPE).stdout
+     pids = openFile.read()
+--- a/src/orca/orca.py
++++ b/src/orca/orca.py
+@@ -239,7 +239,7 @@
+ 
+ def _setXmodmap(xkbmap):
+     """Set the keyboard map using xkbcomp."""
+-    p = subprocess.Popen(['xkbcomp', '-w0', '-', os.environ['DISPLAY']],
++    p = subprocess.Popen(['@xkbcomp@', '-w0', '-', os.environ['DISPLAY']],
+         stdin=subprocess.PIPE, stdout=None, stderr=None)
+     p.communicate(xkbmap)
+ 
+@@ -297,7 +297,7 @@
+     """
+ 
+     global _originalXmodmap
+-    _originalXmodmap = subprocess.check_output(['xkbcomp', os.environ['DISPLAY'], '-'])
++    _originalXmodmap = subprocess.check_output(['@xkbcomp@', os.environ['DISPLAY'], '-'])
+ 
+ def _restoreXmodmap(keyList=[]):
+     """Restore the original xmodmap values for the keys in keyList.
+@@ -309,7 +309,7 @@
+ 
+     global _capsLockCleared
+     _capsLockCleared = False
+-    p = subprocess.Popen(['xkbcomp', '-w0', '-', os.environ['DISPLAY']],
++    p = subprocess.Popen(['@xkbcomp@', '-w0', '-', os.environ['DISPLAY']],
+         stdin=subprocess.PIPE, stdout=None, stderr=None)
+     p.communicate(_originalXmodmap)
+ 
+--- a/src/orca/orca_bin.py.in
++++ b/src/orca/orca_bin.py.in
+@@ -59,7 +59,7 @@
+                 name = "[DEAD]"
+ 
+             try:
+-                cmdline = subprocess.getoutput('cat /proc/%s/cmdline' % pid)
++                cmdline = subprocess.getoutput('@cat@ /proc/%s/cmdline' % pid)
+             except:
+                 cmdline = '(exception encountered)'
+             else:
+@@ -192,7 +192,7 @@
+ def otherOrcas():
+     """Returns the pid of any other instances of Orca owned by this user."""
+ 
+-    openFile = subprocess.Popen('pgrep -u %s orca' % os.getuid(),
++    openFile = subprocess.Popen('@pgrep@ -u %s orca' % os.getuid(),
+                                 shell=True,
+                                 stdout=subprocess.PIPE).stdout
+     pids = openFile.read()
diff --git a/nixpkgs/pkgs/applications/misc/orpie/default.nix b/nixpkgs/pkgs/applications/misc/orpie/default.nix
new file mode 100644
index 000000000000..2bf102fee257
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/orpie/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, ocamlPackages }:
+
+ocamlPackages.buildDunePackage rec {
+  pname = "orpie";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "pelzlpj";
+    repo = pname;
+    rev = "release-${version}";
+    sha256 = "1rx2nl6cdv609pfymnbq53pi3ql5fr4kda8x10ycd9xq2gc4f21g";
+  };
+
+  preConfigure = ''
+    patchShebangs scripts
+    substituteInPlace scripts/compute_prefix \
+      --replace '"topfind"' \
+      '"${ocamlPackages.findlib}/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib/topfind"'
+    export PREFIX=$out
+  '';
+
+  buildInputs = with ocamlPackages; [ curses camlp5 num gsl ];
+
+  meta = {
+    inherit (src.meta) homepage;
+    description = "A Curses-based RPN calculator";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/osm2xmap/default.nix b/nixpkgs/pkgs/applications/misc/osm2xmap/default.nix
new file mode 100644
index 000000000000..4f2af99ab14d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/osm2xmap/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libroxml, proj, libyamlcpp, boost } :
+
+stdenv.mkDerivation rec {
+  pname = "osm2xmap";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    sha256 = "1d3f18wzk240yp0q8i2vskhcfj5ar61s4hw83vgps0wr2aglph3w";
+    repo = "osm2xmap";
+    owner = "sembruk";
+    rev = "v${version}";
+  };
+
+  makeFlags = [
+    "GIT_VERSION=${version}"
+    "GIT_TIMESTAMP="
+    "SHAREDIR=${placeholder "out"}/share/osm2xmap"
+    "INSTALL_BINDIR=${placeholder "out"}/bin"
+    "INSTALL_MANDIR=${placeholder "out"}/share/man/man1"
+  ];
+
+  NIX_CFLAGS_COMPILE = "-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H";
+
+  buildInputs = [ libroxml proj libyamlcpp boost ];
+
+  meta = with lib; {
+    homepage = "https://github.com/sembruk/osm2xmap";
+    description = "Converter from OpenStreetMap data format to OpenOrienteering Mapper format";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.mpickering ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/osmctools/default.nix b/nixpkgs/pkgs/applications/misc/osmctools/default.nix
new file mode 100644
index 000000000000..fc46ffb7ffac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/osmctools/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "osmctools";
+  version = "0.9";
+
+  src = fetchFromGitLab {
+    owner = "osm-c-tools";
+    repo = pname;
+    rev = version;
+    sha256 = "1m8d3r1q1v05pkr8k9czrmb4xjszw6hvgsf3kn9pf0v14gpn4r8f";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zlib ];
+
+  meta = with lib; {
+    description = "Command line tools for transforming Open Street Map files";
+    homepage = [
+      "https://wiki.openstreetmap.org/wiki/osmconvert"
+      "https://wiki.openstreetmap.org/wiki/osmfilter"
+      "https://wiki.openstreetmap.org/wiki/osmupdate"
+    ];
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/osmium-tool/default.nix b/nixpkgs/pkgs/applications/misc/osmium-tool/default.nix
new file mode 100644
index 000000000000..2397f3b8806b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/osmium-tool/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, installShellFiles
+, pandoc
+, boost
+, bzip2
+, expat
+, libosmium
+, lz4
+, protozero
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "osmium-tool";
+  version = "1.13.0";
+
+  src = fetchFromGitHub {
+    owner = "osmcode";
+    repo = "osmium-tool";
+    rev = "v${version}";
+    sha256 = "0rn67g4xf01i7pkxrdh87jdj2rzkw5pfkx5wkg9245z5yxjxhqj2";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    installShellFiles
+    pandoc
+  ];
+
+  buildInputs = [
+    boost
+    bzip2
+    expat
+    libosmium
+    lz4
+    protozero
+    zlib
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    installShellCompletion --zsh ../zsh_completion/_osmium
+  '';
+
+  meta = with lib; {
+    description = "Multipurpose command line tool for working with OpenStreetMap data based on the Osmium library";
+    homepage = "https://osmcode.org/osmium-tool/";
+    license = with licenses; [ gpl3Plus mit bsd3 ];
+    maintainers = with maintainers; [ das-g ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/overmind/default.nix b/nixpkgs/pkgs/applications/misc/overmind/default.nix
new file mode 100644
index 000000000000..537ae3741ef1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/overmind/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoPackage, fetchFromGitHub, tmux, which, makeWrapper }:
+
+buildGoPackage rec {
+  pname = "overmind";
+  version = "2.2.0";
+  goPackagePath = "github.com/DarthSim/overmind";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/overmind" --prefix PATH : "${lib.makeBinPath [ tmux which ]}"
+  '';
+
+  src = fetchFromGitHub {
+    owner = "DarthSim";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "00v6l4138vv32bqfkzrhk4hfl52a00rlg9ywhp4difgrnz7zj6xb";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    homepage = "https://github.com/DarthSim/overmind";
+    description = "Process manager for Procfile-based applications and tmux";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.adisbladis ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/overmind/deps.nix b/nixpkgs/pkgs/applications/misc/overmind/deps.nix
new file mode 100644
index 000000000000..b4c9211a24a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/overmind/deps.nix
@@ -0,0 +1,129 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "v0.3.1";
+      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
+    };
+  }
+  {
+    goPackagePath = "github.com/DarthSim/godotenv";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DarthSim/godotenv";
+      rev = "v1.3.1";
+      sha256 = "0fb9nl5qrnv7f9w0pgg00ak34afw9kjgcql0l38z22faz2bhgl1q";
+    };
+  }
+  {
+    goPackagePath = "github.com/cpuguy83/go-md2man";
+    fetch = {
+      type = "git";
+      url = "https://github.com/cpuguy83/go-md2man";
+      rev = "f79a8a8ca69d";
+      sha256 = "0r1f7v475dxxgzqci1mxfliwadcrk86ippflx9n411325l4g3ghv";
+    };
+  }
+  {
+    goPackagePath = "github.com/kardianos/osext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kardianos/osext";
+      rev = "2bc1f35cddc0";
+      sha256 = "1pvrbrvmrf4mx0fxbfaphbzgqgwn8v6lkfk2vyrs0znxrs1xyc5r";
+    };
+  }
+  {
+    goPackagePath = "github.com/matoous/go-nanoid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matoous/go-nanoid";
+      rev = "eab626deece6";
+      sha256 = "1a82lclk56y7c44jg7wn5vq733dmn0g20r5yqbchrxnpfl75dw89";
+    };
+  }
+  {
+    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/russross/blackfriday";
+    fetch = {
+      type = "git";
+      url = "https://github.com/russross/blackfriday";
+      rev = "v2.0.1";
+      sha256 = "0nlz7isdd4rgnwzs68499hlwicxz34j2k2a0b8jy0y7ycd2bcr5j";
+    };
+  }
+  {
+    goPackagePath = "github.com/sevlyar/go-daemon";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sevlyar/go-daemon";
+      rev = "v0.1.5";
+      sha256 = "1y3gnxaifykcjcbzx91lz9bc93b95w3xj4rjxjbii26pm3j7gqyk";
+    };
+  }
+  {
+    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/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "v1.22.2";
+      sha256 = "10mcnvi5qmn00vpyk6si8gjka7p654wr9hac4zc9w5h3ickhvbdc";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "88737f569e3a";
+      sha256 = "02vkqfd6kc28zm6lffagw8nr78sayv6jabfgk9dcifl7826vi3k7";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "81d4e9dc473e";
+      sha256 = "0074zjpkhclz5qbgjv0zmdwy6hmf5k2ri5yagnm6i12ahxaa48dr";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/check.v1";
+      rev = "20d25e280405";
+      sha256 = "0k1m83ji9l1a7ng8a7v40psbymxasmssbrrhpdv2wl4rhs0nc3np";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "v2.2.2";
+      sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/misc/pass-secret-service/default.nix b/nixpkgs/pkgs/applications/misc/pass-secret-service/default.nix
new file mode 100644
index 000000000000..f2386a5cd83b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pass-secret-service/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitHub, python3, dbus, gnupg }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pass-secret-service";
+  # PyPI has old alpha version. Since then the project has switched from using a
+  # seemingly abandoned D-Bus package pydbus and started using maintained
+  # dbus-next. So let's use latest from GitHub.
+  version = "unstable-2020-04-12";
+
+  src = fetchFromGitHub {
+    owner = "mdellweg";
+    repo = "pass_secret_service";
+    rev = "f6fbca6ac3ccd16bfec407d845ed9257adf74dfa";
+    sha256 = "0rm4pbx1fiwds1v7f99khhh7x3inv9yniclwd95mrbgljk3cc6a4";
+  };
+
+
+  # Need to specify session.conf file for tests because it won't be found under
+  # /etc/ in check phase.
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace \
+        "dbus-run-session" \
+        "dbus-run-session --config-file=${dbus}/share/dbus-1/session.conf"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    cryptography
+    dbus-next
+    decorator
+    pypass
+    secretstorage
+  ];
+
+  checkInputs =
+    let
+      ps = python3.pkgs;
+    in
+    [
+      dbus
+      gnupg
+      ps.pytest
+      ps.pytest-asyncio
+      ps.pypass
+    ];
+
+  checkPhase = ''
+    runHook preCheck
+    make test
+    runHook postCheck
+  '';
+
+  meta = {
+    description = "Libsecret D-Bus API with pass as the backend";
+    homepage = "https://github.com/mdellweg/pass_secret_service/";
+    license = lib.licenses.gpl3Only;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ jluttine ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pastel/default.nix b/nixpkgs/pkgs/applications/misc/pastel/default.nix
new file mode 100644
index 000000000000..39a4c6a6a03c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pastel/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pastel";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "00xxrssa3gbr5w2jsqlf632jlzc0lc2rpybnbv618ndy5lxidnw0";
+  };
+
+  cargoSha256 = "1ji64h0f8f2sq12cx33kymypzar9swhaj903gclf3jdwgna77326";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "A command-line tool to generate, analyze, convert and manipulate colors";
+    homepage = "https://github.com/sharkdp/pastel";
+    changelog = "https://github.com/sharkdp/pastel/releases/tag/v${version}";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ davidtwco ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pbpst/default.nix b/nixpkgs/pkgs/applications/misc/pbpst/default.nix
new file mode 100644
index 000000000000..68b1908e5150
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pbpst/default.nix
@@ -0,0 +1,50 @@
+{ llvmPackages, lib, stdenv, fetchFromGitHub
+, python36Packages, which, pkg-config, curl, git, gettext, jansson
+
+# Optional overrides
+, maxFileSize ? 64 # in MB
+, provider ? "https://ptpb.pw/"
+}:
+
+llvmPackages.stdenv.mkDerivation rec {
+  version = "unstable-2018-01-11";
+  name = "pbpst-${version}";
+
+  src = fetchFromGitHub {
+    owner = "HalosGhost";
+    repo = "pbpst";
+    rev = "ecbe08a0b72a6e4212f09fc6cf52a73506992346";
+    sha256 = "0dwhmw1dg4hg75nlvk5kmvv3slz2n3b9x65q4ig16agwqfsp4mdm";
+  };
+
+  nativeBuildInputs = [
+    python36Packages.sphinx
+    which
+    pkg-config
+    curl
+    git
+    gettext
+  ];
+  buildInputs = [ curl jansson ];
+
+  patchPhase = ''
+    patchShebangs ./configure
+
+    # Remove hardcoded check for libs in /usr/lib/
+    sed -e '64,67d' -i ./configure
+  '';
+
+  configureFlags = [
+    "--file-max=${toString (maxFileSize * 1024 * 1024)}" # convert to bytes
+    "--provider=${provider}"
+  ];
+
+  meta = with lib; {
+    description = "A command-line libcurl C client for pb deployments";
+    inherit (src.meta) homepage;
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ tmplt ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pcmanfm/default.nix b/nixpkgs/pkgs/applications/misc/pcmanfm/default.nix
new file mode 100644
index 000000000000..da1c79865a77
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pcmanfm/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, glib, intltool, libfm, libX11, pango, pkg-config
+, wrapGAppsHook, gnome3, withGtk3 ? true, gtk2, gtk3 }:
+
+let
+  libfm' = libfm.override { inherit withGtk3; };
+  gtk = if withGtk3 then gtk3 else gtk2;
+  inherit (lib) optional;
+in
+stdenv.mkDerivation rec {
+  name = "pcmanfm-1.3.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/pcmanfm/${name}.tar.xz";
+    sha256 = "0mb8hg76x1z0szdyl0w7jpz0bdblc6a29is1vvnh79z37qxh8138";
+  };
+
+  buildInputs = [ glib gtk libfm' libX11 pango gnome3.adwaita-icon-theme ];
+  nativeBuildInputs = [ pkg-config wrapGAppsHook intltool ];
+
+  configureFlags = optional withGtk3 "--with-gtk=3";
+
+  meta = with lib; {
+    homepage = "https://blog.lxde.org/category/pcmanfm/";
+    license = licenses.gpl2Plus;
+    description = "File manager with GTK interface";
+    maintainers = [ maintainers.ttuegel ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pcmanx-gtk2/default.nix b/nixpkgs/pkgs/applications/misc/pcmanx-gtk2/default.nix
new file mode 100644
index 000000000000..484b9d3b4073
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pcmanx-gtk2/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, gtk2, libXft, intltool, automake, autoconf, libtool, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "pcmanx-gtk2";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "pcman-bbs";
+    repo = "pcmanx";
+    rev = version;
+    sha256 = "0fbwd149wny67rfhczz4cbh713a1qnswjiz7b6c2bxfcwh51f9rc";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 libXft intltool automake autoconf libtool ];
+
+  preConfigure = ''
+    ./autogen.sh
+    # libtoolize generates configure script which uses older version of automake, we need to autoreconf it
+    cd libltdl; autoreconf; cd ..
+  '';
+
+  meta = with lib; {
+    homepage = "https://pcman.ptt.cc";
+    license = licenses.gpl2;
+    description = "Telnet BBS browser with GTK interface";
+    maintainers = [ maintainers.sifmelcara ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdf-quench/default.nix b/nixpkgs/pkgs/applications/misc/pdf-quench/default.nix
new file mode 100644
index 000000000000..907cceeb58b7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdf-quench/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, pkgs, python3, wrapGAppsHook}:
+
+python3.pkgs.buildPythonApplication {
+  pname = "pdf-quench";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "linuxerwang";
+    repo = "pdf-quench";
+    rev = "b72b3970b371026f9a7ebe6003581e8a63af98f6";
+    sha256 = "1rp9rlwr6rarcsxygv5x2c5psgwl6r69k0lsgribgyyla9cf2m7n";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+  buildInputs = with pkgs; [
+    gtk3
+    gobject-introspection
+    goocanvas2
+    poppler_gi
+  ];
+  propagatedBuildInputs = with python3.pkgs; [ pygobject3 pypdf2 ];
+
+  format = "other";
+  doCheck = false;
+
+  installPhase = ''
+    install -D -T -m 755 src/pdf_quench.py $out/bin/pdf-quench
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/linuxerwang/pdf-quench";
+    description = "A visual tool for cropping pdf files";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfarranger/default.nix b/nixpkgs/pkgs/applications/misc/pdfarranger/default.nix
new file mode 100644
index 000000000000..8c8413b2ce60
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfarranger/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, fetchFromGitHub, lib
+, wrapGAppsHook, intltool
+, python3Packages, gtk3, poppler_gi
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pdfarranger";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "wJ6ImWpszfgErfLh7YgHirVKFIt0ij8A/CdYJmkNBP0=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook intltool
+  ] ++ (with python3Packages; [
+    setuptools distutils_extra
+  ]);
+
+  buildInputs = [
+    gtk3 poppler_gi
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    pikepdf
+    img2pdf
+    setuptools
+  ];
+
+  # incompatible with wrapGAppsHook
+  strictDeps = false;
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  doCheck = false; # no tests
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Merge or split pdf documents and rotate, crop and rearrange their pages using an interactive and intuitive graphical interface";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ symphorien ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfdiff/default.nix b/nixpkgs/pkgs/applications/misc/pdfdiff/default.nix
new file mode 100644
index 000000000000..31719cdfef2b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfdiff/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, pythonPackages, fetchurl, xpdf }:
+let
+  py = pythonPackages;
+in
+py.buildPythonApplication rec {
+  name = "pdfdiff-${version}";
+  version = "0.92";
+
+  src = fetchurl {
+    url = "https://www.cs.ox.ac.uk/people/cas.cremers/downloads/software/pdfdiff.py";
+    sha256 = "0zxwjjbklz87wkbhkmsvhc7xmv5php7m2a9vm6ydhmhlxsybf836";
+  };
+
+  buildInputs = [  pythonPackages.wrapPython ];
+
+  doCheck = false;
+
+  phases = [ "unpackPhase" "patchPhase" "installPhase" ];
+
+  unpackPhase = "cp $src pdfdiff.py";
+
+  postPatch = ''
+    sed -i -r 's|pdftotextProgram = "pdftotext"|pdftotextProgram = "${xpdf}/bin/pdftotext"|' pdfdiff.py
+    sed -i -r 's|progName = "pdfdiff.py"|progName = "pdfdiff"|' pdfdiff.py
+    '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp pdfdiff.py $out/bin/pdfdiff
+    chmod +x $out/bin/pdfdiff
+
+    substituteInPlace $out/bin/pdfdiff --replace "#!/usr/bin/python" "#!${pythonPackages.python.interpreter}"
+    '';
+
+  meta = with lib; {
+    homepage = "http://www.cs.ox.ac.uk/people/cas.cremers/misc/pdfdiff.html";
+    description = "Tool to view the difference between two PDF or PS files";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfmod/default.nix b/nixpkgs/pkgs/applications/misc/pdfmod/default.nix
new file mode 100644
index 000000000000..da9340f30759
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfmod/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, fetchurl, fetchpatch, pkg-config, gnome-doc-utils, intltool, lib
+, mono, gtk-sharp-2_0, gnome-sharp, hyena
+, which, makeWrapper, glib, gnome2, poppler, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pdfmod";
+  version = "0.9.1";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.bz2";
+    sha256 = "eb7c987514a053106ddf03f26544766c751c801d87762909b36415d46bc425c9";
+  };
+
+  patches = [ (fetchpatch {
+    url = "https://raw.githubusercontent.com/City-busz/Arch-Linux-Repository"
+      + "/master/gnome/pdfmod/pdfmod/pdfmod-mono-2.10.patch";
+    sha256 = "0fpz9ifr6476lqhd5rkb94dm68vlrwdq5w1aaxzgyjgdax9hxx81";
+  }) ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    gnome-doc-utils intltool mono gtk-sharp-2_0 gnome-sharp
+    hyena which makeWrapper wrapGAppsHook
+  ];
+
+  preConfigure = ''
+    substituteInPlace lib/poppler-sharp/poppler-sharp/poppler-sharp.dll.config \
+      --replace libpoppler-glib.so.4 libpoppler-glib.so
+  '';
+
+  postInstall = ''
+    makeWrapper "${mono}/bin/mono" "$out/bin/pdfmod" \
+      --add-flags "$out/lib/pdfmod/PdfMod.exe" \
+      --prefix MONO_GAC_PREFIX : ${gtk-sharp-2_0} \
+      --prefix MONO_GAC_PREFIX : ${gnome-sharp} \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ glib gnome-sharp gnome2.GConf gtk-sharp-2_0 gtk-sharp-2_0.gtk poppler ]}
+  '';
+
+  dontStrip = true;
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Attic/PdfMod";
+    description = "A simple application for modifying PDF documents";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ obadz ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfpc/default.nix b/nixpkgs/pkgs/applications/misc/pdfpc/default.nix
new file mode 100644
index 000000000000..6430b894b7b5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfpc/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, vala, gtk3, libgee, fetchpatch
+, poppler, libpthreadstubs, gstreamer, gst-plugins-base, gst-plugins-good, gst-libav, librsvg, pcre, gobject-introspection, wrapGAppsHook
+, webkitgtk, discount, json-glib }:
+
+stdenv.mkDerivation rec {
+  name = "${product}-${version}";
+  product = "pdfpc";
+  version = "4.5.0";
+
+  src = fetchFromGitHub {
+    repo = product;
+    owner = product;
+    rev = "v${version}";
+    sha256 = "0bmy51w6ypz927hxwp5g7wapqvzqmsi3w32rch6i3f94kg1152ck";
+  };
+
+  nativeBuildInputs = [
+    cmake pkg-config vala
+    # For setup hook
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3 libgee poppler
+    libpthreadstubs librsvg pcre
+    gstreamer
+    gst-plugins-base
+    (gst-plugins-good.override { gtkSupport = true; })
+    gst-libav
+    webkitgtk
+    discount
+    json-glib
+  ];
+
+  cmakeFlags = lib.optional stdenv.isDarwin "-DMOVIES=OFF";
+
+  meta = with lib; {
+    description = "A presenter console with multi-monitor support for PDF files";
+    homepage = "https://pdfpc.github.io/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfsam-basic/default.nix b/nixpkgs/pkgs/applications/misc/pdfsam-basic/default.nix
new file mode 100644
index 000000000000..2aeb3ba7f99f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfsam-basic/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, makeDesktopItem, fetchurl, jdk11, wrapGAppsHook, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "pdfsam-basic";
+  version = "4.2.1";
+
+  src = fetchurl {
+    url = "https://github.com/torakiki/pdfsam/releases/download/v${version}/pdfsam_${version}-1_amd64.deb";
+    sha256 = "0d7pvl87ybkvcxk69fr35fz0w447hy2pm65bhvlril16ljm2izja";
+  };
+
+  unpackPhase = ''
+    ar vx ${src}
+    tar xvf data.tar.gz
+  '';
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+  buildInputs = [ glib ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(--set JAVA_HOME "${jdk11}" --set PDFSAM_JAVA_PATH "${jdk11}")
+  '';
+
+  installPhase = ''
+    cp -R opt/pdfsam-basic/ $out/
+    mkdir -p "$out"/share/icons
+    cp --recursive ${desktopItem}/share/applications $out/share
+    cp $out/icon.svg "$out"/share/icons/pdfsam-basic.svg
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = pname;
+    icon = pname;
+    comment = meta.description;
+    desktopName = "PDFsam Basic";
+    genericName = "PDF Split and Merge";
+    mimeType = "application/pdf;";
+    categories = "Office;";
+  };
+
+  meta = with lib; {
+      homepage = "https://github.com/torakiki/pdfsam";
+      description = "Multi-platform software designed to extract pages, split, merge, mix and rotate PDF files";
+      license = licenses.agpl3;
+      platforms = platforms.all;
+      maintainers = with maintainers; [ _1000101 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/peaclock/default.nix b/nixpkgs/pkgs/applications/misc/peaclock/default.nix
new file mode 100644
index 000000000000..619b6ed9b375
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/peaclock/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libpthreadstubs, icu }:
+
+stdenv.mkDerivation rec {
+  pname = "peaclock";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "octobanana";
+    repo = pname;
+    rev = version;
+    sha256 = "1582vgslhpgbvcd7ipgf1d1razrvgpq1f93q069yr2bbk6xn8i16";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libpthreadstubs icu ];
+
+  meta = with lib; {
+    description = "A clock, timer, and stopwatch for the terminal";
+    homepage = "https://octobanana.com/software/peaclock";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ djanatyn ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pell/default.nix b/nixpkgs/pkgs/applications/misc/pell/default.nix
new file mode 100644
index 000000000000..0b21de1e91e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pell/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, scsh, sox, libnotify }:
+
+stdenv.mkDerivation rec {
+  pname = "pell";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "ebzzry";
+    repo = pname;
+    rev = "f251625ece6bb5517227970287119e7d2dfcea8b";
+    sha256 = "0k8m1lv2kyrs8fylxmbgxg3jn65g57frf2bndc82gkr5svwb554a";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share
+    cp pell $out/bin
+    cp resources/online.mp3 $out/share
+    cp resources/offline.mp3 $out/share
+    chmod +x $out/bin/pell
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/pell --replace "/usr/bin/env scsh" "${scsh}/bin/scsh"
+    substituteInPlace $out/bin/pell --replace "(play " "(${sox}/bin/play "
+    substituteInPlace $out/bin/pell --replace "(notify-send " "(${libnotify}/bin/notify-send "
+    substituteInPlace $out/bin/pell --replace "/usr/share/pell/online.mp3" "$out/share/online.mp3"
+    substituteInPlace $out/bin/pell --replace "/usr/share/pell/offline.mp3" "$out/share/offline.mp3"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ebzzry/pell";
+    description = "A simple host availability monitor";
+    license = licenses.mit;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+  };
+
+  dontBuild = true;
+}
diff --git a/nixpkgs/pkgs/applications/misc/perkeep/default.nix b/nixpkgs/pkgs/applications/misc/perkeep/default.nix
new file mode 100644
index 000000000000..5a1e5ba65ded
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/perkeep/default.nix
@@ -0,0 +1,51 @@
+{ buildGoPackage, fetchurl, fetchFromGitHub, lib }:
+
+let
+  gouiJS = fetchurl {
+    url = "https://storage.googleapis.com/perkeep-release/gopherjs/goui.js";
+    sha256 = "0xbkdpd900gnmzj8p0x38dn4sv170pdvgzcvzsq70s80p6ykkh6g";
+  };
+
+  publisherJS = fetchurl {
+    url = "https://storage.googleapis.com/perkeep-release/gopherjs/publisher.js";
+    sha256 = "09hd7p0xscqnh612jbrjvh3njmlm4292zd5sbqx2lg0aw688q8p2";
+  };
+
+in buildGoPackage rec {
+  name = "perkeep-${version}";
+  version = "unstable-2020-03-23";
+
+  src = fetchFromGitHub {
+    owner = "perkeep";
+    repo = "perkeep";
+    rev = "c2e31370ddefd86b6112a5d891100ea3382a4254";
+    sha256 = "0jf02k20ms7h60wglcq6dj3vqi9rlfww7db5iplgwznbij70c1i4";
+  };
+
+  goPackagePath = "perkeep.org";
+
+  buildPhase = ''
+    cd "$NIX_BUILD_TOP/go/src/$goPackagePath"
+
+    # Skip network fetches
+    sed -i '/fetchAllJS/a if true { return nil }' make.go
+    cp ${publisherJS} app/publisher/publisher.js
+    cp ${gouiJS} server/perkeepd/ui/goui.js
+
+    go run make.go
+  '';
+
+  # devcam is only useful when developing perkeep, we should not install it as
+  # part of this derivation.
+  postInstall = ''
+    rm -f $out/bin/devcam
+  '';
+
+  meta = with lib; {
+    description = "A way of storing, syncing, sharing, modelling and backing up content (née Camlistore)";
+    homepage = "https://perkeep.org";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ cstrahan kalbasit ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pgadmin/default.nix b/nixpkgs/pkgs/applications/misc/pgadmin/default.nix
new file mode 100644
index 000000000000..f4981f6d3fb7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pgadmin/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, fetchpatch, postgresql, wxGTK, libxml2, libxslt, openssl, zlib, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+  pname = "pgadmin3";
+  version = "1.22.2";
+
+  src = fetchurl {
+    url = "https://ftp.postgresql.org/pub/pgadmin/pgadmin3/v${version}/src/pgadmin3-${version}.tar.gz";
+    sha256 = "1b24b356h8z188nci30xrb57l7kxjqjnh6dq9ws638phsgiv0s4v";
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ postgresql wxGTK openssl zlib ];
+
+  patches = [
+    (fetchpatch {
+      sha256 = "09hp7s3zjz80rpx2j3xyznwswwfxzi70z7c05dzrdk74mqjjpkfk";
+      name = "843344.patch";
+      url = "https://sources.debian.net/data/main/p/pgadmin3/1.22.2-1/debian/patches/843344";
+    })
+  ];
+
+  preConfigure = ''
+    substituteInPlace pgadmin/ver_svn.sh --replace "bin/bash" "$shell"
+  '';
+
+  configureFlags = [
+    "--with-pgsql=${postgresql}"
+    "--with-libxml2=${libxml2.dev}"
+    "--with-libxslt=${libxslt.dev}"
+  ];
+
+  meta = with lib; {
+    description = "PostgreSQL administration GUI tool";
+    homepage = "https://www.pgadmin.org";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ domenkozar wmertens ];
+    platforms = platforms.unix;
+  };
+
+  postFixup = let
+    desktopItem = makeDesktopItem {
+      name = "pgAdmin";
+      desktopName = "pgAdmin III";
+      genericName = "SQL Administration";
+      exec = "pgadmin3";
+      icon = "pgAdmin3";
+      type = "Application";
+      categories = "Development;";
+      mimeType = "text/html";
+    };
+  in ''
+    mkdir -p $out/share/pixmaps;
+    cp pgadmin/include/images/pgAdmin3.png $out/share/pixmaps/;
+    cp -rv ${desktopItem}/share/applications $out/share/
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/misc/pgmanage/default.nix b/nixpkgs/pkgs/applications/misc/pgmanage/default.nix
new file mode 100644
index 000000000000..b892ebb2a9e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pgmanage/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, postgresql, openssl } :
+
+stdenv.mkDerivation rec {
+  pname = "pgmanage";
+  version = "11.0.1";
+
+  src = fetchFromGitHub {
+    owner  = "pgManage";
+    repo   = "pgManage";
+    rev    = "v${version}";
+    sha256 = "1a1dbc32b3y0ph8ydf800h6pz7dg6g1gxgid4gffk7k58xj0c5yf";
+  };
+
+  patchPhase = ''
+    patchShebangs src/configure
+  '';
+
+  configurePhase = ''
+    ./configure --prefix $out
+  '';
+
+  buildInputs = [ postgresql openssl ];
+
+  meta = with lib; {
+    description = "A fast replacement for PGAdmin";
+    longDescription = ''
+      At the heart of pgManage is a modern, fast, event-based C-binary, built in
+      the style of NGINX and Node.js. This heart makes pgManage as fast as any
+      PostgreSQL interface can hope to be. (Note: pgManage replaces Postage,
+      which is no longer maintained.)
+    '';
+    homepage = "https://github.com/pgManage/pgManage";
+    license = licenses.postgresql;
+    maintainers = [ maintainers.basvandijk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pgmodeler/default.nix b/nixpkgs/pkgs/applications/misc/pgmodeler/default.nix
new file mode 100644
index 000000000000..67010e713c3c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pgmodeler/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, qmake
+, mkDerivation
+, qtsvg
+, libxml2
+, postgresql
+}:
+
+mkDerivation rec {
+  pname = "pgmodeler";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "pgmodeler";
+    repo = "pgmodeler";
+    rev = "v${version}";
+    sha256 = "1bci5x418dbnkny7hn0b5q5lxyajrgl3frv41ji0hcw9vivrds2g";
+  };
+
+  nativeBuildInputs = [ pkg-config qmake ];
+  qmakeFlags = [ "pgmodeler.pro" "CONFIG+=release" ];
+
+  # todo: libpq would suffice here. Unfortunately this won't work, if one uses only postgresql.lib here.
+  buildInputs = [ postgresql qtsvg ];
+
+  meta = with lib; {
+    description = "A database modeling tool for PostgreSQL";
+    homepage = "https://pgmodeler.io/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.esclear ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/phwmon/default.nix b/nixpkgs/pkgs/applications/misc/phwmon/default.nix
new file mode 100644
index 000000000000..717c5c3feb10
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/phwmon/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitLab, pythonPackages }:
+
+stdenv.mkDerivation {
+  pname = "phwmon";
+  version = "2017-04-10";
+
+  src = fetchFromGitLab {
+    owner = "o9000";
+    repo = "phwmon";
+    rev = "b162e53dccc4adf8f11f49408d05fd85d9c6c909";
+    sha256 = "1hqmsq66y8bqkpvszw84jyk8haxq3cjnz105hlkmp7786vfmkisq";
+  };
+
+  nativeBuildInputs = [ pythonPackages.wrapPython ];
+
+  buildInputs = [ pythonPackages.pygtk pythonPackages.psutil ];
+
+  pythonPath = [ pythonPackages.pygtk pythonPackages.psutil ];
+
+  patchPhase = ''
+    substituteInPlace install.sh --replace "/usr/local" "$out"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/applications
+    ./install.sh
+  '';
+
+  postFixup = ''
+    wrapPythonPrograms
+  '';
+
+  meta = {
+    homepage = "https://gitlab.com/o9000/phwmon";
+    description = "Hardware monitor (CPU, memory, network and disk I/O) for the system tray";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pinfo/default.nix b/nixpkgs/pkgs/applications/misc/pinfo/default.nix
new file mode 100644
index 000000000000..8668807e81cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pinfo/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, autoreconfHook, gettext, texinfo, ncurses, readline }:
+
+stdenv.mkDerivation {
+  name = "pinfo-0.6.10";
+
+  src = fetchurl {
+    # homepage needed you to login to download the tarball
+    url = "https://src.fedoraproject.org/repo/pkgs/pinfo/pinfo-0.6.10.tar.bz2"
+      + "/fe3d3da50371b1773dfe29bf870dbc5b/pinfo-0.6.10.tar.bz2";
+    sha256 = "0p8wyrpz9npjcbx6c973jspm4c3xz4zxx939nngbq49xqah8088j";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ gettext texinfo ncurses readline ];
+
+  configureFlags = [ "--with-curses=${ncurses.dev}" "--with-readline=${readline.dev}" ];
+
+  meta = with lib; {
+    description = "A viewer for info files";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/pipr/default.nix b/nixpkgs/pkgs/applications/misc/pipr/default.nix
new file mode 100644
index 000000000000..7332f2016894
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pipr/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, fetchFromGitHub
+, rustPlatform
+, bubblewrap
+, makeWrapper
+, lib
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pipr";
+  version = "0.0.15";
+
+  src = fetchFromGitHub {
+    owner = "ElKowar";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1pbj198nqi27kavz9bm31a3h7h70by6l00046x09yf9n8qjpp01w";
+  };
+
+  cargoSha256 = "1dcrafpf252dpjvimaibb93082nymb26wwbvr34zd6j7z285vach";
+
+  nativeBuildInputs = [ makeWrapper ];
+  postFixup = ''
+    wrapProgram "$out/bin/pipr" --prefix PATH : ${lib.makeBinPath [ bubblewrap ]}
+  '';
+
+  meta = with lib; {
+    description = "A commandline-tool to interactively write shell pipelines";
+    homepage = "https://github.com/ElKowar/pipr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ elkowar ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/plank/default.nix b/nixpkgs/pkgs/applications/misc/plank/default.nix
new file mode 100644
index 000000000000..b462e5f134b1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plank/default.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv
+, fetchurl
+, vala
+, atk
+, cairo
+, dconf
+, glib
+, gnome3
+, gtk3
+, libwnck3
+, libX11
+, libXfixes
+, libXi
+, pango
+, gettext
+, pkg-config
+, libxml2
+, bamf
+, gdk-pixbuf
+, libdbusmenu-gtk3
+, file
+, gnome-menus
+, libgee
+, wrapGAppsHook
+, autoreconfHook
+, pantheon
+}:
+
+stdenv.mkDerivation rec {
+  pname = "plank";
+  version = "0.11.89";
+
+  src = fetchurl {
+    url = "https://launchpad.net/${pname}/1.0/${version}/+download/${pname}-${version}.tar.xz";
+    sha256 = "17cxlmy7n13jp1v8i4abxyx9hylzb39andhz3mk41ggzmrpa8qm6";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    gnome3.gnome-common
+    libxml2 # xmllint
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    atk
+    bamf
+    cairo
+    gdk-pixbuf
+    glib
+    gnome-menus
+    dconf
+    gtk3
+    libX11
+    libXfixes
+    libXi
+    libdbusmenu-gtk3
+    libgee
+    libwnck3
+    pango
+  ];
+
+  # fix paths
+  makeFlags = [
+    "INTROSPECTION_GIRDIR=${placeholder "out"}/share/gir-1.0/"
+    "INTROSPECTION_TYPELIBDIR=${placeholder "out"}/lib/girepository-1.0"
+  ];
+
+  # Make plank's application launcher hidden in Pantheon
+  patches = [
+    ./hide-in-pantheon.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace ./configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+  '';
+
+  meta = with lib; {
+    description = "Elegant, simple, clean dock";
+    homepage = "https://launchpad.net/plank";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ davidak ] ++ pantheon.maintainers;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/plank/hide-in-pantheon.patch b/nixpkgs/pkgs/applications/misc/plank/hide-in-pantheon.patch
new file mode 100644
index 000000000000..ab8a4c723897
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plank/hide-in-pantheon.patch
@@ -0,0 +1,9 @@
+diff --git a/data/plank.desktop.in b/data/plank.desktop.in
+index 330c3a4..e1bdf5f 100644
+--- a/data/plank.desktop.in
++++ b/data/plank.desktop.in
+@@ -8,3 +8,4 @@ Exec=plank
+ Icon=plank
+ Terminal=false
+ NoDisplay=false
++NotShowIn=Pantheon;
diff --git a/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/cmake.patch b/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/cmake.patch
new file mode 100644
index 000000000000..b33a3e174bc4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/cmake.patch
@@ -0,0 +1,20 @@
+diff -Naur org.kde.plasma.volumewin7mixer/CMakeLists.txt org.kde.plasma.volumewin7mixer.patch/CMakeLists.txt
+--- org.kde.plasma.volumewin7mixer/CMakeLists.txt	1970-01-01 01:00:00.000000000 +0100
++++ org.kde.plasma.volumewin7mixer.patch/CMakeLists.txt	2016-04-19 11:23:35.137866949 +0200
+@@ -0,0 +1,15 @@
++# Set minimum CMake version (required for CMake 3.0 or later)
++cmake_minimum_required(VERSION 2.8.12)
++
++# Use Extra CMake Modules (ECM) for common functionality.
++# See http://api.kde.org/ecm/manual/ecm.7.html
++# and http://api.kde.org/ecm/manual/ecm-kde-modules.7.html
++find_package(ECM REQUIRED NO_MODULE)
++# Needed by find_package(KF5Plasma) below.
++set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_MODULE_PATH})
++
++# Locate plasma_install_package macro.
++find_package(KF5Plasma REQUIRED)
++
++# Add installatation target ("make install").
++plasma_install_package(package org.kde.plasma.volumewin7mixer)
+
diff --git a/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/default.nix b/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/default.nix
new file mode 100644
index 000000000000..57ec820a0902
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, cmake, extra-cmake-modules, plasma-framework, kwindowsystem, plasma-pa, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "plasma-applet-volumewin7mixer";
+  version = "25";
+
+  src = fetchFromGitHub {
+    owner = "Zren";
+    repo = "plasma-applet-volumewin7mixer";
+    rev = "v${version}";
+    sha256 = "1nvz0a06qb3pfk8dfh5n5vgf3psd6k0j3vms9pskr511qsxw0dfi";
+  };
+
+  patches = [ ./cmake.patch ];
+  postPatch = "rm build ";
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+  buildInputs = [ plasma-framework kwindowsystem plasma-pa ];
+
+  meta = with lib; {
+    description = "A fork of the default volume plasmoid with a Windows 7 theme (vertical sliders)";
+    homepage = "https://github.com/Zren/plasma-applet-volumewin7mixer";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mdevlamynck ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/plater/default.nix b/nixpkgs/pkgs/applications/misc/plater/default.nix
new file mode 100644
index 000000000000..9b034f9f904e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plater/default.nix
@@ -0,0 +1,47 @@
+{ mkDerivation
+, cmake
+, fetchFromGitHub
+, lib
+, libGLU
+, makeDesktopItem
+, qtbase
+, wrapQtAppsHook
+}:
+
+mkDerivation rec {
+  pname = "plater";
+  version = "2020-07-30";
+
+  src = fetchFromGitHub {
+    owner = "Rhoban";
+    repo = "Plater";
+    rev = "f8de6d038f95a9edebfcfe142c8e9783697d5b47";
+    sha256 = "0r20mbzd16zv1aiadjqdy7z6sp09rr6lgfxhvir4ll3cpakkynr4";
+  };
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+  buildInputs = [ libGLU qtbase ];
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = pname;
+    icon = pname;
+    desktopName = "Ideamaker";
+    genericName = meta.description;
+    categories = "Utility;Engineering;";
+  };
+
+  postInstall = ''
+    mkdir -p $out/share/pixmaps
+    ln -s ${desktopItem}/share/applications $out/share/
+    cp $src/gui/img/plater.png $out/share/pixmaps/${pname}.png
+  '';
+
+  meta = with lib; {
+    description = "3D-printer parts placer and plate generator";
+    homepage = "https://github.com/Rhoban/Plater";
+    maintainers = with maintainers; [ lovesegfault ];
+    platforms = platforms.linux;
+    license = licenses.cc-by-nc-30;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/playonlinux/default.nix b/nixpkgs/pkgs/applications/misc/playonlinux/default.nix
new file mode 100644
index 000000000000..d805aa0c0aa9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/playonlinux/default.nix
@@ -0,0 +1,113 @@
+{ lib, stdenv
+, makeWrapper
+, fetchurl
+, cabextract
+, gettext
+, glxinfo
+, gnupg
+, icoutils
+, imagemagick
+, netcat-gnu
+, p7zip
+, python2
+, unzip
+, wget
+, wine
+, xdg-user-dirs
+, xterm
+, pkgs
+, pkgsi686Linux
+, which
+, curl
+, jq
+, xorg
+, libGL
+}:
+
+let
+  version = "4.4";
+
+  binpath = lib.makeBinPath [
+    cabextract
+    python
+    gettext
+    glxinfo
+    gnupg
+    icoutils
+    imagemagick
+    netcat-gnu
+    p7zip
+    unzip
+    wget
+    wine
+    xdg-user-dirs
+    xterm
+    which
+    curl
+    jq
+  ];
+
+  ld32 =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "${stdenv.cc}/nix-support/dynamic-linker-m32"
+    else if stdenv.hostPlatform.system == "i686-linux" then "${stdenv.cc}/nix-support/dynamic-linker"
+    else throw "Unsupported platform for PlayOnLinux: ${stdenv.hostPlatform.system}";
+  ld64 = "${stdenv.cc}/nix-support/dynamic-linker";
+  libs = pkgs: lib.makeLibraryPath [ xorg.libX11 libGL ];
+
+  python = python2.withPackages(ps: with ps; [
+    wxPython
+    setuptools
+  ]);
+
+in stdenv.mkDerivation {
+  pname = "playonlinux";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://www.playonlinux.com/script_files/PlayOnLinux/${version}/PlayOnLinux_${version}.tar.gz";
+    sha256 = "0n40927c8cnjackfns68zwl7h4d7dvhf7cyqdkazzwwx4k2xxvma";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [
+    xorg.libX11
+    libGL
+    python
+  ];
+
+  postPatch = ''
+    patchShebangs python tests/python
+    sed -i "s/ %F//g" etc/PlayOnLinux.desktop
+  '';
+
+  installPhase = ''
+    install -d $out/share/playonlinux
+    cp -r . $out/share/playonlinux/
+
+    install -D -m644 etc/PlayOnLinux.desktop $out/share/applications/playonlinux.desktop
+
+    makeWrapper $out/share/playonlinux/playonlinux $out/bin/playonlinux \
+      --prefix PATH : ${binpath}
+
+    bunzip2 $out/share/playonlinux/bin/check_dd_x86.bz2
+    patchelf --set-interpreter $(cat ${ld32}) --set-rpath ${libs pkgsi686Linux} $out/share/playonlinux/bin/check_dd_x86
+    ${if stdenv.hostPlatform.system == "x86_64-linux" then ''
+      bunzip2 $out/share/playonlinux/bin/check_dd_amd64.bz2
+      patchelf --set-interpreter $(cat ${ld64}) --set-rpath ${libs pkgs} $out/share/playonlinux/bin/check_dd_amd64
+    '' else ''
+      rm $out/share/playonlinux/bin/check_dd_amd64.bz2
+    ''}
+    for f in $out/share/playonlinux/bin/*; do
+      bzip2 $f
+    done
+  '';
+
+  meta = with lib; {
+    description = "GUI for managing Windows programs under linux";
+    homepage = "https://www.playonlinux.com/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.a1russell ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/plover/default.nix b/nixpkgs/pkgs/applications/misc/plover/default.nix
new file mode 100644
index 000000000000..2a3368e351f7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plover/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, python27Packages, python36Packages, wmctrl,
+  qtbase, mkDerivationWith }:
+
+{
+  stable = with python27Packages; buildPythonPackage rec {
+    pname = "plover";
+    version = "3.1.1";
+
+    meta = with lib; {
+      description = "OpenSteno Plover stenography software";
+      maintainers = with maintainers; [ twey kovirobi ];
+      license     = licenses.gpl2;
+    };
+
+    src = fetchurl {
+      url    = "https://github.com/openstenoproject/plover/archive/v${version}.tar.gz";
+      sha256 = "1hdg5491phx6svrxxsxp8v6n4b25y7y4wxw7x3bxlbyhaskgj53r";
+    };
+
+    nativeBuildInputs     = [ setuptools_scm ];
+    buildInputs           = [ pytest mock ];
+    propagatedBuildInputs = [
+      six setuptools pyserial appdirs hidapi wxPython xlib wmctrl dbus-python
+    ];
+  };
+
+  dev = with python36Packages; mkDerivationWith buildPythonPackage rec {
+    pname = "plover";
+    version = "4.0.0.dev8";
+
+    meta = with lib; {
+      description = "OpenSteno Plover stenography software";
+      maintainers = with maintainers; [ twey kovirobi ];
+      license     = licenses.gpl2;
+    };
+
+    src = fetchurl {
+      url    = "https://github.com/openstenoproject/plover/archive/v${version}.tar.gz";
+      sha256 = "1wxkmik1zyw5gqig5r0cas5v6f5408fbnximzw610rdisqy09rxp";
+    };
+
+    # I'm not sure why we don't find PyQt5 here but there's a similar
+    # sed on many of the platforms Plover builds for
+    postPatch = "sed -i /PyQt5/d setup.cfg";
+
+    checkInputs           = [ pytest mock ];
+    propagatedBuildInputs = [ Babel pyqt5 xlib pyserial appdirs wcwidth setuptools ];
+
+    dontWrapQtApps = true;
+
+    preFixup = ''
+      makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/polar-bookshelf/default.nix b/nixpkgs/pkgs/applications/misc/polar-bookshelf/default.nix
new file mode 100644
index 000000000000..faa139a3da4e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/polar-bookshelf/default.nix
@@ -0,0 +1,90 @@
+{ stdenv, lib, makeWrapper, fetchurl
+, dpkg, wrapGAppsHook, autoPatchelfHook
+, gtk3, cairo, pango, atk, gdk-pixbuf, glib
+, at-spi2-atk, dbus, libX11, libxcb, libXi
+, libXcursor, libXdamage, libXrandr, libXcomposite
+, libXext, libXfixes, libXrender, libXtst, libXScrnSaver
+, nss, nspr, alsaLib, cups, fontconfig, expat
+, libudev0-shim, glibc, curl, openssl, libnghttp2, gsettings-desktop-schemas }:
+
+
+stdenv.mkDerivation rec {
+  pname = "polar-bookshelf";
+  version = "2.0.42";
+
+  # fetching a .deb because there's no easy way to package this Electron app
+  src = fetchurl {
+    url = "https://github.com/burtonator/polar-bookshelf/releases/download/v${version}/polar-desktop-app-${version}-amd64.deb";
+    hash = "sha256-JyO71wyE6b0iHAYs/6/WbG+OdUVUUPpJla+ZUzg0Gng=";
+  };
+
+  buildInputs = [
+    gsettings-desktop-schemas
+    glib
+    gtk3
+    cairo
+    pango
+    atk
+    gdk-pixbuf
+    at-spi2-atk
+    dbus
+    libX11
+    libxcb
+    libXi
+    libXcursor
+    libXdamage
+    libXrandr
+    libXcomposite
+    libXext
+    libXfixes
+    libXrender
+    libXtst
+    libXScrnSaver
+    nss
+    nspr
+    alsaLib
+    cups
+    fontconfig
+    expat
+  ];
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    autoPatchelfHook
+    makeWrapper
+    dpkg
+  ];
+
+  runtimeLibs = lib.makeLibraryPath [ libudev0-shim glibc curl openssl libnghttp2 ];
+
+  unpackPhase = "dpkg-deb -x $src .";
+
+  installPhase = ''
+    mkdir -p $out/share/polar-bookshelf
+    mkdir -p $out/bin
+    mkdir -p $out/lib
+
+    mv opt/Polar/* $out/share/polar-bookshelf
+    mv $out/share/polar-bookshelf/*.so $out/lib
+
+    mv usr/share/* $out/share/
+
+    ln -s $out/share/polar-bookshelf/polar-desktop-app $out/bin/polar-desktop-app
+
+    substituteInPlace $out/share/applications/polar-desktop-app.desktop \
+      --replace "/opt/Polar/polar-desktop-app" "$out/bin/polar-desktop-app"
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${runtimeLibs}" )
+  '';
+
+  meta = {
+    homepage = "https://getpolarized.io/";
+    description = "Personal knowledge repository for PDF and web content supporting incremental reading and document annotation";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.noneucat ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/polybar/default.nix b/nixpkgs/pkgs/applications/misc/polybar/default.nix
new file mode 100644
index 000000000000..c79da21ad63a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/polybar/default.nix
@@ -0,0 +1,84 @@
+{ cairo, cmake, fetchFromGitHub, libXdmcp, libpthreadstubs, libxcb, pcre, pkg-config
+, python3, lib, stdenv, xcbproto, xcbutil, xcbutilcursor, xcbutilimage
+, xcbutilrenderutil, xcbutilwm, xcbutilxrm, makeWrapper
+, removeReferencesTo
+
+# optional packages-- override the variables ending in 'Support' to enable or
+# disable modules
+, alsaSupport   ? true,  alsaLib       ? null
+, githubSupport ? false, curl          ? null
+, mpdSupport    ? false, mpd_clientlib ? null
+, pulseSupport  ? false, libpulseaudio ? null
+, iwSupport     ? false, wirelesstools ? null
+, nlSupport     ? true,  libnl         ? null
+, i3Support ? false, i3GapsSupport ? false, i3 ? null, i3-gaps ? null, jsoncpp ? null
+}:
+
+assert alsaSupport   -> alsaLib       != null;
+assert githubSupport -> curl          != null;
+assert mpdSupport    -> mpd_clientlib != null;
+assert pulseSupport  -> libpulseaudio != null;
+
+assert iwSupport     -> ! nlSupport && wirelesstools != null;
+assert nlSupport     -> ! iwSupport && libnl         != null;
+
+assert i3Support     -> ! i3GapsSupport && jsoncpp != null && i3      != null;
+assert i3GapsSupport -> ! i3Support     && jsoncpp != null && i3-gaps != null;
+
+stdenv.mkDerivation rec {
+    pname = "polybar";
+    version = "3.5.2";
+
+    src = fetchFromGitHub {
+      owner = pname;
+      repo = pname;
+      rev = version;
+      sha256 = "1ir8fdnzrba9fkkjfvax5szx5h49lavwgl9pabjzrpbvif328g3x";
+      fetchSubmodules = true;
+    };
+
+    meta = with lib; {
+      homepage = "https://polybar.github.io/";
+      description = "A fast and easy-to-use tool for creating status bars";
+      longDescription = ''
+        Polybar aims to help users build beautiful and highly customizable
+        status bars for their desktop environment, without the need of
+        having a black belt in shell scripting.
+      '';
+      license = licenses.mit;
+      maintainers = with maintainers; [ afldcr Br1ght0ne ];
+      platforms = platforms.linux;
+    };
+
+    buildInputs = [
+      cairo libXdmcp libpthreadstubs libxcb pcre python3 xcbproto xcbutil
+      xcbutilcursor xcbutilimage xcbutilrenderutil xcbutilwm xcbutilxrm
+
+      (if alsaSupport   then alsaLib       else null)
+      (if githubSupport then curl          else null)
+      (if mpdSupport    then mpd_clientlib else null)
+      (if pulseSupport  then libpulseaudio else null)
+
+      (if iwSupport     then wirelesstools else null)
+      (if nlSupport     then libnl         else null)
+
+      (if i3Support || i3GapsSupport then jsoncpp else null)
+      (if i3Support then i3 else null)
+      (if i3GapsSupport then i3-gaps else null)
+
+      (if i3Support || i3GapsSupport then makeWrapper else null)
+    ];
+
+    postInstall = if (i3Support || i3GapsSupport) then ''
+      wrapProgram $out/bin/polybar \
+        --prefix PATH : "${if i3Support then i3 else i3-gaps}/bin"
+    '' else "";
+
+    nativeBuildInputs = [
+      cmake pkg-config removeReferencesTo
+    ];
+
+    postFixup = ''
+        remove-references-to -t ${stdenv.cc} $out/bin/polybar
+    '';
+}
diff --git a/nixpkgs/pkgs/applications/misc/posterazor/default.nix b/nixpkgs/pkgs/applications/misc/posterazor/default.nix
new file mode 100644
index 000000000000..602ac3e5e3b4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/posterazor/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, cmake, unzip, pkg-config, libXpm, fltk13, freeimage }:
+
+stdenv.mkDerivation {
+  name = "posterazor-1.5.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/posterazor/1.5.1/PosteRazor-1.5.1-Source.zip";
+    sha256 = "1dqpdk8zl0smdg4fganp3hxb943q40619qmxjlga9jhjc01s7fq5";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ cmake pkg-config unzip ];
+  buildInputs = [ libXpm fltk13 freeimage ];
+
+  unpackPhase = ''
+    unzip $src -d posterazor
+    cd posterazor/src
+  '';
+
+  # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=667328
+  patchPhase = ''
+    sed "s/\(#define CASESENSITIVESTRCMP strcasecmp\)/#include <unistd.h>\n\1/" -i FlPosteRazorDialog.cpp
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp PosteRazor $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "http://posterazor.sourceforge.net/";
+    description = "Cuts a raster image into pieces which can afterwards be printed out and assembled to a poster";
+    maintainers = [ maintainers.madjar ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/prevo/data.nix b/nixpkgs/pkgs/applications/misc/prevo/data.nix
new file mode 100644
index 000000000000..efd19d7745ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/prevo/data.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, prevo-tools }:
+
+stdenv.mkDerivation rec {
+  pname = "prevo-data";
+  version = "2020-03-08";
+
+  src = fetchFromGitHub {
+    owner = "bpeel";
+    repo = "revo";
+    rev = "1e8d7197c0bc831e2127909e77e64dfc26906bdd";
+    sha256 = "1ldhzpi3d5cbssv8r7acsn7qwxcl8qpqi8ywpsp7cbgx3w7hhkyz";
+  };
+
+  nativeBuildInputs = [ prevo-tools ];
+
+  dontUnpack = true;
+
+  buildPhase = ''
+    prevodb -s -i $src -o prevo.db
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/prevo
+    cp prevo.db $out/share/prevo/
+  '';
+
+  meta = with lib; {
+    description =
+      "data for offline version of the Esperanto dictionary Reta Vortaro";
+    longDescription = ''
+      PReVo is the "portable" ReVo, i.e., the offline version
+      of the Esperanto dictionary Reta Vortaro.
+
+      This package provides the ReVo database for the prevo command line application.
+    '';
+    homepage = "https://github.com/bpeel/revo";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.das-g ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/prevo/default.nix b/nixpkgs/pkgs/applications/misc/prevo/default.nix
new file mode 100644
index 000000000000..92d788695035
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/prevo/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, symlinkJoin, prevo-tools, prevo-data, makeWrapper }:
+
+symlinkJoin rec {
+  name = "prevo-${version}";
+  inherit (prevo-tools) version;
+
+  paths = [ prevo-tools ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/prevo \
+      --prefix XDG_DATA_DIRS : "${prevo-data}/share"
+  '';
+
+  meta = with lib; {
+    description = "offline version of the Esperanto dictionary Reta Vortaro";
+    longDescription = ''
+      PReVo is the "portable" ReVo, i.e., the offline version
+      of the Esperanto dictionary Reta Vortaro.
+    '';
+    homepage = "https://github.com/bpeel/prevodb";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.das-g ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/prevo/tools.nix b/nixpkgs/pkgs/applications/misc/prevo/tools.nix
new file mode 100644
index 000000000000..508f085bb44b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/prevo/tools.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, glib, expat
+, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "prevo-tools";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "bpeel";
+    repo = "prevodb";
+    rev = version;
+    sha256 = "1fyrc4g9qdq04nxs4g8x0krxfani5xady6v9m0qfqpbh4xk2ry2d";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config installShellFiles ];
+  buildInputs = [ glib expat ];
+
+  postInstall = ''
+    installShellCompletion --bash src/prevo-completion
+  '';
+
+  meta = with lib; {
+    description =
+      "CLI tools for the offline version of the Esperanto dictionary Reta Vortaro";
+    longDescription = ''
+      PReVo is the "portable" ReVo, i.e., the offline version
+      of the Esperanto dictionary Reta Vortaro.
+
+      This package provides the command line application prevo to query a local
+      ReVo database, as well as the command line tool revodb to create such a
+      database for this application or for the Android app of the same name.
+    '';
+    homepage = "https://github.com/bpeel/prevodb";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.das-g ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/printrun/default.nix b/nixpkgs/pkgs/applications/misc/printrun/default.nix
new file mode 100644
index 000000000000..13f9178f330c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/printrun/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "printrun";
+  version = "2.0.0rc5";
+
+  src = fetchFromGitHub {
+    owner = "kliment";
+    repo = "Printrun";
+    rev = "${pname}-${version}";
+    sha256 = "179x8lwrw2h7cxnkq7izny6qcb4nhjnd8zx893i77zfhzsa6kx81";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    appdirs cython dbus-python numpy six wxPython_4_0 psutil pyglet pyopengl pyserial
+  ];
+
+  doCheck = false;
+
+  setupPyBuildFlags = ["-i"];
+
+  postPatch = ''
+    sed -i -r "s|/usr(/local)?/share/|$out/share/|g" printrun/utils.py
+  '';
+
+  postInstall = ''
+    for f in $out/share/applications/*.desktop; do
+      sed -i -e "s|/usr/|$out/|g" "$f"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Pronterface, Pronsole, and Printcore - Pure Python 3d printing host software";
+    homepage = "https://github.com/kliment/Printrun";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/procmail/CVE-2014-3618.patch b/nixpkgs/pkgs/applications/misc/procmail/CVE-2014-3618.patch
new file mode 100644
index 000000000000..e3aa5600e40e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/procmail/CVE-2014-3618.patch
@@ -0,0 +1,18 @@
+From http://seclists.org/oss-sec/2014/q3/495 (with whitespace corrected).
+
+--- a/src/formisc.c 2013-08-04 00:13:33.000000000 -0700
++++ b/src/formisc.c 2014-09-03 11:42:25.986002396 -0700
+@@ -84,12 +84,11 @@
+ 	case '"':*target++=delim='"';start++;
+       }
+      ;{ int i;
+-	do
++	while(*start)
+ 	   if((i= *target++= *start++)==delim)	 /* corresponding delimiter? */
+ 	      break;
+ 	   else if(i=='\\'&&*start)		    /* skip quoted character */
+ 	      *target++= *start++;
+-	while(*start);						/* anything? */
+       }
+      hitspc=2;
+    }
diff --git a/nixpkgs/pkgs/applications/misc/procmail/default.nix b/nixpkgs/pkgs/applications/misc/procmail/default.nix
new file mode 100644
index 000000000000..1244347cc53c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/procmail/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  name = "procmail-3.22";
+
+  patches = [
+    ./CVE-2014-3618.patch
+    (fetchurl {
+      url = "https://sources.debian.org/data/main/p/procmail/3.22-26/debian/patches/30";
+      sha256 = "11zmz1bj0v9pay3ldmyyg7473b80h89gycrhndsgg9q50yhcqaaq";
+      name = "CVE-2017-16844";
+    })
+  ];
+
+  # getline is defined differently in glibc now. So rename it.
+  # Without the .PHONY target "make install" won't install anything on Darwin.
+  postPatch = ''
+    sed -e "s%^RM.*$%#%" -i Makefile
+    sed -e "s%^BASENAME.*%\BASENAME=$out%" -i Makefile
+    sed -e "s%^LIBS=.*%LIBS=-lm%" -i Makefile
+    sed -e "s%getline%thisgetline%g" -i src/*.c src/*.h
+    sed -e "3i\
+.PHONY: install
+" -i Makefile
+  '';
+
+  src = fetchurl {
+    url = "ftp://ftp.fu-berlin.de/pub/unix/mail/procmail/procmail-3.22.tar.gz";
+    sha256 = "05z1c803n5cppkcq99vkyd5myff904lf9sdgynfqngfk9nrpaz08";
+  };
+
+  meta = with lib; {
+    description = "Mail processing and filtering utility";
+    homepage = "http://www.procmail.org/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/projectlibre/default.nix b/nixpkgs/pkgs/applications/misc/projectlibre/default.nix
new file mode 100644
index 000000000000..fd83d74edd54
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/projectlibre/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchgit, ant, jdk, makeWrapper, jre, coreutils, which }:
+
+stdenv.mkDerivation rec {
+  pname = "projectlibre";
+  version = "1.7.0";
+
+  src = fetchgit {
+    url = "https://git.code.sf.net/p/projectlibre/code";
+    rev = "0c939507cc63e9eaeb855437189cdec79e9386c2"; # version 1.7.0 was not tagged
+    sha256 = "0vy5vgbp45ai957gaby2dj1hvmbxfdlfnwcanwqm9f8q16qipdbq";
+  };
+
+  buildInputs = [ ant jdk makeWrapper ];
+  buildPhase = ''
+    export ANT_OPTS=-Dbuild.sysclasspath=ignore
+    ${ant}/bin/ant -f openproj_build/build.xml
+  '';
+
+  resourcesPath = "openproj_build/resources";
+  desktopItem = "${resourcesPath}/projectlibre.desktop";
+
+  installPhase = ''
+    mkdir -p $out/share/{applications,projectlibre/samples,pixmaps,doc/projectlibre} $out/bin
+
+    substitute $resourcesPath/projectlibre $out/bin/projectlibre \
+      --replace "\"/usr/share/projectlibre\"" "\"$out/share/projectlibre\""
+    chmod +x $out/bin/projectlibre
+    wrapProgram $out/bin/projectlibre \
+     --prefix PATH : "${jre}/bin:${coreutils}/bin:${which}/bin"
+
+    cp -R openproj_build/dist/* $out/share/projectlibre
+    cp -R openproj_build/license $out/share/doc/projectlibre
+    cp $desktopItem $out/share/applications
+    cp $resourcesPath/projectlibre.png $out/share/pixmaps
+    cp -R $resourcesPath/samples/* $out/share/projectlibre/samples
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.projectlibre.com/";
+    description = "Project-Management Software similar to MS-Project";
+    maintainers = [ maintainers.Mogria ];
+    license = licenses.cpal10;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/prusa-slicer/default.nix b/nixpkgs/pkgs/applications/misc/prusa-slicer/default.nix
new file mode 100644
index 000000000000..4d2ef2254e13
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/prusa-slicer/default.nix
@@ -0,0 +1,116 @@
+{ stdenv, lib, fetchFromGitHub, cmake, copyDesktopItems, makeDesktopItem, pkg-config, wrapGAppsHook
+, boost, cereal, cgal_5, curl, dbus, eigen, expat, glew, glib, gmp, gtest, gtk3, hicolor-icon-theme
+, ilmbase, libpng, mpfr, nlopt, openvdb, pcre, qhull, systemd, tbb, wxGTK31-gtk3, xorg
+}:
+stdenv.mkDerivation rec {
+  pname = "prusa-slicer";
+  version = "2.3.0";
+
+  nativeBuildInputs = [
+    cmake
+    copyDesktopItems
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    boost
+    cereal
+    cgal_5
+    curl
+    dbus
+    eigen
+    expat
+    glew
+    glib
+    gmp
+    gtk3
+    hicolor-icon-theme
+    ilmbase
+    libpng
+    mpfr
+    nlopt
+    openvdb
+    pcre
+    systemd
+    tbb
+    wxGTK31-gtk3
+    xorg.libX11
+  ] ++ checkInputs;
+
+  doCheck = true;
+  checkInputs = [ gtest ];
+
+  # The build system uses custom logic - defined in
+  # cmake/modules/FindNLopt.cmake in the package source - for finding the nlopt
+  # library, which doesn't pick up the package in the nix store.  We
+  # additionally need to set the path via the NLOPT environment variable.
+  NLOPT = nlopt;
+
+  # Disable compiler warnings that clutter the build log.
+  # It seems to be a known issue for Eigen:
+  # http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221
+  NIX_CFLAGS_COMPILE = "-Wno-ignored-attributes";
+
+  # prusa-slicer uses dlopen on `libudev.so` at runtime
+  NIX_LDFLAGS = "-ludev";
+
+  prePatch = ''
+    # In nix ioctls.h isn't available from the standard kernel-headers package
+    # like in other distributions. The copy in glibc seems to be identical to the
+    # one in the kernel though, so we use that one instead.
+    sed -i 's|"/usr/include/asm-generic/ioctls.h"|<asm-generic/ioctls.h>|g' src/libslic3r/GCodeSender.cpp
+
+    # Since version 2.5.0 of nlopt we need to link to libnlopt, as libnlopt_cxx
+    # now seems to be integrated into the main lib.
+    sed -i 's|nlopt_cxx|nlopt|g' cmake/modules/FindNLopt.cmake
+  '';
+
+  src = fetchFromGitHub {
+    owner = "prusa3d";
+    repo = "PrusaSlicer";
+    sha256 = "08zyvik8cyj1n9knbg8saan7j8s60nzkyj4a77818zbi9lpi65i5";
+    rev = "version_${version}";
+  };
+
+  cmakeFlags = [
+    "-DSLIC3R_FHS=1"
+    "-DSLIC3R_GTK=3"
+  ];
+
+  postInstall = ''
+    ln -s "$out/bin/prusa-slicer" "$out/bin/prusa-gcodeviewer"
+
+    mkdir -p "$out/share/pixmaps/"
+    ln -s "$out/share/PrusaSlicer/icons/PrusaSlicer.png" "$out/share/pixmaps/PrusaSlicer.png"
+    ln -s "$out/share/PrusaSlicer/icons/PrusaSlicer-gcodeviewer_192px.png" "$out/share/pixmaps/PrusaSlicer-gcodeviewer.png"
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "PrusaSlicer";
+      exec = "prusa-slicer";
+      icon = "PrusaSlicer";
+      comment = "G-code generator for 3D printers";
+      desktopName = "PrusaSlicer";
+      genericName = "3D printer tool";
+      categories = "Development;";
+    })
+    (makeDesktopItem {
+      name = "PrusaSlicer G-code Viewer";
+      exec = "prusa-gcodeviewer";
+      icon = "PrusaSlicer-gcodeviewer";
+      comment = "G-code viewer for 3D printers";
+      desktopName = "PrusaSlicer G-code Viewer";
+      genericName = "G-code Viewer";
+      categories = "Development;";
+    })
+  ];
+
+  meta = with lib; {
+    description = "G-code generator for 3D printer";
+    homepage = "https://github.com/prusa3d/PrusaSlicer";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ moredread tweber ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/prusa-slicer/super-slicer.nix b/nixpkgs/pkgs/applications/misc/prusa-slicer/super-slicer.nix
new file mode 100644
index 000000000000..14894159843b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/prusa-slicer/super-slicer.nix
@@ -0,0 +1,49 @@
+{
+  stdenv, lib, fetchFromGitHub, makeDesktopItem, prusa-slicer
+}:
+let
+  appname = "SuperSlicer";
+  version = "2.2.54.2";
+  pname = "super-slicer";
+  description = "PrusaSlicer fork with more features and faster development cycle";
+  override = super: {
+    inherit version pname;
+
+    src = fetchFromGitHub {
+      owner = "supermerill";
+      repo = "SuperSlicer";
+      sha256 = "sha256-ThmsxFXI1uReK+JwpHrIWzHpBdIOP77kDjv+QaK+Azk=";
+      rev = version;
+    };
+
+    # See https://github.com/supermerill/SuperSlicer/issues/432
+    cmakeFlags = super.cmakeFlags ++ [
+      "-DSLIC3R_BUILD_TESTS=0"
+    ];
+
+    postInstall = ''
+      mkdir -p "$out/share/pixmaps/"
+      ln -s "$out/share/SuperSlicer/icons/Slic3r.png" "$out/share/pixmaps/${appname}.png"
+    '';
+
+    desktopItems = [
+      (makeDesktopItem {
+        name = appname;
+        exec = "superslicer";
+        icon = appname;
+        comment = description;
+        desktopName = appname;
+        genericName = "3D printer tool";
+        categories = "Development;";
+      })
+    ];
+
+    meta = with lib; {
+      inherit description;
+      homepage = "https://github.com/supermerili/SuperSlicer";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ cab404 moredread ];
+    };
+
+  };
+in prusa-slicer.overrideAttrs override
diff --git a/nixpkgs/pkgs/applications/misc/pstree/default.nix b/nixpkgs/pkgs/applications/misc/pstree/default.nix
new file mode 100644
index 000000000000..d25e4a6f90ba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pstree/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pstree";
+  version = "2.39";
+
+  src = fetchurl {
+    urls = [
+      "https://distfiles.macports.org/${pname}/${pname}-${version}.tar.gz"
+      "https://fossies.org/linux/misc/${pname}-${version}.tar.gz"
+      "ftp://ftp.thp.uni-duisburg.de/pub/source/${pname}-${version}.tar.gz"
+    ];
+    sha256 = "17s7v15c4gryjpi11y1xq75022nkg4ggzvjlq2dkmyg67ssc76vw";
+  };
+
+  sourceRoot = ".";
+  buildPhase = ''
+    runHook preBuild
+    $CC $NIX_CFLAGS -o pstree pstree.c
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm0555 ${pname} -t $out/bin
+    install -Dm0444 ${pname}.1 -t $out/share/man/man1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Show the set of running processes as a tree";
+    homepage = "http://www.thp.uni-duisburg.de/pstree/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.c0bw3b ];
+    platforms = platforms.unix;
+    priority = 5; # Lower than psmisc also providing pstree on Linux platforms
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pt/.bundle/config b/nixpkgs/pkgs/applications/misc/pt/.bundle/config
new file mode 100644
index 000000000000..88cb2d529351
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/.bundle/config
@@ -0,0 +1,2 @@
+---
+BUNDLE_NO_INSTALL: true
diff --git a/nixpkgs/pkgs/applications/misc/pt/Gemfile b/nixpkgs/pkgs/applications/misc/pt/Gemfile
new file mode 100644
index 000000000000..ed2136ea5b85
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem 'pt'
diff --git a/nixpkgs/pkgs/applications/misc/pt/Gemfile.lock b/nixpkgs/pkgs/applications/misc/pt/Gemfile.lock
new file mode 100644
index 000000000000..dfaa018d3724
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/Gemfile.lock
@@ -0,0 +1,69 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    axiom-types (0.1.1)
+      descendants_tracker (~> 0.0.4)
+      ice_nine (~> 0.11.0)
+      thread_safe (~> 0.3, >= 0.3.1)
+    coercible (1.0.0)
+      descendants_tracker (~> 0.0.1)
+    colored (1.2)
+    declarative (0.0.10)
+    declarative-option (0.1.0)
+    descendants_tracker (0.0.4)
+      thread_safe (~> 0.3, >= 0.3.1)
+    equalizer (0.0.11)
+    excon (0.64.0)
+    faraday (0.9.2)
+      multipart-post (>= 1.2, < 3)
+    faraday_middleware (0.13.1)
+      faraday (>= 0.7.4, < 1.0)
+    highline (2.0.2)
+    hirb (0.7.3)
+    hirb-unicode (0.0.5)
+      hirb (~> 0.5)
+      unicode-display_width (~> 0.1.1)
+    ice_nine (0.11.2)
+    multi_json (1.13.1)
+    multipart-post (2.0.0)
+    pt (0.10.0)
+      colored (~> 1.2)
+      highline
+      hirb (~> 0.7, >= 0.7.3)
+      hirb-unicode (~> 0.0.5, >= 0.0.5)
+      thor
+      tracker_api (~> 1.6.0)
+    public_suffix (3.0.3)
+    representable (3.0.4)
+      declarative (< 0.1.0)
+      declarative-option (< 0.2.0)
+      uber (< 0.2.0)
+    thor (0.20.3)
+    thread_safe (0.3.6)
+    tracker_api (1.6.0)
+      addressable
+      equalizer
+      excon
+      faraday (~> 0.9.0)
+      faraday_middleware
+      multi_json
+      representable
+      virtus
+    uber (0.1.0)
+    unicode-display_width (0.1.1)
+    virtus (1.0.5)
+      axiom-types (~> 0.1)
+      coercible (~> 1.0)
+      descendants_tracker (~> 0.0, >= 0.0.3)
+      equalizer (~> 0.0, >= 0.0.9)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pt
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/misc/pt/default.nix b/nixpkgs/pkgs/applications/misc/pt/default.nix
new file mode 100644
index 000000000000..ef490702a672
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "pt";
+  gemdir = ./.;
+  exes = [ "pt" ];
+
+  passthru.updateScript = bundlerUpdateScript "pt";
+
+  meta = with lib; {
+    description = "Minimalist command-line Pivotal Tracker client";
+    homepage    = "http://www.github.com/raul/pt";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ebzzry manveru nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pt/gemset.nix b/nixpkgs/pkgs/applications/misc/pt/gemset.nix
new file mode 100644
index 000000000000..9cd83a90721d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/gemset.nix
@@ -0,0 +1,273 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  axiom-types = {
+    dependencies = ["descendants_tracker" "ice_nine" "thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10q3k04pll041mkgy0m5fn2b1lazm6ly1drdbcczl5p57lzi3zy1";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  coercible = {
+    dependencies = ["descendants_tracker"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p5azydlsz0nkxmcq0i1gzmcfq02lgxc4as7wmf47j1c6ljav0ah";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  colored = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0x5jmsyi0z69bm6sij1k89z7h0laag3cb4mdn7zkl9qmxb90lx";
+      type = "gem";
+    };
+    version = "1.2";
+  };
+  declarative = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0642xvwzzbgi3kp1bg467wma4g3xqrrn0sk369hjam7w579gnv5j";
+      type = "gem";
+    };
+    version = "0.0.10";
+  };
+  declarative-option = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g4ibxq566f1frnhdymzi9hxxcm4g2gw4n21mpjk2mhwym4q6l0p";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  descendants_tracker = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15q8g3fcqyb41qixn6cky0k3p86291y7xsh1jfd851dvrza1vi79";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  equalizer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vcplvlykirg2vc56jjxavgpkllzq26xgp7ind7wc5ikaqaz64gn";
+      type = "gem";
+    };
+    version = "0.64.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kplqkpn2s2yl3lxdf6h7sfldqvkbkpxwwxhyk7mdhjplb5faqh6";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a93rs58bakqck7bcihasz66a1riy22h2zpwrpmb13gp8mw3wkmr";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g0zpalfj8wvca86hcnirir5py2zyqrhkgdgv9f87fxkjaw815wr";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  hirb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mzch3c2lvmf8gskgzlx6j53d10j42ir6ik2dkrl27sblhy76cji";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+  hirb-unicode = {
+    dependencies = ["hirb" "unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b7hka1p4mkjdy2wr2cxsivnsmnz31zz1bswznmmxnvf5a6c00jk";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  ice_nine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nv35qg1rps9fsis28hz2cq2fx1i96795f91q4nmkm934xynll2x";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  pt = {
+    dependencies = ["colored" "highline" "hirb" "hirb-unicode" "thor" "tracker_api"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ypyya7bk0w7zd9c3224zsizhv5wbs1icjpn0023wh3ii1by16a8";
+      type = "gem";
+    };
+    version = "0.10.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  representable = {
+    dependencies = ["declarative" "declarative-option" "uber"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qm9rgi1j5a6nv726ka4mmixivlxfsg91h8rpp72wwd4vqbkkm07";
+      type = "gem";
+    };
+    version = "3.0.4";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  tracker_api = {
+    dependencies = ["addressable" "equalizer" "excon" "faraday" "faraday_middleware" "multi_json" "representable" "virtus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pxwzbjzxign81wynl44napkvkrrhlyl7rm4ywrcdqahmzxmavsp";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  uber = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1mm7mngg40x05z52md3mbamkng0zpajbzqjjwmsyw0zw3v9vjv";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06dpm3yqc974qfy6nyx7b0w0f6b8k08jadd5l9xnmla3fji6c405";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  virtus = {
+    dependencies = ["axiom-types" "coercible" "descendants_tracker" "equalizer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06iphwi3c4f7y9i2rvhvaizfswqbaflilziz4dxqngrdysgkn1fk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ptask/default.nix b/nixpkgs/pkgs/applications/misc/ptask/default.nix
new file mode 100644
index 000000000000..b243f1941817
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ptask/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, pkg-config, makeWrapper, gtk3, json_c, taskwarrior }:
+
+stdenv.mkDerivation rec {
+  name = "ptask-1.0.0";
+
+  src = fetchurl {
+    url = "https://wpitchoune.net/ptask/files/${name}.tar.gz";
+    sha256 = "13nirr7b29bv3w2zc8zxphhmc9ayhs61i11jl4819nabk7vy1kdq";
+  };
+
+  buildInputs = [ gtk3 json_c ];
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  patches = [ ./tw-version.patch ./json_c_is_error.patch ];
+
+  preFixup = ''
+    wrapProgram "$out/bin/ptask" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
+      --prefix PATH : "${taskwarrior}/bin"
+  '';
+
+  meta = with lib; {
+    homepage = "http://wpitchoune.net/ptask/";
+    description = "GTK-based GUI for taskwarrior";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.spacefrogg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ptask/json_c_is_error.patch b/nixpkgs/pkgs/applications/misc/ptask/json_c_is_error.patch
new file mode 100644
index 000000000000..435c8b26e6f7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ptask/json_c_is_error.patch
@@ -0,0 +1,13 @@
+diff --git a/src/tw.c b/src/tw.c
+index 602f7b3..ca601cd 100644
+--- a/src/tw.c
++++ b/src/tw.c
+@@ -163,7 +163,7 @@ static struct json_object *task_exec_json(const char *opts)
+ 
+ 	free(cmd);
+ 
+-	if (o && is_error(o))
++	if (!o)
+ 		return NULL;
+ 
+ 	return o;
diff --git a/nixpkgs/pkgs/applications/misc/ptask/tw-version.patch b/nixpkgs/pkgs/applications/misc/ptask/tw-version.patch
new file mode 100644
index 000000000000..995fffeda2f8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ptask/tw-version.patch
@@ -0,0 +1,11 @@
+--- a/src/tw.c	2017-02-21 22:56:19.289037608 +0100
++++ b/src/tw.c	2017-02-21 22:57:04.726814256 +0100
+@@ -116,7 +116,7 @@
+ 	    || !strcmp(ver, "2.3.0")
+ 	    || !strcmp(ver, "2.4.0")
+ 	    || !strcmp(ver, "2.4.1")
+-	    || !strcmp(ver, "2.5.0"))
++	    || !strcmp(ver, "2.5.1"))
+ 		return 1;
+ 	else
+ 		return 0;
diff --git a/nixpkgs/pkgs/applications/misc/pueue/default.nix b/nixpkgs/pkgs/applications/misc/pueue/default.nix
new file mode 100644
index 000000000000..d0459cb426c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pueue/default.nix
@@ -0,0 +1,33 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pueue";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "Nukesor";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1vdlsfnqnyri0ny2g695lhivs9m25v9lsqf1valwbjv9l9vjxfqa";
+  };
+
+  cargoSha256 = "0qziwb69qpbziz772np8dcb1dvxg6m506k5kl63m75z4zicgykcv";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  checkFlags = [ "--skip=test_single_huge_payload" "--skip=test_create_unix_socket" ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/pueue completions $shell .
+    done
+    installShellCompletion pueue.{bash,fish} _pueue
+  '';
+
+  meta = with lib; {
+    description = "A daemon for managing long running shell commands";
+    homepage = "https://github.com/Nukesor/pueue";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pwsafe/default.nix b/nixpkgs/pkgs/applications/misc/pwsafe/default.nix
new file mode 100644
index 000000000000..2e7c77c0935a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pwsafe/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, zip, gettext, perl
+, wxGTK30, libXext, libXi, libXt, libXtst, xercesc
+, qrencode, libuuid, libyubikey, yubikey-personalization
+, curl, openssl, file
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pwsafe";
+  version = "3.53.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "0nh5jnf5yls2qv5hpfhm6i854zsknyh7d93c987a0cg14sg820fv";
+  };
+
+  nativeBuildInputs = [
+    cmake gettext perl pkg-config zip
+  ];
+  buildInputs = [
+    libXext libXi libXt libXtst wxGTK30
+    curl qrencode libuuid openssl xercesc
+    libyubikey yubikey-personalization
+    file
+  ];
+
+  cmakeFlags = [
+    "-DNO_GTEST=ON"
+    "-DCMAKE_CXX_FLAGS=-I${yubikey-personalization}/include/ykpers-1"
+  ];
+
+  postPatch = ''
+    # Fix perl scripts used during the build.
+    for f in `find . -type f -name '*.pl'`; do
+      patchShebangs $f
+    done
+
+    # Fix hard coded paths.
+    for f in `grep -Rl /usr/share/ src`; do
+      substituteInPlace $f --replace /usr/share/ $out/share/
+    done
+
+    # Fix hard coded zip path.
+    substituteInPlace help/Makefile.linux --replace /usr/bin/zip ${zip}/bin/zip
+
+    for f in `grep -Rl /usr/bin/ .`; do
+      substituteInPlace $f --replace /usr/bin/ ""
+    done
+  '';
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "A password database utility";
+    longDescription = ''
+      Password Safe is a password database utility. Like many other
+      such products, commercial and otherwise, it stores your
+      passwords in an encrypted file, allowing you to remember only
+      one password (the "safe combination"), instead of all the
+      username/password combinations that you use.
+    '';
+    homepage = "https://pwsafe.org/";
+    maintainers = with maintainers; [ c0bw3b pjones ];
+    platforms = platforms.linux;
+    license = licenses.artistic2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pydf/default.nix b/nixpkgs/pkgs/applications/misc/pydf/default.nix
new file mode 100644
index 000000000000..0135e10d6df1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pydf/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, python3Packages }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "pydf";
+  version = "12";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "7f47a7c3abfceb1ac04fc009ded538df1ae449c31203962a1471a4eb3bf21439";
+  };
+
+  postInstall = ''
+    mkdir -p $out/share/man/man1 $out/share/pydf
+    install -t $out/share/pydf -m 444 pydfrc
+    install -t $out/share/man/man1 -m 444 pydf.1
+  '';
+
+  meta = with lib; {
+    description = "colourised df(1)-clone";
+    homepage = "http://kassiopeia.juls.savba.sk/~garabik/software/pydf/";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ monsieurp ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pyditz/cerberus.nix b/nixpkgs/pkgs/applications/misc/pyditz/cerberus.nix
new file mode 100644
index 000000000000..a26b6b014da4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pyditz/cerberus.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, buildPythonPackage, fetchPypi, pytestrunner, pytest }:
+
+buildPythonPackage rec {
+  pname = "Cerberus";
+  version = "1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1pxzr8sfm2hc5s96m9k044i44nwkva70n0ypr6a35v73zn891cx5";
+  };
+
+  checkInputs = [ pytestrunner pytest ];
+
+  meta = with lib; {
+    homepage = "http://python-cerberus.org/";
+    description = "Lightweight, extensible schema and data validation tool for Python dictionaries";
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pyditz/default.nix b/nixpkgs/pkgs/applications/misc/pyditz/default.nix
new file mode 100644
index 000000000000..268d2fb28609
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pyditz/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, pythonPackages }:
+
+with pythonPackages;
+
+let
+  cerberus_1_1 = callPackage ./cerberus.nix { };
+in buildPythonApplication rec {
+  pname = "pyditz";
+  version = "0.11";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "da0365ae9064e30c4a27526fb0d7a802fda5c8651cda6990d17be7ede89a2551";
+  };
+  nativeBuildInputs = [ setuptools_scm ];
+  propagatedBuildInputs = [ pyyaml six jinja2 cerberus_1_1 ];
+
+  checkPhase = ''
+    ${python.interpreter} -m unittest discover
+  '';
+
+  meta = with lib; {
+    homepage = "https://pythonhosted.org/pyditz/";
+    description = "Drop-in replacement for the Ditz distributed issue tracker";
+    maintainers = [ maintainers.ilikeavocadoes ];
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pytrainer/default.nix b/nixpkgs/pkgs/applications/misc/pytrainer/default.nix
new file mode 100644
index 000000000000..eb775a1f6024
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pytrainer/default.nix
@@ -0,0 +1,94 @@
+{ lib, stdenv
+, fetchFromGitHub
+, perl
+, python3
+, sqlite
+, gpsbabel
+, gnome3
+, gobject-introspection
+, wrapGAppsHook
+, gtk3
+, xvfb_run
+, webkitgtk
+, glib-networking
+, glibcLocales
+, tzdata
+, substituteAll
+}:
+
+let
+  # Pytrainer needs a matplotlib with GTK backend.
+  matplotlibGtk = python3.pkgs.matplotlib.override {
+    enableGtk3 = true;
+  };
+
+in
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pytrainer";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "pytrainer";
+    repo = "pytrainer";
+    rev = "v${version}";
+    sha256 = "0m2sy3f5pyc4wv1ns31r7vlafqkzp0a2jasaskwrkl6273agbbk9";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      perl = "${perl}/bin/perl";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace ./setup.py \
+      --replace "'mysqlclient'," ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dateutil
+    lxml
+    matplotlibGtk
+    pygobject3
+    sqlalchemy
+    sqlalchemy_migrate
+    psycopg2
+    requests
+    certifi
+    setuptools
+  ];
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+    xvfb_run
+  ];
+
+  buildInputs = [
+    gpsbabel
+    sqlite
+    gtk3
+    webkitgtk
+    glib-networking
+    glibcLocales
+    gnome3.adwaita-icon-theme
+  ];
+
+  checkPhase = ''
+    env HOME=$TEMPDIR TZDIR=${tzdata}/share/zoneinfo \
+      TZ=Europe/Kaliningrad \
+      LC_ALL=en_US.UTF-8 \
+      xvfb-run -s '-screen 0 800x600x24' \
+      ${python3.interpreter} setup.py test
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pytrainer/pytrainer/wiki";
+    description = "Application for logging and graphing sporting excursions";
+    maintainers = [ maintainers.rycee ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pytrainer/fix-paths.patch b/nixpkgs/pkgs/applications/misc/pytrainer/fix-paths.patch
new file mode 100644
index 000000000000..7781f5aa4bed
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pytrainer/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/imports/file_garminfit.py
++++ b/imports/file_garminfit.py
+@@ -81,7 +81,7 @@
+         logging.debug(">>")
+         result = False
+         try:
+-            result = subprocess.check_output(["perl",
++            result = subprocess.check_output(["@perl@",
+                                               self.main_data_path+"plugins/garmin-fit/bin/fit2tcx",
+                                               filename])
+         except subprocess.CalledProcessError:
diff --git a/nixpkgs/pkgs/applications/misc/qMasterPassword/default.nix b/nixpkgs/pkgs/applications/misc/qMasterPassword/default.nix
new file mode 100644
index 000000000000..d3449da97f36
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qMasterPassword/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, qtbase, qmake, libX11, libXtst, openssl, libscrypt }:
+
+mkDerivation rec {
+  name = "qMasterPassword";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "bkueng";
+    repo = name;
+    rev = "v${version}";
+    sha256 = "0l0jarvfdc69rcjl2wa0ixq8gp3fmjsy9n84m38sxf3n9j2bh13c";
+  };
+
+  buildInputs = [ qtbase libX11 libXtst openssl libscrypt ];
+  nativeBuildInputs = [ qmake ];
+
+  # Upstream install is mostly defunct. It hardcodes target.path and doesn't
+  # install anything but the binary.
+  installPhase = if stdenv.isDarwin then ''
+    mkdir -p "$out"/{Applications,bin}
+    mv qMasterPassword.app "$out"/Applications/
+    ln -s ../Applications/qMasterPassword.app/Contents/MacOS/qMasterPassword "$out"/bin/qMasterPassword
+  '' else ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/{applications,doc/qMasterPassword,icons/qmasterpassword,icons/hicolor/512x512/apps}
+    mv qMasterPassword $out/bin
+    mv data/qMasterPassword.desktop $out/share/applications
+    mv LICENSE README.md $out/share/doc/qMasterPassword
+    mv data/icons/app_icon.png $out/share/icons/hicolor/512x512/apps/qmasterpassword.png
+    mv data/icons/* $out/share/icons/qmasterpassword
+  '';
+
+  meta = with lib; {
+    description = "Stateless Master Password Manager";
+    longDescription = ''
+      Access all your passwords using only a single master password. But in
+      contrast to other managers it does not store any passwords: Unique
+      passwords are generated from the master password and a site name. This
+      means you automatically get different passwords for each account and
+      there is no password file that can be lost or get stolen. There is also
+      no need to trust any online password service.
+    '';
+    homepage = "https://github.com/bkueng/qMasterPassword";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.tadeokondrak ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qcad/application-dir.patch b/nixpkgs/pkgs/applications/misc/qcad/application-dir.patch
new file mode 100644
index 000000000000..0b8a29319eb3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qcad/application-dir.patch
@@ -0,0 +1,48 @@
+diff --git a/src/core/RS.cpp b/src/core/RS.cpp
+index d8a135d6f..659795dbb 100644
+--- a/src/core/RS.cpp
++++ b/src/core/RS.cpp
+@@ -151,7 +151,7 @@ QStringList RS::getDirectoryList(const QString& subDirectory) {
+     dirList.append(appDir + "/../../../" + subDirectory);
+     dirList.append(QDir::currentPath() + "/" + subDirectory);
+ #else
+-    dirList.append(appDir + "/" + subDirectory);
++    dirList.append(appDir + "/../lib/" + subDirectory);
+ #endif
+ 
+     /*
+diff --git a/src/core/RSettings.cpp b/src/core/RSettings.cpp
+index c6c31cbf5..c51b59ce6 100644
+--- a/src/core/RSettings.cpp
++++ b/src/core/RSettings.cpp
+@@ -367,6 +367,8 @@ QString RSettings::getApplicationPath() {
+         ret.cdUp();
+     }
+ 
++    ret.cd("../lib");
++
+     return ret.path();
+ }
+ 
+@@ -1268,7 +1270,7 @@ QString RSettings::getRevisionString() {
+ }
+ 
+ QString RSettings::getReleaseDate() {
+-    return __DATE__;
++    return "";
+ }
+ 
+ int RSettings::getSnapRange() {
+diff --git a/qcad.desktop b/qcad.desktop
+index 93c5e9720..2d0e6bf32 100644
+--- a/qcad.desktop
++++ b/qcad.desktop
+@@ -48,7 +48,7 @@ Comment[sv]=2D CAD-system
+ Comment[sl]=Sistem 2D CAD
+ Comment[uk]=2D САПР
+ Comment[tr]=2D CAD Sistemi
+-Exec=qcad %F
++Exec=qcad-bin %F
+ X-MultipleArgs=true
+ Icon=qcad_icon
+ Terminal=false
diff --git a/nixpkgs/pkgs/applications/misc/qcad/default.nix b/nixpkgs/pkgs/applications/misc/qcad/default.nix
new file mode 100644
index 000000000000..c6b9d82bcf41
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qcad/default.nix
@@ -0,0 +1,102 @@
+{ boost
+, fetchFromGitHub
+, libGLU
+, mkDerivationWith
+, muparser
+, pkg-config
+, qtbase
+, qmake
+, qtscript
+, qtsvg
+, qtxmlpatterns
+, qttools
+, lib, stdenv
+}:
+
+mkDerivationWith stdenv.mkDerivation rec {
+  pname = "qcad";
+  version = "3.25.2.0";
+
+  src = fetchFromGitHub {
+    owner = "qcad";
+    repo = "qcad";
+    rev = "v${version}";
+    sha256 = "1lz6q9n2p0l7k8rwqsdj6av9p3426423g5avc4y6s7nbk36280mz";
+  };
+
+  patches = [
+    ./application-dir.patch
+  ];
+
+  postPatch = ''
+    if ! [ -d src/3rdparty/qt-labs-qtscriptgenerator-${qtbase.version} ]; then
+      mkdir src/3rdparty/qt-labs-qtscriptgenerator-${qtbase.version}
+      cp \
+        src/3rdparty/qt-labs-qtscriptgenerator-5.14.0/qt-labs-qtscriptgenerator-5.14.0.pro \
+        src/3rdparty/qt-labs-qtscriptgenerator-${qtbase.version}/qt-labs-qtscriptgenerator-${qtbase.version}.pro
+    fi
+ '';
+
+  qmakeFlags = [
+    "MUPARSER_DIR=${muparser}"
+    "INSTALLROOT=$(out)"
+    "BOOST_DIR=${boost.dev}"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin release/qcad-bin
+    install -Dm555 -t $out/lib release/libspatialindexnavel.so
+    install -Dm555 -t $out/lib release/libqcadcore.so
+    install -Dm555 -t $out/lib release/libqcadentity.so
+    install -Dm555 -t $out/lib release/libqcadgrid.so
+    install -Dm555 -t $out/lib release/libqcadsnap.so
+    install -Dm555 -t $out/lib release/libqcadoperations.so
+    install -Dm555 -t $out/lib release/libqcadstemmer.so
+    install -Dm555 -t $out/lib release/libqcadspatialindex.so
+    install -Dm555 -t $out/lib release/libqcadgui.so
+    install -Dm555 -t $out/lib release/libqcadecmaapi.so
+
+    install -Dm444 -t $out/share/applications qcad.desktop
+    install -Dm644 -t $out/share/pixmaps      scripts/qcad_icon.png
+
+    cp -r scripts $out/lib
+    cp -r plugins $out/lib/plugins
+    cp -r patterns $out/lib/patterns
+
+    # workaround to fix the library browser:
+    rm -r $out/lib/plugins/sqldrivers
+    ln -s -t $out/lib/plugins ${qtbase}/${qtbase.qtPluginPrefix}/sqldrivers
+
+    install -Dm644 scripts/qcad_icon.svg $out/share/icons/hicolor/scalable/apps/qcad.svg
+
+    runHook postInstall
+    '';
+
+  buildInputs = [
+    boost
+    muparser
+    libGLU
+    qtbase
+    qtscript
+    qtsvg
+    qtxmlpatterns
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    qmake
+    qttools
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "2D CAD package based on Qt";
+    homepage = "https://qcad.org";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ yvesf ];
+    platforms = qtbase.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qdirstat/default.nix b/nixpkgs/pkgs/applications/misc/qdirstat/default.nix
new file mode 100644
index 000000000000..a51bd3a80c05
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qdirstat/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchFromGitHub, qmake
+, coreutils, xdg_utils, bash
+, makeWrapper, perlPackages, mkDerivation }:
+
+let
+  pname = "qdirstat";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "shundhammer";
+    repo = pname;
+    rev = version;
+    sha256 = "163x3fxra0l3vvrzm25mh7jvcwjbmwsqlpppkxx76mkz9a1769fy";
+  };
+in
+
+mkDerivation {
+  inherit pname version src;
+
+  nativeBuildInputs = [ qmake makeWrapper ];
+
+  buildInputs = [ perlPackages.perl ];
+
+  postPatch = ''
+    substituteInPlace scripts/scripts.pro \
+      --replace /bin/true ${coreutils}/bin/true
+
+    for i in src/SysUtil.cpp src/FileSizeStatsWindow.cpp
+    do
+      substituteInPlace $i \
+        --replace /usr/bin/xdg-open ${xdg_utils}/bin/xdg-open
+    done
+    for i in src/Cleanup.cpp src/cleanup-config-page.ui
+    do
+      substituteInPlace $i \
+        --replace /bin/bash ${bash}/bin/bash \
+        --replace /bin/sh ${bash}/bin/sh
+    done
+    substituteInPlace src/StdCleanup.cpp \
+      --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  qmakeFlags = [ "INSTALL_PREFIX=${placeholder "out"}" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/qdirstat-cache-writer \
+      --set PERL5LIB "${perlPackages.makePerlPath [ perlPackages.URI ]}"
+  '';
+
+  meta = with lib; {
+    description = "Graphical disk usage analyzer";
+    homepage = src.meta.homepage;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ gnidorah ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qlandkartegt/default.nix b/nixpkgs/pkgs/applications/misc/qlandkartegt/default.nix
new file mode 100644
index 000000000000..cb30571e0552
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qlandkartegt/default.nix
@@ -0,0 +1,93 @@
+{ mkDerivation, lib, fetchurl, fetchpatch, cmake
+, qtmultimedia, qtserialport, qtscript, qtwebkit
+, garmindev, gdal, gpsd, libdmtx, libexif, libGLU, proj }:
+
+mkDerivation rec {
+  pname = "qlandkartegt";
+  version = "1.8.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1rwv5ar5jv15g1cc6pp0lk69q3ip10pjazsh3ds2ggaciymha1ly";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/fix-gps_read.patch?h=qlandkartegt";
+      sha256 = "1xyqxdqxwviq7b8jjxssxjlkldk01ms8dzqdjgvjs8n3fh7w0l70";
+    })
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/fix-incomplete-type.patch?h=qlandkartegt";
+      sha256 = "1q7rm321az3q6pq5mq0yjrihxl9sf3nln9z3xp20g9qldslv2cy2";
+    })
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/fix-proj_api.patch?h=qlandkartegt";
+      sha256 = "12yibxn85z2n30azmhyv02q091jj5r50nlnjq4gfzyqd3xb9582n";
+    })
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/fix-qt5-build.patch?h=qlandkartegt";
+      sha256 = "1wq2hr06gzq8m7zddh10vizmvpwp4lcy1g86rlpppvdc5cm3jpkl";
+    })
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/fix-qtgui-include.patch?h=qlandkartegt";
+      sha256 = "16hql8ignzw4n1hlp4icbvaddqcadh2rjns0bvis720535112sc8";
+    })
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/fix-timespec.patch?h=qlandkartegt";
+      sha256 = "1yzdwfsgjn7q04r9f7s5qk50y25hdl384dxrmpfmkm97fmpgyr7w";
+    })
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/fix-ver_str.patch?h=qlandkartegt";
+      sha256 = "13fg05gqrjfa9j00lrqz1b06xf6r5j01kl6l06vkn0hz1jzxss5m";
+    })
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/improve-gpx-creator.patch?h=qlandkartegt";
+      sha256 = "1sdf5z8qrd43azrhwfw06zc0qr48z925hgbcfqlp0xrsxv2n6kks";
+    })
+    (fetchpatch {
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/improve-gpx-name.patch?h=qlandkartegt";
+      sha256 = "10phafhns79i3rl4zpc7arw11x46cywgkdkxm7gw1i9y5h0cal79";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    qtmultimedia qtserialport qtscript qtwebkit
+    garmindev gdal gpsd libdmtx libexif libGLU proj
+  ];
+
+  cmakeFlags = [
+    "-DQK_QT5_PORT=ON"
+    "-DEXIF_LIBRARIES=${libexif}/lib/libexif.so"
+    "-DEXIF_INCLUDE_DIRS=${libexif}/include"
+  ];
+
+  postPatch = ''
+    substituteInPlace ConfigureChecks.cmake \
+      --replace \$\{PLUGIN_INSTALL_DIR\} "${garmindev}/lib/qlandkartegt"
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/mime/packages
+    cat << EOF > $out/share/mime/packages/qlandkartegt.xml
+    <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
+      <mime-type type="application/vnd.qlandkartegt.qlb">
+        <comment>QLandkarteGT File</comment>
+        <glob pattern="*.qlb"/>
+      </mime-type>
+    </mime-info>
+    EOF
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.qlandkarte.org/";
+    description = ''
+      QLandkarte GT is the ultimate outdoor aficionado's tool.
+      It supports GPS maps in GeoTiff format as well as Garmin's img vector map format.
+    '';
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qlandkartegt/garmindev.nix b/nixpkgs/pkgs/applications/misc/qlandkartegt/garmindev.nix
new file mode 100644
index 000000000000..07b58b72c494
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qlandkartegt/garmindev.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, cmake, libusb-compat-0_1 }:
+
+stdenv.mkDerivation rec {
+  pname = "garmindev";
+  version = "0.3.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/qlandkartegt/${pname}-${version}.tar.gz";
+    sha256 = "1mc7rxdn9790pgbvz02xzipxp2dp9h4hfq87xgawa18sp9jqzhw6";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ libusb-compat-0_1 ];
+
+  meta = with lib; {
+    homepage = "http://www.qlandkarte.org/";
+    description = "Garmin Device Drivers for QlandkarteGT";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qlcplus/default.nix b/nixpkgs/pkgs/applications/misc/qlcplus/default.nix
new file mode 100644
index 000000000000..c6306294ecdd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qlcplus/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, qmake, pkg-config, udev
+, qtmultimedia, qtscript, alsaLib, ola, libftdi1, libusb-compat-0_1
+, libsndfile, libmad
+}:
+
+mkDerivation rec {
+  pname = "qlcplus";
+  version = "4.12.3";
+
+  src = fetchFromGitHub {
+    owner = "mcallegari";
+    repo = "qlcplus";
+    rev = "QLC+_${version}";
+    sha256 = "PB1Y8N1TrJMcS7A2e1nKjsUlAxOYjdJqBhbyuDCAbGs=";
+  };
+
+  nativeBuildInputs = [ qmake pkg-config ];
+  buildInputs = [
+    udev qtmultimedia qtscript alsaLib ola libftdi1 libusb-compat-0_1 libsndfile libmad
+  ];
+
+  qmakeFlags = [ "INSTALLROOT=$(out)" ];
+
+  postPatch = ''
+    patchShebangs .
+    sed -i -e '/unix:!macx:INSTALLROOT += \/usr/d' \
+            -e "s@\$\$LIBSDIR/qt4/plugins@''${qtPluginPrefix}@" \
+            -e "s@/etc/udev/rules.d@''${out}/lib/udev/rules.d@" \
+      variables.pri
+  '';
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    ln -sf $out/lib/*/libqlcplus* $out/lib
+  '';
+
+  meta = with lib; {
+    description = "A free and cross-platform software to control DMX or analog lighting systems like moving heads, dimmers, scanners etc";
+    maintainers = [ maintainers.globin ];
+    license = licenses.asl20;
+    platforms = platforms.all;
+    homepage = "https://www.qlcplus.org/";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qmetro/default.nix b/nixpkgs/pkgs/applications/misc/qmetro/default.nix
new file mode 100644
index 000000000000..70c41ff3142f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qmetro/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, qmake4Hook, unzip, qt4 }:
+
+stdenv.mkDerivation rec {
+  name = "${project}-${version}";
+  project = "qmetro";
+  version = "0.7.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${project}/${name}.zip";
+    sha256 = "1zdj87lzcr43gr2h05g17z31pd22n5kxdwbvx7rx656rmhv0sjq5";
+  };
+
+  nativeBuildInputs = [ qmake4Hook unzip ];
+
+  buildInputs = [ qt4 ];
+
+  postPatch = ''
+    sed -e 's#Exec=/usr/bin/qmetro#Exec=qmetro#' -i rc/qmetro.desktop
+    echo 'LIBS += -lz' >> qmetro.pro
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/qmetro/";
+    description = "Worldwide transit maps viewer";
+    license = licenses.gpl3;
+
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qolibri/default.nix b/nixpkgs/pkgs/applications/misc/qolibri/default.nix
new file mode 100644
index 000000000000..3b61e3dbc1ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qolibri/default.nix
@@ -0,0 +1,27 @@
+{ mkDerivation, lib, fetchFromGitHub, pkg-config, cmake, libeb, lzo
+, qtbase, qtmultimedia, qttools, qtwebengine }:
+
+mkDerivation {
+  pname = "qolibri";
+  version = "2019-07-22";
+
+  src = fetchFromGitHub {
+    owner = "ludios";
+    repo = "qolibri";
+    rev = "b58f9838d39300cba444eba725a369181c5d746b";
+    sha256 = "0kcc6dvbcmq9y7hk8mp23pydiaqz6f0clg64d1f2y04ppphmah42";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake ];
+  buildInputs = [
+    libeb lzo qtbase qtmultimedia qttools qtwebengine
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ludios/qolibri";
+    description = "EPWING reader for viewing Japanese dictionaries";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qpdfview/default.nix b/nixpkgs/pkgs/applications/misc/qpdfview/default.nix
new file mode 100644
index 000000000000..0892632c1d84
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qpdfview/default.nix
@@ -0,0 +1,49 @@
+{lib, stdenv, mkDerivation, fetchurl, qmake, qtbase, qtsvg, pkg-config, poppler, djvulibre, libspectre, cups
+, file, ghostscript
+}:
+let
+  s = # Generated upstream information
+  rec {
+    baseName="qpdfview";
+    version = "0.4.18";
+    name="${baseName}-${version}";
+    url="https://launchpad.net/qpdfview/trunk/${version}/+download/qpdfview-${version}.tar.gz";
+    sha256 = "0v1rl126hvblajnph2hkansgi0s8vjdc5yxrm4y3faa0lxzjwr6c";
+  };
+  nativeBuildInputs = [ qmake pkg-config ];
+  buildInputs = [
+    qtbase qtsvg poppler djvulibre libspectre cups file ghostscript
+  ];
+in
+mkDerivation {
+  pname = s.baseName;
+  inherit (s) version;
+  inherit nativeBuildInputs buildInputs;
+  src = fetchurl {
+    inherit (s) url sha256;
+  };
+
+  preConfigure = ''
+    qmakeFlags+=(*.pro)
+  '';
+
+  qmakeFlags = [
+    "TARGET_INSTALL_PATH=${placeholder "out"}/bin"
+    "PLUGIN_INSTALL_PATH=${placeholder "out"}/lib/qpdfview"
+    "DATA_INSTALL_PATH=${placeholder "out"}/share/qpdfview"
+    "MANUAL_INSTALL_PATH=${placeholder "out"}/share/man/man1"
+    "ICON_INSTALL_PATH=${placeholder "out"}/share/icons/hicolor/scalable/apps"
+    "LAUNCHER_INSTALL_PATH=${placeholder "out"}/share/applications"
+    "APPDATA_INSTALL_PATH=${placeholder "out"}/share/appdata"
+  ];
+
+  meta = {
+    inherit (s) version;
+    description = "A tabbed document viewer";
+    license = lib.licenses.gpl2;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+    homepage = "https://launchpad.net/qpdfview";
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qsudo/default.nix b/nixpkgs/pkgs/applications/misc/qsudo/default.nix
new file mode 100644
index 000000000000..f7dbc9a90581
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qsudo/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv
+, mkDerivation
+, fetchFromGitHub
+, qmake
+, qtbase
+, sudo
+}:
+
+mkDerivation rec {
+  pname = "qsudo";
+  version = "2020.03.27";
+
+  src = fetchFromGitHub {
+    owner = "project-trident";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06kg057vwkvafnk69m9rar4wih3vq4h36wbzwbfc2kndsnn47lfl";
+  };
+
+  sourceRoot = "source/src-qt5";
+
+  nativeBuildInputs = [
+    qmake
+  ];
+
+  buildInputs = [
+    qtbase
+    sudo
+  ];
+
+  postPatch = ''
+    substituteInPlace qsudo.pro --replace /usr/bin $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Graphical sudo utility from Project Trident";
+    homepage = "https://github.com/project-trident/qsudo";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qsyncthingtray/default.nix b/nixpkgs/pkgs/applications/misc/qsyncthingtray/default.nix
new file mode 100644
index 000000000000..cdb4f6038211
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qsyncthingtray/default.nix
@@ -0,0 +1,72 @@
+{ mkDerivation, stdenv, lib, fetchFromGitHub, fetchpatch, procps
+, qtbase, qtwebengine, qtwebkit
+, cmake
+, syncthing
+, preferQWebView ? false
+, preferNative   ? true }:
+
+mkDerivation rec {
+  version = "0.5.8";
+  pname = "qsyncthingtray";
+
+  src = fetchFromGitHub {
+    owner  = "sieren";
+    repo   = "QSyncthingTray";
+    rev    = version;
+    sha256 = "1n9g4j7qznvg9zl6x163pi9f7wsc3x6q76i33psnm7x2v1i22x5w";
+  };
+
+  buildInputs = [ qtbase qtwebengine ] ++ lib.optional preferQWebView qtwebkit;
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [ ]
+    ++ lib.optional preferQWebView "-DQST_BUILD_WEBKIT=1"
+    ++ lib.optional preferNative   "-DQST_BUILD_NATIVEBROWSER=1";
+
+  patches = [ (fetchpatch {
+    name = "support_native_browser.patch";
+    url = "https://patch-diff.githubusercontent.com/raw/sieren/QSyncthingTray/pull/225.patch";
+    sha256 = "0w665xdlsbjxs977pdpzaclxpswf7xys1q3rxriz181lhk2y66yy";
+  }) ] ++ lib.optional (!preferQWebView && !preferNative) ./qsyncthingtray-0.5.8-qt-5.6.3.patch;
+
+  postPatch = ''
+    ${lib.optionalString stdenv.isLinux ''
+      substituteInPlace includes/platforms/linux/posixUtils.hpp \
+        --replace '"/usr/local/bin/syncthing"'         '"${syncthing}/bin/syncthing"' \
+        --replace '"pgrep -x'                          '"${procps}/bin/pgrep -x'
+    ''}
+
+    ${lib.optionalString stdenv.isDarwin ''
+      substituteInPlace includes/platforms/darwin/macUtils.hpp \
+        --replace '"/usr/local/bin/syncthing"'         '"${syncthing}/bin/syncthing"'
+    ''}
+  '';
+
+  installPhase = let qst = "qsyncthingtray"; in ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -m755 QSyncthingTray $out/bin/${qst}
+    ln -s $out/bin/${qst} $out/bin/QSyncthingTray
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/sieren/QSyncthingTray/";
+    description = "A Traybar Application for Syncthing written in C++";
+    longDescription = ''
+        A cross-platform status bar for Syncthing.
+        Currently supports macOS, Windows and Linux.
+        Written in C++ with Qt.
+    '';
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ zraexy peterhoeg ];
+    platforms = platforms.all;
+    # 0.5.7 segfaults when opening the main panel with qt 5.7 and fails to compile with qt 5.8
+    # but qt > 5.6 works when only using the native browser
+    # https://github.com/sieren/QSyncthingTray/issues/223
+    broken = (builtins.compareVersions qtbase.version "5.7.0" >= 0 && !preferNative);
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qsyncthingtray/qsyncthingtray-0.5.8-qt-5.6.3.patch b/nixpkgs/pkgs/applications/misc/qsyncthingtray/qsyncthingtray-0.5.8-qt-5.6.3.patch
new file mode 100644
index 000000000000..424bbe171779
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qsyncthingtray/qsyncthingtray-0.5.8-qt-5.6.3.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index b778d09..247b606 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -12,7 +12,7 @@ set(CMAKE_AUTOMOC ON)
+ 
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ 
+-find_package(Qt5 5.6 COMPONENTS Widgets Network PrintSupport)
++find_package(Qt5 5.6 COMPONENTS Widgets Network PrintSupport WebEngineWidgets)
+ if (NOT Qt5_FOUND)
+   message(FATAL_ERROR
+     "Some components of Qt5 not found (see above messages for details. "
diff --git a/nixpkgs/pkgs/applications/misc/qt-box-editor/default.nix b/nixpkgs/pkgs/applications/misc/qt-box-editor/default.nix
new file mode 100644
index 000000000000..5de2428250a0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qt-box-editor/default.nix
@@ -0,0 +1,39 @@
+{ mkDerivation
+, lib, stdenv
+, fetchFromGitHub
+, qtbase
+, qtsvg
+, qmake
+, leptonica
+, tesseract
+}:
+
+mkDerivation {
+  pname = "qt-box-editor";
+  version = "unstable-2019-07-12";
+
+  src = fetchFromGitHub {
+    owner = "zdenop";
+    repo = "qt-box-editor";
+    rev = "75a68b466868ba41ba2886caa796057403fe1901";
+    sha256 = "0zwsyy7cnbhy5aazwlkhd9y8bnzlgy1gffqa46abajn4809b95k3";
+  };
+
+  buildInputs = [ qtbase qtsvg leptonica tesseract ];
+
+  nativeBuildInputs = [ qmake ];
+
+  # remove with next release
+  # https://github.com/zdenop/qt-box-editor/pull/78
+  postPatch = ''
+    printf "INSTALLS += target\ntarget.path = $out/bin" >>  qt-box-editor.pro
+  '';
+
+  meta = with lib; {
+    description = "Editor of tesseract-ocr box files";
+    homepage = "https://github.com/zdenop/qt-box-editor";
+    license = licenses.asl20;
+    maintainers = [ maintainers.costrouc ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qt-video-wlr/default.nix b/nixpkgs/pkgs/applications/misc/qt-video-wlr/default.nix
new file mode 100644
index 000000000000..bdb434085da0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qt-video-wlr/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config, meson, ninja, wayland, pixman, cairo, librsvg, wayland-protocols, wlroots, libxkbcommon, gst_all_1, wrapQtAppsHook, qtbase, qtmultimedia }:
+let
+ gstreamerPath = with gst_all_1; lib.makeSearchPath "lib/gstreamer-1.0" [
+     gstreamer
+     gst-plugins-base
+     gst-plugins-good
+     gst-plugins-bad
+     gst-plugins-ugly
+ ];
+in stdenv.mkDerivation rec {
+  pname = "qt-video-wlr";
+  version = "2020-08-03";
+
+  src = fetchFromGitHub {
+    owner = "xdavidwu";
+    repo = "qt-video-wlr";
+    rev = "f88a7aa43f28b879b18752069f4a1ec33d73f2fe";
+    sha256 = "135kfyg1b61xvfpk8vpk4qyw6s9q1mn3a6lfkrqrhl0dz9kka9lx";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja wrapQtAppsHook ];
+  buildInputs = [
+      wayland
+      pixman
+      cairo
+      librsvg
+      wayland-protocols
+      wlroots
+      libxkbcommon
+      qtbase
+      qtmultimedia
+  ];
+
+  qtWrapperArgs = [
+      "--prefix PATH : $out/bin/qt-video-wlr"
+      "--prefix GST_PLUGIN_PATH : ${gstreamerPath}"
+  ];
+
+  meta = with lib; {
+    description = "Qt pip-mode-like video player for wlroots-based wayland compositors";
+    homepage = "https://github.com/xdavidwu/qt-video-wlr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fionera ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qtbitcointrader/default.nix b/nixpkgs/pkgs/applications/misc/qtbitcointrader/default.nix
new file mode 100644
index 000000000000..4ab70a5a8d7d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qtbitcointrader/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchzip, qt5, mkDerivation }:
+
+let
+  version = "1.40.43";
+in
+mkDerivation {
+  pname = "qtbitcointrader";
+  inherit version;
+
+  src = fetchzip {
+    url = "https://github.com/JulyIGHOR/QtBitcoinTrader/archive/v${version}.tar.gz";
+    sha256 = "07xbsi78cykpyxidp1bw5ahmymdrs2afg7b0lla7dfhagz18lzxv";
+  };
+
+  buildInputs = [ qt5.qtbase qt5.qtmultimedia qt5.qtscript ];
+
+  postUnpack = "sourceRoot=\${sourceRoot}/src";
+
+  configurePhase = ''
+    runHook preConfigure
+    qmake $qmakeFlags \
+      PREFIX=$out \
+      DESKTOPDIR=$out/share/applications \
+      ICONDIR=$out/share/pixmaps \
+      QtBitcoinTrader_Desktop.pro
+    runHook postConfigure
+  '';
+
+  meta = with lib; {
+    description = "Bitcoin trading client";
+    homepage = "https://centrabit.com/";
+    license = licenses.gpl3;
+    platforms = qt5.qtbase.meta.platforms;
+    maintainers = [ maintainers.ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qtpass/default.nix b/nixpkgs/pkgs/applications/misc/qtpass/default.nix
new file mode 100644
index 000000000000..faa199147490
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qtpass/default.nix
@@ -0,0 +1,61 @@
+{ lib, mkDerivation, fetchFromGitHub
+, git, gnupg, pass, pwgen, qrencode
+, fetchpatch
+, qtbase, qtsvg, qttools, qmake
+}:
+
+mkDerivation rec {
+  pname = "qtpass";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner  = "IJHack";
+    repo   = "QtPass";
+    rev    = "v${version}";
+    sha256 = "0748hjvhjrybi33ci3c8hcr74k9pdrf5jv8npf9hrsrmdyy1kr9x";
+  };
+
+  postPatch = ''
+    substituteInPlace src/qtpass.cpp \
+      --replace "/usr/bin/qrencode" "${qrencode}/bin/qrencode"
+  '';
+
+  buildInputs = [ git gnupg pass qtbase qtsvg ];
+
+  nativeBuildInputs = [ qmake qttools ];
+
+  enableParallelBuilding = true;
+
+  patches = [
+    # Fix path to pass-otp plugin `/usr/lib/password-store/extensions/otp.bash` being hardcoded.
+    # TODO: Remove when https://github.com/IJHack/QtPass/pull/499 is merged and available.
+    (fetchpatch {
+      name = "qtpass-Dont-hardcode-pass-otp-usr-lib-path.patch";
+      url = "https://github.com/IJHack/QtPass/commit/2ca9f0ec5a8d709c97a2433c5cd814040c82d4f3.patch";
+      sha256 = "0ljlvqxvarrz2a4j71i66aflrxi84zirb6cg9kvygnvhvm1zbc7d";
+    })
+  ];
+
+  qmakeFlags = [
+    # setup hook only sets QMAKE_LRELEASE, set QMAKE_LUPDATE too:
+    "QMAKE_LUPDATE=${qttools.dev}/bin/lupdate"
+  ];
+
+  qtWrapperArgs = [
+    "--suffix PATH : ${lib.makeBinPath [ git gnupg pass pwgen ]}"
+  ];
+
+  postInstall = ''
+    install -D qtpass.desktop -t $out/share/applications
+    install -D artwork/icon.svg $out/share/icons/hicolor/scalable/apps/qtpass-icon.svg
+    install -D qtpass.1 -t $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "A multi-platform GUI for pass, the standard unix password manager";
+    homepage = "https://qtpass.org";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.hrdinka ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/quicksynergy/default.nix b/nixpkgs/pkgs/applications/misc/quicksynergy/default.nix
new file mode 100644
index 000000000000..81a4ef3d99f1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/quicksynergy/default.nix
@@ -0,0 +1,37 @@
+{lib, stdenv, fetchurl, pkg-config, gtk2, synergy}:
+
+stdenv.mkDerivation rec {
+  pname = "quicksynergy";
+  version = "0.9.0";
+  src = fetchurl {
+    url = "mirror://sourceforge/project/quicksynergy/Linux/${version}/quicksynergy-${version}.tar.gz";
+    sha256 = "1pi8503bg8q1psw50y6d780i33nnvfjqiy9vnr3v52pdcfip8pix";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    gtk2
+    synergy
+  ];
+  preBuild = "
+    sed -i 's@/usr/bin@${synergy.out}/bin@' src/synergy_config.c
+  ";
+  meta = {
+    description = "GUI application to share mouse and keyboard between computers";
+    longDescription = "
+      QuickSynergy is a graphical interface (GUI) for easily configuring
+      Synergy2, an application that allows the user to share his mouse and
+      keyboard between two or more computers.
+
+      Without the need for any external hardware, Synergy2 uses the TCP-IP
+      protocol to share the resources, even between machines with diferent
+      operating systems, such as Mac OS, Linux and Windows.
+
+      Remember to open port 24800 (used by synergys program) if you want to
+      host mouse and keyboard.";
+    homepage = "https://sourceforge.net/projects/quicksynergy/";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.spinus ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/raiseorlaunch/default.nix b/nixpkgs/pkgs/applications/misc/raiseorlaunch/default.nix
new file mode 100644
index 000000000000..e43cf7b95b93
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/raiseorlaunch/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "raiseorlaunch";
+  version = "2.3.3";
+
+  src = python3Packages.fetchPypi {
+    inherit pname version;
+    sha256 = "3d694015d020a888b42564d56559213b94981ca2b32b952a49b2de4d029d2e59";
+  };
+
+  nativeBuildInputs = [ python3Packages.setuptools_scm ];
+  pythonPath = with python3Packages; [ i3ipc ];
+
+  # no tests
+  doCheck = false;
+  pythonImportsCheck = [ "raiseorlaunch" ];
+
+  meta = with lib; {
+    maintainers = with maintainers; [ winpat ];
+    description = "A run-or-raise-application-launcher for i3 window manager";
+    homepage = "https://github.com/open-dynaMIX/raiseorlaunch";
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ranger/default.nix b/nixpkgs/pkgs/applications/misc/ranger/default.nix
new file mode 100644
index 000000000000..8394fd4c5343
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ranger/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, lib, fetchFromGitHub, python3Packages, file, less, highlight
+, imagePreviewSupport ? true, w3m ? null}:
+
+with lib;
+
+assert imagePreviewSupport -> w3m != null;
+
+python3Packages.buildPythonApplication rec {
+  name = "ranger-${version}";
+  version = "1.9.3";
+
+  src = fetchFromGitHub {
+    owner = "ranger";
+    repo = "ranger";
+    rev = "v${version}";
+    sha256= "1rygfryczanvqxn43lmlkgs04sbqznbvbb9hlbm3h5qgdcl0xlw8";
+  };
+
+  LC_ALL = "en_US.UTF-8";
+
+  checkInputs = with python3Packages; [ pytest ];
+  propagatedBuildInputs = [ file ]
+    ++ lib.optionals (imagePreviewSupport) [ python3Packages.pillow ];
+
+  checkPhase = ''
+    py.test tests
+  '';
+
+  preConfigure = ''
+    ${lib.optionalString (highlight != null) ''
+      sed -i -e 's|^\s*highlight\b|${highlight}/bin/highlight|' \
+        ranger/data/scope.sh
+    ''}
+
+    substituteInPlace ranger/data/scope.sh \
+      --replace "/bin/echo" "echo"
+
+    substituteInPlace ranger/__init__.py \
+      --replace "DEFAULT_PAGER = 'less'" "DEFAULT_PAGER = '${lib.getBin less}/bin/less'"
+
+    for i in ranger/config/rc.conf doc/config/rc.conf ; do
+      substituteInPlace $i --replace /usr/share $out/share
+    done
+
+    # give file previews out of the box
+    substituteInPlace ranger/config/rc.conf \
+      --replace "#set preview_script ~/.config/ranger/scope.sh" "set preview_script $out/share/doc/ranger/config/scope.sh"
+  '' + optionalString imagePreviewSupport ''
+    substituteInPlace ranger/ext/img_display.py \
+      --replace /usr/lib/w3m ${w3m}/libexec/w3m
+
+    # give image previews out of the box when building with w3m
+    substituteInPlace ranger/config/rc.conf \
+      --replace "set preview_images false" "set preview_images true"
+  '';
+
+  meta =  with lib; {
+    description = "File manager with minimalistic curses interface";
+    homepage = "http://ranger.github.io/";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.toonn maintainers.magnetophon ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/razergenie/default.nix b/nixpkgs/pkgs/applications/misc/razergenie/default.nix
new file mode 100644
index 000000000000..8f78c0becaf5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/razergenie/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, lib, meson, ninja, pkg-config, qtbase, qttools
+, wrapQtAppsHook
+, enableExperimental ? false
+, includeMatrixDiscovery ? false
+}:
+
+let
+  version = "0.9.0";
+  pname = "razergenie";
+
+in stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "z3ntu";
+    repo = "RazerGenie";
+    rev = "v${version}";
+    sha256 = "17xlv26q8sdbav00wdm043449pg2424l3yaf8fvkc9rrlqkv13a4";
+  };
+
+  nativeBuildInputs = [
+    pkg-config meson ninja wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase qttools
+  ];
+
+  mesonFlags = [
+    "-Denable_experimental=${lib.boolToString enableExperimental}"
+    "-Dinclude_matrix_discovery=${lib.boolToString includeMatrixDiscovery}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/z3ntu/RazerGenie";
+    description = "Qt application for configuring your Razer devices under GNU/Linux";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ f4814n Mogria ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/reddsaver/default.nix b/nixpkgs/pkgs/applications/misc/reddsaver/default.nix
new file mode 100644
index 000000000000..c90aeeb0afd6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/reddsaver/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  version = "0.2.2";
+  pname = "reddsaver";
+
+  src = fetchFromGitHub {
+    owner = "manojkarthick";
+    repo = "reddsaver";
+    rev = "v${version}";
+    sha256 = "0802jz503jhyz5q6mg1fj2bvkl4nggvs8y03zddd298ymplx5dbx";
+  };
+
+  cargoSha256 = "0z8q187331j3rxj8hzym25pwrikxbd0r829v29y8w6v5n0hb47fs";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  # package does not contain tests as of v0.2.2
+  docCheck = false;
+
+  meta = with lib; {
+    description = "CLI tool to download saved images from Reddit";
+    homepage = "https://github.com/manojkarthick/reddsaver";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = [ maintainers.manojkarthick ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/redis-desktop-manager/default.nix b/nixpkgs/pkgs/applications/misc/redis-desktop-manager/default.nix
new file mode 100644
index 000000000000..844fd19e22cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/redis-desktop-manager/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, lib, fetchFromGitHub, fetchFromGitiles, pkg-config, libssh2
+, qtbase, qtdeclarative, qtgraphicaleffects, qtimageformats, qtquickcontrols
+, qtsvg, qttools, qtquick1, qtcharts
+, qmake
+}:
+
+let
+  breakpad_lss = fetchFromGitiles {
+    url = "https://chromium.googlesource.com/linux-syscall-support";
+    rev = "08056836f2b4a5747daff75435d10d649bed22f6";
+    sha256 = "1ryshs2nyxwa0kn3rlbnd5b3fhna9vqm560yviddcfgdm2jyg0hz";
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "redis-desktop-manager";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "uglide";
+    repo = "RedisDesktopManager";
+    fetchSubmodules = true;
+    rev = version;
+    sha256 = "0yd4i944d4blw8jky0nxl7sfkkj975q4d328rdcbhizwvf6dx81f";
+  };
+
+  nativeBuildInputs = [ pkg-config qmake ];
+  buildInputs = [
+    libssh2 qtbase qtdeclarative qtgraphicaleffects qtimageformats
+    qtquick1 qtquickcontrols qtsvg qttools qtcharts
+  ];
+
+  dontUseQmakeConfigure = true;
+
+  NIX_CFLAGS_COMPILE = [ "-Wno-error=deprecated" ];
+
+  # Disable annoying update reminder
+  postPatch = ''
+    sed -i s/'^\s*initUpdater();'/'\/\/initUpdater():'/ src/app/app.cpp
+  '';
+
+  buildPhase = ''
+    srcdir=$PWD
+
+    cat <<EOF > src/version.h
+#ifndef RDM_VERSION
+    #define RDM_VERSION "${version}-120"
+#endif // !RDM_VERSION
+EOF
+
+    cd $srcdir/3rdparty/gbreakpad
+    cp -r ${breakpad_lss} src/third_party/lss
+    chmod +w -R src/third_party/lss
+    touch README
+
+    cd $srcdir/3rdparty/crashreporter
+    qmake CONFIG+=release DESTDIR="$srcdir/rdm/bin/linux/release" QMAKE_LFLAGS_RPATH=""
+    make
+
+    cd $srcdir/3rdparty/gbreakpad
+    ./configure
+    make
+
+    cd $srcdir/src
+    qmake
+    make
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    instdir="$srcdir/bin/linux/release"
+    cp $instdir/rdm $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform open source Redis DB management tool";
+    homepage = "https://redisdesktop.com/";
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/redshift-plasma-applet/default.nix b/nixpkgs/pkgs/applications/misc/redshift-plasma-applet/default.nix
new file mode 100644
index 000000000000..fa5ee0c753aa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/redshift-plasma-applet/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, cmake, extra-cmake-modules, plasma-framework, kwindowsystem, redshift, fetchFromGitHub, }:
+
+let version = "1.0.18"; in
+
+stdenv.mkDerivation {
+  pname = "redshift-plasma-applet";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "kotelnik";
+    repo = "plasma-applet-redshift-control";
+    rev = "v${version}";
+    sha256 = "122nnbafa596rxdxlfshxk45lzch8c9342bzj7kzrsjkjg0xr9pq";
+  };
+
+  patchPhase = ''
+    substituteInPlace package/contents/ui/main.qml \
+      --replace "redshiftCommand: 'redshift'" \
+                "redshiftCommand: '${redshift}/bin/redshift'" \
+      --replace "redshiftOneTimeCommand: 'redshift -O " \
+                "redshiftOneTimeCommand: '${redshift}/bin/redshift -O "
+
+    substituteInPlace package/contents/ui/config/ConfigAdvanced.qml \
+      --replace "'redshift -V'" \
+                "'${redshift}/bin/redshift -V'"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  buildInputs = [
+    plasma-framework
+    kwindowsystem
+  ];
+
+  meta = with lib; {
+    description = "KDE Plasma 5 widget for controlling Redshift";
+    homepage = "https://github.com/kotelnik/plasma-applet-redshift-control";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ benley zraexy ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/redshift/575.patch b/nixpkgs/pkgs/applications/misc/redshift/575.patch
new file mode 100644
index 000000000000..d731d8ec43ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/redshift/575.patch
@@ -0,0 +1,51 @@
+From 467156efccc5e36a36bec8c0b64cc5a70f14d5ed Mon Sep 17 00:00:00 2001
+From: Yegor Timoshenko <yegortimoshenko@riseup.net>
+Date: Tue, 16 Jan 2018 11:43:46 +0000
+Subject: [PATCH] Fix Autoconf script
+
+gettext/intltool macros are not used correctly, see:
+https://bugs.launchpad.net/inkscape/+bug/1418943
+---
+ bootstrap    | 6 +-----
+ configure.ac | 5 +----
+ 2 files changed, 2 insertions(+), 9 deletions(-)
+
+diff --git a/bootstrap b/bootstrap
+index 0599cf5..40b1dca 100755
+--- a/bootstrap
++++ b/bootstrap
+@@ -1,7 +1,3 @@
+ #!/bin/sh
+ 
+-# change to root directory
+-cd $(dirname "$0")
+-
+-autopoint --force && \
+-	AUTOPOINT="intltoolize --automake --copy" autoreconf --force --install --verbose
++autoreconf --force --install && intltoolize
+diff --git a/configure.ac b/configure.ac
+index be0b51a..a2e7c42 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -17,6 +17,7 @@ AC_PROG_OBJC # For macOS support modules
+ AC_LANG([C])
+ 
+ AC_PROG_INTLTOOL([0.50])
++AC_SUBST(LIBINTL)
+ 
+ AC_CANONICAL_HOST
+ 
+@@ -51,10 +52,6 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], [
+ ])
+ AC_LANG_POP([Objective C])
+ 
+-# Checks for libraries.
+-AM_GNU_GETTEXT_VERSION([0.17])
+-AM_GNU_GETTEXT([external])
+-
+ GETTEXT_PACKAGE=redshift
+ AC_SUBST(GETTEXT_PACKAGE)
+ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Package name for gettext])
+-- 
+2.15.1
+
diff --git a/nixpkgs/pkgs/applications/misc/redshift/default.nix b/nixpkgs/pkgs/applications/misc/redshift/default.nix
new file mode 100644
index 000000000000..5798473db5e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/redshift/default.nix
@@ -0,0 +1,152 @@
+{ lib, stdenv, fetchFromGitHub, fetchFromGitLab
+, autoconf, automake, gettext, intltool
+, libtool, pkg-config, wrapGAppsHook, wrapPython, gobject-introspection
+, gtk3, python, pygobject3, pyxdg
+
+, withQuartz ? stdenv.isDarwin, ApplicationServices
+, withRandr ? stdenv.isLinux, libxcb
+, withDrm ? stdenv.isLinux, libdrm
+
+, withGeolocation ? true
+, withCoreLocation ? withGeolocation && stdenv.isDarwin, CoreLocation, Foundation, Cocoa
+, withGeoclue ? withGeolocation && stdenv.isLinux, geoclue
+, withAppIndicator ? stdenv.isLinux, libappindicator, libayatana-appindicator
+}:
+
+let
+  mkRedshift =
+    { pname, version, src, meta }:
+    stdenv.mkDerivation rec {
+      inherit pname version src meta;
+
+      patches = lib.optionals (pname != "gammastep") [
+        # https://github.com/jonls/redshift/pull/575
+        ./575.patch
+      ];
+
+      nativeBuildInputs = [
+        autoconf
+        automake
+        gettext
+        intltool
+        libtool
+        pkg-config
+        wrapGAppsHook
+        wrapPython
+      ];
+
+      configureFlags = [
+        "--enable-randr=${if withRandr then "yes" else "no"}"
+        "--enable-geoclue2=${if withGeoclue then "yes" else "no"}"
+        "--enable-drm=${if withDrm then "yes" else "no"}"
+        "--enable-quartz=${if withQuartz then "yes" else "no"}"
+        "--enable-corelocation=${if withCoreLocation then "yes" else "no"}"
+      ] ++ lib.optionals (pname == "gammastep") [
+        "--with-systemduserunitdir=${placeholder "out"}/share/systemd/user/"
+        "--enable-apparmor"
+      ];
+
+      buildInputs = [
+        gobject-introspection
+        gtk3
+        python
+      ] ++ lib.optional  withRandr        libxcb
+        ++ lib.optional  withGeoclue      geoclue
+        ++ lib.optional  withDrm          libdrm
+        ++ lib.optional  withQuartz       ApplicationServices
+        ++ lib.optionals withCoreLocation [ CoreLocation Foundation Cocoa ]
+        ++ lib.optional  withAppIndicator (if (pname != "gammastep")
+             then libappindicator
+             else libayatana-appindicator)
+        ;
+
+      pythonPath = [ pygobject3 pyxdg ];
+
+      preConfigure = "./bootstrap";
+
+      postFixup = "wrapPythonPrograms";
+
+      # the geoclue agent may inspect these paths and expect them to be
+      # valid without having the correct $PATH set
+      postInstall = if (pname == "gammastep") then ''
+        substituteInPlace $out/share/applications/gammastep.desktop \
+          --replace 'Exec=gammastep' "Exec=$out/bin/gammastep"
+        substituteInPlace $out/share/applications/gammastep-indicator.desktop \
+          --replace 'Exec=gammastep-indicator' "Exec=$out/bin/gammastep-indicator"
+      '' else ''
+        substituteInPlace $out/share/applications/redshift.desktop \
+          --replace 'Exec=redshift' "Exec=$out/bin/redshift"
+        substituteInPlace $out/share/applications/redshift-gtk.desktop \
+          --replace 'Exec=redshift-gtk' "Exec=$out/bin/redshift-gtk"
+      '';
+
+      enableParallelBuilding = true;
+    };
+in
+rec {
+  redshift = mkRedshift rec {
+    pname = "redshift";
+    version = "1.12";
+
+    src = fetchFromGitHub {
+      owner = "jonls";
+      repo = "redshift";
+      rev = "v${version}";
+      sha256 = "12cb4gaqkybp4bkkns8pam378izr2mwhr2iy04wkprs2v92j7bz6";
+    };
+
+    meta = with lib; {
+      description = "Screen color temperature manager";
+      longDescription = ''
+        Redshift adjusts the color temperature according to the position
+        of the sun. A different color temperature is set during night and
+        daytime. During twilight and early morning, the color temperature
+        transitions smoothly from night to daytime temperature to allow
+        your eyes to slowly adapt. At night the color temperature should
+        be set to match the lamps in your room.
+      '';
+      license = licenses.gpl3Plus;
+      homepage = "http://jonls.dk/redshift";
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ yegortimoshenko globin ];
+    };
+  };
+
+  redshift-wlr = mkRedshift {
+    pname = "redshift-wlr";
+    # upstream rebases so this is the push date
+    version = "2019-08-24";
+
+    src = fetchFromGitHub {
+      owner = "minus7";
+      repo = "redshift";
+      rev = "7da875d34854a6a34612d5ce4bd8718c32bec804";
+      sha256 = "0rs9bxxrw4wscf4a8yl776a8g880m5gcm75q06yx2cn3lw2b7v22";
+    };
+
+    meta = redshift.meta // {
+      description = redshift.meta.description + "(with wlroots patches)";
+      homepage = "https://github.com/minus7/redshift";
+    };
+  };
+
+  gammastep = mkRedshift rec {
+    pname = "gammastep";
+    version = "2.0.7";
+
+    src = fetchFromGitLab {
+      owner = "chinstrap";
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "sha256-78z2CQ+r7undbp+8E0mMDNWWl+RXeS5he/ax0VomRYY=";
+    };
+
+    meta = redshift.meta // {
+      name = "${pname}-${version}";
+      longDescription = "Gammastep"
+        + lib.removePrefix "Redshift" redshift.meta.longDescription;
+      homepage = "https://gitlab.com/chinstrap/gammastep";
+      maintainers = [ lib.maintainers.primeos ] ++ redshift.meta.maintainers;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/regextester/default.nix b/nixpkgs/pkgs/applications/misc/regextester/default.nix
new file mode 100644
index 000000000000..eac131d6ef72
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/regextester/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv
+, fetchFromGitHub
+, vala
+, gettext
+, libxml2
+, pkg-config
+, glib
+, gtk3
+, gnome3
+, meson
+, ninja
+, gobject-introspection
+, gsettings-desktop-schemas
+, pantheon
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "regextester";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "artemanufrij";
+    repo = "regextester";
+    rev = version;
+    sha256 = "1xwwv1hccni1mrbl58f7ly4qfq6738vn24bcbl2q346633cd7kx3";
+  };
+
+  nativeBuildInputs = [
+    vala
+    gettext
+    gobject-introspection
+    libxml2
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    pantheon.elementary-icon-theme
+    pantheon.granite
+    glib
+    gnome3.libgee
+    gsettings-desktop-schemas
+    gtk3
+  ];
+
+  postInstall = ''
+    ${glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  meta = with lib; {
+    description = "A desktop application to test regular expressions interactively";
+    homepage = "https://github.com/artemanufrij/regextester";
+    maintainers = with maintainers; [ samdroid-apps ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix b/nixpkgs/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix
new file mode 100644
index 000000000000..77538f243614
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, buildPythonApplication, fetchPypi, python3Packages }:
+
+buildPythonApplication rec {
+  pname = "remarkable-mouse";
+  version = "5.2.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0k2wjfcgnvb8yqn4c4ddfyyhrvl6hj61kn1ddnyp6ay9vklnw160";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ screeninfo paramiko pynput libevdev ];
+
+  # no tests
+  doCheck = false;
+  pythonImportsCheck = [ "remarkable_mouse" ];
+
+  meta = with lib; {
+    description = "A program to use a reMarkable as a graphics tablet";
+    homepage = "https://github.com/evidlo/remarkable_mouse";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.nickhu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/remarkable/rmapi/default.nix b/nixpkgs/pkgs/applications/misc/remarkable/rmapi/default.nix
new file mode 100644
index 000000000000..22a154da4fd0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/remarkable/rmapi/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "rmapi";
+  version = "0.0.13";
+
+  src = fetchFromGitHub {
+    owner = "juruen";
+    repo = "rmapi";
+    rev = "v${version}";
+    sha256 = "0qq8x37p7yxhcp5d5xss3pv5186xgg0hd6lbkqivhy5yjsd54c7b";
+  };
+
+  vendorSha256 = "1pa75rjns1kknl2gmfprdzc3f2z8dk44jkz6dmf8f3prj0z7x88c";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Go app that allows access to the ReMarkable Cloud API programmatically";
+    homepage = "https://github.com/juruen/rmapi";
+    changelog = "https://github.com/juruen/rmapi/blob/v${version}/CHANGELOG.md";
+    license = licenses.agpl3;
+    maintainers = [ maintainers.nickhu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/remarkable/rmview/default.nix b/nixpkgs/pkgs/applications/misc/remarkable/rmview/default.nix
new file mode 100644
index 000000000000..3148bf0ccf39
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/remarkable/rmview/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, python3Packages, wrapQtAppsHook }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "rmview";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "bordaigorl";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0zyngirpg808k1pkyhrk43qr3i8ilvfci0wzwk4b5f6f9cmjs7kb";
+  };
+
+  nativeBuildInputs = with python3Packages; [ pyqt5 wrapQtAppsHook ];
+  propagatedBuildInputs = with python3Packages; [ pyqt5 paramiko twisted ];
+
+  preBuild = ''
+    pyrcc5 -o src/rmview/resources.py resources.qrc
+  '';
+
+  preFixup = ''
+    wrapQtApp "$out/bin/rmview"
+  '';
+
+  meta = with lib; {
+    description = "Fast live viewer for reMarkable 1 and 2";
+    homepage = "https://github.com/bordaigorl/rmview";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.nickhu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rescuetime/default.nix b/nixpkgs/pkgs/applications/misc/rescuetime/default.nix
new file mode 100644
index 000000000000..69f0b26b9ec4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rescuetime/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, lib, fetchurl, dpkg, patchelf, qt5, libXtst, libXext, libX11, mkDerivation, makeWrapper, libXScrnSaver, writeScript, common-updater-scripts, curl, pup }:
+
+let
+  version = "2.16.5.1";
+  src =
+    if stdenv.hostPlatform.system == "i686-linux" then fetchurl {
+      name = "rescuetime-installer.deb";
+      url = "https://www.rescuetime.com/installers/rescuetime_${version}_i386.deb";
+      sha256 = "1xrvyy0higc1fbc8ascpaszvg2bl6x0a35bzmdq6dkay48hnrd8b";
+    } else fetchurl {
+      name = "rescuetime-installer.deb";
+      url = "https://www.rescuetime.com/installers/rescuetime_${version}_amd64.deb";
+      sha256 = "09ng0yal66d533vzfv27k9l2va03rqbqmsni43qi3hgx7w9wx5ii";
+    };
+in mkDerivation rec {
+  # https://www.rescuetime.com/updates/linux_release_notes.html
+  inherit version;
+  pname = "rescuetime";
+  inherit src;
+  nativeBuildInputs = [ dpkg ];
+  # avoid https://github.com/NixOS/patchelf/issues/99
+  dontStrip = true;
+  unpackPhase = ''
+    mkdir pkg
+    dpkg-deb -x $src pkg
+    sourceRoot=pkg
+  '';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp usr/bin/rescuetime $out/bin
+
+    ${patchelf}/bin/patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${lib.makeLibraryPath [ qt5.qtbase libXtst libXext libX11 libXScrnSaver ]}" \
+      $out/bin/rescuetime
+  '';
+
+  passthru.updateScript = writeScript "${pname}-updater" ''
+    #!${stdenv.shell}
+    set -eu -o pipefail
+    PATH=${lib.makeBinPath [curl pup common-updater-scripts]}:$PATH
+    latestVersion="$(curl -sS https://www.rescuetime.com/release-notes/linux | pup '.release:first-of-type h2 strong text{}' | tr -d '\n')"
+
+    for platform in ${lib.concatStringsSep " " meta.platforms}; do
+      # The script will not perform an update when the version attribute is up to date from previous platform run
+      # We need to clear it before each run
+      update-source-version ${pname} 0 $(yes 0 | head -64 | tr -d "\n") --system=$platform
+      update-source-version ${pname} "$latestVersion" --system=$platform
+    done
+  '';
+
+  meta = with lib; {
+    description = "Helps you understand your daily habits so you can focus and be more productive";
+    homepage    = "https://www.rescuetime.com";
+    maintainers = with maintainers; [ cstrahan ];
+    license     = licenses.unfree;
+    platforms   = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/robo3t/default.nix b/nixpkgs/pkgs/applications/misc/robo3t/default.nix
new file mode 100644
index 000000000000..30fd51fa9905
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/robo3t/default.nix
@@ -0,0 +1,79 @@
+{ lib, stdenv, fetchurl, zlib, glib, xorg, dbus, fontconfig, libGL,
+  freetype, xkeyboard_config, makeDesktopItem, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "robo3t";
+  version = "1.3.1";
+  rev = "7419c406";
+
+  src = fetchurl {
+    url = "https://download-test.robomongo.org/linux/robo3t-${version}-linux-x86_64-${rev}.tar.gz";
+    sha256 = "1mp5i8iahd4qkwgi5ix98hlg17ivw5da27n0drnr0wk458wn99hi";
+  };
+
+  icon = fetchurl {
+    url = "https://github.com/Studio3T/robomongo/raw/${version}/trash/install/linux/robomongo.png";
+    sha256 = "15li8536x600kkfkb3h6mw7y0f2ljkv951pc45dpiw036vldibv2";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "robo3t";
+    exec = "robo3t";
+    icon = icon;
+    comment = "Query GUI for mongodb";
+    desktopName = "Robo3T";
+    genericName = "MongoDB management tool";
+    categories = "Development;IDE;";
+  };
+
+  nativeBuildInputs = [makeWrapper];
+
+  ldLibraryPath = lib.makeLibraryPath [
+    stdenv.cc.cc
+    zlib
+    glib
+    xorg.libXi
+    xorg.libxcb
+    xorg.libXrender
+    xorg.libX11
+    xorg.libSM
+    xorg.libICE
+    xorg.libXext
+    dbus
+    fontconfig
+    freetype
+    libGL
+  ];
+
+  installPhase = ''
+    BASEDIR=$out/lib/robo3t
+
+    mkdir -p $BASEDIR/bin
+    cp bin/* $BASEDIR/bin
+
+    mkdir -p $BASEDIR/lib
+    cp -r lib/* $BASEDIR/lib
+
+    mkdir -p $out/share/applications
+    cp $desktopItem/share/applications/* $out/share/applications
+
+    mkdir -p $out/share/icons
+    cp ${icon} $out/share/icons/robomongo.png
+
+    patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2 $BASEDIR/bin/robo3t
+
+    mkdir $out/bin
+
+    makeWrapper $BASEDIR/bin/robo3t $out/bin/robo3t \
+      --suffix LD_LIBRARY_PATH : ${ldLibraryPath} \
+      --suffix QT_XKB_CONFIG_ROOT : ${xkeyboard_config}/share/X11/xkb
+  '';
+
+  meta = {
+    homepage = "https://robomongo.org/";
+    description = "Query GUI for mongodb";
+    platforms = [ "x86_64-linux" ];
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.eperuffo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/robomongo/default.nix b/nixpkgs/pkgs/applications/misc/robomongo/default.nix
new file mode 100644
index 000000000000..e8bba1f7a340
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/robomongo/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, fetchurl, zlib, glib, xorg, dbus, fontconfig,
+  freetype, xkeyboard_config, makeDesktopItem, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "robomongo";
+  version = "0.9.0";
+
+  src = fetchurl {
+    url = "https://download.robomongo.org/${version}/linux/robomongo-${version}-linux-x86_64-0786489.tar.gz";
+    sha256 = "1q8ahdz3afcw002p8dl2pybzkq4srk6bnikrz216yx1gswivdcad";
+  };
+
+  icon = fetchurl {
+    url = "https://github.com/Studio3T/robomongo/raw/${version}/trash/install/linux/robomongo.png";
+    sha256 = "15li8536x600kkfkb3h6mw7y0f2ljkv951pc45dpiw036vldibv2";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "robomongo";
+    exec = "robomongo";
+    icon = icon;
+    comment = "Query GUI for mongodb";
+    desktopName = "Robomongo";
+    genericName = "MongoDB management tool";
+    categories = "Development;IDE;mongodb;";
+  };
+
+  nativeBuildInputs = [makeWrapper];
+
+  ldLibraryPath = lib.makeLibraryPath [
+    stdenv.cc.cc
+    zlib
+    glib
+    xorg.libXi
+    xorg.libxcb
+    xorg.libXrender
+    xorg.libX11
+    xorg.libSM
+    xorg.libICE
+    xorg.libXext
+    dbus
+    fontconfig
+    freetype
+  ];
+
+  installPhase = ''
+    BASEDIR=$out/lib/robomongo
+
+    mkdir -p $BASEDIR/bin
+    cp bin/* $BASEDIR/bin
+
+    mkdir -p $BASEDIR/lib
+    cp -r lib/* $BASEDIR/lib
+
+    mkdir -p $out/share/applications
+    cp $desktopItem/share/applications/* $out/share/applications
+
+    mkdir -p $out/share/icons
+    cp ${icon} $out/share/icons/robomongo.png
+
+    patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 $BASEDIR/bin/robomongo
+
+    mkdir $out/bin
+
+    makeWrapper $BASEDIR/bin/robomongo $out/bin/robomongo \
+      --suffix LD_LIBRARY_PATH : ${ldLibraryPath} \
+      --suffix QT_XKB_CONFIG_ROOT : ${xkeyboard_config}/share/X11/xkb
+  '';
+
+  meta = {
+    homepage = "https://robomongo.org/";
+    description = "Query GUI for mongodb";
+    platforms = lib.intersectLists lib.platforms.linux lib.platforms.x86_64;
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.eperuffo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-emoji/0001-Patch-plugindir-to-output.patch b/nixpkgs/pkgs/applications/misc/rofi-emoji/0001-Patch-plugindir-to-output.patch
new file mode 100644
index 000000000000..9b9479b1b49a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-emoji/0001-Patch-plugindir-to-output.patch
@@ -0,0 +1,25 @@
+From 695e7a441fc28b874e65917fe2c0059b5b8ca749 Mon Sep 17 00:00:00 2001
+From: Cole Helbling <cole.e.helbling@outlook.com>
+Date: Sat, 28 Mar 2020 23:46:03 -0700
+Subject: [PATCH] Patch plugindir to output
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 75e476f..cb1ddf7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -55,7 +55,7 @@ PKG_CHECK_MODULES([glib],     [glib-2.0 >= 2.40 gio-unix-2.0 gmodule-2.0 ])
+ PKG_CHECK_MODULES([cairo],    [cairo])
+ PKG_CHECK_MODULES([rofi],     [rofi])
+ 
+-[rofi_PLUGIN_INSTALL_DIR]="`$PKG_CONFIG --variable=pluginsdir rofi`"
++[rofi_PLUGIN_INSTALL_DIR]="`echo $out/lib/rofi`"
+ AC_SUBST([rofi_PLUGIN_INSTALL_DIR])
+ 
+ LT_INIT([disable-static])
+-- 
+2.25.1
+
diff --git a/nixpkgs/pkgs/applications/misc/rofi-emoji/default.nix b/nixpkgs/pkgs/applications/misc/rofi-emoji/default.nix
new file mode 100644
index 000000000000..73d8999be5b7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-emoji/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, substituteAll
+, makeWrapper
+
+, autoreconfHook
+, pkg-config
+
+, cairo
+, glib
+, libnotify
+, rofi-unwrapped
+, wl-clipboard
+, xclip
+, xsel
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-emoji";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "Mange";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0knsvsdff2c7ww94120bq92735qrfriyd28mi0n72ccb2iikyi8b";
+  };
+
+  patches = [
+    # Look for plugin-related files in $out/lib/rofi
+    ./0001-Patch-plugindir-to-output.patch
+  ];
+
+  postPatch = ''
+    patchShebangs clipboard-adapter.sh
+  '';
+
+  postFixup = ''
+    chmod +x $out/share/rofi-emoji/clipboard-adapter.sh
+    wrapProgram $out/share/rofi-emoji/clipboard-adapter.sh \
+      --prefix PATH ":" ${lib.makeBinPath [ libnotify wl-clipboard xclip xsel ]}
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    cairo
+    glib
+    libnotify
+    makeWrapper
+    rofi-unwrapped
+    wl-clipboard
+    xclip
+    xsel
+  ];
+
+  meta = with lib; {
+    description = "An emoji selector plugin for Rofi";
+    homepage = "https://github.com/Mange/rofi-emoji";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cole-h ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-file-browser/default.nix b/nixpkgs/pkgs/applications/misc/rofi-file-browser/default.nix
new file mode 100644
index 000000000000..0f9067a7e39d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-file-browser/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, rofi, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-file-browser-extended";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "marvinkreis";
+    repo = pname;
+    rev = version;
+    sha256 = "10wk5sif3bmvsgyk2gdy0qhpv1b37zgzf89n3h0yh7pg195fi2gn";
+    fetchSubmodules = true;
+  };
+
+  prePatch = ''
+    substituteInPlace ./CMakeLists.txt \
+      --replace ' ''${ROFI_PLUGINS_DIR}' " $out/lib/rofi" \
+      --replace "/usr/share/" "$out/share/"
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ rofi gtk3 ];
+
+  ROFI_PLUGINS_DIR = "$out/lib/rofi";
+
+  dontUseCmakeBuildDir = true;
+
+  meta = with lib; {
+    description = "Use rofi to quickly open files";
+    homepage = "https://github.com/marvinkreis/rofi-file-browser-extended";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jluttine ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-menugen/default.nix b/nixpkgs/pkgs/applications/misc/rofi-menugen/default.nix
new file mode 100644
index 000000000000..6c9e5f6feff8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-menugen/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, rofi, gnused }:
+
+stdenv.mkDerivation rec {
+  rev = "168efd2608fdb88b1aff3e0244bda8402169f207";
+  name = "rofi-menugen-2015-12-28-${builtins.substring 0 7 rev}";
+  src = fetchFromGitHub {
+    owner = "octotep";
+    repo = "menugen";
+    inherit rev;
+    sha256 = "09fk9i6crw772qlc5zld35pcff1jq4jcag0syial2q000fbpjx5m";
+  };
+  patchPhase = ''
+    sed -i -e "s|menugenbase|$out/bin/rofi-menugenbase|" menugen
+    sed -i -e "s|rofi |${rofi}/bin/rofi |" menugen
+    sed -i -e "s|sed |${gnused}/bin/sed |" menugenbase
+  '';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp menugen $out/bin/rofi-menugen
+    cp menugenbase $out/bin/rofi-menugenbase
+  '';
+  meta = with lib; {
+    description = "Generates menu based applications using rofi";
+    homepage = "https://github.com/octotep/menugen";
+    maintainers = with maintainers; [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi/default.nix b/nixpkgs/pkgs/applications/misc/rofi/default.nix
new file mode 100644
index 000000000000..33a37e326127
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchurl
+, autoreconfHook, pkg-config, libxkbcommon, pango, which, git
+, cairo, libxcb, xcbutil, xcbutilwm, xcbutilxrm, libstartup_notification
+, bison, flex, librsvg, check
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-unwrapped";
+  version = "1.6.1";
+
+  src = fetchurl {
+    url = "https://github.com/davatorium/rofi/releases/download/${version}/rofi-${version}.tar.gz";
+    sha256 = "04glljqbf9ckkc6x6fv4x1gqmy468n1agya0kd8rxdvz24wzf7cd";
+  };
+
+  preConfigure = ''
+    patchShebangs "script"
+    # root not present in build /etc/passwd
+    sed -i 's/~root/~nobody/g' test/helper-expand.c
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libxkbcommon pango cairo git bison flex librsvg check
+    libstartup_notification libxcb xcbutil xcbutilwm xcbutilxrm which
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Window switcher, run dialog and dmenu replacement";
+    homepage = "https://github.com/davatorium/rofi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mbakke ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi/wrapper.nix b/nixpkgs/pkgs/applications/misc/rofi/wrapper.nix
new file mode 100644
index 000000000000..4e69f9cce145
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi/wrapper.nix
@@ -0,0 +1,33 @@
+{ symlinkJoin, lib, rofi-unwrapped, makeWrapper, hicolor-icon-theme, theme ? null, plugins ? [] }:
+
+symlinkJoin {
+  name = "rofi-${rofi-unwrapped.version}";
+
+  paths = [
+    rofi-unwrapped.out
+  ] ++ (lib.forEach plugins (p: p.out));
+
+  buildInputs = [ makeWrapper ];
+  preferLocalBuild = true;
+  passthru.unwrapped = rofi-unwrapped;
+  postBuild = ''
+    rm -rf $out/bin
+    mkdir $out/bin
+    ln -s ${rofi-unwrapped}/bin/* $out/bin
+
+    rm $out/bin/rofi
+    makeWrapper ${rofi-unwrapped}/bin/rofi $out/bin/rofi \
+      --prefix XDG_DATA_DIRS : ${hicolor-icon-theme}/share \
+      ${lib.optionalString (plugins != []) ''--prefix XDG_DATA_DIRS : ${lib.concatStringsSep ":" (lib.forEach plugins (p: "${p.out}/share"))}''} \
+      ${lib.optionalString (theme != null) ''--add-flags "-theme ${theme}"''} \
+      ${lib.optionalString (plugins != []) ''--add-flags "-plugin-path $out/lib/rofi"''}
+
+    rm $out/bin/rofi-theme-selector
+    makeWrapper ${rofi-unwrapped}/bin/rofi-theme-selector $out/bin/rofi-theme-selector \
+      --prefix XDG_DATA_DIRS : $out/share
+  '';
+
+  meta = rofi-unwrapped.meta // {
+    priority = (rofi-unwrapped.meta.priority or 0) - 1;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofimoji/default.nix b/nixpkgs/pkgs/applications/misc/rofimoji/default.nix
new file mode 100644
index 000000000000..ed97c17bfd93
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofimoji/default.nix
@@ -0,0 +1,48 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+
+, waylandSupport ? true
+, x11Support ? true
+
+, ConfigArgParse
+, pyxdg
+, rofi
+, wl-clipboard
+, wtype
+, xdotool
+, xsel
+}:
+
+buildPythonApplication rec {
+  pname = "rofimoji";
+  version = "4.3.0";
+
+  src = fetchFromGitHub {
+    owner = "fdw";
+    repo = "rofimoji";
+    rev = version;
+    sha256 = "08ayndpifr04njpijc5n5ii5nvibfpab39p6ngyyj0pb43792a8j";
+  };
+
+  # `rofi` and the `waylandSupport` and `x11Support` dependencies
+  # contain binaries needed at runtime.
+  propagatedBuildInputs = with lib; [ ConfigArgParse pyxdg rofi ]
+    ++ optionals waylandSupport [ wl-clipboard wtype ]
+    ++ optionals x11Support [ xdotool xsel ];
+
+  # The 'extractors' sub-module is used for development
+  # and has additional dependencies.
+  postPatch = ''
+    rm -rf extractors
+    substituteInPlace setup.py --replace 'pyxdg==0.26' 'pyxdg'
+  '';
+
+  meta = with lib; {
+    description = "A simple emoji and character picker for rofi";
+    homepage = "https://github.com/fdw/rofimoji";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ justinlovinger ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rootbar/default.nix b/nixpkgs/pkgs/applications/misc/rootbar/default.nix
new file mode 100644
index 000000000000..d50cefb2a718
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rootbar/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv
+, fetchhg
+, pkg-config
+, meson
+, ninja
+, gtk3
+, json_c
+, libpulseaudio
+, wayland
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rootbar";
+  version = "unstable-2020-11-13";
+
+  src = fetchhg {
+    url = "https://hg.sr.ht/~scoopta/rootbar";
+    rev = "a018e10cfc5e";
+    sha256 = "sha256-t6oDIYCVaCxaYy4bS1vxESaFDNxsx5JQLQK77eVuafE=";
+  };
+
+  nativeBuildInputs = [
+    meson ninja pkg-config wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    json_c
+    libpulseaudio
+    wayland
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/alexays/waybar";
+    description = "A bar for Wayland WMs";
+    longDescription = ''
+      Root Bar is a bar for wlroots based wayland compositors such as sway and
+      was designed to address the lack of good bars for wayland.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rsclock/default.nix b/nixpkgs/pkgs/applications/misc/rsclock/default.nix
new file mode 100644
index 000000000000..d7b38e2d665d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rsclock/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rsClock";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "valebes";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1i93qkz6d8sbk78i4rvx099hnn4lklp4cjvanpm9ssv8na4rqvh2";
+  };
+
+  cargoSha256 = "01dhkis6zswq1y40n7sdq9xv1sp61f2v7nfqbkicyjngmdrmcgrl";
+
+  meta = with lib; {
+    description = "A simple terminal clock written in Rust";
+    homepage = "https://github.com/valebes/rsClock";
+    license = licenses.mit;
+    maintainers = with maintainers; [valebes];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rsibreak/default.nix b/nixpkgs/pkgs/applications/misc/rsibreak/default.nix
new file mode 100644
index 000000000000..9f765793dc9a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rsibreak/default.nix
@@ -0,0 +1,28 @@
+{
+  mkDerivation, fetchurl, lib,
+  extra-cmake-modules, kdoctools,
+  knotifyconfig, kidletime, kwindowsystem, ktextwidgets, kcrash
+}:
+
+let
+  pname = "rsibreak";
+  version = "0.12";
+  revision = ".13";
+in mkDerivation rec {
+  name = "rsibreak-${version}${revision}";
+
+  src = fetchurl {
+    url = "https://download.kde.org/stable/${pname}/${version}/${name}.tar.xz";
+    sha256 = "N0C+f788fq5yotSC54H2K4WDc6PnGi8Nh/vXL4v0fxo=";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+  propagatedBuildInputs = [ knotifyconfig kidletime kwindowsystem ktextwidgets kcrash ];
+
+  meta = with lib; {
+    description = "Takes care of your health and regularly breaks your work to avoid repetitive strain injury (RSI)";
+    license = licenses.gpl2;
+    homepage = "https://www.kde.org/applications/utilities/rsibreak/";
+    maintainers = with maintainers; [ vandenoever ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rss-bridge-cli/default.nix b/nixpkgs/pkgs/applications/misc/rss-bridge-cli/default.nix
new file mode 100644
index 000000000000..4ab79440b239
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rss-bridge-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, writeShellScriptBin, rss-bridge, php }:
+
+let
+  phpWithExts = (php.withExtensions
+    ({ all, ... }: with all; [
+      curl
+      filter
+      iconv
+      json
+      mbstring
+      openssl
+      simplexml
+      sqlite3
+    ])
+  );
+  phpBin = "${phpWithExts}/bin/php";
+in (writeShellScriptBin "rss-bridge-cli" ''
+  ${phpBin} ${rss-bridge}/index.php "$@"
+'').overrideAttrs (oldAttrs: rec {
+  version = rss-bridge.version;
+
+  meta = with lib; {
+    description = "Command-line interface for RSS-Bridge";
+    homepage = "https://github.com/RSS-Bridge/rss-bridge";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ ymeister ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/rtv/default.nix b/nixpkgs/pkgs/applications/misc/rtv/default.nix
new file mode 100644
index 000000000000..343936962329
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rtv/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages }:
+
+with python3Packages;
+buildPythonApplication rec {
+  version = "1.27.0";
+  pname = "rtv";
+
+  src = fetchFromGitHub {
+    owner = "michael-lazar";
+    repo = "rtv";
+    rev = "v${version}";
+    sha256 = "1hw7xy2kjxq7y3wcibcz4l7zj8icvigialqr17l362xry0y17y5j";
+  };
+
+  # Tests try to access network
+  doCheck = false;
+
+  checkPhase = ''
+    py.test
+  '';
+
+  checkInputs = [
+    coverage
+    coveralls
+    docopt
+    mock
+    pylint
+    pytest
+    vcrpy
+  ];
+
+  propagatedBuildInputs = [
+    beautifulsoup4
+    decorator
+    kitchen
+    requests
+    six
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/michael-lazar/rtv";
+    description = "Browse Reddit from your Terminal";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer wedens ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/safeeyes/default.nix b/nixpkgs/pkgs/applications/misc/safeeyes/default.nix
new file mode 100644
index 000000000000..f6bb7133d999
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/safeeyes/default.nix
@@ -0,0 +1,70 @@
+{ lib, python3Packages, gobject-introspection, libappindicator-gtk3, libnotify, gtk3, gnome3, xprintidle-ng, wrapGAppsHook, gdk-pixbuf, shared-mime-info, librsvg
+}:
+
+let inherit (python3Packages) python buildPythonApplication fetchPypi;
+
+in buildPythonApplication rec {
+  pname = "safeeyes";
+  version = "2.0.9";
+  namePrefix = "";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "13q06jv8hm0dynmr3g5pf1m4j3w9iabrpz1nhpl02f7x0d90whg2";
+  };
+
+  buildInputs = [
+    gtk3
+    gobject-introspection
+    gnome3.adwaita-icon-theme
+    gnome3.adwaita-icon-theme
+  ];
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    Babel
+    psutil
+    xlib
+    pygobject3
+    dbus-python
+
+    libappindicator-gtk3
+    libnotify
+    xprintidle-ng
+  ];
+
+  # patch smartpause plugin
+  postPatch = ''
+    sed -i \
+      -e 's!xprintidle!xprintidle-ng!g' \
+      safeeyes/plugins/smartpause/plugin.py
+
+    sed -i \
+      -e 's!xprintidle!xprintidle-ng!g' \
+      safeeyes/plugins/smartpause/config.json
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix XDG_DATA_DIRS : "${gdk-pixbuf}/share"
+      --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+      --prefix XDG_DATA_DIRS : "${librsvg}/share"
+
+      # safeeyes images
+      --prefix XDG_DATA_DIRS : "$out/lib/${python.libPrefix}/site-packages/usr/share"
+    )
+  '';
+
+  doCheck = false; # no tests
+
+  meta = {
+    homepage = "http://slgobinath.github.io/SafeEyes";
+    description = "Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder. A Free and Open Source Linux alternative to EyeLeo";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ srghma ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sampler/default.nix b/nixpkgs/pkgs/applications/misc/sampler/default.nix
new file mode 100644
index 000000000000..b68a3a98e34c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sampler/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, alsaLib }:
+
+buildGoModule rec {
+  pname = "sampler";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "sqshq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1lanighxhnn28dfzils7i55zgxbw2abd6y723mq7x9wg1aa2bd0z";
+  };
+
+  vendorSha256 = "04nywhkil5xkipcibrp6vi63rfcvqgv7yxbxmmrhqys2cdxfvazv";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  buildInputs = [ alsaLib ];
+
+  meta = with lib; {
+    description = "Tool for shell commands execution, visualization and alerting";
+    homepage = "https://sampler.dev";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ uvnikita ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sbagen/default.nix b/nixpkgs/pkgs/applications/misc/sbagen/default.nix
new file mode 100644
index 000000000000..215447ed4e9f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sbagen/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  name = "sbagen-1.4.4";
+
+  src = fetchurl {
+    url = "https://uazu.net/sbagen/${name}.tgz";
+    sha256 = "0w62yk1b0hq79kl0angma897yqa8p1ww0dwydf3zlwav333prkd2";
+  };
+
+  postPatch = ''
+    patchShebangs ./mk
+  '';
+
+  buildPhase = "./mk";
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/sbagen/doc}
+    cp -r --target-directory=$out/share/sbagen examples scripts river1.ogg river2.ogg
+    cp sbagen $out/bin
+    cp --target-directory=$out/share/sbagen/doc README.txt SBAGEN.txt theory{,2}.txt {wave,holosync,focus,TODO}.txt
+  '';
+
+  meta = {
+    description = "Binaural sound generator";
+    homepage = "http://uazu.net/sbagen";
+    license = lib.licenses.gpl2;
+    platforms = [ "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sc-im/default.nix b/nixpkgs/pkgs/applications/misc/sc-im/default.nix
new file mode 100644
index 000000000000..0ae7a5c1ec09
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sc-im/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, yacc, ncurses, libxml2, libzip, libxls, pkg-config }:
+
+stdenv.mkDerivation rec {
+  version = "0.7.0";
+  pname = "sc-im";
+
+  src = fetchFromGitHub {
+    owner = "andmarti1424";
+    repo = "sc-im";
+    rev = "v${version}";
+    sha256 = "0xi0n9qzby012y2j7hg4fgcwyly698sfi4i9gkvy0q682jihprbk";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ yacc ncurses libxml2 libzip libxls ];
+
+  buildPhase = ''
+    cd src
+
+    sed 's/LDLIBS += -lm/& -lncurses/' -i Makefile
+
+    sed -e "\|^prefix  = /usr/local|   s|/usr/local|$out|" \
+        -e "\|^#LDLIBS += -lxlsreader| s|^#||            " \
+        -e "\|^#CFLAGS += -DXLS|       s|^#||            " \
+        -i Makefile
+
+    make
+    export DESTDIR=$out
+  '';
+
+  installPhase = ''
+    make install prefix=
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/andmarti1424/sc-im";
+    description = "SC-IM - Spreadsheet Calculator Improvised - SC fork";
+    license = licenses.bsdOriginal;
+    maintainers = [ ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/sdcv/default.nix b/nixpkgs/pkgs/applications/misc/sdcv/default.nix
new file mode 100644
index 000000000000..391ef82daf13
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sdcv/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, glib, gettext, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "sdcv";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "Dushistov";
+    repo = "sdcv";
+    rev = "v${version}";
+    sha256 = "144qpl9b8r2php0zhi9b7vg6flpvdgjy6yfaipydwwhxi4wy9600";
+  };
+
+  hardeningDisable = [ "format" ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ glib gettext readline ];
+
+  preInstall = ''
+    mkdir locale
+  '';
+
+  NIX_CFLAGS_COMPILE = "-D__GNU_LIBRARY__";
+
+  meta = with lib; {
+    homepage = "https://dushistov.github.io/sdcv/";
+    description = "Console version of StarDict";
+    maintainers = with maintainers; [ lovek323 ];
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sent/default.nix b/nixpkgs/pkgs/applications/misc/sent/default.nix
new file mode 100644
index 000000000000..f4b811e0752d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sent/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, farbfeld, libX11, libXft, makeWrapper
+, patches ? [] }:
+
+stdenv.mkDerivation rec {
+  name = "sent-1";
+
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/${name}.tar.gz";
+    sha256 = "0cxysz5lp25mgww73jl0mgip68x7iyvialyzdbriyaff269xxwvv";
+  };
+
+  buildInputs = [ libX11 libXft ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  # unpacking doesn't create a directory
+  sourceRoot = ".";
+
+  inherit patches;
+
+  installFlags = [ "PREFIX=$(out)" ];
+  postInstall = ''
+    wrapProgram "$out/bin/sent" --prefix PATH : "${farbfeld}/bin"
+  '';
+
+  meta = with lib; {
+    description = "A simple plaintext presentation tool";
+    homepage = "https://tools.suckless.org/sent/";
+    license = licenses.isc;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sequeler/default.nix b/nixpkgs/pkgs/applications/misc/sequeler/default.nix
new file mode 100644
index 000000000000..c8a0e0175fae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sequeler/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, nix-update-script
+, vala, meson, ninja, pkg-config, pantheon, gettext, wrapGAppsHook, python3, desktop-file-utils
+, gtk3, glib, libgee, libgda, gtksourceview, libxml2, libsecret, libssh2 }:
+
+
+let
+  sqlGda = libgda.override {
+    mysqlSupport = true;
+    postgresSupport = true;
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "sequeler";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "Alecaddd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "090plqnby2wxzr1waq5kz89w3269j363mgxwfz9g7qg55lddaahz";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config vala gettext wrapGAppsHook python3 desktop-file-utils ];
+
+  buildInputs = [ gtk3 glib pantheon.granite libgee sqlGda gtksourceview libxml2 libsecret libssh2 ];
+
+  postPatch = ''
+    chmod +x build-aux/meson_post_install.py
+    patchShebangs build-aux/meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Friendly SQL Client";
+    longDescription = ''
+      Sequeler is a native Linux SQL client built in Vala and Gtk. It allows you
+      to connect to your local and remote databases, write SQL in a handy text
+      editor with language recognition, and visualize SELECT results in a
+      Gtk.Grid Widget.
+    '';
+    homepage = "https://github.com/Alecaddd/sequeler";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.etu ] ++ pantheon.maintainers;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sequelpro/default.nix b/nixpkgs/pkgs/applications/misc/sequelpro/default.nix
new file mode 100644
index 000000000000..dd1aca73b7db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sequelpro/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, undmg }:
+
+stdenv.mkDerivation {
+  pname = "sequel-pro";
+  version = "1.1.2";
+
+  src = fetchurl {
+    url = "https://github.com/sequelpro/sequelpro/releases/download/release-1.1.2/sequel-pro-1.1.2.dmg";
+    sha256 = "1il7yc3f0yzxkra27bslnmka5ycxzx0q4m3xz2j9r7iyq5izsd3v";
+  };
+
+  buildInputs = [ undmg ];
+  installPhase = ''
+    mkdir -p "$out/Applications/Sequel Pro.app"
+    cp -R . "$out/Applications/Sequel Pro.app"
+    chmod +x "$out/Applications/Sequel Pro.app/Contents/MacOS/Sequel Pro"
+  '';
+
+  meta = {
+    description = "MySQL database management for macOS";
+    homepage = "http://www.sequelpro.com/";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sidequest/default.nix b/nixpkgs/pkgs/applications/misc/sidequest/default.nix
new file mode 100644
index 000000000000..6dad2eaf8128
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sidequest/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, lib, fetchurl, buildFHSUserEnv, makeDesktopItem, makeWrapper, atomEnv, libuuid, at-spi2-atk, icu, openssl, zlib }:
+  let
+    pname = "sidequest";
+    version = "0.10.11";
+
+    desktopItem = makeDesktopItem rec {
+      name = "SideQuest";
+      exec = "SideQuest";
+      desktopName = name;
+      genericName = "VR App Store";
+      categories = "Settings;PackageManager;";
+    };
+
+    sidequest = stdenv.mkDerivation {
+      inherit pname version;
+
+      src = fetchurl {
+        url = "https://github.com/the-expanse/SideQuest/releases/download/v${version}/SideQuest-${version}.tar.xz";
+        sha256 = "0fw952kdh1gn00y6sx2ag0rnb2paxq9ikg4bzgmbj7rrd1c6l2k9";
+      };
+
+      buildInputs = [ makeWrapper ];
+
+      buildCommand = ''
+        mkdir -p "$out/lib/SideQuest" "$out/bin"
+        tar -xJf "$src" -C "$out/lib/SideQuest" --strip-components 1
+
+        ln -s "$out/lib/SideQuest/sidequest" "$out/bin"
+
+        fixupPhase
+
+        # mkdir -p "$out/share/applications"
+        # ln -s "${desktopItem}/share/applications/*" "$out/share/applications"
+
+        patchelf \
+          --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+          --set-rpath "${atomEnv.libPath}/lib:${lib.makeLibraryPath [libuuid at-spi2-atk]}:$out/lib/SideQuest" \
+          "$out/lib/SideQuest/sidequest"
+      '';
+    };
+  in buildFHSUserEnv {
+    name = "SideQuest";
+
+    passthru = {
+      inherit pname version;
+
+      meta = with lib; {
+        description = "An open app store and side-loading tool for Android-based VR devices such as the Oculus Go, Oculus Quest or Moverio BT 300";
+        homepage = "https://github.com/the-expanse/SideQuest";
+        downloadPage = "https://github.com/the-expanse/SideQuest/releases";
+        license = licenses.mit;
+        maintainers = with maintainers; [ joepie91 rvolosatovs ];
+        platforms = [ "x86_64-linux" ];
+      };
+    };
+
+    targetPkgs = pkgs: [
+      sidequest
+      # Needed in the environment on runtime, to make QuestSaberPatch work
+      icu openssl zlib
+    ];
+
+    extraInstallCommands = ''
+      mkdir -p "$out/share/applications"
+      ln -s ${desktopItem}/share/applications/* "$out/share/applications"
+    '';
+
+    runScript = "sidequest";
+  }
diff --git a/nixpkgs/pkgs/applications/misc/sigal/default.nix b/nixpkgs/pkgs/applications/misc/sigal/default.nix
new file mode 100644
index 000000000000..f2333aa99420
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sigal/default.nix
@@ -0,0 +1,38 @@
+{ lib, python3Packages, ffmpeg_3 }:
+
+python3Packages.buildPythonApplication rec {
+  version = "2.1.1";
+  pname   = "sigal";
+
+  src = python3Packages.fetchPypi {
+    inherit version pname;
+    sha256 = "0l07p457svznirz7qllgyl3qbhiisv7klhz7cbdw6417hxf9bih8";
+  };
+
+  disabled = !(python3Packages.pythonAtLeast "3.6");
+
+  checkInputs = with python3Packages; [ pytest ];
+  propagatedBuildInputs = with python3Packages; [
+    jinja2
+    markdown
+    pillow
+    pilkit
+    clint
+    click
+    blinker
+    natsort
+    setuptools_scm
+  ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${ffmpeg_3}/bin" ];
+
+  # No tests included
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Yet another simple static gallery generator";
+    homepage    = "http://sigal.saimon.org/en/latest/index.html";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ domenkozar matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/signumone-ks/default.nix b/nixpkgs/pkgs/applications/misc/signumone-ks/default.nix
new file mode 100644
index 000000000000..aeea3ff5daa3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/signumone-ks/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, dpkg, autoPatchelfHook, makeWrapper,
+  atk, ffmpeg, gdk-pixbuf, glibc, gtk3, libav_0_8, libXtst }:
+
+stdenv.mkDerivation rec {
+  pname = "signumone-ks";
+  version = "3.1.3";
+
+  src = fetchurl {
+    url = "https://cdn-dist.signum.one/${version}/${pname}-${version}.deb";
+    sha256 = "00wlya3kb6qac2crflm86km9r48r29bvngjq1wgzj9w2xv0q32b9";
+  };
+
+  # Necessary to avoid using multiple ffmpeg and gtk libs
+  autoPatchelfIgnoreMissingDeps = true;
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    makeWrapper
+  ];
+
+  buildInputs = [
+    atk glibc gdk-pixbuf stdenv.cc.cc ffmpeg
+    libav_0_8 gtk3 libXtst
+  ];
+
+  libPath = lib.makeLibraryPath buildInputs;
+
+  unpackPhase = ''
+    dpkg-deb -x ${src} ./
+  '';
+
+  installPhase = ''
+    DESKTOP_PATH=$out/share/applications/signumone-ks.desktop
+
+    mkdir -p $out/bin $out/share/applications
+    mv opt/SignumOne-KS/SignumOne-KS.desktop $DESKTOP_PATH
+    mv opt $out
+
+    substituteInPlace $DESKTOP_PATH --replace 'Exec=/opt/SignumOne-KS' Exec=$out/bin
+    substituteInPlace $DESKTOP_PATH --replace 'Icon=' Icon=$out
+
+    makeWrapper $out/opt/SignumOne-KS/SignumOne-KS \
+      $out/bin/SignumOne-KS \
+      --prefix LD_LIBRARY_PATH : ${libPath}
+  '';
+
+  meta = with lib; {
+    description = "Digital signature tool for Costa Rican electronic invoicing";
+    homepage = "https://signum.one/download.html";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/simplenote/default.nix b/nixpkgs/pkgs/applications/misc/simplenote/default.nix
new file mode 100644
index 000000000000..840b37351c79
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/simplenote/default.nix
@@ -0,0 +1,97 @@
+{ atomEnv
+, autoPatchelfHook
+, dpkg
+, fetchurl
+, makeDesktopItem
+, makeWrapper
+, lib
+, stdenv
+, udev
+, wrapGAppsHook
+}:
+
+let
+  inherit (stdenv.hostPlatform) system;
+
+  throwSystem = throw "Unsupported system: ${system}";
+
+  pname = "simplenote";
+
+  version = "2.2.0";
+
+  sha256 = {
+    x86_64-linux = "123b0fh14068s2z3k6s5mmh46xwlz02qfnpmj838zlm5hckjmifv";
+  }.${system} or throwSystem;
+
+  meta = with lib; {
+    description = "The simplest way to keep notes";
+    homepage = "https://github.com/Automattic/simplenote-electron";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [
+      kiwi
+    ];
+    platforms = [
+      "x86_64-linux"
+    ];
+  };
+
+  linux = stdenv.mkDerivation rec {
+    inherit pname version meta;
+
+    src = fetchurl {
+      url =
+        "https://github.com/Automattic/simplenote-electron/releases/download/"
+        + "v${version}/Simplenote-linux-${version}-amd64.deb";
+      inherit sha256;
+    };
+
+    desktopItem = makeDesktopItem {
+      categories = "Development";
+      comment = "Simplenote for Linux";
+      desktopName = "Simplenote";
+      exec = "simplenote %U";
+      icon = "simplenote";
+      name = "simplenote";
+      startupNotify = "true";
+      type = "Application";
+    };
+
+    dontBuild = true;
+    dontConfigure = true;
+    dontPatchELF = true;
+    dontWrapGApps = true;
+
+    nativeBuildInputs = [
+      autoPatchelfHook
+      dpkg
+      makeWrapper
+      wrapGAppsHook
+    ];
+
+    buildInputs = atomEnv.packages;
+
+    unpackPhase = "dpkg-deb -x $src .";
+
+    installPhase = ''
+      mkdir -p "$out/bin"
+      cp -R "opt" "$out"
+      cp -R "usr/share" "$out/share"
+      chmod -R g-w "$out"
+
+      mkdir -p "$out/share/applications"
+      cp "${desktopItem}/share/applications/"* "$out/share/applications"
+    '';
+
+    runtimeDependencies = [
+      (lib.getLib udev)
+    ];
+
+    postFixup = ''
+      makeWrapper $out/opt/Simplenote/simplenote $out/bin/simplenote \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc ] }" \
+        "''${gappsWrapperArgs[@]}"
+    '';
+  };
+
+in
+linux
diff --git a/nixpkgs/pkgs/applications/misc/sl1-to-photon/default.nix b/nixpkgs/pkgs/applications/misc/sl1-to-photon/default.nix
new file mode 100644
index 000000000000..a8a0bfb1e10a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sl1-to-photon/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, pillow
+, pyside2
+, numpy
+, pyphotonfile
+, shiboken2
+, which
+}:
+let
+  version = "0.1.3";
+in
+ buildPythonApplication rec {
+  pname = "sl1-to-photon";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "fookatchu";
+    repo = "SL1toPhoton";
+    rev = "v${version}";
+    sha256 = "1hmb74rcky3nax4lxn7pw6lcd5a66fdbwrm11c84zb31xb51bakw";
+  };
+
+  propagatedBuildInputs = [ pyphotonfile pillow numpy pyside2 shiboken2 ];
+
+  format = "other";
+
+  installPhase = ''
+    install -D -m 0755 SL1_to_Photon.py $out/bin/${pname}
+    sed -i '1i#!/usr/bin/env python' $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    maintainers = [ maintainers.cab404 ];
+    license = licenses.gpl3Plus;
+    description = "Tool for converting Slic3r PE's SL1 files to Photon files for the Anycubic Photon 3D-Printer";
+    homepage = "https://github.com/fookatchu/SL1toPhoton";
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/slade/default.nix b/nixpkgs/pkgs/applications/misc/slade/default.nix
new file mode 100644
index 000000000000..e9ba7b2a8f31
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slade/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, wxGTK, gtk2, sfml, fluidsynth, curl, freeimage, ftgl, glew, zip }:
+
+stdenv.mkDerivation rec {
+  pname = "slade";
+  version = "3.1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "sirjuddington";
+    repo = "SLADE";
+    rev = version;
+    sha256 = "0mdn59jm6ab4cdh99bgvadif3wdlqmk5mq635gg7krq35njgw6f6";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config zip ];
+  buildInputs = [ wxGTK gtk2 sfml fluidsynth curl freeimage ftgl glew ];
+
+  meta = with lib; {
+    description = "Doom editor";
+    homepage = "http://slade.mancubus.net/";
+    license = licenses.gpl2;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/slade/git.nix b/nixpkgs/pkgs/applications/misc/slade/git.nix
new file mode 100644
index 000000000000..dfbfbe556699
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slade/git.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, wxGTK, gtk2, sfml, fluidsynth, curl, freeimage, ftgl, glew, zip }:
+
+stdenv.mkDerivation {
+  name = "slade-git-3.1.2.2018.01.29";
+
+  src = fetchFromGitHub {
+    owner = "sirjuddington";
+    repo = "SLADE";
+    rev = "f7409c504b40c4962f419038db934c32688ddd2e";
+    sha256 = "14icxiy0r9rlcc10skqs1ylnxm1f0f3irhzfmx4sazq0pjv5ivld";
+  };
+
+  cmakeFlags = ["-DNO_WEBVIEW=1"];
+  nativeBuildInputs = [ cmake pkg-config zip ];
+  buildInputs = [ wxGTK gtk2 sfml fluidsynth curl freeimage ftgl glew ];
+
+  meta = with lib; {
+    description = "Doom editor";
+    homepage = "http://slade.mancubus.net/";
+    license = licenses.gpl2Plus;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = with maintainers; [ ertes ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sleepyhead/default.nix b/nixpkgs/pkgs/applications/misc/sleepyhead/default.nix
new file mode 100644
index 000000000000..bf8a9efb9fd0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sleepyhead/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, mkDerivation, fetchgit, zlib, libGLU, libX11, qtbase, qtwebkit, qtserialport, wrapQtAppsHook }:
+
+let
+  name = "sleepyhead-${version}";
+  version = "1.0.0-beta-git";
+in mkDerivation {
+  inherit name;
+
+  src = fetchgit {
+    url = "https://gitlab.com/sleepyhead/sleepyhead-code.git";
+    rev = "9e2329d8bca45693231b5e3dae80063717c24578";
+    sha256 = "0448z8gyaxpgpnksg34lzmffj36jdpm0ir4xxa5gvzagkx0wk07h";
+  };
+
+  buildInputs = [
+    qtbase qtwebkit qtserialport
+    zlib
+    libGLU
+    libX11
+  ];
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  patchPhase = ''
+    patchShebangs configure
+  '';
+
+  installPhase = if stdenv.isDarwin then ''
+    mkdir -p $out/Applications
+    cp -r sleepyhead/SleepyHead.app $out/Applications
+  '' else ''
+    mkdir -p $out/bin
+    cp sleepyhead/SleepyHead $out/bin
+  '';
+
+  postFixup = lib.optionalString stdenv.isDarwin ''
+    wrapQtApp "$out/Applications/SleepyHead.app/Contents/MacOS/SleepyHead"
+  '';
+
+  meta = with lib; {
+    homepage = "https://sleepyhead.jedimark.net/";
+    description = "Review and explore data produced by CPAP and related machines";
+    longDescription = ''
+      SleepyHead is cross platform, opensource sleep tracking program for reviewing CPAP and Oximetry data, which are devices used in the treatment of Sleep Disorders like Obstructive Sleep Apnea.
+    '';
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = [ maintainers.krav ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/slic3r/boost-compile-error.patch b/nixpkgs/pkgs/applications/misc/slic3r/boost-compile-error.patch
new file mode 100644
index 000000000000..4dbdb85f743d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slic3r/boost-compile-error.patch
@@ -0,0 +1,12 @@
+diff --git a/xs/src/libslic3r/GCodeSender.hpp b/xs/src/libslic3r/GCodeSender.hpp
+index cc0b2983..0f39f5a3 100644
+--- a/xs/src/libslic3r/GCodeSender.hpp
++++ b/xs/src/libslic3r/GCodeSender.hpp
+@@ -9,6 +9,7 @@
+ #include <boost/asio.hpp>
+ #include <boost/bind.hpp>
+ #include <boost/thread.hpp>
++#include <boost/core/noncopyable.hpp>
+ 
+ namespace Slic3r {
+ 
diff --git a/nixpkgs/pkgs/applications/misc/slic3r/default.nix b/nixpkgs/pkgs/applications/misc/slic3r/default.nix
new file mode 100644
index 000000000000..49ff51c2f485
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slic3r/default.nix
@@ -0,0 +1,90 @@
+{ lib, stdenv, fetchgit, perl, makeWrapper
+, makeDesktopItem, which, perlPackages, boost
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.3.0";
+  pname = "slic3r";
+
+  src = fetchgit {
+    url = "git://github.com/alexrj/Slic3r";
+    rev = version;
+    sha256 = "1pg4jxzb7f58ls5s8mygza8kqdap2c50kwlsdkf28bz1xi611zbi";
+  };
+
+  buildInputs =
+  [boost] ++
+  (with perlPackages; [ perl makeWrapper which
+    EncodeLocale MathClipper ExtUtilsXSpp
+    MathConvexHullMonotoneChain MathGeometryVoronoi MathPlanePath Moo
+    IOStringy ClassXSAccessor Wx GrowlGNTP NetDBus ImportInto XMLSAX
+    ExtUtilsMakeMaker OpenGL WxGLCanvas ModuleBuild LWP
+    ExtUtilsCppGuess ModuleBuildWithXSpp ExtUtilsTypemapsDefault
+    DevelChecklib locallib
+  ]);
+
+  desktopItem = makeDesktopItem {
+    name = "slic3r";
+    exec = "slic3r";
+    icon = "slic3r";
+    comment = "G-code generator for 3D printers";
+    desktopName = "Slic3r";
+    genericName = "3D printer tool";
+    categories = "Development;";
+  };
+
+  prePatch = ''
+    # In nix ioctls.h isn't available from the standard kernel-headers package
+    # on other distributions. As the copy in glibc seems to be identical to the
+    # one in the kernel, we use that one instead.
+    sed -i 's|"/usr/include/asm-generic/ioctls.h"|<asm-generic/ioctls.h>|g' xs/src/libslic3r/GCodeSender.cpp
+  '';
+
+  # note the boost-compile-error is fixed in
+  # https://github.com/slic3r/Slic3r/commit/90f108ae8e7a4315f82e317f2141733418d86a68
+  # this patch can be probably be removed in the next version after 1.3.0
+  patches = lib.optional (lib.versionAtLeast boost.version "1.56.0") ./boost-compile-error.patch;
+
+  buildPhase = ''
+    export SLIC3R_NO_AUTO=true
+    export LD=$CXX
+    export PERL5LIB="./xs/blib/arch/:./xs/blib/lib:$PERL5LIB"
+
+    substituteInPlace Build.PL \
+      --replace "0.9918" "0.9923" \
+      --replace "eval" ""
+
+    pushd xs
+      perl Build.PL
+      perl Build
+    popd
+
+    perl Build.PL --gui
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/share/slic3r/"
+    cp -r * "$out/share/slic3r/"
+    wrapProgram "$out/share/slic3r/slic3r.pl" \
+      --prefix PERL5LIB : "$out/share/slic3r/xs/blib/arch:$out/share/slic3r/xs/blib/lib:$PERL5LIB"
+    mkdir -p "$out/bin"
+    ln -s "$out/share/slic3r/slic3r.pl" "$out/bin/slic3r"
+    mkdir -p "$out/share/pixmaps/"
+    ln -s "$out/share/slic3r/var/Slic3r.png" "$out/share/pixmaps/slic3r.png"
+    mkdir -p "$out/share/applications"
+    cp "$desktopItem"/share/applications/* "$out/share/applications/"
+  '';
+
+  meta = with lib; {
+    description = "G-code generator for 3D printers";
+    longDescription = ''
+      Slic3r is the tool you need to convert a digital 3D model into printing
+      instructions for your 3D printer. It cuts the model into horizontal
+      slices (layers), generates toolpaths to fill them and calculates the
+      amount of material to be extruded.'';
+    homepage = "https://slic3r.org/";
+    license = licenses.agpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/slmenu/default.nix b/nixpkgs/pkgs/applications/misc/slmenu/default.nix
new file mode 100644
index 000000000000..16145a915feb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slmenu/default.nix
@@ -0,0 +1,30 @@
+{lib, stdenv, fetchhg}:
+let
+  s =
+  rec {
+    baseName = "slmenu";
+    version = "hg-${date}";
+    date = "2012-02-01";
+    name = "${baseName}-${version}";
+    url = "https://bitbucket.org/rafaelgg/slmenu/";
+    rev = "7e74fa5db73e8b018da48d50dbbaf11cb5c62d13";
+    sha256 = "0zb7mm8344d3xmvrl62psazcabfk75pp083jqkmywdsrikgjagv6";
+  };
+  buildInputs = [
+  ];
+in
+stdenv.mkDerivation {
+  inherit (s) name version;
+  inherit buildInputs;
+  src = fetchhg {
+    inherit (s) url sha256;
+  };
+  makeFlags = [ "PREFIX=$(out)" ];
+  meta = {
+    inherit (s) version;
+    description = "A console dmenu-like tool";
+    license = lib.licenses.mit;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/slstatus/default.nix b/nixpkgs/pkgs/applications/misc/slstatus/default.nix
new file mode 100644
index 000000000000..613d2f8e78bf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slstatus/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchgit, pkg-config, writeText, libX11, conf ? null, patches ? [] }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "slstatus";
+  version = "unstable-2019-02-16";
+
+  src = fetchgit {
+    url = "https://git.suckless.org/slstatus";
+    rev = "b14e039639ed28005fbb8bddeb5b5fa0c93475ac";
+    sha256 = "0kayyhpmppybhwndxgabw48wsk9v8x9xdb05xrly9szkw3jbvgw4";
+  };
+
+  configFile = optionalString (conf!=null) (writeText "config.def.h" conf);
+  preBuild = optionalString (conf!=null) "cp ${configFile} config.def.h";
+
+  inherit patches;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libX11 ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    homepage = "https://tools.suckless.org/slstatus/";
+    description = "status monitor for window managers that use WM_NAME like dwm";
+    license = licenses.isc;
+    maintainers = with maintainers; [ oxzi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/smos/default.nix b/nixpkgs/pkgs/applications/misc/smos/default.nix
new file mode 100644
index 000000000000..7d994a749bd4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/smos/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv
+, fetchurl
+, unzip
+}:
+
+stdenv.mkDerivation rec {
+  name = "smos-${version}";
+  version = "0.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/NorfairKing/smos/releases/download/v${version}/smos-release.zip";
+    sha256 = "sha256:07yavk7xl92yjwwjdig90yq421n8ldv4fjfw7izd4hfpzw849a12";
+  };
+
+  phases = [ "unpackPhase" ];
+  unpackCmd = "${unzip}/bin/unzip -d $out $curSrc";
+  sourceRoot = ".";
+
+  meta = with lib; {
+    description = "A comprehensive self-management system";
+    homepage = https://smos.online;
+    license = licenses.mit;
+    maintainers = with maintainers; [ norfair ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/snapper-gui/default.nix b/nixpkgs/pkgs/applications/misc/snapper-gui/default.nix
new file mode 100644
index 000000000000..e41860551fcd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/snapper-gui/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, python3, python3Packages
+, gnome3, gtk3, wrapGAppsHook, gtksourceview3, snapper
+, gobject-introspection
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "snapper-gui";
+  version = "2020-10-20";
+
+  src = fetchFromGitHub {
+    owner = "ricardomv";
+    repo = pname;
+    rev = "f0c67abe0e10cc9e2ebed400cf80ecdf763fb1d1";
+    sha256 = "13j4spbi9pxg69zifzai8ifk4207sn0vwh6vjqryi0snd5sylh7h";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+
+  buildInputs = [
+    python3
+    gobject-introspection
+    gnome3.adwaita-icon-theme
+  ];
+
+  doCheck = false; # it doesn't have any tests
+
+  propagatedBuildInputs = with python3Packages; [
+    gtk3
+    dbus-python
+    pygobject3
+    setuptools
+    gtksourceview3
+    snapper
+  ];
+
+  meta = with lib; {
+    description = "Graphical interface for snapper";
+    longDescription = ''
+      A graphical user interface for the tool snapper for Linux filesystem
+      snapshot management. It can compare snapshots and revert differences between snapshots.
+      In simple terms, this allows root and non-root users to view older versions of files
+      and revert changes. Currently works with btrfs, ext4 and thin-provisioned LVM volumes.
+    '';
+    homepage = "https://github.com/ricardomv/snapper-gui";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ahuzik ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/snowsql/default.nix b/nixpkgs/pkgs/applications/misc/snowsql/default.nix
new file mode 100644
index 000000000000..531bc4893541
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/snowsql/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv
+, fetchurl
+, rpmextract
+, patchelf
+, makeWrapper
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "snowsql";
+  majorVersion = "1.2";
+  version = "${majorVersion}.9";
+
+  src = fetchurl {
+    url = "https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/${majorVersion}/linux_x86_64/snowflake-snowsql-${version}-1.x86_64.rpm";
+    sha256 = "1k9dyr4vyqivpg054kbvs0jdwhbqbmlp9lsyxgazdsviw8ch70c8";
+  };
+
+  nativeBuildInputs = [ rpmextract makeWrapper ];
+
+  libPath = lib.makeLibraryPath [ openssl ];
+
+  buildCommand = ''
+    mkdir -p $out/bin/
+    cd $out
+    rpmextract $src
+    rm -R usr/bin
+    mv usr/* $out
+    rmdir usr
+
+    ${patchelf}/bin/patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+        lib64/snowflake/snowsql/snowsql
+
+    makeWrapper $out/lib64/snowflake/snowsql/snowsql $out/bin/snowsql \
+      --set LD_LIBRARY_PATH "${libPath}":"${placeholder "out"}"/lib64/snowflake/snowsql \
+  '';
+
+  meta = with lib; {
+    description = "Command line client for the Snowflake database";
+    homepage = "https://www.snowflake.com";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ andehen ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/solaar/default.nix b/nixpkgs/pkgs/applications/misc/solaar/default.nix
new file mode 100644
index 000000000000..f92fe87b9481
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/solaar/default.nix
@@ -0,0 +1,46 @@
+{ fetchFromGitHub, lib, gobject-introspection, gtk3, python3Packages }:
+# 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
+python3Packages.buildPythonApplication rec {
+  pname = "solaar";
+  version = "1.0.2";
+  src = fetchFromGitHub {
+    owner = "pwr-Solaar";
+    repo = "Solaar";
+    rev = version;
+    sha256 = "0k5z9dap6rawiafkg1x7zjx51ala7wra6j6lvc2nn0y8r79yp7a9";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ gobject-introspection gtk3 pygobject3 pyudev ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/solaar" \
+      --prefix PYTHONPATH : "$PYTHONPATH" \
+      --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH"
+    wrapProgram "$out/bin/solaar-cli" \
+      --prefix PYTHONPATH : "$PYTHONPATH" \
+      --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH"
+
+    install -Dm644 -t $out/etc/udev/rules.d rules.d/*.rules
+  '';
+
+  enableParallelBuilding = true;
+  meta = with lib; {
+    description = "Linux devices manager for the Logitech Unifying Receiver";
+    longDescription = ''
+      Solaar is a Linux device manager for Logitech’s Unifying Receiver
+      peripherals. It is able to pair/unpair devices to the receiver, and for
+      most devices read battery status.
+
+      It comes in two flavors, command-line and GUI. Both are able to list the
+      devices paired to a Unifying Receiver, show detailed info for each
+      device, and also pair/unpair supported devices with the receiver.
+
+      To be able to use it, make sure you have access to /dev/hidraw* files.
+    '';
+    license = licenses.gpl2;
+    homepage = "https://pwr-solaar.github.io/Solaar/";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ spinus ysndr ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/spacefm/default.nix b/nixpkgs/pkgs/applications/misc/spacefm/default.nix
new file mode 100644
index 000000000000..e08240733d12
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/spacefm/default.nix
@@ -0,0 +1,55 @@
+{ pkgs, fetchFromGitHub, lib, stdenv, gtk3, udev, desktop-file-utils
+, shared-mime-info, intltool, pkg-config, wrapGAppsHook, ffmpegthumbnailer
+, jmtpfs, ifuseSupport ? false, ifuse ? null, lsof, udisks2 }:
+
+stdenv.mkDerivation rec {
+  pname = "spacefm";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "IgnorantGuru";
+    repo = "spacefm";
+    rev = version;
+    sha256 = "089r6i40lxcwzp60553b18f130asspnzqldlpii53smz52kvpirx";
+  };
+
+  patches = [ ./glibc-fix.patch ];
+
+  configureFlags = [
+    "--with-bash-path=${pkgs.bash}/bin/bash"
+  ];
+
+  preConfigure = ''
+    configureFlags="$configureFlags --sysconfdir=$out/etc"
+  '';
+
+  postInstall = ''
+    rm -f $out/etc/spacefm/spacefm.conf
+    ln -s /etc/spacefm/spacefm.conf $out/etc/spacefm/spacefm.conf
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "${shared-mime-info}/share")
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    gtk3 udev desktop-file-utils shared-mime-info intltool
+    wrapGAppsHook ffmpegthumbnailer jmtpfs lsof udisks2
+  ] ++ (if ifuseSupport then [ ifuse ] else []);
+  # Introduced because ifuse doesn't build due to CVEs in libplist
+  # Revert when libplist builds again…
+
+  meta = with lib;  {
+    description = "A multi-panel tabbed file manager";
+    longDescription = ''
+      Multi-panel tabbed file and desktop manager for Linux
+      with built-in VFS, udev- or HAL-based device manager,
+      customizable menu system, and bash integration
+    '';
+    homepage = "http://ignorantguru.github.io/spacefm/";
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jagajaga obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/spacefm/glibc-fix.patch b/nixpkgs/pkgs/applications/misc/spacefm/glibc-fix.patch
new file mode 100644
index 000000000000..b8e9f1e9195e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/spacefm/glibc-fix.patch
@@ -0,0 +1,12 @@
+diff --git a/src/main.c b/src/main.c
+index 27f5614..2b45708 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -23,6 +23,7 @@
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/un.h>
++#include <sys/sysmacros.h>
+ 
+ #include <signal.h>
+ 
diff --git a/nixpkgs/pkgs/applications/misc/speedread/default.nix b/nixpkgs/pkgs/applications/misc/speedread/default.nix
new file mode 100644
index 000000000000..a7b9cb591a5e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/speedread/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  name = "speedread-unstable-2016-09-21";
+
+  src = fetchFromGitHub {
+    owner  = "pasky";
+    repo   = "speedread";
+    rev    = "93acfd61a1bf4482537ce5d71b9164b8446cb6bd";
+    sha256 = "1h94jx3v18fdlc64lfmj2g5x63fjyqb8c56k5lihl7bva0xgdkxd";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    install -m755 -D speedread $out/bin/speedread
+  '';
+
+  meta = with lib; {
+    description = "A simple terminal-based open source Spritz-alike";
+    longDescription = ''
+      Speedread is a command line filter that shows input text as a
+      per-word rapid serial visual presentation aligned on optimal
+      reading points. This allows reading text at a much more rapid
+      pace than usual as the eye can stay fixed on a single place.
+    '';
+    homepage = src.meta.homepage;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.oxij ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/spicetify-cli/default.nix b/nixpkgs/pkgs/applications/misc/spicetify-cli/default.nix
new file mode 100644
index 000000000000..a042cc53c055
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/spicetify-cli/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "spicetify-cli";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "khanhas";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "08rnwj7ggh114n3mhhm8hb8fm1njgb4j6vba3hynp8x1c2ngidff";
+  };
+
+  vendorSha256 = "0k06c3jw5z8rw8nk4qf794kyfipylmz6x6l126a2snvwi0lmc601";
+
+  # used at runtime, but not installed by default
+  postInstall = ''
+    cp -r ${src}/jsHelper $out/bin/jsHelper
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/spicetify-cli --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool to customize Spotify client";
+    homepage = "https://github.com/khanhas/spicetify-cli/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jonringer ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sqliteman/default.nix b/nixpkgs/pkgs/applications/misc/sqliteman/default.nix
new file mode 100644
index 000000000000..a0ddf8db053e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sqliteman/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, cmake, qt4, qscintilla }:
+
+stdenv.mkDerivation rec {
+  pname = "sqliteman";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    repo = "sqliteman";
+    owner = "pvanek";
+    rev = version;
+    sha256 = "1blzyh1646955d580f71slgdvz0nqx0qacryx0jc9w02yrag17cs";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ qt4 qscintilla ];
+
+  prePatch = ''
+    sed -i 's,m_file(0),m_file(QString()),' Sqliteman/sqliteman/main.cpp
+  '';
+
+  preConfigure = ''
+    cd Sqliteman
+    sed -i 's,/usr/include/Qsci,${qscintilla}/include/Qsci,' cmake/modules/FindQScintilla.cmake
+    sed -i 's,PATHS ''${QT_LIBRARY_DIR},PATHS ${qscintilla}/libs,' cmake/modules/FindQScintilla.cmake
+  '';
+
+  meta = with lib; {
+    description = "A simple but powerful Sqlite3 GUI database manager";
+    homepage = "http://sqliteman.yarpen.cz/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.eikek ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ssocr/default.nix b/nixpkgs/pkgs/applications/misc/ssocr/default.nix
new file mode 100644
index 000000000000..42bd58cd7831
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ssocr/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, imlib2, libX11 }:
+
+stdenv.mkDerivation {
+  pname = "ssocr";
+  version = "unstable-2018-08-11";
+
+  src = fetchFromGitHub {
+    owner = "auerswal";
+    repo = "ssocr";
+    rev = "5e47e26b125a1a13bc79de93a5e87dd0b51354ca";
+    sha256 = "0yzprwflky9a7zxa3zic7gvdwqg0zy49zvrqkdxng2k1ng78k3s7";
+  };
+
+  nativeBuildInputs = [ imlib2 libX11 ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Seven Segment Optical Character Recognition";
+    homepage = "https://github.com/auerswal/ssocr";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.kroell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ssw/default.nix b/nixpkgs/pkgs/applications/misc/ssw/default.nix
new file mode 100644
index 000000000000..f3dc8e136a1d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ssw/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pkg-config, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "ssw";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://alpha.gnu.org/gnu/ssw/spread-sheet-widget-${version}.tar.gz";
+    sha256 = "08ck9l697xg8vpya5h07raq837i4pqxjqzx30vhscq4xpps2b8kj";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3 ];
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/ssw/";
+    license = licenses.gpl3;
+    description = "GNU Spread Sheet Widget";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/stag/default.nix b/nixpkgs/pkgs/applications/misc/stag/default.nix
new file mode 100644
index 000000000000..03c90af23689
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stag/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchgit, curses }:
+
+stdenv.mkDerivation {
+  name = "stag-1.0";
+
+  src = fetchgit {
+    url = "https://github.com/seenaburns/stag.git";
+    rev = "90e2964959ea8242349250640d24cee3d1966ad6";
+    sha256 = "1yrzjhcwrxrxq5jj695wvpgb0pz047m88yq5n5ymkcw5qr78fy1v";
+  };
+
+  buildInputs = [ stdenv curses ];
+
+  installPhase = ''
+    make install PREFIX=$out
+  '';
+
+  meta = {
+    homepage = "https://github.com/seenaburns/stag";
+    description = "Terminal streaming bar graph passed through stdin";
+    license = lib.licenses.bsdOriginal;
+    maintainers = [ lib.maintainers.matthiasbeyer ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/stog/default.nix b/nixpkgs/pkgs/applications/misc/stog/default.nix
new file mode 100644
index 000000000000..442750837bb5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stog/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitLab, ocaml, findlib, ocf, ptime,
+  uutf, uri, ppx_blob, xtmpl, ocaml_lwt, higlo, omd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stog";
+  version = "0.18.0";
+  src = fetchFromGitLab {
+    domain = "framagit.org";
+    owner = "zoggy";
+    repo = "stog";
+    rev = version;
+    sha256 = "154gl3ljxqlw8wz1vmsyv8180igrl5bjq0wir7ybrnzq2cdflkv0";
+  };
+
+  buildInputs = [ ocaml uutf ];
+  propagatedBuildInputs = [ findlib omd ppx_blob ocf ptime uri xtmpl ocaml_lwt higlo ];
+
+  createFindlibDestdir = true;
+
+  patches = [ ./install.patch ./uri.patch ];
+
+  meta = with lib; {
+    description = "XML documents and web site compiler";
+    homepage = "https://www.good-eris.net/stog";
+    license = licenses.lgpl3;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = with maintainers; [ regnat ];
+  };
+}
+
+
diff --git a/nixpkgs/pkgs/applications/misc/stog/install.patch b/nixpkgs/pkgs/applications/misc/stog/install.patch
new file mode 100644
index 000000000000..a2407d3079f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stog/install.patch
@@ -0,0 +1,18 @@
+diff --git a/src/Makefile b/src/Makefile
+index 736dd037..79a85b9c 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -431,11 +431,12 @@ install-lib:
+ install-share:
+ 
+ install-bin:
++	mkdir $(out)/bin
+ 	$(CP) $(MAIN) $(MAIN_BYTE) $(TMPL) $(TMPL_BYTE) \
+ 		$(SERVER) $(SERVER_BYTE) $(OCAML_SESSION) \
+ 	  $(MK_STOG) $(MK_STOG_BYTE) $(MK_STOG_OCAML) \
+ 	  $(LATEX2STOG) $(LATEX2STOG_BYTE) \
+-		`dirname \`which $(OCAMLC)\``/
++	  $(out)/bin
+ 
+ uninstall: uninstall-lib uninstall-share uninstall-bin
+ 
diff --git a/nixpkgs/pkgs/applications/misc/stog/uri.patch b/nixpkgs/pkgs/applications/misc/stog/uri.patch
new file mode 100644
index 000000000000..08063a38add4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stog/uri.patch
@@ -0,0 +1,13 @@
+diff --git a/src/stog_url.ml b/src/stog_url.ml
+index 5d30a43f..c67bfc36 100644
+--- a/src/stog_url.ml
++++ b/src/stog_url.ml
+@@ -40,7 +40,7 @@ let of_string s =
+   with _ ->
+     failwith (Printf.sprintf "Malformed URL %S" s)
+ ;;
+-let to_string = Uri.to_string ;;
++let to_string u = Uri.to_string u;;
+ 
+ let path url =
+   let l =
diff --git a/nixpkgs/pkgs/applications/misc/stretchly/default.nix b/nixpkgs/pkgs/applications/misc/stretchly/default.nix
new file mode 100644
index 000000000000..e1591810c5b1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stretchly/default.nix
@@ -0,0 +1,84 @@
+{ stdenv
+, lib
+, fetchurl
+, makeWrapper
+, electron_9
+, common-updater-scripts
+, writeShellScript
+, jq
+, makeDesktopItem
+}:
+
+let
+  electron = electron_9;
+in
+stdenv.mkDerivation rec {
+
+  pname = "stretchly";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://github.com/hovancik/stretchly/releases/download/v${version}/stretchly-${version}.tar.xz";
+    sha256 = "07v9yk9qgya9ladfgbfkwwnbzvczs1cv6yn3zrg9rviyv8zlqjls";
+  };
+
+  icon = fetchurl {
+    url = "https://raw.githubusercontent.com/hovancik/stretchly/v${version}/stretchly_128x128.png";
+    sha256 = "0whfg1fy2hjyk1lzpryikc1aj8agsjhfrb0bf7ggl6r9m8s1rvdl";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname}/
+    mv resources/app.asar $out/share/${pname}/
+
+    mkdir -p $out/share/applications
+    ln -s ${desktopItem}/share/applications/* $out/share/applications/
+
+    makeWrapper ${electron}/bin/electron $out/bin/${pname} \
+      --add-flags $out/share/${pname}/app.asar
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = writeShellScript "update-stretchly" ''
+      set -eu -o pipefail
+
+      # get the latest release version
+      latest_version=$(curl -s https://api.github.com/repos/hovancik/stretchly/releases/latest | jq --raw-output .tag_name | sed -e 's/^v//')
+
+      echo "updating to $latest_version..."
+
+      ${common-updater-scripts}/bin/update-source-version stretchly "$latest_version"
+    '';
+  };
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = pname;
+    icon = icon;
+    desktopName = "Stretchly";
+    genericName = "Stretchly";
+    categories = "Utility;";
+  };
+
+  meta = with lib; {
+    description = "A break time reminder app";
+    longDescription = ''
+      stretchly is a cross-platform electron app that reminds you to take
+      breaks when working on your computer. By default, it runs in your tray
+      and displays a reminder window containing an idea for a microbreak for 20
+      seconds every 10 minutes. Every 30 minutes, it displays a window
+      containing an idea for a longer 5 minute break.
+    '';
+    homepage = "https://hovancik.net/stretchly";
+    downloadPage = "https://hovancik.net/stretchly/downloads/";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ _1000101 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/styx/default.nix b/nixpkgs/pkgs/applications/misc/styx/default.nix
new file mode 100644
index 000000000000..e59f6710737a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/styx/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, fetchFromGitHub, caddy, asciidoctor
+, file, lessc, sass, multimarkdown, linkchecker
+, perlPackages, python27 }:
+
+stdenv.mkDerivation rec {
+  pname = "styx";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner  = "styx-static";
+    repo   = "styx";
+    rev    = "0f0a878156eac416620a177cc030fa9f2f69b1b8";
+    sha256 = "0ig456j1s17w4zhhcmkrskpy6n7061v5f2isa3qhipmn0gwb91af";
+  };
+
+  server = "${caddy}/bin/caddy";
+  linkcheck = "${linkchecker}/bin/linkchecker";
+
+  nativeBuildInputs = [ asciidoctor ];
+
+  outputs = [ "out" "lib" "themes" ];
+
+  propagatedBuildInputs = [
+    file
+    lessc
+    sass
+    asciidoctor
+    multimarkdown
+    perlPackages.ImageExifTool
+    (python27.withPackages (ps: [ ps.parsimonious ]))
+  ];
+
+  installPhase = ''
+    mkdir $out
+    install -D -m 777 src/styx.sh $out/bin/styx
+
+    mkdir -p $out/share/styx-src
+    cp -r ./* $out/share/styx-src
+
+    mkdir -p $out/share/doc/styx
+    asciidoctor src/doc/index.adoc       -o $out/share/doc/styx/index.html
+    asciidoctor src/doc/styx-themes.adoc -o $out/share/doc/styx/styx-themes.html
+    asciidoctor src/doc/library.adoc     -o $out/share/doc/styx/library.html
+    cp -r src/doc/highlight $out/share/doc/styx/
+    cp -r src/doc/imgs $out/share/doc/styx/
+
+    substituteAllInPlace $out/bin/styx
+    substituteAllInPlace $out/share/doc/styx/index.html
+    substituteAllInPlace $out/share/doc/styx/styx-themes.html
+    substituteAllInPlace $out/share/doc/styx/library.html
+
+    mkdir -p $out/share/styx/scaffold
+    cp -r src/scaffold $out/share/styx
+    cp -r src/tools $out/share/styx
+
+    mkdir $lib
+    cp -r src/lib/* $lib
+
+    mkdir $themes
+    cp -r themes/* $themes
+  '';
+
+  meta = with lib; {
+    description  = "Nix based static site generator";
+    maintainers  = with maintainers; [ ericsagnes ];
+    homepage     = "https://styx-static.github.io/styx-site/";
+    downloadPage = "https://github.com/styx-static/styx/";
+    platforms    = platforms.all;
+    license      = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/subsurface/default.nix b/nixpkgs/pkgs/applications/misc/subsurface/default.nix
new file mode 100644
index 000000000000..51d015c6e410
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/subsurface/default.nix
@@ -0,0 +1,109 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, autoreconfHook, cmake, wrapQtAppsHook, pkg-config, qmake
+, curl, grantlee, libgit2, libusb-compat-0_1, libssh2, libxml2, libxslt, libzip, zlib
+, qtbase, qtconnectivity, qtlocation, qtsvg, qttools, qtwebkit, libXcomposite
+}:
+
+let
+  version = "4.9.6";
+
+  subsurfaceSrc = (fetchFromGitHub {
+    owner = "Subsurface";
+    repo = "subsurface";
+    rev = "v${version}";
+    sha256 = "1w1ak0fi6ljhg2jc4mjqyrbpax3iawrnsaqq6ls7qdzrhi37rggf";
+    fetchSubmodules = true;
+  });
+
+  libdc = stdenv.mkDerivation {
+    pname = "libdivecomputer-ssrf";
+    inherit version;
+
+    src = subsurfaceSrc;
+    sourceRoot = "source/libdivecomputer";
+
+    nativeBuildInputs = [ autoreconfHook ];
+
+    buildInputs = [ zlib ];
+
+    enableParallelBuilding = true;
+
+    meta = with lib; {
+      homepage = "http://www.libdivecomputer.org";
+      description = "A cross-platform and open source library for communication with dive computers from various manufacturers";
+      maintainers = with maintainers; [ mguentner ];
+      license = licenses.lgpl21;
+      platforms = platforms.all;
+    };
+  };
+
+  googlemaps = stdenv.mkDerivation rec {
+    pname = "googlemaps";
+
+    version = "2018-06-02";
+
+    src = fetchFromGitHub {
+      owner = "vladest";
+      repo = "googlemaps";
+      rev = "54a357f9590d9cf011bf1713589f66bad65e00eb";
+      sha256 = "159kslp6rj0qznzxijppwvv8jnswlfgf2pw4x8ladi8vp6bzxnzi";
+    };
+
+    nativeBuildInputs = [ qmake ];
+
+    buildInputs = [ qtbase qtlocation libXcomposite ];
+
+    pluginsSubdir = "lib/qt-${qtbase.qtCompatVersion}/plugins";
+
+    installPhase = ''
+      mkdir -p $out $(dirname ${pluginsSubdir}/geoservices)
+      mkdir -p ${pluginsSubdir}/geoservices
+      mv *.so ${pluginsSubdir}/geoservices
+      mv lib $out/
+    '';
+
+    enableParallelBuilding = true;
+
+    meta = with lib; {
+      inherit (src.meta) homepage;
+      description = "QtLocation plugin for Google maps tile API";
+      maintainers = with maintainers; [ orivej ];
+      license = licenses.mit;
+      platforms = platforms.all;
+    };
+  };
+
+in stdenv.mkDerivation {
+  pname = "subsurface";
+  inherit version;
+
+  src = subsurfaceSrc;
+
+  buildInputs = [
+    libdc googlemaps
+    curl grantlee libgit2 libssh2 libusb-compat-0_1 libxml2 libxslt libzip
+    qtbase qtconnectivity qtsvg qttools qtwebkit
+  ];
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook pkg-config ];
+
+  cmakeFlags = [
+    "-DLIBDC_FROM_PKGCONFIG=ON"
+    "-DNO_PRINTING=OFF"
+  ];
+
+  passthru = { inherit version libdc googlemaps; };
+
+  meta = with lib; {
+    description = "A divelog program";
+    longDescription = ''
+      Subsurface can track single- and multi-tank dives using air, Nitrox or TriMix.
+      It allows tracking of dive locations including GPS coordinates (which can also
+      conveniently be entered using a map interface), logging of equipment used and
+      names of other divers, and lets users rate dives and provide additional notes.
+    '';
+    homepage = "https://subsurface-divelog.org";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ mguentner ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/swappy/default.nix b/nixpkgs/pkgs/applications/misc/swappy/default.nix
new file mode 100644
index 000000000000..bf1fdf63fed5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/swappy/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub
+, meson
+, ninja
+, wayland
+, cairo
+, pango
+, gtk
+, pkg-config
+, cmake
+, scdoc
+, libnotify
+, gio-sharp
+, glib
+}:
+
+stdenv.mkDerivation rec {
+  name = "swappy-${version}";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "jtheoof";
+    repo = "swappy";
+    rev = "v${version}";
+    sha256 = "14ac2jmnak7avcz0jhqjm30vk7pv3gq5aq5rdyh84k8c613kkicf";
+  };
+
+  nativeBuildInputs = [ glib meson ninja pkg-config cmake scdoc ];
+
+  buildInputs = [ cairo pango gtk libnotify wayland glib ];
+
+  strictDeps = true;
+
+  mesonFlags = [
+    # TODO: https://github.com/NixOS/nixpkgs/issues/36468
+    "-Dc_args=-I${glib.dev}/include/gio-unix-2.0"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jtheoof/swappy";
+    description = "A Wayland native snapshot editing tool, inspired by Snappy on macOS ";
+    license = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sweethome3d/default.nix b/nixpkgs/pkgs/applications/misc/sweethome3d/default.nix
new file mode 100644
index 000000000000..afbf5b364ed4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sweethome3d/default.nix
@@ -0,0 +1,103 @@
+{ lib, stdenv, fetchurl, fetchsvn, makeWrapper, makeDesktopItem, jdk, jre, ant
+, gtk3, gsettings-desktop-schemas, p7zip, libXxf86vm }:
+
+let
+
+  # TODO: Should we move this to `lib`? Seems like its would be useful in many cases.
+  extensionOf = filePath:
+    lib.concatStringsSep "." (lib.tail (lib.splitString "." (builtins.baseNameOf filePath)));
+
+  installIcons = iconName: icons: lib.concatStringsSep "\n" (lib.mapAttrsToList (size: iconFile: ''
+    mkdir -p "$out/share/icons/hicolor/${size}/apps"
+    ln -s -T "${iconFile}" "$out/share/icons/hicolor/${size}/apps/${iconName}.${extensionOf iconFile}"
+  '') icons);
+
+  mkSweetHome3D =
+  { pname, module, version, src, license, description, desktopName, icons }:
+
+  stdenv.mkDerivation rec {
+    inherit pname version src description;
+    exec = lib.toLower module;
+    sweethome3dItem = makeDesktopItem {
+      inherit exec desktopName;
+      name = pname;
+      icon = pname;
+      comment =  description;
+      genericName = "Computer Aided (Interior) Design";
+      categories = "Graphics;2DGraphics;3DGraphics;";
+    };
+
+    patchPhase = ''
+      patchelf --set-rpath ${libXxf86vm}/lib lib/java3d-1.6/linux/amd64/libnativewindow_awt.so
+      patchelf --set-rpath ${libXxf86vm}/lib lib/java3d-1.6/linux/amd64/libnativewindow_x11.so
+      patchelf --set-rpath ${libXxf86vm}/lib lib/java3d-1.6/linux/i586/libnativewindow_awt.so
+      patchelf --set-rpath ${libXxf86vm}/lib lib/java3d-1.6/linux/i586/libnativewindow_x11.so
+    '';
+
+    buildInputs = [ ant jdk makeWrapper p7zip gtk3 gsettings-desktop-schemas ];
+
+    buildPhase = ''
+      ant furniture textures help
+      mkdir -p $out/share/{java,applications}
+      mv "build/"*.jar $out/share/java/.
+      ant
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin
+      cp install/${module}-${version}.jar $out/share/java/.
+
+      ${installIcons pname icons}
+
+      cp "${sweethome3dItem}/share/applications/"* $out/share/applications
+
+      # MESA_GL_VERSION_OVERRIDE is needed since the update from MESA 19.3.3 to 20.0.2:
+      # without it a "Profiles [GL4bc, GL3bc, GL2, GLES1] not available on device null"
+      # exception is thrown on startup.
+      # https://discourse.nixos.org/t/glx-not-recognised-after-mesa-update/6753
+      makeWrapper ${jre}/bin/java $out/bin/$exec \
+        --set MESA_GL_VERSION_OVERRIDE 2.1 \
+        --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:${gtk3.out}/share:${gsettings-desktop-schemas}/share:$out/share:$GSETTINGS_SCHEMAS_PATH" \
+        --add-flags "-Dsun.java2d.opengl=true -jar $out/share/java/${module}-${version}.jar -cp $out/share/java/Furniture.jar:$out/share/java/Textures.jar:$out/share/java/Help.jar -d${toString stdenv.hostPlatform.parsed.cpu.bits}"
+    '';
+
+    dontStrip = true;
+
+    meta = {
+      homepage = "http://www.sweethome3d.com/index.jsp";
+      inherit description;
+      inherit license;
+      maintainers = [ lib.maintainers.edwtjo ];
+      platforms = lib.platforms.linux;
+    };
+  };
+
+  d2u = lib.replaceChars ["."] ["_"];
+
+in {
+
+  application = mkSweetHome3D rec {
+    pname = lib.toLower module + "-application";
+    version = "6.4.2";
+    module = "SweetHome3D";
+    description = "Design and visualize your future home";
+    license = lib.licenses.gpl2Plus;
+    src = fetchsvn {
+      url = "https://svn.code.sf.net/p/sweethome3d/code/tags/V_" + d2u version + "/SweetHome3D/";
+      sha256 = "13rczayakwb5246hqnp8lnw61p0p7ywr2294bnlp4zwsrz1in9z4";
+      rev = "7504";
+    };
+    desktopName = "Sweet Home 3D";
+    icons = {
+      "32x32" = fetchurl {
+        url = "http://sweethome3d.cvs.sourceforge.net/viewvc/sweethome3d/SweetHome3D/deploy/SweetHome3DIcon32x32.png";
+        sha256 = "1r2fhfg27mx00nfv0qj66rhf719s2g1vhdis7bdc9mqk9x0mb0ir";
+      };
+      "48x48" = fetchurl {
+        url = "http://sweethome3d.cvs.sourceforge.net/viewvc/sweethome3d/SweetHome3D/deploy/SweetHome3DIcon48x48.png";
+        sha256 = "1ap6d75dyqqvx21wddvn8vw2apq3v803vmbxdriwd0dw9rq3zn4g";
+      };
+    };
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/sweethome3d/editors.nix b/nixpkgs/pkgs/applications/misc/sweethome3d/editors.nix
new file mode 100644
index 000000000000..08bc5b90fd9c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sweethome3d/editors.nix
@@ -0,0 +1,93 @@
+{ lib, stdenv, fetchcvs, makeWrapper, makeDesktopItem, jdk, jre, ant
+, gtk3, gsettings-desktop-schemas, sweethome3dApp }:
+
+let
+
+  sweetExec = with lib;
+    m: "sweethome3d-"
+    + removeSuffix "libraryeditor" (toLower m)
+    + "-editor";
+
+  mkEditorProject =
+  { pname, module, version, src, license, description, desktopName }:
+
+  stdenv.mkDerivation rec {
+    application = sweethome3dApp;
+    inherit pname module version src description;
+    exec = sweetExec module;
+    editorItem = makeDesktopItem {
+      inherit exec desktopName;
+      name = pname;
+      comment =  description;
+      genericName = "Computer Aided (Interior) Design";
+      categories = "Graphics;2DGraphics;3DGraphics;";
+    };
+
+    buildInputs = [ ant jre jdk makeWrapper gtk3 gsettings-desktop-schemas ];
+
+    patchPhase = ''
+      sed -i -e 's,../SweetHome3D,${application.src},g' build.xml
+      sed -i -e 's,lib/macosx/java3d-1.6/jogl-all.jar,lib/java3d-1.6/jogl-all.jar,g' build.xml
+    '';
+
+    buildPhase = ''
+      ant -lib ${application.src}/libtest -lib ${application.src}/lib -lib ${jdk}/lib
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin
+      mkdir -p $out/share/{java,applications}
+      cp ${module}-${version}.jar $out/share/java/.
+      cp "${editorItem}/share/applications/"* $out/share/applications
+      makeWrapper ${jre}/bin/java $out/bin/$exec \
+        --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:${gtk3.out}/share:${gsettings-desktop-schemas}/share:$out/share:$GSETTINGS_SCHEMAS_PATH" \
+        --add-flags "-jar $out/share/java/${module}-${version}.jar -d${toString stdenv.hostPlatform.parsed.cpu.bits}"
+    '';
+
+    dontStrip = true;
+
+    meta = {
+      homepage = "http://www.sweethome3d.com/index.jsp";
+      inherit description;
+      inherit license;
+      maintainers = [ lib.maintainers.edwtjo ];
+      platforms = lib.platforms.linux;
+    };
+
+  };
+
+  d2u = lib.replaceChars ["."] ["_"];
+
+in {
+
+  textures-editor = mkEditorProject rec {
+    version = "1.5";
+    module = "TexturesLibraryEditor";
+    pname = module;
+    description = "Easily create SH3T files and edit the properties of the texture images it contain";
+    license = lib.licenses.gpl2Plus;
+    src = fetchcvs {
+      cvsRoot = ":pserver:anonymous@sweethome3d.cvs.sourceforge.net:/cvsroot/sweethome3d";
+      sha256 = "15wxdns3hc8yq362x0rj53bcxran2iynxznfcb9js85psd94zq7h";
+      module = module;
+      tag = "V_" + d2u version;
+    };
+    desktopName = "Sweet Home 3D - Textures Library Editor";
+  };
+
+  furniture-editor = mkEditorProject rec {
+    version = "1.19";
+    module = "FurnitureLibraryEditor";
+    pname = module;
+    description = "Quickly create SH3F files and edit the properties of the 3D models it contain";
+    license = lib.licenses.gpl2;
+    src = fetchcvs {
+      cvsRoot = ":pserver:anonymous@sweethome3d.cvs.sourceforge.net:/cvsroot/sweethome3d";
+      sha256 = "0rr4nqil1mngak3ds5vz7f1whrgcgzpk6fb0qcr5ljms0jx0ylvs";
+      module = module;
+      tag = "V_" + d2u version;
+    };
+    desktopName = "Sweet Home 3D - Furniture Library Editor";
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/synapse/default.nix b/nixpkgs/pkgs/applications/misc/synapse/default.nix
new file mode 100644
index 000000000000..da822f5347bf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/synapse/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, gettext, pkg-config, glib, libnotify, gtk3, libgee
+, keybinder3, json-glib, zeitgeist, vala, gobject-introspection
+}:
+
+let
+  version = "0.2.99.4";
+in stdenv.mkDerivation rec {
+  pname = "synapse";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://launchpad.net/synapse-project/0.3/${version}/+download/${pname}-${version}.tar.xz";
+    sha256 = "1g6x9knb4jy1d8zgssjhzkgac583137pibisy9whjs8mckaj4k1j";
+  };
+
+  nativeBuildInputs = [
+    pkg-config gettext vala
+    # For setup hook
+    gobject-introspection
+  ];
+  buildInputs = [
+    glib libnotify gtk3 libgee keybinder3 json-glib zeitgeist
+  ];
+
+  meta = with lib; {
+    longDescription = ''
+      Semantic launcher written in Vala that you can use to start applications
+      as well as find and access relevant documents and files by making use of
+      the Zeitgeist engine
+    '';
+    description = "Semantic launcher to start applications and find relevant files";
+    homepage = "https://launchpad.net/synapse-project";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ mahe ];
+    platforms = with platforms; all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/syncthing-tray/default.nix b/nixpkgs/pkgs/applications/misc/syncthing-tray/default.nix
new file mode 100644
index 000000000000..15ef1654e70e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/syncthing-tray/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, buildGoPackage, pkg-config, libappindicator-gtk3 }:
+
+buildGoPackage rec {
+  pname = "syncthing-tray";
+  version = "0.7";
+
+  goPackagePath = "github.com/alex2108/syncthing-tray";
+
+  src = fetchFromGitHub {
+    owner = "alex2108";
+    repo = "syncthing-tray";
+    rev = "v${version}";
+    sha256 = "0869kinnsfzb8ydd0sv9fgqsi1sy5rhqg4whfdnrv82xjc71xyw3";
+  };
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libappindicator-gtk3 ];
+
+  meta = with lib; {
+    description = "Simple application tray for syncthing";
+    homepage = "https://github.com/alex2108/syncthing-tray";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nickhu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/syncthing-tray/deps.nix b/nixpkgs/pkgs/applications/misc/syncthing-tray/deps.nix
new file mode 100644
index 000000000000..1103146ed1b7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/syncthing-tray/deps.nix
@@ -0,0 +1,93 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/alex2108/systray";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alex2108/systray";
+      rev = "40e874866be2dc2c57ab031bcbde27a76b90721a";
+      sha256 = "1bxnb6skb9ss0lwlwswql07ardkhm28nxglvlsxkdlmzv1dcwy1q";
+    };
+  }
+  {
+    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 = "99fa440517e8f3d1e4cd8d6dbed6b41f4c1ed3d6";
+      sha256 = "08rl32l5ks67hcgjxik62nd5g558mv4101kmz1ak7d3vfgg3m6i3";
+    };
+  }
+  {
+    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 = "b70875f5d689a9438bca72aefd7142a2af889b18";
+      sha256 = "0cfa2bbkykbzbskmgd2an34him72z6f3y88ag1v5ffpb0d6bnar7";
+    };
+  }
+  {
+    goPackagePath = "github.com/getlantern/stack";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/stack";
+      rev = "02f928aad224fbccd50d66edd776fc9d1e9f2f2b";
+      sha256 = "0ddl5r4iw3c7p4drh4d8phl7d0ssdddsnd3xjm1lzgxylqq6r568";
+    };
+  }
+  {
+    goPackagePath = "github.com/oxtoacart/bpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/oxtoacart/bpool";
+      rev = "4e1c5567d7c2dd59fa4c7c83d34c2f3528b025d6";
+      sha256 = "01kk6dhkz96yhp3p5v2rjwq8mbrwrdsn6glqw7jp4h7g5za7yi95";
+    };
+  }
+  {
+    goPackagePath = "github.com/toqueteos/webbrowser";
+    fetch = {
+      type = "git";
+      url = "https://github.com/toqueteos/webbrowser";
+      rev = "e2ebfdc6cb1a3fdc4fc4dbd20a0cae0c2e406792";
+      sha256 = "0sgjnxrq0jgipkij8b6xiy4am9bv9zziqxxdhw15rdjc5piyk3a2";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/misc/syncthingtray/default.nix b/nixpkgs/pkgs/applications/misc/syncthingtray/default.nix
new file mode 100644
index 000000000000..f5c5faf4d966
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/syncthingtray/default.nix
@@ -0,0 +1,63 @@
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, qtbase
+, qtwebengine
+, qtdeclarative
+, extra-cmake-modules
+, cpp-utilities
+, qtutilities
+, cmake
+, kio
+, plasma-framework
+, qttools
+, webviewSupport ? true
+, jsSupport ? true
+, kioPluginSupport ? true
+, plasmoidSupport  ? true
+, systemdSupport ? true
+}:
+
+mkDerivation rec {
+  version = "1.1.0";
+  pname = "syncthingtray";
+
+  src = fetchFromGitHub {
+    owner = "Martchus";
+    repo = "syncthingtray";
+    rev = "v${version}";
+    sha256 = "0nzkzx870hzil2kny1irp4w2kxz5gmpchr2qxb7q4f9cnih92n0j";
+  };
+
+  buildInputs = [ qtbase cpp-utilities qtutilities ]
+    ++ lib.optionals webviewSupport [ qtwebengine ]
+    ++ lib.optionals jsSupport [ qtdeclarative ]
+    ++ lib.optionals kioPluginSupport [ kio ]
+    ++ lib.optionals plasmoidSupport [ extra-cmake-modules plasma-framework ]
+  ;
+
+  nativeBuildInputs = [ cmake qttools ];
+
+  # No tests are available by upstream, but we test --help anyway
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/syncthingtray --help | grep ${version}
+  '';
+
+  cmakeFlags = [
+    # See https://github.com/Martchus/syncthingtray/issues/42
+    "-DQT_PLUGIN_DIR:STRING=${placeholder "out"}/lib/qt-5"
+  ] ++ lib.optionals (!plasmoidSupport) ["-DNO_PLASMOID=ON"]
+    ++ lib.optionals (!kioPluginSupport) ["-DNO_FILE_ITEM_ACTION_PLUGIN=ON"]
+    ++ lib.optionals systemdSupport ["-DSYSTEMD_SUPPORT=ON"]
+    ++ lib.optionals (!webviewSupport) ["-DWEBVIEW_PROVIDER:STRING=none"]
+  ;
+
+  meta = with lib; {
+    homepage = "https://github.com/Martchus/syncthingtray";
+    description = "Tray application and Dolphin/Plasma integration for Syncthing";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ doronbehar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/synergy/build-tests.patch b/nixpkgs/pkgs/applications/misc/synergy/build-tests.patch
new file mode 100644
index 000000000000..ab08195e794d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/synergy/build-tests.patch
@@ -0,0 +1,97 @@
+From 9c2278dad498b8e4040f30c80cf65b3a089ba218 Mon Sep 17 00:00:00 2001
+From: talyz <kim.lindberger@gmail.com>
+Date: Fri, 14 Feb 2020 16:26:36 +0100
+Subject: [PATCH] Build tests again
+
+The tests were accidentally disabled in
+688095d0a7d22704b5c3282bc68b41ceca42ab7e. Since then, the code has
+drifted slightly: the synergy lib has been renamed from synergy to
+synlib in 4263fd17177d7717b04ac6d6ec62efa2f657ed74 and the curl
+dependency was dropped in 491bb2de000245a943b8298462c4a9d8f34c9a44.
+
+This reenables the tests, targets the right lib and removes the
+obsolete test.
+---
+ src/CMakeLists.txt                            |  2 +
+ src/test/integtests/CMakeLists.txt            |  2 +-
+ .../integtests/arch/ArchInternetTests.cpp     | 37 -------------------
+ src/test/unittests/CMakeLists.txt             |  2 +-
+ 4 files changed, 4 insertions(+), 39 deletions(-)
+ delete mode 100644 src/test/integtests/arch/ArchInternetTests.cpp
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index ab63a066..fee080ab 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -22,3 +22,5 @@ add_subdirectory(cmd)
+ if (SYNERGY_BUILD_LEGACY_GUI)
+ add_subdirectory(gui)
+ endif (SYNERGY_BUILD_LEGACY_GUI)
++
++add_subdirectory(test)
+diff --git a/src/test/integtests/CMakeLists.txt b/src/test/integtests/CMakeLists.txt
+index f39968a3..096ba3d5 100644
+--- a/src/test/integtests/CMakeLists.txt
++++ b/src/test/integtests/CMakeLists.txt
+@@ -68,4 +68,4 @@ endif()
+ 
+ add_executable(integtests ${sources})
+ target_link_libraries(integtests
+-    arch base client common io ipc mt net platform server synergy gtest gmock ${libs} ${OPENSSL_LIBS})
++    arch base client common io ipc mt net platform server synlib gtest gmock ${libs} ${OPENSSL_LIBS})
+diff --git a/src/test/integtests/arch/ArchInternetTests.cpp b/src/test/integtests/arch/ArchInternetTests.cpp
+deleted file mode 100644
+index 95823e9f..00000000
+--- a/src/test/integtests/arch/ArchInternetTests.cpp
++++ /dev/null
+@@ -1,37 +0,0 @@
+-/*
+- * synergy -- mouse and keyboard sharing utility
+- * Copyright (C) 2014-2016 Symless Ltd.
+- *
+- * This package is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU General Public License
+- * found in the file LICENSE that should have accompanied this file.
+- *
+- * This package is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- */
+-
+-#include "arch/Arch.h"
+-
+-#include "test/global/gtest.h"
+-
+-#define TEST_URL "https://symless.com/tests/?testString"
+-//#define TEST_URL "http://localhost/synergy/tests/?testString"
+-
+-TEST(ArchInternetTests, get)
+-{
+-    ARCH_INTERNET internet;
+-    String result = internet.get(TEST_URL);
+-    ASSERT_EQ("Hello world!", result);
+-}
+-
+-TEST(ArchInternetTests, urlEncode)
+-{
+-    ARCH_INTERNET internet;
+-    String result = internet.urlEncode("hello=+&world");
+-    ASSERT_EQ("hello%3D%2B%26world", result);
+-}
+diff --git a/src/test/unittests/CMakeLists.txt b/src/test/unittests/CMakeLists.txt
+index 54131eb2..46307e90 100644
+--- a/src/test/unittests/CMakeLists.txt
++++ b/src/test/unittests/CMakeLists.txt
+@@ -68,4 +68,4 @@ endif()
+ 
+ add_executable(unittests ${sources})
+ target_link_libraries(unittests
+-    arch base client server common io net platform server synergy mt ipc gtest gmock shared ${libs} ${OPENSSL_LIBS})
++    arch base client server common io net platform server synlib mt ipc gtest gmock shared ${libs} ${OPENSSL_LIBS})
+-- 
+2.25.0
+
diff --git a/nixpkgs/pkgs/applications/misc/synergy/default.nix b/nixpkgs/pkgs/applications/misc/synergy/default.nix
new file mode 100644
index 000000000000..3b1d04f3d38b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/synergy/default.nix
@@ -0,0 +1,88 @@
+{ stdenv, lib, fetchpatch, fetchFromGitHub, cmake, openssl, qttools
+, ApplicationServices, Carbon, Cocoa, CoreServices, ScreenSaver
+, xlibsWrapper, libX11, libXi, libXtst, libXrandr, xinput, avahi-compat
+, withGUI ? true, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "synergy";
+  version = "1.11.1";
+
+  src = fetchFromGitHub {
+    owner = "symless";
+    repo = "synergy-core";
+    rev = "${version}-stable";
+    sha256 = "1jk60xw4h6s5crha89wk4y8rrf1f3bixgh5mzh3cq3xyrkba41gh";
+  };
+
+  patches = [
+    ./build-tests.patch
+    (fetchpatch {
+      name = "CVE-2020-15117.patch";
+      url = "https://github.com/symless/synergy-core/commit/"
+          + "0a97c2be0da2d0df25cb86dfd642429e7a8bea39.patch";
+      sha256 = "03q8m5n50fms7fjfjgmqrgy9mrxwi9kkz3f3vlrs2x5h21dl6bmj";
+    })
+  ] ++ lib.optional stdenv.isDarwin ./macos_build_fix.patch;
+
+  # Since the included gtest and gmock don't support clang and the
+  # segfault when built with gcc9, we replace it with 1.10.0 for
+  # synergy-1.11.0. This should become unnecessary when upstream
+  # updates these dependencies.
+  googletest = fetchFromGitHub {
+    owner = "google";
+    repo = "googletest";
+    rev = "release-1.10.0";
+    sha256 = "1zbmab9295scgg4z2vclgfgjchfjailjnvzc6f5x9jvlsdi3dpwz";
+  };
+
+  postPatch = ''
+    rm -r ext/*
+    cp -r ${googletest}/googlemock ext/gmock/
+    cp -r ${googletest}/googletest ext/gtest/
+    chmod -R +w ext/
+  '';
+
+  cmakeFlags = lib.optional (!withGUI) "-DSYNERGY_BUILD_LEGACY_GUI=OFF";
+
+  nativeBuildInputs = [ cmake ] ++ lib.optional withGUI wrapQtAppsHook;
+
+  dontWrapQtApps = true;
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals withGUI [
+    qttools
+  ] ++ lib.optionals stdenv.isDarwin [
+    ApplicationServices Carbon Cocoa CoreServices ScreenSaver
+  ] ++ lib.optionals stdenv.isLinux [
+    xlibsWrapper libX11 libXi libXtst libXrandr xinput avahi-compat
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/{synergyc,synergys,synergyd,syntool} $out/bin/
+  '' + lib.optionalString withGUI ''
+    cp bin/synergy $out/bin/
+    wrapQtApp $out/bin/synergy --prefix PATH : ${lib.makeBinPath [ openssl ]}
+  '' + lib.optionalString stdenv.isLinux ''
+    mkdir -p $out/share/icons/hicolor/scalable/apps
+    cp ../res/synergy.svg $out/share/icons/hicolor/scalable/apps/
+    mkdir -p $out/share/applications
+    substitute ../res/synergy.desktop $out/share/applications/synergy.desktop --replace /usr/bin $out/bin
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications/
+    mv bundle/Synergy.app $out/Applications/
+    ln -s $out/bin $out/Applications/Synergy.app/Contents/MacOS
+  '';
+
+  doCheck = true;
+  checkPhase = "bin/unittests";
+
+  meta = with lib; {
+    description = "Share one mouse and keyboard between multiple computers";
+    homepage = "http://synergy-project.org/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/synergy/macos_build_fix.patch b/nixpkgs/pkgs/applications/misc/synergy/macos_build_fix.patch
new file mode 100644
index 000000000000..2ce277d261b1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/synergy/macos_build_fix.patch
@@ -0,0 +1,29 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a2297311..25a51f56 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -138,7 +138,7 @@ if (UNIX)
+ 
+ 
+     if (APPLE)
+-        set (CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS} -DGTEST_USE_OWN_TR1_TUPLE=1")
++        set (CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS}")
+ 
+         find_library (lib_ScreenSaver ScreenSaver)
+         find_library (lib_IOKit IOKit)
+@@ -292,14 +292,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+         ${OPENSSL_ROOT}/lib/libssl.lib
+         ${OPENSSL_ROOT}/lib/libcrypto.lib
+     )
+-elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+-    set (OPENSSL_ROOT /usr/local/opt/openssl)
+-    include_directories (BEFORE SYSTEM ${OPENSSL_ROOT}/include)
+-    set (OPENSSL_LIBS
+-        ${OPENSSL_ROOT}/lib/libssl.a
+-        ${OPENSSL_ROOT}/lib/libcrypto.a
+-    )
+-elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
++elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+     set (OPENSSL_LIBS ssl crypto)
+ else()
+     message (FATAL_ERROR "Couldn't find OpenSSL")
diff --git a/nixpkgs/pkgs/applications/misc/systembus-notify/default.nix b/nixpkgs/pkgs/applications/misc/systembus-notify/default.nix
new file mode 100644
index 000000000000..6e5405ce988e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/systembus-notify/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "systembus-notify";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "rfjakob";
+    repo = "systembus-notify";
+    rev = "v${version}";
+    sha256 = "1pdn45rfpwhrf20hs87qmk2j8sr7ab8161f81019wnypnb1q2fsv";
+  };
+
+  buildInputs = [ systemd ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 systembus-notify -t $out/bin
+    install -Dm644 systembus-notify.desktop -t $out/etc/xdg/autostart
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "System bus notification daemon";
+    homepage = "https://github.com/rfjakob/systembus-notify";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tabula/default.nix b/nixpkgs/pkgs/applications/misc/tabula/default.nix
new file mode 100644
index 000000000000..1804f3c04e89
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tabula/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchzip, jre, makeWrapper }:
+
+
+stdenv.mkDerivation rec {
+  pname = "tabula";
+  version = "1.2.1";
+
+
+  src = fetchzip {
+    url = "https://github.com/tabulapdf/tabula/releases/download/v${version}/tabula-jar-${version}.zip";
+    sha256 = "0lkpv8hkji81fanyxm7ph8421fr9a6phqc3pbhw2bc4gljg7sgxi";
+  };
+
+
+  buildInputs = [ makeWrapper ];
+
+
+  installPhase = ''
+    mkdir -pv $out/share/tabula
+    cp -v * $out/share/tabula
+
+    makeWrapper ${jre}/bin/java $out/bin/tabula --add-flags "-jar $out/share/tabula/tabula.jar"
+  '';
+
+
+  meta = with lib; {
+    description = "A tool for liberating data tables locked inside PDF files";
+    longDescription = ''
+      If you’ve ever tried to do anything with data provided to you in PDFs, you
+      know how painful it is — there's no easy way to copy-and-paste rows of data
+      out of PDF files. Tabula allows you to extract that data into a CSV or
+      Microsoft Excel spreadsheet using a simple, easy-to-use interface.
+    '';
+    homepage = "https://tabula.technology/";
+    license = licenses.mit;
+    maintainers = [ maintainers.dpaetzel ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taizen/default.nix b/nixpkgs/pkgs/applications/misc/taizen/default.nix
new file mode 100644
index 000000000000..c480c7a8e2f1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taizen/default.nix
@@ -0,0 +1,25 @@
+{ rustPlatform, lib, fetchFromGitHub, ncurses, openssl, pkg-config, Security, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "taizen";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "NerdyPepper";
+    repo = pname;
+    rev = "5c1876429e2da7424e9d31b1e16f5a3147cc58d0";
+    sha256 = "09izgx7icvizskdy9kplk0am61p7550fsd0v42zcihq2vap2j92z";
+  };
+
+  buildInputs = [ ncurses openssl ] ++ lib.optional stdenv.isDarwin Security;
+  nativeBuildInputs = [ pkg-config ];
+
+  cargoSha256 = "0chrgwm97y1a3gj218x25yqk1y1h74a6gzyxjdm023msvs58nkni";
+
+  meta = with lib; {
+    homepage = "https://crates.io/crates/taizen";
+    license = licenses.mit;
+    description = "curses based mediawiki browser";
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/2.x/default.nix b/nixpkgs/pkgs/applications/misc/taskjuggler/2.x/default.nix
new file mode 100644
index 000000000000..0235c8af7c53
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/2.x/default.nix
@@ -0,0 +1,75 @@
+{stdenv, fetchurl,
+zlib, libpng, libjpeg, perl, expat, qt3,
+libX11, libXext, libSM, libICE,
+}:
+
+stdenv.mkDerivation rec {
+  name = "taskjuggler-2.4.3";
+  src = fetchurl {
+    url = "http://www.taskjuggler.org/download/${name}.tar.bz2";
+    sha256 = "14gkxa2vwfih5z7fffbavps7m44z5bq950qndigw2icam5ks83jl";
+  };
+
+  buildInputs =
+    [zlib libpng libX11 libXext libSM libICE perl expat libjpeg]
+    ;
+
+  patches = [ ./timezone-glibc.patch ];
+
+  preConfigure = ''
+    for i in $(grep -R "/bin/bash" .  | sed 's/:.*//'); do
+      substituteInPlace $i --replace /bin/bash $(type -Pp bash)
+    done
+    for i in $(grep -R "/usr/bin/perl" .  | sed 's/:.*//'); do
+      substituteInPlace $i --replace /usr/bin/perl ${perl}/bin/perl
+    done
+
+    # Fix install
+    for i in docs/en/Makefile.in Examples/BigProject/Common/Makefile.in Examples/BigProject/Makefile.in Examples/BigProject/Project1/Makefile.in Examples/BigProject/Project2/Makefile.in Examples/FirstProject/Makefile.in Examples/ShiftSchedule/Makefile.in; do
+      # Do not use variable substitution because there is some text after the last '@'
+      substituteInPlace $i --replace 'docprefix = @PACKAGES_DIR@' 'docprefix = $(docdir)/'
+    done
+
+    # Comment because the ical export need the KDE support.
+    for i in Examples/FirstProject/AccountingSoftware.tjp; do
+      substituteInPlace $i --replace "icalreport" "# icalreport"
+    done
+
+    for i in TestSuite/testdir TestSuite/createrefs \
+      TestSuite/Scheduler/Correct/Expression.sh; do
+      substituteInPlace $i --replace '/bin/rm' 'rm'
+    done
+
+    # Some tests require writing at $HOME
+    HOME=$TMPDIR
+  '';
+
+  configureFlags = [
+    "--without-arts" "--disable-docs"
+    "--x-includes=${libX11.dev}/include"
+    "--x-libraries=${libX11.out}/lib"
+    "--with-qt-dir=${qt3}"
+  ];
+
+  preInstall = ''
+    mkdir -p $out/share/emacs/site-lisp/
+    cp Contrib/emacs/taskjug.el $out/share/emacs/site-lisp/
+  '';
+
+  # kde_locale is not defined when installing without kde.
+  installFlags = [ "kde_locale=\${out}/share/locale" ];
+
+  meta = {
+    homepage = "http://www.taskjuggler.org";
+    license = lib.licenses.gpl2;
+    description = "Project management tool";
+    longDescription = ''
+      TaskJuggler is a modern and powerful, Open Source project management
+      tool. Its new approach to project planing and tracking is more
+      flexible and superior to the commonly used Gantt chart editing
+      tools. It has already been successfully used in many projects and
+      scales easily to projects with hundreds of resources and thousands of
+      tasks.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/2.x/timezone-glibc.patch b/nixpkgs/pkgs/applications/misc/taskjuggler/2.x/timezone-glibc.patch
new file mode 100644
index 000000000000..f599e8a1730c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/2.x/timezone-glibc.patch
@@ -0,0 +1,48 @@
+From the discussion in http://groups.google.com/group/taskjuggler-users/browse_thread/thread/f65a3efd4dcae2fc/a44c711a9d28ebee?show_docid=a44c711a9d28ebee
+
+From: Chris Schlaeger <cs@kde.org>
+Date: Sat, 27 Feb 2010 06:33:35 +0000 (+0100)
+Subject: Try to fix time zone check for glibc 2.11.
+X-Git-Url: http://www.taskjuggler.org/cgi-bin/gitweb.cgi?p=taskjuggler.git;a=commitdiff_plain;h=2382ed54f90c3c899badb3f56aaa2b3b5dba361e;hp=c666c5068312fec7db75e17d1c567d94127d1dda
+
+Try to fix time zone check for glibc 2.11.
+
+Reported-by: Lee <pFQh8RQn4fqB@dyweni.com>
+---
+
+diff --git a/taskjuggler/Utility.cpp b/taskjuggler/Utility.cpp
+index 5e2bf21..9b7fce2 100644
+--- a/taskjuggler/Utility.cpp
++++ b/taskjuggler/Utility.cpp
+@@ -206,16 +206,28 @@ setTimezone(const char* tZone)
+ 
+     /* To validate the tZone value we call tzset(). It will convert the zone
+      * into a three-letter acronym in case the tZone value is good. If not, it
+-     * will just copy the wrong value to tzname[0] (glibc < 2.5) or fall back
+-     * to UTC. */
++     * will
++     * - copy the wrong value to tzname[0] (glibc < 2.5)
++     * - or fall back to UTC (glibc >= 2.5 && < 2.11)
++     * - copy the part before the '/' to tzname[0] (glibc >= 2.11).
++     */
+     tzset();
++    char* region = new(char[strlen(tZone) + 1]);
++    region[0] = 0;
++    if (strchr(tZone, '/'))
++    {
++        strcpy(region, tZone);
++        *strchr(region, '/') = 0;
++    }
+     if (timezone2tz(tZone) == 0 &&
+-        (strcmp(tzname[0], tZone) == 0 ||
++        (strcmp(tzname[0], tZone) == 0 || strcmp(tzname[0], region) == 0 ||
+          (strcmp(tZone, "UTC") != 0 && strcmp(tzname[0], "UTC") == 0)))
+     {
+         UtilityError = QString(i18n("Illegal timezone '%1'")).arg(tZone);
++        delete region;
+         return false;
+     }
++    delete region;
+ 
+     if (!LtHashTab)
+         return true;
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/Gemfile b/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/Gemfile
new file mode 100644
index 000000000000..77cbaeeed793
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/Gemfile
@@ -0,0 +1,2 @@
+source 'http://rubygems.org'
+gem 'taskjuggler'
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/Gemfile.lock b/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/Gemfile.lock
new file mode 100644
index 000000000000..8831993117d2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: http://rubygems.org/
+  specs:
+    mail (2.6.3)
+      mime-types (>= 1.16, < 3)
+    mime-types (2.6.1)
+    taskjuggler (3.5.0)
+      mail (>= 2.4.3)
+      term-ansicolor (>= 1.0.7)
+    term-ansicolor (1.3.2)
+      tins (~> 1.0)
+    tins (1.6.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  taskjuggler
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/default.nix b/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/default.nix
new file mode 100644
index 000000000000..d3a8e26a4d82
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/default.nix
@@ -0,0 +1,15 @@
+{ lib, bundlerEnv, ruby }:
+
+bundlerEnv {
+  name = "taskjuggler-3.5.0";
+
+  inherit ruby;
+  gemdir = ./.;
+
+  meta = {
+    description = "A modern and powerful project management tool";
+    homepage    = "https://taskjuggler.org/";
+    license     = lib.licenses.gpl2;
+    platforms   = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/gemset.nix b/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/gemset.nix
new file mode 100644
index 000000000000..deeeac106943
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/3.x/gemset.nix
@@ -0,0 +1,47 @@
+{
+  mail = {
+    version = "2.6.3";
+    source = {
+      type = "gem";
+      sha256 = "1nbg60h3cpnys45h7zydxwrl200p7ksvmrbxnwwbpaaf9vnf3znp";
+    };
+    dependencies = [
+      "mime-types"
+    ];
+  };
+  mime-types = {
+    version = "2.6.1";
+    source = {
+      type = "gem";
+      sha256 = "1vnrvf245ijfyxzjbj9dr6i1hkjbyrh4yj88865wv9bs75axc5jv";
+    };
+  };
+  taskjuggler = {
+    version = "3.5.0";
+    source = {
+      type = "gem";
+      sha256 = "0r84rlc7a6w7p9nc9mgycbs5h0hq0kzscjq7zj3296xyf0afiwj2";
+    };
+    dependencies = [
+      "mail"
+      "term-ansicolor"
+    ];
+  };
+  term-ansicolor = {
+    version = "1.3.2";
+    source = {
+      type = "gem";
+      sha256 = "0ydbbyjmk5p7fsi55ffnkq79jnfqx65c3nj8d9rpgl6sw85ahyys";
+    };
+    dependencies = [
+      "tins"
+    ];
+  };
+  tins = {
+    version = "1.6.0";
+    source = {
+      type = "gem";
+      sha256 = "02qarvy17nbwvslfgqam8y6y7479cwmb1a6di9z18hzka4cf90hz";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile b/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile
new file mode 100644
index 000000000000..ab9f5a354646
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'taskjuggler'
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile.lock b/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile.lock
new file mode 100644
index 000000000000..0f05c496173f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile.lock
@@ -0,0 +1,21 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    mail (2.7.1)
+      mini_mime (>= 0.1.1)
+    mini_mime (1.0.1)
+    taskjuggler (3.6.0)
+      mail (>= 2.4.3)
+      term-ansicolor (>= 1.0.7)
+    term-ansicolor (1.7.1)
+      tins (~> 1.0)
+    tins (1.20.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  taskjuggler
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/default.nix b/nixpkgs/pkgs/applications/misc/taskjuggler/default.nix
new file mode 100644
index 000000000000..5c15748f2b8e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/default.nix
@@ -0,0 +1,21 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "taskjuggler";
+  gemdir = ./.;
+
+  exes = [
+    "tj3" "tj3client" "tj3d" "tj3man" "tj3ss_receiver" "tj3ss_sender"
+    "tj3ts_receiver" "tj3ts_sender" "tj3ts_summary" "tj3webd"
+  ];
+
+  passthru.updateScript = bundlerUpdateScript "taskjuggler";
+
+  meta = with lib; {
+    description = "A modern and powerful project management tool";
+    homepage    = "https://taskjuggler.org/";
+    license     = licenses.gpl2;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/gemset.nix b/nixpkgs/pkgs/applications/misc/taskjuggler/gemset.nix
new file mode 100644
index 000000000000..c22d49c7dc74
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/gemset.nix
@@ -0,0 +1,55 @@
+{
+  mail = {
+    dependencies = ["mini_mime"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q4pshq387lzv9m39jv32vwb8wrq3wc4jwgl4jk209r4l33v09d3";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  taskjuggler = {
+    dependencies = ["mail" "term-ansicolor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ky3cydl3szhdyxsy4k6zxzjlbll7mlq025aj6xd5jmh49k3pfbp";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  term-ansicolor = {
+    dependencies = ["tins"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xq5kci9215skdh27npyd3y55p812v4qb4x2hv3xsjvwqzz9ycwj";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  tins = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pqj45n216zrz7yckdbdknlmhh187iqzx8fp76y2h0jrgqjfkxmj";
+      type = "gem";
+    };
+    version = "1.20.2";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tasknc/default.nix b/nixpkgs/pkgs/applications/misc/tasknc/default.nix
new file mode 100644
index 000000000000..d24a7d3e0d13
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tasknc/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perl, ncurses5, taskwarrior }:
+
+stdenv.mkDerivation rec {
+  version = "2020-12-17";
+  pname = "tasknc";
+
+  src = fetchFromGitHub {
+    owner = "lharding";
+    repo = "tasknc";
+    rev = "a182661fbcc097a933d5e8cce3922eb1734a563e";
+    sha256 = "0jrv2k1yizfdjndbl06lmy2bb62ky2rjdk308967j31c5kqqnw56";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    perl # For generating the man pages with pod2man
+  ];
+
+  buildInputs = [ ncurses5 ];
+
+  hardeningDisable = [ "format" ];
+
+  buildFlags = [ "VERSION=${version}" ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mkdir -p $out/share/man/man1
+    mkdir -p $out/share/tasknc
+
+    DESTDIR=$out PREFIX= MANPREFIX=/share/man make install
+
+    wrapProgram $out/bin/tasknc --prefix PATH : ${taskwarrior}/bin
+  '';
+
+
+  meta = with lib; {
+    homepage = "https://github.com/lharding/tasknc";
+    description = "A ncurses wrapper around taskwarrior";
+    maintainers = with maintainers; [ matthiasbeyer infinisil ];
+    platforms = platforms.linux; # Cannot test others
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskopen/default.nix b/nixpkgs/pkgs/applications/misc/taskopen/default.nix
new file mode 100644
index 000000000000..8933faf5fb01
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskopen/default.nix
@@ -0,0 +1,34 @@
+{ fetchurl, lib, stdenv, makeWrapper, which, perl, perlPackages }:
+
+stdenv.mkDerivation {
+  name = "taskopen-1.1.4";
+  src = fetchurl {
+    url = "https://github.com/ValiValpas/taskopen/archive/v1.1.4.tar.gz";
+    sha256 = "774dd89f5c92462098dd6227e181268e5ec9930bbc569f25784000df185c71ba";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ which perl ] ++ (with perlPackages; [ JSON ]);
+
+  installPhase = ''
+    # We don't need a DESTDIR and an empty string results in an absolute path
+    # (due to the trailing slash) which breaks the build.
+    sed 's|$(DESTDIR)/||' -i Makefile
+
+    make PREFIX=$out
+    make PREFIX=$out install
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/taskopen \
+         --set PERL5LIB "$PERL5LIB"
+  '';
+
+  meta = with lib; {
+    description = "Script for taking notes and open urls with taskwarrior";
+    homepage = "https://github.com/ValiValpas/taskopen";
+    platforms = platforms.linux;
+    license = lib.licenses.free ;
+    maintainers = [ maintainers.winpat ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tasksh/default.nix b/nixpkgs/pkgs/applications/misc/tasksh/default.nix
new file mode 100644
index 000000000000..134d1373ad4b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tasksh/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, cmake, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "tasksh";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://taskwarrior.org/download/${pname}-${version}.tar.gz";
+    sha256 = "1z8zw8lld62fjafjvy248dncjk0i4fwygw0ahzjdvyyppx4zjhkf";
+  };
+
+  buildInputs = [ readline ];
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "REPL for taskwarrior";
+    homepage = "http://tasktools.org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskwarrior-tui/default.nix b/nixpkgs/pkgs/applications/misc/taskwarrior-tui/default.nix
new file mode 100644
index 000000000000..ae730d597ce7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskwarrior-tui/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "taskwarrior-tui";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "kdheepak";
+    repo = "taskwarrior-tui";
+    rev = "v${version}";
+    sha256 = "1348ypjphm5f46civbrcxbbahwwl2j47z1hg8ndq1cg2bh5wb8kg";
+  };
+
+  # Because there's a test that requires terminal access
+  doCheck = false;
+
+  cargoSha256 = "11zpy3whzir9mlbvf0jyscqwj9z44a6s5i1bc2cnxyciqy9b57md";
+
+  meta = with lib; {
+    description = "A terminal user interface for taskwarrior ";
+    homepage = "https://github.com/kdheepak/taskwarrior-tui";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskwarrior/default.nix b/nixpkgs/pkgs/applications/misc/taskwarrior/default.nix
new file mode 100644
index 000000000000..b3f26c87c50e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskwarrior/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libuuid, gnutls }:
+
+stdenv.mkDerivation rec {
+  pname = "taskwarrior";
+  version = "2.5.2";
+
+  src = fetchFromGitHub {
+    owner = "GothenburgBitFactory";
+    repo = "taskwarrior";
+    rev = "v${version}";
+    sha256 = "0jv5b56v75qhdqbrfsddfwizmbizcsv3mn8gp92nckwlx9hrk5id";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake libuuid gnutls ];
+
+  postInstall = ''
+    mkdir -p "$out/share/bash-completion/completions"
+    ln -s "../../doc/task/scripts/bash/task.sh" "$out/share/bash-completion/completions/task.bash"
+    mkdir -p "$out/share/fish/vendor_completions.d"
+    ln -s "../../../share/doc/task/scripts/fish/task.fish" "$out/share/fish/vendor_completions.d/"
+    mkdir -p "$out/share/zsh/site-functions"
+    ln -s "../../../share/doc/task/scripts/zsh/_task" "$out/share/zsh/site-functions/"
+  '';
+
+  meta = with lib; {
+    description = "Highly flexible command-line tool to manage TODO lists";
+    homepage = "https://taskwarrior.org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marcweber ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tdrop/default.nix b/nixpkgs/pkgs/applications/misc/tdrop/default.nix
new file mode 100644
index 000000000000..e8c42ab48d70
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tdrop/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper
+, xwininfo, xdotool, xprop, gawk, coreutils
+, gnugrep, procps }:
+
+stdenv.mkDerivation {
+  pname = "tdrop";
+  version = "unstable-2020-05-14";
+
+  src = fetchFromGitHub {
+    owner = "noctuid";
+    repo = "tdrop";
+    rev = "a9f2862515e5c190ac61d394e7fe7e1039871b89";
+    sha256 = "1zxhihgba33k8byjsracsyhby9qpdngbly6c8hpz3pbsyag5liwc";
+  };
+
+  dontBuild = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = let
+    binPath = lib.makeBinPath [
+      xwininfo
+      xdotool
+      xprop
+      gawk
+      coreutils
+      gnugrep
+      procps
+    ];
+  in ''
+    wrapProgram $out/bin/tdrop --prefix PATH : ${binPath}
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  meta = with lib; {
+    description = "A Glorified WM-Independent Dropdown Creator";
+    homepage = "https://github.com/noctuid/tdrop";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wedens ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/teleprompter/default.nix b/nixpkgs/pkgs/applications/misc/teleprompter/default.nix
new file mode 100644
index 000000000000..96265356ead7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/teleprompter/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, electron_10, makeDesktopItem, makeWrapper, nodePackages, autoPatchelfHook}:
+
+let
+  electron = electron_10;
+in
+stdenv.mkDerivation rec {
+  pname = "teleprompter";
+  version = "2.4.0";
+
+  src = fetchurl {
+    url = "https://github.com/ImaginarySense/Imaginary-Teleprompter-Electron/releases/download/${lib.versions.majorMinor version}/imaginary-teleprompter-${version}.tar.gz";
+    sha256 = "bgdtK8l5d26avv1WUw9cfOgZrIL1q/a9890Ams4yidQ=";
+  };
+
+  dontBuild = true;
+  dontStrip = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper nodePackages.asar ];
+  installPhase = ''
+    mkdir -p $out/bin $out/opt/teleprompter $out/share/applications
+    asar e resources/app.asar $out/opt/teleprompter/resources/app.asar.unpacked
+    ln -s ${desktopItem}/share/applications/* $out/share/applications
+  '';
+
+  postFixup = ''
+    makeWrapper ${electron}/bin/electron $out/bin/teleprompter \
+      --add-flags "$out/opt/teleprompter/resources/app.asar.unpacked --without-update"
+  '';
+
+  desktopItem = makeDesktopItem {
+     name = "teleprompter";
+     exec = "teleprompter";
+     type = "Application";
+     desktopName = "Teleprompter";
+  };
+
+  meta = with lib; {
+    description = "The most complete, free, teleprompter app on the web";
+    license = [ licenses.gpl3Plus ];
+    homepage = "https://github.com/ImaginarySense/Teleprompter-Core";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ Scriptkiddi ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/tellico/default.nix b/nixpkgs/pkgs/applications/misc/tellico/default.nix
new file mode 100644
index 000000000000..7037b40816ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tellico/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, fetchurl
+, mkDerivation
+, libkcddb
+, kinit
+, kdelibs4support
+, solid
+, kxmlgui
+, karchive
+, kfilemetadata
+, khtml
+, knewstuff
+, libksane
+, cmake
+, exempi
+, extra-cmake-modules
+, libcdio
+, poppler
+, makeWrapper
+, kdoctools
+, taglib
+}:
+
+mkDerivation rec {
+  name = "tellico";
+  version = "3.3.3";
+
+  src = fetchurl {
+    # version 3.3.0 just uses 3.3 in its name
+    urls = [
+      "https://tellico-project.org/files/tellico-${version}.tar.xz"
+      "https://tellico-project.org/files/tellico-${lib.versions.majorMinor version}.tar.xz"
+    ];
+    sha256 = "sha256-9cdbUTa2Mt3/yNylOSdGjgDETD74sR0dU4C58uW0Y6o=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    kdoctools
+    makeWrapper
+  ];
+
+  buildInputs = [
+    exempi
+    extra-cmake-modules
+    karchive
+    libkcddb
+    kdelibs4support
+    kfilemetadata
+    khtml
+    knewstuff
+    kxmlgui
+    libcdio
+    libksane
+    poppler
+    solid
+    taglib
+  ];
+
+  meta = with lib; {
+    description = "Collection management software, free and simple";
+    homepage = "https://tellico-project.org/";
+    license = with licenses; [ gpl2 gpl3 ];
+    maintainers = with maintainers; [ numkem ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tellico/hex.patch b/nixpkgs/pkgs/applications/misc/tellico/hex.patch
new file mode 100644
index 000000000000..999c502287e9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tellico/hex.patch
@@ -0,0 +1,15 @@
+index 7ea81c7..0c19767 100644
+--- a/src/utils/iso5426converter.cpp
++++ b/src/utils/iso5426converter.cpp
+@@ -1211,7 +1211,11 @@ QChar Iso5426Converter::getCombiningChar(uint c) {
+     return 0x1EF1; // SMALL LETTER U WITH HORN AND DOT BELOW
+ 
+   default:
++#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0))
++    myDebug() << "no match for" << hex << c;
++#else
+     myDebug() << "no match for" << Qt::hex << c;
++#endif
+     return QChar();
+   }
+ }
diff --git a/nixpkgs/pkgs/applications/misc/termdown/default.nix b/nixpkgs/pkgs/applications/misc/termdown/default.nix
new file mode 100644
index 000000000000..d8bb03138f32
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/termdown/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv
+, fetchFromGitHub
+, buildPythonApplication
+, click
+, pyfiglet
+, dateutil
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "termdown";
+  version = "1.17.0";
+
+  src = fetchFromGitHub {
+    rev = version;
+    sha256 = "1sd9z5n2a4ir35832wgxs68vwav7wxhq39b5h8pq934mp8sl3v2k";
+    repo = "termdown";
+    owner = "trehn";
+  };
+
+  propagatedBuildInputs = [ dateutil click pyfiglet setuptools ];
+
+  meta = with lib; {
+    description = "Starts a countdown to or from TIMESPEC";
+    longDescription = "Countdown timer and stopwatch in your terminal";
+    homepage = "https://github.com/trehn/termdown";
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/terminal-notifier/default.nix b/nixpkgs/pkgs/applications/misc/terminal-notifier/default.nix
new file mode 100644
index 000000000000..cde53ef41654
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/terminal-notifier/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, runtimeShell, lib, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "terminal-notifier";
+
+  version = "2.0.0";
+
+  src = fetchzip {
+    url = "https://github.com/alloy/terminal-notifier/releases/download/${version}/terminal-notifier-${version}.zip";
+    sha256 = "0gi54v92hi1fkryxlz3k5s5d8h0s66cc57ds0vbm1m1qk3z4xhb0";
+    stripRoot = false;
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/Applications
+    mkdir -p $out/bin
+    cp -r terminal-notifier.app $out/Applications
+    cat >$out/bin/terminal-notifier <<EOF
+    #!${runtimeShell}
+    cd $out/Applications/terminal-notifier.app
+    exec ./Contents/MacOS/terminal-notifier "\$@"
+    EOF
+    chmod +x $out/bin/terminal-notifier
+  '';
+
+  meta = with lib; {
+    maintainers = with maintainers; [ cstrahan ];
+    homepage = "https://github.com/julienXX/terminal-notifier";
+    license = licenses.mit;
+    platforms  = platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/terminal-parrot/default.nix b/nixpkgs/pkgs/applications/misc/terminal-parrot/default.nix
new file mode 100644
index 000000000000..e3e64cfd68af
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/terminal-parrot/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "terminal-parrot";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jmhobbs";
+    repo = "terminal-parrot";
+    rev = version;
+    sha256 = "1b4vr4s1zpkpf5kc1r2kdlp3hf88qp1f7h05g8kd62zf4sfbj722";
+  };
+
+  vendorSha256 = "1qalnhhq3fmyzj0hkzc5gk9wbypr558mz3ik5msw7fid68k2i48c";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Shows colorful, animated party parrot in your terminial";
+    homepage = "https://github.com/jmhobbs/terminal-parrot";
+    license = licenses.mit;
+    maintainers = [ maintainers.heel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/terminal-typeracer/default.nix b/nixpkgs/pkgs/applications/misc/terminal-typeracer/default.nix
new file mode 100644
index 000000000000..7a19b2923da2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/terminal-typeracer/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv
+, fetchFromGitLab
+, rustPlatform
+, pkg-config
+, openssl
+, sqlite
+, libiconv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "terminal-typeracer";
+  version = "2.0.4";
+
+  src = fetchFromGitLab {
+    owner = "ttyperacer";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "RjGHY6KN6thxbg9W5FRwaAmUeD+5/WCeMCvzFHqZ+J4=";
+  };
+
+  cargoSha256 = "VSwku0rtQECirCHx2CXe72gCA+p3DdPC4YYwEYu8WfM=";
+
+  buildInputs = [ openssl sqlite ] ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "An open source terminal based version of Typeracer written in rust";
+    homepage = "https://gitlab.com/ttyperacer/terminal-typeracer";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ yoctocell ];
+    platforms = platforms.x86_64;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/termpdf.py/default.nix b/nixpkgs/pkgs/applications/misc/termpdf.py/default.nix
new file mode 100644
index 000000000000..2541a17fc201
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/termpdf.py/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv
+, buildPythonApplication
+, fetchFromGitHub
+, fetchPypi
+, bibtool
+, pybtex
+, pymupdf
+, pynvim
+, pyperclip
+, roman
+, pdfrw
+, pagelabels
+, setuptools
+}:
+
+buildPythonApplication {
+  pname = "termpdf.py";
+  version = "2019-10-03";
+
+  src = fetchFromGitHub {
+    owner = "dsanson";
+    repo = "termpdf.py";
+    rev = "4f3bdf4b5a00801631f2498f2c38c81e0a588ae2";
+    sha256 = "05gbj2fqzqndq1mx6g9asa7i6z8a9jdjrvilfwx8lg23cs356m6m";
+  };
+
+  propagatedBuildInputs = [
+    bibtool
+    pybtex
+    pymupdf
+    pyperclip
+    roman
+    pagelabels
+    pdfrw
+    pynvim
+    setuptools
+  ];
+
+  # upstream doesn't contain tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = ''
+      A graphical pdf (and epub, cbz, ...) reader that works
+      inside the kitty terminal.
+    '';
+    homepage = "https://github.com/dsanson/termpdf.py";
+    maintainers = with maintainers; [ teto ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/teseq/default.nix b/nixpkgs/pkgs/applications/misc/teseq/default.nix
new file mode 100644
index 000000000000..c07cc39f84ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/teseq/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+let
+  version = "1.1.1";
+in
+stdenv.mkDerivation {
+  pname = "teseq";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://gnu/teseq/teseq-${version}.tar.gz";
+    sha256 = "08ln005qciy7f3jhv980kfhhfmh155naq59r5ah9crz1q4mx5yrj";
+  };
+
+  meta = {
+    homepage = "https://www.gnu.org/software/teseq/";
+    description = "Escape sequence illuminator";
+    license = lib.licenses.gpl3;
+
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.vaibhavsagar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/thinking-rock/default.nix b/nixpkgs/pkgs/applications/misc/thinking-rock/default.nix
new file mode 100644
index 000000000000..3bf3dda7ca4d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/thinking-rock/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, runtimeShell }:
+
+stdenv.mkDerivation {
+  name = "thinkingrock-binary-2.2.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/thinkingrock/ThinkingRock/TR%202.2.1/tr-2.2.1.tar.gz";
+    sha256 = "0hnwvvyc8miiz8w2g4iy7s4rgfy0kfbncgbgfzpsq6nrzq334kgm";
+  };
+
+  /* it would be a really bad idea to put thinkingrock tr executable in PATH!
+     the tr.sh script does use the coreutils tr itself
+     That's why I've renamed the wrapper and called it thinkingrock
+     However you may not rename the bin/tr script cause it will notice and throw an
+     "java.lang.IllegalArgumentException: Malformed branding token: thinkingrock"
+     exception. I hope that's fine
+  */
+
+  buildPhase = ''
+    # only keep /bin/tr
+    ls -1 bin/* | grep -ve  'bin/tr''$' | xargs rm
+    # don't keep the other .exe file either
+    find . -iname "*.exe" | xargs -n1 rm
+    mkdir -p $out/{nix-support/tr-files,bin}
+    cp -r . $out/nix-support/tr-files
+    cat >> $out/bin/thinkingrock << EOF
+    #!${runtimeShell}
+    exec $out/nix-support/tr-files/bin/tr "$@"
+    EOF
+    chmod +x $out/bin/thinkingrock
+  '';
+
+  installPhase = ":";
+
+  meta = with lib; {
+    description = "Task management system";
+    homepage = "http://www.thinkingrock.com.au/";
+    license = licenses.cddl;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tickrs/default.nix b/nixpkgs/pkgs/applications/misc/tickrs/default.nix
new file mode 100644
index 000000000000..ced50748d0f7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tickrs/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, perl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tickrs";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "tarkah";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "159smcjrf5193yijfpvy1g9b1gin72xwbjghfyrrphwscwhb215z";
+  };
+
+  cargoSha256 = "1s95b3x7vs1z8xs7j6j80y6mfpy5bdgnzmzn3qa9zr6cghabbf6n";
+
+  nativeBuildInputs = [ perl ];
+
+  meta = with lib; {
+    description = "Realtime ticker data in your terminal";
+    homepage = "https://github.com/tarkah/tickrs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mredaelli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/timewarrior/default.nix b/nixpkgs/pkgs/applications/misc/timewarrior/default.nix
new file mode 100644
index 000000000000..41dc179efe09
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/timewarrior/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "timewarrior";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "GothenburgBitFactory";
+    repo = "timewarrior";
+    rev = "v${version}";
+    sha256 = "0qvhpva0hmhybn0c2aajndw5vnxar1jw4pjjajd2k2cr6vax29dw";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "A command-line time tracker";
+    homepage = "https://timewarrior.net";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer mrVanDalo ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/tint2/default.nix b/nixpkgs/pkgs/applications/misc/tint2/default.nix
new file mode 100644
index 000000000000..c78fe9afeda4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tint2/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv
+, fetchFromGitLab
+, pkg-config
+, cmake
+, gettext
+, cairo
+, pango
+, pcre
+, glib
+, imlib2
+, gtk2
+, libXinerama
+, libXrender
+, libXcomposite
+, libXdamage
+, libX11
+, libXrandr
+, librsvg
+, libpthreadstubs
+, libXdmcp
+, libstartup_notification
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tint2";
+  version = "16.7";
+
+  src = fetchFromGitLab {
+    owner = "o9000";
+    repo = "tint2";
+    rev = version;
+    sha256 = "1937z0kixb6r82izj12jy4x8z4n96dfq1hx05vcsvsg1sx3wxgb0";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    gettext
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    cairo
+    pango
+    pcre
+    glib
+    imlib2
+    gtk2
+    libXinerama
+    libXrender
+    libXcomposite
+    libXdamage
+    libX11
+    libXrandr
+    librsvg
+    libpthreadstubs
+    libXdmcp
+    libstartup_notification
+  ];
+
+  cmakeFlags = [
+    "-Ddocdir=share/doc/${pname}"
+  ];
+
+  postPatch = ''
+    for f in ./src/launcher/apps-common.c \
+             ./src/launcher/icon-theme-common.c
+    do
+      substituteInPlace $f --replace /usr/share/ /run/current-system/sw/share/
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/o9000/tint2";
+    description = "Simple panel/taskbar unintrusive and light (memory, cpu, aestetic)";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tipp10/default.nix b/nixpkgs/pkgs/applications/misc/tipp10/default.nix
new file mode 100644
index 000000000000..0658b43626ed
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tipp10/default.nix
@@ -0,0 +1,25 @@
+{ cmake, lib, stdenv, mkDerivation, fetchFromGitLab,
+  qtmultimedia, qttools, ... }:
+
+mkDerivation rec {
+  pname = "tipp10";
+  version = "unstable-20200616";
+
+  src = fetchFromGitLab {
+    owner = "tipp10";
+    repo = "tipp10";
+    rev = "2dd6d45c8a91cff7075675d8875721456cdd5f1b";
+    sha256 = "16x51rv4r6cz5vsmrfbakqzbfxy456h82ibzacknp35f41cjdqq4";
+  };
+
+  nativeBuildInputs = [ cmake qttools ];
+  buildInputs = [ qtmultimedia ];
+
+  meta = with lib; {
+    description = "Learn and train typing with the ten-finger system";
+    homepage = "https://gitlab.com/a_a/tipp10";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ petabyteboy ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tippecanoe/default.nix b/nixpkgs/pkgs/applications/misc/tippecanoe/default.nix
new file mode 100644
index 000000000000..9aeb726e5c2c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tippecanoe/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, sqlite, zlib, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "tippecanoe";
+  version = "1.36.0";
+
+  src = fetchFromGitHub {
+    owner = "mapbox";
+    repo = pname;
+    rev = version;
+    sha256 = "0lbmhly4ivnqc6qk1k3sdqvsg6x3nfd8gnjx846bhqj4wag3f88m";
+  };
+
+  buildInputs = [ sqlite zlib ];
+  checkInputs = [ perl ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Build vector tilesets from large collections of GeoJSON features";
+    homepage = "https://github.com/mapbox/tippecanoe";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = with platforms; linux ++ darwin;
+    broken = stdenv.hostPlatform.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tiramisu/default.nix b/nixpkgs/pkgs/applications/misc/tiramisu/default.nix
new file mode 100644
index 000000000000..79286ff10c3c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tiramisu/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "tiramisu";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "Sweets";
+    repo = pname;
+    rev = version;
+    sha256 = "0aw17riwgrhsmcndzh7sw2zw8xvn3d203c2gcrqi9nk5pa7fwp9m";
+  };
+
+  postPatch = ''
+    sed -i 's/printf(element_delimiter)/printf("%s", element_delimiter)/' src/output.c
+  '';
+
+  buildInputs = [ glib ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Desktop notifications, the UNIX way";
+    longDescription = ''
+    tiramisu is a notification daemon based on dunst that outputs notifications
+    to STDOUT in order to allow the user to process notifications any way they
+    prefer.
+    '';
+    homepage = "https://github.com/Sweets/tiramisu";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wishfort36 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tiv/default.nix b/nixpkgs/pkgs/applications/misc/tiv/default.nix
new file mode 100644
index 000000000000..1ee176166ea4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tiv/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, imagemagick }:
+
+stdenv.mkDerivation rec {
+  pname = "tiv";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "stefanhaustein";
+    repo = "TerminalImageViewer";
+    rev = "v${version}";
+    sha256 = "17zqbwj2imk6ygyc142mw6v4fh7h4rd5vzn5wxr9gs0g8qdc6ixn";
+  };
+
+  buildInputs = [ imagemagick ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  preConfigure = "cd src/main/cpp";
+
+  meta = with lib; {
+    homepage = "https://github.com/stefanhaustein/TerminalImageViewer";
+    description = "Small C++ program to display images in a (modern) terminal using RGB ANSI codes and unicode block graphics characters";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ magnetophon ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tmatrix/default.nix b/nixpkgs/pkgs/applications/misc/tmatrix/default.nix
new file mode 100644
index 000000000000..e63370566880
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tmatrix/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, installShellFiles
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tmatrix";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "M4444";
+    repo = "TMatrix";
+    rev = "v${version}";
+    sha256 = "1cvgxmdpdzpl8w4z3sh4g5pbd15rd8s1kcspi9v95yf9rydyy69s";
+  };
+
+  nativeBuildInputs = [ cmake installShellFiles ];
+  buildInputs = [ ncurses ];
+
+  postInstall = ''
+    installManPage ../tmatrix.6
+  '';
+
+  meta = with lib; {
+    description = "Terminal based replica of the digital rain from The Matrix";
+    longDescription = ''
+      TMatrix is a program that simulates the digital rain form The Matrix.
+      It's focused on being the most accurate replica of the digital rain effect
+      achievable on a typical terminal, while also being customizable and
+      performant.
+    '';
+    homepage = "https://github.com/M4444/TMatrix";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ infinisil Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tnef/default.nix b/nixpkgs/pkgs/applications/misc/tnef/default.nix
new file mode 100644
index 000000000000..65e07915c760
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tnef/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "1.4.18";
+  pname = "tnef";
+
+  src = fetchFromGitHub {
+    owner  = "verdammelt";
+    repo   = "tnef";
+    rev    = version;
+    sha256 = "104g48mcm00bgiyzas2vf86331w7bnw7h3bc11ib4lp7rz6zqfck";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Unpacks MIME attachments of type application/ms-tnef";
+    longDescription = ''
+      TNEF is a program for unpacking MIME attachments of type "application/ms-tnef". This is a Microsoft only attachment.
+
+      Due to the proliferation of Microsoft Outlook and Exchange mail servers, more and more mail is encapsulated into this format.
+
+      The TNEF program allows one to unpack the attachments which were encapsulated into the TNEF attachment. Thus alleviating the need to use Microsoft Outlook to view the attachment.
+    '';
+    homepage = "https://github.com/verdammelt/tnef";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/todiff/default.nix b/nixpkgs/pkgs/applications/misc/todiff/default.nix
new file mode 100644
index 000000000000..bc172c9b49fb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/todiff/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "todiff";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "Ekleog";
+    repo = "todiff";
+    rev = version;
+    sha256 = "1y0v8nkaqb8kn61xwarpbyrq019gxx1f5f5p1hzw73nqxadc1rcm";
+  };
+
+  cargoSha256 = "1vyc230a2b0dry2057mkdkrjb7s9d0p43fnz4q67aqrpyr4jxwx2";
+
+  checkPhase = "cargo test --features=integration_tests";
+
+  meta = with lib; {
+    description = "Human-readable diff for todo.txt files";
+    homepage = "https://github.com/Ekleog/todiff";
+    maintainers = with maintainers; [ ekleog ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/todoist-electron/default.nix b/nixpkgs/pkgs/applications/misc/todoist-electron/default.nix
new file mode 100644
index 000000000000..cdcb54cbc6c4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/todoist-electron/default.nix
@@ -0,0 +1,65 @@
+{ stdenv, lib, fetchurl, makeDesktopItem, dpkg, atk, at-spi2-atk, glib, pango, gdk-pixbuf
+, gtk3, cairo, freetype, fontconfig, dbus, xorg, nss, nspr, alsaLib, cups, expat
+, udev, libpulseaudio, util-linux, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "todoist-electron";
+  version = "1.24.0";
+
+  src = fetchurl {
+    url = "https://github.com/KryDos/todoist-linux/releases/download/${version}/Todoist_${version}_amd64.deb";
+    sha256 = "0g35518z6nf6pnfyx4ax75rq8b8br72mi6wv6jzgac9ric1q4h2s";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "Todoist";
+    exec = "todoist %U";
+    icon = "todoist";
+    comment = "Todoist for Linux";
+    desktopName = "Todoist";
+    categories = "Utility";
+  };
+
+  nativeBuildInputs = [ makeWrapper dpkg ];
+  unpackPhase = ''
+    mkdir pkg
+    dpkg-deb -x $src pkg
+    sourceRoot=pkg
+  '';
+  installPhase = let
+    libPath = lib.makeLibraryPath ([
+      stdenv.cc.cc gtk3 atk at-spi2-atk glib pango gdk-pixbuf cairo freetype fontconfig dbus
+      nss nspr alsaLib libpulseaudio cups expat udev util-linux
+    ] ++ (with xorg; [
+      libXi libXcursor libXdamage libXrandr libXcomposite libXext libXfixes libxcb
+      libXrender libX11 libXtst libXScrnSaver
+    ]));
+  in ''
+    mkdir -p "$out/bin"
+    mv opt "$out/"
+    mv usr/share "$out/share"
+
+    # Patch binary
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${libPath}:\$ORIGIN" \
+      $out/opt/Todoist/todoist
+
+    # Hacky workaround for RPATH problems
+    makeWrapper $out/opt/Todoist/todoist $out/bin/todoist \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libpulseaudio udev ]}
+
+    # Desktop item
+    mkdir -p "$out/share"
+    rm -r "$out/share/applications"
+    cp -r "${desktopItem}/share/applications" "$out/share/applications"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/KryDos/todoist-linux";
+    description = "The Linux wrapper for Todoist web version";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ i077 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/todoist/default.nix b/nixpkgs/pkgs/applications/misc/todoist/default.nix
new file mode 100644
index 000000000000..68388376f8f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/todoist/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "todoist";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "sachaos";
+    repo = "todoist";
+    rev = "v${version}";
+    sha256 = "0d3c621jaqxd6i58xm6nvi0avrh5mk23r169i95bn73igzw62w33";
+  };
+
+  vendorSha256 = "0cznb8glh36dwyyn1gx1ggkwa9zffrrxg52k78brnaczsl0rsmky";
+
+  doCheck = false;
+
+  meta = {
+    homepage = "https://github.com/sachaos/todoist";
+    description = "Todoist CLI Client";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/toggldesktop/TogglDesktop.pro b/nixpkgs/pkgs/applications/misc/toggldesktop/TogglDesktop.pro
new file mode 100644
index 000000000000..e86156313d1f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/toggldesktop/TogglDesktop.pro
@@ -0,0 +1,19 @@
+QT += core network widgets
+
+DEFINES += APP_ENVIRONMENT=\\\"production\\\"
+DEFINES += APP_VERSION=\\\"@version@\\\"
+
+TARGET = toggldesktop
+TEMPLATE = app
+
+SOURCES += *.cpp
+HEADERS += *.h
+FORMS += *.ui
+RESOURCES += *.qrc
+
+target.path = $$PREFIX
+
+INSTALLS += target
+
+CONFIG += link_pkgconfig
+PKGCONFIG += bugsnag-qt qxtglobalshortcut qt-oauth-lib toggl x11 xscrnsaver
diff --git a/nixpkgs/pkgs/applications/misc/toggldesktop/default.nix b/nixpkgs/pkgs/applications/misc/toggldesktop/default.nix
new file mode 100644
index 000000000000..44c46f746550
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/toggldesktop/default.nix
@@ -0,0 +1,149 @@
+{ mkDerivation, lib, fetchzip, buildEnv, makeDesktopItem, runCommand, writeText, pkg-config
+, cmake, qmake, cacert, jsoncpp, libX11, libXScrnSaver, lua, openssl, poco
+, qtbase, qtwebengine, qtx11extras, sqlite }:
+
+let
+  name = "toggldesktop-${version}";
+  version = "7.4.231";
+
+  src = fetchzip {
+    url = "https://github.com/toggl/toggldesktop/archive/v${version}.tar.gz";
+    sha256 = "01hqkx9dljnhwnyqi6mmzfp02hnbi2j50rsfiasniqrkbi99x9v1";
+  };
+
+  bugsnag-qt = mkDerivation rec {
+    pname = "bugsnag-qt";
+    version = "20180522.005732";
+
+    src = fetchzip {
+      url = "https://github.com/yegortimoshenko/bugsnag-qt/archive/${version}.tar.gz";
+      sha256 = "02s6mlggh0i4a856md46dipy6mh47isap82jlwmjr7hfsk2ykgnq";
+    };
+
+    nativeBuildInputs = [ qmake ];
+    buildInputs = [ qtbase ];
+  };
+
+  qxtglobalshortcut = mkDerivation rec {
+    pname = "qxtglobalshortcut";
+    version = "f584471dada2099ba06c574bdfdd8b078c2e3550";
+
+    src = fetchzip {
+      url = "https://github.com/hluk/qxtglobalshortcut/archive/${version}.tar.gz";
+      sha256 = "1iy17gypav10z8aa62s5jb6mq9y4kb9ms4l61ydmk3xwlap7igw1";
+    };
+
+    nativeBuildInputs = [ cmake ];
+    buildInputs = [ qtbase qtx11extras ];
+  };
+
+  qt-oauth-lib = mkDerivation rec {
+    pname = "qt-oauth-lib";
+    version = "20190125.190943";
+
+    src = fetchzip {
+      url = "https://github.com/yegortimoshenko/qt-oauth-lib/archive/${version}.tar.gz";
+      sha256 = "0zmfgvdf6n79mgfvbda7lkdxxlzjmy86436gqi2r5x05vq04sfrj";
+    };
+
+    nativeBuildInputs = [ qmake ];
+    buildInputs = [ qtbase qtwebengine ];
+  };
+
+  poco-pc = writeText "poco.pc" ''
+    Name: Poco
+    Description: ${poco.meta.description}
+    Version: ${poco.version}
+    Libs: -L${poco}/lib -lPocoDataSQLite -lPocoData -lPocoNet -lPocoNetSSL -lPocoCrypto -lPocoUtil -lPocoXML -lPocoFoundation
+    Cflags: -I${poco}/include/Poco
+  '';
+
+  poco-pc-wrapped = runCommand "poco-pc-wrapped" {} ''
+    mkdir -p $out/lib/pkgconfig && ln -s ${poco-pc} $_/poco.pc
+  '';
+
+  libtoggl = mkDerivation {
+    name = "libtoggl-${version}";
+    inherit src version;
+
+    sourceRoot = "source/src";
+
+    nativeBuildInputs = [ qmake pkg-config ];
+    buildInputs = [ jsoncpp lua openssl poco poco-pc-wrapped sqlite libX11 ];
+
+    postPatch = ''
+      cat ${./libtoggl.pro} > libtoggl.pro
+      rm get_focused_window_{mac,windows}.cc
+    '';
+  };
+
+  toggldesktop = mkDerivation {
+    name = "${name}-unwrapped";
+    inherit src version;
+
+    sourceRoot = "source/src/ui/linux/TogglDesktop";
+
+    postPatch = ''
+      substituteAll ${./TogglDesktop.pro} TogglDesktop.pro
+      substituteInPlace toggl.cpp \
+        --replace ./../../../toggl_api.h toggl_api.h
+    '';
+
+    postInstall = ''
+      ln -s ${cacert}/etc/ssl/certs/ca-bundle.crt $out/cacert.pem
+    '';
+
+    nativeBuildInputs = [ qmake pkg-config ];
+
+    buildInputs = [
+      bugsnag-qt
+      libtoggl
+      qxtglobalshortcut
+      qtbase
+      qtwebengine
+      qt-oauth-lib
+      qtx11extras
+      libX11
+      libXScrnSaver
+    ];
+  };
+
+  toggldesktop-icons = mkDerivation {
+    name = "${name}-icons";
+    inherit (toggldesktop) src sourceRoot;
+
+    installPhase = ''
+      for f in icons/*; do
+        mkdir -p $out/share/icons/hicolor/$(basename $f)/apps
+        mv $f/toggldesktop.png $_
+      done
+    '';
+  };
+
+  toggldesktop-wrapped = runCommand "toggldesktop-wrapped" {} ''
+    mkdir -p $out/bin && ln -s ${toggldesktop}/toggldesktop $_
+  '';
+
+  desktopItem = makeDesktopItem rec {
+    categories = "Utility;";
+    desktopName = "Toggl";
+    genericName = desktopName;
+    name = "toggldesktop";
+    exec = "${toggldesktop-wrapped}/bin/toggldesktop";
+    icon = "toggldesktop";
+  };
+in
+
+buildEnv {
+  inherit name;
+  paths = [ desktopItem toggldesktop-icons toggldesktop-wrapped ];
+
+  meta = with lib; {
+    broken = true; # libtoggl is broken
+    description = "Client for Toggl time tracking service";
+    homepage = "https://github.com/toggl/toggldesktop";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ yegortimoshenko ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/toggldesktop/libtoggl.pro b/nixpkgs/pkgs/applications/misc/toggldesktop/libtoggl.pro
new file mode 100644
index 000000000000..c8303440fe67
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/toggldesktop/libtoggl.pro
@@ -0,0 +1,20 @@
+TARGET = toggl
+TEMPLATE = lib
+
+SOURCES += *.cc
+HEADERS += *.h
+
+headers.files = $$HEADERS
+headers.path = $$PREFIX/include
+target.path = $$PREFIX/lib
+
+INSTALLS += headers target
+
+CONFIG += create_prl create_pc link_pkgconfig
+PKGCONFIG += jsoncpp openssl lua poco sqlite3 x11
+
+QMAKE_PKGCONFIG_NAME = $$TARGET
+QMAKE_PKGCONFIG_PREFIX = $$PREFIX
+QMAKE_PKGCONFIG_LIBDIR = $$target.path
+QMAKE_PKGCONFIG_INCDIR = $$headers.path
+QMAKE_PKGCONFIG_DESTDIR = pkgconfig
diff --git a/nixpkgs/pkgs/applications/misc/tomboy/default.nix b/nixpkgs/pkgs/applications/misc/tomboy/default.nix
new file mode 100644
index 000000000000..5aaec7a1e600
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tomboy/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, itstool, intltool, pkg-config
+, libxml2, gnome2, atk, gtk2, glib
+, mono, mono-addins, dbus-sharp-2_0, dbus-sharp-glib-2_0, gnome-sharp, gtk-sharp-2_0
+, makeWrapper, lib}:
+
+let
+  version = "1.15.9";
+in
+
+stdenv.mkDerivation {
+  pname = "tomboy";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://github.com/tomboy-notes/tomboy/releases/download/${version}/tomboy-${version}.tar.xz";
+    sha256 = "0j5jmd079bm2fydqaic5ymbfdxna3qlx6fkp2mqhgcdr7prsbl3q";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ itstool intltool
+    libxml2 gnome2.GConf atk gtk2
+    mono mono-addins dbus-sharp-2_0 dbus-sharp-glib-2_0 gnome-sharp gtk-sharp-2_0
+    makeWrapper ];
+
+  postInstall = ''
+    makeWrapper "${mono}/bin/mono" "$out/bin/tomboy" \
+      --add-flags "$out/lib/tomboy/Tomboy.exe" \
+      --prefix MONO_GAC_PREFIX : ${dbus-sharp-2_0} \
+      --prefix MONO_GAC_PREFIX : ${dbus-sharp-glib-2_0} \
+      --prefix MONO_GAC_PREFIX : ${gtk-sharp-2_0} \
+      --prefix MONO_GAC_PREFIX : ${gnome-sharp} \
+      --prefix MONO_GAC_PREFIX : ${mono-addins} \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ glib gtk-sharp-2_0 gtk-sharp-2_0.gtk gnome2.GConf ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Tomboy";
+    description = "A simple note-taking application with synchronization";
+    platforms = platforms.linux;
+    license = lib.licenses.lgpl2;
+    maintainers = with maintainers; [ stesie ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/toot/default.nix b/nixpkgs/pkgs/applications/misc/toot/default.nix
new file mode 100644
index 000000000000..d992d9cdc410
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/toot/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  version = "0.27.0";
+  name    = "toot-${version}";
+
+  src = fetchFromGitHub {
+    owner  = "ihabunek";
+    repo   = "toot";
+    rev    = version;
+    sha256 = "197g9lvwg8qnsf18kifcqdj3cpfdnxz9vay766rn9bi4nfz0s6j2";
+  };
+
+  checkInputs = with python3Packages; [ pytest ];
+
+  propagatedBuildInputs = with python3Packages;
+    [ requests beautifulsoup4 future wcwidth urwid ];
+
+  checkPhase = ''
+    py.test
+  '';
+
+  meta = with lib; {
+    description = "Mastodon CLI interface";
+    homepage    = "https://github.com/ihabunek/toot";
+    license     = licenses.gpl3;
+    maintainers = [ maintainers.matthiasbeyer ];
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/tootle/default.nix b/nixpkgs/pkgs/applications/misc/tootle/default.nix
new file mode 100644
index 000000000000..3b9b09aaba9b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tootle/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, fetchpatch
+, vala
+, meson
+, ninja
+, pkg-config
+, python3
+, libgee
+, gsettings-desktop-schemas
+, gnome3
+, pantheon
+, wrapGAppsHook
+, gtk3
+, json-glib
+, glib
+, glib-networking
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tootle";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "bleakgrey";
+    repo = pname;
+    rev = version;
+    sha256 = "1z3wyx316nns6gi7vlvcfmalhvxncmvcmmlgclbv6b6hwl5x2ysi";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    glib-networking
+    gnome3.libsoup
+    gsettings-desktop-schemas
+    gtk3
+    json-glib
+    libgee
+    pantheon.granite
+  ];
+
+  patches = [
+    # Fix build with Vala 0.46
+    # https://github.com/bleakgrey/tootle/pull/164
+    (fetchpatch {
+      url = "https://github.com/worldofpeace/tootle/commit/0a88bdad6d969ead1e4058b1a19675c9d6857b16.patch";
+      sha256 = "0xyx00pgswnhxxbsxngsm6khvlbfcl6ic5wv5n64x7klk8rzh6cm";
+    })
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Simple Mastodon client designed for elementary OS";
+    homepage = "https://github.com/bleakgrey/tootle";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/topydo/default.nix b/nixpkgs/pkgs/applications/misc/topydo/default.nix
new file mode 100644
index 000000000000..4ff3090d1f85
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/topydo/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, python3Packages, fetchFromGitHub, glibcLocales }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "topydo";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner = "bram85";
+    repo = pname;
+    rev = version;
+    sha256 = "0b3dz137lpbvpjvfy42ibqvj3yk526x4bpn819fd11lagn77w69r";
+  };
+
+  propagatedBuildInputs = [
+    arrow
+    icalendar
+    glibcLocales
+    prompt_toolkit
+    urwid
+    watchdog
+  ];
+
+  checkInputs = [ mock freezegun pylint ];
+
+  # Skip test that has been reported multiple times upstream without result:
+  # bram85/topydo#271, bram85/topydo#274.
+  checkPhase = ''
+    substituteInPlace test/test_revert_command.py --replace 'test_revert_ls' 'dont_test_revert_ls'
+    python -m unittest discover
+  '';
+
+  LC_ALL="en_US.UTF-8";
+
+  meta = with lib; {
+    description = "A cli todo application compatible with the todo.txt format";
+    homepage = "https://github.com/bram85/topydo";
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tpmmanager/default.nix b/nixpkgs/pkgs/applications/misc/tpmmanager/default.nix
new file mode 100644
index 000000000000..37d44d8bf169
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tpmmanager/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchgit, qt4, qmake4Hook, trousers }:
+
+stdenv.mkDerivation rec {
+  version = "0.8.1";
+  pname = "tpmmanager";
+
+  src = fetchgit {
+    url = "https://github.com/Sirrix-AG/TPMManager";
+    rev = "9f989206635a6d2c1342576c90fa73eb239519cd";
+    sha256 = "24a606f88fed67ed0d0e61dc220295e9e1ab8db3ef3d028fa34b04ff30652d8e";
+  };
+
+  nativeBuildInputs = [ qmake4Hook ];
+
+  buildInputs = [ qt4 trousers ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -Dpm755 -D bin/tpmmanager $out/bin/tpmmanager
+
+    mkdir -p $out/share/applications
+    cat > $out/share/applications/tpmmanager.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Version=1.0
+    Name=tpmmanager
+    Comment=TPM manager
+    Exec=$out/bin/tpmmanager
+    Terminal=false
+    EOF
+    '';
+
+  meta = {
+    homepage = "https://projects.sirrix.com/trac/tpmmanager";
+    description = "Tool for managing the TPM";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ tstrobel ];
+    platforms = with lib.platforms; linux;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/translate-shell/default.nix b/nixpkgs/pkgs/applications/misc/translate-shell/default.nix
new file mode 100644
index 000000000000..03ed031be857
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/translate-shell/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, fribidi, rlwrap, gawk, groff, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "translate-shell";
+  version = "0.9.6.12";
+
+  src = fetchFromGitHub {
+    owner = "soimort";
+    repo = "translate-shell";
+    rev = "v${version}";
+    sha256 = "075vqnha21rhr1b61dim7dqlfwm1yffyzcaa83s36rpk9r5sddzx";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/trans \
+      --prefix PATH : ${lib.makeBinPath [
+        gawk
+        curl
+        ncurses
+        rlwrap
+        groff
+        fribidi
+      ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.soimort.org/translate-shell";
+    description = "Command-line translator using Google Translate, Bing Translator, Yandex.Translate, and Apertium";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ ebzzry infinisil ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tthsum/default.nix b/nixpkgs/pkgs/applications/misc/tthsum/default.nix
new file mode 100644
index 000000000000..7db743559a4e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tthsum/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "tthsum";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "http://tthsum.devs.nu/pkg/tthsum-${version}.tar.bz2";
+    sha256 = "0z6jq8lbg9rasv98kxfs56936dgpgzsg3yc9k52878qfw1l2bp59";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp share/tthsum.1.gz $out/share/man/man1
+    cp obj-unix/tthsum $out/bin
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "An md5sum-alike program that works with Tiger/THEX hashes";
+    longDescription = ''
+      tthsum generates or checks TTH checksums (root of the THEX hash
+      tree). The Merkle Hash Tree, invented by Ralph Merkle, is a hash
+      construct that exhibits desirable properties for verifying the
+      integrity of files and file subranges in an incremental or
+      out-of-order fashion. tthsum uses the Tiger hash algorithm for
+      both the internal and the leaf nodes.
+
+      The specification of the Tiger hash algorithm is at:
+      http://www.cs.technion.ac.il/~biham/Reports/Tiger/
+
+      The specification of the THEX algorithm is at:
+      http://adc.sourceforge.net/draft-jchapweske-thex-02.html
+    '';
+    homepage = "http://tthsum.devs.nu/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tty-share/default.nix b/nixpkgs/pkgs/applications/misc/tty-share/default.nix
new file mode 100644
index 000000000000..be9a0bafcc62
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tty-share/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, buildGoPackage, fetchFromGitHub }:
+
+# Upstream has a `./vendor` directory with all deps which we rely upon.
+buildGoPackage rec {
+  pname = "tty-share";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "elisescu";
+    repo = "tty-share";
+    rev = "v${version}";
+    sha256 = "1d2vd3d1lb4n0jq4s0p5mii1vz4r3z36hykr5mnx53srsni1wsj5";
+  };
+
+  goPackagePath = "github.com/elisescu/tty-share";
+
+  meta = with lib; {
+    homepage = "https://tty-share.com";
+    description = "Share terminal via browser for remote work or shared sessions";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ andys8 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tty-solitaire/default.nix b/nixpkgs/pkgs/applications/misc/tty-solitaire/default.nix
new file mode 100644
index 000000000000..9b2fcf3d17a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tty-solitaire/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "tty-solitaire";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "mpereira";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0kix7wfy2bda8cw5kfm7bm5acd5fqmdl9g52ms9bza4kf2jnb754";
+  };
+
+  buildInputs = [ ncurses ];
+
+  patchPhase = "sed -i -e '/^CFLAGS *?= *-g *$/d' Makefile";
+
+  makeFlags = [ "CC=cc" "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Klondike Solitaire in your ncurses terminal";
+    license = licenses.mit;
+    homepage = "https://github.com/mpereira/tty-solitaire";
+    platforms = ncurses.meta.platforms;
+    maintainers = [ maintainers.AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tuir/default.nix b/nixpkgs/pkgs/applications/misc/tuir/default.nix
new file mode 100644
index 000000000000..c086cdb9503b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tuir/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitLab, python3Packages }:
+
+with python3Packages;
+buildPythonApplication rec {
+  pname = "tuir";
+  version = "1.29.0";
+
+  src = fetchFromGitLab {
+    owner = "ajak";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1fqp6bvq8kzdsf3nna4mn1phdcixpx76bya43xrivxjbzsfl59ib";
+  };
+
+  # Tests try to access network
+  doCheck = false;
+
+  checkPhase = ''
+    py.test
+  '';
+
+  checkInputs = [ coverage coveralls docopt mock pylint pytest vcrpy ];
+
+  propagatedBuildInputs = [ beautifulsoup4 decorator kitchen requests ];
+
+  meta = with lib; {
+    description = "Browse Reddit from your Terminal (fork of rtv)";
+    homepage = "https://gitlab.com/ajak/tuir/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tut/default.nix b/nixpkgs/pkgs/applications/misc/tut/default.nix
new file mode 100644
index 000000000000..1fa3e9b7883a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tut/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "tut";
+  version = "0.0.14";
+
+  goPackagePath = "github.com/RasmusLindroth/tut";
+  goDeps = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner = "RasmusLindroth";
+    repo = pname;
+    rev = version;
+    sha256 = "1l7lc6cjx97v9zhc0b6lfzqjmyv1i3qj83drkck36if3mc60vvwi";
+  };
+
+  meta = with lib; {
+    description = "A TUI for Mastodon with vim inspired keys";
+    homepage = "https://github.com/RasmusLindroth/tut";
+    license = licenses.mit;
+    maintainers = with maintainers; [ equirosa ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tut/deps.nix b/nixpkgs/pkgs/applications/misc/tut/deps.nix
new file mode 100644
index 000000000000..9264153e5030
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tut/deps.nix
@@ -0,0 +1,318 @@
+# file generated from go.mod using vgo2nix (https://github.com/adisbladis/vgo2nix)
+[
+  {
+    goPackagePath = "github.com/BurntSushi/toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/BurntSushi/toml";
+      rev = "v0.3.1";
+      sha256 = "1fjdwwfzyzllgiwydknf1pwjvy49qxfsczqx5gz3y0izs7as99j6";
+    };
+  }
+  {
+    goPackagePath = "github.com/DATA-DOG/go-sqlmock";
+    fetch = {
+      type = "git";
+      url = "https://github.com/DATA-DOG/go-sqlmock";
+      rev = "v1.3.3";
+      sha256 = "1xrly2vmy1mgj9dbkmivhh8gvq6v9f9xy2yp2dw54i1895zzs928";
+    };
+  }
+  {
+    goPackagePath = "github.com/PuerkitoBio/goquery";
+    fetch = {
+      type = "git";
+      url = "https://github.com/PuerkitoBio/goquery";
+      rev = "v1.5.0";
+      sha256 = "1fqf4rs66wy02nxz6w4mvs2qawf2j8srz17i294v64y8gvxisp56";
+    };
+  }
+  {
+    goPackagePath = "github.com/andybalholm/cascadia";
+    fetch = {
+      type = "git";
+      url = "https://github.com/andybalholm/cascadia";
+      rev = "v1.0.0";
+      sha256 = "09j8cavbhqqdxjqrkwbc40g8p0i49zf3184rpjm5p2rjbprcghcc";
+    };
+  }
+  {
+    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/fatih/color";
+    fetch = {
+      type = "git";
+      url = "https://github.com/fatih/color";
+      rev = "v1.9.0";
+      sha256 = "086z8ssmr1fn9ba4mqnw7pnccfpys6l5yfhvycv1gdrsk7n27mvs";
+    };
+  }
+  {
+    goPackagePath = "github.com/gdamore/encoding";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gdamore/encoding";
+      rev = "v1.0.0";
+      sha256 = "1vmm5zll92i2fm4ajqx0gyx0p9j36496x5nabi3y0x7h0inv0pk9";
+    };
+  }
+  {
+    goPackagePath = "github.com/gdamore/tcell";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gdamore/tcell";
+      rev = "v1.3.0";
+      sha256 = "1csg9qkmbg4ksj5247kgqcy7bxvqgz6b98r0rv2s4c1mkc99gx2r";
+    };
+  }
+  {
+    goPackagePath = "github.com/gopherjs/gopherjs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gopherjs/gopherjs";
+      rev = "0766667cb4d1";
+      sha256 = "13pfc9sxiwjky2lm1xb3i3lcisn8p6mgjk2d927l7r92ysph8dmw";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "v1.4.1";
+      sha256 = "03n1n0nwz3k9qshmriycqznnnvd3dkzsfwpnfjzzvafjxk9kyapv";
+    };
+  }
+  {
+    goPackagePath = "github.com/jtolds/gls";
+    fetch = {
+      type = "git";
+      url = "https://github.com/jtolds/gls";
+      rev = "v4.20.0";
+      sha256 = "1k7xd2q2ysv2xsh373qs801v6f359240kx0vrl0ydh7731lngvk6";
+    };
+  }
+  {
+    goPackagePath = "github.com/kyoh86/xdg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kyoh86/xdg";
+      rev = "v1.2.0";
+      sha256 = "0a5nz53fdz1c2qvwlf2dpjdd72nxri95i6q4b07c37kiipgaxncn";
+    };
+  }
+  {
+    goPackagePath = "github.com/lucasb-eyer/go-colorful";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lucasb-eyer/go-colorful";
+      rev = "v1.0.3";
+      sha256 = "12bgz6dxbb2ki1g3x7fg9ipsjgfkd58fp7cdpv63h4kvlj2n7j69";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-colorable";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-colorable";
+      rev = "v0.1.4";
+      sha256 = "1yxcz08kminqr1221zxpibnbzfcgs3fafin0z9zqb3gqvf74jywz";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "v0.0.11";
+      sha256 = "0h671sv7hfprja495kavazkalkx7xzaqksjh13brcnwq67ijrali";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-mastodon";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-mastodon";
+      rev = "3e91c76504df";
+      sha256 = "1wh2hqrzx80gfs1y34f4h68mnz83asx88v0bsw372ch5j1shswlr";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "v0.0.8";
+      sha256 = "14ilkbhnhl8yj443dd1ga4biapswv4g0b4vm2mix78a8srdww39j";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-tty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-tty";
+      rev = "v0.0.3";
+      sha256 = "0d1d63q02pc5k5ga8bw4yjbkrli2769vg237psajsskjirjy53vf";
+    };
+  }
+  {
+    goPackagePath = "github.com/microcosm-cc/bluemonday";
+    fetch = {
+      type = "git";
+      url = "https://github.com/microcosm-cc/bluemonday";
+      rev = "v1.0.2";
+      sha256 = "0j0aylsxqjcj49w7ph8cmpaqjlpvg7mb5mrcrd9bg71dlb9z9ir2";
+    };
+  }
+  {
+    goPackagePath = "github.com/pelletier/go-toml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/pelletier/go-toml";
+      rev = "v1.7.0";
+      sha256 = "0sqrwldjj2qxrgjz1diw1ffviya4ma7mz7nhdgydbisi2h55lqla";
+    };
+  }
+  {
+    goPackagePath = "github.com/rivo/tview";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rivo/tview";
+      rev = "ca37f83cb2e7";
+      sha256 = "05nifgrxv6aib8f20mhs9m0grdfdyyg5vyhk6zgwsxjlwbzaj021";
+    };
+  }
+  {
+    goPackagePath = "github.com/rivo/uniseg";
+    fetch = {
+      type = "git";
+      url = "https://github.com/rivo/uniseg";
+      rev = "v0.1.0";
+      sha256 = "0flpc1px1l6b1lxzhdxi0mvpkkjchppvgxshxxnlmm40s76i9ww5";
+    };
+  }
+  {
+    goPackagePath = "github.com/smartystreets/assertions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smartystreets/assertions";
+      rev = "b2de0cb4f26d";
+      sha256 = "1i7ldgavgl35c7gk25p7bvdr282ckng090zr4ch9mk1705akx09y";
+    };
+  }
+  {
+    goPackagePath = "github.com/smartystreets/goconvey";
+    fetch = {
+      type = "git";
+      url = "https://github.com/smartystreets/goconvey";
+      rev = "v1.6.4";
+      sha256 = "07zjxwszayal88z1j2bwnqrsa32vg8l4nivks5yfr9j8xfsw7n6m";
+    };
+  }
+  {
+    goPackagePath = "github.com/tomnomnom/linkheader";
+    fetch = {
+      type = "git";
+      url = "https://github.com/tomnomnom/linkheader";
+      rev = "02ca5825eb80";
+      sha256 = "1ghrv28vrvvrpyr4d4q817yby8g1j04mid8ql00sds1pvfv67d32";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "v1.20.0";
+      sha256 = "0y6f4sbzkiiwrxbl15biivj8c7qwxnvm3zl2dd3mw4wzg4x10ygj";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "c2843e01d9a2";
+      sha256 = "01xgxbj5r79nmisdvpq48zfy8pzaaj90bn6ngd4nf33j9ar1dp8r";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "d3edc9973b7e";
+      sha256 = "12zbjwcsh9b0lwycqlkrnbyg5a6a9dzgj8hhgq399bdda5bd97y7";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sync";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sync";
+      rev = "cd5d95a43a6e";
+      sha256 = "1nqkyz2y1qvqcma52ijh02s8aiqmkfb95j08f6zcjhbga3ds6hds";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "85ca7c5b95cd";
+      sha256 = "1504qkgbhhm4f0bhk77v2r1lj6x171ay5m79alkg78wjb5cign5l";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "v0.3.2";
+      sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/tools";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/tools";
+      rev = "ab21143f2384";
+      sha256 = "15fk0psk53pplpyghz55bhay0kvsv5rikmn5hwgjnnyxq9vfy178";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/check.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/check.v1";
+      rev = "20d25e280405";
+      sha256 = "0k1m83ji9l1a7ng8a7v40psbymxasmssbrrhpdv2wl4rhs0nc3np";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/ini.v1";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/ini.v1";
+      rev = "v1.55.0";
+      sha256 = "1b7wsfal3b3pl5pv5n2qix09b3imh0zhirrphlsg5p2rb8fk0d0j";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "v2.2.8";
+      sha256 = "1inf7svydzscwv9fcjd2rm61a4xjk6jkswknybmns2n58shimapw";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/misc/tvbrowser/bin.nix b/nixpkgs/pkgs/applications/misc/tvbrowser/bin.nix
new file mode 100644
index 000000000000..fa08b5f555a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tvbrowser/bin.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre, makeDesktopItem }:
+
+let
+  desktopItem = makeDesktopItem {
+    name = "tvbrowser";
+    exec = "tvbrowser";
+    icon = "tvbrowser";
+    comment = "Themeable and easy to use TV Guide";
+    desktopName = "TV-Browser";
+    genericName = "Electronic TV Program Guide";
+    categories = "AudioVideo;TV;Java;";
+    startupNotify = "true";
+    extraEntries = ''
+      StartupWMClass=tvbrowser-TVBrowser
+    '';
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "tvbrowser";
+  version = "4.0.1";
+  name = "${pname}-bin-${version}";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/TV-Browser%20Releases%20%28Java%208%20and%20higher%29/${version}/${pname}_${version}_bin.tar.gz";
+    sha256 = "0ahsirf6cazs5wykgbwsc6n35w6jprxyphzqmm7d370n37sb07pm";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/share/java/${pname}
+    cp -R * $out/share/java/${pname}
+    rm $out/share/java/${pname}/${pname}.{sh,desktop}
+
+    mkdir -p $out/share/applications
+    ln -s ${desktopItem}/share/applications/* $out/share/applications/
+
+    for i in 16 32 48 128; do
+      mkdir -p $out/share/icons/hicolor/''${i}x''${i}/apps
+      ln -s $out/share/java/${pname}/imgs/${pname}$i.png $out/share/icons/hicolor/''${i}x''${i}/apps/${pname}.png
+    done
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/${pname} \
+      --add-flags "-jar $out/share/java/${pname}/${pname}.jar" \
+      --run "cd $out/share/java/${pname}"
+  '';
+
+  meta = with lib; {
+    description = "Electronic TV Program Guide";
+    homepage = "https://www.tvbrowser.org/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jfrankenau ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/twmn/default.nix b/nixpkgs/pkgs/applications/misc/twmn/default.nix
new file mode 100644
index 000000000000..b7974966be45
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/twmn/default.nix
@@ -0,0 +1,36 @@
+{ lib, mkDerivation, fetchFromGitHub, qtbase, qtx11extras, qmake, pkg-config, boost }:
+
+mkDerivation {
+  name = "twmn-git-2018-10-01";
+
+  src = fetchFromGitHub {
+    owner = "sboli";
+    repo = "twmn";
+    rev = "80f48834ef1a07087505b82358308ee2374b6dfb";
+    sha256 = "0mpjvp800x07lp9i3hfcc5f4bqj1fj4w3dyr0zwaxc6wqmm0fdqz";
+  };
+
+  nativeBuildInputs = [ pkg-config qmake ];
+  buildInputs = [ qtbase qtx11extras boost ];
+
+  postPatch = ''
+    sed -i s/-Werror// twmnd/twmnd.pro
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    cp bin/* "$out/bin"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A notification system for tiling window managers";
+    homepage = "https://github.com/sboli/twmn";
+    platforms = with lib.platforms; linux;
+    maintainers = [ lib.maintainers.matejc ];
+    license = lib.licenses.lgpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tzupdate/default.nix b/nixpkgs/pkgs/applications/misc/tzupdate/default.nix
new file mode 100644
index 000000000000..3873f8d248eb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tzupdate/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, python3 }:
+
+let
+  inherit (python3.pkgs) buildPythonApplication fetchPypi requests;
+in
+buildPythonApplication rec {
+  pname = "tzupdate";
+  version = "2.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5b55795c390e4ccc90e649c8cc387447daaf30a21d68f7196b49824cbcba8adc";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  meta = with lib; {
+    description = "Update timezone information based on geoip";
+    homepage = "https://github.com/cdown/tzupdate";
+    maintainers = [ maintainers.michaelpj ];
+    license = licenses.unlicense;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/udevil/default.nix b/nixpkgs/pkgs/applications/misc/udevil/default.nix
new file mode 100644
index 000000000000..e83a5e9a2c7e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/udevil/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, intltool, glib, pkg-config, udev, util-linux, acl }:
+stdenv.mkDerivation {
+  name = "udevil-0.4.4";
+  src = fetchurl {
+    url = "https://github.com/IgnorantGuru/udevil/archive/0.4.4.tar.gz";
+    sha256 = "0z1bhaayambrcn7bgnrqk445k50ifabmw8q4i9qj49nnbcvxhbxd";
+  };
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ intltool glib udev ];
+  configurePhase = ''
+    substituteInPlace src/Makefile.in --replace "-o root -g root" ""
+    # do not set setuid bit in nix store
+    substituteInPlace src/Makefile.in --replace 4755 0755
+    ./configure \
+      --prefix=$out \
+      --with-mount-prog=${util-linux}/bin/mount \
+      --with-umount-prog=${util-linux}/bin/umount \
+      --with-losetup-prog=${util-linux}/bin/losetup \
+      --with-setfacl-prog=${acl.bin}/bin/setfacl \
+      --sysconfdir=$prefix/etc
+  '';
+  patches = [ ./device-info-sys-stat.patch ];
+  meta = {
+    description = "A command line Linux program which mounts and unmounts removable devices without a password, shows device info, and monitors device changes";
+    homepage = "https://ignorantguru.github.io/udevil/";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/udevil/device-info-sys-stat.patch b/nixpkgs/pkgs/applications/misc/udevil/device-info-sys-stat.patch
new file mode 100644
index 000000000000..554682108e39
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/udevil/device-info-sys-stat.patch
@@ -0,0 +1,14 @@
+diff --git a/src/device-info.h b/src/device-info.h
+index 6cb3683..ddac24c 100644
+--- a/src/device-info.h
++++ b/src/device-info.h
+@@ -18,7 +18,8 @@
+ // intltool
+ #include <glib/gi18n.h>
+ 
+-
++// stat
++#include <sys/stat.h>
+ 
+ typedef struct device_t  {
+     struct udev_device *udevice;
diff --git a/nixpkgs/pkgs/applications/misc/udiskie/default.nix b/nixpkgs/pkgs/applications/misc/udiskie/default.nix
new file mode 100644
index 000000000000..e2178850da1c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/udiskie/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchFromGitHub, asciidoc-full, gettext
+, gobject-introspection, gtk3, libappindicator-gtk3, libnotify, librsvg
+, udisks2, wrapGAppsHook
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "udiskie";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "coldfix";
+    repo = "udiskie";
+    rev = version;
+    sha256 = "0kn5w6bm3rmbszphzbxpjfnkawb2naa230svzkpmh3n6dcdvk4qa";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    asciidoc-full        # For building man page.
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    librsvg              # required for loading svg icons (udiskie uses svg icons)
+    gobject-introspection
+    libnotify
+    gtk3
+    udisks2
+    libappindicator-gtk3
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    docopt
+    pygobject3
+    pyyaml
+  ];
+
+  postBuild = "make -C doc";
+
+  postInstall = ''
+    mkdir -p $out/share/man/man8
+    cp -v doc/udiskie.8 $out/share/man/man8/
+  '';
+
+  checkInputs = with python3Packages; [
+    nose
+    keyutils
+  ];
+
+  checkPhase = ''
+    nosetests
+  '';
+
+  meta = with lib; {
+    description = "Removable disk automounter for udisks";
+    license = licenses.mit;
+    homepage = "https://github.com/coldfix/udiskie";
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ulauncher/0001-Adjust-get_data_path-for-NixOS.patch b/nixpkgs/pkgs/applications/misc/ulauncher/0001-Adjust-get_data_path-for-NixOS.patch
new file mode 100644
index 000000000000..f14d7f718027
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ulauncher/0001-Adjust-get_data_path-for-NixOS.patch
@@ -0,0 +1,55 @@
+From 86cc27022015697a61d1ec1b13e52f9dbe7f6c57 Mon Sep 17 00:00:00 2001
+From: worldofpeace <worldofpeace@protonmail.ch>
+Date: Mon, 23 Mar 2020 18:34:00 -0400
+Subject: [PATCH] Adjust get_data_path for NixOS
+
+We construct the ulauncher data path from xdg_data_dirs
+and prevent it from being a nix store path or being xdg_data_home.
+We do this to prevent /nix/store paths being hardcoded to shortcuts.json.
+On NixOS this path will either be /run/current-system/sw/share/ulauncher
+or $HOME/.nix-profile/share/ulauncher if the user used nix-env.
+---
+ ulauncher/config.py | 27 ++++++++++++++++++---------
+ 1 file changed, 18 insertions(+), 9 deletions(-)
+
+diff --git a/ulauncher/config.py b/ulauncher/config.py
+index f21014e..cc636e1 100644
+--- a/ulauncher/config.py
++++ b/ulauncher/config.py
+@@ -50,15 +50,24 @@ def get_data_path():
+     is specified at installation time.
+     """
+ 
+-    # Get pathname absolute or relative.
+-    path = os.path.join(
+-        os.path.dirname(__file__), __ulauncher_data_directory__)
+-
+-    abs_data_path = os.path.abspath(path)
+-    if not os.path.exists(abs_data_path):
+-        raise ProjectPathNotFoundError(abs_data_path)
+-
+-    return abs_data_path
++    paths = list(
++        filter(
++            os.path.exists,
++            [
++                os.path.join(dir, "ulauncher")
++                for dir in xdg_data_dirs
++                # Get path that isn't in the /nix/store so they don't get hardcoded into configs
++                if not dir.startswith("/nix/store/")
++                # Exclude .local/share/ulauncher which isn't what we want
++                if not dir.startswith(xdg_data_home)
++            ],
++        )
++    )
++
++    try:
++        return paths[0]
++    except:
++        raise ProjectPathNotFoundError()
+ 
+ 
+ def is_wayland():
+-- 
+2.25.1
+
diff --git a/nixpkgs/pkgs/applications/misc/ulauncher/default.nix b/nixpkgs/pkgs/applications/misc/ulauncher/default.nix
new file mode 100644
index 000000000000..8c17d2642937
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ulauncher/default.nix
@@ -0,0 +1,120 @@
+{ lib, stdenv
+, fetchurl
+, nix-update-script
+, python3Packages
+, gdk-pixbuf
+, glib
+, gnome3
+, gobject-introspection
+, gtk3
+, wrapGAppsHook
+, webkitgtk
+, libnotify
+, keybinder3
+, libappindicator
+, intltool
+, wmctrl
+, xvfb_run
+, librsvg
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ulauncher";
+  version = "5.9.0";
+
+  disabled = python3Packages.isPy27;
+
+  src = fetchurl {
+    url = "https://github.com/Ulauncher/Ulauncher/releases/download/${version}/ulauncher_${version}.tar.gz";
+    sha256 = "sha256-jRCrkJcjUHDd3wF+Hkxg0QaW7YgIh7zM/KZ4TAH84/U=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    distutils_extra
+    intltool
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    glib
+    gnome3.adwaita-icon-theme
+    gobject-introspection
+    gtk3
+    keybinder3
+    libappindicator
+    libnotify
+    librsvg
+    webkitgtk
+    wmctrl
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    mock
+    mypy
+    mypy-extensions
+    dbus-python
+    pygobject3
+    pyinotify
+    python-Levenshtein
+    pyxdg
+    requests
+    websocket_client
+  ];
+
+  checkInputs = with python3Packages; [
+    mock
+    pytest
+    pytest-mock
+    xvfb_run
+  ];
+
+  patches = [
+    ./fix-path.patch
+    ./0001-Adjust-get_data_path-for-NixOS.patch
+    ./fix-extensions.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py --subst-var out
+  '';
+
+  # https://github.com/Ulauncher/Ulauncher/issues/390
+  doCheck = false;
+
+  preCheck = ''
+    export PYTHONPATH=$PYTHONPATH:$out/${python3Packages.python.sitePackages}
+  '';
+
+  # Simple translation of
+  # - https://github.com/Ulauncher/Ulauncher/blob/f5a601bdca75198a6a31b9d84433496b63530e74/test
+  checkPhase = ''
+    runHook preCheck
+
+    # skip tests in invocation that handle paths that
+    # aren't nix friendly (i think)
+    xvfb-run -s '-screen 0 1024x768x16' \
+      pytest -k 'not TestPath and not test_handle_key_press_event' tests
+
+    runHook postCheck
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix PATH : "${lib.makeBinPath [ wmctrl ]}")
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+
+  meta = with lib; {
+    description = "A fast application launcher for Linux, written in Python, using GTK";
+    homepage = "https://ulauncher.io/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ aaronjanse worldofpeace ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ulauncher/fix-extensions.patch b/nixpkgs/pkgs/applications/misc/ulauncher/fix-extensions.patch
new file mode 100644
index 000000000000..f6d00f9fafd5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ulauncher/fix-extensions.patch
@@ -0,0 +1,13 @@
+diff --git a/ulauncher/api/server/ExtensionRunner.py b/ulauncher/api/server/ExtensionRunner.py
+index 22042bf..f7b31c8 100644
+--- a/ulauncher/api/server/ExtensionRunner.py
++++ b/ulauncher/api/server/ExtensionRunner.py
+@@ -79,7 +79,7 @@ class ExtensionRunner:
+         cmd = [sys.executable, os.path.join(self.extensions_dir, extension_id, 'main.py')]
+         env = os.environ.copy()
+         env['ULAUNCHER_WS_API'] = self.extension_server.generate_ws_url(extension_id)
+-        env['PYTHONPATH'] = ':'.join(filter(bool, [ULAUNCHER_APP_DIR, os.getenv('PYTHONPATH')]))
++        env['PYTHONPATH'] = ':'.join([ULAUNCHER_APP_DIR] + sys.path)
+ 
+         if self.verbose:
+             env['VERBOSE'] = '1'
diff --git a/nixpkgs/pkgs/applications/misc/ulauncher/fix-path.patch b/nixpkgs/pkgs/applications/misc/ulauncher/fix-path.patch
new file mode 100644
index 000000000000..2936df65194e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ulauncher/fix-path.patch
@@ -0,0 +1,13 @@
+diff --git a/setup.py b/setup.py
+index 3616104..e9bbfda 100755
+--- a/setup.py
++++ b/setup.py
+@@ -112,7 +112,7 @@ class InstallAndUpdateDataDirectory(DistUtilsExtra.auto.install_auto):
+         DistUtilsExtra.auto.install_auto.run(self)
+ 
+         target_data = '/' + os.path.relpath(self.install_data, self.root) + '/'
+-        target_pkgdata = target_data + 'share/ulauncher/'
++        target_pkgdata = '@out@/share/ulauncher/'
+         target_scripts = '/' + os.path.relpath(self.install_scripts,
+                                                self.root) + '/'
+ 
diff --git a/nixpkgs/pkgs/applications/misc/ultralist/default.nix b/nixpkgs/pkgs/applications/misc/ultralist/default.nix
new file mode 100644
index 000000000000..2943fe29f4a0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ultralist/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ultralist";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "ultralist";
+    repo = "ultralist";
+    rev = version;
+    sha256 = "09kgf83jn5k35lyrnyzbsy0l1livzmy292qmlbx5dkdpaq5wxnmp";
+  };
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    description = "Simple GTD-style todo list for the command line";
+    homepage = "https://ultralist.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ uvnikita ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/upwork/default.nix b/nixpkgs/pkgs/applications/misc/upwork/default.nix
new file mode 100644
index 000000000000..36fd4047761c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/upwork/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, dpkg, wrapGAppsHook, autoPatchelfHook, writeShellScript
+, alsaLib, atk, at-spi2-atk, at-spi2-core, cairo, cups, dbus, expat, fontconfig, freetype
+, gdk-pixbuf, glib, gtk3, libnotify, libX11, libXcomposite, libXcursor, libXdamage, libuuid
+, libXext, libXfixes, libXi, libXrandr, libXrender, libXtst, nspr, nss, libxcb
+, pango, systemd, libXScrnSaver, libcxx, libpulseaudio }:
+
+stdenv.mkDerivation rec {
+  pname = "upwork";
+  version = "5.4.9.6";
+
+  src = fetchurl {
+    url = "https://upwork-usw2-desktopapp.upwork.com/binaries/v5_4_9_6_2565cdd0547940a2/${pname}_${version}_amd64.deb";
+    sha256 = "ff6246b3b4a1ed79cc9bca2934652fefb40bdac4b7e95997f3a46e354ce52456";
+  };
+
+  dontWrapGApps = true;
+
+  nativeBuildInputs = [
+    dpkg
+    wrapGAppsHook
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    libcxx systemd libpulseaudio
+    stdenv.cc.cc alsaLib atk at-spi2-atk at-spi2-core cairo cups dbus expat fontconfig freetype
+    gdk-pixbuf glib gtk3 libnotify libX11 libXcomposite libuuid
+    libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender
+    libXtst nspr nss libxcb pango systemd libXScrnSaver
+  ];
+
+  libPath = lib.makeLibraryPath buildInputs;
+
+  unpackPhase = ''
+    dpkg-deb -x ${src} ./
+  '';
+
+  installPhase = ''
+    mv usr $out
+    mv opt $out
+    sed -e "s|/opt/Upwork|$out/bin|g" -i $out/share/applications/upwork.desktop
+
+    makeWrapper $out/opt/Upwork/upwork \
+      $out/bin/upwork \
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+      --prefix LD_LIBRARY_PATH : ${libPath}
+  '';
+
+  meta = with lib; {
+    description = "Online freelancing platform desktop application for time tracking";
+    homepage = "https://www.upwork.com/ab/downloads/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ zakkor wolfangaukang ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/urlscan/default.nix b/nixpkgs/pkgs/applications/misc/urlscan/default.nix
new file mode 100644
index 000000000000..3e97088371ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/urlscan/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "urlscan";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "firecat53";
+    repo = pname;
+    rev = version;
+    sha256 = "16g7dzvjcfhaz52wbmcapamy55l7vfhgizqy3m8dv9gkmy8vap89";
+  };
+
+  propagatedBuildInputs = [ python3Packages.urwid ];
+
+  doCheck = false; # No tests available
+
+  meta = with lib; {
+    description = "Mutt and terminal url selector (similar to urlview)";
+    homepage = "https://github.com/firecat53/urlscan";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ dpaetzel jfrankenau ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/urlview/default.nix b/nixpkgs/pkgs/applications/misc/urlview/default.nix
new file mode 100644
index 000000000000..0374fb91844d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/urlview/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, ncurses, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version    = "0.9";
+  patchLevel = "19";
+
+  name = "urlview-${version}-${patchLevel}";
+
+  urlBase = "mirror://debian/pool/main/u/urlview/";
+
+  src = fetchurl {
+    url = urlBase + "urlview_${version}.orig.tar.gz";
+    sha256 = "746ff540ccf601645f500ee7743f443caf987d6380e61e5249fc15f7a455ed42";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ncurses ];
+
+  preAutoreconf = ''
+    touch NEWS
+  '';
+
+  preConfigure = ''
+    mkdir -p $out/share/man/man1
+  '';
+
+  debianPatches = fetchurl {
+    url = urlBase + "urlview_${version}-${patchLevel}.diff.gz";
+    sha256 = "056883c17756f849fb9235596d274fbc5bc0d944fcc072bdbb13d1e828301585";
+  };
+
+  patches = debianPatches;
+
+  postPatch = ''
+    substituteInPlace urlview.c \
+      --replace '/etc/urlview/url_handler.sh' "$out/etc/urlview/url_handler.sh"
+  '';
+
+  postInstall = ''
+    install -Dm755 url_handler.sh $out/etc/urlview/url_handler.sh
+    patchShebangs $out/etc/urlview
+  '';
+
+  meta = with lib; {
+    description = "Extract URLs from text";
+    homepage = "https://packages.qa.debian.org/u/urlview.html";
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/usync/default.nix b/nixpkgs/pkgs/applications/misc/usync/default.nix
new file mode 100644
index 000000000000..8ab2a485a649
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/usync/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, scsh, rsync, unison }:
+
+stdenv.mkDerivation rec {
+  pname = "usync";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "ebzzry";
+    repo = pname;
+    rev = "9c87ea8a707a47c3d7f6ef94d07591c5ab594282";
+    sha256 = "1r05gw041fz9dkkb70zd6kqw9dd8dhpv87407qxqg43pd7x47kf4";
+  };
+
+  installPhase = ''
+    install -m 555 -Dt $out/bin $pname
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/$pname --replace "/usr/bin/env scsh" "${scsh}/bin/scsh"
+    substituteInPlace $out/bin/$pname --replace "(rsync " "(${rsync}/bin/rsync "
+    substituteInPlace $out/bin/$pname --replace "(unison " "(${unison}/bin/unison "
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ebzzry/usync";
+    description = "A simple site-to-site synchronization tool";
+    license = licenses.mit;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+  };
+
+  dontBuild = true;
+}
diff --git a/nixpkgs/pkgs/applications/misc/valentina/default.nix b/nixpkgs/pkgs/applications/misc/valentina/default.nix
new file mode 100644
index 000000000000..1818ed9a2153
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/valentina/default.nix
@@ -0,0 +1,66 @@
+{ mkDerivation, lib, stdenv, fetchhg
+, qmake, qttools
+, qtbase, qtsvg, qtxmlpatterns
+, poppler_utils
+}:
+
+with lib;
+
+mkDerivation rec {
+  pname = "valentina";
+  version = "0.6.1";
+
+  src = fetchhg {
+    url = "https://bitbucket.org/dismine/valentina";
+    rev = "v${version}";
+    sha256 = "0dxk2av7xbsd233sr9wa1hamzb7pp8yx6p5b43rsnvnzchkqf423";
+  };
+
+  postPatch = ''
+    substituteInPlace common.pri \
+      --replace '$$[QT_INSTALL_HEADERS]/QtXmlPatterns' '${getDev qtxmlpatterns}/include/QtXmlPatterns' \
+      --replace '$$[QT_INSTALL_HEADERS]/QtSvg' '${getDev qtsvg}/include/QtSvg' \
+      --replace '$$[QT_INSTALL_HEADERS]/' '${getDev qtbase}/include/' \
+      --replace '$$[QT_INSTALL_HEADERS]' '${getDev qtbase}'
+    substituteInPlace src/app/tape/tape.pro \
+      --replace '$$[QT_INSTALL_BINS]/rcc' '${getDev qtbase}/bin/rcc'
+    substituteInPlace src/app/translations.pri \
+      --replace '$$[QT_INSTALL_BINS]/$$LRELEASE' '${getDev qttools}/bin/lrelease'
+    substituteInPlace src/app/valentina/mainwindowsnogui.cpp \
+      --replace 'define PDFTOPS "pdftops"' 'define PDFTOPS "${getBin poppler_utils}/bin/pdftops"'
+    substituteInPlace src/app/valentina/dialogs/dialogsavelayout.h \
+      --replace 'define PDFTOPS "pdftops"' 'define PDFTOPS "${getBin poppler_utils}/bin/pdftops"'
+  '';
+
+  nativeBuildInputs = [ qmake qttools ];
+
+  buildInputs = [ qtbase qtsvg qtxmlpatterns poppler_utils ];
+
+  configurePhase = ''
+    qmake PREFIX=/ Valentina.pro -r "CONFIG += noTests noRunPath no_ccache noDebugSymbols"
+  '';
+
+  installFlags = [ "INSTALL_ROOT=$(out)" ];
+
+  postInstall = ''
+    mv $out/usr/share $out/
+    rmdir $out/usr
+
+    mkdir -p $out/share/man/man1
+    gzip -9c dist/debian/valentina.1 > $out/share/man/man1/valentina.1.gz
+    gzip -9c dist/debian/tape.1 > $out/share/man/man1/tape.1.gz
+
+    mkdir -p $out/share/mime/packages
+    cp dist/debian/valentina.sharedmimeinfo $out/share/mime/packages/valentina.xml
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "An open source sewing pattern drafting software";
+    homepage = "https://valentinaproject.bitbucket.io/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jfrankenau ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/variety/default.nix b/nixpkgs/pkgs/applications/misc/variety/default.nix
new file mode 100644
index 000000000000..2366d04b9ca1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/variety/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, lib, fetchFromGitHub
+, python37Packages
+, fehSupport ? false, feh
+, imagemagickSupport ? true, imagemagick
+, intltool
+, gtk3
+, gexiv2
+, libnotify
+, gobject-introspection
+, hicolor-icon-theme
+, librsvg
+, wrapGAppsHook
+}:
+
+with python37Packages;
+
+buildPythonApplication rec {
+  pname = "variety";
+  version = "0.8.5";
+
+  src = fetchFromGitHub {
+    owner = "varietywalls";
+    repo = "variety";
+    rev = version;
+    sha256 = "sha256-6dLz4KXavXwnk5GizBH46d2EHMHPjRo0WnnUuVMtI1M=";
+  };
+
+  nativeBuildInputs = [ intltool wrapGAppsHook ];
+
+  buildInputs = [ distutils_extra ];
+
+  doCheck = false;
+
+  prePatch = ''
+    substituteInPlace variety_lib/varietyconfig.py \
+      --replace "__variety_data_directory__ = \"../data\"" "__variety_data_directory__ = \"$out/share/variety\""
+    substituteInPlace data/scripts/set_wallpaper \
+      --replace /bin/bash ${stdenv.shell}
+    substituteInPlace data/scripts/get_wallpaper \
+      --replace /bin/bash ${stdenv.shell}
+  '';
+
+  propagatedBuildInputs = [
+    beautifulsoup4
+    configobj
+    dbus-python
+    gexiv2
+    gobject-introspection
+    gtk3
+    hicolor-icon-theme
+    httplib2
+    libnotify
+    librsvg
+    lxml
+    pillow
+    pycairo
+    pygobject3
+    requests
+    setuptools
+  ] ++ lib.optional fehSupport feh
+    ++ lib.optional imagemagickSupport imagemagick;
+
+  meta = with lib; {
+    homepage = "https://github.com/varietywalls/variety";
+    description = "A wallpaper manager for Linux systems";
+    longDescription = ''
+      Variety is a wallpaper manager for Linux systems. It supports numerous
+      desktops and wallpaper sources, including local files and online services:
+      Flickr, Wallhaven, Unsplash, and more.
+
+      Where supported, Variety sits as a tray icon to allow easy pausing and
+      resuming. Otherwise, its desktop entry menu provides a similar set of
+      options.
+
+      Variety also includes a range of image effects, such as oil painting and
+      blur, as well as options to layer quotes and a clock onto the background.
+    '';
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ AndersonTorres zfnmxt ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vcal/default.nix b/nixpkgs/pkgs/applications/misc/vcal/default.nix
new file mode 100644
index 000000000000..9519e033473e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vcal/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "vcal";
+  version = "2.8";
+
+  src = fetchurl {
+    url    = "https://waynemorrison.com/software/vcal";
+    sha256 = "0jrm0jzqxb1xjp24hwbzlxsh22gjssay9gj4zszljzdm68r5afvc";
+  };
+
+  nativeBuildInputs = [ perl ]; # for pod2man
+
+  dontUnpack = true;
+  dontBuild = true;
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,share/man/man1}
+    substitute ${src} $out/bin/vcal \
+      --replace /usr/bin/perl ${perl}/bin/perl
+    chmod 0755 $out/bin/*
+    pod2man --name=vcal --release=${version} ${src} > $out/share/man/man1/vcal.1
+
+    runHook postInstall
+  '';
+
+  # There are no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Parser for VCalendar and ICalendar files, usable from the command line";
+    homepage = "https://waynemorrison.com/software/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/veracrypt/default.nix b/nixpkgs/pkgs/applications/misc/veracrypt/default.nix
new file mode 100644
index 000000000000..15bda9d5f974
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/veracrypt/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, makeself, yasm, fuse, wxGTK, lvm2 }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "veracrypt";
+  version = "1.24-Hotfix1";
+
+  src = fetchurl {
+    url = "https://launchpad.net/${pname}/trunk/${toLower version}/+download/VeraCrypt_${version}_Source.tar.bz2";
+    sha256 = "8b40ece805b216843d7a71b1a30069c4057931341b030bf65caace59263c5c8c";
+  };
+
+
+  patches = [
+    # https://github.com/veracrypt/VeraCrypt/issues/529 - fix build on non-x86
+    (fetchpatch {
+      url = "https://github.com/veracrypt/VeraCrypt/commit/afe6b2f45b15393026a1159e5f3d165ac7d0b94a.patch";
+      sha256 = "1xm9cl6zinlr0vah5xr9bvh0y9gw4331zl7d2n5xvqrcdxw3ww1y";
+      stripLen = 1;
+    })
+    # https://github.com/veracrypt/VeraCrypt/issues/529 - fix build on non-x86
+    (fetchpatch {
+      url = "https://github.com/veracrypt/VeraCrypt/commit/3fa636d477119fff6e372074568edb42d038f508.patch";
+      sha256 = "0qsccilip0ksnlzxina38a052gb533r4s422lxhrj3wv9zgpp7l3";
+      stripLen = 1;
+    })
+  ];
+
+  sourceRoot = "src";
+
+  nativeBuildInputs = [ makeself pkg-config yasm ];
+  buildInputs = [ fuse lvm2 wxGTK ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -Dm 755 Main/${pname} "$out/bin/${pname}"
+    install -Dm 444 Resources/Icons/VeraCrypt-256x256.xpm "$out/share/pixmaps/${pname}.xpm"
+    install -Dm 444 License.txt -t "$out/share/doc/${pname}/"
+    install -d $out/share/applications
+    substitute Setup/Linux/${pname}.desktop $out/share/applications/${pname}.desktop \
+      --replace "Exec=/usr/bin/veracrypt" "Exec=$out/bin/veracrypt" \
+      --replace "Icon=veracrypt" "Icon=veracrypt.xpm"
+  '';
+
+  meta = {
+    description = "Free Open-Source filesystem on-the-fly encryption";
+    homepage = "https://www.veracrypt.fr/";
+    license = [ licenses.asl20 /* or */ "TrueCrypt License version 3.0" ];
+    maintainers = with maintainers; [ dsferruzza ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/verbiste/default.nix b/nixpkgs/pkgs/applications/misc/verbiste/default.nix
new file mode 100644
index 000000000000..9f27f8e73d7f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/verbiste/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, pkg-config, libgnomeui, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "verbiste";
+
+  version = "0.1.47";
+
+  src = fetchurl {
+    url = "https://perso.b2b2c.ca/~sarrazip/dev/${pname}-${version}.tar.gz";
+    sha256 = "02kzin3pky2q2jnihrch8y0hy043kqqmzxq8j741x80kl0j1qxkm";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libgnomeui libxml2 ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "http://sarrazip.com/dev/verbiste.html";
+    description = "French and Italian verb conjugator";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vifm/default.nix b/nixpkgs/pkgs/applications/misc/vifm/default.nix
new file mode 100644
index 000000000000..18d190a9dd6c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vifm/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, makeWrapper
+, pkg-config
+, ncurses, libX11
+, util-linux, file, which, groff
+
+  # adds support for handling removable media (vifm-media). Linux only!
+, mediaSupport ? false, python3 ? null, udisks2 ? null, lib ? null
+}:
+
+let isFullPackage = mediaSupport;
+in stdenv.mkDerivation rec {
+  pname = if isFullPackage then "vifm-full" else "vifm";
+  version = "0.11";
+
+  src = fetchurl {
+    url = "https://github.com/vifm/vifm/releases/download/v${version}/vifm-${version}.tar.bz2";
+    sha256 = "0rqyd424y0g5b5basw2ybb60r9gar4f40d1xgzr3c2dsy4jpwvyh";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ ncurses libX11 util-linux file which groff ];
+
+  postFixup = let
+    path = lib.makeBinPath
+      [ udisks2
+        (python3.withPackages (p: [p.dbus-python]))
+      ];
+
+    wrapVifmMedia = "wrapProgram $out/share/vifm/vifm-media --prefix PATH : ${path}";
+  in ''
+    ${if mediaSupport then wrapVifmMedia else ""}
+  '';
+
+  meta = with lib; {
+    description = "A vi-like file manager${if isFullPackage then "; Includes support for optional features" else ""}";
+    maintainers = with maintainers; [ raskin ];
+    platforms = if mediaSupport then platforms.linux else platforms.unix;
+    license = licenses.gpl2;
+    downloadPage = "https://vifm.info/downloads.shtml";
+    homepage = "https://vifm.info/";
+    inherit version;
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/viking/default.nix b/nixpkgs/pkgs/applications/misc/viking/default.nix
new file mode 100644
index 000000000000..61ebfb0fcc6a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/viking/default.nix
@@ -0,0 +1,74 @@
+{ fetchurl, fetchpatch, lib, stdenv, makeWrapper
+, pkg-config, intltool, gettext, gtk2, expat, curl
+, gpsd, bc, file, gnome-doc-utils, libexif, libxml2, libxslt, scrollkeeper
+, docbook_xml_dtd_412, gexiv2, gpsbabel, expect
+, withMapnik ? false, mapnik
+, withMBTiles ? true, sqlite
+, withOAuth ? true, liboauth
+, withMd5Hash ? true, nettle
+, withGeoClue ? true, geoclue2 }:
+
+stdenv.mkDerivation rec {
+  pname = "viking";
+  version = "1.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/viking/viking/viking-${version}.tar.bz2";
+    sha256 = "1a0g0fbj4q5s9p8fv0mqvxws10q3naj81l72sz30vvqpbz6vqp45";
+  };
+
+  patches = [
+    # Fix build without mapnik and sqlite https://github.com/viking-gps/viking/pull/79
+    (fetchpatch {
+      url = "https://github.com/viking-gps/viking/commit/995feefcb97bdb1590ed018224cf47ce197fe0c1.patch";
+      sha256 = "1xb0b76kg690fag9mw3yfj5k766jmqp1sm8q4f29n1h3nz5g8izd";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ makeWrapper intltool gettext gtk2 expat curl gpsd bc file gnome-doc-utils
+    libexif libxml2 libxslt scrollkeeper docbook_xml_dtd_412 gexiv2
+  ] ++ lib.optional withMapnik mapnik
+    ++ lib.optional withGeoClue geoclue2
+    ++ lib.optional withMd5Hash nettle
+    ++ lib.optional withOAuth liboauth
+    ++ lib.optional withMBTiles sqlite;
+
+  configureFlags = [
+    "--disable-scrollkeeper"
+    (lib.enableFeature withMapnik "mapnik")
+    (lib.enableFeature withGeoClue "geoclue")
+    (lib.enableFeature withMd5Hash "nettle")
+    (lib.enableFeature withOAuth "oauth")
+    (lib.enableFeature withMBTiles "mbtiles")
+  ];
+
+  preBuild = ''
+    sed -i help/Makefile \
+        -e 's|--noout|--noout --nonet --path "${scrollkeeper}/share/xml/scrollkeeper/dtds"|g'
+    sed -i help/Makefile -e 's|--postvalid||g'
+  '';
+
+  doCheck = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/viking \
+      --prefix PATH : "${gpsbabel}/bin" \
+      --prefix PATH : "${expect}/bin"
+  '';
+
+  meta = with lib; {
+    description = "GPS data editor and analyzer";
+    longDescription = ''
+      Viking is a free/open source program to manage GPS data.  You
+      can import and plot tracks and waypoints, show Openstreetmaps
+      and/or Terraserver maps under it, download geocaches for an area
+      on the map, make new tracks and waypoints, see real-time GPS
+      position, etc.
+    '';
+    homepage = "https://sourceforge.net/projects/viking/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pSub sikmir ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/visidata/default.nix b/nixpkgs/pkgs/applications/misc/visidata/default.nix
new file mode 100644
index 000000000000..2d0a55983430
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/visidata/default.nix
@@ -0,0 +1,50 @@
+{ buildPythonApplication
+, lib
+, fetchFromGitHub
+, dateutil
+, pyyaml
+, openpyxl
+, xlrd
+, h5py
+, fonttools
+, lxml
+, pandas
+, pyshp
+, setuptools
+, withPcap ? true, dpkt ? null, dnslib ? null
+}:
+buildPythonApplication rec {
+  pname = "visidata";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "saulpw";
+    repo = "visidata";
+    rev = "v${version}";
+    sha256 = "018z06bfcw0l4k2zdwbgxna9fss4wdqj64ckw5qjis14sb3zkr28";
+  };
+
+  propagatedBuildInputs = [
+    dateutil
+    pyyaml
+    openpyxl
+    xlrd
+    h5py
+    fonttools
+    lxml
+    pandas
+    pyshp
+    setuptools
+  ] ++ lib.optionals withPcap [ dpkt dnslib ];
+
+  doCheck = false;
+
+  meta = {
+    inherit version;
+    description = "Interactive terminal multitool for tabular data";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = with lib.platforms; linux ++ darwin;
+    homepage = "http://visidata.org/";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vit/default.nix b/nixpkgs/pkgs/applications/misc/vit/default.nix
new file mode 100644
index 000000000000..3ae4aacb872b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vit/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, python3Packages
+, taskwarrior
+, glibcLocales
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "vit";
+  version = "2.0.0";
+  disabled = lib.versionOlder python.version "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5282d8076d9814d9248071aec8784cffbd968601542533ccb28ca61d1d08205e";
+  };
+
+  propagatedBuildInputs = [
+    pytz
+    tasklib
+    tzlocal
+    urwid
+  ];
+
+  checkInputs = [ glibcLocales ];
+
+  makeWrapperArgs = [ "--suffix" "PATH" ":" "${taskwarrior}/bin" ];
+
+  preCheck = ''
+    export TERM=''${TERM-linux}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/scottkosty/vit";
+    description = "Visual Interactive Taskwarrior";
+    maintainers = with maintainers; [ dtzWill arcnmx ];
+    platforms = platforms.all;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/volnoti/default.nix b/nixpkgs/pkgs/applications/misc/volnoti/default.nix
new file mode 100644
index 000000000000..d70918f2e7ce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/volnoti/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, pkg-config, dbus, gdk-pixbuf, glib, libX11, gtk2, librsvg
+, dbus-glib, autoreconfHook, wrapGAppsHook }:
+
+stdenv.mkDerivation {
+  pname = "volnoti-unstable";
+  version = "2013-09-23";
+
+  src = fetchFromGitHub {
+    owner = "davidbrazdil";
+    repo = "volnoti";
+    rev = "4af7c8e54ecc499097121909f02ecb42a8a60d24";
+    sha256 = "155lb7w563dkdkdn4752hl0zjhgnq3j4cvs9z98nb25k1xpmpki7";
+  };
+
+  patches = [
+    # Fix dbus interface headers. See
+    # https://github.com/davidbrazdil/volnoti/pull/10
+    (fetchpatch {
+      url = "https://github.com/davidbrazdil/volnoti/pull/10.patch";
+      sha256 = "046zfdjmvhb7jrsgh04vfgi35sgy1zkrhd3bzdby3nvds1wslfam";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook wrapGAppsHook ];
+
+  buildInputs = [
+    dbus gdk-pixbuf glib libX11 gtk2 dbus-glib librsvg
+  ];
+
+  meta = with lib; {
+    description = "Lightweight volume notification for Linux";
+    homepage = "https://github.com/davidbrazdil/volnoti";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.gilligan ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vp/default.nix b/nixpkgs/pkgs/applications/misc/vp/default.nix
new file mode 100644
index 000000000000..d133331a0a7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vp/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, SDL, SDL_image }:
+
+stdenv.mkDerivation rec {
+  pname = "vp";
+  version = "1.8";
+
+  src = fetchFromGitHub {
+    owner = "erikg";
+    repo = "vp";
+    rev = "v${version}";
+    sha256 = "08q6xrxsyj6vj0sz59nix9isqz84gw3x9hym63lz6v8fpacvykdq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ SDL SDL_image ];
+
+  NIX_CFLAGS_COMPILE="-I${SDL}/include/SDL -I${SDL_image}/include/SDL";
+
+  meta = with lib; {
+    homepage = "https://brlcad.org/~erik/";
+    description = "SDL based picture viewer/slideshow";
+    platforms = platforms.unix;
+    license  = licenses.gpl3;
+    maintainers = [ maintainers.vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vue/default.nix b/nixpkgs/pkgs/applications/misc/vue/default.nix
new file mode 100644
index 000000000000..13b09865c6ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vue/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, jre, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "vue";
+  version = "3.3.0";
+  src = fetchurl {
+    url = "http://releases.atech.tufts.edu/jenkins/job/VUE/116/deployedArtifacts/download/artifact.1";
+    sha256 = "0yfzr80pw632lkayg4qfmwzrqk02y30yz8br7isyhmgkswyp5rnx";
+  };
+
+  phases = "installPhase";
+
+  installPhase = ''
+    mkdir -p "$out"/{share/vue,bin}
+    cp ${src} "$out/share/vue/vue.jar"
+    echo '#!${runtimeShell}' >> "$out/bin/vue"
+    echo '${jre}/bin/java -jar "'"$out/share/vue/vue.jar"'" "$@"' >> "$out/bin/vue"
+    chmod a+x "$out/bin/vue"
+  '';
+
+  meta = {
+    description = "Visual Understanding Environment - mind mapping software";
+    maintainers = with lib.maintainers; [ raskin ];
+    platforms = with lib.platforms; linux;
+    license = lib.licenses.free; # Apache License fork, actually
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vym/default.nix b/nixpkgs/pkgs/applications/misc/vym/default.nix
new file mode 100644
index 000000000000..b4591d8717c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vym/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, mkDerivation, fetchurl, pkg-config, qmake, qtscript, qtsvg }:
+
+mkDerivation rec {
+  pname = "vym";
+  version = "2.7.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/vym/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "0lyf0m4y5kn5s47z4sg10215f3jsn3k1bl389jfbh2f5v4srav4g";
+  };
+
+  # Hardcoded paths scattered about all have form share/vym
+  # which is encouraging, although we'll need to patch them (below).
+  qmakeFlags = [
+    "DATADIR=${placeholder "out"}/share"
+    "DOCDIR=${placeholder "out"}/share/doc/vym"
+  ];
+
+  postPatch = ''
+    for x in \
+      exportoofiledialog.cpp \
+      main.cpp \
+      mainwindow.cpp \
+      tex/*.{tex,lyx}; \
+    do
+      substituteInPlace $x \
+        --replace /usr/share/vym $out/share/vym \
+        --replace /usr/local/share/vym $out/share/vym \
+        --replace /usr/share/doc $out/share/doc/vym
+    done
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ pkg-config qmake ];
+  buildInputs = [ qtscript qtsvg ];
+
+  postInstall = ''
+    install -Dm755 -t $out/share/man/man1 doc/*.1.gz
+  '';
+
+  dontGzipMan = true;
+
+  meta = with lib; {
+    description = "A mind-mapping software";
+    longDescription = ''
+      VYM (View Your Mind) is a tool to generate and manipulate maps which show your thoughts.
+      Such maps can help you to improve your creativity and effectivity. You can use them
+      for time management, to organize tasks, to get an overview over complex contexts,
+      to sort your ideas etc.
+
+      Maps can be drawn by hand on paper or a flip chart and help to structure your thoughs.
+      While a tree like structure like shown on this page can be drawn by hand or any drawing software
+      vym offers much more features to work with such maps.
+    '';
+    homepage = "http://www.insilmaril.de/vym/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/waybar/default.nix b/nixpkgs/pkgs/applications/misc/waybar/default.nix
new file mode 100644
index 000000000000..8dd18de5d895
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/waybar/default.nix
@@ -0,0 +1,74 @@
+{ lib, stdenv, fetchFromGitHub, meson, pkg-config, ninja, wrapGAppsHook
+, wayland, wlroots, gtkmm3, libsigcxx, jsoncpp, fmt, scdoc, spdlog, gtk-layer-shell
+, howard-hinnant-date, cmake
+, traySupport  ? true,  libdbusmenu-gtk3
+, pulseSupport ? true,  libpulseaudio
+, sndioSupport ? true,  sndio
+, nlSupport    ? true,  libnl
+, udevSupport  ? true,  udev
+, swaySupport  ? true,  sway
+, mpdSupport   ? true,  mpd_clientlib
+, withMediaPlayer ? false, glib, gobject-introspection, python3, python38Packages, playerctl
+}:
+  stdenv.mkDerivation rec {
+    pname = "waybar";
+    version = "0.9.5";
+
+    src = fetchFromGitHub {
+      owner = "Alexays";
+      repo = "Waybar";
+      rev = version;
+      sha256 = "1kzrgqaclfk6gcwhknxn28xl74gm5swipgn8kk8avacb4nsw1l9q";
+    };
+
+    nativeBuildInputs = [
+      meson ninja pkg-config scdoc wrapGAppsHook cmake
+    ] ++ lib.optional withMediaPlayer gobject-introspection;
+
+    propagatedBuildInputs = lib.optionals withMediaPlayer [
+      glib
+      playerctl
+      python38Packages.pygobject3
+    ];
+    strictDeps = false;
+
+    buildInputs = with lib;
+      [ wayland wlroots gtkmm3 libsigcxx jsoncpp fmt spdlog gtk-layer-shell howard-hinnant-date ]
+      ++ optional  traySupport  libdbusmenu-gtk3
+      ++ optional  pulseSupport libpulseaudio
+      ++ optional  sndioSupport sndio
+      ++ optional  nlSupport    libnl
+      ++ optional  udevSupport  udev
+      ++ optional  swaySupport  sway
+      ++ optional  mpdSupport   mpd_clientlib;
+
+    mesonFlags = (lib.mapAttrsToList
+      (option: enable: "-D${option}=${if enable then "enabled" else "disabled"}")
+      {
+        dbusmenu-gtk = traySupport;
+        pulseaudio = pulseSupport;
+        sndio = sndioSupport;
+        libnl = nlSupport;
+        libudev = udevSupport;
+        mpd = mpdSupport;
+      }
+    ) ++ [
+      "-Dout=${placeholder "out"}"
+      "-Dsystemd=disabled"
+    ];
+
+    preFixup = lib.optional withMediaPlayer ''
+      cp $src/resources/custom_modules/mediaplayer.py $out/bin/waybar-mediaplayer.py
+
+      wrapProgram $out/bin/waybar-mediaplayer.py \
+        --prefix PYTHONPATH : "$PYTHONPATH:$out/${python3.sitePackages}"
+    '';
+
+    meta = with lib; {
+      description = "Highly customizable Wayland bar for Sway and Wlroots based compositors";
+      license = licenses.mit;
+      maintainers = with maintainers; [ FlorianFranzen minijackson synthetica ];
+      platforms = platforms.unix;
+      homepage = "https://github.com/alexays/waybar";
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/misc/wcalc/default.nix b/nixpkgs/pkgs/applications/misc/wcalc/default.nix
new file mode 100644
index 000000000000..7541b759e06c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wcalc/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, mpfr, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "wcalc";
+  version = "2.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/w-calc/${pname}-${version}.tar.bz2";
+    sha256 = "1vi8dl6rccqiq1apmpwawyg2ywx6a1ic1d3cvkf2hlwk1z11fb0f";
+  };
+
+  buildInputs = [ mpfr readline ];
+
+  meta = with lib; {
+    description = "A command line calculator";
+    homepage = "http://w-calc.sourceforge.net";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/weather/default.nix b/nixpkgs/pkgs/applications/misc/weather/default.nix
new file mode 100644
index 000000000000..bd5a117f0f43
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/weather/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, pythonPackages, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  version = "2.4.1";
+  pname = "weather";
+
+  src = fetchurl {
+    url = "http://fungi.yuggoth.org/weather/src/${pname}-${version}.tar.xz";
+    sha256 = "0nf680dl7a2vlgavdhj6ljq8a7lkhvr6zghkpzad53vmilxsndys";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    pythonPackages.wrapPython
+  ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  # Upstream doesn't provide a setup.py or alike, so we follow:
+  # http://fungi.yuggoth.org/weather/doc/install.rst#id3
+  installPhase = ''
+    site_packages=$out/${pythonPackages.python.sitePackages}
+    install -Dt $out/bin -m 755 weather
+    install -Dt $site_packages weather.py
+    install -Dt $out/share/weather-util \
+      airports overrides.{conf,log} places slist stations \
+      zctas zlist zones
+    install -Dt $out/etc weatherrc
+
+    sed -i \
+      -e "s|/etc|$out/etc|g" \
+      -e "s|else: default_setpath = \".:~/.weather|&:$out/share/weather-util|" \
+      $site_packages/weather.py
+
+    wrapPythonPrograms
+
+    installManPage weather.1 weatherrc.5
+  '';
+
+  meta = with lib; {
+    homepage = "http://fungi.yuggoth.org/weather";
+    description = "Quick access to current weather conditions and forecasts";
+    license = licenses.isc;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/web-media-controller/default.nix b/nixpkgs/pkgs/applications/misc/web-media-controller/default.nix
new file mode 100644
index 000000000000..7e0fbb999f5f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/web-media-controller/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, glib, pcre, json-glib }:
+
+stdenv.mkDerivation rec {
+  pname = "wmc-mpris";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "f1u77y";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1zcnaf9g55cbj9d2zlsr0i15qh0w9gp5jmxkm6dcp1j6yd7j3ymc";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ glib pcre json-glib ];
+  cmakeFlags = [
+    "-DCHROMIUM_MANIFEST_DESTINATION=${placeholder "out"}/etc/chromium/native-messaging-hosts"
+    "-DCHROME_MANIFEST_DESTINATION=${placeholder "out"}/etc/opt/chrome/native-messaging-hosts"
+    "-DFIREFOX_MANIFEST_DESTINATION=${placeholder "out"}/lib/mozilla/native-messaging-hosts"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/f1u77y/wmc-mpris";
+    description = "MPRIS proxy for usage with 'Web Media Controller' web extension";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ doronbehar ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wego/default.nix b/nixpkgs/pkgs/applications/misc/wego/default.nix
new file mode 100644
index 000000000000..74c424a277b1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wego/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, buildGoPackage, fetchgit }:
+
+buildGoPackage rec {
+  pname = "wego";
+  version = "unstable-2019-02-11";
+  rev = "994e4f141759a1070d7b0c8fbe5fad2cc7ee7d45";
+
+  goPackagePath = "github.com/schachmat/wego";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/schachmat/wego";
+    sha256 = "1affzwi5rbp4zkirhmby8bvlhsafw7a4rs27caqwyj8g3jhczmhy";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = {
+    license = lib.licenses.isc;
+    homepage = "https://github.com/schachmat/wego";
+    description = "Weather app for the terminal";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wego/deps.nix b/nixpkgs/pkgs/applications/misc/wego/deps.nix
new file mode 100644
index 000000000000..133315cd0222
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wego/deps.nix
@@ -0,0 +1,48 @@
+# 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 = "98ec13f34aabf44cc914c65a1cfb7b9bc815aef1";
+      sha256 = "1yxcz08kminqr1221zxpibnbzfcgs3fafin0z9zqb3gqvf74jywz";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-isatty";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-isatty";
+      rev = "31745d66dd679ac0ac4f8d3ecff168fce6170c6a";
+      sha256 = "0h671sv7hfprja495kavazkalkx7xzaqksjh13brcnwq67ijrali";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-runewidth";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-runewidth";
+      rev = "18c3d09a134a52720932bbaa92c798a0ab111004";
+      sha256 = "1snr8mk63vz2h44knq26dm81p83887v7kb09iywqmx0nqzngih66";
+    };
+  }
+  {
+    goPackagePath = "github.com/schachmat/ingo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/schachmat/ingo";
+      rev = "a4bdc0729a3fda62cc4069b6e490fc657fd54e33";
+      sha256 = "1gw0kddy7jh3467imsqni86cf9yq7k6vpfc0ywkbwj0zsjsdgd49";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "b016eb3dc98ea7f69ed55e8216b87187067ae621";
+      sha256 = "1k0qr26046d228gi6ngkfxp4m1rjgxk4jj75h0kh1cpyp91n5rja";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/misc/wikicurses/default.nix b/nixpkgs/pkgs/applications/misc/wikicurses/default.nix
new file mode 100644
index 000000000000..e234a9007fd5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wikicurses/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  version = "1.4";
+  pname = "wikicurses";
+
+  src = fetchFromGitHub {
+    owner = "ids1024";
+    repo = "wikicurses";
+    rev = "v${version}";
+    sha256 = "0f14s4qx3q5pr5vn460c34b5mbz2xs62d8ljs3kic8gmdn8x2knm";
+  };
+
+  outputs = [ "out" "man" ];
+
+  propagatedBuildInputs = with pythonPackages; [ urwid beautifulsoup4 lxml ];
+
+  postInstall = ''
+    mkdir -p $man/share/man/man{1,5}
+    cp wikicurses.1 $man/share/man/man1/
+    cp wikicurses.conf.5 $man/share/man/man5/
+  '';
+
+  doCheck = false;
+
+  meta = {
+    description = "A simple curses interface for MediaWiki sites such as Wikipedia";
+    homepage = "https://github.com/ids1024/wikicurses/";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ pSub ];
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/with-shell/default.nix b/nixpkgs/pkgs/applications/misc/with-shell/default.nix
new file mode 100644
index 000000000000..daf697c16614
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/with-shell/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchFromGitHub }:
+stdenv.mkDerivation {
+  name = "with-2016-08-20";
+  src = fetchFromGitHub {
+    owner = "mchav";
+    repo = "With";
+    rev = "cc2828bddd92297147d4365765f4ef36385f050a";
+    sha256 = "10m2xv6icrdp6lfprw3a9hsrzb3bip19ipkbmscap0niddqgcl9b";
+  };
+  installPhase = ''
+    mkdir -p $out/bin
+    cp with $out/bin/with
+  '';
+  meta = {
+    homepage = "https://github.com/mchav/With";
+    description = "Command prefixing for continuous workflow using a single tool";
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wmname/default.nix b/nixpkgs/pkgs/applications/misc/wmname/default.nix
new file mode 100644
index 000000000000..d501869770e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wmname/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, libX11 }:
+
+stdenv.mkDerivation rec {
+  name = "wmname-0.1";
+
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/${name}.tar.gz";
+    sha256 = "559ad188b2913167dcbb37ecfbb7ed474a7ec4bbcb0129d8d5d08cb9208d02c5";
+  };
+
+  buildInputs = [ libX11 ];
+
+  preConfigure = [ ''sed -i "s@PREFIX = /usr/local@PREFIX = $out@g" config.mk'' ];
+
+  meta = {
+    description = "Prints or set the window manager name property of the root window";
+    homepage = "https://tools.suckless.org/wmname";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wofi/default.nix b/nixpkgs/pkgs/applications/misc/wofi/default.nix
new file mode 100644
index 000000000000..7b9e38c87d17
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wofi/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchhg, fetchpatch, pkg-config, meson, ninja, wayland, gtk3, wrapGAppsHook, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "wofi";
+  version = "1.2.3";
+
+  src = fetchhg {
+    url = "https://hg.sr.ht/~scoopta/wofi";
+    rev = "v${version}";
+    sha256 = "0glpb2gf5n78s01z3rn614ak8ibxhfr824gy6xlljbxclgds264i";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja wrapGAppsHook installShellFiles ];
+  buildInputs = [ wayland gtk3 ];
+
+  patches = [
+    # https://todo.sr.ht/~scoopta/wofi/121
+    ./do_not_follow_symlinks.patch
+  ];
+
+  postInstall = ''
+    installManPage man/wofi*
+  '';
+
+  meta = with lib; {
+    description = "A launcher/menu program for wlroots based wayland compositors such as sway";
+    homepage = "https://hg.sr.ht/~scoopta/wofi";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ elyhaka ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wofi/do_not_follow_symlinks.patch b/nixpkgs/pkgs/applications/misc/wofi/do_not_follow_symlinks.patch
new file mode 100644
index 000000000000..f917c4c1685d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wofi/do_not_follow_symlinks.patch
@@ -0,0 +1,39 @@
+diff -r 3414ab984249 modes/run.c
+--- a/modes/run.c	Tue Aug 11 19:07:49 2020 -0700
++++ b/modes/run.c	Sat Aug 22 13:39:52 2020 +0200
+@@ -91,23 +91,10 @@
+ 
+ 	char* path = strdup(getenv("PATH"));
+ 
+-	struct map* paths = map_init();
+-
+ 	char* save_ptr;
+ 	char* str = strtok_r(path, ":", &save_ptr);
+ 	do {
+ 
+-		str = realpath(str, NULL);
+-		if(str == NULL) {
+-			continue;
+-		}
+-		if(map_contains(paths, str)) {
+-			free(str);
+-			continue;
+-		}
+-
+-		map_put(paths, str, "true");
+-
+ 		DIR* dir = opendir(str);
+ 		if(dir == NULL) {
+ 			continue;
+@@ -132,11 +119,9 @@
+ 			}
+ 			free(full_path);
+ 		}
+-		free(str);
+ 		closedir(dir);
+ 	} while((str = strtok_r(NULL, ":", &save_ptr)) != NULL);
+ 	free(path);
+-	map_free(paths);
+ 	map_free(cached);
+ 	map_free(entries);
+ }
diff --git a/nixpkgs/pkgs/applications/misc/wordnet/default.nix b/nixpkgs/pkgs/applications/misc/wordnet/default.nix
new file mode 100644
index 000000000000..32c1f0eaa64a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wordnet/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, tcl, tk, Cocoa, xlibsWrapper, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "3.0";
+  pname = "wordnet";
+  src = fetchurl {
+    url = "http://wordnetcode.princeton.edu/${version}/WordNet-${version}.tar.bz2";
+    sha256 = "08pgjvd2vvmqk3h641x63nxp7wqimb9r30889mkyfh2agc62sjbc";
+  };
+
+  buildInputs = [ tcl tk xlibsWrapper makeWrapper ]
+    ++ lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  hardeningDisable = [ "format" ];
+
+  patchPhase = ''
+    sed "13i#define USE_INTERP_RESULT 1" -i src/stubs.c
+  '';
+
+  # Needs the path to `tclConfig.sh' and `tkConfig.sh'.
+  configureFlags = [
+    "--with-tcl=${tcl}/lib"
+    "--with-tk=${tk}/lib"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/wishwn --set TK_LIBRARY "${tk}/lib/${tk.libPrefix}"
+    wrapProgram $out/bin/wnb    --prefix PATH : "$out/bin"
+  '';
+
+  meta = {
+    description = "Lexical database for the English language";
+
+    longDescription =
+      '' WordNet® is a large lexical database of English.  Nouns, verbs,
+         adjectives and adverbs are grouped into sets of cognitive synonyms
+         (synsets), each expressing a distinct concept.  Synsets are
+         interlinked by means of conceptual-semantic and lexical relations.
+         The resulting network of meaningfully related words and concepts can
+         be navigated with the browser.  WordNet is also freely and publicly
+         available for download.  WordNet's structure makes it a useful tool
+         for computational linguistics and natural language processing.
+      '';
+
+    homepage = "https://wordnet.princeton.edu/";
+    license = {
+      fullName = "WordNet 3.0 license";
+      url = "https://wordnet.princeton.edu/license-and-commercial-use";
+    };
+    maintainers = [ ];
+    platforms = with lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/worker/default.nix b/nixpkgs/pkgs/applications/misc/worker/default.nix
new file mode 100644
index 000000000000..12ac72b6021a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/worker/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, libX11, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "worker";
+  version = "4.5.0";
+
+  src = fetchurl {
+    url = "http://www.boomerangsworld.de/cms/worker/downloads/${pname}-${version}.tar.gz";
+    sha256 = "02xrdg1v784p4gfqjm1mlxqwi40qlbzhp68p5ksj96cjv6av5b5s";
+  };
+
+  buildInputs = [ libX11 ];
+
+  meta = with lib; {
+    description = "A two-pane file manager with advanced file manipulation features";
+    homepage = "http://www.boomerangsworld.de/cms/worker/index.html";
+    license =  licenses.gpl2;
+    maintainers = [];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/workrave/default.nix b/nixpkgs/pkgs/applications/misc/workrave/default.nix
new file mode 100644
index 000000000000..6b63fde222f8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/workrave/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, wrapGAppsHook
+, autoconf, autoconf-archive, automake, gettext, intltool, libtool, pkg-config
+, libICE, libSM, libXScrnSaver, libXtst, cheetah
+, gobject-introspection, glib, glibmm, gtkmm3, atk, pango, pangomm, cairo
+, cairomm , dbus, dbus-glib, gdome2, gstreamer, gst-plugins-base
+, gst-plugins-good, libsigcxx }:
+
+stdenv.mkDerivation rec {
+  pname = "workrave";
+  version = "1.10.31";
+
+  src = fetchFromGitHub {
+    sha256 = "0v2mx2idaxlsyv5w66b7pknlill9j9i2gqcs3vq54gak7ix9fj1p";
+    rev = with lib;
+      "v" + concatStringsSep "_" (splitVersion version);
+    repo = "workrave";
+    owner = "rcaelers";
+  };
+
+  nativeBuildInputs = [
+    autoconf autoconf-archive automake gettext intltool libtool pkg-config wrapGAppsHook
+  ];
+  buildInputs = [
+    libICE libSM libXScrnSaver libXtst cheetah
+    gobject-introspection glib glibmm gtkmm3 atk pango pangomm cairo cairomm
+    dbus dbus-glib gdome2 gstreamer gst-plugins-base gst-plugins-good libsigcxx
+  ];
+
+  preConfigure = "./autogen.sh";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A program to help prevent Repetitive Strain Injury";
+    longDescription = ''
+      Workrave is a program that assists in the recovery and prevention of
+      Repetitive Strain Injury (RSI). The program frequently alerts you to
+      take micro-pauses, rest breaks and restricts you to your daily limit.
+    '';
+    homepage = "http://www.workrave.org/";
+    downloadPage = "https://github.com/rcaelers/workrave/releases";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ prikhi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wtf/default.nix b/nixpkgs/pkgs/applications/misc/wtf/default.nix
new file mode 100644
index 000000000000..ad107b644722
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wtf/default.nix
@@ -0,0 +1,43 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, makeWrapper
+, ncurses
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "wtf";
+  version = "0.34.0";
+
+  src = fetchFromGitHub {
+    owner = "wtfutil";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "01zydr1w8byjhxf4xj6z001q4ynq0452cn332ap1l1w0dmx9mxyr";
+   };
+
+  vendorSha256 = "1xyai417l8q44b562ssp5qqw04klrhg5397ahr4pc3i30csz8a7a";
+
+  doCheck = false;
+
+  buildFlagsArray = [ "-ldflags=-s -w -X main.version=${version}" ];
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    mv "$out/bin/wtf" "$out/bin/wtfutil"
+    wrapProgram "$out/bin/wtfutil" --prefix PATH : "${ncurses.dev}/bin"
+  '';
+
+  meta = with lib; {
+    description = "The personal information dashboard for your terminal";
+    homepage = "https://wtfutil.com/";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xastir/default.nix b/nixpkgs/pkgs/applications/misc/xastir/default.nix
new file mode 100644
index 000000000000..63240e0402fe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xastir/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, curl, db, libgeotiff
+, libXpm, libXt, motif, pcre
+, perl, proj, rastermagick, shapelib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xastir";
+  version = "2.1.6";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "Release-${version}";
+    sha256 = "0yrvwy6hlc73gzwrsrczflyymyz0k33hj991ajrd1vijq14m3n91";
+  };
+
+  buildInputs = [
+    autoreconfHook
+    curl db libgeotiff
+    libXpm libXt motif pcre
+    perl proj rastermagick shapelib
+  ];
+
+  configureFlags = [ "--with-motif-includes=${motif}/include" ];
+
+  postPatch = "patchShebangs .";
+
+  meta = with lib; {
+    description = "Graphical APRS client";
+    homepage = "https://xastir.org";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ehmry ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xautoclick/default.nix b/nixpkgs/pkgs/applications/misc/xautoclick/default.nix
new file mode 100644
index 000000000000..3429e80f0540
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xautoclick/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, xorg, pkg-config
+, cmake, libevdev
+, gtkSupport ? true, gtk3, pcre, glib, wrapGAppsHook
+, fltkSupport ? true, fltk
+, qtSupport ? true, qt5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xautoclick";
+  version = "0.34";
+
+  src = fetchFromGitHub {
+    owner = "qarkai";
+    repo = "xautoclick";
+    rev = "v${version}";
+    sha256 = "GN3zI5LQnVmRC0KWffzUTHKrxcqnstiL55hopwTTwpE=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libevdev xorg.libXtst ]
+    ++ lib.optionals gtkSupport [ gtk3 pcre glib wrapGAppsHook ]
+    ++ lib.optionals fltkSupport [ fltk ]
+    ++ lib.optionals qtSupport [ qt5.qtbase qt5.wrapQtAppsHook ];
+
+  meta = with lib; {
+    description = "Autoclicker application, which enables you to automatically click the left mousebutton";
+    homepage = "https://github.com/qarkai/xautoclick";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xbattbar/default.nix b/nixpkgs/pkgs/applications/misc/xbattbar/default.nix
new file mode 100644
index 000000000000..93f5d1c2279c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xbattbar/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchgit, libX11, perl, ... }:
+
+stdenv.mkDerivation rec {
+  pname = "xbattbar";
+  version = "1.4.9";
+
+  # The current active upstream of xbattbar seems to be the Debian source
+  # repository.
+  src = fetchgit {
+    url = "https://salsa.debian.org/debian/xbattbar.git";
+    rev = "upstream/${version}";
+    sha256 = "10w7gs0l4hzhdn38yqyr3az7n4ncmfnd6hhhly6lk5dg7k441ck6";
+  };
+
+  buildInputs =  [ libX11 ];
+
+  # The following patches are applied:
+  # - sys-by-default: remove the APM checker binary, make the sys checker
+  #   script the default. Rationale: checking battery status by /proc/apm is
+  #   extremely oldschool and does not work on NixOS, while the sysfs script
+  #   does.
+  # - perl shebang patches for acpi/sys scripts
+  # - unhardcode path to checker scripts
+  patchPhase = ''
+    patch -p1 < ${./sys-by-default.patch}
+    sed -i -e "s,/usr/lib/xbattbar/,$out/libexec/," xbattbar.c
+    sed -i -e "s,/usr/bin/perl,${perl}/bin/perl," xbattbar-check-acpi
+    sed -i -e "s,/usr/bin/perl,${perl}/bin/perl," xbattbar-check-sys
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/libexec
+    install -m 0755 xbattbar $out/bin/
+    install -m 0755 xbattbar-check-acpi $out/libexec/
+    install -m 0755 xbattbar-check-sys $out/libexec/
+  '';
+
+  meta = with lib; {
+    description = "Display battery status in X11";
+    homepage = "https://salsa.debian.org/debian/xbattbar";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.q3k ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xbattbar/sys-by-default.patch b/nixpkgs/pkgs/applications/misc/xbattbar/sys-by-default.patch
new file mode 100644
index 000000000000..367f7217eecb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xbattbar/sys-by-default.patch
@@ -0,0 +1,26 @@
+diff --git a/xbattbar.c b/xbattbar.c
+index 1e26019..cb3eab5 100644
+--- a/xbattbar.c
++++ b/xbattbar.c
+@@ -75,9 +75,8 @@ char *ONOUT_C  = "olive drab";
+ char *OFFIN_C  = "blue";
+ char *OFFOUT_C = "red";
+ 
+-char *EXTERNAL_CHECK = "/usr/lib/xbattbar/xbattbar-check-apm";
++char *EXTERNAL_CHECK = "/usr/lib/xbattbar/xbattbar-check-sys";
+ char *EXTERNAL_CHECK_ACPI = "/usr/lib/xbattbar/xbattbar-check-acpi";
+-char *EXTERNAL_CHECK_SYS = "/usr/lib/xbattbar/xbattbar-check-sys";
+ 
+ int alwaysontop = False;
+ 
+@@ -245,10 +244,6 @@ main(int argc, char **argv)
+       EXTERNAL_CHECK = EXTERNAL_CHECK_ACPI;
+       break;
+ 
+-    case 'r':
+-      EXTERNAL_CHECK = EXTERNAL_CHECK_SYS;
+-      break;
+-
+     case 's':
+       EXTERNAL_CHECK = optarg;
+       break;
diff --git a/nixpkgs/pkgs/applications/misc/xca/default.nix b/nixpkgs/pkgs/applications/misc/xca/default.nix
new file mode 100644
index 000000000000..9e05e09caefe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xca/default.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, lib, fetchFromGitHub, autoreconfHook, perl, pkg-config
+, libtool, openssl, qtbase, qttools }:
+
+mkDerivation rec {
+  pname = "xca";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner  = "chris2511";
+    repo   = "xca";
+    rev    = "RELEASE.${version}";
+    sha256 = "0na2816lkfkkvssh9kmf5vwy6x8kd4x7h138jzy61wrvs69vhnbi";
+  };
+
+  postPatch = ''
+    substituteInPlace doc/code2html \
+      --replace /usr/bin/perl ${perl}/bin/perl
+  '';
+
+  buildInputs = [ libtool openssl qtbase ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config qttools ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "An x509 certificate generation tool, handling RSA, DSA and EC keys, certificate signing requests (PKCS#10) and CRLs";
+    homepage    = "https://hohnstaedt.de/xca/";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ offline peterhoeg ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xchm/default.nix b/nixpkgs/pkgs/applications/misc/xchm/default.nix
new file mode 100644
index 000000000000..f3764ce60f3f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xchm/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, wxGTK30, chmlib }:
+
+stdenv.mkDerivation rec {
+  pname = "xchm";
+  version = "1.31";
+
+  src = fetchFromGitHub {
+    owner = "rzvncj";
+    repo = "xCHM";
+    rev = version;
+    sha256 = "1mzafbpc1c211byf8bnwl13by7vi8xvxlaykyrajb1bj0ynbmmgp";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ wxGTK30 chmlib ];
+
+  configureFlags = [ "--with-wx-prefix=${wxGTK30}" ];
+
+  preConfigure = ''
+    export LDFLAGS="$LDFLAGS $(${wxGTK30}/bin/wx-config --libs | sed -e s@-pthread@@) -lwx_gtk2u_aui-3.0"
+  '';
+
+  meta = with lib; {
+    description = "A viewer for Microsoft HTML Help files";
+    homepage = "https://github.com/rzvncj/xCHM";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xcruiser/default.nix b/nixpkgs/pkgs/applications/misc/xcruiser/default.nix
new file mode 100644
index 000000000000..2e4771563a04
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xcruiser/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, gccmakedep, imake, libXt, libXaw, libXpm, libXext }:
+
+stdenv.mkDerivation {
+  name = "xcruiser-0.30";
+
+  src = fetchurl {
+      url = "mirror://sourceforge/xcruiser/xcruiser/xcruiser-0.30/xcruiser-0.30.tar.gz";
+      sha256 = "1r8whva38xizqdh7jmn6wcmfmsndc67pkw22wzfzr6rq0vf6hywi";
+    };
+
+  nativeBuildInputs = [ gccmakedep imake ];
+  buildInputs = [ libXt libXaw libXpm libXext ];
+
+  makeFlags = [
+    "BINDIR=$(out)/bin"
+    "XAPPLOADDIR=$(out)/etc/X11/app-defaults"
+  ];
+
+  meta = with lib; {
+    description = "Filesystem visualization utility";
+    longDescription = ''
+      XCruiser, formerly known as XCruise, is a filesystem visualization utility.
+      It constructs a virtually 3-D formed universe from a directory
+      tree and allows you to "cruise" within a visualized filesystem.
+    '';
+    homepage = "http://xcruiser.sourceforge.net/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xdg-launch/default.nix b/nixpkgs/pkgs/applications/misc/xdg-launch/default.nix
new file mode 100644
index 000000000000..257b15387baa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xdg-launch/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoconf
+, automake
+, gettext
+, libtool
+, perl
+, pkg-config
+, glib
+, xorg
+}:
+stdenv.mkDerivation rec {
+  pname = "xdg-launch";
+  version = "1.10";
+
+  postPatch = ''
+    # fix gettext configuration
+    echo 'AM_GNU_GETTEXT_VERSION' >> configure.ac
+    echo 'AM_GNU_GETTEXT([external])' >> configure.ac
+
+    sed -i data/*.desktop \
+      -e "s,/usr/bin,/$out/bin,g"
+  '';
+
+  src = fetchFromGitHub {
+    owner = "bbidulock";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-WY1TAPnXAn5GOaP9aMHar761m1MkKm4vavLlWELWUu8=";
+  };
+
+  preConfigure = "./autogen.sh";
+
+  buildInputs = [
+    xorg.libX11
+    xorg.libXrandr
+    glib # can be optional
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    gettext
+    libtool
+    perl # pod2man
+    pkg-config
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bbidulock/xdg-launch";
+    description = "A command line XDG compliant launcher and tools";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ck3d ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xdgmenumaker/default.nix b/nixpkgs/pkgs/applications/misc/xdgmenumaker/default.nix
new file mode 100644
index 000000000000..c1af7ae373c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xdgmenumaker/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, txt2tags, python3Packages, glib, gobject-introspection, wrapGAppsHook }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "xdgmenumaker";
+  version = "1.5";
+
+  src = fetchFromGitHub {
+    owner = "gapan";
+    repo = pname;
+    rev = version;
+    sha256 = "1vrsp5c1ah7p4dpwd6aqvinpwzd8crdimvyyr3lbm3c6cwpyjmif";
+  };
+
+  format = "other";
+
+  strictDeps = false;
+
+  nativeBuildInputs = [
+    gobject-introspection
+    txt2tags
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+  ];
+
+  pythonPath = with python3Packages; [
+    pyxdg
+    pygobject3
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  installFlags = [
+    "DESTDIR="
+  ];
+
+  meta = with lib; {
+    description = "Command line tool that generates XDG menus for several window managers";
+    homepage = "https://github.com/gapan/xdgmenumaker";
+    license = licenses.gpl2Plus;
+    # NOTE: exclude darwin from platforms because Travis reports hash mismatch
+    platforms = with platforms; filter (x: !(elem x darwin)) unix;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xdragon/default.nix b/nixpkgs/pkgs/applications/misc/xdragon/default.nix
new file mode 100644
index 000000000000..39f291a88493
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xdragon/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "xdragon";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "mwh";
+    repo = "dragon";
+    rev = "v${version}";
+    sha256 = "0fgzz39007fdjwq72scp0qygp2v3zc5f1xkm0sxaa8zxm25g1bra";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3 ];
+
+  installFlags = [ "PREFIX=${placeholder "out"}/bin" ];
+  postInstall = ''
+    ln -s $out/bin/dragon $out/bin/xdragon
+  '';
+
+  meta = with lib; {
+    description = "Simple drag-and-drop source/sink for X (called dragon in upstream)";
+    homepage = "https://github.com/mwh/dragon";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xfe/default.nix b/nixpkgs/pkgs/applications/misc/xfe/default.nix
new file mode 100644
index 000000000000..17e58cb54d71
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xfe/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, fox, pkg-config, gettext, xlibsWrapper, gcc, intltool, file, libpng }:
+
+stdenv.mkDerivation rec {
+  name = "xfe-1.42";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xfe/${name}.tar.gz";
+    sha256 = "1v1v0vcbnm30kpyd3rj8f56yh7lfnwy7nbs9785wi229b29fiqx1";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ fox gettext xlibsWrapper gcc intltool file libpng ];
+
+  preConfigure = ''
+    sed -i s,/usr/share/xfe,$out/share/xfe, src/xfedefs.h
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "MS-Explorer like file manager for X";
+    longDescription = ''
+      X File Explorer (Xfe) is an MS-Explorer like file manager for X.
+      It is based on the popular, but discontinued, X Win Commander, which was developed by Maxim Baranov.
+      Xfe aims to be the filemanager of choice for all the Unix addicts!
+    '';
+    homepage = "https://sourceforge.net/projects/xfe/";
+    license = lib.licenses.gpl2;
+    maintainers = [];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xfontsel/default.nix b/nixpkgs/pkgs/applications/misc/xfontsel/default.nix
new file mode 100644
index 000000000000..10034fbe1b1d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xfontsel/default.nix
@@ -0,0 +1,36 @@
+# This program used to come with xorg releases, but now I could only find it
+# at https://www.x.org/releases/individual/.
+# That is why this expression is not inside pkgs.xorg
+
+{lib, stdenv, fetchurl, makeWrapper, libX11, pkg-config, libXaw}:
+stdenv.mkDerivation rec {
+  name = "xfontsel-1.0.6";
+
+  src = fetchurl {
+    url = "mirror://xorg/individual/app/${name}.tar.bz2";
+    sha256 = "0700lf6hx7dg88wq1yll7zjvf9gbwh06xff20yffkxb289y0pai5";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [libX11 makeWrapper libXaw];
+
+  # Without this, it gets Xmu as a dependency, but without rpath entry
+  NIX_LDFLAGS = "-lXmu";
+
+  # This will not make xfontsel find its app-defaults, but at least the $out
+  # directory will contain them.
+  # hack: Copying the XFontSel app-defaults file to $HOME makes xfontsel work.
+  installPhase = ''
+    make install appdefaultdir=$out/share/X11/app-defaults
+    wrapProgram $out/bin/xfontsel \
+      --set XAPPLRESDIR $out/share/X11/app-defaults
+  '';
+
+  meta = {
+    homepage = "https://www.x.org/";
+    description = "Allows testing the fonts available in an X server";
+    license = lib.licenses.free;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xiphos/default.nix b/nixpkgs/pkgs/applications/misc/xiphos/default.nix
new file mode 100644
index 000000000000..01706011e2d5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xiphos/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config
+, python
+, intltool
+, docbook2x, docbook_xml_dtd_412, libxslt
+, sword, clucene_core, biblesync
+, gnome-doc-utils
+, libgsf, gconf
+, gtkhtml, libglade, scrollkeeper
+, webkitgtk
+, dbus-glib, enchant, isocodes, libuuid, icu
+, wrapGAppsHook
+, wafHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xiphos";
+  version = "4.1.0";
+
+  src = fetchFromGitHub {
+    owner = "crosswire";
+    repo = "xiphos";
+    rev = version;
+    sha256 = "14il9k4i58qbc78hcadw3gqy21sb9q661d75vlj6fwpczbzj7x1a";
+  };
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook wafHook ];
+  buildInputs = [ python intltool docbook2x docbook_xml_dtd_412 libxslt
+                  sword clucene_core biblesync gnome-doc-utils libgsf gconf gtkhtml
+                  libglade scrollkeeper webkitgtk dbus-glib enchant isocodes libuuid icu ];
+
+  prePatch = ''
+    patchShebangs .;
+  '';
+
+  preConfigure =  ''
+    export CLUCENE_HOME=${clucene_core};
+    export SWORD_HOME=${sword};
+  '';
+
+  wafConfigureFlags = [ "--enable-webkit2" ];
+
+  meta = with lib; {
+    description = "A GTK Bible study tool";
+    longDescription = ''
+      Xiphos (formerly known as GnomeSword) is a Bible study tool
+      written for Linux, UNIX, and Windows using GTK, offering a rich
+      and featureful environment for reading, study, and research using
+      modules from The SWORD Project and elsewhere.
+    '';
+    homepage = "https://www.xiphos.org/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xkbd/default.nix b/nixpkgs/pkgs/applications/misc/xkbd/default.nix
new file mode 100644
index 000000000000..173ea71fe407
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xkbd/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, freetype, libXrender, libXft, xorgproto
+, xinput, libXi, libXext, libXtst, libXpm, libX11, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xkbd";
+  version = "0.8.18";
+
+  src = fetchFromGitHub {
+    owner = "mahatma-kaganovich";
+    repo = "xkbd";
+    rev = "${pname}-${version}";
+    sha256 = "05ry6q75jq545kf6p20nhfywaqf2wdkfiyp6iwdpv9jh238hf7m9";
+  };
+
+  buildInputs = [
+    freetype libXrender libXft libXext libXtst libXpm libX11
+    libXi xorgproto xinput
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mahatma-kaganovich/xkbd";
+    description = "onscreen soft keyboard for X11";
+    license = licenses.gpl2Plus;
+    maintainers = [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xkblayout-state/default.nix b/nixpkgs/pkgs/applications/misc/xkblayout-state/default.nix
new file mode 100644
index 000000000000..4d1dd54bba6c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xkblayout-state/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, qt4 }:
+
+stdenv.mkDerivation rec {
+  pname = "xkblayout-state";
+  version = "1b";
+
+  src = fetchurl {
+    url = "https://github.com/nonpop/${pname}/archive/v${version}.tar.gz";
+    sha256 = "1m1nnplrdb2mclhj0881wf78ckvdnyk24g4k4p5s5gpd96cxxwnx";
+  };
+
+  buildInputs = [ qt4 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp xkblayout-state $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A small command-line program to get/set the current XKB keyboard layout";
+    homepage = "https://github.com/nonpop/xkblayout-state";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.jagajaga ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xkbmon/default.nix b/nixpkgs/pkgs/applications/misc/xkbmon/default.nix
new file mode 100644
index 000000000000..cd7037872cb7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xkbmon/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xkbmon";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "xkbmon";
+    repo = "xkbmon";
+    rev = version;
+    sha256 = "03v8f6fijgwagjphyj8w7lgh5hlc8jk0j2n45n7fm0xwy82cxxx9";
+  };
+
+  buildInputs = [ libX11 ];
+
+  installPhase = "install -D -t $out/bin xkbmon";
+
+  meta = with lib; {
+    homepage = "https://github.com/xkbmon/xkbmon";
+    description = "Command-line keyboard layout monitor for X11";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmenu/default.nix b/nixpkgs/pkgs/applications/misc/xmenu/default.nix
new file mode 100644
index 000000000000..f29bfcb55fe1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmenu/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, imlib2, libX11, libXft, libXinerama }:
+
+stdenv.mkDerivation rec {
+  pname = "xmenu";
+  version = "4.4.1";
+
+  src = fetchFromGitHub {
+    owner = "phillbush";
+    repo = "xmenu";
+    rev = "v${version}";
+    sha256 = "1s70zvsaqnsjqs298vw3py0vcvia68xlks1wcz37pb88bwligz1x";
+  };
+
+  buildInputs = [ imlib2 libX11 libXft libXinerama ];
+
+  postPatch = "sed -i \"s:/usr/local:$out:\" config.mk";
+
+  meta = with lib; {
+    description = "A menu utility for X";
+    homepage = "https://github.com/phillbush/xmenu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ neonfuz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmind/default.nix b/nixpkgs/pkgs/applications/misc/xmind/default.nix
new file mode 100644
index 000000000000..7629b42c877f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmind/default.nix
@@ -0,0 +1,92 @@
+{ stdenv, lib, fetchzip, fetchurl, gtk2, jre, libXtst, makeWrapper, makeDesktopItem, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "xmind";
+  version = "8-update8";
+
+  src = fetchzip {
+    url = "https://xmind.net/xmind/downloads/${pname}-${version}-linux.zip";
+    stripRoot = false;
+    sha256 = "1p68z0b4brgiyybz190alqv716ncql49vsksm41y90mcjd8s4jhn";
+  };
+
+  srcIcon = fetchurl {
+    url = "https://aur.archlinux.org/cgit/aur.git/plain/xmind.png?h=xmind";
+    sha256 = "0jxq2fiq69q9ly0m6hx2qfybqad22sl42ciw636071khpqgc885f";
+  };
+
+  preferLocalBuild = true;
+
+  patches = [ ./java-env-config-fixes.patch ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+  dontPatchELF = true;
+  dontStrip = true;
+
+  libPath = lib.makeLibraryPath [ gtk2 libXtst ];
+
+  desktopItem = makeDesktopItem {
+    name = "XMind";
+    exec = "XMind";
+    icon = "xmind";
+    desktopName = "XMind";
+    comment = meta.description;
+    categories = "Office;";
+    mimeType = "application/xmind;x-scheme-handler/xmind";
+  };
+
+  installPhase = let
+    targetDir = if stdenv.hostPlatform.system == "i686-linux"
+      then "XMind_i386"
+      else "XMind_amd64";
+  in ''
+    mkdir -p $out/{bin,libexec/configuration/,share/{applications/,fonts/,icons/hicolor/scalable/apps/}}
+    cp -r ${targetDir}/{configuration,p2,XMind{,.ini}} $out/libexec
+    cp -r {plugins,features} $out/libexec/
+    cp -r fonts $out/share/fonts/
+    cp "${desktopItem}/share/applications/XMind.desktop" $out/share/applications/XMind.desktop
+    cp ${srcIcon} $out/share/icons/hicolor/scalable/apps/xmind.png
+
+    patchelf --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
+      $out/libexec/XMind
+
+    wrapProgram $out/libexec/XMind \
+      --prefix LD_LIBRARY_PATH : "${libPath}"
+
+    # Inspired by https://aur.archlinux.org/cgit/aur.git/tree/?h=xmind
+    cat >$out/bin/XMind <<EOF
+      #! ${runtimeShell}
+      if [ ! -d "\$HOME/.xmind" ]; then
+        mkdir -p "\$HOME/.xmind/configuration-cathy/"
+        cp -r $out/libexec/configuration/ \$HOME/.xmind/configuration-cathy/
+      fi
+
+      exec "$out/libexec/XMind" "\$@"
+    EOF
+    chmod +x $out/bin/XMind
+
+    ln -s ${jre} $out/libexec/jre
+  '';
+
+  meta = with lib; {
+    description = "Mind-mapping software";
+    longDescription = ''
+      XMind is a mind mapping and brainstorming software. In addition
+      to the management elements, the software can capture ideas,
+      clarify thinking, manage complex information, and promote team
+      collaboration for higher productivity.
+
+      It supports mind maps, fishbone diagrams, tree diagrams,
+      organization charts, spreadsheets, etc. Normally, it is used for
+      knowledge management, meeting minutes, task management, and
+      GTD. Meanwhile, XMind can read FreeMind and MindManager files,
+      and save to Evernote.
+    '';
+    homepage = "https://www.xmind.net/";
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ michalrus ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmind/java-env-config-fixes.patch b/nixpkgs/pkgs/applications/misc/xmind/java-env-config-fixes.patch
new file mode 100644
index 000000000000..f359a9c2ba46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmind/java-env-config-fixes.patch
@@ -0,0 +1,40 @@
+diff --git a/XMind_amd64/XMind.ini b/XMind_amd64/XMind.ini
+index bdd8a37..5f35daf 100644
+--- a/XMind_amd64/XMind.ini
++++ b/XMind_amd64/XMind.ini
+@@ -1,11 +1,11 @@
+ -configuration
+-./configuration
++@user.home/.xmind/configuration-cathy_linux_64
+ -data
+-../workspace
++@user.home/.xmind/workspace-cathy
+ -startup
+-../plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
++plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
+ --launcher.library
+-../plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.400.v20160518-1444
++plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.400.v20160518-1444
+ --launcher.defaultAction
+ openFile
+ --launcher.GTK_version
+diff --git a/XMind_i386/XMind.ini b/XMind_i386/XMind.ini
+index 4ed3225..1d74258 100644
+--- a/XMind_i386/XMind.ini
++++ b/XMind_i386/XMind.ini
+@@ -1,11 +1,11 @@
+ -configuration
+-./configuration
++@user.home/.xmind/configuration-cathy_linux_64
+ -data
+-../workspace
++@user.home/.xmind/workspace-cathy
+ -startup
+-../plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
++plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
+ --launcher.library
+-../plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.400.v20160518-1444
++plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.400.v20160518-1444
+ --launcher.defaultAction
+ openFile
+ --launcher.GTK_version
diff --git a/nixpkgs/pkgs/applications/misc/xmr-stak/default.nix b/nixpkgs/pkgs/applications/misc/xmr-stak/default.nix
new file mode 100644
index 000000000000..cb4233be8ec3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmr-stak/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, stdenvGcc6, lib
+, fetchFromGitHub, cmake, libmicrohttpd_0_9_70, openssl
+, opencl-headers, ocl-icd, hwloc, cudatoolkit
+, devDonationLevel ? "0.0"
+, cudaSupport ? false
+, openclSupport ? true
+}:
+
+let
+  stdenv' = if cudaSupport then stdenvGcc6 else stdenv;
+in
+
+stdenv'.mkDerivation rec {
+  name = "xmr-stak-${version}";
+  version = "2.10.8";
+
+  src = fetchFromGitHub {
+    owner = "fireice-uk";
+    repo = "xmr-stak";
+    rev = version;
+    sha256 = "0ilx5mhh91ks7dwvykfyynh53l6vkkignjpwkkss8ss6b2k8gdbj";
+  };
+
+  NIX_CFLAGS_COMPILE = "-O3";
+
+  cmakeFlags = lib.optional (!cudaSupport) "-DCUDA_ENABLE=OFF"
+    ++ lib.optional (!openclSupport) "-DOpenCL_ENABLE=OFF";
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libmicrohttpd_0_9_70 openssl hwloc ]
+    ++ lib.optional cudaSupport cudatoolkit
+    ++ lib.optionals openclSupport [ opencl-headers ocl-icd ];
+
+  postPatch = ''
+    substituteInPlace xmrstak/donate-level.hpp \
+      --replace 'fDevDonationLevel = 2.0' 'fDevDonationLevel = ${devDonationLevel}'
+  '';
+
+  meta = with lib; {
+    description = "Unified All-in-one Monero miner";
+    homepage = "https://github.com/fireice-uk/xmr-stak";
+    license = licenses.gpl3Plus;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ fpletz bfortz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmrig/default.nix b/nixpkgs/pkgs/applications/misc/xmrig/default.nix
new file mode 100644
index 000000000000..35a19cb3063e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmrig/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchFromGitHub, cmake, libuv, libmicrohttpd, openssl, hwloc
+, donateLevel ? 0
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xmrig";
+  version = "6.6.1";
+
+  src = fetchFromGitHub {
+    owner = "xmrig";
+    repo = "xmrig";
+    rev = "v${version}";
+    sha256 = "03phq1c6fylvkg5x7l0bskspr9jdfx61jy67yx2lxhymqgpbf64z";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libuv libmicrohttpd openssl hwloc ];
+
+  postPatch = ''
+    substituteInPlace src/donate.h \
+      --replace "kDefaultDonateLevel = 5;" "kDefaultDonateLevel = ${toString donateLevel};" \
+      --replace "kMinimumDonateLevel = 1;" "kMinimumDonateLevel = ${toString donateLevel};"
+  '';
+
+  installPhase = ''
+    install -vD xmrig $out/bin/xmrig
+  '';
+
+  meta = with lib; {
+    description = "Monero (XMR) CPU miner";
+    homepage = "https://github.com/xmrig/xmrig";
+    license = licenses.gpl3Plus;
+    platforms   = [ "x86_64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ fpletz kim0 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmrig/proxy.nix b/nixpkgs/pkgs/applications/misc/xmrig/proxy.nix
new file mode 100644
index 000000000000..1b8f79415838
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmrig/proxy.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, fetchFromGitHub, cmake, libuv, libmicrohttpd, openssl
+, donateLevel ? 0
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xmrig-proxy";
+  version = "6.4.0";
+
+  src = fetchFromGitHub {
+    owner = "xmrig";
+    repo = "xmrig-proxy";
+    rev = "v${version}";
+    sha256 = "0bcbil9b5z95haqbmdqaslckvjflw7h77fqrcdxc6lrn29575nnf";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libuv libmicrohttpd openssl ];
+
+  postPatch = ''
+    # Link dynamically against libuuid instead of statically
+    substituteInPlace CMakeLists.txt --replace uuid.a uuid
+  '';
+
+  installPhase = ''
+    install -vD xmrig-proxy $out/bin/xmrig-proxy
+  '';
+
+  meta = with lib; {
+    description = "Monero (XMR) Stratum protocol proxy";
+    homepage = "https://github.com/xmrig/xmrig-proxy";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ aij ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xneur/default.nix b/nixpkgs/pkgs/applications/misc/xneur/default.nix
new file mode 100644
index 000000000000..bb4e1727f69f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xneur/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, pkg-config, intltool, xorg, pcre, gst_all_1, glib
+, xosd, libnotify, enchant, wrapGAppsHook, gdk-pixbuf }:
+
+stdenv.mkDerivation {
+   pname = "xneur";
+   version = "0.20.0";
+
+  src = fetchurl {
+    url = "https://github.com/AndrewCrewKuznetsov/xneur-devel/raw/f66723feb272c68f7c22a8bf0dbcafa5e3a8a5ee/dists/0.20.0/xneur_0.20.0.orig.tar.gz";
+    sha256 = "1lg3qpi9pkx9f5xvfc8yf39wwc98f769yb7i2438vqn66kla1xpr";
+  };
+
+  nativeBuildInputs = [
+    pkg-config intltool wrapGAppsHook
+  ];
+
+  buildInputs = [
+    xorg.libX11 xorg.libXtst pcre gst_all_1.gstreamer glib
+    xosd xorg.libXext xorg.libXi libnotify
+    enchant gdk-pixbuf
+    gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
+  ];
+
+  postPatch = ''
+    sed -e 's@for xosd_dir in@for xosd_dir in ${xosd} @' -i configure
+  '';
+
+  meta = with lib; {
+    description = "Utility for switching between keyboard layouts";
+    homepage = "https://xneur.ru";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xpad/default.nix b/nixpkgs/pkgs/applications/misc/xpad/default.nix
new file mode 100644
index 000000000000..dbb5eb42e1d9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpad/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl
+, autoreconfHook, pkg-config, wrapGAppsHook
+, glib, intltool, gtk3, gtksourceview }:
+
+stdenv.mkDerivation rec {
+  pname = "xpad";
+  version = "5.4.0";
+
+  src = fetchurl {
+    url = "https://launchpad.net/xpad/trunk/${version}/+download/xpad-${version}.tar.bz2";
+    sha256 = "1qpmlwn0bcw1q73ag0l0fdnlzmwawfvsy4g9y5b0vyrc58lcp5d3";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config wrapGAppsHook ];
+
+  buildInputs = [ glib intltool gtk3 gtksourceview ];
+
+  meta = with lib; {
+    description = "A sticky note application for jotting down things to remember";
+    homepage = "https://launchpad.net/xpad";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ michalrus ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xpdf/cmake_version.patch b/nixpkgs/pkgs/applications/misc/xpdf/cmake_version.patch
new file mode 100644
index 000000000000..59a51f7506d5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpdf/cmake_version.patch
@@ -0,0 +1,15 @@
+
+Fix "No known features for CXX compiler", see
+https://cmake.org/pipermail/cmake/2016-December/064733.html and the note at
+https://cmake.org/cmake/help/v3.10/command/cmake_minimum_required.html
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -8,7 +8,7 @@
+ #
+ #========================================================================
+ 
+-cmake_minimum_required(VERSION 2.8.8)
++cmake_minimum_required(VERSION 3.1.0)
+ 
+ project(xpdf)
+ 
diff --git a/nixpkgs/pkgs/applications/misc/xpdf/default.nix b/nixpkgs/pkgs/applications/misc/xpdf/default.nix
new file mode 100644
index 000000000000..cafbcd4b11c8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpdf/default.nix
@@ -0,0 +1,83 @@
+{ enableGUI ? true
+, enablePDFtoPPM ? true
+, enablePrinting ? true
+, lib, stdenv, fetchzip, cmake, makeDesktopItem
+, zlib, libpng, cups ? null, freetype ? null
+, qtbase ? null, qtsvg ? null, wrapQtAppsHook
+}:
+
+assert enableGUI -> qtbase != null && qtsvg != null && freetype != null;
+assert enablePDFtoPPM -> freetype != null;
+assert enablePrinting -> cups != null;
+
+stdenv.mkDerivation rec {
+  pname = "xpdf";
+  version = "4.02";
+
+  src = fetchzip {
+    url = "https://xpdfreader-dl.s3.amazonaws.com/${pname}-${version}.tar.gz";
+    sha256 = "0dzwq6fnk013wa4l5mjpvm4mms2mh5hbrxv4rhk2ab5ljbzz7b2w";
+  };
+
+  # Fix "No known features for CXX compiler", see
+  # https://cmake.org/pipermail/cmake/2016-December/064733.html and the note at
+  # https://cmake.org/cmake/help/v3.10/command/cmake_minimum_required.html
+  patches = lib.optional stdenv.isDarwin  ./cmake_version.patch;
+
+  nativeBuildInputs =
+    [ cmake ]
+    ++ lib.optional enableGUI wrapQtAppsHook;
+
+  cmakeFlags = ["-DSYSTEM_XPDFRC=/etc/xpdfrc" "-DA4_PAPER=ON" "-DOPI_SUPPORT=ON"]
+    ++ lib.optional (!enablePrinting) "-DXPDFWIDGET_PRINTING=OFF";
+
+  buildInputs = [ zlib libpng ] ++
+    lib.optional enableGUI qtbase ++
+    lib.optional enablePrinting cups ++
+    lib.optional enablePDFtoPPM freetype;
+
+  hardeningDisable = [ "format" ];
+
+  desktopItem = makeDesktopItem {
+    name = "xpdf";
+    desktopName = "Xpdf";
+    comment = "Views Adobe PDF files";
+    icon = "xpdf";
+    exec = "xpdf %f";
+    categories = "Office;";
+    terminal = "false";
+  };
+
+  postInstall = ''
+    install -Dm644 ${desktopItem}/share/applications/xpdf.desktop $out/share/applications/xpdf.desktop
+    install -Dm644 $src/xpdf-qt/xpdf-icon.svg $out/share/pixmaps/xpdf.svg
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.xpdfreader.com";
+    description = "Viewer for Portable Document Format (PDF) files";
+    longDescription = ''
+      XPDF includes multiple tools for viewing and processing PDF files.
+        xpdf:      PDF viewer (with Graphical Interface)
+        pdftotext: converts PDF to text
+        pdftops:   converts PDF to PostScript
+        pdftoppm:  converts PDF pages to netpbm (PPM/PGM/PBM) image files
+        pdftopng:  converts PDF pages to PNG image files
+        pdftohtml: converts PDF to HTML
+        pdfinfo:   extracts PDF metadata
+        pdfimages: extracts raw images from PDF files
+        pdffonts:  lists fonts used in PDF files
+        pdfdetach: extracts attached files from PDF files
+    '';
+    license = with licenses; [ gpl2 gpl3 ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+    knownVulnerabilities = [
+      "CVE-2018-7453: loop in PDF objects"
+      "CVE-2018-16369: loop in PDF objects"
+      "CVE-2019-9587: loop in PDF objects"
+      "CVE-2019-9588: loop in PDF objects"
+      "CVE-2019-16088: loop in PDF objects"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.nix b/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.nix
new file mode 100644
index 000000000000..342c00aa12e3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl
+}:
+
+stdenv.mkDerivation {
+  name = "libxpdf-3.02pl4";
+
+  src = fetchurl {
+    url = "ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02.tar.gz";
+    sha256 = "000zq4ddbwyxiki4vdwpmxbnw5n9hsg9hvwra2p33hslyib7sfmk";
+  };
+
+  patches = [
+    (fetchurl {
+      url = "ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl1.patch";
+      sha256 = "1wxv9l0d2kkwi961ihpdwi75whdvk7cgqxkbfym8cjj11fq17xjq";
+    })
+    (fetchurl {
+      url = "ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl2.patch";
+      sha256 = "1nfrgsh9xj0vryd8h65myzd94bjz117y89gq0hzji9dqn23xihfi";
+    })
+    (fetchurl {
+      url = "ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl3.patch";
+      sha256 = "0jskkv8x6dqr9zj4azaglas8cziwqqrkbbnzrpm2kzrvsbxyhk2r";
+    })
+    (fetchurl {
+      url = "ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl4.patch";
+      sha256 = "1c48h7aizx0ngmzlzw0mpja1w8vqyy3pg62hyxp7c60k86al715h";
+    })
+    ./xpdf-3.02-protection.patch
+    ./libxpdf.patch
+  ];
+
+  installPhase = ''
+    mkdir -p $out/lib/goo
+    mkdir -p $out/lib/fofi
+    mkdir -p $out/lib/xpdf
+    mkdir -p $out/include
+
+    cp -v goo/libGoo.a $out/lib/goo
+    cp -v fofi/libfofi.a $out/lib/fofi
+    cp -v xpdf/libxpdf.a $out/lib/xpdf
+
+    cp -v *.h $out/include
+    cp -v goo/*.h $out/include
+    cp -v fofi/*.h $out/include
+    cp -v xpdf/*.h $out/include
+  '';
+
+  meta = with lib; {
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.patch b/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.patch
new file mode 100644
index 000000000000..606da76c7293
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.patch
@@ -0,0 +1,45 @@
+diff -rc xpdf-3.02/xpdf/Makefile.in xpdf-3.02-new/xpdf/Makefile.in
+*** xpdf-3.02/xpdf/Makefile.in	2007-02-27 23:05:52.000000000 +0100
+--- xpdf-3.02-new/xpdf/Makefile.in	2010-08-25 14:54:14.000000000 +0200
+***************
+*** 110,116 ****
+  	pdffonts$(EXE) pdftoppm$(EXE) pdfimages$(EXE)
+  
+  all-no-x: pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) pdffonts$(EXE) \
+! 	pdfimages$(EXE)
+  
+  #------------------------------------------------------------------------
+  
+--- 110,116 ----
+  	pdffonts$(EXE) pdftoppm$(EXE) pdfimages$(EXE)
+  
+  all-no-x: pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) pdffonts$(EXE) \
+! 	pdfimages$(EXE) libxpdf.a
+  
+  #------------------------------------------------------------------------
+  
+***************
+*** 248,253 ****
+--- 248,269 ----
+  
+  #------------------------------------------------------------------------
+  
++ PDFTOEPDF_OBJS = \
++         Array.o BuiltinFont.o BuiltinFontTables.o CMap.o \
++         Catalog.o CharCodeToUnicode.o Decrypt.o Dict.o Error.o \
++         FontEncodingTables.o Gfx.o GfxFont.o GfxState.o \
++         GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o JPXStream.o Lexer.o Link.o \
++         NameToCharCode.o Object.o OutputDev.o Outline.o PDFDoc.o Page.o \
++         Parser.o PDFDocEncoding.o Stream.o UnicodeMap.o XRef.o Function.o \
++         PSTokenizer.o UnicodeTypeTable.o
++ 
++ libxpdf.a: $(PDFTOEPDF_OBJS)
++ 	rm -f $@
++ 	$(AR) $(ARFLAGS) $@ *.o
++ 	ranlib $@
++ 
++ #------------------------------------------------------------------------
++ 
+  depend:
+  	$(CXX) $(CXXFLAGS) -MM $(CXX_SRC) >Makefile.dep
+  
diff --git a/nixpkgs/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch b/nixpkgs/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch
new file mode 100644
index 000000000000..598fc6dbd073
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch
@@ -0,0 +1,74 @@
+diff -C 3 -r orig/xpdf/pdfimages.cc xpdf-3.02/xpdf/pdfimages.cc
+*** orig/xpdf/pdfimages.cc	2007-02-27 23:05:52.000000000 +0100
+--- xpdf-3.02/xpdf/pdfimages.cc	2007-10-31 20:17:22.601449943 +0100
+***************
+*** 118,130 ****
+      goto err1;
+    }
+  
+-   // check for copy permission
+-   if (!doc->okToCopy()) {
+-     error(-1, "Copying of images from this document is not allowed.");
+-     exitCode = 3;
+-     goto err1;
+-   }
+- 
+    // get page range
+    if (firstPage < 1)
+      firstPage = 1;
+--- 118,123 ----
+diff -C 3 -r orig/xpdf/pdftotext.cc xpdf-3.02/xpdf/pdftotext.cc
+*** orig/xpdf/pdftotext.cc	2007-02-27 23:05:52.000000000 +0100
+--- xpdf-3.02/xpdf/pdftotext.cc	2007-10-31 20:17:34.392224196 +0100
+***************
+*** 160,172 ****
+      goto err2;
+    }
+  
+-   // check for copy permission
+-   if (!doc->okToCopy()) {
+-     error(-1, "Copying of text from this document is not allowed.");
+-     exitCode = 3;
+-     goto err2;
+-   }
+- 
+    // construct text file name
+    if (argc == 3) {
+      textFileName = new GString(argv[2]);
+--- 160,165 ----
+diff -C 3 -r orig/xpdf/XPDFCore.cc xpdf-3.02/xpdf/XPDFCore.cc
+*** orig/xpdf/XPDFCore.cc	2007-02-27 23:05:52.000000000 +0100
+--- xpdf-3.02/xpdf/XPDFCore.cc	2007-10-31 20:18:05.370494431 +0100
+***************
+*** 384,394 ****
+  #ifndef NO_TEXT_SELECT
+        if (selectULX != selectLRX &&
+  	  selectULY != selectLRY) {
+! 	if (doc->okToCopy()) {
+! 	  copySelection();
+! 	} else {
+! 	  error(-1, "Copying of text from this document is not allowed.");
+! 	}
+        }
+  #endif
+      }
+--- 384,390 ----
+  #ifndef NO_TEXT_SELECT
+        if (selectULX != selectLRX &&
+  	  selectULY != selectLRY) {
+! 	copySelection();
+        }
+  #endif
+      }
+***************
+*** 407,415 ****
+    int pg;
+    double ulx, uly, lrx, lry;
+  
+-   if (!doc->okToCopy()) {
+-     return;
+-   }
+    if (getSelection(&pg, &ulx, &uly, &lrx, &lry)) {
+      //~ for multithreading: need a mutex here
+      if (currentSelection) {
+--- 403,408 ----
diff --git a/nixpkgs/pkgs/applications/misc/xrandr-invert-colors/default.nix b/nixpkgs/pkgs/applications/misc/xrandr-invert-colors/default.nix
new file mode 100644
index 000000000000..f1a0f7b5ba1d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xrandr-invert-colors/default.nix
@@ -0,0 +1,26 @@
+{ fetchurl, lib, stdenv, libXrandr}:
+
+stdenv.mkDerivation rec {
+  version = "0.01";
+  pname = "xrandr-invert-colors";
+  src = fetchurl {
+    url = "https://github.com/zoltanp/xrandr-invert-colors/archive/v${version}.tar.gz";
+    sha256 = "1z4hxn56rlflvqanb8ncqa1xqawnda85b1b37w6r2iqs8rw52d75";
+  };
+
+  buildInputs = [ libXrandr ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv xrandr-invert-colors.bin xrandr-invert-colors
+    install xrandr-invert-colors $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Inverts the colors of your screen";
+    license = lib.licenses.gpl3Plus;
+    homepage = "https://github.com/zoltanp/xrandr-invert-colors";
+    maintainers = [lib.maintainers.magnetophon ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xrq/default.nix b/nixpkgs/pkgs/applications/misc/xrq/default.nix
new file mode 100644
index 000000000000..e8e6490cbd64
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xrq/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libX11}:
+
+stdenv.mkDerivation {
+  name = "xrq-unstable-2016-01-15";
+
+  src = fetchFromGitHub {
+    owner = "arianon";
+    repo = "xrq";
+    rev = "d5dc19c63881ebdd1287a02968e3a1447dde14a9";
+    sha256 = "1bxf6h3fjw3kjraz7028m7p229l423y1ngy88lqvf0xl1g3dhp36";
+  };
+
+  installPhase = ''
+    make PREFIX=$out install
+  '';
+
+  outputs = [ "out" "man" ];
+
+  buildInputs = [ libX11 ];
+
+  meta = {
+    description = "X utility for querying xrdb";
+    homepage = "https://github.com/arianon/xrq";
+    license = lib.licenses.mit;
+    platforms = with lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xscope/default.nix b/nixpkgs/pkgs/applications/misc/xscope/default.nix
new file mode 100644
index 000000000000..ba798a861a8d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xscope/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, pkg-config, libXt }:
+
+stdenv.mkDerivation rec {
+  pname = "xscope";
+  version = "1.4.1";
+
+  src = fetchurl {
+    url = "mirror://xorg/individual/app/${pname}-${version}.tar.bz2";
+    sha256 = "08zl3zghvbcqy0r5dn54dim84lp52s0ygrr87jr3a942a6ypz01k";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libXt ];
+
+  meta = with lib; {
+    description = "program to monitor X11/Client conversations";
+    homepage = "https://cgit.freedesktop.org/xorg/app/xscope/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ];
+    platforms = with platforms; unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/xsuspender/default.nix b/nixpkgs/pkgs/applications/misc/xsuspender/default.nix
new file mode 100644
index 000000000000..93e56f1df2d0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xsuspender/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, cmake, makeWrapper, pkg-config
+, glib, libwnck3, procps }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "xsuspender";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "kernc";
+    repo = "xsuspender";
+    rev = version;
+    sha256 = "03lbga68dxg89d227sdwk1f5xj4r1pmj0qh2kasi2cqh8ll7qv4b";
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+  buildInputs = [ glib libwnck3 ];
+
+  postInstall = ''
+    wrapProgram $out/bin/xsuspender \
+      --prefix PATH : "${makeBinPath [ procps ]}"
+  '';
+
+  meta = {
+    description = "Auto-suspend inactive X11 applications";
+    homepage = "https://kernc.github.io/xsuspender/";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xsw/default.nix b/nixpkgs/pkgs/applications/misc/xsw/default.nix
new file mode 100644
index 000000000000..a664aec45e1f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xsw/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config, SDL, SDL_image, SDL_ttf, SDL_gfx, flex, bison }:
+
+let
+  makeSDLFlags = map (p: "-I${lib.getDev p}/include/SDL");
+
+in stdenv.mkDerivation rec {
+  pname = "xsw";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "andrenho";
+    repo = "xsw";
+    rev = version;
+    sha256 = "092vp61ngd2vscsvyisi7dv6qrk5m1i81gg19hyfl5qvjq5p0p8g";
+  };
+
+  nativeBuildInputs = [ pkg-config flex bison ];
+
+  buildInputs = [ SDL SDL_image SDL_ttf SDL_gfx ];
+
+  NIX_CFLAGS_COMPILE = toString (makeSDLFlags [ SDL SDL_image SDL_ttf SDL_gfx ]);
+
+  patches = [
+    ./parse.patch # Fixes compilation error by avoiding redundant definitions.
+  ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "A slide show presentation tool";
+
+    platforms = platforms.unix;
+    license  = licenses.gpl3;
+    maintainers = [ maintainers.vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xsw/parse.patch b/nixpkgs/pkgs/applications/misc/xsw/parse.patch
new file mode 100644
index 000000000000..6db6c14c26a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xsw/parse.patch
@@ -0,0 +1,21 @@
+The `%code` causes Color definition to be added in both parser.h and parser.c
+causing duplicate definitions error. This ensures that once it has been included
+as part of parser.h, it wont be redefined in parser.c
+
+--- xsw-0.1.2-src/src/parser.y	1969-12-31 16:00:01.000000000 -0800
++++ xsw-0.1.2-src/src/parser.y	2016-06-28 13:21:35.707027770 -0700
+@@ -38,7 +38,13 @@
+ 
+ %}
+ 
+-%code requires { typedef struct { unsigned char c; } Color; }
++%code requires
++{
++#ifndef COLORDEF
++#define COLORDEF
++typedef struct { unsigned char c; } Color;
++#endif
++}
+ 
+ %token SLIDE COLON HIFEN TEXT X Y W H IMAGE SIZE SCALE TEMPLATE BACKGROUND FONT
+ %token STYLE ALIGN EXPAND PLUS IMAGE_PATH
diff --git a/nixpkgs/pkgs/applications/misc/xteddy/default.nix b/nixpkgs/pkgs/applications/misc/xteddy/default.nix
new file mode 100644
index 000000000000..717ba66feb86
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xteddy/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitLab, pkg-config, xorg, imlib2, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "xteddy";
+  version = "2.2-5";
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "games-team";
+    repo = pname;
+    rev = "debian/${version}";
+    sha256 = "0rm7w78d6qajq4fvi4agyqm0c70f3c1i0cy2jdb6kqql2k8w78qy";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ imlib2 xorg.libX11 xorg.libXext ];
+
+  patches = [ "${src}/debian/patches/10_libXext.patch" "${src}/debian/patches/wrong-man-page-section.patch" ];
+
+  postPatch = ''
+    sed -i "s:/usr/games/xteddy:$out/bin/xteddy:" xtoys
+    sed -i "s:/usr/share/xteddy:$out/share/xteddy:" xtoys
+  '';
+
+  postInstall = ''
+    cp -R images $out/share/images
+    # remove broken test script
+    rm $out/bin/xteddy_test
+  '';
+
+  postFixup = ''
+    # this is needed, because xteddy expects images to reside
+    # in the current working directory
+    wrapProgram $out/bin/xteddy --run "cd $out/share/images/"
+  '';
+
+  meta = with lib; {
+    description = "Cuddly teddy bear for your X desktop";
+    homepage = "https://weber.itn.liu.se/~stegu/xteddy/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.xaverdh ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xxkb/default.nix b/nixpkgs/pkgs/applications/misc/xxkb/default.nix
new file mode 100644
index 000000000000..7a0111785c14
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xxkb/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, libX11, libXt, libXext, libXpm, imake, gccmakedep
+, svgSupport ? false, librsvg, glib, gdk-pixbuf, pkg-config
+}:
+
+assert svgSupport ->
+  librsvg != null && glib != null && gdk-pixbuf != null && pkg-config != null;
+
+stdenv.mkDerivation rec {
+  name = "xxkb-1.11.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xxkb/${name}-src.tar.gz";
+    sha256 = "0hl1i38z9xnbgfjkaz04vv1n8xbgfg88g5z8fyzyb2hxv2z37anf";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [
+    libX11 libXt libXext libXpm
+  ] ++ lib.optionals svgSupport [ librsvg glib gdk-pixbuf pkg-config ];
+
+  outputs = [ "out" "man" ];
+
+  imakeFlags = lib.optionalString svgSupport "-DWITH_SVG_SUPPORT";
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "PIXMAPDIR=${placeholder "out"}/share/xxkb"
+    "XAPPLOADDIR=${placeholder "out"}/etc/X11/app-defaults"
+    "MANDIR=${placeholder "man"}/share/man"
+  ];
+
+  installTargets = [ "install" "install.man" ];
+
+  meta = {
+    description = "A keyboard layout indicator and switcher";
+    homepage = "http://xxkb.sourceforge.net/";
+    license = lib.licenses.artistic2;
+    maintainers = with lib.maintainers; [ rasendubi ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xygrib/default.nix b/nixpkgs/pkgs/applications/misc/xygrib/default.nix
new file mode 100644
index 000000000000..68adc2abbf9d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xygrib/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, wrapQtAppsHook, cmake, bzip2, qtbase, qttools, libnova, proj, libpng, openjpeg } :
+
+stdenv.mkDerivation rec {
+  version = "1.2.6.1";
+  pname = "xygrib";
+
+  src = fetchFromGitHub {
+    owner = "opengribs";
+    repo = "XyGrib";
+    rev = "v${version}";
+    sha256 = "0xzsm8pr0zjk3f8j880fg5n82jyxn8xf1330qmmq1fqv7rsrg9ia";
+  };
+
+  nativeBuildInputs = [ cmake qttools wrapQtAppsHook ];
+  buildInputs = [ bzip2 qtbase libnova proj openjpeg libpng ];
+  cmakeFlags = [ "-DOPENJPEG_INCLUDE_DIR=${openjpeg.dev}/include/openjpeg-2.3" ]
+    ++ lib.optionals stdenv.isDarwin [ "-DLIBNOVA_LIBRARY=${libnova}/lib/libnova.dylib" ];
+
+  postInstall = if stdenv.isDarwin then ''
+    mkdir -p "$out/Applications" "$out/XyGrib/XyGrib.app/Contents/Resources"
+    cp "../data/img/xyGrib.icns" "$out/XyGrib/XyGrib.app/Contents/Resources/xyGrib.icns"
+    mv $out/XyGrib/XyGrib.app $out/Applications
+    wrapQtApp "$out/Applications/XyGrib.app/Contents/MacOS/XyGrib"
+  '' else ''
+    wrapQtApp $out/XyGrib/XyGrib
+    mkdir -p $out/bin
+    ln -s $out/XyGrib/XyGrib $out/bin/xygrib
+  '';
+
+  meta = with lib; {
+    homepage = "https://opengribs.org";
+    description = "Weather Forecast Visualization";
+    longDescription = ''XyGrib is a leading opensource weather visualization package.
+                        It interacts with OpenGribs's Grib server providing a choice
+                        of global and large area atmospheric and wave models.'';
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ j03 SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/yarssr/default.nix b/nixpkgs/pkgs/applications/misc/yarssr/default.nix
new file mode 100644
index 000000000000..93e8f1fc9d75
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yarssr/default.nix
@@ -0,0 +1,64 @@
+{ fetchFromGitHub, stdenv, lib, gettext, gtk2, makeWrapper, perlPackages, gnome2 }:
+
+let
+  perlDeps = with perlPackages; [
+    Glib Gtk2 Gnome2 Pango Cairo Gnome2Canvas Gnome2VFS Gtk2GladeXML Gtk2TrayIcon
+    XMLLibXML XMLSAXBase XMLParser XMLRSS
+    HTMLParser
+    DateTime DateTimeFormatMail DateTimeFormatW3CDTF DateTimeLocale DateTimeTimeZone
+    ParamsValidate
+    ModuleImplementation ModuleRuntime
+    TryTiny
+    ClassSingleton
+    URI
+    AnyEvent AnyEventHTTP
+    commonsense
+    FileSlurp
+    JSON
+    Guard
+    LocaleGettext
+  ];
+  libs = [
+    stdenv.cc.cc.lib
+    gtk2
+  ];
+in
+stdenv.mkDerivation {
+  version = "git-2017-12-01";
+  pname = "yarssr";
+
+  src = fetchFromGitHub {
+    owner = "JGRennison";
+    repo = "yarssr";
+    rev = "e70eb9fc6563599bfb91c6de6a79654de531c18d";
+    sha256 = "0x7hz8x8qyp3i1vb22zhcnvwxm3jhmmmlr22jqc5b09vpmbw1l45";
+  };
+
+  nativeBuildInputs = [ perlPackages.perl gettext makeWrapper ];
+  buildInputs = perlDeps ++ [gnome2.libglade];
+  propagatedBuildInputs = libs ++ perlDeps;
+
+  installPhase = ''
+    DESTDIR=$out make install
+    mv $out/usr/* $out/
+    rm -R $out/usr
+    sed -i -r "s!use lib [^;]+;!use lib '$out/share/yarssr';!" $out/bin/yarssr
+    sed -i -r "s!$Yarssr::PREFIX = [^;]+;!$Yarssr::PREFIX = '$out';!" $out/bin/yarssr
+    sed -i -r "s!use Yarssr::Browser;!!" $out/share/yarssr/Yarssr/GUI.pm
+    chmod a+x $out/bin/yarssr
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/yarssr \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath libs} \
+      --set PERL5LIB "${perlPackages.makePerlPath perlDeps}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/tsyrogit/zxcvbn-c";
+    description = "A fork of Yarssr (a RSS reader for the GNOME Tray) from http://yarssr.sf.net with various fixes";
+    license = licenses.gpl1;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ xurei ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/yate/default.nix b/nixpkgs/pkgs/applications/misc/yate/default.nix
new file mode 100644
index 000000000000..3046638ec4a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yate/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, fetchurl, lib, qt4, openssl, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "yate";
+  version = "6.1.0-1";
+
+  src = fetchurl {
+    url = "http://voip.null.ro/tarballs/yate${lib.versions.major version}/${pname}-${version}.tar.gz";
+    sha256 = "0xx3i997nsf2wzbv6m5n6adsym0qhgc6xg4rsv0fwqrgisf5327d";
+  };
+
+  # TODO zaptel ? postgres ?
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ qt4 openssl ];
+
+  # /dev/null is used when linking which is a impure path for the wrapper
+  preConfigure =
+    ''
+      sed -i 's@,/dev/null@@' configure
+      patchShebangs configure
+    '';
+
+  # --unresolved-symbols=ignore-in-shared-libs makes ld no longer find --library=yate? Why?
+  preBuild =
+    ''
+      export NIX_LDFLAGS="-L$TMP/yate $NIX_LDFLAGS"
+      find . -type f -iname Makefile | xargs sed -i \
+        -e 's@-Wl,--unresolved-symbols=ignore-in-shared-libs@@' \
+        -e 's@-Wl,--retain-symbols-file@@'
+    '';
+
+  meta = {
+    description = "Yet another telephony engine";
+    homepage = "http://yate.null.ro/";
+    # Yate's license is GPL with an exception for linking with
+    # OpenH323 and PWlib (licensed under MPL).
+    license = ["GPL" "MPL"];
+    maintainers = [ lib.maintainers.marcweber ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/yokadi/default.nix b/nixpkgs/pkgs/applications/misc/yokadi/default.nix
new file mode 100644
index 000000000000..ca329521142c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yokadi/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, buildPythonApplication, dateutil,
+  sqlalchemy, setproctitle, icalendar }:
+
+buildPythonApplication rec {
+  pname = "yokadi";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://yokadi.github.io/download/${pname}-${version}.tar.gz";
+    sha256 = "681c8aa52b2e4b5255e1311e76b4b81dcb63ee7f6ca3a47178e684c06baf330f";
+  };
+
+  propagatedBuildInputs = [
+    dateutil
+    sqlalchemy
+    setproctitle
+    icalendar
+  ];
+
+  # Yokadi doesn't have any tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A command line oriented, sqlite powered, todo-list";
+    homepage = "https://yokadi.github.io/index.html";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.nipav ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/yubioath-desktop/0001-replace-git-with-normal-python-package.patch b/nixpkgs/pkgs/applications/misc/yubioath-desktop/0001-replace-git-with-normal-python-package.patch
new file mode 100644
index 000000000000..d56a6cfab073
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yubioath-desktop/0001-replace-git-with-normal-python-package.patch
@@ -0,0 +1,24 @@
+From 5eb4d6a384753896d495b09d8651c48672ef234d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
+Date: Wed, 25 Nov 2020 11:26:49 +0100
+Subject: [PATCH] replace git with normal python package
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
+---
+ requirements.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/requirements.txt b/requirements.txt
+index ef25aad..b4246a4 100644
+--- a/requirements.txt
++++ b/requirements.txt
+@@ -1,2 +1,2 @@
+-git+https://github.com/Yubico/yubikey-manager.git
++yubikey-manager
+ ./py/qr
+-- 
+2.29.2
+
diff --git a/nixpkgs/pkgs/applications/misc/yubioath-desktop/default.nix b/nixpkgs/pkgs/applications/misc/yubioath-desktop/default.nix
new file mode 100644
index 000000000000..dbd33db16f9b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yubioath-desktop/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchurl, mkDerivation
+, qmake, qtbase, qtquickcontrols2, qtgraphicaleffects
+, python3, pyotherside
+, pcsclite, yubikey-personalization
+, yubikey-manager, makeWrapper }:
+
+mkDerivation rec {
+  pname = "yubioath-desktop";
+  version = "5.0.4";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubioath-desktop/Releases/yubioath-desktop-${version}.tar.gz";
+    sha256 = "1aw88xvg6gjsfwmmlcrdcgyycn2cp7b8vxjzj14h7igcj02xh84h";
+  };
+
+  doCheck = false;
+
+  buildInputs = [ stdenv qtbase qtquickcontrols2 qtgraphicaleffects python3 ];
+
+  nativeBuildInputs = [ qmake makeWrapper python3.pkgs.wrapPython ];
+
+  patches = [
+    ./0001-replace-git-with-normal-python-package.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace deployment.pri \
+      --replace '/usr/bin' "$out/bin"
+  '';
+
+  pythonPath = [ yubikey-manager ];
+
+  # Need LD_PRELOAD for libykpers as the Nix cpython disables ctypes.cdll.LoadLibrary
+  # support that the yubicommon library uses to load libykpers
+
+  postInstall = ''
+    buildPythonPath "$out $pythonPath"
+    wrapProgram $out/bin/yubioath-desktop \
+      --prefix PYTHONPATH : "$program_PYTHONPATH" \
+      --prefix QML2_IMPORT_PATH : "${pyotherside}/${qtbase.qtQmlPrefix}" \
+      --prefix LD_PRELOAD : "${yubikey-personalization}/lib/libykpers-1.so" \
+      --prefix LD_LIBRARY_PATH : "${lib.getLib pcsclite}/lib:${yubikey-personalization}/lib"
+
+      mkdir -p $out/share/applications
+      cp resources/com.yubico.yubioath.desktop \
+        $out/share/applications/com.yubico.yubioath.desktop
+      mkdir -p $out/share/yubioath/icons
+      cp resources/icons/*.{icns,ico,png,svg} $out/share/yubioath/icons
+      substituteInPlace $out/share/applications/com.yubico.yubioath.desktop \
+        --replace 'Exec=yubioath-desktop' "Exec=$out/bin/yubioath-desktop" \
+        --replace 'Icon=yubioath' "Icon=$out/share/yubioath/icons/com.yubico.yubioath.png"
+  '';
+
+  meta = with lib; {
+    description = "Yubico Authenticator";
+    longDescription = ''
+      Application for generating Open Authentication (OATH) time-based TOTP and
+      event-based HOTP one-time password codes, with the help of a YubiKey that
+      protects the shared secrets.
+    '';
+
+    homepage = "https://developers.yubico.com/yubioath-desktop";
+    downloadPage = "https://developers.yubico.com/yubioath-desktop/Releases/";
+    changelog = "https://developers.yubico.com/yubioath-desktop/Release_Notes.html";
+
+    license = lib.licenses.bsd2;
+    maintainers = with maintainers; [ mic92 risson ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zathura/cb/default.nix b/nixpkgs/pkgs/applications/misc/zathura/cb/default.nix
new file mode 100644
index 000000000000..69ecb1cfd1b8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/cb/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchurl, meson, ninja, pkg-config, zathura_core
+, girara, gettext, libarchive }:
+
+stdenv.mkDerivation rec {
+  pname = "zathura-cb";
+  version = "0.1.8";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "1i6cf0vks501cggwvfsl6qb7mdaf3sszdymphimfvnspw810faj5";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config gettext ];
+  buildInputs = [ libarchive zathura_core girara ];
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR = "lib/zathura";
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-cb/";
+    description = "A zathura CB plugin";
+    longDescription = ''
+      The zathura-cb plugin adds comic book support to zathura.
+      '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zathura/core/default.nix b/nixpkgs/pkgs/applications/misc/zathura/core/default.nix
new file mode 100644
index 000000000000..5690dc0db104
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/core/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, meson, ninja, wrapGAppsHook, pkg-config
+, appstream-glib, desktop-file-utils, python3
+, gtk, girara, gettext, libxml2, check
+, sqlite, glib, texlive, libintl, libseccomp
+, file, librsvg
+, gtk-mac-integration
+}:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "zathura";
+  version = "0.4.7";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "1rx1fk9s556fk59lmqgvhwrmv71ashh89bx9adjq46wq5gzdn4p0";
+  };
+
+  outputs = [ "bin" "man" "dev" "out" ];
+
+  # Flag list:
+  # https://github.com/pwmt/zathura/blob/master/meson_options.txt
+  mesonFlags = [
+    "-Dsqlite=enabled"
+    "-Dmagic=enabled"
+    "-Dmanpages=enabled"
+    "-Dconvert-icon=enabled"
+    "-Dsynctex=enabled"
+    # Make sure tests are enabled for doCheck
+    "-Dtests=enabled"
+  ] ++ optional (!stdenv.isLinux) "-Dseccomp=disabled";
+
+  nativeBuildInputs = [
+    meson ninja pkg-config desktop-file-utils python3.pkgs.sphinx
+    gettext wrapGAppsHook libxml2 check appstream-glib
+  ];
+
+  buildInputs = [
+    gtk girara libintl sqlite glib file librsvg
+    texlive.bin.core
+  ] ++ optional stdenv.isLinux libseccomp
+    ++ optional stdenv.isDarwin gtk-mac-integration;
+
+  doCheck = true;
+
+  meta = {
+    homepage = "https://git.pwmt.org/pwmt/zathura";
+    description = "A core component for zathura PDF viewer";
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zathura/default.nix b/nixpkgs/pkgs/applications/misc/zathura/default.nix
new file mode 100644
index 000000000000..1548b0581b65
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/default.nix
@@ -0,0 +1,33 @@
+{ config, pkgs
+# zathura_pdf_mupdf fails to load _opj_create_decompress at runtime on Darwin (https://github.com/NixOS/nixpkgs/pull/61295#issue-277982980)
+, useMupdf ? config.zathura.useMupdf or (!pkgs.stdenv.isDarwin) }:
+
+let
+  callPackage = pkgs.newScope self;
+
+  self = rec {
+    gtk = pkgs.gtk3;
+
+    zathura_core = callPackage ./core { };
+
+    zathura_pdf_poppler = callPackage ./pdf-poppler { };
+
+    zathura_pdf_mupdf = callPackage ./pdf-mupdf { };
+
+    zathura_djvu = callPackage ./djvu { };
+
+    zathura_ps = callPackage ./ps { };
+
+    zathura_cb = callPackage ./cb { };
+
+    zathuraWrapper = callPackage ./wrapper.nix {
+      plugins = [
+        zathura_djvu
+        zathura_ps
+        zathura_cb
+        (if useMupdf then zathura_pdf_mupdf else zathura_pdf_poppler)
+      ];
+    };
+  };
+
+in self.zathuraWrapper
diff --git a/nixpkgs/pkgs/applications/misc/zathura/djvu/default.nix b/nixpkgs/pkgs/applications/misc/zathura/djvu/default.nix
new file mode 100644
index 000000000000..f0fe09486324
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/djvu/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, meson, ninja, pkg-config, gtk, zathura_core, girara, djvulibre, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "zathura-djvu";
+  version = "0.2.9";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "0062n236414db7q7pnn3ccg5111ghxj3407pn9ri08skxskgirln";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [ djvulibre gettext zathura_core gtk girara ];
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR = "lib/zathura";
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-djvu/";
+    description = "A zathura DJVU plugin";
+    longDescription = ''
+      The zathura-djvu plugin adds DjVu support to zathura by using the
+      djvulibre library.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/zathura/pdf-mupdf/default.nix b/nixpkgs/pkgs/applications/misc/zathura/pdf-mupdf/default.nix
new file mode 100644
index 000000000000..d787705be159
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/pdf-mupdf/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, lib, meson, ninja, fetchurl, fetchpatch
+, cairo
+, girara
+, gtk-mac-integration
+, gumbo
+, jbig2dec
+, libjpeg
+, mupdf
+, openjpeg_2
+, pkg-config
+, zathura_core
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.3.6";
+  pname = "zathura-pdf-mupdf";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "1r3v37k9fl2rxipvacgxr36llywvy7n20a25h3ajlyk70697sa66";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+
+  buildInputs = [
+    cairo
+    girara
+    gumbo
+    jbig2dec
+    libjpeg
+    mupdf
+    openjpeg_2
+    zathura_core
+  ] ++ lib.optional stdenv.isDarwin gtk-mac-integration;
+
+  mesonFlags = [
+    "-Dlink-external=true"
+  ];
+
+  # avoid: undefined symbol: gumbo_destroy_output
+  NIX_LDFLAGS = [ "-lgumbo" ];
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR= "lib/zathura";
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-pdf-mupdf/";
+    description = "A zathura PDF plugin (mupdf)";
+    longDescription = ''
+      The zathura-pdf-mupdf plugin adds PDF support to zathura by
+      using the mupdf rendering library.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zathura/pdf-poppler/default.nix b/nixpkgs/pkgs/applications/misc/zathura/pdf-poppler/default.nix
new file mode 100644
index 000000000000..b76e72a6970c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/pdf-poppler/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchurl, meson, ninja, pkg-config, zathura_core, girara, poppler }:
+
+stdenv.mkDerivation rec {
+  pname = "zathura-pdf-poppler";
+  version = "0.3.0";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "1vfl4vkyy3rf39r1sqaa7y8113bgkh2bkfq3nn2inis9mrykmk6m";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config zathura_core ];
+  buildInputs = [ poppler girara ];
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR = "lib/zathura";
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-pdf-poppler/";
+    description = "A zathura PDF plugin (poppler)";
+    longDescription = ''
+      The zathura-pdf-poppler plugin adds PDF support to zathura by
+      using the poppler rendering library.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zathura/ps/default.nix b/nixpkgs/pkgs/applications/misc/zathura/ps/default.nix
new file mode 100644
index 000000000000..ee63a9df53bd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/ps/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchurl, meson, ninja, pkg-config, zathura_core, girara, libspectre, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "zathura-ps";
+  version = "0.2.6";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "0wygq89nyjrjnsq7vbpidqdsirjm6iq4w2rijzwpk2f83ys8bc3y";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config gettext ];
+  buildInputs = [ libspectre zathura_core girara ];
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR = "lib/zathura";
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-ps/";
+    description = "A zathura PS plugin";
+    longDescription = ''
+      The zathura-ps plugin adds PS support to zathura by using the
+      libspectre library.
+      '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cstrahan ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/zathura/wrapper.nix b/nixpkgs/pkgs/applications/misc/zathura/wrapper.nix
new file mode 100644
index 000000000000..60e3bb9fd535
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/wrapper.nix
@@ -0,0 +1,38 @@
+{ symlinkJoin, lib, makeWrapper, zathura_core, file, plugins ? [] }:
+symlinkJoin {
+  name = "zathura-with-plugins-${zathura_core.version}";
+
+  paths = with zathura_core; [ man dev out ] ++ plugins;
+
+
+  buildInputs = [ makeWrapper ];
+
+  postBuild = let
+    fishCompletion = "share/fish/vendor_completions.d/zathura.fish";
+  in ''
+    makeWrapper ${zathura_core.bin}/bin/zathura $out/bin/zathura \
+      --prefix PATH ":" "${lib.makeBinPath [ file ]}" \
+      --add-flags --plugins-dir="$out/lib/zathura"
+
+    # zathura fish completion references the zathura_core derivation to
+    # check for supported plugins which live in the wrapper derivation,
+    # so we need to fix the path to reference $out instead.
+    rm "$out/${fishCompletion}"
+    substitute "${zathura_core.out}/${fishCompletion}" "$out/${fishCompletion}" \
+      --replace "${zathura_core.out}" "$out"
+  '';
+
+  meta = with lib; {
+    homepage = "https://git.pwmt.org/pwmt/zathura/";
+    description = "A highly customizable and functional PDF viewer";
+    longDescription = ''
+      Zathura is a highly customizable and functional PDF viewer based on the
+      poppler rendering library and the GTK toolkit. The idea behind zathura
+      is an application that provides a minimalistic and space saving interface
+      as well as an easy usage that mainly focuses on keyboard interaction.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ smironov globin TethysSvensson ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zettlr/default.nix b/nixpkgs/pkgs/applications/misc/zettlr/default.nix
new file mode 100644
index 000000000000..3d762d9ab2a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zettlr/default.nix
@@ -0,0 +1,38 @@
+{ appimageTools, lib, fetchurl, gtk3, gsettings-desktop-schemas}:
+
+# Based on https://gist.github.com/msteen/96cb7df66a359b827497c5269ccbbf94 and joplin-desktop nixpkgs.
+let
+  pname = "zettlr";
+  version = "1.7.5";
+  name = "${pname}-${version}";
+  src = fetchurl {
+    url = "https://github.com/Zettlr/Zettlr/releases/download/v${version}/Zettlr-${version}-x86_64.appimage";
+    sha256 = "040lx01ywdpla34d4abkmh51kchr11s17la6fk6yq77y8zb87xzi";
+  };
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+in appimageTools.wrapType2 rec {
+  inherit name src;
+
+  profile = ''
+    export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS
+  '';
+
+  multiPkgs = null; # no 32bit needed
+  extraPkgs = appimageTools.defaultFhsEnvArgs.multiPkgs;
+  extraInstallCommands = ''
+    mv $out/bin/{${name},${pname}}
+    install -m 444 -D ${appimageContents}/zettlr.desktop $out/share/applications/zettlr.desktop
+    install -m 444 -D ${appimageContents}/zettlr.png $out/share/icons/hicolor/512x512/apps/zettlr.png
+    substituteInPlace $out/share/applications/zettlr.desktop --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "A markdown editor for writing academic texts and taking notes";
+    homepage = "https://www.zettlr.com";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ tfmoraes ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zk-shell/default.nix b/nixpkgs/pkgs/applications/misc/zk-shell/default.nix
new file mode 100644
index 000000000000..5e27f9d45b6a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zk-shell/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  version = "1.0.0";
+  name = "zk-shell-" + version;
+
+  src = fetchFromGitHub {
+    owner = "rgs1";
+    repo = "zk_shell";
+    rev = "v${version}";
+    sha256 = "0zisvvlclsf4sdh7dpqcl1149xbxw6pi1aqcwjbqblgf8m4nm0c7";
+  };
+
+  propagatedBuildInputs = (with pythonPackages; [
+    ansi kazoo nose six tabulate twitter
+  ]);
+
+  #requires a running zookeeper, don't know how to fix that for the moment
+  doCheck = false;
+
+  meta = {
+    description = "A powerful & scriptable shell for Apache ZooKeeper";
+    homepage = "https://github.com/rgs1/zk_shell";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.mahe ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zktree/default.nix b/nixpkgs/pkgs/applications/misc/zktree/default.nix
new file mode 100644
index 000000000000..fe7b42dcc94d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zktree/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zktree";
+  version = "0.0.1";
+
+  src = fetchFromGitHub {
+    owner = "alirezameskin";
+    repo = "zktree";
+    rev = version;
+    sha256 = "11w86k1w5zryiq6bqr98pjhffd3l76377yz53qx0n76vc5374fk9";
+  };
+
+  cargoSha256 = "1d35jrxvhf7m04s1kh0yrfhy9j9i6qzwbw2mwapgsrcsr5vhxasn";
+
+  meta = with lib; {
+    description = "A small tool to display Znodes in Zookeeper in tree structure.";
+    homepage = "https://github.com/alirezameskin/zktree";
+    license = licenses.unlicense;
+    maintainers = with lib.maintainers; [ alirezameskin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zola/default.nix b/nixpkgs/pkgs/applications/misc/zola/default.nix
new file mode 100644
index 000000000000..3f704e8dd854
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zola/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, cmake, pkg-config, openssl, oniguruma, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zola";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "getzola";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-yTvFQWmNxoB+CNZLHGmzJq7mKuOUxUqV4g8PWlOlRbM=";
+  };
+
+  cargoSha256 = "sha256:19vijhcs1i02jhz68acil7psv3pcn0jzi1i4y2l05i4m3ayxivjf";
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ openssl oniguruma ]
+    ++ lib.optional stdenv.isDarwin CoreServices;
+
+  RUSTONIG_SYSTEM_LIBONIG = true;
+
+  postInstall = ''
+    install -D -m 444 completions/zola.bash \
+      -t $out/share/bash-completion/completions
+    install -D -m 444 completions/_zola \
+      -t $out/share/zsh/site-functions
+    install -D -m 444 completions/zola.fish \
+      -t $out/share/fish/vendor_completions.d
+  '';
+
+  meta = with lib; {
+    description = "A fast static site generator with everything built-in";
+    homepage = "https://www.getzola.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dywedir _0x4A6F ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zscroll/default.nix b/nixpkgs/pkgs/applications/misc/zscroll/default.nix
new file mode 100644
index 000000000000..748bc21ee35f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zscroll/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, python3, python3Packages, fetchFromGitHub }:
+
+let version = "1.0"; in
+
+python3Packages.buildPythonApplication {
+  name = "zscroll-${version}";
+  # don't prefix with python version
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "noctuid";
+    repo = "zscroll";
+    rev = "v${version}";
+    sha256 = "0rf9m1czy19hzpcp8dq9c5zawk0nhwfzzjxlhk9r2n06lhb81ig5";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = [ python3 ];
+
+  meta = with lib; {
+    description = "A text scroller for use with panels and shells";
+    homepage = "https://github.com/noctuid/zscroll";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+  };
+}