about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/games')
-rw-r--r--nixpkgs/pkgs/games/0ad/data.nix26
-rw-r--r--nixpkgs/pkgs/games/0ad/default.nix14
-rw-r--r--nixpkgs/pkgs/games/0ad/game.nix112
-rw-r--r--nixpkgs/pkgs/games/0ad/rootdir_env.patch39
-rw-r--r--nixpkgs/pkgs/games/0ad/spidermonkey-cargo-toml.patch15
-rw-r--r--nixpkgs/pkgs/games/0ad/wrapper.nix24
-rw-r--r--nixpkgs/pkgs/games/0verkill/default.nix42
-rw-r--r--nixpkgs/pkgs/games/1oom/default.nix32
-rw-r--r--nixpkgs/pkgs/games/2048-cli/default.nix62
-rw-r--r--nixpkgs/pkgs/games/2048-in-terminal/default.nix30
-rw-r--r--nixpkgs/pkgs/games/20kly/default.nix46
-rw-r--r--nixpkgs/pkgs/games/7kaa/default.nix76
-rw-r--r--nixpkgs/pkgs/games/90secondportraits/default.nix52
-rw-r--r--nixpkgs/pkgs/games/BeatSaberModManager/default.nix77
-rw-r--r--nixpkgs/pkgs/games/BeatSaberModManager/deps.nix99
-rw-r--r--nixpkgs/pkgs/games/aaaaxy/default.nix96
-rw-r--r--nixpkgs/pkgs/games/abbaye-des-morts/default.nix35
-rw-r--r--nixpkgs/pkgs/games/abuse/abuse.sh18
-rw-r--r--nixpkgs/pkgs/games/abuse/default.nix54
-rw-r--r--nixpkgs/pkgs/games/ace-of-penguins/default.nix78
-rw-r--r--nixpkgs/pkgs/games/ace-of-penguins/fixup-miscompilations.patch80
-rw-r--r--nixpkgs/pkgs/games/adom/default.nix60
-rw-r--r--nixpkgs/pkgs/games/airshipper/Cargo.lock5355
-rw-r--r--nixpkgs/pkgs/games/airshipper/default.nix121
-rw-r--r--nixpkgs/pkgs/games/airstrike/default.nix36
-rw-r--r--nixpkgs/pkgs/games/alephone/apotheosis-x/default.nix20
-rw-r--r--nixpkgs/pkgs/games/alephone/default.nix102
-rw-r--r--nixpkgs/pkgs/games/alephone/durandal/default.nix25
-rw-r--r--nixpkgs/pkgs/games/alephone/eternal/default.nix21
-rw-r--r--nixpkgs/pkgs/games/alephone/evil/default.nix18
-rw-r--r--nixpkgs/pkgs/games/alephone/infinity/default.nix25
-rw-r--r--nixpkgs/pkgs/games/alephone/marathon/default.nix25
-rw-r--r--nixpkgs/pkgs/games/alephone/pathways-into-darkness/default.nix19
-rw-r--r--nixpkgs/pkgs/games/alephone/pheonix/default.nix18
-rw-r--r--nixpkgs/pkgs/games/alephone/red/default.nix18
-rw-r--r--nixpkgs/pkgs/games/alephone/rubicon-x/default.nix23
-rw-r--r--nixpkgs/pkgs/games/alephone/yuge/default.nix18
-rw-r--r--nixpkgs/pkgs/games/alienarena/default.nix42
-rw-r--r--nixpkgs/pkgs/games/amoeba/data.nix24
-rw-r--r--nixpkgs/pkgs/games/amoeba/default.nix45
-rw-r--r--nixpkgs/pkgs/games/amoeba/include-string-h.patch12
-rw-r--r--nixpkgs/pkgs/games/among-sus/default.nix30
-rw-r--r--nixpkgs/pkgs/games/andyetitmoves/default.nix73
-rw-r--r--nixpkgs/pkgs/games/angband/default.nix37
-rw-r--r--nixpkgs/pkgs/games/anki/Cargo.lock5078
-rw-r--r--nixpkgs/pkgs/games/anki/bin.nix93
-rw-r--r--nixpkgs/pkgs/games/anki/default.nix290
-rw-r--r--nixpkgs/pkgs/games/anki/patches/gl-fixup.patch17
-rw-r--r--nixpkgs/pkgs/games/anki/patches/no-update-check.patch13
-rw-r--r--nixpkgs/pkgs/games/anki/patches/skip-formatting-python-code.patch31
-rw-r--r--nixpkgs/pkgs/games/antsimulator/default.nix40
-rw-r--r--nixpkgs/pkgs/games/arena/default.nix75
-rw-r--r--nixpkgs/pkgs/games/armagetronad/default.nix42
-rw-r--r--nixpkgs/pkgs/games/arx-libertatis/default.nix62
-rw-r--r--nixpkgs/pkgs/games/asc/default.nix85
-rw-r--r--nixpkgs/pkgs/games/assaultcube/default.nix98
-rw-r--r--nixpkgs/pkgs/games/astromenace/default.nix40
-rw-r--r--nixpkgs/pkgs/games/atanks/default.nix23
-rw-r--r--nixpkgs/pkgs/games/atlauncher/default.nix58
-rw-r--r--nixpkgs/pkgs/games/augustus/default.nix25
-rw-r--r--nixpkgs/pkgs/games/azimuth/default.nix51
-rw-r--r--nixpkgs/pkgs/games/ballerburg/default.nix55
-rw-r--r--nixpkgs/pkgs/games/banner/default.nix27
-rw-r--r--nixpkgs/pkgs/games/bastet/default.nix45
-rw-r--r--nixpkgs/pkgs/games/black-hole-solver/default.nix30
-rw-r--r--nixpkgs/pkgs/games/blackshades/default.nix43
-rw-r--r--nixpkgs/pkgs/games/blightmud/default.nix68
-rw-r--r--nixpkgs/pkgs/games/blobby/blobby.sh10
-rw-r--r--nixpkgs/pkgs/games/blobby/default.nix37
-rw-r--r--nixpkgs/pkgs/games/blobwars/blobwars-2.00-glibc-2.38.patch11
-rw-r--r--nixpkgs/pkgs/games/blobwars/default.nix36
-rw-r--r--nixpkgs/pkgs/games/blockattack/default.nix58
-rw-r--r--nixpkgs/pkgs/games/boohu/default.nix29
-rw-r--r--nixpkgs/pkgs/games/braincurses/default.nix28
-rw-r--r--nixpkgs/pkgs/games/brogue/default.nix59
-rw-r--r--nixpkgs/pkgs/games/brutalmaze/default.nix34
-rw-r--r--nixpkgs/pkgs/games/bsdgames/default.nix69
-rw-r--r--nixpkgs/pkgs/games/btanks/default.nix51
-rw-r--r--nixpkgs/pkgs/games/bugdom/default.nix69
-rw-r--r--nixpkgs/pkgs/games/bzflag/default.nix25
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/builder.nix49
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/common.nix103
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/default.nix43
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/git.nix41
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/lib.nix46
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/locale-path.patch18
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/pkgs/default.nix29
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/pkgs/tilesets/UndeadPeople/default.nix23
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/stable.nix53
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/wrapper.nix47
-rw-r--r--nixpkgs/pkgs/games/cbonsai/default.nix29
-rw-r--r--nixpkgs/pkgs/games/cdogs-sdl/default.nix64
-rw-r--r--nixpkgs/pkgs/games/cgoban/default.nix39
-rw-r--r--nixpkgs/pkgs/games/chessdb/default.nix28
-rw-r--r--nixpkgs/pkgs/games/chessx/default.nix73
-rw-r--r--nixpkgs/pkgs/games/chiaki/default.nix66
-rw-r--r--nixpkgs/pkgs/games/chiaki4deck/default.nix65
-rw-r--r--nixpkgs/pkgs/games/chromium-bsu/default.nix68
-rw-r--r--nixpkgs/pkgs/games/ckan/default.nix35
-rw-r--r--nixpkgs/pkgs/games/cl-wordle/default.nix24
-rw-r--r--nixpkgs/pkgs/games/classicube/default.nix101
-rw-r--r--nixpkgs/pkgs/games/classicube/fix-linking.patch13
-rw-r--r--nixpkgs/pkgs/games/classicube/font-location.patch16
-rw-r--r--nixpkgs/pkgs/games/clonehero/default.nix120
-rw-r--r--nixpkgs/pkgs/games/cockatrice/default.nix29
-rw-r--r--nixpkgs/pkgs/games/colobot/data.nix41
-rw-r--r--nixpkgs/pkgs/games/colobot/default.nix41
-rw-r--r--nixpkgs/pkgs/games/commandergenius/default.nix44
-rw-r--r--nixpkgs/pkgs/games/construo/default.nix35
-rw-r--r--nixpkgs/pkgs/games/corsix-th/default.nix44
-rw-r--r--nixpkgs/pkgs/games/crack-attack/crack-attack-1.1.14-gcc43.patch10
-rw-r--r--nixpkgs/pkgs/games/crack-attack/crack-attack-1.1.14-glut.patch10
-rw-r--r--nixpkgs/pkgs/games/crack-attack/default.nix36
-rw-r--r--nixpkgs/pkgs/games/crawl/crawl_purify.patch33
-rw-r--r--nixpkgs/pkgs/games/crawl/default.nix77
-rw-r--r--nixpkgs/pkgs/games/crossfire/crossfire-arch.nix27
-rw-r--r--nixpkgs/pkgs/games/crossfire/crossfire-client.nix32
-rw-r--r--nixpkgs/pkgs/games/crossfire/crossfire-maps.nix27
-rw-r--r--nixpkgs/pkgs/games/crossfire/crossfire-server.nix52
-rw-r--r--nixpkgs/pkgs/games/crossfire/default.nix28
-rw-r--r--nixpkgs/pkgs/games/crrcsim/default.nix28
-rw-r--r--nixpkgs/pkgs/games/crrcsim/gcc6.patch13
-rw-r--r--nixpkgs/pkgs/games/curseofwar/default.nix37
-rw-r--r--nixpkgs/pkgs/games/cutechess/default.nix45
-rw-r--r--nixpkgs/pkgs/games/cutemaze/default.nix52
-rw-r--r--nixpkgs/pkgs/games/cuyo/default.nix21
-rw-r--r--nixpkgs/pkgs/games/darkplaces/default.nix58
-rw-r--r--nixpkgs/pkgs/games/ddnet/default.nix112
-rw-r--r--nixpkgs/pkgs/games/deliantra/0001-abs.patch17
-rw-r--r--nixpkgs/pkgs/games/deliantra/0002-datadir.patch11
-rw-r--r--nixpkgs/pkgs/games/deliantra/arch.nix25
-rw-r--r--nixpkgs/pkgs/games/deliantra/data.nix21
-rw-r--r--nixpkgs/pkgs/games/deliantra/maps.nix25
-rw-r--r--nixpkgs/pkgs/games/deliantra/server.nix52
-rw-r--r--nixpkgs/pkgs/games/devilutionx/default.nix129
-rw-r--r--nixpkgs/pkgs/games/domination/default.nix108
-rw-r--r--nixpkgs/pkgs/games/doom-ports/chocolate-doom/default.nix49
-rw-r--r--nixpkgs/pkgs/games/doom-ports/crispy-doom/default.nix36
-rw-r--r--nixpkgs/pkgs/games/doom-ports/dhewm3/default.nix45
-rw-r--r--nixpkgs/pkgs/games/doom-ports/doomretro/default.nix74
-rw-r--r--nixpkgs/pkgs/games/doom-ports/doomrunner/default.nix60
-rw-r--r--nixpkgs/pkgs/games/doom-ports/doomseeker/default.nix28
-rw-r--r--nixpkgs/pkgs/games/doom-ports/doomseeker/fix_paths.patch40
-rw-r--r--nixpkgs/pkgs/games/doom-ports/doomseeker/qt_build_fix.patch47
-rw-r--r--nixpkgs/pkgs/games/doom-ports/enyo-launcher/default.nix25
-rw-r--r--nixpkgs/pkgs/games/doom-ports/eternity-engine/default.nix31
-rw-r--r--nixpkgs/pkgs/games/doom-ports/eureka-editor/default.nix36
-rw-r--r--nixpkgs/pkgs/games/doom-ports/gzdoom/default.nix114
-rw-r--r--nixpkgs/pkgs/games/doom-ports/odamex/default.nix54
-rw-r--r--nixpkgs/pkgs/games/doom-ports/prboom-plus/default.nix62
-rw-r--r--nixpkgs/pkgs/games/doom-ports/rbdoom-3-bfg/default.nix81
-rw-r--r--nixpkgs/pkgs/games/doom-ports/slade/default.nix68
-rw-r--r--nixpkgs/pkgs/games/doom-ports/slade/git.nix68
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zandronum/add_gitinfo.patch15
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zandronum/default.nix82
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zandronum/dont_update_gitinfo.patch19
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zandronum/fmod.nix45
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zandronum/sqlite.nix28
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zandronum/zan_configure_impurity.patch65
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zdoom/bcc-git.nix32
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zdoom/bcc-warning-fix.patch25
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zdoom/default.nix55
-rw-r--r--nixpkgs/pkgs/games/doom-ports/zdoom/zdbsp.nix37
-rw-r--r--nixpkgs/pkgs/games/duckmarines/default.nix55
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/default.nix119
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/df_permission40
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/dfhack/default.nix171
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix40
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in25
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix60
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/game.json139
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/game.nix109
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/lazy-pack.nix56
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/legends-browser/default.nix37
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/soundsense.nix37
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/themes/default.nix21
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/themes/themes.json87
-rwxr-xr-xnixpkgs/pkgs/games/dwarf-fortress/themes/update.sh8
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/twbt/default.nix85
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/unfuck.nix134
-rwxr-xr-xnixpkgs/pkgs/games/dwarf-fortress/update.sh42
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/wrapper/default.nix182
-rwxr-xr-xnixpkgs/pkgs/games/dwarf-fortress/wrapper/dfhack.in11
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in45
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in9
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/wrapper/soundSense.in10
-rw-r--r--nixpkgs/pkgs/games/dxx-rebirth/assets.nix55
-rw-r--r--nixpkgs/pkgs/games/dxx-rebirth/default.nix59
-rw-r--r--nixpkgs/pkgs/games/dxx-rebirth/full.nix30
-rw-r--r--nixpkgs/pkgs/games/easyrpg-player/default.nix135
-rw-r--r--nixpkgs/pkgs/games/eboard/default.nix30
-rw-r--r--nixpkgs/pkgs/games/eboard/eboard.patch16
-rw-r--r--nixpkgs/pkgs/games/ecwolf/default.nix51
-rw-r--r--nixpkgs/pkgs/games/eduke32/default.nix123
-rw-r--r--nixpkgs/pkgs/games/egoboo/default.nix65
-rw-r--r--nixpkgs/pkgs/games/eidolon/Cargo.lock2087
-rw-r--r--nixpkgs/pkgs/games/eidolon/default.nix38
-rw-r--r--nixpkgs/pkgs/games/empty-epsilon/default.nix85
-rw-r--r--nixpkgs/pkgs/games/endgame-singularity/default.nix59
-rw-r--r--nixpkgs/pkgs/games/endless-sky/default.nix41
-rw-r--r--nixpkgs/pkgs/games/endless-sky/fixes.patch36
-rw-r--r--nixpkgs/pkgs/games/enigma/default.nix46
-rw-r--r--nixpkgs/pkgs/games/etlegacy/default.nix141
-rw-r--r--nixpkgs/pkgs/games/everspace/default.nix118
-rw-r--r--nixpkgs/pkgs/games/extremetuxracer/default.nix40
-rw-r--r--nixpkgs/pkgs/games/exult/default.nix62
-rw-r--r--nixpkgs/pkgs/games/ezquake/default.nix41
-rw-r--r--nixpkgs/pkgs/games/factorio/default.nix277
-rw-r--r--nixpkgs/pkgs/games/factorio/mods.nix213
-rwxr-xr-xnixpkgs/pkgs/games/factorio/update.py190
-rw-r--r--nixpkgs/pkgs/games/factorio/utils.nix51
-rw-r--r--nixpkgs/pkgs/games/factorio/versions.json58
-rw-r--r--nixpkgs/pkgs/games/fairymax/default.nix49
-rw-r--r--nixpkgs/pkgs/games/fallout-ce/build.nix77
-rw-r--r--nixpkgs/pkgs/games/fallout-ce/fallout-ce.nix20
-rw-r--r--nixpkgs/pkgs/games/fallout-ce/fallout2-ce.nix23
-rw-r--r--nixpkgs/pkgs/games/ferium/default.nix39
-rw-r--r--nixpkgs/pkgs/games/fheroes2/default.nix71
-rw-r--r--nixpkgs/pkgs/games/fish-fillets-ng/default.nix41
-rw-r--r--nixpkgs/pkgs/games/fish-fillets-ng/icon.xpm39
-rw-r--r--nixpkgs/pkgs/games/flare/default.nix24
-rw-r--r--nixpkgs/pkgs/games/flare/desktop.patch15
-rw-r--r--nixpkgs/pkgs/games/flare/engine.nix27
-rw-r--r--nixpkgs/pkgs/games/flare/game.nix23
-rw-r--r--nixpkgs/pkgs/games/flightgear/default.nix79
-rw-r--r--nixpkgs/pkgs/games/fltrator/default.nix45
-rw-r--r--nixpkgs/pkgs/games/forge-mtg/default.nix65
-rw-r--r--nixpkgs/pkgs/games/forge-mtg/no-launch4j.patch466
-rw-r--r--nixpkgs/pkgs/games/freeciv/default.nix86
-rw-r--r--nixpkgs/pkgs/games/freedink/default.nix63
-rw-r--r--nixpkgs/pkgs/games/freedroid/default.nix53
-rw-r--r--nixpkgs/pkgs/games/freedroidrpg/default.nix76
-rw-r--r--nixpkgs/pkgs/games/freedroidrpg/drop-build-deps.patch15
-rw-r--r--nixpkgs/pkgs/games/freenukum/default.nix74
-rw-r--r--nixpkgs/pkgs/games/freeorion/default.nix87
-rw-r--r--nixpkgs/pkgs/games/freeorion/fix-paths.sh6
-rw-r--r--nixpkgs/pkgs/games/freeorion/fix-paths.xslt13
-rw-r--r--nixpkgs/pkgs/games/freesweep/default.nix37
-rw-r--r--nixpkgs/pkgs/games/frogatto/data.nix25
-rw-r--r--nixpkgs/pkgs/games/frogatto/default.nix43
-rw-r--r--nixpkgs/pkgs/games/frogatto/engine.nix51
-rw-r--r--nixpkgs/pkgs/games/frotz/default.nix43
-rw-r--r--nixpkgs/pkgs/games/frozen-bubble/default.nix37
-rw-r--r--nixpkgs/pkgs/games/frozen-bubble/fix-compilation.patch33
-rw-r--r--nixpkgs/pkgs/games/fsg/default.nix40
-rw-r--r--nixpkgs/pkgs/games/fsg/wxgtk-3.2.patch68
-rw-r--r--nixpkgs/pkgs/games/fteqw/default.nix90
-rw-r--r--nixpkgs/pkgs/games/fteqw/generic.nix61
-rw-r--r--nixpkgs/pkgs/games/galaxis/default.nix47
-rw-r--r--nixpkgs/pkgs/games/gambatte/fix-scons-paths.patch15
-rw-r--r--nixpkgs/pkgs/games/gambit/default.nix54
-rw-r--r--nixpkgs/pkgs/games/gamehub/default.nix67
-rw-r--r--nixpkgs/pkgs/games/gamepad-tool/default.nix46
-rw-r--r--nixpkgs/pkgs/games/garden-of-coloured-lights/default.nix33
-rw-r--r--nixpkgs/pkgs/games/gargoyle/darwin.sh54
-rw-r--r--nixpkgs/pkgs/games/gargoyle/default.nix75
-rw-r--r--nixpkgs/pkgs/games/gav/default.nix27
-rw-r--r--nixpkgs/pkgs/games/gav/gcc.patch12
-rw-r--r--nixpkgs/pkgs/games/gcompris/default.nix69
-rw-r--r--nixpkgs/pkgs/games/gcs/default.nix81
-rw-r--r--nixpkgs/pkgs/games/gemrb/default.nix89
-rw-r--r--nixpkgs/pkgs/games/gimx/conf.patch26
-rw-r--r--nixpkgs/pkgs/games/gimx/custom/Dualshock4.xml104
-rw-r--r--nixpkgs/pkgs/games/gimx/default.nix86
-rw-r--r--nixpkgs/pkgs/games/gl-117/default.nix24
-rw-r--r--nixpkgs/pkgs/games/gl-gsync-demo/default.nix38
-rw-r--r--nixpkgs/pkgs/games/globulation/default.nix69
-rw-r--r--nixpkgs/pkgs/games/globulation/header-order.patch23
-rw-r--r--nixpkgs/pkgs/games/globulation/public-buildproject.patch21
-rw-r--r--nixpkgs/pkgs/games/gltron/default.nix30
-rw-r--r--nixpkgs/pkgs/games/gltron/gentoo-prototypes.patch27
-rw-r--r--nixpkgs/pkgs/games/gmad/default.nix35
-rw-r--r--nixpkgs/pkgs/games/gnome-hexgl/default.nix43
-rw-r--r--nixpkgs/pkgs/games/gnonograms/default.nix66
-rw-r--r--nixpkgs/pkgs/games/gnubg/default.nix38
-rw-r--r--nixpkgs/pkgs/games/gnuchess/default.nix28
-rw-r--r--nixpkgs/pkgs/games/gnugo/default.nix30
-rw-r--r--nixpkgs/pkgs/games/gnujump/default.nix42
-rw-r--r--nixpkgs/pkgs/games/gnujump/gnujump.xpm64
-rw-r--r--nixpkgs/pkgs/games/gnushogi/default.nix37
-rw-r--r--nixpkgs/pkgs/games/gogdl/default.nix66
-rw-r--r--nixpkgs/pkgs/games/gogui/default.nix95
-rw-r--r--nixpkgs/pkgs/games/gotypist/default.nix26
-rw-r--r--nixpkgs/pkgs/games/grapejuice/default.nix138
-rw-r--r--nixpkgs/pkgs/games/graphwar/default.nix66
-rw-r--r--nixpkgs/pkgs/games/gscrabble/default.nix44
-rw-r--r--nixpkgs/pkgs/games/gshogi/default.nix40
-rw-r--r--nixpkgs/pkgs/games/gtetrinet/default.nix45
-rw-r--r--nixpkgs/pkgs/games/gtypist/default.nix28
-rw-r--r--nixpkgs/pkgs/games/gweled/default.nix34
-rw-r--r--nixpkgs/pkgs/games/harmonist/default.nix30
-rw-r--r--nixpkgs/pkgs/games/hase/default.nix57
-rw-r--r--nixpkgs/pkgs/games/hase/prefer-dynamic.patch13
-rw-r--r--nixpkgs/pkgs/games/hedgewars/default.nix88
-rw-r--r--nixpkgs/pkgs/games/heroic/default.nix118
-rw-r--r--nixpkgs/pkgs/games/heroic/fhsenv.nix139
-rw-r--r--nixpkgs/pkgs/games/heroic/fix-non-steam-shortcuts.patch13
-rw-r--r--nixpkgs/pkgs/games/heroic/remove-drm-support.patch24
-rw-r--r--nixpkgs/pkgs/games/hex-a-hop/default.nix45
-rw-r--r--nixpkgs/pkgs/games/hexgui/default.nix36
-rw-r--r--nixpkgs/pkgs/games/hheretic/default.nix57
-rw-r--r--nixpkgs/pkgs/games/hhexen/default.nix57
-rw-r--r--nixpkgs/pkgs/games/hikounomizu/default.nix81
-rw-r--r--nixpkgs/pkgs/games/hmcl/default.nix97
-rw-r--r--nixpkgs/pkgs/games/hyperrogue/default.nix69
-rw-r--r--nixpkgs/pkgs/games/icbm3d/default.nix24
-rw-r--r--nixpkgs/pkgs/games/infra-arcana/default.nix49
-rw-r--r--nixpkgs/pkgs/games/instead/default.nix71
-rw-r--r--nixpkgs/pkgs/games/iortcw/default.nix27
-rw-r--r--nixpkgs/pkgs/games/iortcw/sp.nix52
-rw-r--r--nixpkgs/pkgs/games/ironwail/default.nix91
-rw-r--r--nixpkgs/pkgs/games/itch/butler.nix44
-rw-r--r--nixpkgs/pkgs/games/itch/default.nix89
-rw-r--r--nixpkgs/pkgs/games/itchiodl/default.nix35
-rw-r--r--nixpkgs/pkgs/games/ivan/default.nix69
-rw-r--r--nixpkgs/pkgs/games/ja2-stracciatella/default.nix62
-rw-r--r--nixpkgs/pkgs/games/ja2-stracciatella/remove-rust-buildstep.patch73
-rw-r--r--nixpkgs/pkgs/games/jazz2/content.nix20
-rw-r--r--nixpkgs/pkgs/games/jazz2/game.nix47
-rw-r--r--nixpkgs/pkgs/games/jazz2/nocontent.patch12
-rw-r--r--nixpkgs/pkgs/games/jfsw/default.nix57
-rw-r--r--nixpkgs/pkgs/games/julius/default.nix32
-rw-r--r--nixpkgs/pkgs/games/jumpnbump/default.nix55
-rw-r--r--nixpkgs/pkgs/games/jumpy/Cargo.lock5117
-rw-r--r--nixpkgs/pkgs/games/jumpy/default.nix85
-rw-r--r--nixpkgs/pkgs/games/kabeljau/default.nix40
-rw-r--r--nixpkgs/pkgs/games/katago/default.nix115
-rw-r--r--nixpkgs/pkgs/games/katawa-shoujo/default.nix181
-rw-r--r--nixpkgs/pkgs/games/keen4/default.nix50
-rw-r--r--nixpkgs/pkgs/games/keeperrl/default.nix91
-rw-r--r--nixpkgs/pkgs/games/klavaro/default.nix57
-rw-r--r--nixpkgs/pkgs/games/kobodeluxe/default.nix25
-rw-r--r--nixpkgs/pkgs/games/kobodeluxe/glibc29.patch83
-rw-r--r--nixpkgs/pkgs/games/koboredux/default.nix94
-rw-r--r--nixpkgs/pkgs/games/koules/default.nix77
-rw-r--r--nixpkgs/pkgs/games/ldmud/default.nix102
-rw-r--r--nixpkgs/pkgs/games/leela-zero/default.nix37
-rw-r--r--nixpkgs/pkgs/games/left4gore/default.nix48
-rw-r--r--nixpkgs/pkgs/games/legendary-gl/default.nix41
-rw-r--r--nixpkgs/pkgs/games/lgames/barrage/default.nix32
-rw-r--r--nixpkgs/pkgs/games/lgames/lbreakout2/default.nix48
-rw-r--r--nixpkgs/pkgs/games/lgames/lbreakouthd/default.nix43
-rw-r--r--nixpkgs/pkgs/games/lgames/lpairs2/default.nix41
-rw-r--r--nixpkgs/pkgs/games/lgames/ltris/default.nix39
-rw-r--r--nixpkgs/pkgs/games/lgogdownloader/default.nix66
-rw-r--r--nixpkgs/pkgs/games/liberal-crime-squad/default.nix30
-rw-r--r--nixpkgs/pkgs/games/liberation-circuit/default.nix42
-rw-r--r--nixpkgs/pkgs/games/libremines/default.nix41
-rw-r--r--nixpkgs/pkgs/games/lincity/default.nix42
-rw-r--r--nixpkgs/pkgs/games/lincity/ng.nix84
-rw-r--r--nixpkgs/pkgs/games/linthesia/default.nix55
-rw-r--r--nixpkgs/pkgs/games/liquidwar/5.nix31
-rw-r--r--nixpkgs/pkgs/games/liquidwar/default.nix53
-rw-r--r--nixpkgs/pkgs/games/lugaru/default.nix31
-rw-r--r--nixpkgs/pkgs/games/lunar-client/default.nix40
-rw-r--r--nixpkgs/pkgs/games/lzwolf/default.nix62
-rw-r--r--nixpkgs/pkgs/games/macopix/default.nix35
-rw-r--r--nixpkgs/pkgs/games/maelstrom/default.nix39
-rw-r--r--nixpkgs/pkgs/games/maelstrom/fix-compilation.patch42
-rw-r--r--nixpkgs/pkgs/games/manaplus/default.nix33
-rw-r--r--nixpkgs/pkgs/games/maptool/default.nix119
-rw-r--r--nixpkgs/pkgs/games/mar1d/default.nix46
-rw-r--r--nixpkgs/pkgs/games/marble-marcher-ce/default.nix68
-rw-r--r--nixpkgs/pkgs/games/mari0/default.nix58
-rw-r--r--nixpkgs/pkgs/games/mars/default.nix34
-rw-r--r--nixpkgs/pkgs/games/mchprs/Cargo.lock3052
-rw-r--r--nixpkgs/pkgs/games/mchprs/default.nix51
-rw-r--r--nixpkgs/pkgs/games/megaglest/default.nix88
-rw-r--r--nixpkgs/pkgs/games/meritous/default.nix40
-rw-r--r--nixpkgs/pkgs/games/methane/default.nix70
-rw-r--r--nixpkgs/pkgs/games/mindustry/0001-fix-include-path-for-SDL2-on-linux.patch33
-rw-r--r--nixpkgs/pkgs/games/mindustry/default.nix251
-rw-r--r--nixpkgs/pkgs/games/minecraft-servers/default.nix24
-rw-r--r--nixpkgs/pkgs/games/minecraft-servers/derivation.nix37
-rwxr-xr-xnixpkgs/pkgs/games/minecraft-servers/update.py159
-rw-r--r--nixpkgs/pkgs/games/minecraft-servers/versions.json116
-rw-r--r--nixpkgs/pkgs/games/minecraft/default.nix160
-rwxr-xr-xnixpkgs/pkgs/games/minecraft/update.sh7
-rw-r--r--nixpkgs/pkgs/games/minesweep-rs/default.nix27
-rw-r--r--nixpkgs/pkgs/games/minetest/default.nix143
-rw-r--r--nixpkgs/pkgs/games/mnemosyne/default.nix81
-rw-r--r--nixpkgs/pkgs/games/moon-buggy/default.nix23
-rw-r--r--nixpkgs/pkgs/games/mrrescue/default.nix58
-rw-r--r--nixpkgs/pkgs/games/mudlet/default.nix134
-rw-r--r--nixpkgs/pkgs/games/n2048/default.nix26
-rw-r--r--nixpkgs/pkgs/games/naev/default.nix83
-rw-r--r--nixpkgs/pkgs/games/nanosaur/default.nix47
-rw-r--r--nixpkgs/pkgs/games/nanosaur2/default.nix47
-rw-r--r--nixpkgs/pkgs/games/nethack/default.nix154
-rw-r--r--nixpkgs/pkgs/games/netris/default.nix32
-rw-r--r--nixpkgs/pkgs/games/neverball/default.nix51
-rw-r--r--nixpkgs/pkgs/games/newtonwars/default.nix40
-rw-r--r--nixpkgs/pkgs/games/nexuiz/default.nix76
-rw-r--r--nixpkgs/pkgs/games/nile/default.nix84
-rw-r--r--nixpkgs/pkgs/games/ninvaders/default.nix24
-rw-r--r--nixpkgs/pkgs/games/njam/default.nix28
-rw-r--r--nixpkgs/pkgs/games/njam/logfile.patch22
-rw-r--r--nixpkgs/pkgs/games/npush/default.nix49
-rw-r--r--nixpkgs/pkgs/games/npush/run.nix31
-rw-r--r--nixpkgs/pkgs/games/nsnake/default.nix24
-rw-r--r--nixpkgs/pkgs/games/nudoku/default.nix41
-rw-r--r--nixpkgs/pkgs/games/nxengine-evo/default.nix68
-rw-r--r--nixpkgs/pkgs/games/oh-my-git/default.nix134
-rw-r--r--nixpkgs/pkgs/games/oilrush/default.nix77
-rw-r--r--nixpkgs/pkgs/games/onscripter-en/default.nix37
-rw-r--r--nixpkgs/pkgs/games/openarena/Makefile.local12
-rw-r--r--nixpkgs/pkgs/games/openarena/default.nix113
-rw-r--r--nixpkgs/pkgs/games/openclonk/default.nix46
-rw-r--r--nixpkgs/pkgs/games/opendune/default.nix46
-rw-r--r--nixpkgs/pkgs/games/opendungeons/cmakepaths.patch20
-rw-r--r--nixpkgs/pkgs/games/opendungeons/default.nix71
-rw-r--r--nixpkgs/pkgs/games/opendungeons/fix_link_date_time.patch13
-rw-r--r--nixpkgs/pkgs/games/openjk/default.nix89
-rw-r--r--nixpkgs/pkgs/games/openlierox/default.nix42
-rw-r--r--nixpkgs/pkgs/games/openloco/default.nix57
-rw-r--r--nixpkgs/pkgs/games/openmw/default.nix113
-rw-r--r--nixpkgs/pkgs/games/openmw/tes3mp.nix153
-rw-r--r--nixpkgs/pkgs/games/openmw/tes3mp.patch13
-rw-r--r--nixpkgs/pkgs/games/openra/build-engine.nix82
-rw-r--r--nixpkgs/pkgs/games/openra/default.nix12
-rw-r--r--nixpkgs/pkgs/games/openra/engines/devtest/default.nix8
-rw-r--r--nixpkgs/pkgs/games/openra/engines/devtest/deps.nix113
-rw-r--r--nixpkgs/pkgs/games/openra/engines/release/default.nix8
-rw-r--r--nixpkgs/pkgs/games/openra/engines/release/deps.nix114
-rw-r--r--nixpkgs/pkgs/games/openra_2019/common.nix69
-rw-r--r--nixpkgs/pkgs/games/openra_2019/default.nix74
-rw-r--r--nixpkgs/pkgs/games/openra_2019/engine.nix57
-rw-r--r--nixpkgs/pkgs/games/openra_2019/engines.nix41
-rw-r--r--nixpkgs/pkgs/games/openra_2019/mkdirp.sh4
-rw-r--r--nixpkgs/pkgs/games/openra_2019/mod-launch-game.sh25
-rwxr-xr-xnixpkgs/pkgs/games/openra_2019/mod-update.sh160
-rw-r--r--nixpkgs/pkgs/games/openra_2019/mod.nix103
-rw-r--r--nixpkgs/pkgs/games/openra_2019/mods.nix345
-rw-r--r--nixpkgs/pkgs/games/openra_2019/openra-mod.desktop11
-rw-r--r--nixpkgs/pkgs/games/openra_2019/packages.nix60
-rw-r--r--nixpkgs/pkgs/games/openrct2/default.nix154
-rw-r--r--nixpkgs/pkgs/games/openrw/default.nix53
-rw-r--r--nixpkgs/pkgs/games/opensoldat/default.nix91
-rw-r--r--nixpkgs/pkgs/games/openspades/default.nix69
-rw-r--r--nixpkgs/pkgs/games/opensupaplex/default.nix89
-rw-r--r--nixpkgs/pkgs/games/openttd/default.nix99
-rw-r--r--nixpkgs/pkgs/games/openttd/grfcodec.nix28
-rw-r--r--nixpkgs/pkgs/games/openttd/jgrpp.nix21
-rw-r--r--nixpkgs/pkgs/games/openttd/nml.nix29
-rw-r--r--nixpkgs/pkgs/games/opentyrian/default.nix44
-rw-r--r--nixpkgs/pkgs/games/openxcom/default.nix54
-rw-r--r--nixpkgs/pkgs/games/openxray/default.nix68
-rw-r--r--nixpkgs/pkgs/games/orthorobot/default.nix74
-rw-r--r--nixpkgs/pkgs/games/osu-lazer/bin.nix83
-rw-r--r--nixpkgs/pkgs/games/osu-lazer/default.nix92
-rw-r--r--nixpkgs/pkgs/games/osu-lazer/deps.nix324
-rw-r--r--nixpkgs/pkgs/games/osu-lazer/osu.runtimeconfig.json9
-rwxr-xr-xnixpkgs/pkgs/games/osu-lazer/update-bin.sh40
-rwxr-xr-xnixpkgs/pkgs/games/osu-lazer/update.sh19
-rw-r--r--nixpkgs/pkgs/games/otto-matic/default.nix44
-rw-r--r--nixpkgs/pkgs/games/pacvim/default.nix32
-rw-r--r--nixpkgs/pkgs/games/papermc/default.nix50
-rw-r--r--nixpkgs/pkgs/games/path-of-building/default.nix72
-rw-r--r--nixpkgs/pkgs/games/pegasus-frontend/default.nix51
-rw-r--r--nixpkgs/pkgs/games/pentobi/default.nix38
-rw-r--r--nixpkgs/pkgs/games/performous/default.nix86
-rw-r--r--nixpkgs/pkgs/games/performous/performous-cmake.patch17
-rw-r--r--nixpkgs/pkgs/games/performous/performous-fftw.patch15
-rw-r--r--nixpkgs/pkgs/games/pinball/default.nix41
-rw-r--r--nixpkgs/pkgs/games/pingus/default.nix22
-rw-r--r--nixpkgs/pkgs/games/pioneer/default.nix69
-rw-r--r--nixpkgs/pkgs/games/pioneers/default.nix30
-rw-r--r--nixpkgs/pkgs/games/planetaryannihilation/default.nix42
-rw-r--r--nixpkgs/pkgs/games/pokerth/default.nix74
-rw-r--r--nixpkgs/pkgs/games/pokete/default.nix56
-rw-r--r--nixpkgs/pkgs/games/pong3d/default.nix24
-rw-r--r--nixpkgs/pkgs/games/portmod/default.nix127
-rw-r--r--nixpkgs/pkgs/games/powermanga/default.nix59
-rw-r--r--nixpkgs/pkgs/games/principia/default.nix98
-rw-r--r--nixpkgs/pkgs/games/prismlauncher/0001-launcher-translations-explicitly-convert-QVector-ite.patch36
-rw-r--r--nixpkgs/pkgs/games/prismlauncher/default.nix116
-rw-r--r--nixpkgs/pkgs/games/prismlauncher/wrapper.nix95
-rw-r--r--nixpkgs/pkgs/games/pro-office-calculator/default.nix24
-rw-r--r--nixpkgs/pkgs/games/purpur/default.nix43
-rw-r--r--nixpkgs/pkgs/games/pysolfc/default.nix67
-rw-r--r--nixpkgs/pkgs/games/pysolfc/pysolfc-datadir.patch19
-rw-r--r--nixpkgs/pkgs/games/qgo/default.nix46
-rw-r--r--nixpkgs/pkgs/games/qgo/fix-paths.patch50
-rw-r--r--nixpkgs/pkgs/games/qqwing/default.nix36
-rw-r--r--nixpkgs/pkgs/games/qtads/default.nix27
-rw-r--r--nixpkgs/pkgs/games/quake2/yquake2/default.nix90
-rw-r--r--nixpkgs/pkgs/games/quake2/yquake2/games.nix55
-rw-r--r--nixpkgs/pkgs/games/quake2/yquake2/wrapper.nix31
-rw-r--r--nixpkgs/pkgs/games/quake3/content/demo.nix29
-rw-r--r--nixpkgs/pkgs/games/quake3/content/hires.nix26
-rw-r--r--nixpkgs/pkgs/games/quake3/content/pointrelease.nix29
-rw-r--r--nixpkgs/pkgs/games/quake3/ioquake/Makefile.local6
-rw-r--r--nixpkgs/pkgs/games/quake3/ioquake/default.nix90
-rw-r--r--nixpkgs/pkgs/games/quake3/quake3e/default.nix54
-rw-r--r--nixpkgs/pkgs/games/quake3/wrapper/default.nix34
-rw-r--r--nixpkgs/pkgs/games/quakespasm/default.nix105
-rw-r--r--nixpkgs/pkgs/games/quakespasm/quakespasm-darwin-makefile-improvements.patch111
-rw-r--r--nixpkgs/pkgs/games/quakespasm/vulkan.nix61
-rw-r--r--nixpkgs/pkgs/games/quantumminigolf/default.nix40
-rw-r--r--nixpkgs/pkgs/games/qzdl/default.nix65
-rw-r--r--nixpkgs/pkgs/games/qzdl/non-bundled-inih.patch36
-rw-r--r--nixpkgs/pkgs/games/r2mod_cli/default.nix38
-rw-r--r--nixpkgs/pkgs/games/r2modman/default.nix118
-rw-r--r--nixpkgs/pkgs/games/r2modman/steam-launch-fix.patch21
-rw-r--r--nixpkgs/pkgs/games/racer/default.nix32
-rw-r--r--nixpkgs/pkgs/games/racer/mkdir.patch13
-rw-r--r--nixpkgs/pkgs/games/randtype/default.nix32
-rw-r--r--nixpkgs/pkgs/games/rare/default.nix64
-rw-r--r--nixpkgs/pkgs/games/rare/legendary-gl-version.patch13
-rw-r--r--nixpkgs/pkgs/games/raylib-games/default.nix57
-rw-r--r--nixpkgs/pkgs/games/redeclipse/default.nix48
-rw-r--r--nixpkgs/pkgs/games/rftg/default.nix23
-rw-r--r--nixpkgs/pkgs/games/rigsofrods-bin/default.nix69
-rw-r--r--nixpkgs/pkgs/games/riko4/default.nix65
-rw-r--r--nixpkgs/pkgs/games/rili/default.nix41
-rw-r--r--nixpkgs/pkgs/games/rili/moderinze_cpp.patch391
-rw-r--r--nixpkgs/pkgs/games/rocksndiamonds/default.nix62
-rw-r--r--nixpkgs/pkgs/games/rogue/default.nix25
-rw-r--r--nixpkgs/pkgs/games/rott/default.nix75
-rw-r--r--nixpkgs/pkgs/games/rpg-cli/default.nix25
-rw-r--r--nixpkgs/pkgs/games/rrootage/default.nix81
-rw-r--r--nixpkgs/pkgs/games/runelite/default.nix69
-rw-r--r--nixpkgs/pkgs/games/runescape-launcher/default.nix155
-rw-r--r--nixpkgs/pkgs/games/sauerbraten/default.nix78
-rw-r--r--nixpkgs/pkgs/games/scid-vs-pc/default.nix50
-rw-r--r--nixpkgs/pkgs/games/scid/default.nix55
-rw-r--r--nixpkgs/pkgs/games/scorched3d/default.nix44
-rw-r--r--nixpkgs/pkgs/games/scorched3d/file-existence.patch37
-rw-r--r--nixpkgs/pkgs/games/scrolls/default.nix45
-rw-r--r--nixpkgs/pkgs/games/scummvm/default.nix52
-rw-r--r--nixpkgs/pkgs/games/scummvm/games.nix155
-rw-r--r--nixpkgs/pkgs/games/sdlpop/default.nix72
-rw-r--r--nixpkgs/pkgs/games/sdlpop/prince.sh16
-rw-r--r--nixpkgs/pkgs/games/sfrotz/default.nix69
-rw-r--r--nixpkgs/pkgs/games/sgt-puzzles/default.nix82
-rw-r--r--nixpkgs/pkgs/games/shattered-pixel-dungeon/default.nix123
-rw-r--r--nixpkgs/pkgs/games/shattered-pixel-dungeon/disable-beryx.patch47
-rw-r--r--nixpkgs/pkgs/games/shipwright/default.nix222
-rw-r--r--nixpkgs/pkgs/games/shipwright/lus-install-paths.patch146
-rw-r--r--nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch119
-rw-r--r--nixpkgs/pkgs/games/shticker-book-unwritten/default.nix26
-rw-r--r--nixpkgs/pkgs/games/shticker-book-unwritten/unwrapped.nix18
-rw-r--r--nixpkgs/pkgs/games/sienna/default.nix50
-rw-r--r--nixpkgs/pkgs/games/sil-q/default.nix73
-rw-r--r--nixpkgs/pkgs/games/sil/default.nix84
-rw-r--r--nixpkgs/pkgs/games/simutrans/default.nix171
-rw-r--r--nixpkgs/pkgs/games/sm64ex/coop.nix41
-rw-r--r--nixpkgs/pkgs/games/sm64ex/default.nix9
-rw-r--r--nixpkgs/pkgs/games/sm64ex/generic.nix84
-rw-r--r--nixpkgs/pkgs/games/sm64ex/sm64ex.nix21
-rw-r--r--nixpkgs/pkgs/games/snake4/default.nix30
-rw-r--r--nixpkgs/pkgs/games/snekim/default.nix34
-rw-r--r--nixpkgs/pkgs/games/snipes/default.nix47
-rw-r--r--nixpkgs/pkgs/games/snis/default.nix74
-rw-r--r--nixpkgs/pkgs/games/soi/default.nix29
-rw-r--r--nixpkgs/pkgs/games/solarus/default.nix42
-rw-r--r--nixpkgs/pkgs/games/solicurses/default.nix41
-rw-r--r--nixpkgs/pkgs/games/space-cadet-pinball/default.nix70
-rw-r--r--nixpkgs/pkgs/games/space-orbit/default.nix46
-rw-r--r--nixpkgs/pkgs/games/space-station-14-launcher/default.nix40
-rw-r--r--nixpkgs/pkgs/games/space-station-14-launcher/deps.nix143
-rw-r--r--nixpkgs/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix143
-rwxr-xr-xnixpkgs/pkgs/games/space-station-14-launcher/update.sh16
-rw-r--r--nixpkgs/pkgs/games/speed-dreams/default.nix76
-rw-r--r--nixpkgs/pkgs/games/spring/default.nix92
-rw-r--r--nixpkgs/pkgs/games/spring/fix-certs.patch11
-rw-r--r--nixpkgs/pkgs/games/spring/revert_58b423e.patch16
-rw-r--r--nixpkgs/pkgs/games/spring/springlobby.nix71
-rw-r--r--nixpkgs/pkgs/games/srb2/cmake.patch61
-rw-r--r--nixpkgs/pkgs/games/srb2/default.nix118
-rw-r--r--nixpkgs/pkgs/games/srb2/thirdparty.patch12
-rw-r--r--nixpkgs/pkgs/games/srb2kart/default.nix87
-rw-r--r--nixpkgs/pkgs/games/srb2kart/wadlocation.patch61
-rw-r--r--nixpkgs/pkgs/games/stardust/default.nix33
-rw-r--r--nixpkgs/pkgs/games/starsector/default.nix88
-rw-r--r--nixpkgs/pkgs/games/steam-tui/default.nix45
-rw-r--r--nixpkgs/pkgs/games/steam/build-wrapped.sh47
-rw-r--r--nixpkgs/pkgs/games/steam/default.nix38
-rw-r--r--nixpkgs/pkgs/games/steam/fhsenv.nix320
-rw-r--r--nixpkgs/pkgs/games/steam/runtime-wrapped.nix45
-rw-r--r--nixpkgs/pkgs/games/steam/runtime.nix37
-rw-r--r--nixpkgs/pkgs/games/steam/steam.nix54
-rw-r--r--nixpkgs/pkgs/games/steam/steamcmd.nix46
-rw-r--r--nixpkgs/pkgs/games/steam/steamcmd.sh27
-rw-r--r--nixpkgs/pkgs/games/stepmania/0001-fix-build-with-ffmpeg-4.patch136
-rw-r--r--nixpkgs/pkgs/games/stepmania/default.nix52
-rw-r--r--nixpkgs/pkgs/games/stockfish/default.nix62
-rw-r--r--nixpkgs/pkgs/games/stone-kingdoms/default.nix63
-rw-r--r--nixpkgs/pkgs/games/stuntrally/default.nix79
-rw-r--r--nixpkgs/pkgs/games/super-tux-kart/default.nix152
-rw-r--r--nixpkgs/pkgs/games/supertux/default.nix71
-rw-r--r--nixpkgs/pkgs/games/system-syzygy/Cargo.lock325
-rw-r--r--nixpkgs/pkgs/games/system-syzygy/default.nix52
-rw-r--r--nixpkgs/pkgs/games/t4kcommon/default.nix39
-rw-r--r--nixpkgs/pkgs/games/taisei/0001-lto-fix.patch13
-rw-r--r--nixpkgs/pkgs/games/taisei/default.nix46
-rw-r--r--nixpkgs/pkgs/games/tcl2048/default.nix28
-rw-r--r--nixpkgs/pkgs/games/tecnoballz/default.nix69
-rw-r--r--nixpkgs/pkgs/games/teetertorture/default.nix33
-rw-r--r--nixpkgs/pkgs/games/teeworlds/default.nix90
-rw-r--r--nixpkgs/pkgs/games/teeworlds/rename-VERSION-to-VERSION.txt.patch33
-rw-r--r--nixpkgs/pkgs/games/tennix/default.nix28
-rw-r--r--nixpkgs/pkgs/games/tennix/fix_FTBFS.patch288
-rw-r--r--nixpkgs/pkgs/games/terraria-server/default.nix42
-rw-r--r--nixpkgs/pkgs/games/tes3cmd/default.nix28
-rw-r--r--nixpkgs/pkgs/games/tetrio-desktop/default.nix95
-rw-r--r--nixpkgs/pkgs/games/tetrio-desktop/tetrio-plus.nix27
-rw-r--r--nixpkgs/pkgs/games/the-butterfly-effect/default.nix39
-rw-r--r--nixpkgs/pkgs/games/the-powder-toy/default.nix49
-rw-r--r--nixpkgs/pkgs/games/theforceengine/default.nix52
-rw-r--r--nixpkgs/pkgs/games/tibia/default.nix57
-rw-r--r--nixpkgs/pkgs/games/tintin/default.nix32
-rw-r--r--nixpkgs/pkgs/games/tinyfugue/default.nix43
-rw-r--r--nixpkgs/pkgs/games/titanion/default.nix91
-rw-r--r--nixpkgs/pkgs/games/tome2/default.nix49
-rw-r--r--nixpkgs/pkgs/games/tome4/default.nix76
-rw-r--r--nixpkgs/pkgs/games/toppler/default.nix61
-rw-r--r--nixpkgs/pkgs/games/torcs/default.nix51
-rw-r--r--nixpkgs/pkgs/games/torus-trooper/default.nix104
-rw-r--r--nixpkgs/pkgs/games/tr-patcher/default.nix37
-rw-r--r--nixpkgs/pkgs/games/trackballs/default.nix24
-rw-r--r--nixpkgs/pkgs/games/trigger/default.nix54
-rw-r--r--nixpkgs/pkgs/games/tumiki-fighters/default.nix97
-rw-r--r--nixpkgs/pkgs/games/tuxpaint/default.nix58
-rw-r--r--nixpkgs/pkgs/games/tuxpaint/tuxpaint-completion.diff16
-rw-r--r--nixpkgs/pkgs/games/tuxtype/default.nix43
-rw-r--r--nixpkgs/pkgs/games/typespeed/default.nix30
-rw-r--r--nixpkgs/pkgs/games/typespeed/typespeed-config-in-home.patch148
-rw-r--r--nixpkgs/pkgs/games/uchess/default.nix32
-rw-r--r--nixpkgs/pkgs/games/ue4/cdn-deps.nix7028
-rw-r--r--nixpkgs/pkgs/games/ue4/default.nix83
-rw-r--r--nixpkgs/pkgs/games/ue4/generate-expr-from-cdn.sh37
-rw-r--r--nixpkgs/pkgs/games/ue4demos/default.nix195
-rw-r--r--nixpkgs/pkgs/games/ufoai/default.nix50
-rw-r--r--nixpkgs/pkgs/games/uhexen2/default.nix67
-rw-r--r--nixpkgs/pkgs/games/ultimatestunts/default.nix26
-rw-r--r--nixpkgs/pkgs/games/ultrastardx/default.nix86
-rw-r--r--nixpkgs/pkgs/games/umoria/default.nix78
-rw-r--r--nixpkgs/pkgs/games/unciv/default.nix60
-rw-r--r--nixpkgs/pkgs/games/unnethack/default.nix72
-rw-r--r--nixpkgs/pkgs/games/unvanquished/default.nix237
-rw-r--r--nixpkgs/pkgs/games/uqm/3dovideo.nix61
-rw-r--r--nixpkgs/pkgs/games/uqm/default.nix109
-rw-r--r--nixpkgs/pkgs/games/urbanterror/Makefile.local5
-rw-r--r--nixpkgs/pkgs/games/urbanterror/default.nix115
-rw-r--r--nixpkgs/pkgs/games/ut2004/default.nix9
-rw-r--r--nixpkgs/pkgs/games/ut2004/demo.nix40
-rw-r--r--nixpkgs/pkgs/games/ut2004/wrapper.nix46
-rw-r--r--nixpkgs/pkgs/games/vassal/default.nix56
-rw-r--r--nixpkgs/pkgs/games/vcmi/default.nix102
-rw-r--r--nixpkgs/pkgs/games/vdrift/0001-Ignore-missing-data-for-installation.patch27
-rw-r--r--nixpkgs/pkgs/games/vdrift/default.nix70
-rw-r--r--nixpkgs/pkgs/games/vectoroids/default.nix35
-rw-r--r--nixpkgs/pkgs/games/vessel/default.nix84
-rw-r--r--nixpkgs/pkgs/games/vessel/isatty.c6
-rw-r--r--nixpkgs/pkgs/games/vimgolf/Gemfile2
-rw-r--r--nixpkgs/pkgs/games/vimgolf/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/games/vimgolf/default.nix17
-rw-r--r--nixpkgs/pkgs/games/vimgolf/gemset.nix43
-rw-r--r--nixpkgs/pkgs/games/vintagestory/default.nix91
-rw-r--r--nixpkgs/pkgs/games/vitetris/default.nix33
-rw-r--r--nixpkgs/pkgs/games/vms-empire/default.nix61
-rw-r--r--nixpkgs/pkgs/games/voxelands/default.nix74
-rw-r--r--nixpkgs/pkgs/games/vvvvvv/default.nix93
-rw-r--r--nixpkgs/pkgs/games/wargus/default.nix63
-rw-r--r--nixpkgs/pkgs/games/wargus/stratagus.nix35
-rw-r--r--nixpkgs/pkgs/games/warmux/default.nix37
-rw-r--r--nixpkgs/pkgs/games/warsow/default.nix38
-rw-r--r--nixpkgs/pkgs/games/warsow/engine.nix59
-rw-r--r--nixpkgs/pkgs/games/warsow/libpath.patch28
-rw-r--r--nixpkgs/pkgs/games/warzone2100/default.nix148
-rw-r--r--nixpkgs/pkgs/games/wesnoth/default.nix51
-rw-r--r--nixpkgs/pkgs/games/widelands/default.nix102
-rw-r--r--nixpkgs/pkgs/games/wipeout-rewrite/default.nix71
-rw-r--r--nixpkgs/pkgs/games/wireworld/default.nix64
-rw-r--r--nixpkgs/pkgs/games/wolfstoneextract/default.nix29
-rw-r--r--nixpkgs/pkgs/games/worldofgoo/default.nix75
-rw-r--r--nixpkgs/pkgs/games/wyvern/cargo-lock.patch4139
-rw-r--r--nixpkgs/pkgs/games/wyvern/default.nix32
-rw-r--r--nixpkgs/pkgs/games/xbill/default.nix48
-rw-r--r--nixpkgs/pkgs/games/xboard/default.nix68
-rw-r--r--nixpkgs/pkgs/games/xbomb/default.nix23
-rw-r--r--nixpkgs/pkgs/games/xconq/default.nix61
-rw-r--r--nixpkgs/pkgs/games/xcowsay/default.nix39
-rw-r--r--nixpkgs/pkgs/games/xgalaga++/default.nix37
-rw-r--r--nixpkgs/pkgs/games/xivlauncher/default.nix80
-rw-r--r--nixpkgs/pkgs/games/xivlauncher/deps.nix191
-rw-r--r--nixpkgs/pkgs/games/xjump/darwin.patch21
-rw-r--r--nixpkgs/pkgs/games/xjump/default.nix23
-rw-r--r--nixpkgs/pkgs/games/xmage/default.nix46
-rw-r--r--nixpkgs/pkgs/games/xmoto/default.nix65
-rw-r--r--nixpkgs/pkgs/games/xonotic/default.nix193
-rw-r--r--nixpkgs/pkgs/games/xpilot/bloodspilot-client.nix25
-rw-r--r--nixpkgs/pkgs/games/xpilot/bloodspilot-server.nix27
-rw-r--r--nixpkgs/pkgs/games/xpilot/default.nix20
-rw-r--r--nixpkgs/pkgs/games/xpilot/server-gcc5.patch65
-rw-r--r--nixpkgs/pkgs/games/xskat/default.nix30
-rw-r--r--nixpkgs/pkgs/games/xsnow/default.nix26
-rw-r--r--nixpkgs/pkgs/games/xsok/default.nix46
-rw-r--r--nixpkgs/pkgs/games/xsokoban/default.nix54
-rw-r--r--nixpkgs/pkgs/games/xtris/default.nix29
-rw-r--r--nixpkgs/pkgs/games/zaz/default.nix59
-rw-r--r--nixpkgs/pkgs/games/zod/0002-add-scaling-factor-to-source.patch161
-rw-r--r--nixpkgs/pkgs/games/zod/default.nix115
-rw-r--r--nixpkgs/pkgs/games/zoom/default.nix49
705 files changed, 73438 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/games/0ad/data.nix b/nixpkgs/pkgs/games/0ad/data.nix
new file mode 100644
index 000000000000..4437a5d26995
--- /dev/null
+++ b/nixpkgs/pkgs/games/0ad/data.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, zeroad-unwrapped }:
+
+stdenv.mkDerivation rec {
+  pname = "0ad-data";
+  inherit (zeroad-unwrapped) version;
+
+  src = fetchurl {
+    url = "http://releases.wildfiregames.com/0ad-${version}-alpha-unix-data.tar.xz";
+    sha256 = "sgDkhVj4goB5EOPGhlZ7ajliSNnUGAROz94JCwV3LX0=";
+  };
+
+  installPhase = ''
+    rm binaries/data/tools/fontbuilder/fonts/*.txt
+    mkdir -p $out/share/0ad
+    cp -r binaries/data $out/share/0ad/
+  '';
+
+  meta = with lib; {
+    description = "A free, open-source game of ancient warfare -- data files";
+    homepage = "https://play0ad.com/";
+    license = licenses.cc-by-sa-30;
+    maintainers = with maintainers; [ chvp ];
+    platforms = platforms.linux;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/0ad/default.nix b/nixpkgs/pkgs/games/0ad/default.nix
new file mode 100644
index 000000000000..a97d9f4cda3a
--- /dev/null
+++ b/nixpkgs/pkgs/games/0ad/default.nix
@@ -0,0 +1,14 @@
+{ fmt, wxGTK, stdenv, newScope }:
+let
+  callPackage = newScope self;
+
+  self = {
+    zeroad-unwrapped = callPackage ./game.nix { inherit fmt wxGTK stdenv; };
+
+    zeroad-data = callPackage ./data.nix { inherit stdenv; };
+
+    zeroad = callPackage ./wrapper.nix { };
+  };
+
+in
+self
diff --git a/nixpkgs/pkgs/games/0ad/game.nix b/nixpkgs/pkgs/games/0ad/game.nix
new file mode 100644
index 000000000000..1738c26659d2
--- /dev/null
+++ b/nixpkgs/pkgs/games/0ad/game.nix
@@ -0,0 +1,112 @@
+{ stdenv, lib, fetchpatch, perl, fetchurl, python3, fmt, libidn
+, pkg-config, spidermonkey_78, boost, icu, libxml2, libpng, libsodium
+, libjpeg, zlib, curl, libogg, libvorbis, enet, miniupnpc
+, openal, libGLU, libGL, xorgproto, libX11, libXcursor, nspr, SDL2
+, gloox, nvidia-texture-tools, freetype
+, withEditor ? true, wxGTK
+}:
+
+# You can find more instructions on how to build 0ad here:
+#    https://trac.wildfiregames.com/wiki/BuildInstructions
+
+let
+  # the game requires a special version 78.6.0 of spidermonkey, otherwise
+  # we get compilation errors. We override the src attribute of spidermonkey_78
+  # in order to reuse that declartion, while giving it a different source input.
+  spidermonkey_78_6 = spidermonkey_78.overrideAttrs(old: rec {
+    version = "78.6.0";
+    src = fetchurl {
+      url = "mirror://mozilla/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.xz";
+      sha256 = "0lyg65v380j8i2lrylwz8a5ya80822l8vcnlx3dfqpd3s6zzjsay";
+    };
+    patches = (old.patches or []) ++ [
+      ./spidermonkey-cargo-toml.patch
+    ];
+  });
+in
+stdenv.mkDerivation rec {
+  pname = "0ad";
+  version = "0.0.26";
+
+  src = fetchurl {
+    url = "http://releases.wildfiregames.com/0ad-${version}-alpha-unix-build.tar.xz";
+    sha256 = "Lhxt9+MxLnfF+CeIZkz/w6eNO/YGBsAAOSdeHRPA7ks=";
+  };
+
+  nativeBuildInputs = [ python3 perl pkg-config ];
+
+  buildInputs = [
+    spidermonkey_78_6 boost icu libxml2 libpng libjpeg
+    zlib curl libogg libvorbis enet miniupnpc openal libidn
+    libGLU libGL xorgproto libX11 libXcursor nspr SDL2 gloox
+    nvidia-texture-tools libsodium fmt freetype
+  ] ++ lib.optional withEditor wxGTK;
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-I${xorgproto}/include"
+    "-I${libX11.dev}/include"
+    "-I${libXcursor.dev}/include"
+    "-I${SDL2}/include/SDL2"
+    "-I${fmt.dev}/include"
+    "-I${nvidia-texture-tools.dev}/include"
+  ];
+
+  NIX_CFLAGS_LINK = toString [
+    "-L${nvidia-texture-tools.lib}/lib/static"
+  ];
+
+  patches = [ ./rootdir_env.patch ];
+
+  configurePhase = ''
+    # Delete shipped libraries which we don't need.
+    rm -rf libraries/source/{enet,miniupnpc,nvtt,spidermonkey}
+
+    # Update Makefiles
+    pushd build/workspaces
+    ./update-workspaces.sh \
+      --with-system-nvtt \
+      --with-system-mozjs \
+      ${lib.optionalString withEditor "--enable-atlas"} \
+      --bindir="$out"/bin \
+      --libdir="$out"/lib/0ad \
+      --without-tests \
+      -j $NIX_BUILD_CORES
+    popd
+
+    # Move to the build directory.
+    pushd build/workspaces/gcc
+  '';
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    popd
+
+    # Copy executables.
+    install -Dm755 binaries/system/pyrogenesis "$out"/bin/0ad
+    ${lib.optionalString withEditor ''
+      install -Dm755 binaries/system/ActorEditor "$out"/bin/ActorEditor
+    ''}
+
+    # Copy l10n data.
+    install -Dm755 -t $out/share/0ad/data/l10n binaries/data/l10n/*
+
+    # Copy libraries.
+    install -Dm644 -t $out/lib/0ad        binaries/system/*.so
+
+    # Copy icon.
+    install -D build/resources/0ad.png     $out/share/icons/hicolor/128x128/apps/0ad.png
+    install -D build/resources/0ad.desktop $out/share/applications/0ad.desktop
+  '';
+
+  meta = with lib; {
+    description = "A free, open-source game of ancient warfare";
+    homepage = "https://play0ad.com/";
+    license = with licenses; [
+      gpl2 lgpl21 mit cc-by-sa-30
+      licenses.zlib # otherwise masked by pkgs.zlib
+    ];
+    maintainers = with maintainers; [ chvp ];
+    platforms = subtractLists platforms.i686 platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/0ad/rootdir_env.patch b/nixpkgs/pkgs/games/0ad/rootdir_env.patch
new file mode 100644
index 000000000000..95463c7e2df4
--- /dev/null
+++ b/nixpkgs/pkgs/games/0ad/rootdir_env.patch
@@ -0,0 +1,39 @@
+diff --git a/source/ps/GameSetup/Paths.cpp b/source/ps/GameSetup/Paths.cpp
+index 474364e..bf084b4 100644
+--- a/source/ps/GameSetup/Paths.cpp
++++ b/source/ps/GameSetup/Paths.cpp
+@@ -155,32 +155,8 @@ Paths::Paths(const CmdLineArgs& args)
+ 
+ /*static*/ OsPath Paths::Root(const OsPath& argv0)
+ {
+-#if OS_ANDROID
+-	return OsPath("/sdcard/0ad"); // TODO: this is kind of bogus
+-#else
+-
+-	// get full path to executable
+-	OsPath pathname = sys_ExecutablePathname();	// safe, but requires OS-specific implementation
+-	if(pathname.empty())	// failed, use argv[0] instead
+-	{
+-		errno = 0;
+-		pathname = wrealpath(argv0);
+-		if(pathname.empty())
+-			WARN_IF_ERR(StatusFromErrno());
+-	}
+-
+-	// make sure it's valid
+-	if(!FileExists(pathname))
+-	{
+-		LOGERROR("Cannot find executable (expected at '%s')", pathname.string8());
+-		WARN_IF_ERR(StatusFromErrno());
+-	}
+-
+-	for(size_t i = 0; i < 2; i++)	// remove "system/name.exe"
+-		pathname = pathname.Parent();
+-	return pathname;
+-
+-#endif
++        UNUSED2(argv0);
++        return OsPath(getenv("ZEROAD_ROOTDIR"));
+ }
+ 
+ /*static*/ OsPath Paths::RootData(const OsPath& argv0)
diff --git a/nixpkgs/pkgs/games/0ad/spidermonkey-cargo-toml.patch b/nixpkgs/pkgs/games/0ad/spidermonkey-cargo-toml.patch
new file mode 100644
index 000000000000..4cb8c3735dbd
--- /dev/null
+++ b/nixpkgs/pkgs/games/0ad/spidermonkey-cargo-toml.patch
@@ -0,0 +1,15 @@
+diff --git a/Cargo.toml b/Cargo.toml
+index 6f6199ab26..c3f92db9d8 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -68,8 +68,8 @@ panic = "abort"
+ libudev-sys = { path = "dom/webauthn/libudev-sys" }
+ packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="3541e3818fdc7c2a24f87e3459151a4ce955a67a" }
+ rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" }
+-nix = { git = "https://github.com/shravanrn/nix/", branch = "r0.13.1", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" }
+-spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3", rev = "20191ad2f370afd6d247edcb9ff9da32d3bedb9c" }
++nix = { git = "https://github.com/shravanrn/nix/", branch = "r0.13.1" }
++spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3" }
+ # failure's backtrace feature might break our builds, see bug 1608157.
+ failure = { git = "https://github.com/badboy/failure", rev = "64af847bc5fdcb6d2438bec8a6030812a80519a5" }
+ failure_derive = { git = "https://github.com/badboy/failure", rev = "64af847bc5fdcb6d2438bec8a6030812a80519a5" }
diff --git a/nixpkgs/pkgs/games/0ad/wrapper.nix b/nixpkgs/pkgs/games/0ad/wrapper.nix
new file mode 100644
index 000000000000..3511dc0bed49
--- /dev/null
+++ b/nixpkgs/pkgs/games/0ad/wrapper.nix
@@ -0,0 +1,24 @@
+{ buildEnv, makeWrapper, zeroad-unwrapped, zeroad-data }:
+
+assert zeroad-unwrapped.version == zeroad-data.version;
+
+buildEnv {
+  name = "zeroad-${zeroad-unwrapped.version}";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  paths = [ zeroad-unwrapped zeroad-data ];
+
+  pathsToLink = [ "/" "/bin" ];
+
+  postBuild = ''
+    for i in $out/bin/*; do
+      wrapProgram "$i" \
+        --set ZEROAD_ROOTDIR "$out/share/0ad"
+    done
+  '';
+
+  meta = zeroad-unwrapped.meta // {
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/0verkill/default.nix b/nixpkgs/pkgs/games/0verkill/default.nix
new file mode 100644
index 000000000000..2c09e5c1eb6f
--- /dev/null
+++ b/nixpkgs/pkgs/games/0verkill/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, gccStdenv
+, fetchFromGitHub
+, autoreconfHook
+, xorgproto
+, libX11
+, libXpm
+}:
+
+gccStdenv.mkDerivation rec {
+  pname = "0verkill";
+  version = "unstable-2011-01-13";
+
+  src = fetchFromGitHub {
+    owner = "hackndev";
+    repo = pname;
+    rev = "522f11a3e40670bbf85e0fada285141448167968";
+    sha256 = "WO7PN192HhcDl6iHIbVbH7MVMi1Tl2KyQbDa9DWRO6M=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libX11 xorgproto libXpm ];
+
+  configureFlags = [ "--with-x" ];
+
+  preAutoreconf = ''
+    autoupdate
+  '';
+
+  # The code needs an update for gcc-10:
+  #   https://github.com/hackndev/0verkill/issues/7
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+  hardeningDisable = [ "all" ]; # Someday the upstream will update the code...
+
+  meta = with lib; {
+    homepage = "https://github.com/hackndev/0verkill";
+    description = "ASCII-ART bloody 2D action deathmatch-like game";
+    license = with licenses; gpl2Only;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/1oom/default.nix b/nixpkgs/pkgs/games/1oom/default.nix
new file mode 100644
index 000000000000..54bfb4d0b321
--- /dev/null
+++ b/nixpkgs/pkgs/games/1oom/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, libsamplerate, SDL2, SDL2_mixer, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "1oom";
+  version = "1.0";
+
+  src = fetchFromGitLab {
+    owner = "KilgoreTroutMaskReplicant";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+HwSykSyAGHtITVOu4nIG87kWwVxGyFXb/NRSjhWlvs=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libsamplerate SDL2 SDL2_mixer readline ];
+
+  outputs = [ "out" "doc" ];
+
+  postInstall = ''
+    install -d $doc/share/doc/${pname}
+    install -t $doc/share/doc/${pname} \
+      HACKING NEWS PHILOSOPHY README doc/*.txt
+  '';
+
+  meta = with lib; {
+    homepage = "https://kilgoretroutmaskreplicant.gitlab.io/plain-html/";
+    description = "Master of Orion (1993) game engine recreation";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/2048-cli/default.nix b/nixpkgs/pkgs/games/2048-cli/default.nix
new file mode 100644
index 000000000000..e1eb958164ce
--- /dev/null
+++ b/nixpkgs/pkgs/games/2048-cli/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gettext
+, installShellFiles
+, ncurses
+, ui ? "terminal"
+}:
+
+assert lib.elem ui [ "terminal" "curses" ];
+stdenv.mkDerivation (finalAttrs: {
+  pname = "2048-cli";
+  version = "unstable-2019-12-10";
+
+  src = fetchFromGitHub {
+    owner = "tiehuis";
+    repo = "2048-cli";
+    rev = "67439255df7d4f70209ca628d65128cd41d33e8d";
+    hash = "sha256-U7g2wCZgR7Lp/69ktQIZZ1cScll2baCequemTl3Mc3I=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "-lcurses" "-lncurses"
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = [
+    gettext
+  ]
+  ++ (lib.optional (ui == "curses") ncurses);
+
+  dontConfigure = true;
+
+  env.NIX_CFLAGS_COMPILE = "-I${lib.getDev gettext}/share/gettext/";
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    ui
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin 2048
+    installManPage man/2048.6
+
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://github.com/tiehuis/2048-cli";
+    description = "The game 2048 for your Linux terminal";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.AndersonTorres ];
+    platforms = lib.platforms.unix;
+    mainProgram = "2048";
+  };
+})
diff --git a/nixpkgs/pkgs/games/2048-in-terminal/default.nix b/nixpkgs/pkgs/games/2048-in-terminal/default.nix
new file mode 100644
index 000000000000..2ffefb601125
--- /dev/null
+++ b/nixpkgs/pkgs/games/2048-in-terminal/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "2048-in-terminal";
+  version = "unstable-2022-06-13";
+
+  src = fetchFromGitHub {
+    owner = "alewmoose";
+    repo = "2048-in-terminal";
+    rev = "bf22f868a2e0e572f22153468585ec0226a4b8b2";
+    sha256 = "sha256-Y5ZQYWOiG3QZZsr+d7olUDGAQ1LhRG9X2hBNQDx+Ztw=";
+  };
+
+  buildInputs = [ ncurses ];
+  nativeBuildInputs = [ pkg-config ];
+
+  enableParallelBuilding = true;
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Animated console version of the 2048 game";
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/20kly/default.nix b/nixpkgs/pkgs/games/20kly/default.nix
new file mode 100644
index 000000000000..0cc61367e28e
--- /dev/null
+++ b/nixpkgs/pkgs/games/20kly/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "20kly";
+  version = "1.5.0";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "20kly";
+    repo = "20kly";
+    rev = "v${version}";
+    sha256 = "1zxsxg49a02k7zidx3kgk2maa0vv0n1f9wrl5vch07sq3ghvpphx";
+  };
+
+  patchPhase = ''
+    substituteInPlace lightyears \
+      --replace \
+        "LIGHTYEARS_DIR = \".\"" \
+        "LIGHTYEARS_DIR = \"$out/share\""
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    pygame
+  ];
+
+  buildPhase = ''
+    python -O -m compileall .
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/share"
+    cp -r data lib20k lightyears "$out/share"
+    install -Dm755 lightyears "$out/bin/lightyears"
+  '';
+
+  meta = with lib; {
+    description = "A steampunk-themed strategy game where you have to manage a steam supply network";
+    homepage = "http://jwhitham.org.uk/20kly/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/7kaa/default.nix b/nixpkgs/pkgs/games/7kaa/default.nix
new file mode 100644
index 000000000000..f9cd1a457b19
--- /dev/null
+++ b/nixpkgs/pkgs/games/7kaa/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, gccStdenv
+, autoreconfHook
+, autoconf-archive
+, pkg-config
+, fetchurl
+, fetchFromGitHub
+, openal
+, libtool
+, enet
+, SDL2
+, curl
+, gettext
+, libiconv
+}:
+
+let
+  pname = "7kaa";
+  version = "2.15.5";
+
+  musicVersion = lib.versions.majorMinor version;
+  music = stdenv.mkDerivation {
+    pname = "7kaa-music";
+    version = musicVersion;
+
+    src = fetchurl {
+      url = "https://www.7kfans.com/downloads/7kaa-music-${musicVersion}.tar.bz2";
+      hash = "sha256-sNdntuJXGaFPXzSpN0SoAi17wkr2YnW+5U38eIaVwcM=";
+    };
+
+    installPhase = ''
+      mkdir -p $out
+      cp -r * $out/
+    '';
+
+    meta.license = lib.licenses.unfree;
+  };
+in
+gccStdenv.mkDerivation rec {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "the3dfxdude";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Z6TsR6L6vwpzoKTj6xJ6HKy4DxcUBWmYBFi/a9pQBD8=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook autoconf-archive pkg-config ];
+
+  buildInputs = [ openal enet SDL2 curl gettext libiconv ];
+
+  preAutoreconf = ''
+    autoupdate
+  '';
+
+  hardeningDisable = lib.optionals (stdenv.isAarch64 && stdenv.isDarwin) [ "stackprotector" ];
+
+  postInstall = ''
+    mkdir $out/share/7kaa/MUSIC
+    cp -R ${music}/MUSIC $out/share/7kaa/
+    cp ${music}/COPYING-Music.txt $out/share/7kaa/MUSIC
+    cp ${music}/COPYING-Music.txt $out/share/doc/7kaa
+  '';
+
+  # Multiplayer is auto-disabled for non-x86 system
+
+  meta = with lib; {
+    homepage = "https://www.7kfans.com";
+    description = "GPL release of the Seven Kingdoms with multiplayer (available only on x86 platforms)";
+    license = licenses.gpl2Only;
+    platforms = platforms.x86_64 ++ platforms.aarch64;
+    maintainers = with maintainers; [ _1000101 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/90secondportraits/default.nix b/nixpkgs/pkgs/games/90secondportraits/default.nix
new file mode 100644
index 000000000000..fd6bb9239938
--- /dev/null
+++ b/nixpkgs/pkgs/games/90secondportraits/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, love, makeWrapper, makeDesktopItem, copyDesktopItems }:
+
+let
+  pname = "90secondportraits";
+
+  icon = fetchurl {
+    url = "http://tangramgames.dk/img/thumb/90secondportraits.png";
+    sha256 = "13k6cq8s7jw77j81xfa5ri41445m778q6iqbfplhwdpja03c6faw";
+  };
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "90secondportraits";
+      exec = pname;
+      icon = icon;
+      comment = "A silly speed painting game";
+      desktopName = "90 Second Portraits";
+      genericName = "90secondportraits";
+      categories = [ "Game" ];
+    })
+  ];
+
+in stdenv.mkDerivation rec {
+  inherit pname desktopItems;
+  version = "1.01b";
+
+  src = fetchurl {
+    url = "https://github.com/SimonLarsen/90-Second-Portraits/releases/download/${version}/${pname}-${version}.love";
+    sha256 = "0jj3k953r6vb02212gqcgqpb4ima87gnqgls43jmylxq2mcm33h5";
+  };
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm444 $src $out/share/games/lovegames/${pname}.love
+    makeWrapper ${love}/bin/love $out/bin/${pname} \
+      --add-flags $out/share/games/lovegames/${pname}.love
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A silly speed painting game";
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.linux;
+    license = licenses.free;
+    downloadPage = "http://tangramgames.dk/games/90secondportraits";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/BeatSaberModManager/default.nix b/nixpkgs/pkgs/games/BeatSaberModManager/default.nix
new file mode 100644
index 000000000000..a4b53810244d
--- /dev/null
+++ b/nixpkgs/pkgs/games/BeatSaberModManager/default.nix
@@ -0,0 +1,77 @@
+{
+  lib,
+  dotnet-sdk,
+  stdenv,
+  substituteAll,
+
+  buildDotnetModule,
+  fetchFromGitHub,
+
+  dotnetCorePackages,
+
+  libX11,
+  libICE,
+  libSM,
+  fontconfig,
+
+  xdg-utils,
+}:
+
+buildDotnetModule rec {
+  pname = "BeatSaberModManager";
+  version = "0.0.5";
+
+  src = fetchFromGitHub {
+    owner = "affederaffe";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-HHWC+MAwJ+AMCuBzSuR7FbW3k+wLri0B9J1DftyfNEU=";
+    fetchSubmodules = true; # It vendors BSIPA-Linux
+  };
+
+  dotnet-sdk = with dotnetCorePackages; combinePackages [
+    sdk_7_0
+    sdk_6_0
+  ];
+
+  dotnet-runtime = dotnetCorePackages.runtime_7_0;
+
+  projectFile = [ "BeatSaberModManager/BeatSaberModManager.csproj" ];
+
+  executables = [ "BeatSaberModManager" ];
+
+  nugetDeps = ./deps.nix;
+
+  runtimeDeps = [
+    libX11
+    libICE
+    libSM
+    fontconfig
+  ];
+
+  # Required for OneClick
+  makeWrapperArgs = [
+    ''--suffix PATH : "${lib.makeBinPath [ xdg-utils ]}"''
+  ];
+
+  meta = with lib; {
+    description = "Yet another mod installer for Beat Saber, heavily inspired by ModAssistant";
+    homepage = "https://github.com/affederaffe/BeatSaberModManager";
+    longDescription = ''
+      BeatSaberModManager is yet another mod installer for Beat Saber, heavily inspired by ModAssistant
+      It strives to look more visually appealing and support both Windows and Linux, while still being as feature-rich as ModAssistant.
+
+      Features
+
+      - Windows and Linux support
+      - Dependency resolution
+      - Installed mod detection
+      - Mod uninstallation
+      - Theming support
+      - OneClickâ„¢ support for BeatSaver, ModelSaber and Playlists
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ atemu ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/BeatSaberModManager/deps.nix b/nixpkgs/pkgs/games/BeatSaberModManager/deps.nix
new file mode 100644
index 000000000000..64115dd683e9
--- /dev/null
+++ b/nixpkgs/pkgs/games/BeatSaberModManager/deps.nix
@@ -0,0 +1,99 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Avalonia"; version = "11.0.999-cibuild0030643-beta"; sha256 = "0bcc3h5hxy8mfkgxn07vnnq2rn8whn2gx3d67lmlpm01r16rndyc"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia/11.0.999-cibuild0030643-beta/avalonia.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Angle.Windows.Natives"; version = "2.1.0.2023020321"; sha256 = "1az4s1g22ipak9a3xfh55z2h3rm6lpqh7svbpw6ag4ysrgsjjsjd"; })
+  (fetchNuGet { pname = "Avalonia.Controls.ColorPicker"; version = "11.0.999-cibuild0030643-beta"; sha256 = "06n0c8dyh1q4a97nm31vyr8b6jzcq8nvvligwzp4xaxdwhkphg2x"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.controls.colorpicker/11.0.999-cibuild0030643-beta/avalonia.controls.colorpicker.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Controls.DataGrid"; version = "11.0.999-cibuild0030643-beta"; sha256 = "1vfkbjy9fl24i6skn02wgr047579x4a1liiw79qwbkx7mgvw9pvn"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.controls.datagrid/11.0.999-cibuild0030643-beta/avalonia.controls.datagrid.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Desktop"; version = "11.0.999-cibuild0030643-beta"; sha256 = "0nh6hdw07hwq92n0m1sx7qxwp4ccqash5f8sivj3lflx786s9i5f"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.desktop/11.0.999-cibuild0030643-beta/avalonia.desktop.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Diagnostics"; version = "11.0.999-cibuild0030643-beta"; sha256 = "0ddcq2w54cywpzcwb9av54zkblvpnp0g7xs4dsw6s39wrxyh8spw"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.diagnostics/11.0.999-cibuild0030643-beta/avalonia.diagnostics.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "11.0.999-cibuild0030643-beta"; sha256 = "1wshqaikd1b2a91yixgsnvl8i1arhmlviavjywi67a2w1xv98das"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.freedesktop/11.0.999-cibuild0030643-beta/avalonia.freedesktop.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Native"; version = "11.0.999-cibuild0030643-beta"; sha256 = "10pp6lh5hlcfs3xrqg1rv7xkckkpnbvdvx0ndfqgpfqxyv99jdhd"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.native/11.0.999-cibuild0030643-beta/avalonia.native.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.ReactiveUI"; version = "11.0.999-cibuild0030643-beta"; sha256 = "1pl35gkpc36hydd350ch6iilyfngbg8wxw3vkx5a971761lqrgbz"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.reactiveui/11.0.999-cibuild0030643-beta/avalonia.reactiveui.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "11.0.999-cibuild0030643-beta"; sha256 = "179l5w9j2hy683fhxi25q98sfgz03l48qj8mgg1asjjpqcbybgh2"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.remote.protocol/11.0.999-cibuild0030643-beta/avalonia.remote.protocol.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Skia"; version = "11.0.999-cibuild0030643-beta"; sha256 = "0fvc83phdjxhfg3pndr7j178i2km5wjbm1xiplh4bvg6pwa2xypz"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.skia/11.0.999-cibuild0030643-beta/avalonia.skia.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Themes.Fluent"; version = "11.0.999-cibuild0030643-beta"; sha256 = "1ch7v19xpg4nkq2aqap82sd237735g5nrp06h1i0m83kks4xz6as"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.themes.fluent/11.0.999-cibuild0030643-beta/avalonia.themes.fluent.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Themes.Simple"; version = "11.0.999-cibuild0030643-beta"; sha256 = "0aify5nh31bf347k4s4d5c36mhh6yc6q4l6araq3fxb05v4pb5c0"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.themes.simple/11.0.999-cibuild0030643-beta/avalonia.themes.simple.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.Win32"; version = "11.0.999-cibuild0030643-beta"; sha256 = "1b86hlr25w8i3hdxxxb9qrbaf91d56vmiwm5ikywglk28c9x8zyq"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.win32/11.0.999-cibuild0030643-beta/avalonia.win32.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Avalonia.X11"; version = "11.0.999-cibuild0030643-beta"; sha256 = "15pcbv0hw099080s2ndi7cqm3gnyzcvva3jgp8z33g4h8qaiiyvn"; url = "https://pkgs.dev.azure.com/AvaloniaUI/aa84306f-2981-47b9-8206-edb3bed6250d/_packaging/5ebc1fbc-7d49-4641-8a57-d18c55ed6602/nuget/v3/flat2/avalonia.x11/11.0.999-cibuild0030643-beta/avalonia.x11.11.0.999-cibuild0030643-beta.nupkg"; })
+  (fetchNuGet { pname = "Devlooped.SponsorLink"; version = "0.9.6"; sha256 = "0d6sdy4312fb9g7l3q9x78vmw4ngrzf2f961778h4zqga8nc23rm"; })
+  (fetchNuGet { pname = "DynamicData"; version = "7.9.5"; sha256 = "1m9qx8g6na5ka6kd9vhg8gjmxrnkzb6v5cl5yqp1kdjsw4rcwy6x"; })
+  (fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2.3"; sha256 = "115aybicqs9ijjlcv6k6r5v0agkjm1bm1nkd0rj3jglv8s0xvmp2"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Linux"; version = "2.8.2.3"; sha256 = "1f18ahwkaginrg0vwsi6s56lvnqvvxv7pzklfs5lnknasxy1a76z"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2.3"; sha256 = "052d8frpkj4ijs6fm6xp55xbv95b1s9biqwa0w8zp3rgm88m9236"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "2.8.2.3"; sha256 = "043hv36bg5240znbm8x5la7py17m4jfzy57q3ka32f6zjld83j36"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2.3"; sha256 = "08khd2jqm8sw58ljz5srangzfm2sz3gd2q1jzc5fr80lj8rv6r74"; })
+  (fetchNuGet { pname = "MicroCom.Runtime"; version = "0.11.0"; sha256 = "0p9c3m0zk59x9dcqw077hzd2yk60myisbacvm36mnwpcjwzjkp2m"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "6.0.0"; sha256 = "15gqy2m14fdlvy1g59207h5kisznm355kbw010gy19vh47z8gpz3"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.0.0"; sha256 = "0bbl0jpqywqmzz2gagld1p2gvdfldjfjmm25hil9wj2nq1zc4di8"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.8.0"; sha256 = "12n7rvr39bzkf2maw7zplw8rwpxpxss4ich3bb2pw770rx4nyvyw"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.8.0"; sha256 = "1kmry65csvfn72zzc16vj1nfbfwam28wcmlrk3m5rzb8ydbzgylb"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "3.8.0"; sha256 = "0w0yx0lpg54iw5jazqk46h48gx43ij32gwac8iywdj6kxfxm03vw"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "3.8.0"; sha256 = "0hjgxcsj5zy27lqk0986m59n5dbplx2vjjla2lsvg4bwg8qa7bpk"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading"; version = "17.1.46"; sha256 = "0w7b17xh88rqzjjsy66gg2kfaqmg7sdmx70sharkqb7qh3pih87m"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Threading.Analyzers"; version = "17.1.46"; sha256 = "0lgx7776ivmz0gr0whyacxpnlp6w5b80mj012a28mm79r1qxpf60"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Validation"; version = "17.0.53"; sha256 = "0y34dvc5z6ash2cpp69mclb3wr52fd8khsmm61sv7lkql0pg03ki"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; })
+  (fetchNuGet { pname = "Nerdbank.Streams"; version = "2.9.112"; sha256 = "1i10xr5zm9vapfzvimim9gn2pm9vgnsnb44sq3b0162r0k572rrp"; })
+  (fetchNuGet { pname = "ReactiveUI"; version = "18.3.1"; sha256 = "1lxkc8yk9glj0w9n5vry2dnwwvh8152ad2c5bivk8aciq64zidyn"; })
+  (fetchNuGet { pname = "Serilog"; version = "2.10.0"; sha256 = "08bih205i632ywryn3zxkhb15dwgyaxbhmm1z3b5nmby9fb25k7v"; })
+  (fetchNuGet { pname = "Serilog.Sinks.File"; version = "5.0.1-dev-00947"; sha256 = "153vi3xjy65ixfr8nfs59n0bmgj0jxfyydmhjs8h3apr9f29lbh4"; })
+  (fetchNuGet { pname = "SkiaSharp"; version = "2.88.3"; sha256 = "1yq694myq2rhfp2hwwpyzcg1pzpxcp7j72wib8p9pw9dfj7008sv"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.3"; sha256 = "0dajvr60nwvnv7s6kcqgw1w97zxdpz1c5lb7kcq7r0hi0l05ck3q"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.3"; sha256 = "191ajgi6fnfqcvqvkayjsxasiz6l0bv3pps8vv9abbyc4b12qvph"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.3"; sha256 = "1w5njksq3amrrp7fqxw89nv6ar2kgc5yx092i4rxv7hrjbd1aagx"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.3"; sha256 = "03wwfbarsxjnk70qhqyd1dw65098dncqk2m0vksx92j70i7lry6q"; })
+  (fetchNuGet { pname = "Splat"; version = "14.4.1"; sha256 = "03ycyjn2ii44npi015p4rk344xnjgdzz02cf63cmhx2ab8hv6p4b"; })
+  (fetchNuGet { pname = "StrongInject"; version = "1.4.5-ci-20220524-023137"; sha256 = "1ksiv5rs22j193sxwjvdc4vhblikka9z8hhs705f4mi1r4q0x1ha"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Pipelines"; version = "6.0.3"; sha256 = "1jgdazpmwc21dd9naq3l9n5s8a1jnbwlvgkf1pnm0aji6jd4xqdz"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "7.0.0"; sha256 = "1qrmqa6hpzswlmyp3yqsbnmia9i5iz1y208xpqc1y88b1f6j1v8a"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "ThisAssembly.AssemblyInfo"; version = "1.2.9"; sha256 = "1pilnin62fb2frmybl3n0xvxn1xpr8bymbzialspl6cbw2xvag97"; })
+  (fetchNuGet { pname = "ThisAssembly.Prerequisites"; version = "1.2.9"; sha256 = "0skk9sk8lc4dn9rmykz337n5apg76if9l327q7787fabisr9rbw7"; })
+  (fetchNuGet { pname = "Tmds.DBus.Protocol"; version = "0.13.0"; sha256 = "1r5lc8x3iq795l7vnyzs3shvpqz92fldkayvkqmrfjxnqmy0w3kg"; })
+  (fetchNuGet { pname = "Tmds.DBus.SourceGenerator"; version = "0.0.2"; sha256 = "03q0fja30216npb3hd39iapr9psriz2k35lymaf4921195y40fiq"; })
+  (fetchNuGet { pname = "XamlNameReferenceGenerator"; version = "1.6.1"; sha256 = "0348gj9g5rl0pj2frx4vscj6602gfyn9ba3i1rmfcrxh9jwwa09m"; })
+]
diff --git a/nixpkgs/pkgs/games/aaaaxy/default.nix b/nixpkgs/pkgs/games/aaaaxy/default.nix
new file mode 100644
index 000000000000..c2fcc8a646c4
--- /dev/null
+++ b/nixpkgs/pkgs/games/aaaaxy/default.nix
@@ -0,0 +1,96 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, alsa-lib
+, libglvnd
+, libX11
+, libXcursor
+, libXext
+, libXi
+, libXinerama
+, libXrandr
+, libXxf86vm
+, go-licenses
+, pkg-config
+, zip
+, advancecomp
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "aaaaxy";
+  version = "1.4.50";
+
+  src = fetchFromGitHub {
+    owner = "divVerent";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-J4SCmIwGlVD8MHs13NO3JFKfH1rvh2dgVV0/8BX9IcY=";
+    fetchSubmodules = true;
+  };
+
+  vendorHash = "sha256-dugSK/5mowBfRqnzI3sZqCm69E0WtX2Tydh6Q06+vLU=";
+
+  buildInputs = [
+    alsa-lib
+    libglvnd
+    libX11 libXcursor libXext libXi libXinerama libXrandr
+    libXxf86vm
+  ];
+
+  nativeBuildInputs = [
+    go-licenses
+    pkg-config
+    zip
+    advancecomp
+  ];
+
+  outputs = [ "out" "testing_infra" ];
+
+  postPatch = ''
+    # Without patching, "go run" fails with the error message:
+    # package github.com/google/go-licenses: no Go files in /build/source/vendor/github.com/google/go-licenses
+    substituteInPlace scripts/build-licenses.sh --replace \
+      '$GO run ''${GO_FLAGS} github.com/google/go-licenses' 'go-licenses'
+
+    patchShebangs scripts/
+    substituteInPlace scripts/regression-test-demo.sh \
+      --replace 'sh scripts/run-timedemo.sh' "$testing_infra/scripts/run-timedemo.sh"
+  '';
+
+  makeFlags = [
+    "BUILDTYPE=release"
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    AAAAXY_BUILD_USE_VERSION_FILE=true make $makeFlags
+    runHook postBuild
+  '';
+
+  postInstall = ''
+    install -Dm755 'aaaaxy' -t "$out/bin/"
+    install -Dm444 'aaaaxy.svg' -t "$out/share/icons/hicolor/scalable/apps/"
+    install -Dm644 'aaaaxy.png' -t "$out/share/icons/hicolor/128x128/apps/"
+    install -Dm644 'aaaaxy.desktop' -t "$out/share/applications/"
+    install -Dm644 'io.github.divverent.aaaaxy.metainfo.xml' -t "$out/share/metainfo/"
+
+    install -Dm755 'scripts/run-timedemo.sh' -t "$testing_infra/scripts/"
+    install -Dm755 'scripts/regression-test-demo.sh' -t "$testing_infra/scripts/"
+    install -Dm644 'assets/demos/benchmark.dem' -t "$testing_infra/assets/demos/"
+  '';
+
+  passthru.tests = {
+    aaaaxy = nixosTests.aaaaxy;
+  };
+
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "A nonlinear 2D puzzle platformer taking place in impossible spaces";
+    homepage = "https://divverent.github.io/aaaaxy/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Luflosi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/abbaye-des-morts/default.nix b/nixpkgs/pkgs/games/abbaye-des-morts/default.nix
new file mode 100644
index 000000000000..3091c8feff22
--- /dev/null
+++ b/nixpkgs/pkgs/games/abbaye-des-morts/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, SDL2, SDL2_image, SDL2_mixer }:
+
+stdenv.mkDerivation rec {
+  pname = "abbaye-des-morts";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "nevat";
+    repo = "abbayedesmorts-gpl";
+    rev = "v${version}";
+    sha256 = "1pwqf7r9bqb2p3xrw9i7y8pgr1401fy3mnnqpb1qkhmdl3gqi9hb";
+  };
+
+  buildInputs = [ SDL2 SDL2_image SDL2_mixer ];
+
+  makeFlags = [ "PREFIX=$(out)" "DESTDIR=" ];
+
+  preBuild = lib.optionalString stdenv.cc.isClang
+    ''
+      substituteInPlace Makefile \
+        --replace -fpredictive-commoning ""
+    '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/applications
+  '';
+
+  meta = with lib; {
+    homepage = "https://locomalito.com/abbaye_des_morts.php";
+    description = "A retro arcade video game";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.marius851000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/abuse/abuse.sh b/nixpkgs/pkgs/games/abuse/abuse.sh
new file mode 100644
index 000000000000..de837d27181f
--- /dev/null
+++ b/nixpkgs/pkgs/games/abuse/abuse.sh
@@ -0,0 +1,18 @@
+#! @shell@
+
+if grep datadir ~/.abuse/abuserc &>/dev/null; then
+  if [ ! -d "$(grep datadir ~/.abuse/abuserc | cut -d= -f2)" ]; then
+    echo "Warning: ~/.abuse/abuserc references a datadir which is not existent." >&2
+    echo "Try removing ~/.abuse/abuserc, else abuse will most likely not run." >&2
+    echo >&2
+    # This can happen if the build hash of abuse changes and the older version
+    # is garbage-collected. The correct path of the datadir is compiled into
+    # the binary, but unfortunately abuse writes out the path into abuserc on
+    # first start. This entry may later become stale.
+  fi
+fi
+
+# The timidity bundled into SDL_mixer looks in . and in several global places
+# like /etc for its configuration file.
+cd @out@/etc
+exec @out@/bin/.abuse-bin "$@"
diff --git a/nixpkgs/pkgs/games/abuse/default.nix b/nixpkgs/pkgs/games/abuse/default.nix
new file mode 100644
index 000000000000..1e2d4f82f837
--- /dev/null
+++ b/nixpkgs/pkgs/games/abuse/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, makeDesktopItem, copyDesktopItems, SDL, SDL_mixer, freepats }:
+
+stdenv.mkDerivation rec {
+  pname   = "abuse";
+  version = "0.8";
+
+  src = fetchurl {
+    url    = "http://abuse.zoy.org/raw-attachment/wiki/download/${pname}-${version}.tar.gz";
+    sha256 = "0104db5fd2695c9518583783f7aaa7e5c0355e27c5a803840a05aef97f9d3488";
+  };
+
+  configureFlags = [
+    "--with-x"
+    "--with-assetdir=$(out)/orig"
+    # The "--enable-debug" is to work around a segfault on start, see https://bugs.archlinux.org/task/52915.
+    "--enable-debug"
+  ];
+
+  desktopItems = [ (makeDesktopItem {
+    name = "abuse";
+    exec = "abuse";
+    icon = "abuse";
+    desktopName = "Abuse";
+    comment     = "Side-scroller action game that pits you against ruthless alien killers";
+    categories  = [ "Game" "ActionGame" ];
+  }) ];
+
+  postInstall = ''
+    mkdir $out/etc
+    echo -e "dir ${freepats}\nsource ${freepats}/freepats.cfg" > $out/etc/timidity.cfg
+
+    mv $out/bin/abuse $out/bin/.abuse-bin
+    substituteAll "${./abuse.sh}" $out/bin/abuse
+    chmod +x $out/bin/abuse
+
+    install -Dm644 doc/abuse.png $out/share/pixmaps/abuse.png
+  '';
+
+  nativeBuildInputs = [ copyDesktopItems ];
+  buildInputs       = [ SDL SDL_mixer freepats ];
+
+  meta = with lib; {
+    description = "Side-scroller action game that pits you against ruthless alien killers";
+    homepage    = "http://abuse.zoy.org/";
+    license     = with licenses; [ unfree ];
+    # Most of abuse is free (public domain, GPL2+, WTFPL), however the creator
+    # of its sfx and music only gave Debian permission to redistribute the
+    # files. Our friends from Debian thought about it some more:
+    # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=648272
+    maintainers = with maintainers; [ iblech ];
+    platforms   = platforms.unix;
+    broken      = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ace-of-penguins/default.nix b/nixpkgs/pkgs/games/ace-of-penguins/default.nix
new file mode 100644
index 000000000000..fb15aedc1df8
--- /dev/null
+++ b/nixpkgs/pkgs/games/ace-of-penguins/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, fetchurl
+, copyDesktopItems
+, libX11
+, libXpm
+, libpng
+, makeDesktopItem
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ace-of-penguins";
+  version = "1.4";
+
+  src = fetchurl {
+    url = "http://www.delorie.com/store/ace/ace-${version}.tar.gz";
+    hash = "sha256-H+47BTOSGkKHPAYj8z2HOgZ7HuxY8scMAUSRRueaTM4=";
+  };
+
+  patches = [
+    # Fixes a bunch of miscompilations in modern environments
+    ./fixup-miscompilations.patch
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    libX11
+    libXpm
+    libpng
+    zlib
+  ];
+
+  desktopItems = let
+    generateItem = gameName: {
+      name = "${pname}-${gameName}";
+      exec = "${placeholder "out"}/bin/${gameName}";
+      comment = "Ace of Penguins ${gameName} Card Game";
+      desktopName = gameName;
+      genericName = gameName;
+    };
+  in
+    map (x: makeDesktopItem (generateItem x)) [
+      "canfield"
+      "freecell"
+      "golf"
+      "mastermind"
+      "merlin"
+      "minesweeper"
+      "pegged"
+      "penguins"
+      "solitaire"
+      "spider"
+      "taipedit"
+      "taipei"
+      "thornq"
+    ];
+
+  meta = with lib; {
+    homepage = "http://www.delorie.com/store/ace/";
+    description = "Solitaire games in X11";
+    longDescription = ''
+      The Ace of Penguins is a set of Unix/X solitaire games based on the ones
+      available for Windows(tm) but with a number of enhancements that my wife
+      says make my versions better :-)
+
+      The latest version includes clones of freecell, golf, mastermind, merlin,
+      minesweeper, pegged, solitaire, taipei (with editor!), and thornq (by
+      Martin Thornquist).
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ace-of-penguins/fixup-miscompilations.patch b/nixpkgs/pkgs/games/ace-of-penguins/fixup-miscompilations.patch
new file mode 100644
index 000000000000..599b4a137d79
--- /dev/null
+++ b/nixpkgs/pkgs/games/ace-of-penguins/fixup-miscompilations.patch
@@ -0,0 +1,80 @@
+--- ace-1.4/lib/xwin.c	
++++ ace-1.4/lib/xwin.c	
+@@ -89,10 +89,10 @@
+ /* Motif window hints */
+ typedef struct
+ {
+-  unsigned flags;
+-  unsigned functions;
+-  unsigned decorations;
+-  int inputMode;
++  unsigned long flags;
++  unsigned long functions;
++  unsigned long decorations;
++  long inputMode;
+ } PropMotifWmHints;
+ 
+ typedef PropMotifWmHints        PropMwmHints;
+@@ -841,13 +841,13 @@
+   png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0);
+   info_ptr = png_create_info_struct (png_ptr);
+ 
+-  if (setjmp (png_ptr->jmpbuf)) {
++  if (setjmp (png_jmpbuf (png_ptr))) {
+     fprintf(stderr, "Invalid PNG image!\n");
+     return;
+   }
+ 
+   file_bytes = src->file_data;
+-  png_set_read_fn (png_ptr, (voidp)&file_bytes, (png_rw_ptr)png_reader);
++  png_set_read_fn (png_ptr, (void *)&file_bytes, (png_rw_ptr)png_reader);
+ 
+   png_read_info (png_ptr, info_ptr);
+ 
+--- ace-1.4/lib/make-imglib.c	
++++ ace-1.4/lib/make-imglib.c	
+@@ -86,7 +86,7 @@
+     png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0);
+     info_ptr = png_create_info_struct (png_ptr);
+ 
+-    if (setjmp (png_ptr->jmpbuf)) {
++    if (setjmp (png_jmpbuf (png_ptr))) {
+       fclose (f);
+       continue;
+     }
+
+--- ace-1.4/lib/Makefile.am	
++++ ace-1.4/lib/Makefile.am
+@@ -6,7 +6,7 @@
+ CLEANFILES = images.c images.d
+ 
+ INCLUDES = $(X_CFLAGS) @PDA@
+-AM_LDFLAGS = $(X_LIBS)
++AM_LDFLAGS = $(X_LIBS) -lpng -lz -lm
+ 
+ BUILD_CC = @BUILD_CC@
+ AR = @AR@
+
+--- ace-1.4/lib/xwin.c  2020-10-07 02:07:59.000000000 +0300
++++ ace-1.4/lib/xwin.c    2020-10-07 02:15:05.941784967 +0300
+@@ -55,7 +55,6 @@
+   { "-visual", OPTION_INTEGER, &visual_id },
+   { 0, 0, 0 }
+ };
+-OptionDesc *xwin_options = xwin_options_list;
+
+ Display *display=0;
+ int screen=0;
+--- ace-1.4/config.guess	2012-03-24 19:00:49.000000000 +0100
++++ ace-1.4/config.guess	2021-07-05 11:02:16.685843793 +0200
+@@ -882,6 +882,9 @@
+ 	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ 	fi
+ 	exit ;;
++    aarch64*:Linux:*:*)
++	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	exit ;;
+     avr32*:Linux:*:*)
+ 	echo ${UNAME_MACHINE}-unknown-linux-gnu
+ 	exit ;;
+
diff --git a/nixpkgs/pkgs/games/adom/default.nix b/nixpkgs/pkgs/games/adom/default.nix
new file mode 100644
index 000000000000..bef9d1b42d32
--- /dev/null
+++ b/nixpkgs/pkgs/games/adom/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchurl, patchelf, zlib, libmad, libpng12, libcaca, libGLU, libGL, alsa-lib, libpulseaudio
+, xorg }:
+
+let
+
+  inherit (xorg) libXext libX11;
+
+  lpath = "${stdenv.cc.cc.lib}/lib64:" + lib.makeLibraryPath [
+      zlib libmad libpng12 libcaca libXext libX11 libGLU libGL alsa-lib libpulseaudio];
+
+in
+stdenv.mkDerivation rec {
+  name = "adom-${version}-noteye";
+  version = "1.2.0_pre23";
+
+  src = fetchurl {
+    url = "http://ancardia.uk.to/download/adom_noteye_linux_ubuntu_64_${version}.tar.gz";
+    sha256 = "0sbn0csaqb9cqi0z5fdwvnymkf84g64csg0s9mm6fzh0sm2mi0hz";
+  };
+
+  buildCommand = ''
+    . $stdenv/setup
+
+    unpackPhase
+
+    mkdir -pv $out
+    cp -r -t $out adom/*
+
+    chmod u+w $out/lib
+    for l in $out/lib/*so* ; do
+      chmod u+w $l
+      ${patchelf}/bin/patchelf \
+        --set-rpath "$out/lib:${lpath}" \
+        $l
+    done
+
+    ${patchelf}/bin/patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "$out/lib:${lpath}" \
+      $out/adom
+
+    mkdir $out/bin
+    cat >$out/bin/adom <<EOF
+    #! ${stdenv.shell}
+    (cd $out; exec $out/adom ; )
+    EOF
+    chmod +x $out/bin/adom
+  '';
+
+  meta = with lib; {
+    description = "A rogue-like game with nice graphical interface";
+    homepage = "http://adom.de/";
+    license = licenses.unfreeRedistributable;
+    maintainers = [maintainers.smironov];
+
+    # Please, notify me (smironov) if you need the x86 version
+    platforms = ["x86_64-linux"];
+    broken = true; # at 2022-09-30, failed download.
+  };
+}
diff --git a/nixpkgs/pkgs/games/airshipper/Cargo.lock b/nixpkgs/pkgs/games/airshipper/Cargo.lock
new file mode 100644
index 000000000000..d89ec3a7472a
--- /dev/null
+++ b/nixpkgs/pkgs/games/airshipper/Cargo.lock
@@ -0,0 +1,5355 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "Inflector"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
+
+[[package]]
+name = "ab_glyph"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04a9283dace1c41c265496614998d5b9c4a97b3eb770e804f007c5144bf03f2b"
+dependencies = [
+ "ab_glyph_rasterizer",
+ "owned_ttf_parser",
+]
+
+[[package]]
+name = "ab_glyph_rasterizer"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "363b9b88fad3af3be80bc8f762c9a3f9dfe906fd0327b8e92f1c12e5ae1b8bbb"
+
+[[package]]
+name = "addr2line"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aead"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cipher",
+ "cpufeatures",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "ghash",
+ "subtle",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom 0.2.7",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "airshipper"
+version = "0.10.0"
+dependencies = [
+ "bytesize",
+ "chrono",
+ "clap",
+ "colored",
+ "country-parser",
+ "derive_more",
+ "dirs-next",
+ "find_folder",
+ "futures-util",
+ "html2text",
+ "iced",
+ "iced_lazy",
+ "iced_native",
+ "image",
+ "indicatif 0.16.2",
+ "lazy_static",
+ "md5",
+ "opener",
+ "openssl-sys",
+ "pulldown-cmark 0.8.0",
+ "rand 0.8.5",
+ "regex",
+ "reqwest",
+ "ron 0.6.6",
+ "rss",
+ "rustyline",
+ "self_update",
+ "semver 1.0.13",
+ "serde",
+ "socket2",
+ "strip_markdown",
+ "surge-ping",
+ "termcolor",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+ "tracing-appender",
+ "tracing-futures",
+ "tracing-log",
+ "tracing-subscriber",
+ "url",
+ "veloren-serverbrowser-api",
+ "winapi",
+ "winres",
+ "zip",
+]
+
+[[package]]
+name = "airshipper-server"
+version = "0.10.0"
+dependencies = [
+ "bytes",
+ "chrono",
+ "diesel",
+ "diesel_migrations",
+ "dotenv",
+ "futures",
+ "lazy_static",
+ "libsqlite3-sys",
+ "md5",
+ "octocrab",
+ "openssl-sys",
+ "prometheus",
+ "regex",
+ "reqwest",
+ "rocket",
+ "rocket_sync_db_pools",
+ "ron 0.7.1",
+ "serde",
+ "serde_json",
+ "termcolor",
+ "thiserror",
+ "tokio",
+ "tokio-util 0.6.10",
+ "tracing",
+ "tracing-appender",
+ "tracing-log",
+ "tracing-subscriber",
+ "url",
+]
+
+[[package]]
+name = "aliasable"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "arc-swap"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "983cd8b9d4b02a6dc6ffa557262eb5858a27a0038ffffe21a0f133eaa819a164"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "ash"
+version = "0.34.0+1.2.203"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0f780da53d0063880d45554306489f09dd8d1bda47688b4a57bc579119356df"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atom_syndication"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d5016bf52ff4f3ed28bf3ec1fed96b53daf4b137d5e6b9f97a8cfae7b57a3a2"
+dependencies = [
+ "chrono",
+ "derive_builder",
+ "diligent-date-parser",
+ "quick-xml",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide 0.5.4",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "binascii"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72"
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
+
+[[package]]
+name = "bytemuck"
+version = "1.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9e1f5fa78f69496407a27ae9ed989e3c3b072310286f5ef385525e4cbc24a9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "bytesize"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c58ec36aac5066d5ca17df51b3e70279f5670a72102f5752cb7e7c856adfc70"
+
+[[package]]
+name = "bzip2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "calloop"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82"
+dependencies = [
+ "log",
+ "nix 0.22.3",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "chrono"
+version = "0.4.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.44",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b71c3ce99b7611011217b366d923f1d0a7e07a92bb2dbf1e84508c673ca3bd"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim 0.10.0",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "clipboard_macos"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "145a7f9e9b89453bc0a5e32d166456405d389cea5b578f57f1274b1397588a95"
+dependencies = [
+ "objc",
+ "objc-foundation",
+ "objc_id",
+]
+
+[[package]]
+name = "clipboard_wayland"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f6364a9f7a66f2ac1a1a098aa1c7f6b686f2496c6ac5e5c0d773445df912747"
+dependencies = [
+ "smithay-clipboard",
+]
+
+[[package]]
+name = "clipboard_x11"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "983a7010836ecd04dde2c6d27a0cb56ec5d21572177e782bdcb24a600124e921"
+dependencies = [
+ "thiserror",
+ "x11rb",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "core-foundation 0.9.3",
+ "core-graphics 0.22.3",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-foundation 0.9.3",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "console"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89eab4d20ce20cea182308bca13088fecea9c05f6776cf287205d41a0ed3c847"
+dependencies = [
+ "encode_unicode",
+ "libc",
+ "once_cell",
+ "terminal_size",
+ "unicode-width",
+ "winapi",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "cookie"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05"
+dependencies = [
+ "aes-gcm",
+ "base64 0.13.0",
+ "hkdf",
+ "hmac",
+ "percent-encoding",
+ "rand 0.8.5",
+ "sha2",
+ "subtle",
+ "time 0.3.14",
+ "version_check",
+]
+
+[[package]]
+name = "copyless"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536"
+
+[[package]]
+name = "core-foundation"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
+dependencies = [
+ "core-foundation-sys 0.7.0",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys 0.8.3",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "core-graphics"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.7.0",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.9.3",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.9.3",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-video-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828"
+dependencies = [
+ "cfg-if 0.1.10",
+ "core-foundation-sys 0.7.0",
+ "core-graphics 0.19.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "country-parser"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dee23a8308105cbce67c6b9bf85d204949b614bf9286c24f5eebfae50f17b60"
+dependencies = [
+ "lazy_static",
+ "ron 0.6.6",
+ "serde",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset",
+ "once_cell",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctr"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "cty"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+
+[[package]]
+name = "d3d12"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2daefd788d1e96e0a9d66dee4b828b883509bc3ea9ce30665f04c3246372690c"
+dependencies = [
+ "bitflags",
+ "libloading",
+ "winapi",
+]
+
+[[package]]
+name = "darling"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
+dependencies = [
+ "darling_core 0.10.2",
+ "darling_macro 0.10.2",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core 0.13.4",
+ "darling_macro 0.13.4",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.9.3",
+ "syn",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.10.0",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
+dependencies = [
+ "darling_core 0.10.2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core 0.13.4",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "deflate"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0"
+dependencies = [
+ "darling 0.10.2",
+ "derive_builder_core",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef"
+dependencies = [
+ "darling 0.10.2",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn",
+]
+
+[[package]]
+name = "devise"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c7580b072f1c8476148f16e0a0d5dedddab787da98d86c5082c5e9ed8ab595"
+dependencies = [
+ "devise_codegen",
+ "devise_core",
+]
+
+[[package]]
+name = "devise_codegen"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "123c73e7a6e51b05c75fe1a1b2f4e241399ea5740ed810b0e3e6cacd9db5e7b2"
+dependencies = [
+ "devise_core",
+ "quote",
+]
+
+[[package]]
+name = "devise_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841ef46f4787d9097405cac4e70fb8644fc037b526e8c14054247c0263c400d0"
+dependencies = [
+ "bitflags",
+ "proc-macro2",
+ "proc-macro2-diagnostics",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "diesel"
+version = "1.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b28135ecf6b7d446b43e27e225622a038cc4e2930a1022f51cdb97ada19b8e4d"
+dependencies = [
+ "byteorder",
+ "chrono",
+ "diesel_derives",
+ "libsqlite3-sys",
+ "r2d2",
+]
+
+[[package]]
+name = "diesel_derives"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "diesel_migrations"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf3cde8413353dc7f5d72fa8ce0b99a560a359d2c5ef1e5817ca731cd9008f4c"
+dependencies = [
+ "migrations_internals",
+ "migrations_macros",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "diligent-date-parser"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2d0fd95c7c02e2d6c588c6c5628466fff9bdde4b8c6196465e087b08e792720"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dotenv"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "either"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "euclid"
+version = "0.22.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fd-lock"
+version = "3.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb21c69b9fea5e15dbc1049e4b77145dd0ba1c84019c488102de0dc4ea4b0a27"
+dependencies = [
+ "cfg-if 1.0.0",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "figment"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e3bd154d9ae2f1bb0ada5b7eebd56529513efa5de7d2fc8c6adf33bc43260cf"
+dependencies = [
+ "atomic",
+ "pear",
+ "serde",
+ "toml",
+ "uncased",
+ "version_check",
+]
+
+[[package]]
+name = "find_folder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f6d018fb95a0b59f854aed68ecd96ce2b80af7911b92b1fed3c4b1fa516b91b"
+
+[[package]]
+name = "flate2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.5.4",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+ "num_cpus",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56"
+
+[[package]]
+name = "futures-task"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1"
+
+[[package]]
+name = "futures-util"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "generator"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc184cace1cea8335047a471cc1da80f18acf8a76f3bab2028d499e328948ec7"
+dependencies = [
+ "cc",
+ "libc",
+ "log",
+ "rustversion",
+ "windows",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "ghash"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99"
+dependencies = [
+ "opaque-debug",
+ "polyval",
+]
+
+[[package]]
+name = "gif"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gimli"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
+
+[[package]]
+name = "glam"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579160312273c954cc51bd440f059dde741029ac8daf8c84fece76cb77f62c15"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "glow"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "glyph_brush"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac02497410cdb5062cc056a33f2e1e19ff69fbf26a4be9a02bf29d6e17ea105b"
+dependencies = [
+ "glyph_brush_draw_cache",
+ "glyph_brush_layout",
+ "log",
+ "ordered-float",
+ "rustc-hash",
+ "twox-hash",
+]
+
+[[package]]
+name = "glyph_brush_draw_cache"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6010675390f6889e09a21e2c8b575b3ee25667ea8237a8d59423f73cb8c28610"
+dependencies = [
+ "ab_glyph",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "linked-hash-map",
+ "rayon",
+ "rustc-hash",
+]
+
+[[package]]
+name = "glyph_brush_layout"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38"
+dependencies = [
+ "ab_glyph",
+ "approx",
+ "xi-unicode",
+]
+
+[[package]]
+name = "gpu-alloc"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fc59e5f710e310e76e6707f86c561dd646f69a8876da9131703b2f717de818d"
+dependencies = [
+ "bitflags",
+ "gpu-alloc-types",
+]
+
+[[package]]
+name = "gpu-alloc-types"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "gpu-descriptor"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a"
+dependencies = [
+ "bitflags",
+ "gpu-descriptor-types",
+ "hashbrown",
+]
+
+[[package]]
+name = "gpu-descriptor-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "guillotiere"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782"
+dependencies = [
+ "euclid",
+ "svg_fmt",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util 0.7.3",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hexf-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "html2text"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26379dcb715e237b96102a12b505c553e2bffa74bae2e54658748d298660ef1"
+dependencies = [
+ "html5ever",
+ "markup5ever_rcdom",
+ "unicode-width",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "hyperx"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5617e92fc2f2501c3e2bc6ce547cad841adba2bae5b921c7e52510beca6d084c"
+dependencies = [
+ "base64 0.13.0",
+ "bytes",
+ "http",
+ "httpdate",
+ "language-tags",
+ "mime",
+ "percent-encoding",
+ "unicase",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c495f162af0bf17656d0014a0eded5f3cd2f365fdd204548c2869db89359dc7"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys 0.8.3",
+ "js-sys",
+ "once_cell",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iced"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6025abe6b1056c9b5adad79c484c5fd8b7012e5230f3b0439a1294ade7ded7bf"
+dependencies = [
+ "iced_core",
+ "iced_futures",
+ "iced_graphics",
+ "iced_native",
+ "iced_pure",
+ "iced_wgpu",
+ "iced_winit",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_core"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf9133ceb345ec640047d5597fb8aa88e9cf74ce2d0277a9a62e2d6ed4a8148"
+dependencies = [
+ "bitflags",
+ "wasm-timer",
+]
+
+[[package]]
+name = "iced_futures"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13d13241d5ed32846bbcffaf60e27e7ceebb60cf16d791ff00d582f0d4d1b07b"
+dependencies = [
+ "futures",
+ "log",
+ "tokio",
+ "wasm-bindgen-futures",
+ "wasm-timer",
+]
+
+[[package]]
+name = "iced_graphics"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2adcf703fc326e0985ea99c75f1b73e718560a7b220d57ec6478417ccb2f463f"
+dependencies = [
+ "bytemuck",
+ "glam",
+ "iced_native",
+ "iced_pure",
+ "iced_style",
+ "raw-window-handle 0.4.3",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_lazy"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "333979d705964832864ee7676516ab3c3df4ab0b65efb603c86a256d4adbec6f"
+dependencies = [
+ "iced_native",
+ "ouroboros",
+]
+
+[[package]]
+name = "iced_native"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ca174d4693a5daa2ffcae38d5c28cf0dbd54bd8fc19848f28392cd52624751a"
+dependencies = [
+ "iced_core",
+ "iced_futures",
+ "iced_style",
+ "num-traits",
+ "twox-hash",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "iced_pure"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80aeaecadfd6832c2c787cbdfd357adc256a51c55d68142d852037451e72f393"
+dependencies = [
+ "iced_native",
+ "iced_style",
+ "num-traits",
+]
+
+[[package]]
+name = "iced_style"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a90028c94ab62c13cd3b6fb1499a593a51510d4729c5b4e8e60705b2b28c6bc2"
+dependencies = [
+ "iced_core",
+]
+
+[[package]]
+name = "iced_wgpu"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bc44ca209f77bd855f035d2e86e50e66332f55fb60d9fb67eeb09eae9d9de2e"
+dependencies = [
+ "bitflags",
+ "bytemuck",
+ "futures",
+ "glyph_brush",
+ "guillotiere",
+ "iced_graphics",
+ "iced_native",
+ "image",
+ "kamadak-exif",
+ "log",
+ "raw-window-handle 0.4.3",
+ "wgpu",
+ "wgpu_glyph",
+]
+
+[[package]]
+name = "iced_winit"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72011b895e439e2ebad8f545720e3e97c7368ecfc47a23cbfeaa9508a98af90c"
+dependencies = [
+ "iced_futures",
+ "iced_graphics",
+ "iced_native",
+ "log",
+ "thiserror",
+ "web-sys",
+ "winapi",
+ "window_clipboard",
+ "winit",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.23.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "gif",
+ "jpeg-decoder",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+ "png",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7baab56125e25686df467fe470785512329883aab42696d661247aca2a2896e4"
+dependencies = [
+ "console",
+ "lazy_static",
+ "number_prefix 0.3.0",
+ "regex",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b"
+dependencies = [
+ "console",
+ "lazy_static",
+ "number_prefix 0.4.0",
+ "regex",
+]
+
+[[package]]
+name = "inlinable_string"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb"
+
+[[package]]
+name = "inplace_it"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67f0347836f3f6362c1e7efdadde2b1c4b4556d211310b70631bae7eb692070b"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7d367024b3f3414d8e01f437f704f41a9f64ab36f9067fa73e526ad4c763c87"
+dependencies = [
+ "libc",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
+
+[[package]]
+name = "itoa"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "jsonwebtoken"
+version = "7.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afabcc15e437a6484fc4f12d0fd63068fe457bf93f1c148d3d9649c60b103f32"
+dependencies = [
+ "base64 0.12.3",
+ "pem",
+ "ring",
+ "serde",
+ "serde_json",
+ "simple_asn1",
+]
+
+[[package]]
+name = "kamadak-exif"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70494964492bf8e491eb3951c5d70c9627eb7100ede6cc56d748b9a3f302cfb6"
+dependencies = [
+ "mutate_once",
+]
+
+[[package]]
+name = "khronos-egl"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3"
+dependencies = [
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "language-tags"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
+
+[[package]]
+name = "libloading"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.22.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290b64917f8b0cb885d9de0f9959fe1f775d7fa12f1da2db9001c1c8ab60f89d"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb68f22743a3fb35785f1e7f844ca5a3de2dde5bd0c0ef5b372065814699b121"
+
+[[package]]
+name = "lock_api"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "loom"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
+dependencies = [
+ "cfg-if 1.0.0",
+ "generator",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "markup5ever"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
+dependencies = [
+ "log",
+ "phf",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "markup5ever_rcdom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f015da43bcd8d4f144559a3423f4591d69b8ce0652c905374da7205df336ae2b"
+dependencies = [
+ "html5ever",
+ "markup5ever",
+ "tendril",
+ "xml5ever",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memmap2"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memmap2"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95af15f345b17af2efc8ead6080fb8bc376f8cec1b35277b935637595fe77498"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metal"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0514f491f4cc03632ab399ee01e2c1c1b12d3e1cf2d667c1ff5f87d6dcd2084"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-graphics-types",
+ "foreign-types",
+ "log",
+ "objc",
+]
+
+[[package]]
+name = "migrations_internals"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b4fc84e4af020b837029e017966f86a1c2d5e83e64b589963d5047525995860"
+dependencies = [
+ "diesel",
+]
+
+[[package]]
+name = "migrations_macros"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c"
+dependencies = [
+ "migrations_internals",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "multer"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a30ba6d97eb198c5e8a35d67d5779d6680cca35652a60ee90fc23dc431d4fde8"
+dependencies = [
+ "bytes",
+ "encoding_rs",
+ "futures-util",
+ "http",
+ "httparse",
+ "log",
+ "memchr",
+ "mime",
+ "spin 0.9.4",
+ "tokio",
+ "tokio-util 0.7.3",
+ "version_check",
+]
+
+[[package]]
+name = "mutate_once"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b"
+
+[[package]]
+name = "naga"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3012f2dbcc79e8e0b5825a4836a7106a75dd9b2fe42c528163be0f572538c705"
+dependencies = [
+ "bit-set",
+ "bitflags",
+ "codespan-reporting",
+ "hexf-parse",
+ "indexmap",
+ "log",
+ "num-traits",
+ "rustc-hash",
+ "spirv",
+ "thiserror",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ndk"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d"
+dependencies = [
+ "bitflags",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-glue"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-macro",
+ "ndk-sys",
+]
+
+[[package]]
+name = "ndk-macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c"
+dependencies = [
+ "darling 0.13.4",
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ndk-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121"
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nix"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "no-std-net"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65"
+
+[[package]]
+name = "nom"
+version = "7.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a"
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+ "objc_exception",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "octocrab"
+version = "0.15.4"
+source = "git+https://github.com/XAMPPRocky/octocrab?rev=c78edcd87fa5edcd5a6d0d0878b2a8d020802c40#c78edcd87fa5edcd5a6d0d0878b2a8d020802c40"
+dependencies = [
+ "arc-swap",
+ "async-trait",
+ "base64 0.13.0",
+ "bytes",
+ "chrono",
+ "hyperx",
+ "jsonwebtoken",
+ "once_cell",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "snafu",
+ "url",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "opener"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea3ebcd72a54701f56345f16785a6d3ac2df7e986d273eb4395c0b01db17952"
+dependencies = [
+ "bstr",
+ "winapi",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.22.0+1.1.1q"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-float"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bcbab4bfea7a59c2c0fe47211a1ac4e3e96bea6eb446d704f310bc5c732ae2"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
+
+[[package]]
+name = "ouroboros"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f357ef82d1b4db66fbed0b8d542cbd3c22d0bf5b393b3c257b9ba4568e70c9c3"
+dependencies = [
+ "aliasable",
+ "ouroboros_macro",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "ouroboros_macro"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44a0b52c2cbaef7dffa5fec1a43274afe8bd2a644fa9fc50a9ef4ff0269b1257"
+dependencies = [
+ "Inflector",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "owned_ttf_parser"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05e6affeb1632d6ff6a23d2cd40ffed138e82f1532571a26f527c8a284bb2fbb"
+dependencies = [
+ "ttf-parser",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.5",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.3",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if 1.0.0",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "pear"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15e44241c5e4c868e3eaa78b7c1848cadd6344ed4f54d029832d32b415a58702"
+dependencies = [
+ "inlinable_string",
+ "pear_codegen",
+ "yansi",
+]
+
+[[package]]
+name = "pear_codegen"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82a5ca643c2303ecb740d506539deba189e16f2754040a42901cd8105d0282d0"
+dependencies = [
+ "proc-macro2",
+ "proc-macro2-diagnostics",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pem"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb"
+dependencies = [
+ "base64 0.13.0",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pest"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b0560d531d1febc25a3c9398a62a71256c0178f2e3443baedd9ad4bb8c9deb4"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "pnet_base"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e88341c6c842f89bdc7287f7b1e26b6fa64fa11c7ea3756971e6f18cd2510c4"
+dependencies = [
+ "no-std-net",
+]
+
+[[package]]
+name = "pnet_macros"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebfcdc9c072966723026b3596a1f655fb8bbfe0142f9770f8d481aee4459d6b9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn",
+]
+
+[[package]]
+name = "pnet_macros_support"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bba532f5a4b320c029d89e612671fb621851b3b07e972c53850d34130033a5cd"
+dependencies = [
+ "pnet_base",
+]
+
+[[package]]
+name = "pnet_packet"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7009716ac86091c1b6e2cdec95a2b028c880f516054c1ec11edd02f9f463cbde"
+dependencies = [
+ "glob",
+ "pnet_base",
+ "pnet_macros",
+ "pnet_macros_support",
+]
+
+[[package]]
+name = "png"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "deflate",
+ "miniz_oxide 0.3.7",
+]
+
+[[package]]
+name = "polyval"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
+dependencies = [
+ "once_cell",
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proc-macro2-diagnostics"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+ "yansi",
+]
+
+[[package]]
+name = "profiling"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f61dcf0b917cd75d4521d7343d1ffff3d1583054133c9b5cbea3375c703c40d"
+
+[[package]]
+name = "prometheus"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5986aa8d62380092d2f50f8b1cdba9cb9b6731ffd4b25b51fd126b6c3e05b99c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fnv",
+ "lazy_static",
+ "memchr",
+ "parking_lot 0.11.2",
+ "protobuf",
+ "thiserror",
+]
+
+[[package]]
+name = "protobuf"
+version = "2.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf7e6d18738ecd0902d30d1ad232c9125985a3422929b16c65517b38adc14f96"
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca36dea94d187597e104a5c8e4b07576a8a45aa5db48a65e12940d3eb7461f55"
+dependencies = [
+ "bitflags",
+ "getopts",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8"
+dependencies = [
+ "bitflags",
+ "getopts",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26aab6b48e2590e4a64d1ed808749ba06257882b461d01ca71baeb747074a6dd"
+dependencies = [
+ "encoding_rs",
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "r2d2"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93"
+dependencies = [
+ "log",
+ "parking_lot 0.12.1",
+ "scheduled-thread-pool",
+]
+
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+ "rand_pcg",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom 0.2.7",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "range-alloc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63e935c45e09cc6dcf00d2f0b2d630a58f4095320223d47fc68918722f0538b6"
+
+[[package]]
+name = "raw-window-handle"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76"
+dependencies = [
+ "libc",
+ "raw-window-handle 0.4.3",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41"
+dependencies = [
+ "cty",
+]
+
+[[package]]
+name = "rayon"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.7",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed13bcd201494ab44900a96490291651d200730904221832b9547d24a87d332b"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5234cd6063258a5e32903b53b1b6ac043a0541c8adc1f610f67b0326c7a578fa"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "renderdoc-sys"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157"
+
+[[package]]
+name = "reqwest"
+version = "0.11.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92"
+dependencies = [
+ "base64 0.13.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "tokio-util 0.7.3",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rocket"
+version = "0.5.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98ead083fce4a405feb349cf09abdf64471c6077f14e0ce59364aa90d4b99317"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "atomic",
+ "atty",
+ "binascii",
+ "bytes",
+ "either",
+ "figment",
+ "futures",
+ "indexmap",
+ "log",
+ "memchr",
+ "multer",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "ref-cast",
+ "rocket_codegen",
+ "rocket_http",
+ "serde",
+ "serde_json",
+ "state",
+ "tempfile",
+ "time 0.3.14",
+ "tokio",
+ "tokio-stream",
+ "tokio-util 0.7.3",
+ "ubyte",
+ "version_check",
+ "yansi",
+]
+
+[[package]]
+name = "rocket_codegen"
+version = "0.5.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6aeb6bb9c61e9cd2c00d70ea267bf36f76a4cc615e5908b349c2f9d93999b47"
+dependencies = [
+ "devise",
+ "glob",
+ "indexmap",
+ "proc-macro2",
+ "quote",
+ "rocket_http",
+ "syn",
+ "unicode-xid",
+]
+
+[[package]]
+name = "rocket_http"
+version = "0.5.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ded65d127954de3c12471630bf4b81a2792f065984461e65b91d0fdaafc17a2"
+dependencies = [
+ "cookie",
+ "either",
+ "futures",
+ "http",
+ "hyper",
+ "indexmap",
+ "log",
+ "memchr",
+ "pear",
+ "percent-encoding",
+ "pin-project-lite",
+ "ref-cast",
+ "serde",
+ "smallvec",
+ "stable-pattern",
+ "state",
+ "time 0.3.14",
+ "tokio",
+ "uncased",
+]
+
+[[package]]
+name = "rocket_sync_db_pools"
+version = "0.1.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fa48b6ab25013e9812f1b0c592741900b3a2a83c0936292e0565c0ac842f558"
+dependencies = [
+ "diesel",
+ "r2d2",
+ "rocket",
+ "rocket_sync_db_pools_codegen",
+ "serde",
+ "tokio",
+]
+
+[[package]]
+name = "rocket_sync_db_pools_codegen"
+version = "0.1.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "280ef2d232923e69cb93da156972eb5476a7cce5ba44843f6608f46a4abf7aab"
+dependencies = [
+ "devise",
+ "quote",
+]
+
+[[package]]
+name = "ron"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86018df177b1beef6c7c8ef949969c4f7cb9a9344181b92486b23c79995bdaa4"
+dependencies = [
+ "base64 0.13.0",
+ "bitflags",
+ "serde",
+]
+
+[[package]]
+name = "ron"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
+dependencies = [
+ "base64 0.13.0",
+ "bitflags",
+ "serde",
+]
+
+[[package]]
+name = "rss"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e70d6ae72f8a4333af8ce9dce58942020528430eb0d46ee2fcb5e8d4d16377"
+dependencies = [
+ "atom_syndication",
+ "derive_builder",
+ "quick-xml",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.13",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "203974af07ea769452490ee8de3e5947971efc3a090dca8a779dd432d3fa46a7"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55"
+dependencies = [
+ "base64 0.13.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8"
+
+[[package]]
+name = "rustyline"
+version = "10.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1cd5ae51d3f7bf65d7969d579d502168ef578f289452bd8ccc91de28fda20e"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "clipboard-win",
+ "dirs-next",
+ "fd-lock",
+ "libc",
+ "log",
+ "memchr",
+ "nix 0.24.2",
+ "radix_trie",
+ "scopeguard",
+ "unicode-segmentation",
+ "unicode-width",
+ "utf8parse",
+ "winapi",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "scheduled-thread-pool"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf"
+dependencies = [
+ "parking_lot 0.12.1",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.9.3",
+ "core-foundation-sys 0.8.3",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys 0.8.3",
+ "libc",
+]
+
+[[package]]
+name = "self_update"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb85f1802f7b987237b8525c0fde86ea86f31c957c1875467c727d5b921179c"
+dependencies = [
+ "hyper",
+ "indicatif 0.15.0",
+ "log",
+ "quick-xml",
+ "regex",
+ "reqwest",
+ "semver 0.11.0",
+ "serde_json",
+ "tempfile",
+ "zip",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711"
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "184c643044780f7ceb59104cef98a5a6f12cb2288a7bc701ab93a362b49fd47d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9db03534dff993187064c4e0c05a5708d2a9728ace9a8959b77bedf415dac5"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simple_asn1"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "692ca13de57ce0613a363c8c2f1de925adebc81b04c923ac60c5488bb44abe4b"
+dependencies = [
+ "chrono",
+ "num-bigint",
+ "num-traits",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3"
+dependencies = [
+ "bitflags",
+ "calloop",
+ "dlib",
+ "lazy_static",
+ "log",
+ "memmap2 0.3.1",
+ "nix 0.22.3",
+ "pkg-config",
+ "wayland-client",
+ "wayland-cursor",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454"
+dependencies = [
+ "bitflags",
+ "dlib",
+ "lazy_static",
+ "log",
+ "memmap2 0.5.7",
+ "nix 0.24.2",
+ "pkg-config",
+ "wayland-client",
+ "wayland-cursor",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "smithay-clipboard"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8"
+dependencies = [
+ "smithay-client-toolkit 0.16.0",
+ "wayland-client",
+]
+
+[[package]]
+name = "snafu"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5177903bf45656592d9eb5c0e22f408fc023aae51dbe2088889b71633ba451f2"
+dependencies = [
+ "backtrace",
+ "doc-comment",
+ "snafu-derive",
+]
+
+[[package]]
+name = "snafu-derive"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "410b26ed97440d90ced3e2488c868d56a86e2064f5d7d6f417909b286afe25e5"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09"
+
+[[package]]
+name = "spirv"
+version = "0.2.0+1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830"
+dependencies = [
+ "bitflags",
+ "num-traits",
+]
+
+[[package]]
+name = "stable-pattern"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "state"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
+dependencies = [
+ "loom",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "string_cache"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "strip_markdown"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32c754386109f9adc8ca62513c51cf81cc2d8502588064103aa8e9f69b4276da"
+dependencies = [
+ "log",
+ "pulldown-cmark 0.7.2",
+]
+
+[[package]]
+name = "strsim"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "surge-ping"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d33636a95261e9f939742d4712b20f8813a9b3cfaf1510b751096329cd3902b"
+dependencies = [
+ "hex",
+ "parking_lot 0.12.1",
+ "pnet_packet",
+ "rand 0.8.5",
+ "socket2",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "svg_fmt"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2"
+
+[[package]]
+name = "syn"
+version = "1.0.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+
+[[package]]
+name = "thiserror"
+version = "1.0.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c1b05ca9d106ba7d2e31a9dab4a64e7be2cce415321966ea3132c49a656e252"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8f2591983642de85c921015f3f070c665a197ed69e417af436115e3a1407487"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c3f9a28b618c3a6b9251b6908e9c99e04b9e5c02e6581ccbb67d59c34ef7f9b"
+dependencies = [
+ "itoa",
+ "libc",
+ "num_threads",
+ "time-macros",
+]
+
+[[package]]
+name = "time-macros"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792"
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89797afd69d206ccd11fb0ea560a44bbb87731d020670e79416d442919257d42"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "once_cell",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307"
+dependencies = [
+ "cfg-if 1.0.0",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-appender"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e"
+dependencies = [
+ "crossbeam-channel",
+ "time 0.3.14",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b"
+dependencies = [
+ "ansi_term",
+ "matchers",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "time 0.3.14",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "ttf-parser"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd"
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if 1.0.0",
+ "rand 0.8.5",
+ "static_assertions",
+]
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "ubyte"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c81f0dae7d286ad0d9366d7679a77934cfc3cf3a8d67e82669794412b2368fe6"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "uncased"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622"
+dependencies = [
+ "serde",
+ "version_check",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+
+[[package]]
+name = "universal-hash"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22fe195a4f217c25b25cb5058ced57059824a678474874038dc88d211bf508d3"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "veloren-serverbrowser-api"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b25e966b27a95a55d4903c4646dc55ffdf59f23bef7e27978b97fa92fd64ca27"
+dependencies = [
+ "country-parser",
+ "serde",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a"
+
+[[package]]
+name = "wasm-timer"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
+dependencies = [
+ "futures",
+ "js-sys",
+ "parking_lot 0.11.2",
+ "pin-utils",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wayland-client"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix 0.24.2",
+ "scoped-tls",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
+dependencies = [
+ "nix 0.24.2",
+ "once_cell",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-cursor"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
+dependencies = [
+ "nix 0.24.2",
+ "wayland-client",
+ "xcursor",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
+dependencies = [
+ "bitflags",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "pkg-config",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1c760f0d366a6c24a02ed7816e23e691f5d92291f94d15e836006fd11b04daf"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "wgpu"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97cd781ff044d6d697b632a2e212032c2e957d1afaa21dbf58069cbb8f78567"
+dependencies = [
+ "arrayvec",
+ "js-sys",
+ "log",
+ "naga",
+ "parking_lot 0.11.2",
+ "raw-window-handle 0.4.3",
+ "smallvec",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "wgpu-core",
+ "wgpu-hal",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-core"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4688c000eb841ca55f7b35db659b78d6e1cd77d7caf8fb929f4e181f754047d"
+dependencies = [
+ "arrayvec",
+ "bitflags",
+ "cfg_aliases",
+ "codespan-reporting",
+ "copyless",
+ "fxhash",
+ "log",
+ "naga",
+ "parking_lot 0.11.2",
+ "profiling",
+ "raw-window-handle 0.4.3",
+ "smallvec",
+ "thiserror",
+ "wgpu-hal",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-hal"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d684ea6a34974a2fc19f1dfd183d11a62e22d75c4f187a574bb1224df8e056c2"
+dependencies = [
+ "arrayvec",
+ "ash",
+ "bit-set",
+ "bitflags",
+ "block",
+ "core-graphics-types",
+ "d3d12",
+ "foreign-types",
+ "fxhash",
+ "glow",
+ "gpu-alloc",
+ "gpu-descriptor",
+ "inplace_it",
+ "js-sys",
+ "khronos-egl",
+ "libloading",
+ "log",
+ "metal",
+ "naga",
+ "objc",
+ "parking_lot 0.11.2",
+ "profiling",
+ "range-alloc",
+ "raw-window-handle 0.4.3",
+ "renderdoc-sys",
+ "thiserror",
+ "wasm-bindgen",
+ "web-sys",
+ "wgpu-types",
+ "winapi",
+]
+
+[[package]]
+name = "wgpu-types"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "549533d9e1cdd4b4cda7718d33ff500fc4c34b5467b71d76b547ae0324f3b2a2"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "wgpu_glyph"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8134edb15ae465caf308125646c9e98bdef7398cdefc69227ac77a5eb795e7fe"
+dependencies = [
+ "bytemuck",
+ "glyph_brush",
+ "log",
+ "wgpu",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "window_clipboard"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b47d7fb4df5cd1fea61e5ee3841380f54359bac814e227d8f72709f4f193f8cf"
+dependencies = [
+ "clipboard-win",
+ "clipboard_macos",
+ "clipboard_wayland",
+ "clipboard_x11",
+ "raw-window-handle 0.3.4",
+ "thiserror",
+]
+
+[[package]]
+name = "windows"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbedf6db9096bc2364adce0ae0aa636dcd89f3c3f2cd67947062aaf0ca2a10ec"
+dependencies = [
+ "windows_aarch64_msvc 0.32.0",
+ "windows_i686_gnu 0.32.0",
+ "windows_i686_msvc 0.32.0",
+ "windows_x86_64_gnu 0.32.0",
+ "windows_x86_64_msvc 0.32.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
+name = "winit"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a"
+dependencies = [
+ "bitflags",
+ "cocoa",
+ "core-foundation 0.9.3",
+ "core-graphics 0.22.3",
+ "core-video-sys",
+ "dispatch",
+ "instant",
+ "lazy_static",
+ "libc",
+ "log",
+ "mio",
+ "ndk",
+ "ndk-glue",
+ "ndk-sys",
+ "objc",
+ "parking_lot 0.11.2",
+ "percent-encoding",
+ "raw-window-handle 0.4.3",
+ "smithay-client-toolkit 0.15.4",
+ "wasm-bindgen",
+ "wayland-client",
+ "wayland-protocols",
+ "web-sys",
+ "winapi",
+ "x11-dl",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winres"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c83627bc137605acc00bb399c7b908ef460b621fc37c953db2b09f88c449ea6"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a"
+dependencies = [
+ "gethostname",
+ "nix 0.22.3",
+ "winapi",
+ "winapi-wsapoll",
+]
+
+[[package]]
+name = "xcursor"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "xi-unicode"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "xml5ever"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9234163818fd8e2418fcde330655e757900d4236acd8cc70fef345ef91f6d865"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+ "time 0.1.44",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zip"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
+dependencies = [
+ "byteorder",
+ "bzip2",
+ "crc32fast",
+ "flate2",
+ "thiserror",
+ "time 0.1.44",
+]
diff --git a/nixpkgs/pkgs/games/airshipper/default.nix b/nixpkgs/pkgs/games/airshipper/default.nix
new file mode 100644
index 000000000000..d2f80e96fdcb
--- /dev/null
+++ b/nixpkgs/pkgs/games/airshipper/default.nix
@@ -0,0 +1,121 @@
+{ lib
+, rustPlatform
+, fetchFromGitLab
+, fetchpatch
+, openssl
+, libGL
+, vulkan-loader
+, wayland
+, wayland-protocols
+, libxkbcommon
+, libX11
+, libXrandr
+, libXi
+, libXcursor
+, udev
+, alsa-lib
+, stdenv
+, libxcb
+, pkg-config
+, makeWrapper
+, writeShellScript
+, patchelf
+}:
+let
+  version = "0.10.0";
+  # Patch for airshipper to install veloren
+  patch = let
+    runtimeLibs = [
+      udev
+      alsa-lib
+      stdenv.cc.cc.lib
+      libxkbcommon
+      libxcb
+      libX11
+      libXcursor
+      libXrandr
+      libXi
+      vulkan-loader
+      libGL
+    ];
+  in
+    writeShellScript "patch" ''
+      echo "making binaries executable"
+      chmod +x {veloren-voxygen,veloren-server-cli}
+      echo "patching dynamic linkers"
+      ${patchelf}/bin/patchelf \
+        --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \
+        veloren-server-cli
+      ${patchelf}/bin/patchelf \
+        --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \
+        --set-rpath "${lib.makeLibraryPath runtimeLibs}" \
+        veloren-voxygen
+  '';
+in
+rustPlatform.buildRustPackage {
+  pname = "airshipper";
+  inherit version;
+
+  src = fetchFromGitLab {
+    owner = "Veloren";
+    repo = "airshipper";
+    rev = "v${version}";
+    sha256 = "sha256-5zP1Ye1fJNQp8eWKwdxLqBr4qzBfWEEBsJ9s7+8idL4=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "octocrab-0.15.4" = "sha256-uKHLlb0EyWF0Ho8FP38DFZsEWXiAG8FEYzJgwO9W90U=";
+    };
+  };
+
+  buildInputs = [
+    openssl
+    wayland
+    wayland-protocols
+    libxkbcommon
+    libX11
+    libXrandr
+    libXi
+    libXcursor
+  ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  RUSTC_BOOTSTRAP = 1; # We need rust unstable features
+
+  postInstall = ''
+    install -Dm444 -t "$out/share/applications" "client/assets/net.veloren.airshipper.desktop"
+    install -Dm444    "client/assets/net.veloren.airshipper.png"  "$out/share/icons/net.veloren.airshipper.png"
+  '';
+
+  postFixup =
+    let
+      libPath = lib.makeLibraryPath [
+        libGL
+        vulkan-loader
+        wayland
+        wayland-protocols
+        libxkbcommon
+        libX11
+        libXrandr
+        libXi
+        libXcursor
+      ];
+    in
+    ''
+      patchelf --set-rpath "${libPath}" "$out/bin/airshipper"
+      wrapProgram "$out/bin/airshipper" --set VELOREN_PATCHER "${patch}"
+    '';
+
+  doCheck = false;
+  cargoBuildFlags = [ "--package" "airshipper" ];
+  cargoTestFlags = [ "--package" "airshipper" ];
+
+  meta = with lib; {
+    description = "Provides automatic updates for the voxel RPG Veloren.";
+    homepage = "https://www.veloren.net";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ yusdacra ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/airstrike/default.nix b/nixpkgs/pkgs/games/airstrike/default.nix
new file mode 100644
index 000000000000..8441ac7a2fee
--- /dev/null
+++ b/nixpkgs/pkgs/games/airstrike/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, makeWrapper, SDL, SDL_image }:
+
+stdenv.mkDerivation rec {
+  pname = "airstrike-pre";
+  version = "6a";
+
+  src = fetchurl {
+    url = "https://icculus.org/airstrike/airstrike-pre${version}-src.tar.gz";
+    sha256 = "1h6rv2zcp84ycmd0kv1pbpqjgwx57dw42x7878d2c2vnpi5jn8qi";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ SDL SDL_image ];
+
+  NIX_LDFLAGS = "-lm";
+
+  installPhase = ''
+    ls -l
+    mkdir -p $out/bin
+    cp airstrike $out/bin
+
+    mkdir -p $out/share
+    cp -r data airstrikerc $out/share
+
+    wrapProgram $out/bin/airstrike \
+      --chdir "$out/share"
+  '';
+
+  meta = with lib; {
+    description = "A 2d dogfighting game";
+    homepage = "https://icculus.org/airstrike/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/alephone/apotheosis-x/default.nix b/nixpkgs/pkgs/games/alephone/apotheosis-x/default.nix
new file mode 100644
index 000000000000..16bed9fad97e
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/apotheosis-x/default.nix
@@ -0,0 +1,20 @@
+{ alephone, requireFile }:
+
+alephone.makeWrapper rec {
+  pname = "apotheosis-x";
+  version = "1.1";
+  desktopName = "Marathon-Apotheosis-X";
+
+  zip = requireFile {
+    name = "Apotheosis_X_1.1.zip";
+    url = "https://www.moddb.com/mods/apotheosis-x/downloads";
+    sha256 = "sha256-4Y/RQQeN4VTpig8ZyxUpVHwzN8W8ciTBCkSzND8SMbs=";
+  };
+
+  sourceRoot = "Apotheosis X 1.1";
+
+  meta = {
+    description = "Total conversion for Marathon Infinity running on the Aleph One engine";
+    homepage = "https://simplici7y.com/items/apotheosis-x-5";
+  };
+}
diff --git a/nixpkgs/pkgs/games/alephone/default.nix b/nixpkgs/pkgs/games/alephone/default.nix
new file mode 100644
index 000000000000..1bf732e446bf
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/default.nix
@@ -0,0 +1,102 @@
+{ lib, stdenv, fetchurl, alsa-lib, boost, curl, ffmpeg_4, icoutils, libGLU
+, libmad, libogg, libpng, libsndfile, libvorbis, lua, miniupnpc, pkg-config
+, SDL2, SDL2_image, SDL2_net, SDL2_ttf, speex, zziplib, zlib, makeWrapper
+, makeDesktopItem, unzip, alephone }:
+
+let
+  self = stdenv.mkDerivation rec {
+    outputs = [ "out" "icons" ];
+    pname = "alephone";
+    version = "1.6.2";
+
+    src = fetchurl {
+      url = let date = "20230529";
+      in "https://github.com/Aleph-One-Marathon/alephone/releases/download/release-${date}/AlephOne-${date}.tar.bz2";
+      sha256 = "sha256-UqhZvOMOxU4W0eLRRTQvGXaqTpWD5KIdXULClHW7Iyc=";
+    };
+
+    nativeBuildInputs = [ pkg-config icoutils ];
+
+    buildInputs = [
+      alsa-lib
+      boost
+      curl
+      ffmpeg_4
+      libGLU
+      libmad
+      libsndfile
+      libogg
+      libpng
+      libvorbis
+      lua
+      miniupnpc
+      SDL2
+      SDL2_image
+      SDL2_net
+      SDL2_ttf
+      speex
+      zziplib
+      zlib
+    ];
+
+    configureFlags = [ "--with-boost-libdir=${boost.out}/lib" ];
+    makeFlags = [ "AR:=$(AR)" ];
+
+    enableParallelBuilding = true;
+
+    postInstall = ''
+      mkdir $icons
+      icotool -x -i 5 -o $icons Resources/Windows/*.ico
+      pushd $icons
+      for x in *_5_48x48x32.png; do
+        mv $x ''${x%_5_48x48x32.png}.png
+      done
+      popd
+    '';
+
+    meta = with lib; {
+      description =
+        "Aleph One is the open source continuation of Bungie’s Marathon 2 game engine";
+      homepage = "https://alephone.lhowon.org/";
+      license = with licenses; [ gpl3 ];
+      maintainers = with maintainers; [ ehmry ];
+      platforms = platforms.linux;
+    };
+  };
+
+in self // {
+  makeWrapper = { pname, desktopName, version, zip, meta
+    , icon ? alephone.icons + "/alephone.png", ... }@extraArgs:
+    stdenv.mkDerivation ({
+      inherit pname version;
+
+      desktopItem = makeDesktopItem {
+        name = desktopName;
+        exec = pname;
+        genericName = pname;
+        categories = [ "Game" ];
+        comment = meta.description;
+        inherit desktopName icon;
+      };
+
+      src = zip;
+
+      nativeBuildInputs = [ makeWrapper unzip ];
+
+      dontConfigure = true;
+      dontBuild = true;
+
+      installPhase = ''
+        mkdir -p $out/bin $out/data/$pname $out/share/applications
+        cp -a * $out/data/$pname
+        cp $desktopItem/share/applications/* $out/share/applications
+        makeWrapper ${alephone}/bin/alephone $out/bin/$pname \
+          --add-flags $out/data/$pname
+      '';
+    } // extraArgs // {
+      meta = alephone.meta // {
+        license = lib.licenses.free;
+        hydraPlatforms = [ ];
+      } // meta;
+    });
+}
diff --git a/nixpkgs/pkgs/games/alephone/durandal/default.nix b/nixpkgs/pkgs/games/alephone/durandal/default.nix
new file mode 100644
index 000000000000..cd7927d69a14
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/durandal/default.nix
@@ -0,0 +1,25 @@
+{ alephone, fetchurl }:
+
+alephone.makeWrapper rec {
+  pname = "durandal";
+  desktopName = "Marathon-Durandal";
+  version = "20230119";
+  icon = alephone.icons + "/marathon2.png";
+
+  zip = fetchurl {
+    url =
+      "https://github.com/Aleph-One-Marathon/alephone/releases/download/release-${version}/Marathon2-${version}-Data.zip";
+    sha256 = "sha256-Vbfk5wLgvNEZW2BohMY5mPXaRbNlHxJdWLYTsE8CSwI=";
+  };
+
+  meta = {
+    description = "Second chapter of the Marathon trilogy";
+    longDescription = ''
+      Fresh from your triumph on the starship Marathon, you are seized by the rogue computer Durandal to do his bidding in a distant part of the galaxy. Within the ruins of an ancient civilization, you must seek the remnants of a lost clan and uncover their long-buried secrets. Battle opponents ancient and terrible, with sophisticated weapons and devious strategies, all the while struggling to escape the alien nightmare…
+
+      This release of Marathon 2: Durandal includes the classic graphics, and revamped high-definition textures and monsters from the Xbox Live Arcade edition.
+    '';
+    homepage = "https://alephone.lhowon.org/games/marathon2.html";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/alephone/eternal/default.nix b/nixpkgs/pkgs/games/alephone/eternal/default.nix
new file mode 100644
index 000000000000..c21284150618
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/eternal/default.nix
@@ -0,0 +1,21 @@
+{ alephone, fetchurl, unrar }:
+
+alephone.makeWrapper rec {
+  pname = "marathon-eternal";
+  version = "1.2.0";
+  desktopName = "Marathon-Eternal";
+
+  zip = fetchurl {
+    url = "http://eternal.bungie.org/files/_releases/EternalXv120.zip";
+    sha256 = "1qrvx0sp9xc8zbpp5yz8jdz458ajzmyv2si7hrppiyawc8dpcwck";
+  };
+
+  sourceRoot = "Eternal 1.2.0";
+
+  meta = {
+    description =
+      "Picking up from the end of the Marathon trilogy, you find yourself suddenly ninety-four years in the future, in the year 2905";
+    homepage = "http://eternal.bungie.org/";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/alephone/evil/default.nix b/nixpkgs/pkgs/games/alephone/evil/default.nix
new file mode 100644
index 000000000000..a0120348c14e
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/evil/default.nix
@@ -0,0 +1,18 @@
+{ alephone, fetchurl, unrar }:
+
+alephone.makeWrapper rec {
+  pname = "marathon-evil";
+  version = "0";
+  desktopName = "Marathon-Evil";
+
+  zip = fetchurl {
+    url = "http://files3.bungie.org/trilogy/MarathonEvil.zip";
+    sha256 = "08nizbjp2rx10bpqrbhb76as0j2zynmy2c0qa5b482lz1szf9b95";
+  };
+
+  meta = {
+    description = "The first conversion for Marathon Infinity";
+    homepage = "https://alephone.lhowon.org/scenarios.html";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/alephone/infinity/default.nix b/nixpkgs/pkgs/games/alephone/infinity/default.nix
new file mode 100644
index 000000000000..c49f9a8d2ac7
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/infinity/default.nix
@@ -0,0 +1,25 @@
+{ alephone, fetchurl }:
+
+alephone.makeWrapper rec {
+  pname = "marathon-infinity";
+  desktopName = "Marathon-Infinity";
+  version = "20230119";
+  icon = alephone.icons + "/marathon-infinity.png";
+
+  zip = fetchurl {
+    url =
+      "https://github.com/Aleph-One-Marathon/alephone/releases/download/release-${version}/MarathonInfinity-${version}-Data.zip";
+    sha256 = "sha256-0+xokhzWdXM+L4DBjWnfNVXZve4n1X/Aq6rxNGAFb3Q=";
+  };
+
+  meta = {
+    description = "Third chapter of the Marathon trilogy";
+    longDescription = ''
+      Marathon Infinity takes the closed universe of the Marathon series and blows it wide open. The solo/co-op campaign, “Blood Tides of Lh’owon,†is a 20-level scenario sporting new textures, weapons, and aliens. More than that, the scenario sheds a surprising new light on the story’s characters and the meaning of events. Having defeated the Pfhor and reawakened the ancient remnants of the S’pht, the player now faces a world where friends become enemies and all is not what it seems…
+
+      Marathon Infinity is the most popular Marathon game in online play, and is compatible with hundreds of community-made maps. This release includes the classic graphics, and revamped high-definition textures and weapons.
+    '';
+    homepage = "https://alephone.lhowon.org/games/infinity.html";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/alephone/marathon/default.nix b/nixpkgs/pkgs/games/alephone/marathon/default.nix
new file mode 100644
index 000000000000..ea295b7dcdce
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/marathon/default.nix
@@ -0,0 +1,25 @@
+{ alephone, fetchurl }:
+
+alephone.makeWrapper rec {
+  pname = "marathon";
+  desktopName = "Marathon";
+  version = "20230119";
+  icon = alephone.icons + "/marathon.png";
+
+  zip = fetchurl {
+    url =
+      "https://github.com/Aleph-One-Marathon/alephone/releases/download/release-${version}/Marathon-${version}-Data.zip";
+    sha256 = "sha256-uz/1ZW9epd1HP/pzTNN3d2EEbOzjj0qpdMkrVoxb8Aw=";
+  };
+
+  meta = {
+    description = "First chapter of the Marathon trilogy";
+    longDescription = ''
+      Alien forces have boarded the interstellar colony ship Marathon. The situation is dire. As a security officer onboard, it is your duty to defend the ship and its crew.
+
+      Experience the start of Bungie’s iconic trilogy with Marathon. This release uses the original Marathon data files for the most authentic experience outside of a classic Mac or emulator.
+    '';
+    homepage = "https://alephone.lhowon.org/games/marathon.html";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/alephone/pathways-into-darkness/default.nix b/nixpkgs/pkgs/games/alephone/pathways-into-darkness/default.nix
new file mode 100644
index 000000000000..6c6de4b88e8f
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/pathways-into-darkness/default.nix
@@ -0,0 +1,19 @@
+{ alephone, fetchurl }:
+
+alephone.makeWrapper rec {
+  pname = "pathways-into-darkness";
+  desktopName = "Pathways-Into-Darkness";
+  version = "1.1.1";
+
+  zip = fetchurl {
+    url = "http://simplici7y.com/version/file/1185/AOPID_v1.1.1.zip";
+    sha256 = "0x83xjcw5n5s7sw8z6rb6zzhihjkjgk7x7ynnqq917dcklr7bz4g";
+  };
+
+  meta = {
+    description = ''
+      Port of the 1993 mac game "Pathways Into Darkness" by Bungie to the Aleph One engine'';
+    homepage = "http://simplici7y.com/items/aleph-one-pathways-into-darkness";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/alephone/pheonix/default.nix b/nixpkgs/pkgs/games/alephone/pheonix/default.nix
new file mode 100644
index 000000000000..90db1aa7c73d
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/pheonix/default.nix
@@ -0,0 +1,18 @@
+{ alephone, fetchurl }:
+
+alephone.makeWrapper rec {
+  pname = "marathon-pheonix";
+  desktopName = "Marathon-Pheonix";
+  version = "1.3";
+
+  zip = fetchurl {
+    url = "http://simplici7y.com/version/file/998/Marathon_Phoenix_1.3.zip";
+    sha256 = "1r06k0z8km7l9d3njinsrci4jhk8hrnjdcmjd8n5z2qxkqvhn9qj";
+  };
+
+  meta = {
+    description = "A 35-level single player major Marathon conversion";
+    homepage = "http://www.simplici7y.com/items/marathon-phoenix-2";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/alephone/red/default.nix b/nixpkgs/pkgs/games/alephone/red/default.nix
new file mode 100644
index 000000000000..f24c9010cd63
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/red/default.nix
@@ -0,0 +1,18 @@
+{ alephone, fetchurl, unrar }:
+
+alephone.makeWrapper rec {
+  pname = "marathon-red";
+  version = "0";
+  desktopName = "Marathon-Red";
+
+  zip = fetchurl {
+    url = "http://files3.bungie.org/trilogy/MarathonRED.zip";
+    sha256 = "1p13snlrvn39znvfkxql67crhysn71db2bwsfrkhjkq58wzs6qgw";
+  };
+
+  meta = {
+    description = "Survival horror-esque Marathon conversion";
+    homepage = "https://alephone.lhowon.org/scenarios.html";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/alephone/rubicon-x/default.nix b/nixpkgs/pkgs/games/alephone/rubicon-x/default.nix
new file mode 100644
index 000000000000..b59fa4cfeb62
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/rubicon-x/default.nix
@@ -0,0 +1,23 @@
+{ alephone, fetchurl }:
+
+alephone.makeWrapper rec {
+  pname = "rubicon-x";
+  version = "20150620";
+  desktopName = "Marathon-Rubicon-X";
+
+  zip = fetchurl {
+    url = "http://files5.bungie.org/marathon/marathonRubiconX.zip";
+    sha256 = "095si89wap76pvkvk90zqw7djhrhwb1anjm2s8i503jbcn5n4ipm";
+  };
+
+  sourceRoot = "Rubicon X Æ’";
+
+  meta = {
+    description = "Unofficial forth chapter of the Marathon series";
+    longDescription = ''
+      Rubicon X is a free, cross platform, first person shooter that continues the story of Bungie’s Marathon trilogy. First released as Marathon:Rubicon in 2001, Rubicon X is a complete overhaul of the original. It features all new high-resolution artwork, new and updated maps, and enough surprises to feel like a whole new game.
+    '';
+    homepage = "http://www.marathonrubicon.com/";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/alephone/yuge/default.nix b/nixpkgs/pkgs/games/alephone/yuge/default.nix
new file mode 100644
index 000000000000..6ae73f984a4f
--- /dev/null
+++ b/nixpkgs/pkgs/games/alephone/yuge/default.nix
@@ -0,0 +1,18 @@
+{ alephone, fetchurl }:
+
+alephone.makeWrapper rec {
+  pname = "yuge";
+  version = "0";
+  desktopName = "Marathon-Yuge";
+
+  zip = fetchurl {
+    url = "https://lochnits.com/marathon/yuge/files/Mararthon_Yuge.zip";
+    sha256 = "sha256-dZHInYThB/4igpAXbUadXwPvh2Fl3XGZ4ficg7IEnNc=";
+  };
+
+  meta = {
+    description =
+      "30 level Marathon scenario, plus 225 secret levels for many extra hours of gameplay";
+    homepage = "https://lochnits.com/marathon/yuge/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/alienarena/default.nix b/nixpkgs/pkgs/games/alienarena/default.nix
new file mode 100644
index 000000000000..39b232b267c3
--- /dev/null
+++ b/nixpkgs/pkgs/games/alienarena/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchsvn, pkg-config, libjpeg, libX11, libXxf86vm, curl, libogg
+, libvorbis, freetype, openal, libGL }:
+
+stdenv.mkDerivation rec {
+  pname = "alienarena";
+  version = "7.71.2";
+
+  src = fetchsvn {
+    url = "svn://svn.icculus.org/alienarena/trunk";
+    rev = "5673";
+    sha256 = "1qfrgrp7nznk5n1jqvjba6l1w8y2ixzyx9swkpvd02rdwlwrp9kw";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libjpeg libX11 curl libogg libvorbis
+                  freetype openal libGL libXxf86vm ];
+
+  patchPhase = ''
+    substituteInPlace ./configure \
+      --replace libopenal.so.1 ${openal}/lib/libopenal.so.1 \
+      --replace libGL.so.1 ${libGL}/lib/libGL.so.1
+  '';
+
+  meta = with lib; {
+    description = "A free, stand-alone first-person shooter computer game";
+    longDescription = ''
+      Do you like old school deathmatch with modern features? How
+      about rich, colorful, arcade-like atmospheres? How about retro
+      Sci-Fi? Then you're going to love what Alien Arena has in store
+      for you! This game combines some of the very best aspects of
+      such games as Quake III and Unreal Tournament and wraps them up
+      with a retro alien theme, while adding tons of original ideas to
+      make the game quite unique.
+    '';
+    homepage = "http://red.planetarena.org";
+    # Engine is under GPLv2, everything else is under
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ astsmtl ];
+    platforms = platforms.linux;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/amoeba/data.nix b/nixpkgs/pkgs/games/amoeba/data.nix
new file mode 100644
index 000000000000..193c710b31a1
--- /dev/null
+++ b/nixpkgs/pkgs/games/amoeba/data.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "amoeba-data";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/non-free/a/amoeba-data/amoeba-data_${version}.orig.tar.gz";
+    sha256 = "1bgclr1v63n14bj9nwzm5zxg48nm0cla9bq1rbd5ylxra18k0jbg";
+  };
+
+  installPhase = ''
+    mkdir -p $out/share/amoeba
+    cp demo.dat $out/share/amoeba/
+  '';
+
+  meta = with lib; {
+    description = "Fast-paced, polished OpenGL demonstration by Excess (data files)";
+    homepage = "https://packages.qa.debian.org/a/amoeba-data.html";
+    license = licenses.unfree;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/amoeba/default.nix b/nixpkgs/pkgs/games/amoeba/default.nix
new file mode 100644
index 000000000000..0e21a9a1b9ea
--- /dev/null
+++ b/nixpkgs/pkgs/games/amoeba/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, amoeba-data, alsa-lib, expat, freetype, gtk2, libvorbis, libGLU, xorg, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "amoeba";
+  version = "1.1";
+  debver = "29.1";
+
+  srcs = [
+    (fetchurl {
+      url = "http://http.debian.net/debian/pool/contrib/a/amoeba/amoeba_${version}.orig.tar.gz";
+      sha256 = "1hyycw4r36ryka2gab9vzkgs8gq4gqhk08vn29cwak95w0rahgim";
+    })
+    (fetchurl {
+      url = "http://http.debian.net/debian/pool/contrib/a/amoeba/amoeba_${version}-${debver}.debian.tar.xz";
+      sha256 = "1xgi2sqzq97w6hd3dcyq6cka8xmp6nr25qymzhk52cwqh7qb75p3";
+    })
+  ];
+  sourceRoot = "amoeba-1.1.orig";
+
+  prePatch = ''
+    patches="${./include-string-h.patch} $(echo ../debian/patches/*.diff)"
+  '';
+  postPatch = ''
+    sed -i packer/pakfile.cpp -e 's|/usr/share/amoeba|${amoeba-data}/share/amoeba|'
+    sed -i main/linux-config/linux-config.cpp -e 's|libgdk-x11-2.0.so.0|${gtk2}/lib/&|'
+    sed -i main/linux-config/linux-config.cpp -e 's|libgtk-x11-2.0.so.0|${gtk2}/lib/&|'
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ alsa-lib expat freetype gtk2 libvorbis libGLU xorg.libXxf86vm ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1/
+    cp amoeba $out/bin/
+    cp ../debian/amoeba.1 $out/share/man/man1/
+  '';
+
+  meta = with lib; {
+    description = "Fast-paced, polished OpenGL demonstration by Excess";
+    homepage = "https://packages.qa.debian.org/a/amoeba.html";
+    license = licenses.gpl2; # Engine is GPLv2, data files in amoeba-data nonfree
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/amoeba/include-string-h.patch b/nixpkgs/pkgs/games/amoeba/include-string-h.patch
new file mode 100644
index 000000000000..828cab88d989
--- /dev/null
+++ b/nixpkgs/pkgs/games/amoeba/include-string-h.patch
@@ -0,0 +1,12 @@
+diff --git a/image/png_image.cpp b/image/png_image.cpp
+index 37875fc..1531d6f 100644
+--- a/image/png_image.cpp
++++ b/image/png_image.cpp
+@@ -4,6 +4,7 @@
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <string.h>
+ 
+ #include <png.h>
+ #include "png_image.h"
diff --git a/nixpkgs/pkgs/games/among-sus/default.nix b/nixpkgs/pkgs/games/among-sus/default.nix
new file mode 100644
index 000000000000..be9ecc7adf57
--- /dev/null
+++ b/nixpkgs/pkgs/games/among-sus/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromSourcehut, port ? "1234" }:
+
+stdenv.mkDerivation {
+  pname = "among-sus-unstable";
+  version = "2021-05-19";
+
+  src = fetchFromSourcehut {
+    owner = "~martijnbraam";
+    repo = "among-sus";
+    rev = "554e60bf52e3fa931661b9414189a92bb8f69d78";
+    sha256 = "0j1158nczhvy5i1ykvzvhlv4ndhibgng0dq1lw2bmi8q6k1q1s0w";
+  };
+
+  patchPhase = ''
+    sed -i 's/port = 1234/port = ${port}/g' main.c
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -Dm755 among-sus $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~martijnbraam/among-sus";
+    description = "Among us, but it's a text adventure";
+    license = licenses.agpl3Plus;
+    maintainers = [ maintainers.eyjhb ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/andyetitmoves/default.nix b/nixpkgs/pkgs/games/andyetitmoves/default.nix
new file mode 100644
index 000000000000..ecd1dfc9b3cd
--- /dev/null
+++ b/nixpkgs/pkgs/games/andyetitmoves/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchurl, libvorbis, libogg, libtheora, SDL, libXft, SDL_image, zlib, libX11, libpng, openal, runtimeShell, requireFile, commercialVersion ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "andyetitmoves";
+  version = "1.2.2";
+
+  src =
+    if stdenv.hostPlatform.system == "i686-linux" || stdenv.hostPlatform.system == "x86_64-linux"
+    then
+      let
+        postfix = if stdenv.hostPlatform.system == "i686-linux" then "i386" else "x86_64";
+        commercialName = "${pname}-${version}_${postfix}.tar.gz";
+        demoUrl = "http://www.andyetitmoves.net/demo/${pname}Demo-${version}_${postfix}.tar.gz";
+      in
+      if commercialVersion
+      then
+        requireFile
+          {
+            message = ''
+              We cannot download the commercial version automatically, as you require a license.
+              Once you bought a license, you need to add your downloaded version to the nix store.
+              You can do this by using "nix-prefetch-url file:///\$PWD/${commercialName}" in the
+              directory where yousaved it.
+            '';
+            name = commercialName;
+            sha256 =
+              if stdenv.hostPlatform.system == "i686-linux"
+              then "15wvzmmidvykwjrbnq70h5jrvnjx1hcrm0357qj85q4aqbzavh01"
+              else "1v8z16qa9ka8sf7qq45knsxj87s6sipvv3a7xq11pb5xk08fb2ql";
+          }
+      else
+        fetchurl {
+          url = demoUrl;
+          sha256 =
+            if stdenv.hostPlatform.system == "i686-linux"
+            then "0f14vrrbq05hsbdajrb5y9za65fpng1lc8f0adb4aaz27x7sh525"
+            else "0mg41ya0b27blq3b5498kwl4rj46dj21rcd7qd0rw1kyvr7sx4v4";
+        }
+    else
+      throw "And Yet It Moves nix package only supports linux and intel cpu's.";
+
+  installPhase = ''
+    mkdir -p $out/{opt/andyetitmoves,bin}
+    cp -r * $out/opt/andyetitmoves/
+
+    fullPath=${stdenv.cc.cc.lib}/lib64
+    for i in $nativeBuildInputs; do
+      fullPath=$fullPath''${fullPath:+:}$i/lib
+    done
+
+    binName=${if commercialVersion then "AndYetItMoves" else "AndYetItMovesDemo"}
+
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) --set-rpath $fullPath $out/opt/andyetitmoves/lib/$binName
+    cat > $out/bin/$binName << EOF
+    #!${runtimeShell}
+    cd $out/opt/andyetitmoves
+    exec ./lib/$binName
+    EOF
+    chmod +x $out/bin/$binName
+  '';
+
+  buildInputs = [ libvorbis libogg libtheora SDL libXft SDL_image zlib libX11 libpng openal ];
+
+  meta = with lib; {
+    description = "Physics/Gravity Platform game";
+    longDescription = ''
+      And Yet It Moves is an award-winning physics-based platform game in which players rotate the game world at will to solve challenging puzzles. Tilting the world turns walls into floors, slides into platforms, and stacks of rocks into dangerous hazards.
+    '';
+    homepage = "http://www.andyetitmoves.net/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ bluescreen303 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/angband/default.nix b/nixpkgs/pkgs/games/angband/default.nix
new file mode 100644
index 000000000000..0b24988c54f2
--- /dev/null
+++ b/nixpkgs/pkgs/games/angband/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, ncurses5
+, enableSdl2 ? false, SDL2, SDL2_image, SDL2_sound, SDL2_mixer, SDL2_ttf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "angband";
+  version = "4.2.5";
+
+  src = fetchFromGitHub {
+    owner = "angband";
+    repo = "angband";
+    rev = version;
+    sha256 = "sha256-XH2FUTJJaH5TqV2UD1CKKAXE4CRAb6zfg1UQ79a15k0=";
+  };
+
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ncurses5 ]
+  ++ lib.optionals enableSdl2 [
+    SDL2
+    SDL2_image
+    SDL2_sound
+    SDL2_mixer
+    SDL2_ttf
+  ];
+
+  configureFlags = lib.optional enableSdl2 "--enable-sdl2";
+
+  installFlags = [ "bindir=$(out)/bin" ];
+
+  meta = with lib; {
+    homepage = "https://angband.github.io/angband";
+    description = "A single-player roguelike dungeon exploration game";
+    maintainers = [ maintainers.kenran ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/games/anki/Cargo.lock b/nixpkgs/pkgs/games/anki/Cargo.lock
new file mode 100644
index 000000000000..4c7b3ed81563
--- /dev/null
+++ b/nixpkgs/pkgs/games/anki/Cargo.lock
@@ -0,0 +1,5078 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56fc6cf8dc8c4158eed8649f9b8b0ea1518eb62b544fe9490d66fa0b349eafe9"
+
+[[package]]
+name = "ammonia"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e6d1c7838db705c9b756557ee27c384ce695a1c51a6fe528784cb1c6840170"
+dependencies = [
+ "html5ever",
+ "maplit",
+ "once_cell",
+ "tendril",
+ "url",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "anki"
+version = "0.0.0"
+dependencies = [
+ "ammonia",
+ "anki_i18n",
+ "anki_io",
+ "anki_proto",
+ "anki_proto_gen",
+ "anyhow",
+ "async-compression",
+ "async-stream",
+ "async-trait",
+ "axum",
+ "axum-client-ip",
+ "blake3",
+ "bytes",
+ "chrono",
+ "coarsetime",
+ "convert_case",
+ "criterion",
+ "csv",
+ "data-encoding",
+ "difflib",
+ "dirs",
+ "envy",
+ "flate2",
+ "fluent",
+ "fluent-bundle",
+ "fnv",
+ "futures",
+ "hex",
+ "htmlescape",
+ "hyper",
+ "id_tree",
+ "inflections",
+ "itertools 0.11.0",
+ "lazy_static",
+ "nom",
+ "num_cpus",
+ "num_enum",
+ "once_cell",
+ "percent-encoding-iri",
+ "phf 0.11.2",
+ "pin-project",
+ "prettyplease 0.2.9",
+ "prost",
+ "prost-reflect",
+ "pulldown-cmark 0.9.3",
+ "rand 0.8.5",
+ "regex",
+ "reqwest",
+ "rusqlite",
+ "scopeguard",
+ "serde",
+ "serde-aux",
+ "serde_json",
+ "serde_repr",
+ "serde_tuple",
+ "sha1",
+ "snafu",
+ "strum",
+ "syn 2.0.22",
+ "tempfile",
+ "tokio",
+ "tokio-util",
+ "tower-http",
+ "tracing",
+ "tracing-appender",
+ "tracing-subscriber",
+ "unic-ucd-category",
+ "unicase",
+ "unicode-normalization",
+ "utime",
+ "windows",
+ "wiremock",
+ "zip",
+ "zstd",
+]
+
+[[package]]
+name = "anki-sync-server"
+version = "0.0.0"
+dependencies = [
+ "anki",
+]
+
+[[package]]
+name = "anki_i18n"
+version = "0.0.0"
+dependencies = [
+ "anki_io",
+ "anyhow",
+ "fluent",
+ "fluent-bundle",
+ "fluent-syntax",
+ "inflections",
+ "intl-memoizer",
+ "itertools 0.11.0",
+ "num-format",
+ "phf 0.11.2",
+ "serde",
+ "serde_json",
+ "unic-langid",
+]
+
+[[package]]
+name = "anki_io"
+version = "0.0.0"
+dependencies = [
+ "camino",
+ "snafu",
+ "tempfile",
+]
+
+[[package]]
+name = "anki_process"
+version = "0.0.0"
+dependencies = [
+ "itertools 0.11.0",
+ "snafu",
+]
+
+[[package]]
+name = "anki_proto"
+version = "0.0.0"
+dependencies = [
+ "anki_io",
+ "anki_proto_gen",
+ "anyhow",
+ "inflections",
+ "itertools 0.11.0",
+ "prost",
+ "prost-build",
+ "prost-reflect",
+ "prost-types",
+ "serde",
+ "snafu",
+ "strum",
+]
+
+[[package]]
+name = "anki_proto_gen"
+version = "0.0.0"
+dependencies = [
+ "anki_io",
+ "anyhow",
+ "camino",
+ "inflections",
+ "itertools 0.11.0",
+ "once_cell",
+ "prost-reflect",
+ "prost-types",
+ "regex",
+ "walkdir",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "apple-bundles"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "716b8a7bacf7325eb3e7a1a7f5ead4da91e1e16d9b56a25edea0e1e4ba21fd8e"
+dependencies = [
+ "anyhow",
+ "plist",
+ "simple-file-manifest",
+ "walkdir",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "assert-json-diff"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0122885821398cc923ece939e24d1056a2384ee719432397fa9db87230ff11"
+dependencies = [
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "zstd",
+ "zstd-safe",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "axum"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "axum-macros",
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-util",
+ "headers",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "multer",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_urlencoded",
+ "sync_wrapper",
+ "tokio",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-client-ip"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8e81eacc93f36480825da5f46a33b5fb2246ed024eacc9e8933425b80c5807"
+dependencies = [
+ "axum",
+ "forwarded-header-value",
+ "serde",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-macros"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bb524613be645939e280b7279f7b017f98cf7f5ef084ec374df373530e73277"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
+
+[[package]]
+name = "blake3"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729b71f35bd3fa1a4c86b85d32c8b9069ea7fe14f7a53cfabb65f62d4265b888"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "cc",
+ "cfg-if",
+ "constant_time_eq",
+ "digest",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata 0.1.10",
+ "serde",
+]
+
+[[package]]
+name = "bstr"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5"
+dependencies = [
+ "memchr",
+ "once_cell",
+ "regex-automata 0.1.10",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "camino"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cbc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "winapi",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
+name = "clap"
+version = "4.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "384e169cc618c613d5e3ca6404dda77a8685a63e08660dcc64abaf7da7cb0c7a"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef137bbe35aab78bdb468ccfba75a5f4d8321ae011d34063770780545176af2d"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "once_cell",
+ "strsim",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6b5c519bab3ea61843a7923d074b04245624bb84a64a8c150f5deb014e388b"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "coarsetime"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a90d114103adbc625300f346d4d09dfb4ab1c4a8df6868435dd903392ecf4354"
+dependencies = [
+ "libc",
+ "once_cell",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "codespan"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3362992a0d9f1dd7c3d0e89e0ab2bb540b7a95fea8cd798090e758fda2899b5e"
+dependencies = [
+ "codespan-reporting",
+ "serde",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "serde",
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "configure"
+version = "0.0.0"
+dependencies = [
+ "anyhow",
+ "itertools 0.11.0",
+ "ninja_gen",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6"
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+dependencies = [
+ "anes",
+ "cast",
+ "ciborium",
+ "clap",
+ "criterion-plot",
+ "is-terminal",
+ "itertools 0.10.5",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "csv"
+version = "1.1.6"
+source = "git+https://github.com/ankitects/rust-csv.git?rev=1c9d3aab6f79a7d815c69f925a46a4590c115f90#1c9d3aab6f79a7d815c69f925a46a4590c115f90"
+dependencies = [
+ "bstr 0.2.17",
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "git+https://github.com/ankitects/rust-csv.git?rev=1c9d3aab6f79a7d815c69f925a46a4590c115f90#1c9d3aab6f79a7d815c69f925a46a4590c115f90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
+[[package]]
+name = "deadpool"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "421fe0f90f2ab22016f32a9881be5134fdd71c65298917084b0c7477cbc3856e"
+dependencies = [
+ "async-trait",
+ "deadpool-runtime",
+ "num_cpus",
+ "retain_mut",
+ "tokio",
+]
+
+[[package]]
+name = "deadpool-runtime"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1"
+
+[[package]]
+name = "des"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdd80ce8ce993de27e9f063a444a4d53ce8e8db4c1f00cc03af5ad5a9867a1e"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "duct"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ae3fc31835f74c2a7ceda3aeede378b0ae2e74c8f1c36559fcc9ae2a4e7d3e"
+dependencies = [
+ "libc",
+ "once_cell",
+ "os_pipe",
+ "shared_child",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "elasticlunr-rs"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41e83863a500656dfa214fee6682de9c5b9f03de6860fec531235ed2ae9f6571"
+dependencies = [
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "envy"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "find-winsdk"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8cbf17b871570c1f8612b763bac3e86290602bcf5dc3c5ce657e0e1e9071d9e"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "winreg 0.5.1",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fluent"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61f69378194459db76abd2ce3952b790db103ceb003008d3d50d97c41ff847a7"
+dependencies = [
+ "fluent-bundle",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-bundle"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd"
+dependencies = [
+ "fluent-langneg",
+ "fluent-syntax",
+ "intl-memoizer",
+ "intl_pluralrules",
+ "rustc-hash",
+ "self_cell",
+ "smallvec",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-langneg"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-syntax"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "forwarded-header-value"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9"
+dependencies = [
+ "nonempty",
+ "thiserror",
+]
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ftl"
+version = "0.0.0"
+dependencies = [
+ "anki_io",
+ "anki_process",
+ "anyhow",
+ "camino",
+ "clap",
+ "fluent-syntax",
+ "itertools 0.11.0",
+ "lazy_static",
+ "regex",
+ "serde_json",
+ "snafu",
+ "walkdir",
+]
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
+dependencies = [
+ "aho-corasick 0.7.20",
+ "bstr 1.5.0",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "handlebars"
+version = "4.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d"
+dependencies = [
+ "log",
+ "pest",
+ "pest_derive",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f"
+dependencies = [
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "headers"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "bytes",
+ "headers-core",
+ "http",
+ "httpdate",
+ "mime",
+ "sha1",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+dependencies = [
+ "http",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "htmlescape"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163"
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range-header"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
+
+[[package]]
+name = "http-types"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad"
+dependencies = [
+ "anyhow",
+ "async-channel",
+ "base64 0.13.1",
+ "futures-lite",
+ "http",
+ "infer",
+ "pin-project-lite",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "serde_urlencoded",
+ "url",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "id_tree"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcd9db8dd5be8bde5a2624ed4b2dfb74368fe7999eb9c4940fd3ca344b61071a"
+dependencies = [
+ "snowflake",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "indoc"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306"
+
+[[package]]
+name = "infer"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
+
+[[package]]
+name = "inflections"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a"
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "block-padding",
+ "generic-array",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "intl-memoizer"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f"
+dependencies = [
+ "type-map",
+ "unic-langid",
+]
+
+[[package]]
+name = "intl_pluralrules"
+version = "7.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24fddda5af7e54bf7da53067d6e802dbcc381d0a8eef629df528e3ebf68755cb"
+dependencies = [
+ "hermit-abi",
+ "rustix 0.38.1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "junction"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca39ef0d69b18e6a2fd14c2f0a1d593200f4a4ed949b240b5917ab51fac754cb"
+dependencies = [
+ "scopeguard",
+ "winapi",
+]
+
+[[package]]
+name = "kqueue"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "line-wrap"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
+dependencies = [
+ "safemem",
+]
+
+[[package]]
+name = "linkcheck"
+version = "0.4.1"
+source = "git+https://github.com/ankitects/linkcheck.git?rev=184b2ca50ed39ca43da13f0b830a463861adb9ca#184b2ca50ed39ca43da13f0b830a463861adb9ca"
+dependencies = [
+ "bytes",
+ "codespan",
+ "dunce",
+ "futures",
+ "html5ever",
+ "http",
+ "lazy_static",
+ "linkify",
+ "log",
+ "markup5ever_rcdom",
+ "mdbook",
+ "pulldown-cmark 0.8.0",
+ "regex",
+ "reqwest",
+ "serde",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "linkchecker"
+version = "0.0.0"
+dependencies = [
+ "anki",
+ "futures",
+ "itertools 0.11.0",
+ "lazy_static",
+ "linkcheck",
+ "regex",
+ "reqwest",
+ "strum",
+ "tokio",
+]
+
+[[package]]
+name = "linkify"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04d828fdc1ffceb369a5a9183bd4df2dbb3678f40c8b3fbaa9231de32beb29f9"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "lzma-sys"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "makeapp"
+version = "0.0.0"
+dependencies = [
+ "anyhow",
+ "apple-bundles",
+ "camino",
+ "clap",
+ "glob",
+ "plist",
+ "serde",
+ "serde_json",
+ "simple-file-manifest",
+ "walkdir",
+]
+
+[[package]]
+name = "makeinstall"
+version = "0.0.0"
+dependencies = [
+ "anyhow",
+ "camino",
+ "clap",
+ "tugger-windows-codesign",
+ "walkdir",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "markup5ever"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
+dependencies = [
+ "log",
+ "phf 0.10.1",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "markup5ever_rcdom"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9521dd6750f8e80ee6c53d65e2e4656d7de37064f3a7a5d2d11d05df93839c2"
+dependencies = [
+ "html5ever",
+ "markup5ever",
+ "tendril",
+ "xml5ever",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
+[[package]]
+name = "mdbook"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b67ee4a744f36e6280792016c17e69921b51df357181d1eb17d620fcc3609f3"
+dependencies = [
+ "ammonia",
+ "anyhow",
+ "chrono",
+ "clap",
+ "clap_complete",
+ "elasticlunr-rs",
+ "env_logger",
+ "futures-util",
+ "handlebars",
+ "ignore",
+ "log",
+ "memchr",
+ "notify",
+ "notify-debouncer-mini",
+ "once_cell",
+ "opener",
+ "pulldown-cmark 0.9.3",
+ "regex",
+ "serde",
+ "serde_json",
+ "shlex",
+ "tempfile",
+ "tokio",
+ "toml",
+ "topological-sort",
+ "warp",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minilints"
+version = "0.0.0"
+dependencies = [
+ "anki_io",
+ "anki_process",
+ "anyhow",
+ "camino",
+ "once_cell",
+ "walkdir",
+ "which",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "multer"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2"
+dependencies = [
+ "bytes",
+ "encoding_rs",
+ "futures-util",
+ "http",
+ "httparse",
+ "log",
+ "memchr",
+ "mime",
+ "spin 0.9.8",
+ "version_check",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "ninja_gen"
+version = "0.0.0"
+dependencies = [
+ "anki_io",
+ "anyhow",
+ "camino",
+ "globset",
+ "itertools 0.11.0",
+ "lazy_static",
+ "maplit",
+ "num_cpus",
+ "walkdir",
+ "which",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nonempty"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7"
+
+[[package]]
+name = "notify"
+version = "5.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "mio",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "notify-debouncer-mini"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e23e9fa24f094b143c1eb61f90ac6457de87be6987bc70746e0179f7dbc9007b"
+dependencies = [
+ "crossbeam-channel",
+ "notify",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-format"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3"
+dependencies = [
+ "arrayvec",
+ "itoa",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "object"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "opener"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "293c15678e37254c15bd2f092314abb4e51d7fdde05c2021279c12631b54f005"
+dependencies = [
+ "bstr 1.5.0",
+ "winapi",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "p12"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4873306de53fe82e7e484df31e1e947d61514b6ea2ed6cd7b45d63006fd9224"
+dependencies = [
+ "cbc",
+ "cipher",
+ "des",
+ "getrandom 0.2.10",
+ "hmac",
+ "lazy_static",
+ "rc2",
+ "sha1",
+ "yasna",
+]
+
+[[package]]
+name = "parking"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec",
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "pem"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "percent-encoding-iri"
+version = "2.2.0"
+source = "git+https://github.com/ankitects/rust-url.git?rev=bb930b8d089f4d30d7d19c12e54e66191de47b88#bb930b8d089f4d30d7d19c12e54e66191de47b88"
+
+[[package]]
+name = "pest"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f73935e4d55e2abf7f130186537b19e7a4abc886a0252380b59248af473a3fc9"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aef623c9bbfa0eedf5a0efba11a5ee83209c326653ca31ff019bec3a95bfff2b"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3e8cba4ec22bada7fc55ffe51e2deb6a0e0db2d0b7ab0b103acc80d2510c190"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01f71cb40bd8bb94232df14b946909e14660e33fc05db3e50ae2a82d7ea0ca0"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
+dependencies = [
+ "fixedbitset",
+ "indexmap 1.9.3",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_macros",
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared 0.11.2",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
+dependencies = [
+ "phf_generator 0.11.2",
+ "phf_shared 0.11.2",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e138fdd8263907a2b0e1b4e80b7e58c721126479b6e6eedfb1b402acea7b9bd"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1fef411b303e3e12d534fb6e7852de82da56edd937d895125821fb7c09436c7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "plist"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590"
+dependencies = [
+ "base64 0.21.2",
+ "indexmap 1.9.3",
+ "line-wrap",
+ "quick-xml",
+ "serde",
+ "time",
+]
+
+[[package]]
+name = "plotters"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9825a04601d60621feed79c4e6b56d65db77cdca55cef43b46b0de1096d1c282"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
+dependencies = [
+ "bytes",
+ "heck",
+ "itertools 0.10.5",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prettyplease 0.1.25",
+ "prost",
+ "prost-types",
+ "regex",
+ "syn 1.0.109",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
+dependencies = [
+ "anyhow",
+ "itertools 0.10.5",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-reflect"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "000e1e05ebf7b26e1eba298e66fe4eee6eb19c567d0ffb35e0dd34231cdac4c8"
+dependencies = [
+ "once_cell",
+ "prost",
+ "prost-types",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
+dependencies = [
+ "prost",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8"
+dependencies = [
+ "bitflags 1.3.2",
+ "getopts",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998"
+dependencies = [
+ "bitflags 1.3.2",
+ "getopts",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "pyo3"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cffef52f74ec3b1a1baf295d9b8fcc3070327aefc39a6d00656b13c1d0b8885c"
+dependencies = [
+ "cfg-if",
+ "indoc",
+ "libc",
+ "memoffset",
+ "parking_lot",
+ "pyo3-build-config",
+ "pyo3-ffi",
+ "pyo3-macros",
+ "unindent",
+]
+
+[[package]]
+name = "pyo3-build-config"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713eccf888fb05f1a96eb78c0dbc51907fee42b3377272dc902eb38985f418d5"
+dependencies = [
+ "once_cell",
+ "target-lexicon",
+]
+
+[[package]]
+name = "pyo3-ffi"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b2ecbdcfb01cbbf56e179ce969a048fd7305a66d4cdf3303e0da09d69afe4c3"
+dependencies = [
+ "libc",
+ "pyo3-build-config",
+]
+
+[[package]]
+name = "pyo3-macros"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b78fdc0899f2ea781c463679b20cb08af9247febc8d052de941951024cd8aea0"
+dependencies = [
+ "proc-macro2",
+ "pyo3-macros-backend",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pyo3-macros-backend"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60da7b84f1227c3e2fe7593505de274dcf4c8928b4e0a1c23d551a14e4e80a0f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.10",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rc2"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62c64daa8e9438b84aaae55010a93f396f8e60e3911590fcba770d04643fc1dd"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "rcgen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b"
+dependencies = [
+ "pem",
+ "ring",
+ "time",
+ "yasna",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.10",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
+dependencies = [
+ "aho-corasick 1.0.2",
+ "memchr",
+ "regex-automata 0.3.4",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7b6d6190b7594385f61bd3911cd1be99dfddcfc365a4160cc2ab5bff4aed294"
+dependencies = [
+ "aho-corasick 1.0.2",
+ "memchr",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.2",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-native-certs",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "tokio-socks",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "webpki-roots",
+ "winreg 0.10.1",
+]
+
+[[package]]
+name = "retain_mut"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0"
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rsbridge"
+version = "0.0.0"
+dependencies = [
+ "anki",
+ "pyo3",
+]
+
+[[package]]
+name = "runner"
+version = "0.0.0"
+dependencies = [
+ "anki_io",
+ "anyhow",
+ "camino",
+ "clap",
+ "flate2",
+ "junction",
+ "reqwest",
+ "sha2",
+ "tar",
+ "termcolor",
+ "tokio",
+ "which",
+ "xz2",
+ "zip",
+ "zstd",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2"
+dependencies = [
+ "bitflags 2.3.3",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25693a73057a1b4cb56179dd3c7ea21a7c6c5ee7d85781f5749b46f34b79c"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbc6396159432b5c8490d4e301d8c705f61860b8b6c863bf79942ce5401968f3"
+dependencies = [
+ "bitflags 2.3.3",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.3",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "self_cell"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af"
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "serde"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-aux"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3dfe1b7eb6f9dcf011bd6fad169cdeaae75eda0d61b1a99a3f015b41b0cae39"
+dependencies = [
+ "chrono",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6"
+dependencies = [
+ "percent-encoding",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "serde_tuple"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f025b91216f15a2a32aa39669329a475733590a015835d1783549a56d09427"
+dependencies = [
+ "serde",
+ "serde_tuple_macros",
+]
+
+[[package]]
+name = "serde_tuple_macros"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4076151d1a2b688e25aaf236997933c66e18b870d0369f8b248b8ab2be630d7e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shared_child"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simple-file-manifest"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dd19be0257552dd56d1bb6946f89f193c6e5b9f13cc9327c4bc84a357507c74"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "snafu"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045"
+dependencies = [
+ "backtrace",
+ "doc-comment",
+ "snafu-derive",
+]
+
+[[package]]
+name = "snafu-derive"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "snowflake"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27207bb65232eda1f588cf46db2fee75c0808d557f6b3cf19a75f5d6d7c94df1"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9f3bd7d2e45dcc5e265fbb88d6513e4747d8ef9444cf01a533119bce28a157"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1c7f239eb94671427157bd93b3694320f3668d4e1eff08c7285366fd777fac"
+
+[[package]]
+name = "tempfile"
+version = "3.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.37.21",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix 0.37.21",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd"
+dependencies = [
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ac3f5b6856e931e15e07b478e98c8045239829a65f9156d4fa7e7788197a5ef"
+dependencies = [
+ "displaydoc",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
+dependencies = [
+ "autocfg",
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-socks"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0"
+dependencies = [
+ "either",
+ "futures-util",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd"
+dependencies = [
+ "futures-util",
+ "log",
+ "tokio",
+ "tungstenite",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+
+[[package]]
+name = "toml_edit"
+version = "0.19.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266f016b7f039eec8a1a80dfe6156b633d208b9fccca5e4db1d6775b0c4e34a7"
+dependencies = [
+ "indexmap 2.0.0",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "topological-sort"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d"
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8bd22a874a2d0b70452d5597b12c537331d49060824a95f49f108994f94aa4c"
+dependencies = [
+ "bitflags 2.3.3",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-range-header",
+ "pin-project-lite",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-appender"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e"
+dependencies = [
+ "crossbeam-channel",
+ "time",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "tugger-common"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f90d950380afdb1a6bbe74f29485a04e821869dfad11f5929ff1c5b1dac09d02"
+dependencies = [
+ "anyhow",
+ "fs2",
+ "glob",
+ "hex",
+ "log",
+ "once_cell",
+ "reqwest",
+ "sha2",
+ "tempfile",
+ "url",
+ "zip",
+]
+
+[[package]]
+name = "tugger-windows"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9f181ac4fc7f8facfd418824d13045cd068ee73de44319a6116868c22789782"
+dependencies = [
+ "anyhow",
+ "duct",
+ "find-winsdk",
+ "glob",
+ "once_cell",
+ "semver",
+ "tugger-common",
+ "winapi",
+]
+
+[[package]]
+name = "tugger-windows-codesign"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed3f09f8bdace495373cec3fc607bc39f00720a984ba82e310cc9382462fd364"
+dependencies = [
+ "anyhow",
+ "duct",
+ "log",
+ "p12",
+ "rcgen",
+ "time",
+ "tugger-common",
+ "tugger-windows",
+ "yasna",
+]
+
+[[package]]
+name = "tungstenite"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "bytes",
+ "http",
+ "httparse",
+ "log",
+ "rand 0.8.5",
+ "sha1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "type-map"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46"
+dependencies = [
+ "rustc-hash",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-langid"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "398f9ad7239db44fd0f80fe068d12ff22d78354080332a5077dc6f52f14dcf2f"
+dependencies = [
+ "unic-langid-impl",
+ "unic-langid-macros",
+]
+
+[[package]]
+name = "unic-langid-impl"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e35bfd2f2b8796545b55d7d3fd3e89a0613f68a0d1c8bc28cb7ff96b411a35ff"
+dependencies = [
+ "tinystr",
+]
+
+[[package]]
+name = "unic-langid-macros"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "055e618bf694161ffff0466d95cef3e1a5edc59f6ba1888e97801f2b4ebdc4fe"
+dependencies = [
+ "proc-macro-hack",
+ "tinystr",
+ "unic-langid-impl",
+ "unic-langid-macros-impl",
+]
+
+[[package]]
+name = "unic-langid-macros-impl"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f5cdec05b907f4e2f6843f4354f4ce6a5bebe1a56df320a49134944477ce4d8"
+dependencies = [
+ "proc-macro-hack",
+ "quote",
+ "syn 1.0.109",
+ "unic-langid-impl",
+]
+
+[[package]]
+name = "unic-ucd-category"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b8d4591f5fcfe1bd4453baaf803c40e1b1e69ff8455c47620440b46efef91c0"
+dependencies = [
+ "matches",
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unindent"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "utime"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91baa0c65eabd12fcbdac8cc35ff16159cab95cae96d0222d6d0271db6193cef"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "warp"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba431ef570df1287f7f8b07e376491ad54f84d26ac473489427231e1718e1f69"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "headers",
+ "http",
+ "hyper",
+ "log",
+ "mime",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project",
+ "rustls-pemfile",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-stream",
+ "tokio-tungstenite",
+ "tokio-util",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "wasm-streams"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca0ace3845f0d96209f0375e6d367e3eb87eb65d27d445bdc9f1843a26f39448"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a"
+dependencies = [
+ "serde",
+ "winapi",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "wiremock"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6f71803d3a1c80377a06221e0530be02035d5b3e854af56c6ece7ac20ac441d"
+dependencies = [
+ "assert-json-diff",
+ "async-trait",
+ "base64 0.21.2",
+ "deadpool",
+ "futures",
+ "futures-timer",
+ "http-types",
+ "hyper",
+ "log",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "tokio",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xml5ever"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4034e1d05af98b51ad7214527730626f019682d797ba38b51689212118d8e650"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+]
+
+[[package]]
+name = "xz2"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
+dependencies = [
+ "lzma-sys",
+]
+
+[[package]]
+name = "yasna"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd"
+dependencies = [
+ "time",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "byteorder",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "time",
+]
+
+[[package]]
+name = "zstd"
+version = "0.12.3+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.5+zstd.1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.8+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/games/anki/bin.nix b/nixpkgs/pkgs/games/anki/bin.nix
new file mode 100644
index 000000000000..133622e6eb46
--- /dev/null
+++ b/nixpkgs/pkgs/games/anki/bin.nix
@@ -0,0 +1,93 @@
+{ fetchurl, stdenv, lib, buildFHSEnv, appimageTools, writeShellScript, anki, undmg, zstd, commandLineArgs ? [] }:
+
+let
+  pname = "anki-bin";
+  # Update hashes for both Linux and Darwin!
+  version = "2.1.66";
+
+  sources = {
+    linux = fetchurl {
+      url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-linux-qt6.tar.zst";
+      sha256 = "sha256-P1PEKz0vblPxiLri34QrP0+qOsltJsvPL2JVmYj1wFg=";
+    };
+
+    # For some reason anki distributes completely separate dmg-files for the aarch64 version and the x86_64 version
+    darwin-x86_64 = fetchurl {
+      url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-intel-qt6.dmg";
+      sha256 = "sha256-cFYuw+ZSQd5Rw+x7eIKEDzV9UyvuxX3iZ8drmtQNZ78=";
+    };
+    darwin-aarch64 = fetchurl {
+      url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-apple-qt6.dmg";
+      sha256 = "sha256-0xtHT0rq7QnHqhIySpBKtO+kMAu88Q5nWmWvMSxVtBo=";
+    };
+  };
+
+  unpacked = stdenv.mkDerivation {
+    inherit pname version;
+
+    nativeBuildInputs = [ zstd ];
+    src = sources.linux;
+
+    installPhase = ''
+      runHook preInstall
+
+      xdg-mime () {
+        echo Stubbed!
+      }
+      export -f xdg-mime
+
+      PREFIX=$out bash install.sh
+
+      runHook postInstall
+    '';
+  };
+
+  meta = with lib; {
+    inherit (anki.meta) license homepage description longDescription;
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    maintainers = with maintainers; [ mahmoudk1000 atemu ];
+  };
+
+  passthru = { inherit sources; };
+
+  fhsEnvAnki = buildFHSEnv (appimageTools.defaultFhsEnvArgs // {
+    inherit pname version;
+    name = null; # Appimage sets it to "appimage-env"
+
+    # Dependencies of anki
+    targetPkgs = pkgs: (with pkgs; [ xorg.libxkbfile xcb-util-cursor-HEAD krb5 ]);
+
+    runScript = writeShellScript "anki-wrapper.sh" ''
+      exec ${unpacked}/bin/anki ${ lib.strings.escapeShellArgs commandLineArgs } "$@"
+    '';
+
+    extraInstallCommands = ''
+      ln -s ${pname} $out/bin/anki
+
+      mkdir -p $out/share
+      cp -R ${unpacked}/share/applications \
+        ${unpacked}/share/man \
+        ${unpacked}/share/pixmaps \
+        $out/share/
+    '';
+
+    inherit meta passthru;
+  });
+in
+
+if stdenv.isLinux then fhsEnvAnki
+else stdenv.mkDerivation {
+  inherit pname version passthru;
+
+  src = if stdenv.isAarch64 then sources.darwin-aarch64 else sources.darwin-x86_64;
+
+  nativeBuildInputs = [ undmg ];
+  sourceRoot = ".";
+
+  installPhase = ''
+    mkdir -p $out/Applications/
+    cp -a Anki.app $out/Applications/
+  '';
+
+  inherit meta;
+}
diff --git a/nixpkgs/pkgs/games/anki/default.nix b/nixpkgs/pkgs/games/anki/default.nix
new file mode 100644
index 000000000000..b2be643b60ee
--- /dev/null
+++ b/nixpkgs/pkgs/games/anki/default.nix
@@ -0,0 +1,290 @@
+{ lib
+, stdenv
+
+, buildEnv
+, cargo
+, fetchFromGitHub
+, fetchYarnDeps
+, fixup_yarn_lock
+, installShellFiles
+, lame
+, mpv-unwrapped
+, ninja
+, nodejs
+, nodejs-slim
+, protobuf
+, python3
+, qt6
+, rsync
+, rustPlatform
+, writeShellScriptBin
+, yarn
+
+, AVKit
+, CoreAudio
+, swift
+}:
+
+let
+  pname = "anki";
+  version = "2.1.66";
+  rev = "70506aeb99d4afbe73321feaf75a2fabaa011d55";
+
+  src = fetchFromGitHub {
+    owner = "ankitects";
+    repo = "anki";
+    rev = version;
+    hash = "sha256-eE64i/jTMvipakbQXzKu/dN+dyim7E4M+eP3d9GZhII=";
+    fetchSubmodules = true;
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "csv-1.1.6" = "sha256-w728ffOVkI+IfK6FbmkGhr0CjuyqgJnPB1kutMJIUYg=";
+      "linkcheck-0.4.1" = "sha256-S93J1cDzMlzDjcvz/WABmv8CEC6x78E+f7nzhsN7NkE=";
+      "percent-encoding-iri-2.2.0" = "sha256-kCBeS1PNExyJd4jWfDfctxq6iTdAq69jtxFQgCCQ8kQ=";
+    };
+  };
+
+  yarnOfflineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-3DUiwGTg7Nzd+bPJlc8aUW8bYrl7BF+CcjqkF6nW0qc=";
+  };
+
+  anki-build-python = python3.withPackages (ps: with ps; [
+    mypy-protobuf
+  ]);
+
+  # anki shells out to git to check its revision, and also to update submodules
+  # We don't actually need the submodules, so we stub that out
+  fakeGit = writeShellScriptBin "git" ''
+    case "$*" in
+      "rev-parse --short=8 HEAD")
+        echo ${builtins.substring 0 8 rev}
+      ;;
+      *"submodule update "*)
+        exit 0
+      ;;
+      *)
+        echo "Unrecognized git: $@"
+        exit 1
+      ;;
+    esac
+  '';
+
+  # We don't want to run pip-sync, it does network-io
+  fakePipSync = writeShellScriptBin "pip-sync" ''
+    exit 0
+  '';
+
+  offlineYarn = writeShellScriptBin "yarn" ''
+    [[ "$1" == "install" ]] && exit 0
+    exec ${yarn}/bin/yarn --offline "$@"
+  '';
+
+  pyEnv = buildEnv {
+    name = "anki-pyenv-${version}";
+    paths = with python3.pkgs; [
+      pip
+      fakePipSync
+      anki-build-python
+    ];
+    pathsToLink = [ "/bin" ];
+  };
+
+  # https://discourse.nixos.org/t/mkyarnpackage-lockfile-has-incorrect-entry/21586/3
+  anki-nodemodules = stdenv.mkDerivation {
+    pname = "anki-nodemodules";
+
+    inherit version src yarnOfflineCache;
+
+    nativeBuildInputs = [
+      fixup_yarn_lock
+      nodejs-slim
+      yarn
+    ];
+
+    configurePhase = ''
+      export HOME=$NIX_BUILD_TOP
+      yarn config --offline set yarn-offline-mirror $yarnOfflineCache
+      fixup_yarn_lock yarn.lock
+      yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
+      patchShebangs node_modules/
+    '';
+
+    installPhase = ''
+      mv node_modules $out
+    '';
+  };
+in
+python3.pkgs.buildPythonApplication {
+  inherit pname version;
+
+  outputs = [ "doc" "man" "out" ];
+
+  inherit src;
+
+  patches = [
+    ./patches/gl-fixup.patch
+    ./patches/no-update-check.patch
+    ./patches/skip-formatting-python-code.patch
+  ];
+
+  inherit cargoDeps yarnOfflineCache;
+
+  nativeBuildInputs = [
+    fakeGit
+    fixup_yarn_lock
+    offlineYarn
+
+    cargo
+    installShellFiles
+    ninja
+    qt6.wrapQtAppsHook
+    rsync
+    rustPlatform.cargoSetupHook
+  ] ++ lib.optional stdenv.isDarwin swift;
+
+  buildInputs = [
+    qt6.qtbase
+  ] ++ lib.optional stdenv.isLinux qt6.qtwayland;
+
+  propagatedBuildInputs = with python3.pkgs; [
+    # This rather long list came from running:
+    #    grep --no-filename -oE "^[^ =]*" python/{requirements.base.txt,requirements.bundle.txt,requirements.qt6_4.txt} | \
+    #      sort | uniq | grep -v "^#$"
+    # in their repo at the git tag for this version
+    # There's probably a more elegant way, but the above extracted all the
+    # names, without version numbers, of their python dependencies. The hope is
+    # that nixpkgs versions are "close enough"
+    # I then removed the ones the check phase failed on (pythonCatchConflictsPhase)
+    beautifulsoup4
+    certifi
+    charset-normalizer
+    click
+    colorama
+    decorator
+    distro
+    flask
+    flask-cors
+    idna
+    importlib-metadata
+    itsdangerous
+    jinja2
+    jsonschema
+    markdown
+    markupsafe
+    orjson
+    pep517
+    pyparsing
+    pyqt6
+    pyqt6-sip
+    pyqt6-webengine
+    pyrsistent
+    pysocks
+    python3.pkgs.protobuf
+    requests
+    send2trash
+    six
+    soupsieve
+    urllib3
+    waitress
+    werkzeug
+    zipp
+  ] ++ lib.optionals stdenv.isDarwin [
+    AVKit
+    CoreAudio
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [ pytest mock astroid ];
+
+  # tests fail with to many open files
+  # TODO: verify if this is still true (I can't, no mac)
+  doCheck = !stdenv.isDarwin;
+
+  dontUseNinjaInstall = false;
+  dontWrapQtApps = true;
+
+  env = {
+    # Activate optimizations
+    RELEASE = true;
+
+    NODE_BINARY = lib.getExe nodejs;
+    PROTOC_BINARY = lib.getExe protobuf;
+    PYTHON_BINARY = lib.getExe python3;
+    YARN_BINARY = lib.getExe offlineYarn;
+  };
+
+  buildPhase = ''
+    export RUST_BACKTRACE=1
+    export RUST_LOG=debug
+
+    mkdir -p out/pylib/anki .git
+
+    echo ${builtins.substring 0 8 rev} > out/buildhash
+    touch out/env
+    touch .git/HEAD
+
+    ln -vsf ${pyEnv} ./out/pyenv
+    rsync --chmod +w -avP ${anki-nodemodules}/ out/node_modules/
+    ln -vsf out/node_modules node_modules
+
+    export HOME=$NIX_BUILD_TOP
+    yarn config --offline set yarn-offline-mirror $yarnOfflineCache
+    fixup_yarn_lock yarn.lock
+
+    patchShebangs ./ninja
+    PIP_USER=1 ./ninja build wheels
+  '';
+
+  # mimic https://github.com/ankitects/anki/blob/76d8807315fcc2675e7fa44d9ddf3d4608efc487/build/ninja_gen/src/python.rs#L232-L250
+  checkPhase = ''
+    HOME=$TMP ANKI_TEST_MODE=1 PYTHONPATH=$PYTHONPATH:$PWD/out/pylib \
+      pytest -p no:cacheprovider pylib/tests
+    HOME=$TMP ANKI_TEST_MODE=1 PYTHONPATH=$PYTHONPATH:$PWD/out/pylib:$PWD/pylib:$PWD/out/qt \
+      pytest -p no:cacheprovider qt/tests
+  '';
+
+  preInstall = ''
+    mkdir dist
+    mv out/wheels/* dist
+  '';
+
+  postInstall = ''
+    install -D -t $out/share/applications qt/bundle/lin/anki.desktop
+    install -D -t $doc/share/doc/anki README* LICENSE*
+    install -D -t $out/share/mime/packages qt/bundle/lin/anki.xml
+    install -D -t $out/share/pixmaps qt/bundle/lin/anki.{png,xpm}
+    installManPage qt/bundle/lin/anki.1
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${qtWrapperArgs[@]}"
+      --prefix PATH ':' "${lame}/bin:${mpv-unwrapped}/bin"
+    )
+  '';
+
+  meta = with lib; {
+    description = "Spaced repetition flashcard program";
+    longDescription = ''
+      Anki is a program which makes remembering things easy. Because it is a lot
+      more efficient than traditional study methods, you can either greatly
+      decrease your time spent studying, or greatly increase the amount you learn.
+
+      Anyone who needs to remember things in their daily life can benefit from
+      Anki. Since it is content-agnostic and supports images, audio, videos and
+      scientific markup (via LaTeX), the possibilities are endless. For example:
+      learning a language, studying for medical and law exams, memorizing
+      people's names and faces, brushing up on geography, mastering long poems,
+      or even practicing guitar chords!
+    '';
+    homepage = "https://apps.ankiweb.net";
+    license = licenses.agpl3Plus;
+    platforms = platforms.mesaPlatforms;
+    maintainers = with maintainers; [ euank oxij paveloom ];
+    # Reported to crash at launch on darwin (as of 2.1.65)
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/anki/patches/gl-fixup.patch b/nixpkgs/pkgs/games/anki/patches/gl-fixup.patch
new file mode 100644
index 000000000000..6517adaf9638
--- /dev/null
+++ b/nixpkgs/pkgs/games/anki/patches/gl-fixup.patch
@@ -0,0 +1,17 @@
+diff --git a/qt/aqt/__init__.py b/qt/aqt/__init__.py
+index 352848cfd..3fd5d0769 100644
+--- a/qt/aqt/__init__.py
++++ b/qt/aqt/__init__.py
+@@ -402,12 +402,6 @@ def parseArgs(argv: list[str]) -> tuple[argparse.Namespace, list[str]]:
+ def setupGL(pm: aqt.profiles.ProfileManager) -> None:
+     driver = pm.video_driver()
+
+-    # work around pyqt loading wrong GL library
+-    if is_lin:
+-        import ctypes
+-
+-        ctypes.CDLL("libGL.so.1", ctypes.RTLD_GLOBAL)
+-
+     # catch opengl errors
+     def msgHandler(category: Any, ctx: Any, msg: Any) -> None:
+         if category == QtMsgType.QtDebugMsg:
diff --git a/nixpkgs/pkgs/games/anki/patches/no-update-check.patch b/nixpkgs/pkgs/games/anki/patches/no-update-check.patch
new file mode 100644
index 000000000000..a70cbabd23b8
--- /dev/null
+++ b/nixpkgs/pkgs/games/anki/patches/no-update-check.patch
@@ -0,0 +1,13 @@
+diff --git a/qt/aqt/main.py b/qt/aqt/main.py
+index 0f2764f66..c42a88402 100644
+--- a/qt/aqt/main.py
++++ b/qt/aqt/main.py
+@@ -1395,6 +1395,8 @@ title="{}" {}>{}</button>""".format(
+     ##########################################################################
+
+     def setupAutoUpdate(self) -> None:
++        # nixpkgs patch; updates are managed by nix
++        return
+         import aqt.update
+
+         self.autoUpdate = aqt.update.LatestVersionFinder(self)
diff --git a/nixpkgs/pkgs/games/anki/patches/skip-formatting-python-code.patch b/nixpkgs/pkgs/games/anki/patches/skip-formatting-python-code.patch
new file mode 100644
index 000000000000..7ba3381ebab5
--- /dev/null
+++ b/nixpkgs/pkgs/games/anki/patches/skip-formatting-python-code.patch
@@ -0,0 +1,31 @@
+From 104572dc7ebb75061b867158ce3d4311d8cf4594 Mon Sep 17 00:00:00 2001
+From: Euan Kemp <euank@euank.com>
+Date: Thu, 6 Jul 2023 10:05:15 +0900
+Subject: [PATCH] Skip formatting python code
+
+---
+ pylib/tools/hookslib.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/pylib/tools/hookslib.py b/pylib/tools/hookslib.py
+index 6361c633e..95ecb64a2 100644
+--- a/pylib/tools/hookslib.py
++++ b/pylib/tools/hookslib.py
+@@ -82,7 +82,7 @@ class Hook:
+         code = f"""\
+ class {self.classname()}:
+ {classdoc}{self.list_code()}
+-    
++
+     def append(self, callback: {self.callable()}) -> None:
+         '''{appenddoc}'''
+         self._hooks.append(callback)
+@@ -208,4 +208,4 @@ def write_file(path: str, hooks: list[Hook], prefix: str, suffix: str):
+         os.environ["USERPROFILE"] = os.environ["HOME"]
+     with open(path, "wb") as file:
+         file.write(code.encode("utf8"))
+-    subprocess.run([sys.executable, "-m", "black", "-q", path], check=True)
++    # subprocess.run([sys.executable, "-m", "black", "-q", path], check=True)
+-- 
+2.40.1
+
diff --git a/nixpkgs/pkgs/games/antsimulator/default.nix b/nixpkgs/pkgs/games/antsimulator/default.nix
new file mode 100644
index 000000000000..bac481c88f35
--- /dev/null
+++ b/nixpkgs/pkgs/games/antsimulator/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, cmake, sfml }:
+
+stdenv.mkDerivation rec {
+  pname = "antsimulator";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner = "johnBuffer";
+    repo = "AntSimulator";
+    rev = "v${version}";
+    sha256 = "sha256-1KWoGbdjF8VI4th/ZjAzASgsLEuS3xiwObulzxQAppA=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ sfml ];
+
+  postPatch = ''
+    substituteInPlace src/main.cpp \
+      --replace "res/" "$out/opt/antsimulator/"
+
+    substituteInPlace include/simulation/config.hpp \
+      --replace "res/" "$out/opt/antsimulator/"
+
+    substituteInPlace include/render/colony_renderer.hpp \
+      --replace "res/" "$out/opt/antsimulator/"
+  '';
+
+  installPhase = ''
+    install -Dm644 -t $out/opt/antsimulator res/*
+    install -Dm755 ./AntSimulator $out/bin/antsimulator
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/johnBuffer/AntSimulator";
+    description = "Simple Ants simulator";
+    license = licenses.free;
+    maintainers = with maintainers; [ ivar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/arena/default.nix b/nixpkgs/pkgs/games/arena/default.nix
new file mode 100644
index 000000000000..16553a5f8ea6
--- /dev/null
+++ b/nixpkgs/pkgs/games/arena/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchurl, gtk2-x11, glib, pango, cairo, atk, gdk-pixbuf, libX11 }:
+
+# Arena is free software in the sense of "free beer" but not as in "free
+# speech". We can install it as we please, but we cannot re-distribute it in
+# any way other than the original release tarball, so we cannot include its NAR
+# into the Nixpkgs channel.
+
+let
+
+  inherit (lib) makeLibraryPath;
+  libDir = "lib64";
+
+in
+stdenv.mkDerivation rec {
+  pname = "arena";
+  version = "3.10-beta";
+
+  src = fetchurl {
+    url = "http://www.playwitharena.de/downloads/arenalinux_64bit_${lib.replaceStrings ["-"] [""] version}.tar.gz";
+    sha256 = "1pzb9sg4lzbbi4gbldvlb85p8xyl9xnplxwyb9pkk2mwzvvxkf0d";
+  };
+
+  # stdenv.cc.cc.lib is in that list to pick up libstdc++.so. Is there a better way?
+  buildInputs = [gtk2-x11 glib pango cairo atk gdk-pixbuf libX11 stdenv.cc.cc.lib];
+
+  unpackPhase = ''
+    # This is is a tar bomb, i.e. it extract a dozen files and directories to
+    # the top-level, so we must create a sub-directory first.
+    mkdir -p $out/lib/${pname}-${version}
+    tar -C $out/lib/${pname}-${version} -xf ${src}
+
+    # Remove executable bits from data files. This matters for the find command
+    # we'll use below to find all bundled engines.
+    chmod -x $out/lib/${pname}-${version}/Engines/*/*.{txt,bin,bmp,zip}
+  '';
+
+  buildPhase = ''
+    # Arena has (at least) two executables plus a couple of bundled chess
+    # engines that we need to patch.
+    exes=( $(find $out -name '*x86_64_linux')
+           $(find $out/lib/${pname}-${version}/Engines -type f -perm /u+x)
+         )
+    for i in "''${exes[@]}"; do
+      # Arminius is statically linked.
+      if [[ $i =~ "Arminius_2017-01-01" ]]; then echo yo $i; continue; fi
+      echo Fixing interpreter and rpath paths in $i ...
+      patchelf                                                                                   \
+        --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)"                                \
+        --set-rpath ${makeLibraryPath buildInputs}:$(cat $NIX_CC/nix-support/orig-cc)/${libDir}  \
+        $i
+    done
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    ln -s $out/lib/${pname}-${version}/Arena_x86_64_linux $out/bin/arena
+  '';
+
+  dontStrip = true;
+
+  meta = {
+    description = "Chess GUI for analyzing with and playing against various engines";
+    longDescription = ''
+      A free Graphical User Interface (GUI) for chess. Arena assists you in
+      analyzing and playing games as well as in testing chess engines. It runs
+      on Linux or Windows. Arena is compatible to Winboard protocol I, II and
+      UCI protocol I, II. Furthermore, compatible to Chess960, DGT electronic
+      chess board & DGT clocks and much more.
+    '';
+    license = lib.licenses.unfree;
+    platforms = ["x86_64-linux"];
+    hydraPlatforms = lib.platforms.none;
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/armagetronad/default.nix b/nixpkgs/pkgs/games/armagetronad/default.nix
new file mode 100644
index 000000000000..27f509c3f72a
--- /dev/null
+++ b/nixpkgs/pkgs/games/armagetronad/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl
+, pkg-config, SDL, libxml2, SDL_image, libjpeg, libpng, libGLU, libGL, zlib
+, dedicatedServer ? false }:
+
+let
+  versionMajor = "0.2.9";
+  versionMinor = "1.0";
+  version = "${versionMajor}.${versionMinor}";
+in
+stdenv.mkDerivation {
+  pname = if dedicatedServer then "armagetronad-dedicated" else "armagetronad";
+  inherit version;
+  src = fetchurl {
+    url = "https://launchpad.net/armagetronad/${versionMajor}/${version}/+download/armagetronad-${version}.tbz";
+    sha256 = "sha256-WbbHwBzj+MylQ34z+XSmN1KVQaEapPUsGlwXSZ4m9qE";
+  };
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--enable-memmanager"
+    "--enable-automakedefaults"
+    "--disable-useradd"
+    "--disable-initscripts"
+    "--disable-etc"
+    "--disable-uninstall"
+    "--disable-sysinstall"
+  ] ++ lib.optional dedicatedServer "--enable-dedicated";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libxml2 zlib ]
+    ++ lib.optionals (!dedicatedServer) [ SDL SDL_image libxml2 libjpeg libpng libGLU libGL ];
+
+  meta = with lib; {
+    homepage = "http://armagetronad.org";
+    description = "A multiplayer networked arcade racing game in 3D similar to Tron";
+    maintainers = with maintainers; [ numinit ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/arx-libertatis/default.nix b/nixpkgs/pkgs/games/arx-libertatis/default.nix
new file mode 100644
index 000000000000..de597163a3d1
--- /dev/null
+++ b/nixpkgs/pkgs/games/arx-libertatis/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchFromGitHub, cmake, zlib, boost
+, openal, glm, freetype, libGLU, SDL2, libepoxy
+, dejavu_fonts, inkscape, optipng, imagemagick
+, withCrashReporter ? !stdenv.isDarwin
+,   qtbase ? null
+,   wrapQtAppsHook ? null
+,   curl ? null
+,   gdb  ? null
+}:
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "arx-libertatis";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "arx";
+    repo = "ArxLibertatis";
+    rev = version;
+    sha256 = "GBJcsibolZP3oVOTSaiVqG2nMmvXonKTp5i/0NNODKY=";
+  };
+
+  nativeBuildInputs = [
+    cmake inkscape imagemagick optipng
+  ] ++ optionals withCrashReporter [ wrapQtAppsHook ];
+
+  buildInputs = [
+    zlib boost openal glm
+    freetype libGLU SDL2 libepoxy
+  ] ++ optionals withCrashReporter [ qtbase curl ]
+    ++ optionals stdenv.isLinux    [ gdb ];
+
+  cmakeFlags = [
+    "-DDATA_DIR_PREFIXES=$out/share"
+    "-DImageMagick_convert_EXECUTABLE=${imagemagick.out}/bin/convert"
+    "-DImageMagick_mogrify_EXECUTABLE=${imagemagick.out}/bin/mogrify"
+  ];
+
+  dontWrapQtApps = true;
+
+  postInstall = ''
+    ln -sf \
+      ${dejavu_fonts}/share/fonts/truetype/DejaVuSansMono.ttf \
+      $out/share/games/arx/misc/dejavusansmono.ttf
+  '' + optionalString withCrashReporter ''
+    wrapQtApp "$out/libexec/arxcrashreporter"
+  '';
+
+  meta = {
+    description = ''
+      A cross-platform, open source port of Arx Fatalis, a 2002
+      first-person role-playing game / dungeon crawler
+      developed by Arkane Studios.
+    '';
+    homepage = "https://arx-libertatis.org/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ rnhmjoj ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/asc/default.nix b/nixpkgs/pkgs/games/asc/default.nix
new file mode 100644
index 000000000000..94a16f60140d
--- /dev/null
+++ b/nixpkgs/pkgs/games/asc/default.nix
@@ -0,0 +1,85 @@
+{ fetchFromGitHub
+, lib
+, stdenv
+, SDL
+, SDL_image
+, SDL_mixer
+, SDL_sound
+, libsigcxx
+, physfs
+, boost
+, expat
+, freetype
+, libjpeg
+, wxGTK32
+, lua
+, perl
+, pkg-config
+, zlib
+, zip
+, bzip2
+, libpng
+, libtiff
+, fluidsynth
+, libmikmod
+, libvorbis
+, flac
+, libogg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "asc";
+  version = "2.6.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ValHaris";
+    repo = "asc-hq";
+    rev = "fa3bca082a5cea2b35812349f99b877f0113aef0";
+    sha256 = "atamYCN2mOqxV6auToTeWdpKuFfC+GLfLdRsfT0ouwQ=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    SDL
+    SDL_image
+    SDL_mixer
+    SDL_sound
+    physfs
+    boost
+    expat
+    freetype
+    libjpeg
+    wxGTK32
+    lua
+    perl
+    zlib
+    zip
+    bzip2
+    libpng
+    libtiff
+    fluidsynth
+    libmikmod
+    flac
+    libvorbis
+    libogg
+    libsigcxx
+  ];
+
+  meta = with lib; {
+    description = "Turn based strategy game";
+
+    longDescription = ''
+      Advanced Strategic Command is a free, turn based strategy game. It is
+      designed in the tradition of the Battle Isle series from Bluebyte and is
+      currently available for Windows and Linux.
+    '';
+
+    homepage = "https://www.asc-hq.org/";
+
+    license = licenses.gpl2Plus;
+
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/assaultcube/default.nix b/nixpkgs/pkgs/games/assaultcube/default.nix
new file mode 100644
index 000000000000..7164e66feebf
--- /dev/null
+++ b/nixpkgs/pkgs/games/assaultcube/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeDesktopItem
+, copyDesktopItems
+, openal
+, pkg-config
+, libogg
+, libvorbis
+, SDL2
+, SDL2_image
+, makeWrapper
+, zlib
+, file
+, client ? true, server ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "assaultcube";
+  version = "1.3.0.2";
+
+  src = fetchFromGitHub {
+    owner = "assaultcube";
+    repo  = "AC";
+    rev = "v${version}";
+    sha256 = "0qv339zw9q5q1y7bghca03gw7z4v89sl4lbr6h3b7siy08mcwiz9";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    file
+    zlib
+  ] ++ lib.optionals client [
+    openal
+    SDL2
+    SDL2_image
+    libogg
+    libvorbis
+  ];
+
+  targets = (lib.optionalString server "server") + (lib.optionalString client " client");
+  makeFlags = [ "-C source/src" "CXX=${stdenv.cc.targetPrefix}c++" targets ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      desktopName = "AssaultCube";
+      comment = "A multiplayer, first-person shooter game, based on the CUBE engine. Fast, arcade gameplay.";
+      genericName = "First-person shooter";
+      categories = [ "Game" "ActionGame" "Shooter" ];
+      icon = "assaultcube";
+      exec = pname;
+    })
+  ];
+
+  gamedatadir = "/share/games/${pname}";
+
+  installPhase = ''
+    runHook preInstall
+
+    bindir=$out/bin
+
+    mkdir -p $bindir $out/$gamedatadir
+
+    cp -r config packages $out/$gamedatadir
+
+    if (test -e source/src/ac_client) then
+      cp source/src/ac_client $bindir
+      mkdir -p $out/share/applications
+      install -Dpm644 packages/misc/icon.png $out/share/icons/assaultcube.png
+      install -Dpm644 packages/misc/icon.png $out/share/pixmaps/assaultcube.png
+
+      makeWrapper $out/bin/ac_client $out/bin/${pname} \
+        --chdir "$out/$gamedatadir" --add-flags "--home=\$HOME/.assaultcube/v1.2next --init"
+    fi
+
+    if (test -e source/src/ac_server) then
+      cp source/src/ac_server $bindir
+      makeWrapper $out/bin/ac_server $out/bin/${pname}-server \
+        --chdir "$out/$gamedatadir" --add-flags "-Cconfig/servercmdline.txt"
+    fi
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Fast and fun first-person-shooter based on the Cube fps";
+    homepage = "https://assault.cubers.net";
+    platforms = platforms.linux; # should work on darwin with a little effort.
+    license = licenses.unfree;
+    maintainers = with maintainers; [ darkonion0 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/astromenace/default.nix b/nixpkgs/pkgs/games/astromenace/default.nix
new file mode 100644
index 000000000000..f50739d114a0
--- /dev/null
+++ b/nixpkgs/pkgs/games/astromenace/default.nix
@@ -0,0 +1,40 @@
+{ fetchurl, lib, stdenv, cmake, xorg, libGLU, libGL, SDL, openal, fontconfig, freealut, freetype, libogg, libvorbis, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "astromenace";
+  version = "1.4.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openastromenace/astromenace-src-${version}.tar.bz2";
+    sha256 = "1rkz6lwjcd5mwv72kf07ghvx6z46kf3xs250mjbmnmjpn7r5sxwv";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ xorg.libICE xorg.libX11 xorg.libXinerama libGLU libGL SDL openal fontconfig freealut freetype libogg libvorbis ];
+
+  postBuild = ''
+    ./AstroMenace --pack --rawdata=../RAW_VFS_DATA
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    cp AstroMenace $out
+    cp gamedata.vfs $out
+
+    cat > $out/bin/AstroMenace << EOF
+    #!${runtimeShell}
+    $out/AstroMenace --dir=$out
+    EOF
+
+    chmod 755 $out/bin/AstroMenace
+  '';
+
+  meta = with lib; {
+    description = "Hardcore 3D space shooter with spaceship upgrade possibilities";
+    homepage = "https://www.viewizard.com/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "AstroMenace";
+  };
+}
diff --git a/nixpkgs/pkgs/games/atanks/default.nix b/nixpkgs/pkgs/games/atanks/default.nix
new file mode 100644
index 000000000000..197cadfea29c
--- /dev/null
+++ b/nixpkgs/pkgs/games/atanks/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, allegro }:
+
+stdenv.mkDerivation rec {
+  pname = "atanks";
+  version = "6.6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/atanks/atanks/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-vGse/J/H52JPrR2DUtcuknvg+6IWC7Jbtri9bGNwv0M=";
+  };
+
+  buildInputs = [ allegro ];
+
+  makeFlags = [ "PREFIX=$(out)/" "INSTALL=install" "CXX=g++" ];
+
+  meta = with lib; {
+    description = "Atomic Tanks ballistics game";
+    homepage = "http://atanks.sourceforge.net/";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/games/atlauncher/default.nix b/nixpkgs/pkgs/games/atlauncher/default.nix
new file mode 100644
index 000000000000..d6e3dc05a802
--- /dev/null
+++ b/nixpkgs/pkgs/games/atlauncher/default.nix
@@ -0,0 +1,58 @@
+{ copyDesktopItems, fetchurl, jre, lib, makeDesktopItem, makeWrapper, stdenv, udev, xorg }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "atlauncher";
+  version = "3.4.34.2";
+
+  src = fetchurl {
+    url = "https://github.com/ATLauncher/ATLauncher/releases/download/v${finalAttrs.version}/ATLauncher-${finalAttrs.version}.jar";
+    hash = "sha256-l9OoHunK0xfY6xbNpjs9lfsVd3USM1GHgutTMMVq8S8=";
+  };
+
+  env.ICON = fetchurl {
+    url = "https://atlauncher.com/assets/images/logo.svg";
+    hash = "sha256-XoqpsgLmkpa2SdjZvPkgg6BUJulIBIeu6mBsJJCixfo=";
+  };
+
+  dontUnpack = true;
+
+  buildInputs = [ ];
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/java
+    cp $src $out/share/java/ATLauncher.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/${finalAttrs.pname} \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ xorg.libXxf86vm udev ]}" \
+      --add-flags "-jar $out/share/java/ATLauncher.jar" \
+      --add-flags "--working-dir \"\''${XDG_DATA_HOME:-\$HOME/.local/share}/ATLauncher\"" \
+      --add-flags "--no-launcher-update"
+
+    mkdir -p $out/share/icons/hicolor/scalable/apps
+    cp $ICON $out/share/icons/hicolor/scalable/apps/${finalAttrs.pname}.svg
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = finalAttrs.pname;
+      exec = finalAttrs.pname;
+      icon = finalAttrs.pname;
+      desktopName = "ATLauncher";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "A simple and easy to use Minecraft launcher which contains many different modpacks for you to choose from and play";
+    downloadPage = "https://atlauncher.com/downloads";
+    homepage = "https://atlauncher.com/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.getpsyched ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/games/augustus/default.nix b/nixpkgs/pkgs/games/augustus/default.nix
new file mode 100644
index 000000000000..df10516ab35c
--- /dev/null
+++ b/nixpkgs/pkgs/games/augustus/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, SDL2, SDL2_mixer, libpng }:
+
+stdenv.mkDerivation rec {
+  pname = "augustus";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Keriew";
+    repo = "augustus";
+    rev = "v${version}";
+    sha256 = "sha256-NS6ijgI/wLsGF5KabjaR7ElKWFXIdjpmPYHVmI4oMzQ=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ SDL2 SDL2_mixer libpng ];
+
+  meta = with lib; {
+    description = "An open source re-implementation of Caesar III. Fork of Julius incorporating gameplay changes";
+    homepage = "https://github.com/Keriew/augustus";
+    license = licenses.agpl3Only;
+    platforms = platforms.all;
+    broken = stdenv.isDarwin;
+    maintainers = with maintainers; [ Thra11 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/azimuth/default.nix b/nixpkgs/pkgs/games/azimuth/default.nix
new file mode 100644
index 000000000000..ed03c2afd71c
--- /dev/null
+++ b/nixpkgs/pkgs/games/azimuth/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, SDL, which, installTool ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "azimuth";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner  = "mdsteele";
+    repo   = "azimuth";
+    rev    = "v${version}";
+    sha256 = "1znfvpmqiixd977jv748glk5zc4cmhw5813zp81waj07r9b0828r";
+  };
+
+  nativeBuildInputs = [ which ];
+  buildInputs = [ SDL ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-Wno-error=maybe-uninitialized" ];
+
+  preConfigure = ''
+    substituteInPlace data/azimuth.desktop \
+      --replace Exec=azimuth "Exec=$out/bin/azimuth" \
+      --replace "Version=%AZ_VERSION_NUMBER" "Version=${version}"
+  '';
+
+  makeFlags = [
+    "BUILDTYPE=release"
+    "INSTALLDIR=$(out)"
+  ] ++ (if installTool then ["INSTALLTOOL=true"] else ["INSTALLTOOL=false"]);
+
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "A metroidvania game using only vectorial graphic";
+    longDescription = ''
+      Azimuth is a metroidvania game, and something of an homage to the previous
+      greats of the genre (Super Metroid in particular). You will need to pilot
+      your ship, explore the inside of the planet, fight enemies, overcome
+      obstacles, and uncover the storyline piece by piece. Azimuth features a
+      huge game world to explore, lots of little puzzles to solve, dozens of
+      weapons and upgrades to find and use, and a wide variety of enemies and
+      bosses to tangle with.
+    '';
+
+    license = lib.licenses.gpl3Plus;
+    homepage = "https://mdsteele.games/azimuth/index.html";
+    maintainers = with lib.maintainers; [ marius851000 ];
+    platforms = lib.platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/ballerburg/default.nix b/nixpkgs/pkgs/games/ballerburg/default.nix
new file mode 100644
index 000000000000..b15abdbc4703
--- /dev/null
+++ b/nixpkgs/pkgs/games/ballerburg/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, cmake, SDL, makeDesktopItem, copyDesktopItems
+, imagemagick }:
+
+let
+
+  icon = fetchurl {
+    url = "https://baller.tuxfamily.org/king.png";
+    sha256 = "1xq2h87s648wjpjl72ds3xnnk2jp8ghbkhjzh2g4hpkq2zdz90hy";
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "ballerburg";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://download.tuxfamily.org/baller/ballerburg-${version}.tar.gz";
+    sha256 = "sha256-BiX0shPBGA8sshee8rxs41x+mdsrJzBqhpDDic6sYwA=";
+  };
+
+  nativeBuildInputs = [ cmake copyDesktopItems imagemagick ];
+
+  buildInputs = [ SDL ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "Ballerburg";
+      desktopName = "Ballerburg SDL";
+      exec = "_NET_WM_ICON=ballerburg ballerburg";
+      comment = meta.description;
+      icon = "ballerburg";
+      categories = [ "Game" ];
+    })
+  ];
+
+  postInstall = ''
+    # Generate and install icon files
+    for size in 16 32 48 64 72 96 128 192 512 1024; do
+      mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+      convert ${icon} -sample "$size"x"$size" \
+        -background white -gravity south -extent "$size"x"$size" \
+        $out/share/icons/hicolor/"$size"x"$size"/apps/ballerburg.png
+    done
+  '';
+
+  meta = with lib; {
+    description = "Classic cannon combat game";
+    longDescription = ''
+      Two castles, separated by a mountain, try to defeat each other with their cannonballs,
+      either by killing the opponent's king or by weakening the opponent enough so that the king capitulates.'';
+    homepage = "https://baller.tuxfamily.org/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.j0hax ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/banner/default.nix b/nixpkgs/pkgs/games/banner/default.nix
new file mode 100644
index 000000000000..befb29f6ffc9
--- /dev/null
+++ b/nixpkgs/pkgs/games/banner/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "banner";
+  version = "1.3.5";
+
+  src = fetchFromGitHub {
+    owner = "pronovic";
+    repo = "banner";
+    rev = "BANNER_V${version}";
+    sha256 = "ISSnGzrFSzSj/+KxgeFtaw4H+4Ea5x5S5C8xjcjKWqQ=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/pronovic/banner";
+    description = "Print large banners to ASCII terminals";
+    license = licenses.gpl2Only;
+
+    longDescription = ''
+      An implementation of the traditional Unix-program used to display
+      large characters.
+    '';
+
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/bastet/default.nix b/nixpkgs/pkgs/games/bastet/default.nix
new file mode 100644
index 000000000000..0b9f41507303
--- /dev/null
+++ b/nixpkgs/pkgs/games/bastet/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ncurses, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "bastet";
+  version = "0.43.2";
+  buildInputs = [ ncurses boost ];
+
+  src = fetchFromGitHub {
+    owner = "fph";
+    repo = "bastet";
+    rev = version;
+    sha256 = "09kamxapm9jw9przpsgjfg33n9k94bccv65w95dakj0br33a75wn";
+  };
+
+  patches = [
+    # Compatibility with new Boost
+    (fetchpatch {
+      url = "https://github.com/fph/bastet/commit/0e03f8d4d6bc6949cf1c447e632ce0d1b98c4be1.patch";
+      sha256 = "1475hisbm44jirsrhdlnddppsyn83xmvcx09gfkm9drcix05alzj";
+    })
+
+    # Fix pending upstream inclusion for ncurses-6.3:
+    #  https://github.com/fph/bastet/pull/21
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/fph/bastet/commit/54a6d127351ea2c62f50efafe97c5b02e23e86a7.patch";
+      sha256 = "14v95b0m16m6ycd82i3wpp81kbmj6qz029b1m5483dkk6mwz98iy";
+    })
+  ];
+
+  installPhase = ''
+    mkdir -p "$out"/bin
+    cp bastet "$out"/bin/
+    mkdir -p "$out"/share/man/man6
+    cp bastet.6 "$out"/share/man/man6
+  '';
+
+  meta = with lib; {
+    description = "Tetris clone with 'bastard' block-choosing AI";
+    homepage = "http://fph.altervista.org/prog/bastet.html";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/black-hole-solver/default.nix b/nixpkgs/pkgs/games/black-hole-solver/default.nix
new file mode 100644
index 000000000000..601aaeb1d90d
--- /dev/null
+++ b/nixpkgs/pkgs/games/black-hole-solver/default.nix
@@ -0,0 +1,30 @@
+{
+  stdenv, lib, fetchurl,
+  cmake, perl, pkg-config, python3,
+  rinutils, PathTiny,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "black-hole-solver";
+  version = "1.12.0";
+
+  meta = with lib; {
+    homepage = "https://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/";
+    description = "A solver for Solitaire variants Golf, Black Hole, and All in a Row.";
+    license = licenses.mit;
+  };
+
+  src = fetchurl {
+    url = "https://fc-solve.shlomifish.org/downloads/fc-solve/${pname}-${version}.tar.xz";
+    sha256 = "sha256-0y8yU291cykliPQbsNha5C1WE3bCGNxKtrrf5JBKN6c=";
+  };
+
+  nativeBuildInputs = [ cmake perl pkg-config python3 ];
+
+  buildInputs = [ rinutils PathTiny ];
+
+  prePatch = ''
+    patchShebangs ./scripts
+  '';
+
+}
diff --git a/nixpkgs/pkgs/games/blackshades/default.nix b/nixpkgs/pkgs/games/blackshades/default.nix
new file mode 100644
index 000000000000..7f1cd29c9d54
--- /dev/null
+++ b/nixpkgs/pkgs/games/blackshades/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, glfw
+, libGL
+, libGLU
+, libsndfile
+, openal
+, zig_0_11
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "blackshades";
+  version = "2.5.1";
+
+  src = fetchFromSourcehut {
+    owner = "~cnx";
+    repo = "blackshades";
+    rev = finalAttrs.version;
+    fetchSubmodules = true;
+    hash = "sha256-qdpXpuXHr9w2XMfgOVveWv3JoqdJHVB8TCqZdyaw/DM=";
+  };
+
+  nativeBuildInputs = [ zig_0_11.hook ];
+
+  buildInputs = [
+    glfw
+    libGLU
+    libGL
+    libsndfile
+    openal
+  ];
+
+  meta = {
+    homepage = "https://sr.ht/~cnx/blackshades";
+    description = "A psychic bodyguard FPS";
+    changelog = "https://git.sr.ht/~cnx/blackshades/refs/${finalAttrs.version}";
+    mainProgram = "blackshades";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ McSinyx viric ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/games/blightmud/default.nix b/nixpkgs/pkgs/games/blightmud/default.nix
new file mode 100644
index 000000000000..3267c36a370e
--- /dev/null
+++ b/nixpkgs/pkgs/games/blightmud/default.nix
@@ -0,0 +1,68 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, alsa-lib
+, openssl
+, withTTS ? false
+, speechd
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "blightmud";
+  version = "5.3.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-e9Uo0IJYL9/6/nNL27zfUYnsTwDaOJOcR2CY6t++jDE=";
+  };
+
+  cargoHash = "sha256-QSgTpmSojZrwZ0RsUL6c2xO310RZX3gkyGl6oNf6pYI=";
+
+  buildFeatures = lib.optional withTTS "tts";
+
+  nativeBuildInputs = [ pkg-config rustPlatform.bindgenHook ];
+
+  buildInputs = [ alsa-lib openssl ] ++ lib.optionals withTTS [ speechd ];
+
+  checkFlags =
+    let
+      # Most of Blightmud's unit tests pass without trouble in the isolated
+      # Nixpkgs build env. The following tests need to be skipped.
+      skipList = [
+        "test_connect"
+        "test_gmcp_negotiation"
+        "test_ttype_negotiation"
+        "test_reconnect"
+        "test_is_connected"
+        "test_mud"
+        "test_server"
+        "test_lua_script"
+        "timer_test"
+        "validate_assertion_fail"
+        "regex_smoke_test"
+      ];
+      skipFlag = test: "--skip " + test;
+    in
+    builtins.concatStringsSep " " (builtins.map skipFlag skipList);
+
+  meta = with lib; {
+    description = "A terminal MUD client written in Rust";
+    longDescription = ''
+      Blightmud is a terminal client for connecting to Multi User Dungeon (MUD)
+      games. It is written in Rust and supports TLS, GMCP, MSDP, MCCP2, tab
+      completion, text searching and a split view for scrolling. Blightmud can
+      be customized with Lua scripting for aliases, triggers, timers, customized
+      status bars, and more. Blightmud supports several accessibility features
+      including an optional built-in text-to-speech engine and a screen reader
+      friendly mode.
+    '';
+    homepage = "https://github.com/Blightmud/Blightmud";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ cpu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/blobby/blobby.sh b/nixpkgs/pkgs/games/blobby/blobby.sh
new file mode 100644
index 000000000000..3171c5a80b1b
--- /dev/null
+++ b/nixpkgs/pkgs/games/blobby/blobby.sh
@@ -0,0 +1,10 @@
+#! @shell@
+
+test -d ~/.blobby || {
+  mkdir ~/.blobby
+  cp -r "@out@/share/blobby"/* ~/.blobby
+  chmod u+w -R ~/.blobby
+  ( cd ~/.blobby; for i in *.zip; do @unzip@/bin/unzip "$i"; done )
+}
+
+exec @out@/bin/blobby.bin "$@"
diff --git a/nixpkgs/pkgs/games/blobby/default.nix b/nixpkgs/pkgs/games/blobby/default.nix
new file mode 100644
index 000000000000..27371b905417
--- /dev/null
+++ b/nixpkgs/pkgs/games/blobby/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, SDL2, SDL2_image, libGLU, libGL, cmake, physfs, boost, zip, zlib, unzip, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "blobby-volley";
+  version = "1.1.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/blobby/Blobby%20Volley%202%20%28Linux%29/1.1.1/blobby2-linux-1.1.1.tar.gz";
+    sha256 = "sha256-NX7lE+adO1D2f8Bj1Ky3lZpf6Il3gX8KqxTMxw2yFLo=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config zip ];
+  buildInputs = [ SDL2 SDL2_image libGLU libGL physfs boost zlib ];
+
+  preConfigure=''
+    sed -e '1i#include <iostream>' -i src/NetworkMessage.cpp
+  '';
+
+  inherit unzip;
+
+  postInstall = ''
+    cp ../data/Icon.bmp "$out/share/blobby/"
+    mv "$out/bin"/blobby{,.bin}
+    substituteAll "${./blobby.sh}" "$out/bin/blobby"
+    chmod a+x "$out/bin/blobby"
+  '';
+
+  meta = with lib; {
+    description = "A blobby volleyball game";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ raskin ];
+    homepage = "https://blobbyvolley.de/";
+    downloadPage = "https://sourceforge.net/projects/blobby/files/Blobby%20Volley%202%20%28Linux%29/";
+    mainProgram = "blobby";
+  };
+}
diff --git a/nixpkgs/pkgs/games/blobwars/blobwars-2.00-glibc-2.38.patch b/nixpkgs/pkgs/games/blobwars/blobwars-2.00-glibc-2.38.patch
new file mode 100644
index 000000000000..4fe3e373afda
--- /dev/null
+++ b/nixpkgs/pkgs/games/blobwars/blobwars-2.00-glibc-2.38.patch
@@ -0,0 +1,11 @@
+--- a/src/headers.h
++++ b/src/headers.h
+@@ -56,7 +56,7 @@ extern DECLSPEC int SDLCALL SDL_GetGamma(float *red, float *green, float *blue);
+ #define textdomain(x) while(false)
+ #endif
+ 
+-#if !defined(OpenBSD) && !defined(FreeBSD) && !defined(__APPLE__)
++#if !defined(OpenBSD) && !defined(FreeBSD) && !defined(__APPLE__) && !(defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 38)
+ static inline void strlcat(char *dest, const char *src, size_t n) { strncat(dest, src, n - 1); }
+ static inline void strlcpy(char *dest, const char *src, size_t n) { strncpy(dest, src, n); dest[n - 1] = 0; }
+ #endif
diff --git a/nixpkgs/pkgs/games/blobwars/default.nix b/nixpkgs/pkgs/games/blobwars/default.nix
new file mode 100644
index 000000000000..dd94fc109696
--- /dev/null
+++ b/nixpkgs/pkgs/games/blobwars/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchurl, pkg-config, gettext, SDL2, SDL2_image, SDL2_mixer, SDL2_net, SDL2_ttf, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "blobwars";
+  version = "2.00";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "c406279f6cdf2aed3c6edb8d8be16efeda0217494acd525f39ee2bd3e77e4a99";
+  };
+
+  patches = [ ./blobwars-2.00-glibc-2.38.patch ];
+
+  nativeBuildInputs = [ pkg-config gettext ];
+  buildInputs = [ SDL2 SDL2_image SDL2_mixer SDL2_net SDL2_ttf zlib ];
+  env.NIX_CFLAGS_COMPILE = toString [ "-Wno-error" ];
+
+  makeFlags = [ "PREFIX=$(out)" "RELEASE=1" ];
+
+  postInstall = ''
+    install -Dm755 $out/games/blobwars -t $out/bin
+    rm -r $out/games
+    cp -r {data,gfx,sound,music} $out/share/games/blobwars/
+    # fix world readable bit
+    find $out/share/games/blobwars/. -type d -exec chmod 755 {} +
+    find $out/share/games/blobwars/. -type f -exec chmod 644 {} +
+  '';
+
+  meta = with lib; {
+    description = "Platform action game featuring a blob with lots of weapons";
+    homepage = "https://www.parallelrealities.co.uk/games/metalBlobSolid/";
+    license = with licenses; [ gpl2Plus free ];
+    maintainers = with maintainers; [ iblech ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/blockattack/default.nix b/nixpkgs/pkgs/games/blockattack/default.nix
new file mode 100644
index 000000000000..6deba7987ada
--- /dev/null
+++ b/nixpkgs/pkgs/games/blockattack/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+, boost
+, cmake
+, gettext
+, physfs
+, pkg-config
+, zip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "blockattack";
+  version = "2.8.0";
+
+  src = fetchFromGitHub {
+    owner = "blockattack";
+    repo = "blockattack-game";
+    rev = "v${version}";
+    hash = "sha256-2oKesdr2eNZhDlGrFRiH5/8APFkGJfxPCNvzFoIumdQ=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    gettext
+    zip
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+    SDL2_ttf
+    boost
+    physfs
+  ];
+
+  preConfigure = ''
+    patchShebangs packdata.sh source/misc/translation/*.sh
+    chmod +x ./packdata.sh
+    ./packdata.sh
+  '';
+
+  meta = with lib; {
+    homepage = "https://blockattack.net/";
+    description = "An open source clone of Panel de Pon (aka Tetris Attack)";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/boohu/default.nix b/nixpkgs/pkgs/games/boohu/default.nix
new file mode 100644
index 000000000000..708d8d7510bc
--- /dev/null
+++ b/nixpkgs/pkgs/games/boohu/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchurl, buildGoModule }:
+
+buildGoModule rec {
+  pname = "boohu";
+  version = "0.14.0";
+
+  src = fetchurl {
+    url = "https://download.tuxfamily.org/boohu/downloads/boohu-${version}.tar.gz";
+    hash = "sha256-IB59C5/uuHP6LtKLypjpgHOo0MR9bFdCbudaRa+h7lI=";
+  };
+
+  vendorHash = "sha256-AVK4zE/Hs9SN8Qj2WYj/am2B0R74QKYoMNf3sRRjnU4=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A new coffee-break roguelike game";
+    longDescription = ''
+      Break Out Of Hareka's Underground (Boohu) is a roguelike game mainly
+      inspired from DCSS and its tavern, with some ideas from Brogue, but
+      aiming for very short games, almost no character building, and a
+      simplified inventory.
+    '';
+    homepage = "https://download.tuxfamily.org/boohu/index.html";
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/braincurses/default.nix b/nixpkgs/pkgs/games/braincurses/default.nix
new file mode 100644
index 000000000000..f3f862b97ef9
--- /dev/null
+++ b/nixpkgs/pkgs/games/braincurses/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "braincurses";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "bderrly";
+    repo = "braincurses";
+    rev = version;
+    sha256 = "0gpny9wrb0zj3lr7iarlgn9j4367awj09v3hhxz9r9a6yhk4anf5";
+  };
+
+  buildInputs = [ ncurses ];
+
+  # There is no install target in the Makefile
+  installPhase = ''
+    install -Dt $out/bin braincurses
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bderrly/braincurses";
+    description = "A version of the classic game Mastermind";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/brogue/default.nix b/nixpkgs/pkgs/games/brogue/default.nix
new file mode 100644
index 000000000000..e5b0f838be1a
--- /dev/null
+++ b/nixpkgs/pkgs/games/brogue/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchurl, fetchpatch, SDL, ncurses, libtcod, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+  pname = "brogue";
+  version = "1.7.5";
+
+  src = fetchurl {
+    url = "https://sites.google.com/site/broguegame/brogue-${version}-linux-amd64.tbz2";
+    sha256 = "0i042zb3axjf0cpgpdh8hvfn66dbfizidyvw0iymjk2n760z2kx7";
+  };
+  patches = [
+    # Pull upstream fix for -fno-common toolchains:
+    #  https://github.com/tmewett/BrogueCE/pull/63
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/tmewett/BrogueCE/commit/2c7ed0c48d9efd06bf0a2589ba967c0a22a8fa87.patch";
+      sha256 = "19lr2fa25dh79klm4f4kqyyqq7w5xmw9z0fvylkcckqvcv7dwhp3";
+    })
+  ];
+
+  prePatch = ''
+    sed -i Makefile -e 's,LIBTCODDIR=.*,LIBTCODDIR=${libtcod},g' \
+                    -e 's,sdl-config,${lib.getDev SDL}/bin/sdl-config,g'
+    sed -i src/platform/tcod-platform.c -e "s,fonts/font,$out/share/brogue/fonts/font,g"
+    make clean
+    rm -rf src/libtcod*
+  '';
+
+  buildInputs = [ SDL ncurses libtcod ];
+
+  desktopItem = makeDesktopItem {
+    name = "brogue";
+    desktopName = "Brogue";
+    genericName = "Roguelike";
+    comment = "Brave the Dungeons of Doom!";
+    icon = "brogue";
+    exec = "brogue";
+    categories = [ "Game" "AdventureGame" ];
+  };
+
+  installPhase = ''
+    install -m 555 -D bin/brogue $out/bin/brogue
+    install -m 444 -D ${desktopItem}/share/applications/brogue.desktop $out/share/applications/brogue.desktop
+    install -m 444 -D bin/brogue-icon.png $out/share/icons/hicolor/256x256/apps/brogue.png
+    mkdir -p $out/share/brogue
+    cp -r bin/fonts $out/share/brogue/
+  '';
+
+  # fix crash; shouldn’t be a security risk because it’s an offline game
+  hardeningDisable = [ "stackprotector" "fortify" ];
+
+  meta = with lib; {
+    description = "A roguelike game";
+    homepage = "https://sites.google.com/site/broguegame/";
+    license = licenses.agpl3;
+    maintainers = [ maintainers.skeidel ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/brutalmaze/default.nix b/nixpkgs/pkgs/games/brutalmaze/default.nix
new file mode 100644
index 000000000000..8f8930ce0c63
--- /dev/null
+++ b/nixpkgs/pkgs/games/brutalmaze/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromSourcehut, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "brutalmaze";
+  version = "1.1.1";
+  format = "pyproject";
+  disabled = python3Packages.pythonOlder "3.7";
+
+  src = fetchFromSourcehut {
+    owner = "~cnx";
+    repo = pname;
+    rev = version;
+    sha256 = "1m105iq378mypj64syw59aldbm6bj4ma4ynhc50gafl656fabg4y";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    flit-core
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    loca
+    palace
+    pygame
+  ];
+
+  doCheck = false; # there's no test
+
+  meta = with lib; {
+    description = "Minimalist thrilling shoot 'em up game";
+    homepage = "https://brutalmaze.rtfd.io";
+    license = licenses.agpl3Plus;
+    maintainers = [ maintainers.McSinyx ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/bsdgames/default.nix b/nixpkgs/pkgs/games/bsdgames/default.nix
new file mode 100644
index 000000000000..c837ba39b444
--- /dev/null
+++ b/nixpkgs/pkgs/games/bsdgames/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchurl, ncurses, openssl, flex, bison, less, miscfiles }:
+
+stdenv.mkDerivation rec {
+  pname = "bsd-games";
+  version = "2.17";
+
+  src = fetchurl {
+    url = "mirror://ibiblioPubLinux/games/${pname}-${version}.tar.gz";
+    hash = "sha256-Bm+SSu9sHF6pRvWI428wMCH138CTlEc48CXY7bxv/2A=";
+  };
+
+  buildInputs = [ ncurses openssl flex bison ];
+
+  patches = [
+    # Remove UTMPX support on Makefrag file
+    (fetchurl {
+      url = "http://svn.exactcode.de/t2/trunk/package/games/bsd-games/dm-noutmpx.patch";
+      sha256 = "1k3qp3jj0dksjr4dnppv6dvkwslrgk9c7p2n9vipqildpxgqp7w2";
+    })
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  makeFlags = [ "STRIP=" ];
+
+  preConfigure = ''
+    cat > config.params << EOF
+    bsd_games_cfg_man6dir=$out/share/man/man6
+    bsd_games_cfg_man8dir=$out/share/man/man8
+    bsd_games_cfg_man5dir=$out/share/man/man5
+    bsd_games_cfg_wtf_acronymfile=$out/share/misc/acronyms
+    bsd_games_cfg_fortune_dir=$out/share/games/fortune
+    bsd_games_cfg_quiz_dir=$out/share/games/quiz
+    bsd_games_cfg_gamesdir=$out/bin
+    bsd_games_cfg_sbindir=$out/bin
+    bsd_games_cfg_usrbindir=$out/bin
+    bsd_games_cfg_libexecdir=$out/lib/games/dm
+    bsd_games_cfg_docdir=$out/share/doc/bsd-games
+    bsd_games_cfg_sharedir=$out/share/games
+    bsd_games_cfg_varlibdir=.
+    bsd_games_cfg_non_interactive=y
+    bsd_games_cfg_no_build_dirs="dab hack phantasia sail"
+    bsd_games_cfg_dictionary_src=${miscfiles}/share/web2
+    bsd_games_cfg_pager=${less}
+    EOF
+
+    sed -e s/getline/bsdgames_local_getline/g -i $(grep getline -rl .)
+  '';
+
+  postConfigure = ''
+    sed -i -e 's,/usr,'$out, \
+       -e "s,-o root -g root, ," \
+       -e "s,-o root -g games, ," \
+       -e "s,.*chown.*,true," \
+       -e 's/INSTALL_VARDATA.*/INSTALL_VARDATA := true/' \
+       -e 's/INSTALL_HACKDIR.*/INSTALL_HACKDIR := true/' \
+       -e 's/INSTALL_DM.*/INSTALL_DM := true/' \
+       -e 's/INSTALL_SCORE_FILE.*/INSTALL_SCORE_FILE := true/' \
+       Makeconfig install-man
+  '';
+
+  meta = {
+    homepage = "http://www.t2-project.org/packages/bsd-games.html";
+    description = "Ports of all the games from NetBSD-current that are free";
+    license = lib.licenses.free;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/btanks/default.nix b/nixpkgs/pkgs/games/btanks/default.nix
new file mode 100644
index 000000000000..f1f2e84a614d
--- /dev/null
+++ b/nixpkgs/pkgs/games/btanks/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, fetchpatch, scons, pkg-config, SDL, libGL, zlib, smpeg
+, SDL_image, libvorbis, expat, zip, lua }:
+
+stdenv.mkDerivation rec {
+  pname = "btanks";
+  version = "0.9.8083";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
+    hash = "sha256-P9LOaitF96YMOxFPqa/xPLPdn7tqZc3JeYt2xPosQ0E=";
+  };
+
+  nativeBuildInputs = [ scons pkg-config ];
+
+  buildInputs = [ SDL libGL zlib smpeg SDL_image libvorbis expat zip lua ];
+
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = "-I${SDL_image}/include/SDL";
+
+  patches = [
+    (fetchpatch {
+      name = "lua52.patch";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/lua52.patch?h=btanks&id=cd0e016963238f16209baa2da658aa3fad36e33d";
+      hash = "sha256-Xwl//sfGprhg71jf+X3q8qxdB+5ZtqJrjBxS8+cw5UY=";
+    })
+    (fetchpatch {
+      url = "https://salsa.debian.org/games-team/btanks/-/raw/debian/0.9.8083-9/debian/patches/gcc-4.7.patch";
+      hash = "sha256-JN7D+q63EvKJX9wAEQgcVqE1VZzMa4Y1CPIlA3uYtLc=";
+    })
+    (fetchpatch {
+      url = "https://salsa.debian.org/games-team/btanks/-/raw/debian/0.9.8083-9/debian/patches/pow10f.patch";
+      hash = "sha256-6QFP1GTwqXnjfekzEiIpWKCD6HOcGusYW+02sUE6hcA=";
+    })
+    (fetchpatch {
+      url = "https://salsa.debian.org/games-team/btanks/-/raw/debian/0.9.8083-9/debian/patches/python3.patch";
+      hash = "sha256-JpK409Myi8mxQaunmLFKKh1NKvKLXpNHHsDvRee8OoQ=";
+    })
+    (fetchpatch {
+      url = "https://salsa.debian.org/games-team/btanks/-/raw/debian/0.9.8083-9/debian/patches/scons.patch";
+      hash = "sha256-JCvBY2fOV8Sc/mpvEsJQv1wKcS1dHqYxvRk6I9p7ZKc=";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Fast 2d tank arcade game";
+    homepage = "https://sourceforge.net/projects/btanks/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/bugdom/default.nix b/nixpkgs/pkgs/games/bugdom/default.nix
new file mode 100644
index 000000000000..01db213de985
--- /dev/null
+++ b/nixpkgs/pkgs/games/bugdom/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchFromGitHub, SDL2, IOKit, Foundation, cmake, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "bugdom";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "jorio";
+    repo = pname;
+    rev = version;
+    hash = "sha256-oe7xxvoL82YF+EoIJDK6AfN3PmpqeGRlIsbaGx8xGeM=";
+    fetchSubmodules = true;
+  };
+
+  postPatch = lib.optionalString stdenv.hostPlatform.isDarwin ''
+    # Expects SDL2.framework in specific location, which we don't have
+    # Passing this in cmakeFlags doesn't work because the path is hard-coded for Darwin
+    substituteInPlace cmake/FindSDL2.cmake \
+      --replace 'set(SDL2_LIBRARIES' 'set(SDL2_LIBRARIES "${SDL2}/lib/libSDL2.dylib") #'
+    # Expects plutil, which we don't have
+    sed -i '/plutil/d' CMakeLists.txt
+  '';
+
+  buildInputs = [
+    SDL2
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    IOKit
+    Foundation
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+
+  cmakeFlags = lib.optionals stdenv.hostPlatform.isDarwin [
+    "-DCMAKE_OSX_ARCHITECTURES=${stdenv.hostPlatform.darwinArch}"
+    # Expects SDL2.framework in specific location, which we don't have
+    "-DSDL2_INCLUDE_DIRS=${SDL2.dev}/include/SDL2"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+  '' + (if stdenv.hostPlatform.isDarwin then ''
+    mkdir -p $out/{bin,Applications}
+    mv {,$out/Applications/}Bugdom.app
+    makeWrapper $out/{Applications/Bugdom.app/Contents/MacOS,bin}/Bugdom
+  '' else ''
+    mkdir -p $out/share/bugdom
+    mv Data $out/share/bugdom
+    install -Dm755 {.,$out/bin}/Bugdom
+    wrapProgram $out/bin/Bugdom --run "cd $out/share/bugdom"
+    install -Dm644 $src/packaging/bugdom.desktop $out/share/applications/bugdom.desktop
+    install -Dm644 $src/packaging/bugdom-desktopicon.png $out/share/pixmaps/bugdom-desktopicon.png
+  '') + ''
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A port of Bugdom, a 1999 Macintosh game by Pangea Software, for modern operating systems";
+    homepage = "https://github.com/jorio/Bugdom";
+    license = with licenses; [ cc-by-sa-40 ];
+    maintainers = with maintainers; [ lux ];
+    mainProgram = "Bugdom";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/bzflag/default.nix b/nixpkgs/pkgs/games/bzflag/default.nix
new file mode 100644
index 000000000000..7f43e8949b70
--- /dev/null
+++ b/nixpkgs/pkgs/games/bzflag/default.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchurl, pkg-config
+, curl, SDL2, libGLU, libGL, glew, ncurses, c-ares
+, Carbon, CoreServices }:
+
+stdenv.mkDerivation rec {
+  pname = "bzflag";
+  version = "2.4.26";
+
+  src = fetchurl {
+    url = "https://download.bzflag.org/${pname}/source/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-AYMEBf8mrR3FlafgaVyCTCeG5niGjZ/4Iq6xSsdIEBQ=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ curl SDL2 libGLU libGL glew ncurses c-ares ]
+    ++ lib.optionals stdenv.isDarwin [ Carbon CoreServices ];
+
+  meta = with lib; {
+    description = "Multiplayer 3D Tank game";
+    homepage = "https://bzflag.org/";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/builder.nix b/nixpkgs/pkgs/games/cataclysm-dda/builder.nix
new file mode 100644
index 000000000000..24128875f3a1
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/builder.nix
@@ -0,0 +1,49 @@
+{ stdenvNoCC, lib, type }:
+
+assert lib.elem type [
+  "mod"
+  "soundpack"
+  "tileset"
+];
+
+{ modName, version, src, ... } @ args:
+
+stdenvNoCC.mkDerivation (args // rec {
+  pname = args.pname or "cataclysm-dda-${type}-${modName}";
+
+  modRoot = args.modRoot or ".";
+
+  configurePhase = args.configurePhase or ''
+    runHook preConfigure
+    runHook postConfigure
+  '';
+
+  buildPhase = args.buildPhase or ''
+    runHook preBuild
+    runHook postBuild
+  '';
+
+  checkPhase = args.checkPhase or ''
+    runHook preCheck
+    runHook postCheck
+  '';
+
+  installPhase = let
+    baseDir = {
+      mod = "mods";
+      soundpack = "sound";
+      tileset = "gfx";
+    }.${type};
+  in args.installPhase or ''
+    runHook preInstall
+    destdir="$out/share/cataclysm-dda/${baseDir}"
+    mkdir -p "$destdir"
+    cp -R "${modRoot}" "$destdir/${modName}"
+    runHook postInstall
+  '';
+
+  passthru = {
+    forTiles = true;
+    forCurses = type == "mod";
+  };
+})
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/common.nix b/nixpkgs/pkgs/games/cataclysm-dda/common.nix
new file mode 100644
index 000000000000..41579b527105
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/common.nix
@@ -0,0 +1,103 @@
+{ lib, stdenv, runtimeShell, pkg-config, gettext, ncurses, CoreFoundation
+, tiles, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, freetype, Cocoa
+, debug
+, useXdgDir
+}:
+
+let
+  inherit (lib) optionals optionalString;
+
+  cursesDeps = [ gettext ncurses ]
+    ++ optionals stdenv.isDarwin [ CoreFoundation ];
+
+  tilesDeps = [ SDL2 SDL2_image SDL2_mixer SDL2_ttf freetype ]
+    ++ optionals stdenv.isDarwin [ Cocoa ];
+
+  patchDesktopFile = ''
+    substituteInPlace $out/share/applications/org.cataclysmdda.CataclysmDDA.desktop \
+      --replace "Exec=cataclysm-tiles" "Exec=$out/bin/cataclysm-tiles"
+  '';
+
+  installMacOSAppLauncher = ''
+    app=$out/Applications/Cataclysm.app
+    install -D -m 444 build-data/osx/Info.plist -t $app/Contents
+    install -D -m 444 build-data/osx/AppIcon.icns -t $app/Contents/Resources
+    mkdir $app/Contents/MacOS
+    launcher=$app/Contents/MacOS/Cataclysm.sh
+    cat << EOF > $launcher
+    #!${runtimeShell}
+    $out/bin/cataclysm-tiles
+    EOF
+    chmod 555 $launcher
+  '';
+in
+
+stdenv.mkDerivation {
+  pname = "cataclysm-dda";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = cursesDeps ++ optionals tiles tilesDeps;
+
+  postPatch = ''
+    patchShebangs lang/compile_mo.sh
+  '';
+
+  makeFlags = [
+    "PREFIX=$(out)" "LANGUAGES=all"
+    (if useXdgDir then "USE_XDG_DIR=1" else "USE_HOME_DIR=1")
+  ] ++ optionals (!debug) [
+    "RELEASE=1"
+  ] ++ optionals tiles [
+    "TILES=1" "SOUND=1"
+  ] ++ optionals stdenv.isDarwin [
+    "NATIVE=osx"
+    "CLANG=1"
+    "OSX_MIN=${stdenv.targetPlatform.darwinMinVersion}"
+  ];
+
+  postInstall = optionalString tiles
+  ( if !stdenv.isDarwin
+    then patchDesktopFile
+    else installMacOSAppLauncher
+  );
+
+  dontStrip = debug;
+  enableParallelBuilding = true;
+
+  passthru = {
+    isTiles = tiles;
+    isCurses = !tiles;
+  };
+
+  meta = with lib; {
+    description = "A free, post apocalyptic, zombie infested rogue-like";
+    longDescription = ''
+      Cataclysm: Dark Days Ahead is a roguelike set in a post-apocalyptic world.
+      Surviving is difficult: you have been thrown, ill-equipped, into a
+      landscape now riddled with monstrosities of which flesh eating zombies are
+      neither the strangest nor the deadliest.
+
+      Yet with care and a little luck, many things are possible. You may try to
+      eke out an existence in the forests silently executing threats and
+      providing sustenance with your longbow. You can ride into town in a
+      jerry-rigged vehicle, all guns blazing, to settle matters in a fug of
+      smoke from your molotovs. You could take a more measured approach and
+      construct an impregnable fortress, surrounded by traps to protect you from
+      the horrors without. The longer you survive, the more skilled and adapted
+      you will get and the better equipped and armed to deal with the threats
+      you are presented with.
+
+      In the course of your ordeal there will be opportunities and temptations
+      to improve or change your very nature. There are tales of survivors fitted
+      with extraordinary cybernetics giving great power and stories too of
+      gravely mutated survivors who, warped by their ingestion of exotic
+      substances or radiation, now more closely resemble insects, birds or fish
+      than their original form.
+    '';
+    homepage = "https://cataclysmdda.org/";
+    license = licenses.cc-by-sa-30;
+    maintainers = with maintainers; [ mnacamura DeeUnderscore ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/default.nix b/nixpkgs/pkgs/games/cataclysm-dda/default.nix
new file mode 100644
index 000000000000..1649cd031a4b
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/default.nix
@@ -0,0 +1,43 @@
+{ newScope, darwin }:
+
+let
+  callPackage = newScope self;
+
+  stable = rec {
+    tiles = callPackage ./stable.nix {
+      inherit (darwin.apple_sdk.frameworks) CoreFoundation Cocoa;
+    };
+
+    curses = tiles.override { tiles = false; };
+  };
+
+  git = rec {
+    tiles = callPackage ./git.nix {
+      inherit (darwin.apple_sdk.frameworks) CoreFoundation Cocoa;
+    };
+
+    curses = tiles.override { tiles = false; };
+  };
+
+  lib = callPackage ./lib.nix {};
+
+  pkgs = callPackage ./pkgs {};
+
+  self = {
+    inherit
+    callPackage
+    stable
+    git;
+
+    inherit (lib)
+    buildMod
+    buildSoundPack
+    buildTileSet
+    wrapCDDA
+    attachPkgs;
+
+    inherit pkgs;
+  };
+in
+
+self
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/git.nix b/nixpkgs/pkgs/games/cataclysm-dda/git.nix
new file mode 100644
index 000000000000..c7090838b862
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/git.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, callPackage, CoreFoundation, fetchFromGitHub, pkgs, wrapCDDA, attachPkgs
+, tiles ? true, Cocoa
+, debug ? false
+, useXdgDir ? false
+, version ? "2022-08-20"
+, rev ? "f65b2bc4c6dea24bd9a993b8df146e5698e7e36f"
+, sha256 ? "sha256-00Tp9OmsM39PYwAJXKKRS9zmn7KsGQ9s1eVmEqghkpw="
+}:
+
+let
+  common = callPackage ./common.nix {
+    inherit CoreFoundation tiles Cocoa debug useXdgDir;
+  };
+
+  self = common.overrideAttrs (common: rec {
+    pname = common.pname + "-git";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "CleverRaven";
+      repo = "Cataclysm-DDA";
+      inherit rev sha256;
+    };
+
+    patches = [
+      # Unconditionally look for translation files in $out/share/locale
+      ./locale-path.patch
+    ];
+
+    makeFlags = common.makeFlags ++ [
+      "VERSION=git-${version}-${lib.substring 0 8 src.rev}"
+    ];
+
+    meta = common.meta // {
+      maintainers = with lib.maintainers;
+      common.meta.maintainers ++ [ rardiol ];
+    };
+  });
+in
+
+attachPkgs pkgs self
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/lib.nix b/nixpkgs/pkgs/games/cataclysm-dda/lib.nix
new file mode 100644
index 000000000000..f2b38a16aa53
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/lib.nix
@@ -0,0 +1,46 @@
+{ callPackage }:
+
+rec {
+  buildMod = callPackage ./builder.nix {
+    type = "mod";
+  };
+
+  buildSoundPack = callPackage ./builder.nix {
+    type = "soundpack";
+  };
+
+  buildTileSet = callPackage ./builder.nix {
+    type = "tileset";
+  };
+
+  wrapCDDA = callPackage ./wrapper.nix {};
+
+  # Required to fix `pkgs` and `withMods` attrs after applying `overrideAttrs`.
+  #
+  # Example:
+  #     let
+  #       myBuild = cataclysmDDA.jenkins.latest.tiles.overrideAttrs (_: {
+  #         x = "hello";
+  #       });
+  #
+  #       # This refers to the derivation before overriding! So, `badExample.x` is not accessible.
+  #       badExample = myBuild.withMods (_: []);
+  #
+  #       # `myBuild` is correctly referred by `withMods` and `goodExample.x` is accessible.
+  #       goodExample = let
+  #         inherit (cataclysmDDA) attachPkgs pkgs;
+  #       in
+  #       (attachPkgs pkgs myBuild).withMods (_: []);
+  #     in
+  #     goodExample.x  # returns "hello"
+  attachPkgs = pkgs: super:
+  let
+    self = super.overrideAttrs (old: {
+      passthru = old.passthru // {
+        pkgs = pkgs.override { build = self; };
+        withMods = wrapCDDA self;
+      };
+    });
+  in
+  self;
+}
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/locale-path.patch b/nixpkgs/pkgs/games/cataclysm-dda/locale-path.patch
new file mode 100644
index 000000000000..03f103a548fd
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/locale-path.patch
@@ -0,0 +1,18 @@
+diff --git a/src/translations.cpp b/src/translations.cpp
+index 76bdfd0..6dd6109 100644
+--- a/src/translations.cpp
++++ b/src/translations.cpp
+@@ -61,13 +61,11 @@ std::string locale_dir()
+ #define BSD
+ #endif
+ 
+-#if !defined(__ANDROID__) && ((defined(__linux__) || defined(BSD) || (defined(MACOSX) && !defined(TILES))))
+     if( !PATH_INFO::base_path().empty() ) {
+         loc_dir = PATH_INFO::base_path() + "share/locale";
+     } else {
+         loc_dir = PATH_INFO::langdir();
+     }
+-#endif
+ #endif // LOCALIZE
+     return loc_dir;
+ }
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/pkgs/default.nix b/nixpkgs/pkgs/games/cataclysm-dda/pkgs/default.nix
new file mode 100644
index 000000000000..72b2c814389a
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/pkgs/default.nix
@@ -0,0 +1,29 @@
+{ lib, callPackage, build ? null }:
+
+let
+  pkgs = {
+    mod = {
+    };
+
+    soundpack = {
+    };
+
+    tileset = {
+      UndeadPeople = callPackage ./tilesets/UndeadPeople {};
+    };
+  };
+
+  pkgs' = lib.mapAttrs (_: mods: lib.filterAttrs isAvailable mods) pkgs;
+
+  isAvailable = _: mod:
+  if (build == null) then
+    true
+  else if build.isTiles then
+    mod.forTiles or false
+  else if build.isCurses then
+    mod.forCurses or false
+  else
+    false;
+in
+
+lib.makeExtensible (_: pkgs')
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/pkgs/tilesets/UndeadPeople/default.nix b/nixpkgs/pkgs/games/cataclysm-dda/pkgs/tilesets/UndeadPeople/default.nix
new file mode 100644
index 000000000000..7a58cea82081
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/pkgs/tilesets/UndeadPeople/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildTileSet, fetchFromGitHub }:
+
+buildTileSet {
+  modName = "UndeadPeople";
+  version = "2020-07-08";
+
+  src = fetchFromGitHub {
+    owner = "SomeDeadGuy";
+    repo = "UndeadPeopleTileset";
+    rev = "f7f13b850fafe2261deee051f45d9c611a661534";
+    sha256 = "0r06srjr7rq51jk9yfyxz80nfgb98mkn86cbcjfxpibgbqvcp0zm";
+  };
+
+  modRoot = "MSX++UnDeadPeopleEdition";
+
+  meta = with lib; {
+    description = "Cataclysm DDA tileset based on MSX++ tileset";
+    homepage = "https://github.com/SomeDeadGuy/UndeadPeopleTileset";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ mnacamura ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/stable.nix b/nixpkgs/pkgs/games/cataclysm-dda/stable.nix
new file mode 100644
index 000000000000..e24432a25bbf
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/stable.nix
@@ -0,0 +1,53 @@
+{ lib
+, callPackage
+, CoreFoundation
+, fetchFromGitHub
+, fetchpatch
+, pkgs
+, wrapCDDA
+, attachPkgs
+, tiles ? true
+, Cocoa
+, debug ? false
+, useXdgDir ? false
+}:
+
+let
+  common = callPackage ./common.nix {
+    inherit CoreFoundation tiles Cocoa debug useXdgDir;
+  };
+
+  self = common.overrideAttrs (common: rec {
+    version = "0.G";
+
+    src = fetchFromGitHub {
+      owner = "CleverRaven";
+      repo = "Cataclysm-DDA";
+      rev = version;
+      sha256 = "sha256-Hda0dVVHNeZ8MV5CaCbSpdOCG2iqQEEmXdh16vwIBXk=";
+    };
+
+    patches = [
+      # Unconditionally look for translation files in $out/share/locale
+      ./locale-path.patch
+    ];
+
+    makeFlags = common.makeFlags ++ [
+      # Makefile declares version as 0.F, with no minor release number
+      "VERSION=${version}"
+    ];
+
+    env.NIX_CFLAGS_COMPILE = toString [
+      # Needed with GCC 12
+      "-Wno-error=array-bounds"
+    ];
+
+    meta = common.meta // {
+      maintainers = with lib.maintainers;
+        common.meta.maintainers ++ [ skeidel ];
+      changelog = "https://github.com/CleverRaven/Cataclysm-DDA/blob/${version}/data/changelog.txt";
+    };
+  });
+in
+
+attachPkgs pkgs self
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/wrapper.nix b/nixpkgs/pkgs/games/cataclysm-dda/wrapper.nix
new file mode 100644
index 000000000000..28189fa7375a
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/wrapper.nix
@@ -0,0 +1,47 @@
+{ lib, symlinkJoin, makeWrapper }:
+
+unwrapped:
+
+pkgsSpec:
+
+let
+  mods = if lib.isFunction pkgsSpec
+         then pkgsSpec unwrapped.pkgs
+         else pkgsSpec;
+in
+
+if builtins.length mods == 0
+then unwrapped
+else symlinkJoin {
+  name = unwrapped.name + "-with-mods";
+
+  paths = [ unwrapped ] ++ mods;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    if [ -x $out/bin/cataclysm ]; then
+        wrapProgram $out/bin/cataclysm \
+            --add-flags "--datadir $out/share/cataclysm-dda/"
+    fi
+    if [ -x $out/bin/cataclysm-tiles ]; then
+        wrapProgram $out/bin/cataclysm-tiles \
+            --add-flags "--datadir $out/share/cataclysm-dda/"
+    fi
+
+    # Launch the wrapped program
+    replaceProgram() {
+        cp "$1" "''${1}.bk"
+        unlink "$1"
+        mv "''${1}.bk" "$1"
+        sed -i "$1" -e "s,${builtins.storeDir}/.\+\(/bin/cataclysm-tiles\),$out\1,"
+    }
+    for script in "$out/share/applications/cataclysm-dda.desktop" \
+                  "$out/Applications/Cataclysm.app/Contents/MacOS/Cataclysm.sh"
+    do
+        if [ -e "$script" ]; then
+            replaceProgram "$script"
+        fi
+    done
+  '';
+}
diff --git a/nixpkgs/pkgs/games/cbonsai/default.nix b/nixpkgs/pkgs/games/cbonsai/default.nix
new file mode 100644
index 000000000000..2dc131aba6db
--- /dev/null
+++ b/nixpkgs/pkgs/games/cbonsai/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchFromGitLab, ncurses, pkg-config, nix-update-script, scdoc }:
+
+stdenv.mkDerivation rec {
+  pname = "cbonsai";
+  version = "1.3.1";
+
+  src = fetchFromGitLab {
+    owner = "jallbrit";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XFK6DiIb8CzVubTnEMkqRW8xZkX/SWjUsrfS+I7LOs8=";
+  };
+
+  nativeBuildInputs = [ pkg-config scdoc ];
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Grow bonsai trees in your terminal";
+    homepage = "https://gitlab.com/jallbrit/cbonsai";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ manveru ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/cdogs-sdl/default.nix b/nixpkgs/pkgs/games/cdogs-sdl/default.nix
new file mode 100644
index 000000000000..5c74b10ef32a
--- /dev/null
+++ b/nixpkgs/pkgs/games/cdogs-sdl/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, cmake
+, gtk3-x11
+, python3
+, protobuf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cdogs-sdl";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "cxong";
+    rev = version;
+    sha256 = "sha256-XSq0TK3ZuLOa8JJnp/Qxt16Ru3p35tq5FOo4+tv+c60=";
+  };
+
+  postPatch = ''
+    patchShebangs src/proto/nanopb/generator/*
+  '';
+
+  cmakeFlags = [
+    "-DCDOGS_DATA_DIR=${placeholder "out"}/"
+    "-DCMAKE_C_FLAGS=-Wno-error=array-bounds"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Needed with GCC 12
+    "-Wno-error=stringop-overflow"
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    (python3.withPackages (pp: with pp; [ pp.protobuf setuptools ]))
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    gtk3-x11
+    protobuf
+  ];
+
+  # inlining failed in call to 'tinydir_open': --param max-inline-insns-single limit reached
+  hardeningDisable = [ "fortify3" ];
+
+  meta = with lib; {
+    homepage = "https://cxong.github.io/cdogs-sdl";
+    description = "Open source classic overhead run-and-gun game";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ nixinator ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/cdogs-sdl.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/games/cgoban/default.nix b/nixpkgs/pkgs/games/cgoban/default.nix
new file mode 100644
index 000000000000..3d202985f1b0
--- /dev/null
+++ b/nixpkgs/pkgs/games/cgoban/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, writers
+, adoptopenjdk-jre-bin
+, fetchurl
+, makeWrapper
+}:
+stdenv.mkDerivation rec {
+  pname = "cgoban";
+  version = "3.5.23";
+
+  nativeBuildInputs = [ adoptopenjdk-jre-bin makeWrapper ];
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20210116034119/https://files.gokgs.com/javaBin/cgoban.jar";
+    sha256 = "0srw1hqr9prgr9dagfbh2j6p9ivaj40kdpyhs6zjkg7lhnnrrrcv";
+  };
+
+  dontConfigure = true;
+  dontUnpack = true;
+  dontBuild = true;
+  dontPatchELF = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -D $src $out/lib/cgoban.jar
+    makeWrapper ${adoptopenjdk-jre-bin}/bin/java $out/bin/cgoban --add-flags "-jar $out/lib/cgoban.jar"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Client for the KGS Go Server";
+    homepage = "https://www.gokgs.com/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.free;
+    maintainers = with maintainers; [ savannidgerinel ];
+    platforms = adoptopenjdk-jre-bin.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/games/chessdb/default.nix b/nixpkgs/pkgs/games/chessdb/default.nix
new file mode 100644
index 000000000000..db6214bdf096
--- /dev/null
+++ b/nixpkgs/pkgs/games/chessdb/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, tcl, tk, libX11, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "chessdb";
+  version = "3.6.19-beta-1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/chessdb/ChessDB-${version}.tar.gz";
+    sha256 = "0brc3wln3bxp979iqj2w1zxpfd0pch8zzazhdmwf7acww4hrsz62";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ tcl tk libX11 ];
+
+  makeFlags = [
+    "BINDIR=$(out)/bin"
+    "SHAREDIR=$(out)/share/chessdb"
+    "SOUNDSDIR=$(out)/share/chessdb/sounds"
+    "TBDIR=$(out)/share/chessdb/tablebases"
+    "MANDIR=$(out)/man"
+  ];
+
+  meta = {
+    homepage = "https://chessdb.sourceforge.net/";
+    description = "A free chess database";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/chessx/default.nix b/nixpkgs/pkgs/games/chessx/default.nix
new file mode 100644
index 000000000000..b49fb2c89473
--- /dev/null
+++ b/nixpkgs/pkgs/games/chessx/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, lib
+, pkg-config
+, zlib
+, qtbase
+, qtsvg
+, qttools
+, qtmultimedia
+, qmake
+, fetchpatch
+, fetchurl
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "chessx";
+  version = "1.6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/chessx/chessx-${finalAttrs.version}.tgz";
+    hash = "sha256-76YOe1WpB+vdEoEKGTHeaWJLpCVE4RoyYu1WLy3Dxhg=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    qmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtmultimedia
+    qtsvg
+    qttools
+    zlib
+  ];
+
+  patches =
+    # needed to backport patches to successfully build, due to broken release
+    let
+      repo = "https://github.com/Isarhamster/chessx/";
+    in
+    [
+      (fetchpatch {
+        url = "${repo}/commit/9797d46aa28804282bd58ce139b22492ab6881e6.diff";
+        hash = "sha256-RnIf6bixvAvyp1CKuri5LhgYFqhDNiAVYWUmSUDMgVw=";
+      })
+      (fetchpatch {
+        url = "${repo}/commit/4fab4d2f649d1cae2b54464c4e28337d1f20c214.diff";
+        hash = "sha256-EJVHricN+6uabKLfn77t8c7JjO7tMmZGsj7ZyQUGcXA=";
+      })
+    ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 release/chessx -t "$out/bin"
+    install -Dm444 unix/chessx.desktop -t "$out/share/applications"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://chessx.sourceforge.io/";
+    description = "Browse and analyse chess games";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ eclairevoyant luispedro ];
+    platforms = platforms.linux;
+    mainProgram = "chessx";
+  };
+})
diff --git a/nixpkgs/pkgs/games/chiaki/default.nix b/nixpkgs/pkgs/games/chiaki/default.nix
new file mode 100644
index 000000000000..e450f472e8d5
--- /dev/null
+++ b/nixpkgs/pkgs/games/chiaki/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv
+, fetchgit
+, cmake
+, pkg-config
+, protobuf
+, python3Packages
+, ffmpeg
+, libopus
+, mkDerivation
+, qtbase
+, qtmultimedia
+, qtsvg
+, SDL2
+, libevdev
+, udev
+, qtmacextras
+}:
+
+mkDerivation rec {
+  pname = "chiaki";
+  version = "2.2.0";
+
+  src = fetchgit {
+    url = "https://git.sr.ht/~thestr4ng3r/chiaki";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-mLx2ygMlIuDJt9iT4nIj/dcLGjMvvmneKd49L7C3BQk=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    protobuf
+    python3Packages.protobuf
+    python3Packages.python
+    python3Packages.setuptools
+  ];
+
+  buildInputs = [
+    ffmpeg
+    libopus
+    qtbase
+    qtmultimedia
+    qtsvg
+    protobuf
+    SDL2
+  ] ++ lib.optionals stdenv.isLinux [
+    libevdev
+    udev
+  ] ++ lib.optionals stdenv.isDarwin [
+    qtmacextras
+  ];
+
+  doCheck = true;
+
+  installCheckPhase = "$out/bin/chiaki --help";
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~thestr4ng3r/chiaki";
+    description = "Free and Open Source PlayStation Remote Play Client";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ delroth ];
+    platforms = platforms.all;
+    mainProgram = "chiaki";
+  };
+}
diff --git a/nixpkgs/pkgs/games/chiaki4deck/default.nix b/nixpkgs/pkgs/games/chiaki4deck/default.nix
new file mode 100644
index 000000000000..850e67eefcef
--- /dev/null
+++ b/nixpkgs/pkgs/games/chiaki4deck/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, fetchFromGitHub
+, mkDerivation
+, cmake
+, pkg-config
+, protobuf
+, python3
+, ffmpeg_6
+, libopus
+, qtbase
+, qtmultimedia
+, qtsvg
+, SDL2
+, libevdev
+, udev
+, hidapi
+, fftw
+, speexdsp
+}:
+
+mkDerivation rec {
+  pname = "chiaki4deck";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "streetpea";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-udSGtpBUbxEZU9l+jLmUWJbkaCxKGoPuKAaYVmEEezk=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    protobuf
+    python3
+    python3.pkgs.protobuf
+    python3.pkgs.setuptools
+  ];
+
+  buildInputs = [
+    ffmpeg_6
+    libopus
+    qtbase
+    qtmultimedia
+    qtsvg
+    protobuf
+    SDL2
+    hidapi
+    fftw
+    libevdev
+    udev
+    speexdsp
+  ];
+
+  meta = with lib; {
+    homepage = "https://streetpea.github.io/chiaki4deck/";
+    description = "Fork of Chiaki (Open Source Playstation Remote Play) with Enhancements for Steam Deck";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ devusb ];
+    platforms = platforms.linux;
+    mainProgram = "chiaki";
+  };
+}
diff --git a/nixpkgs/pkgs/games/chromium-bsu/default.nix b/nixpkgs/pkgs/games/chromium-bsu/default.nix
new file mode 100644
index 000000000000..1ab2fb8722b0
--- /dev/null
+++ b/nixpkgs/pkgs/games/chromium-bsu/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, fontconfig
+, freealut
+, freeglut
+, ftgl
+, gettext
+, glpng
+, libGL
+, libGLU
+, openal
+, pkg-config
+, quesoglc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "chromium-bsu";
+  version = "0.9.16.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/chromium-bsu/Chromium%20B.S.U.%20source%20code/${pname}-${version}.tar.gz";
+    hash = "sha256-ocFBo00ZpZYHroEWahmGTrjITPhrFVRi/tMabVbhYko=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    pkg-config
+  ];
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    fontconfig
+    freealut
+    freeglut
+    ftgl
+    glpng
+    libGL
+    libGLU
+    openal
+    quesoglc
+  ];
+
+  # Autodetection is somewhat buggy; this is to avoid SLD1 to be loaded
+  configureFlags = [
+    "--disable-sdlimage"
+    "--disable-sdlmixer"
+  ];
+
+
+  postInstall = ''
+    install -D misc/chromium-bsu.png $out/share/pixmaps/chromium-bsu.png
+    install -D misc/chromium-bsu.desktop $out/share/applications/chromium-bsu.desktop
+  '';
+
+  meta = with lib; {
+    homepage = "http://chromium-bsu.sourceforge.net/";
+    description = "A fast paced, arcade-style, top-scrolling space shooter";
+    license = licenses.artistic1;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
+# TODO [ AndersonTorres ]: joystick; gothic uralic font
diff --git a/nixpkgs/pkgs/games/ckan/default.nix b/nixpkgs/pkgs/games/ckan/default.nix
new file mode 100644
index 000000000000..960798cde222
--- /dev/null
+++ b/nixpkgs/pkgs/games/ckan/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, makeWrapper, mono, gtk2, curl }:
+
+stdenv.mkDerivation rec {
+  pname = "ckan";
+  version = "1.33.2";
+
+  src = fetchurl {
+    url = "https://github.com/KSP-CKAN/CKAN/releases/download/v${version}/ckan.exe";
+    sha256 = "sha256-FIndxRyGDgXinP8ZX0o6LEJgGNNw84tCPw5FdVAU3TI=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ mono ];
+
+  libraries = lib.makeLibraryPath [ gtk2 curl ];
+
+  buildPhase = "true";
+
+  installPhase = ''
+    install -m 644 -D $src $out/bin/ckan.exe
+    makeWrapper ${mono}/bin/mono $out/bin/ckan \
+      --add-flags $out/bin/ckan.exe \
+      --set LD_LIBRARY_PATH $libraries
+  '';
+
+  meta = with lib; {
+    description = "Mod manager for Kerbal Space Program";
+    homepage = "https://github.com/KSP-CKAN/CKAN";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Baughn ymarkus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/cl-wordle/default.nix b/nixpkgs/pkgs/games/cl-wordle/default.nix
new file mode 100644
index 000000000000..505c5166e42a
--- /dev/null
+++ b/nixpkgs/pkgs/games/cl-wordle/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cl-wordle";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "conradludgate";
+    repo = "wordle";
+    rev = "v${version}";
+    sha256 = "sha256-wFTvzAzboUFQg3fauIwIdRChK7rmLES92jK+8ff1D3s=";
+  };
+
+  cargoSha256 = "sha256-PtJbLpAUH44alupFY6wX++t/QsKknn5bXvnXzdYsd9o=";
+
+  meta = with lib; {
+    description = "Wordle TUI in Rust";
+    homepage = "https://github.com/conradludgate/wordle";
+    # repo has no license, but crates.io says it's MIT
+    license = licenses.mit;
+    maintainers = with maintainers; [ lom ];
+    mainProgram = "wordle";
+  };
+}
diff --git a/nixpkgs/pkgs/games/classicube/default.nix b/nixpkgs/pkgs/games/classicube/default.nix
new file mode 100644
index 000000000000..96b941490b01
--- /dev/null
+++ b/nixpkgs/pkgs/games/classicube/default.nix
@@ -0,0 +1,101 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, dos2unix
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, libX11
+, libXi
+, libGL
+, curl
+, openal
+, liberation_ttf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ClassiCube";
+  version = "1.3.6";
+
+  src = fetchFromGitHub {
+    owner = "UnknownShadow200";
+    repo = "ClassiCube";
+    rev = version;
+    sha256 = "sha256-7VPn5YXNoAR3ftYMDQuQRqeMCrbyB56ir1sQWBiPWAI=";
+  };
+
+  nativeBuildInputs = [ dos2unix makeWrapper copyDesktopItems ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      desktopName = pname;
+      genericName = "Sandbox Block Game";
+      exec = "ClassiCube";
+      icon = "CCicon";
+      comment = "Minecraft Classic inspired sandbox game";
+      categories = [ "Game" ];
+    })
+  ];
+
+  prePatch = ''
+    # The ClassiCube sources have DOS-style newlines
+    # which causes problems with diff/patch.
+    dos2unix 'src/Platform_Posix.c' 'src/Core.h'
+  '';
+
+  patches = [
+    # Fix hardcoded font paths
+    ./font-location.patch
+    # For some reason, the Makefile doesn't link
+    # with libcurl and openal when ClassiCube requires them.
+    ./fix-linking.patch
+  ];
+
+  font_path = "${liberation_ttf}/share/fonts/truetype";
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    # ClassiCube hardcodes locations of fonts.
+    # This changes the hardcoded location
+    # to the path of liberation_ttf instead
+    substituteInPlace src/Platform_Posix.c \
+      --replace '%NIXPKGS_FONT_PATH%' "${font_path}"
+    # ClassiCube's Makefile hardcodes JOBS=1 for some reason,
+    # even though it works perfectly well multi-threaded.
+    substituteInPlace Makefile \
+      --replace 'JOBS=1' "JOBS=$NIX_BUILD_CORES"
+  '';
+
+  buildInputs = [ libX11 libXi libGL curl openal liberation_ttf ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    cp 'ClassiCube' "$out/bin"
+    # ClassiCube puts downloaded resources
+    # next to the location of the executable by default.
+    # This doesn't work with Nix
+    # as the location of the executable is read-only.
+    # We wrap the program to make it put its resources
+    # in ~/.local/share instead.
+    wrapProgram "$out/bin/ClassiCube" \
+      --run 'mkdir -p "$HOME/.local/share/ClassiCube"' \
+      --run 'cd       "$HOME/.local/share/ClassiCube"'
+
+    mkdir -p "$out/share/icons/hicolor/256x256/apps"
+    cp misc/CCicon.png "$out/share/icons/hicolor/256x256/apps"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.classicube.net/";
+    description = "A lightweight, custom Minecraft Classic/ClassiCube client with optional additions written from scratch in C";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ _360ied ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/classicube/fix-linking.patch b/nixpkgs/pkgs/games/classicube/fix-linking.patch
new file mode 100644
index 000000000000..4fc0e826cb4a
--- /dev/null
+++ b/nixpkgs/pkgs/games/classicube/fix-linking.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index 83188ce..3439cdb 100644
+--- a/Makefile
++++ b/Makefile
+@@ -40,7 +40,7 @@ LIBS=-mwindows -lws2_32 -lwininet -lwinmm -limagehlp -lcrypt32 -ld3d9
+ endif
+ 
+ ifeq ($(PLAT),linux)
+-LIBS=-lX11 -lXi -lpthread -lGL -lm -ldl
++LIBS=-lX11 -lXi -lpthread -lGL -lm -ldl -lcurl -lopenal
+ endif
+ 
+ ifeq ($(PLAT),sunos)
diff --git a/nixpkgs/pkgs/games/classicube/font-location.patch b/nixpkgs/pkgs/games/classicube/font-location.patch
new file mode 100644
index 000000000000..bb7d383236f5
--- /dev/null
+++ b/nixpkgs/pkgs/games/classicube/font-location.patch
@@ -0,0 +1,16 @@
+diff --git a/src/Platform_Posix.c b/src/Platform_Posix.c
+index bca992d..3540afa 100644
+--- a/src/Platform_Posix.c
++++ b/src/Platform_Posix.c
+@@ -440,9 +440,8 @@ void Platform_LoadSysFonts(void) {
+ 		String_FromConst("/Library/Fonts")
+ 	};
+ #else
+-	static const cc_string dirs[] = {
+-		String_FromConst("/usr/share/fonts"),
+-		String_FromConst("/usr/local/share/fonts")
++	static const cc_string dirs[] = {
++		String_FromConst("%NIXPKGS_FONT_PATH%")
+ 	};
+ #endif
+ 	for (i = 0; i < Array_Elems(dirs); i++) {
diff --git a/nixpkgs/pkgs/games/clonehero/default.nix b/nixpkgs/pkgs/games/clonehero/default.nix
new file mode 100644
index 000000000000..0f7ae45a6683
--- /dev/null
+++ b/nixpkgs/pkgs/games/clonehero/default.nix
@@ -0,0 +1,120 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, gtk3
+, zlib
+, alsa-lib
+, dbus
+, libXcursor
+, libXext
+, libXi
+, libXinerama
+, libxkbcommon
+, libXrandr
+, libXScrnSaver
+, libXxf86vm
+, udev
+, vulkan-loader # (not used by default, enable in settings menu)
+, wayland # (not used by default, enable with SDL_VIDEODRIVER=wayland - doesn't support HiDPI)
+, makeDesktopItem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "clonehero";
+  version = "1.0.0.4080";
+
+  src = fetchurl {
+    url = "https://github.com/clonehero-game/releases/releases/download/V${finalAttrs.version}/CloneHero-linux.tar.xz";
+    hash = "sha256-YWLV+wgQ9RfKRSSWh/x0PMjB6tFA4YpHb9WtYOOgZZI=";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  buildInputs = [
+    # Load-time libraries (loaded from DT_NEEDED section in ELF binary)
+    alsa-lib
+    gtk3
+    stdenv.cc.cc.lib
+    zlib
+
+    # Run-time libraries (loaded with dlopen)
+    dbus
+    libXcursor
+    libXext
+    libXi
+    libXinerama
+    libxkbcommon
+    libXrandr
+    libXScrnSaver
+    libXxf86vm
+    udev
+    vulkan-loader
+    wayland
+  ];
+
+  desktopItem = makeDesktopItem {
+    name = "clonehero";
+    desktopName = "Clone Hero";
+    comment = finalAttrs.meta.description;
+    icon = "clonehero";
+    exec = "clonehero";
+    categories = [ "Game" ];
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 clonehero "$out/bin/clonehero"
+    install -Dm644 UnityPlayer.so "$out/libexec/clonehero/UnityPlayer.so"
+
+    mkdir -p "$out/share/pixmaps"
+    cp -r clonehero_Data "$out/share/clonehero"
+    ln -s "$out/share/clonehero" "$out/bin/clonehero_Data"
+    ln -s "$out/share/clonehero/Resources/UnityPlayer.png" "$out/share/pixmaps/clonehero.png"
+    install -Dm644 "$desktopItem/share/applications/clonehero.desktop" "$out/share/applications/clonehero.desktop"
+
+    mkdir -p "$doc/share/doc/clonehero"
+    cp -r CLONE_HERO_MANUAL.{pdf,txt} Custom EULA.txt THIRDPARTY.txt "$doc/share/doc/clonehero"
+
+    runHook postInstall
+  '';
+
+  # Patch required run-time libraries as load-time libraries
+  #
+  # Libraries found with:
+  # > strings UnityPlayer.so | grep '\.so'
+  # and:
+  # > LD_DEBUG=libs clonehero
+  postFixup = ''
+    patchelf \
+      --add-needed libasound.so.2 \
+      --add-needed libdbus-1.so.3 \
+      --add-needed libpthread.so.0 \
+      --add-needed libudev.so.1 \
+      --add-needed libvulkan.so.1 \
+      --add-needed libwayland-client.so.0 \
+      --add-needed libwayland-cursor.so.0 \
+      --add-needed libwayland-egl.so.1 \
+      --add-needed libX11.so.6 \
+      --add-needed libXcursor.so.1 \
+      --add-needed libXext.so.6 \
+      --add-needed libXi.so.6 \
+      --add-needed libXinerama.so.1 \
+      --add-needed libxkbcommon.so.0 \
+      --add-needed libXrandr.so.2 \
+      --add-needed libXss.so.1 \
+      --add-needed libXxf86vm.so.1 \
+      "$out/libexec/clonehero/UnityPlayer.so"
+  '';
+
+  meta = with lib; {
+    description = "Clone of Guitar Hero and Rockband-style games";
+    homepage = "https://clonehero.net";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ kira-bruneau syboxez ];
+    platforms = [ "x86_64-linux" ];
+  };
+})
diff --git a/nixpkgs/pkgs/games/cockatrice/default.nix b/nixpkgs/pkgs/games/cockatrice/default.nix
new file mode 100644
index 000000000000..0d8b925faa2b
--- /dev/null
+++ b/nixpkgs/pkgs/games/cockatrice/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, mkDerivation, cmake, protobuf
+, qtbase, qtmultimedia, qttools, qtwebsockets, wrapQtAppsHook
+}:
+
+mkDerivation rec {
+  pname = "cockatrice";
+  version = "2023-09-14-Release-2.9.0";
+
+  src = fetchFromGitHub {
+    owner = "Cockatrice";
+    repo = "Cockatrice";
+    rev = version;
+    sha256 = "sha256-mzYh0qRKiHY64LnoOfF4kDEO06IW1SrCqEiOlu81Fso=";
+  };
+
+  buildInputs = [
+     qtbase qtmultimedia protobuf qttools qtwebsockets
+  ];
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  meta = {
+    homepage = "https://github.com/Cockatrice/Cockatrice";
+    description = "A cross-platform virtual tabletop for multiplayer card games";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ evanjs ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/colobot/data.nix b/nixpkgs/pkgs/games/colobot/data.nix
new file mode 100644
index 000000000000..761c68c15e81
--- /dev/null
+++ b/nixpkgs/pkgs/games/colobot/data.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchFromGitHub, cmake
+, gettext, vorbis-tools
+, xmlstarlet, doxygen, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "colobot-data";
+  version = "0.2.0-alpha";
+
+  src = fetchFromGitHub {
+    owner = "colobot";
+    repo = "colobot-data";
+    rev = "colobot-gold-${version}";
+    sha256 = "sha256-yzIbAzrGsDe6hO0GHF9gjnj7IE8B7+5LDbvjZi4Wtms=";
+  };
+
+  nativeBuildInputs = [ cmake vorbis-tools xmlstarlet doxygen python3 ];
+  buildInputs = [ gettext ];
+
+  enableParallelBuilding = false;
+  # Build procedure requires the data folder
+  patchPhase = ''
+    cp -r $src localSrc
+    chmod +w localSrc/help/bots/po
+    find -type d -exec chmod +w {} \;
+    for po in localSrc/help/{bots,cbot,object,generic,programs}/po/* localSrc/levels/*{/*/*,}/po/*; do
+      rm $po
+      touch $po
+    done
+    # skip music
+    rm localSrc/music/CMakeLists.txt
+    cd localSrc
+  '';
+
+  meta = with lib; {
+    homepage = "https://colobot.info/";
+    description = "Game data for colobot";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ freezeboy ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/colobot/default.nix b/nixpkgs/pkgs/games/colobot/default.nix
new file mode 100644
index 000000000000..e1070843811c
--- /dev/null
+++ b/nixpkgs/pkgs/games/colobot/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, boost, SDL2, SDL2_image, SDL2_ttf, libpng
+, glew, gettext, libsndfile, libvorbis, libogg, physfs, openal
+, xmlstarlet, doxygen, python3, callPackage }:
+
+let
+  colobot-data = callPackage ./data.nix {};
+in
+stdenv.mkDerivation rec {
+  pname = "colobot";
+  # Maybe require an update to package colobot-data as well
+  # in file data.nix next to this one
+  version = "0.2.0-alpha";
+
+  src = fetchFromGitHub {
+    owner = "colobot";
+    repo = pname;
+    rev = "colobot-gold-${version}";
+    sha256 = "sha256-Nu7NyicNIk5yza9sXfd4KbGdB65guVuGREd6rwRU3lU=";
+  };
+
+  nativeBuildInputs = [ cmake xmlstarlet doxygen python3 ];
+  buildInputs = [ boost SDL2 SDL2_image SDL2_ttf libpng glew gettext libsndfile libvorbis libogg physfs openal ];
+
+  enableParallelBuilding = false;
+
+  # The binary ends in games directoy
+  postInstall = ''
+    mv $out/games $out/bin
+    for contents in ${colobot-data}/share/games/colobot/*; do
+      ln -s $contents $out/share/games/colobot
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://colobot.info/";
+    description = "Colobot: Gold Edition is a real-time strategy game, where you can program your bots";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ freezeboy ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/commandergenius/default.nix b/nixpkgs/pkgs/games/commandergenius/default.nix
new file mode 100644
index 000000000000..725cc5231c7e
--- /dev/null
+++ b/nixpkgs/pkgs/games/commandergenius/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitLab, SDL2, SDL2_image, pkg-config
+, libvorbis, libGL, boost, cmake, zlib, curl, SDL2_mixer, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "commandergenius";
+  version = "2.3.3";
+
+  src = fetchFromGitLab {
+    owner = "Dringgstein";
+    repo = "Commander-Genius";
+    rev = "v${version}";
+    sha256 = "04nb23wwvc3yywz3cr6gvn02fa7psfs22ssg4wk12s08z1azvz3h";
+  };
+
+  buildInputs = [ SDL2 SDL2_image SDL2_mixer libGL boost libvorbis zlib curl python3 ];
+
+  preConfigure = ''
+    export cmakeFlags="$cmakeFlags -DCMAKE_INSTALL_PREFIX=$out -DSHAREDIR=$out/share"
+    export makeFlags="$makeFlags DESTDIR=$(out)"
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  postPatch = ''
+    NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(sdl2-config --cflags)"
+    sed -i 's,APPDIR games,APPDIR bin,' src/install.cmake
+  '';
+
+  meta = with lib; {
+    description = "Modern Interpreter for the Commander Keen Games";
+    longDescription = ''
+      Commander Genius is an open-source clone of
+      Commander Keen which allows you to play
+      the games, and some of the mods
+      made for it. All of the original data files
+      are required to do so
+    '';
+    homepage = "https://github.com/gerstrong/Commander-Genius";
+    maintainers = with maintainers; [ hce ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/construo/default.nix b/nixpkgs/pkgs/games/construo/default.nix
new file mode 100644
index 000000000000..2565d8599a53
--- /dev/null
+++ b/nixpkgs/pkgs/games/construo/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchurl
+, libX11
+, zlib
+, xorgproto
+, libGL ? null
+, libGLU ? null
+, freeglut ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "construo";
+  version = "0.2.3";
+
+  src = fetchurl {
+    url = "https://github.com/Construo/construo/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "1wmj527hbj1qv44cdsj6ahfjrnrjwg2dp8gdick8nd07vm062qxa";
+  };
+
+  buildInputs = [ libX11 zlib xorgproto ]
+    ++ lib.optional (libGL != null) libGL
+    ++ lib.optional (libGLU != null) libGLU
+    ++ lib.optional (freeglut != null) freeglut;
+
+  preConfigure = ''
+    substituteInPlace src/Makefile.in \
+      --replace games bin
+  '';
+
+  meta = {
+    description = "Masses and springs simulation game";
+    homepage = "http://fs.fsf.org/construo/";
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/games/corsix-th/default.nix b/nixpkgs/pkgs/games/corsix-th/default.nix
new file mode 100644
index 000000000000..0dd8edb59820
--- /dev/null
+++ b/nixpkgs/pkgs/games/corsix-th/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, doxygen
+, ffmpeg
+, freetype
+, lua
+, makeWrapper
+, SDL2
+, SDL2_mixer
+, timidity
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "corsix-th";
+  version = "0.67";
+
+  src = fetchFromGitHub {
+    owner = "CorsixTH";
+    repo = "CorsixTH";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-WA/VJqHXzBfVUBNtxCVsGBRzSRQ0pvDvAy03ntc0KZE=";
+  };
+
+  luaEnv = lua.withPackages(p: with p; [ luafilesystem lpeg luasec luasocket ]);
+  nativeBuildInputs = [ cmake doxygen makeWrapper ];
+  buildInputs = [ ffmpeg freetype lua finalAttrs.luaEnv SDL2 SDL2_mixer timidity ];
+  cmakeFlags = [ "-Wno-dev" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/corsix-th \
+    --set LUA_PATH "$LUA_PATH" \
+    --set LUA_CPATH "$LUA_CPATH"
+  '';
+
+  meta = with lib; {
+    description = "A reimplementation of the 1997 Bullfrog business sim Theme Hospital.";
+    homepage = "https://corsixth.com/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hughobrien ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/games/crack-attack/crack-attack-1.1.14-gcc43.patch b/nixpkgs/pkgs/games/crack-attack/crack-attack-1.1.14-gcc43.patch
new file mode 100644
index 000000000000..fb2910d128ee
--- /dev/null
+++ b/nixpkgs/pkgs/games/crack-attack/crack-attack-1.1.14-gcc43.patch
@@ -0,0 +1,10 @@
+--- crack-attack-1.1.14/src/Game.h
++++ crack-attack-1.1.14/src/Game.h
+@@ -34,6 +34,7 @@
+ #include <climits>
+ #include <cstdlib>
+ #include <cmath>
++#include <cstring>
+ 
+ #ifdef __MINGW32__
+ #  include <windows.h>
diff --git a/nixpkgs/pkgs/games/crack-attack/crack-attack-1.1.14-glut.patch b/nixpkgs/pkgs/games/crack-attack/crack-attack-1.1.14-glut.patch
new file mode 100644
index 000000000000..4daea4c53a28
--- /dev/null
+++ b/nixpkgs/pkgs/games/crack-attack/crack-attack-1.1.14-glut.patch
@@ -0,0 +1,10 @@
+--- crack-attack-1.1.14/src/Attack.cxx
++++ crack-attack-1.1.14/src/Attack.cxx
+@@ -83,6 +83,7 @@
+   int height = -1, width = -1;
+   
+   player_name[0] = '\0';
++  glutInit(&argc, argv);
+   parseCommandLine(argc, argv, mode, port, host_name, player_name, height, width);
+   run_crack_attack(mode, port, host_name, player_name, height, width);
+ 
diff --git a/nixpkgs/pkgs/games/crack-attack/default.nix b/nixpkgs/pkgs/games/crack-attack/default.nix
new file mode 100644
index 000000000000..69395e1c44aa
--- /dev/null
+++ b/nixpkgs/pkgs/games/crack-attack/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, pkg-config, gtk2, freeglut, SDL, SDL_mixer, libGLU, libGL, libXi, libXmu }:
+
+stdenv.mkDerivation rec {
+  pname = "crack-attack";
+  version = "1.1.14";
+
+  src = fetchurl {
+    url = "mirror://savannah/crack-attack/crack-attack-${version}.tar.gz";
+    sha256 = "1sakj9a2q05brpd7lkqxi8q30bccycdzd96ns00s6jbxrzjlijkm";
+  };
+
+  patches = [
+    ./crack-attack-1.1.14-gcc43.patch
+    ./crack-attack-1.1.14-glut.patch
+  ];
+
+  configureFlags = [
+    "--enable-sound=yes"
+    "--prefix=${placeholder "out"}"
+    "--datadir=${placeholder "out"}/share"
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 freeglut SDL SDL_mixer libGLU libGL libXi libXmu ];
+
+  hardeningDisable = [ "format" ];
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "A fast-paced puzzle game inspired by the classic Super NES title Tetris Attack!";
+    homepage = "https://www.nongnu.org/crack-attack/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/crawl/crawl_purify.patch b/nixpkgs/pkgs/games/crawl/crawl_purify.patch
new file mode 100644
index 000000000000..8650141744d6
--- /dev/null
+++ b/nixpkgs/pkgs/games/crawl/crawl_purify.patch
@@ -0,0 +1,33 @@
+diff --git a/crawl-ref/source/util/find_font b/crawl-ref/source/util/find_font
+index f8b576fd63..b95c21c0a1 100755
+--- a/crawl-ref/source/util/find_font
++++ b/crawl-ref/source/util/find_font
+@@ -1,6 +1,6 @@
+ #! /bin/sh
+ 
+-FONTDIRS="/usr/share/fonts /usr/local/share/fonts /usr/*/lib/X11/fonts"
++FONTDIRS="${fontsPath}/share/fonts"
+ 
+ name=$1
+ [ "$name" ] || { echo "Usage: $0 <fontname.ttf>" >&2; exit 100; }
+@@ -11,6 +11,6 @@ name=$1
+         for dir in $FONTDIRS; do
+             [ -d "$dir" ] && echo "$dir"
+         done
+-    } | xargs -I% find % \( -type f -o -type l \) -iname "$name" -print \
++    } | xargs -I% find -L % \( -type f -o -type l \) -iname "$name" -print \
+       | head -n1
+ } 2>/dev/null
+diff --git a/crawl-ref/source/windowmanager-sdl.cc b/crawl-ref/source/windowmanager-sdl.cc
+index e29ccff507..9bf01e040a 100644
+--- a/crawl-ref/source/windowmanager-sdl.cc
++++ b/crawl-ref/source/windowmanager-sdl.cc
+@@ -20,7 +20,7 @@
+ # else
+ #  include <SDL2/SDL.h>
+ # endif
+-# include <SDL_image.h>
++# include <SDL2/SDL_image.h>
+ # if defined(USE_SOUND) && !defined(WINMM_PLAY_SOUNDS)
+ #  include <SDL2/SDL_mixer.h>
+ # endif
diff --git a/nixpkgs/pkgs/games/crawl/default.nix b/nixpkgs/pkgs/games/crawl/default.nix
new file mode 100644
index 000000000000..fa409987ff81
--- /dev/null
+++ b/nixpkgs/pkgs/games/crawl/default.nix
@@ -0,0 +1,77 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, which, sqlite, lua5_1, perl, python3, zlib, pkg-config, ncurses
+, dejavu_fonts, libpng, SDL2, SDL2_image, SDL2_mixer, libGLU, libGL, freetype, pngcrush, advancecomp
+, tileMode ? false, enableSound ? tileMode, buildPackages
+
+# MacOS / Darwin builds
+, darwin ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "crawl${lib.optionalString tileMode "-tiles"}";
+  version = "0.29.0";
+
+  src = fetchFromGitHub {
+    owner = "crawl";
+    repo = "crawl";
+    rev = version;
+    sha256 = "sha256-SM8dSDV+88QGMqoFkITop1PHh9EakdgiV4tkXCw9pjM=";
+  };
+
+  # Patch hard-coded paths and remove force library builds
+  patches = [ ./crawl_purify.patch ];
+
+  nativeBuildInputs = [ pkg-config which perl pngcrush advancecomp ];
+
+  # Still unstable with luajit
+  buildInputs = [ lua5_1 zlib sqlite ncurses ]
+                ++ (with python3.pkgs; [ pyyaml ])
+                ++ lib.optionals tileMode [ libpng SDL2 SDL2_image freetype libGLU libGL ]
+                ++ lib.optional enableSound SDL2_mixer
+                ++ (lib.optionals stdenv.isDarwin (
+                  assert (lib.assertMsg (darwin != null) "Must have darwin frameworks available for darwin builds");
+                  with darwin.apple_sdk.frameworks; [
+                    AppKit AudioUnit CoreAudio ForceFeedback Carbon IOKit OpenGL
+                   ]
+                ));
+
+  preBuild = ''
+    cd crawl-ref/source
+    echo "${version}" > util/release_ver
+    patchShebangs 'util'
+    patchShebangs util/gen-mi-enum
+    rm -rf contrib
+  '';
+
+  fontsPath = lib.optionalString tileMode dejavu_fonts;
+
+  makeFlags = [ "prefix=${placeholder "out"}" "FORCE_CC=${stdenv.cc.targetPrefix}cc" "FORCE_CXX=${stdenv.cc.targetPrefix}c++" "HOSTCXX=${buildPackages.stdenv.cc.targetPrefix}c++"
+                "FORCE_PKGCONFIG=y"
+                "SAVEDIR=~/.crawl" "sqlite=${sqlite.dev}"
+                "DATADIR=${placeholder "out"}"
+              ] ++ lib.optional tileMode "TILES=y"
+                ++ lib.optional enableSound "SOUND=y";
+
+  postInstall = ''
+    ${lib.optionalString tileMode "mv $out/bin/crawl $out/bin/crawl-tiles"}
+    sed -i 's#/usr/games/##' debian/crawl${lib.optionalString tileMode "-tiles"}.desktop
+    install -m 444 -D debian/crawl${lib.optionalString tileMode "-tiles"}.desktop \
+      $out/share/applications/crawl${lib.optionalString tileMode "-tiles"}.desktop
+    install -m 444 -D dat/tiles/stone_soup_icon-512x512.png $out/share/icons/hicolor/512x512/apps/crawl.png
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Open-source, single-player, role-playing roguelike game";
+    homepage = "http://crawl.develz.org/";
+    longDescription = ''
+      Dungeon Crawl: Stone Soup, an open-source, single-player, role-playing
+      roguelike game of exploration and treasure-hunting in dungeons filled
+      with dangerous and unfriendly monsters in a quest to rescue the
+      mystifyingly fabulous Orb of Zot.
+    '';
+    platforms = platforms.linux ++ platforms.darwin;
+    license = with licenses; [ gpl2Plus bsd2 bsd3 mit licenses.zlib cc0 ];
+    maintainers = [ maintainers.abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/crossfire/crossfire-arch.nix b/nixpkgs/pkgs/games/crossfire/crossfire-arch.nix
new file mode 100644
index 000000000000..c09f474e70c7
--- /dev/null
+++ b/nixpkgs/pkgs/games/crossfire/crossfire-arch.nix
@@ -0,0 +1,27 @@
+{ stdenv, lib, fetchsvn,
+  version, rev, sha256 }:
+
+stdenv.mkDerivation rec {
+  pname = "crossfire-arch";
+  version = rev;
+
+  src = fetchsvn {
+    url = "http://svn.code.sf.net/p/crossfire/code/arch/trunk/";
+    inherit sha256;
+    rev = "r${rev}";
+  };
+
+  installPhase = ''
+    mkdir -p "$out"
+    cp -a . "$out/"
+  '';
+
+  meta = with lib; {
+    description = "Archetype data for the Crossfire free MMORPG";
+    homepage = "http://crossfire.real-time.com/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    hydraPlatforms = [];
+    maintainers = with maintainers; [ ToxicFrog ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/crossfire/crossfire-client.nix b/nixpkgs/pkgs/games/crossfire/crossfire-client.nix
new file mode 100644
index 000000000000..0d335b4f529a
--- /dev/null
+++ b/nixpkgs/pkgs/games/crossfire/crossfire-client.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchsvn
+, cmake, pkg-config, perl, vala
+, gtk2, pcre, zlib, libpng, fribidi, harfbuzzFull, xorg, util-linux, curl
+, SDL, SDL_image, SDL_mixer, libselinux, libsepol
+, version, rev, sha256
+}:
+
+stdenv.mkDerivation rec {
+  pname = "crossfire-client";
+  version = rev;
+
+  src = fetchsvn {
+    url = "http://svn.code.sf.net/p/crossfire/code/client/trunk/";
+    inherit sha256;
+    rev = "r${rev}";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config perl vala ];
+  buildInputs = [
+    gtk2 pcre zlib libpng fribidi harfbuzzFull xorg.libpthreadstubs
+    xorg.libXdmcp curl SDL SDL_image SDL_mixer util-linux libselinux libsepol
+  ];
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "GTKv2 client for the Crossfire free MMORPG";
+    homepage = "http://crossfire.real-time.com/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ToxicFrog ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/crossfire/crossfire-maps.nix b/nixpkgs/pkgs/games/crossfire/crossfire-maps.nix
new file mode 100644
index 000000000000..cb514a90d169
--- /dev/null
+++ b/nixpkgs/pkgs/games/crossfire/crossfire-maps.nix
@@ -0,0 +1,27 @@
+{ stdenv, lib, fetchsvn,
+  version, rev, sha256 }:
+
+stdenv.mkDerivation rec {
+  pname = "crossfire-maps";
+  version = rev;
+
+  src = fetchsvn {
+    url = "http://svn.code.sf.net/p/crossfire/code/maps/trunk/";
+    inherit sha256;
+    rev = "r${rev}";
+  };
+
+  installPhase = ''
+    mkdir -p "$out"
+    cp -a . "$out/"
+  '';
+
+  meta = with lib; {
+    description = "Map data for the Crossfire free MMORPG";
+    homepage = "http://crossfire.real-time.com/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    hydraPlatforms = [];
+    maintainers = with maintainers; [ ToxicFrog ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/crossfire/crossfire-server.nix b/nixpkgs/pkgs/games/crossfire/crossfire-server.nix
new file mode 100644
index 000000000000..9827aa76c526
--- /dev/null
+++ b/nixpkgs/pkgs/games/crossfire/crossfire-server.nix
@@ -0,0 +1,52 @@
+{ stdenv
+, lib
+, fetchsvn
+, autoreconfHook
+, autoconf
+, automake
+, libtool
+, flex
+, perl
+, check
+, pkg-config
+, python39 # crossfire-server relies on a parser wich was removed in python >3.9
+, version
+, rev
+, sha256
+, maps
+, arch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "crossfire-server";
+  version = rev;
+
+  src = fetchsvn {
+    url = "http://svn.code.sf.net/p/crossfire/code/server/trunk/";
+    inherit sha256;
+    rev = "r${rev}";
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool flex perl check pkg-config python39 ];
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    ln -s ${arch} lib/arch
+    ln -s ${maps} lib/maps
+    sh autogen.sh
+  '';
+
+  configureFlags = [ "--with-python=${python39}" ];
+
+  postInstall = ''
+    ln -s ${maps} "$out/share/crossfire/maps"
+  '';
+
+  meta = with lib; {
+    description = "Server for the Crossfire free MMORPG";
+    homepage = "http://crossfire.real-time.com/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ToxicFrog ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/crossfire/default.nix b/nixpkgs/pkgs/games/crossfire/default.nix
new file mode 100644
index 000000000000..7d0716df3d9b
--- /dev/null
+++ b/nixpkgs/pkgs/games/crossfire/default.nix
@@ -0,0 +1,28 @@
+{ callPackage, ... }:
+
+rec {
+  crossfire-client = callPackage ./crossfire-client.nix {
+    version = "1.75.0";
+    rev = "21760";
+    sha256 = "0b42sak8hj60nywfswkps777asy9p8r9wsn7pmj2nqbd29ng1p9d";
+  };
+
+  crossfire-server = callPackage ./crossfire-server.nix {
+    version = "latest";
+    rev = "22111";
+    sha256 = "04fjif6zv642n2zlw27cgzkak2kknwrxqzg42bvzl7q901bsr9l7";
+    maps = crossfire-maps; arch = crossfire-arch;
+  };
+
+  crossfire-arch = callPackage ./crossfire-arch.nix {
+    version = "latest";
+    rev = "22111";
+    sha256 = "0l4rp3idvbhknpxxs0w4i4nqfg01wblzm4v4j375xwxxbf00j0ms";
+  };
+
+  crossfire-maps = callPackage ./crossfire-maps.nix {
+    version = "latest";
+    rev = "22111";
+    sha256 = "1dwfc84acjvbjgjakkb8z8pdlksbsn90j0z8z8rq37lqx0kx1sap";
+  };
+}
diff --git a/nixpkgs/pkgs/games/crrcsim/default.nix b/nixpkgs/pkgs/games/crrcsim/default.nix
new file mode 100644
index 000000000000..741f402870a8
--- /dev/null
+++ b/nixpkgs/pkgs/games/crrcsim/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, libGLU, libGL, SDL, SDL_mixer, plib, libjpeg }:
+let
+  version = "0.9.13";
+in
+stdenv.mkDerivation rec {
+  pname = "crrcsim";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/crrcsim/${pname}-${version}.tar.gz";
+    sha256 = "abe59b35ebb4322f3c48e6aca57dbf27074282d4928d66c0caa40d7a97391698";
+  };
+
+  buildInputs = [
+    libGLU libGL SDL SDL_mixer plib libjpeg
+  ];
+
+  patches = [
+    ./gcc6.patch
+  ];
+
+  meta = {
+    description = "A model-airplane flight simulator";
+    maintainers = with lib.maintainers; [ raskin ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    license = lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/games/crrcsim/gcc6.patch b/nixpkgs/pkgs/games/crrcsim/gcc6.patch
new file mode 100644
index 000000000000..c19f28c514d7
--- /dev/null
+++ b/nixpkgs/pkgs/games/crrcsim/gcc6.patch
@@ -0,0 +1,13 @@
+diff --git c/src/mod_video/crrc_animation.cpp i/src/mod_video/crrc_animation.cpp
+index ee7d7f4..855b106 100644
+--- c/src/mod_video/crrc_animation.cpp
++++ i/src/mod_video/crrc_animation.cpp
+@@ -84,7 +84,7 @@ void createAnimation(SimpleXMLTransfer *animation, ssgEntity* model)
+       else
+       {
+         std::cerr << "createAnimation: unknown animation type \'"
+-                  << type << "\'" << std::cerr;
++                  << type << "\'" << std::endl;
+       }
+       
+       if (anim != NULL)
diff --git a/nixpkgs/pkgs/games/curseofwar/default.nix b/nixpkgs/pkgs/games/curseofwar/default.nix
new file mode 100644
index 000000000000..fef456816ff2
--- /dev/null
+++ b/nixpkgs/pkgs/games/curseofwar/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv
+, fetchFromGitHub
+, ncurses
+, SDL
+}:
+
+stdenv.mkDerivation rec {
+  pname = "curseofwar";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "a-nikolaev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1wd71wdnj9izg5d95m81yx3684g4zdi7fsy0j5wwnbd9j34ilz1i";
+  };
+
+  buildInputs = [
+    ncurses
+    SDL
+  ];
+
+  makeFlags = (lib.optionals (SDL != null) [ "SDL=yes" ]) ++ [
+    "PREFIX=$(out)"
+    # force platform's cc on darwin, otherwise gcc is used
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  meta = with lib; {
+    description = "A fast-paced action strategy game";
+    homepage = "https://a-nikolaev.github.io/curseofwar/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/games/cutechess/default.nix b/nixpkgs/pkgs/games/cutechess/default.nix
new file mode 100644
index 000000000000..5e374afa1bca
--- /dev/null
+++ b/nixpkgs/pkgs/games/cutechess/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, qtbase
+, lib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "cutechess";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "cutechess";
+    repo = "cutechess";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-P44Twbw2MGz+oTzPwMFCe73zPxAex6uYjSTtaUypfHw=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+  buildInputs = [
+    qtbase
+  ];
+
+  postInstall = ''
+    install -Dm555 cutechess{,-cli} -t $out/bin/
+    install -Dm444 libcutechess.a -t $out/lib/
+    install -Dm444 $src/docs/cutechess-cli.6 -t $out/share/man/man6/
+    install -Dm444 $src/docs/cutechess-engines.json.5 -t $out/share/man/man5/
+  '';
+
+  meta = with lib; {
+    description = "GUI, CLI, and library for playing chess";
+    homepage = "https://cutechess.com/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ eclairevoyant ];
+    platforms = with platforms; (linux ++ windows);
+    mainProgram = "cutechess";
+  };
+})
diff --git a/nixpkgs/pkgs/games/cutemaze/default.nix b/nixpkgs/pkgs/games/cutemaze/default.nix
new file mode 100644
index 000000000000..a0f2d725d4bf
--- /dev/null
+++ b/nixpkgs/pkgs/games/cutemaze/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, qttools
+, wrapQtAppsHook
+, qtbase
+, qtwayland
+, qtsvg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cutemaze";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "https://gottcode.org/cutemaze/${pname}-${version}.tar.bz2";
+    hash = "sha256-hjDlY18O+VDJR68vwrIZwsQAa40xU+V3bCAA4GFHJEQ=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtsvg
+  ] ++ lib.optionals stdenv.isLinux [
+    qtwayland
+  ];
+
+  installPhase = if stdenv.isDarwin then ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    mv CuteMaze.app $out/Applications
+    makeWrapper $out/Applications/CuteMaze.app/Contents/MacOS/CuteMaze $out/bin/cutemaze
+
+    runHook postInstall
+  '' else null;
+
+  meta = with lib; {
+    changelog = "https://github.com/gottcode/cutemaze/blob/v${version}/ChangeLog";
+    description = "Simple, top-down game in which mazes are randomly generated";
+    homepage = "https://gottcode.org/cutemaze/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/cuyo/default.nix b/nixpkgs/pkgs/games/cuyo/default.nix
new file mode 100644
index 000000000000..871812e097a9
--- /dev/null
+++ b/nixpkgs/pkgs/games/cuyo/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, SDL, SDL_mixer, zlib }:
+
+stdenv.mkDerivation {
+  pname = "cuyo";
+  version = "2.1.0";
+
+  src = fetchurl {
+     url = "https://download.savannah.gnu.org/releases/cuyo/cuyo-2.1.0.tar.gz";
+     sha256 = "17yqv924x7yvwix7yz9jdhgyar8lzdhqvmpvv0any8rdkajhj23c";
+     };
+
+  buildInputs = [ SDL SDL_mixer zlib ];
+
+  meta = {
+     homepage = "http://karimmi.de/cuyo";
+     description = "Stacking blocks game, with different rules for each level";
+     license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/darkplaces/default.nix b/nixpkgs/pkgs/games/darkplaces/default.nix
new file mode 100644
index 000000000000..876e0025976f
--- /dev/null
+++ b/nixpkgs/pkgs/games/darkplaces/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, zlib
+, libjpeg
+, SDL2
+, libvorbis
+}:
+stdenv.mkDerivation rec {
+  pname = "darkplaces";
+  version = "unstable-2022-05-10";
+
+  src = fetchFromGitHub {
+    owner = "DarkPlacesEngine";
+    repo = "darkplaces";
+    rev = "f16954a9d40168253ac5d9890dabcf7dbd266cd9";
+    hash = "sha256-5KsUcgHbuzFUE6LcclqI8VPSFbXZzBnxzOBB9Kf8krI=";
+  };
+
+  buildInputs = [
+    zlib
+    libjpeg
+    SDL2
+  ];
+
+  buildFlags = [ "release" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -m755 darkplaces-sdl $out/bin/darkplaces
+    install -m755 darkplaces-dedicated $out/bin/darkplaces-dedicated
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    patchelf \
+      --add-needed ${libvorbis}/lib/libvorbisfile.so \
+      --add-needed ${libvorbis}/lib/libvorbis.so \
+      $out/bin/darkplaces
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.icculus.org/twilight/darkplaces/";
+    description = "A quake 1 engine implementation by LadyHavoc";
+    longDescription = ''
+      A game engine based on the Quake 1 engine by id Software.
+      It improves and builds upon the original 1996 engine by adding modern
+      rendering features, and expanding upon the engine's native game code
+      language QuakeC, as well as supporting additional map and model formats.
+    '';
+    maintainers = with maintainers; [ necrophcodr ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ddnet/default.nix b/nixpkgs/pkgs/games/ddnet/default.nix
new file mode 100644
index 000000000000..b8e333cd79c2
--- /dev/null
+++ b/nixpkgs/pkgs/games/ddnet/default.nix
@@ -0,0 +1,112 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cargo
+, cmake
+, ninja
+, pkg-config
+, rustPlatform
+, rustc
+, curl
+, freetype
+, libGLU
+, libnotify
+, libogg
+, libX11
+, opusfile
+, pcre
+, python3
+, SDL2
+, sqlite
+, wavpack
+, ffmpeg
+, x264
+, vulkan-headers
+, vulkan-loader
+, glslang
+, spirv-tools
+, gtest
+, Carbon
+, Cocoa
+, OpenGL
+, Security
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ddnet";
+  version = "17.3";
+
+  src = fetchFromGitHub {
+    owner = "ddnet";
+    repo = pname;
+    rev = version;
+    hash = "sha256-PV7xX4xYAIOT8xF7SM/bCO98p5gYJwT2U+dEXKhaIf4=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    name = "${pname}-${version}";
+    inherit src;
+    hash = "sha256-Mck5letI7gOqeuMsZPzdys0VD8cWESznzezR2ZQXbDE=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    pkg-config
+    rustc
+    cargo
+    rustPlatform.cargoSetupHook
+  ];
+
+  nativeCheckInputs = [
+    gtest
+  ];
+
+  buildInputs = [
+    curl
+    freetype
+    libGLU
+    libnotify
+    libogg
+    libX11
+    opusfile
+    pcre
+    python3
+    SDL2
+    sqlite
+    wavpack
+    ffmpeg
+    x264
+    vulkan-loader
+    vulkan-headers
+    glslang
+    spirv-tools
+  ] ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa OpenGL Security ];
+
+  postPatch = ''
+    substituteInPlace src/engine/shared/storage.cpp \
+      --replace /usr/ $out/
+  '';
+
+  cmakeFlags = [
+    "-DAUTOUPDATE=OFF"
+  ];
+
+  doCheck = true;
+  checkTarget = "run_tests";
+
+  meta = with lib; {
+    description = "A Teeworlds modification with a unique cooperative gameplay.";
+    longDescription = ''
+      DDraceNetwork (DDNet) is an actively maintained version of DDRace,
+      a Teeworlds modification with a unique cooperative gameplay.
+      Help each other play through custom maps with up to 64 players,
+      compete against the best in international tournaments,
+      design your own maps, or run your own server.
+    '';
+    homepage = "https://ddnet.org";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sirseruju lom ncfavier ];
+    mainProgram = "DDNet";
+  };
+}
diff --git a/nixpkgs/pkgs/games/deliantra/0001-abs.patch b/nixpkgs/pkgs/games/deliantra/0001-abs.patch
new file mode 100644
index 000000000000..d116317e243a
--- /dev/null
+++ b/nixpkgs/pkgs/games/deliantra/0001-abs.patch
@@ -0,0 +1,17 @@
+--- a/utils/cfhq2xa.C
++++ b/utils/cfhq2xa.C
+@@ -182,10 +182,10 @@ static inline bool Diff (pixel w1, pixel w2)
+   pixel YUV1 = RGBAtoYUVA (w1);
+   pixel YUV2 = RGBAtoYUVA (w2);
+
+-  return ((abs (((YUV1 >> Rshift) & Cmask) - ((YUV2 >> Rshift) & Cmask)) > trY) ||
+-          (abs (((YUV1 >> Gshift) & Cmask) - ((YUV2 >> Gshift) & Cmask)) > trU) ||
+-          (abs (((YUV1 >> Bshift) & Cmask) - ((YUV2 >> Bshift) & Cmask)) > trV) ||
+-          (abs (((YUV1 >> Ashift) & Cmask) - ((YUV2 >> Ashift) & Cmask)) > trA) );
++  return ((abs ((signed int)((YUV1 >> Rshift) & Cmask) - (signed int)((YUV2 >> Rshift) & Cmask)) > trY) ||
++          (abs ((signed int)((YUV1 >> Gshift) & Cmask) - (signed int)((YUV2 >> Gshift) & Cmask)) > trU) ||
++          (abs ((signed int)((YUV1 >> Bshift) & Cmask) - (signed int)((YUV2 >> Bshift) & Cmask)) > trV) ||
++          (abs ((signed int)((YUV1 >> Ashift) & Cmask) - (signed int)((YUV2 >> Ashift) & Cmask)) > trA) );
+ }
+
+ static void
diff --git a/nixpkgs/pkgs/games/deliantra/0002-datadir.patch b/nixpkgs/pkgs/games/deliantra/0002-datadir.patch
new file mode 100644
index 000000000000..1c8e847d88c6
--- /dev/null
+++ b/nixpkgs/pkgs/games/deliantra/0002-datadir.patch
@@ -0,0 +1,11 @@
+--- a/utils/cfutil.in
++++ b/utils/cfutil.in
+@@ -27,7 +27,7 @@ use common::sense;
+ my $prefix      = "@prefix@";
+ my $exec_prefix = "@exec_prefix@";
+ my $datarootdir = "@datarootdir@";
+-my $DATADIR     = "@datadir@/@PACKAGE@";
++my $DATADIR     = $ENV{'DELIANTRA_DATADIR'} || "@datadir@/@PACKAGE@";
+
+ my $CONVERT  = "@CONVERT@";
+ my $IDENTIFY = "@IDENTIFY@";
diff --git a/nixpkgs/pkgs/games/deliantra/arch.nix b/nixpkgs/pkgs/games/deliantra/arch.nix
new file mode 100644
index 000000000000..2201ca2d1f5f
--- /dev/null
+++ b/nixpkgs/pkgs/games/deliantra/arch.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchurl, deliantra-server }:
+
+stdenv.mkDerivation rec {
+  pname = "deliantra-arch";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://dist.schmorp.de/deliantra/${pname}-${version}.tar.xz";
+    sha256 = "1xzhv48g90hwkzgx9nfjm81ivg6hchkik9ldimi8ijb4j393kvsz";
+  };
+
+  installPhase = ''
+    mkdir -p "$out"
+    export DELIANTRA_DATADIR="$out"
+    ${deliantra-server}/bin/cfutil --install-arch .
+  '';
+
+  meta = with lib; {
+    description = "Archetype data for the Deliantra free MMORPG";
+    homepage = "http://www.deliantra.net/";
+    license = with licenses; [ gpl2Plus agpl3Plus ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ToxicFrog ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/deliantra/data.nix b/nixpkgs/pkgs/games/deliantra/data.nix
new file mode 100644
index 000000000000..31ed7d0f0118
--- /dev/null
+++ b/nixpkgs/pkgs/games/deliantra/data.nix
@@ -0,0 +1,21 @@
+{ stdenv, lib, fetchurl, deliantra-maps, deliantra-arch, deliantra-server, symlinkJoin }:
+
+symlinkJoin rec {
+  name = "deliantra-data-${version}";
+  version = "M${deliantra-maps.version}+A${deliantra-arch.version}";
+
+  paths = [
+    deliantra-maps
+    deliantra-arch
+    "${deliantra-server}/share/deliantra-server"
+  ];
+
+  meta = with lib; {
+    description = "Combined game data (maps + archetypes) for the Deliantra free MMORPG";
+    homepage = "http://www.deliantra.net/";
+    license = with licenses; [ gpl2Plus agpl3Plus ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ToxicFrog ];
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/deliantra/maps.nix b/nixpkgs/pkgs/games/deliantra/maps.nix
new file mode 100644
index 000000000000..1f87178102a0
--- /dev/null
+++ b/nixpkgs/pkgs/games/deliantra/maps.nix
@@ -0,0 +1,25 @@
+{ stdenv, lib, fetchurl, deliantra-server }:
+
+stdenv.mkDerivation rec {
+  pname = "deliantra-maps";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://dist.schmorp.de/deliantra/${pname}-${version}.tar.xz";
+    sha256 = "0zbwzya28s1xpnbrmqkqvfrzns03zdjd8a9w9nk665aif6rw2zbz";
+  };
+
+  installPhase = ''
+    mkdir -p "$out/maps"
+    export DELIANTRA_DATADIR="$out"
+    ${deliantra-server}/bin/cfutil --install-maps .
+  '';
+
+  meta = with lib; {
+    description = "Map data for the Deliantra free MMORPG";
+    homepage = "http://www.deliantra.net/";
+    license = with licenses; [ gpl2Plus agpl3Plus ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ToxicFrog ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/deliantra/server.nix b/nixpkgs/pkgs/games/deliantra/server.nix
new file mode 100644
index 000000000000..4185a46120e5
--- /dev/null
+++ b/nixpkgs/pkgs/games/deliantra/server.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, fetchurl, perlPackages
+, autoconf, perl, gperf, optipng, pngnq, rsync, imagemagick, blitz
+, pkg-config, glib, boost, makeWrapper
+}:
+
+let
+  perl-deps = with perlPackages; [
+    AnyEvent AnyEventAIO AnyEventBDB AnyEventIRC
+    CompressLZF commonsense Coro CoroEV
+    Deliantra DigestSHA1 EV PodPOM SafeHole URI YAMLLibYAML
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "deliantra-server";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://dist.schmorp.de/deliantra/${pname}-${version}.tar.xz";
+    sha256 = "0v0m2m9fxq143aknh7jb3qj8bnpjrs3bpbbx07c18516y3izr71d";
+  };
+
+  nativeBuildInputs = [
+    autoconf perl gperf optipng pngnq rsync imagemagick
+    pkg-config makeWrapper
+  ];
+
+  propagatedBuildInputs = perl-deps;
+
+  buildInputs = [
+    blitz boost glib
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  patches = [
+    ./0001-abs.patch
+    ./0002-datadir.patch
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/cfutil --prefix PERL5LIB : $PERL5LIB
+    wrapProgram $out/bin/deliantra-server --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = with lib; {
+    description = "Server for the Deliantra free MMORPG";
+    homepage = "http://www.deliantra.net/";
+    license = with licenses; [ gpl2Plus agpl3Plus ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ToxicFrog ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/devilutionx/default.nix b/nixpkgs/pkgs/games/devilutionx/default.nix
new file mode 100644
index 000000000000..94838596a129
--- /dev/null
+++ b/nixpkgs/pkgs/games/devilutionx/default.nix
@@ -0,0 +1,129 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, fetchurl
+, bzip2
+, cmake
+, pkg-config
+, gettext
+, libsodium
+, SDL2
+, SDL_audiolib
+, SDL2_image
+, fmt
+, libpng
+, smpq
+}:
+
+let
+  # TODO: submit a PR upstream to allow system copies of these libraries where possible
+
+  # fork with patches, far behind upstream
+  asio = fetchurl {
+    url = "https://github.com/diasurgical/asio/archive/ebeff99f539da23d27c2e8d4bdbc1ee011968644.tar.gz";
+    sha256 = "0vhb4cig40mm0a98i74grpmfkcmby8zxg6vqa38dpryxpgvp5fw8";
+  };
+
+  # fork with patches, upstream seems to be dead
+  libmpq = fetchurl {
+    url = "https://github.com/diasurgical/libmpq/archive/0f10bd1600f406b13932bf5351ba713361262184.tar.gz";
+    sha256 = "sha256-7hc/Xtsg8WJIJljLydS7hLZA9lEEHWhsCteyrxK68qE=";
+  };
+
+  # not "real" package with pkg-config or cmake file, just collection of source files
+  libsmackerdec = fetchurl {
+    url = "https://github.com/diasurgical/libsmackerdec/archive/2997ee0e41e91bb723003bc09234be553b190e38.tar.gz";
+    sha256 = "sha256-QMDcIZQ94i4VPVanmSxiGkKgxWx82DP4uE+Q5I2nU+o=";
+  };
+
+  # fork with patches, far behind upstream
+  libzt = fetchFromGitHub {
+    owner = "diasurgical";
+    repo = "libzt";
+    fetchSubmodules = true;
+    rev = "37a2efb0b925df632299ef07dc78c0af5f6b4756";
+    sha256 = "sha256-+o4ZTVqh4MDZES9m7mkfkMRlRDMBytDBuA0QIlnp73U=";
+  };
+
+  # missing pkg-config and/or cmake file
+  simpleini = fetchurl {
+    url = "https://github.com/brofield/simpleini/archive/9b3ed7ec815997bc8c5b9edf140d6bde653e1458.tar.gz";
+    sha256 = "sha256-93kuyp8/ew7okW/6ThJMtLMZsR1YSeFcXu9Y65ELBFE==";
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "devilutionx";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "diasurgical";
+    repo = "devilutionX";
+    rev = version;
+    sha256 = "sha256-l0BhL+DXtkG2PdFqmkL0KJv41zl3N/AcuLmzw2j3jXY=";
+  };
+
+  postPatch = ''
+    substituteInPlace Source/init.cpp --replace "/usr/share/diasurgical/devilutionx/" "${placeholder "out"}/share/diasurgical/devilutionx/"
+
+    # download dependencies ahead of time
+    substituteInPlace 3rdParty/asio/CMakeLists.txt --replace "${asio.url}" "${asio}"
+    substituteInPlace 3rdParty/libmpq/CMakeLists.txt --replace "${libmpq.url}" "${libmpq}"
+    substituteInPlace 3rdParty/libsmackerdec/CMakeLists.txt --replace "${libsmackerdec.url}" "${libsmackerdec}"
+    substituteInPlace 3rdParty/libzt/CMakeLists.txt \
+      --replace "GIT_REPOSITORY https://github.com/diasurgical/libzt.git" "" \
+      --replace "GIT_TAG ${libzt.rev}" "SOURCE_DIR ${libzt}"
+    substituteInPlace 3rdParty/simpleini/CMakeLists.txt --replace "${simpleini.url}" "${simpleini}"
+  '';
+
+  cmakeFlags = [
+    "-DBINARY_RELEASE=ON"
+    "-DVERSION_NUM=${version}"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    gettext
+    smpq # used to build devilutionx.mpq
+  ];
+
+  buildInputs = [
+    bzip2
+    fmt
+    libpng
+    libsodium
+    SDL2
+    SDL_audiolib
+    SDL2_image
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+  '' + (if stdenv.isDarwin then ''
+    mkdir -p $out/Applications
+    mv devilutionx.app $out/Applications
+  '' else ''
+    install -Dm755 -t $out/bin devilutionx
+    install -Dm755 -t $out/share/diasurgical/devilutionx devilutionx.mpq
+    install -Dm755 -t $out/share/applications ../Packaging/nix/devilutionx-hellfire.desktop ../Packaging/nix/devilutionx.desktop
+    install -Dm755 ../Packaging/resources/icon.png $out/share/icons/hicolor/512x512/apps/devilutionx.png
+    install -Dm755 ../Packaging/resources/hellfire.png $out/share/icons/hicolor/512x512/apps/devilutionx-hellfire.png
+    install -Dm755 ../Packaging/resources/icon_32.png $out/share/icons/hicolor/32x32/apps/devilutionx.png
+    install -Dm755 ../Packaging/resources/hellfire_32.png $out/share/icons/hicolor/32x32/apps/devilutionx-hellfire.png
+  '') + ''
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/diasurgical/devilutionX";
+    description = "Diablo build for modern operating systems";
+    longDescription = "In order to play this game a copy of diabdat.mpq is required. Place a copy of diabdat.mpq in ~/.local/share/diasurgical/devilution before executing the game.";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ karolchmist aanderse ];
+    platforms = platforms.linux ++ platforms.windows;
+  };
+}
diff --git a/nixpkgs/pkgs/games/domination/default.nix b/nixpkgs/pkgs/games/domination/default.nix
new file mode 100644
index 000000000000..8bf1c2a9ec31
--- /dev/null
+++ b/nixpkgs/pkgs/games/domination/default.nix
@@ -0,0 +1,108 @@
+{ lib, stdenv
+, fetchsvn
+# jdk8 is needed for building, but the game runs on newer jres as well
+, jdk8
+, jre
+, ant
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, nixosTests
+}:
+
+let
+  desktopItem = makeDesktopItem {
+    name = "domination";
+    desktopName = "Domination";
+    exec = "domination";
+    icon = "domination";
+  };
+  editorDesktopItem = makeDesktopItem {
+    name = "domination-map-editor";
+    desktopName = "Domination Map Editor";
+    exec = "domination-map-editor";
+    icon = "domination";
+  };
+
+in stdenv.mkDerivation {
+  pname = "domination";
+  version = "1.2.9";
+
+  # The .zip releases do not contain the build.xml file
+  src = fetchsvn {
+    url = "https://svn.code.sf.net/p/domination/code/Domination";
+    # There are no tags in the repository.
+    # Look for commits like "new version x.y.z info on website"
+    # or "website update for x.y.z".
+    rev = "2470";
+    hash = "sha256-ghq7EGg++mTOzA3ASzXhk97fzy5/n9vyaRzxp12X3/4=";
+  };
+
+  nativeBuildInputs = [
+    jdk8
+    ant
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    cd swingUI
+    ant
+    runHook postBuild
+  '';
+
+  desktopItems = [
+    desktopItem
+    editorDesktopItem
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    # Remove unnecessary files and launchers (they'd need to be wrapped anyway)
+    rm -r \
+      build/game/src.zip \
+      build/game/*.sh \
+      build/game/*.cmd \
+      build/game/*.exe \
+      build/game/*.app
+
+    mkdir -p $out/share/domination
+    cp -r build/game/* $out/share/domination/
+
+    # Reimplement the two launchers mentioned in Unix_shortcutSpec.xml with makeWrapper
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/domination \
+      --chdir "$out/share/domination" \
+      --add-flags "-jar $out/share/domination/Domination.jar"
+    makeWrapper ${jre}/bin/java $out/bin/domination-map-editor \
+      --chdir "$out/share/domination" \
+      --add-flags "-cp $out/share/domination/Domination.jar net.yura.domination.ui.swinggui.SwingGUIFrame"
+
+    install -Dm644 build/game/resources/icon.png $out/share/pixmaps/domination.png
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    domination-starts = nixosTests.domination;
+  };
+
+  meta = with lib; {
+    homepage = "https://domination.sourceforge.net/";
+    downloadPage = "https://domination.sourceforge.net/download.shtml";
+    description = "A game that is a bit like the board game Risk or RisiKo";
+    longDescription = ''
+      Domination is a game that is a bit like the well known board game of Risk
+      or RisiKo. It has many game options and includes many maps.
+      It includes a map editor, a simple map format, multiplayer network play,
+      single player, hotseat, 5 user interfaces and many more features.
+    '';
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependencies as jars
+    ];
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/chocolate-doom/default.nix b/nixpkgs/pkgs/games/doom-ports/chocolate-doom/default.nix
new file mode 100644
index 000000000000..30fe2010b022
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/chocolate-doom/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, autoreconfHook, pkg-config, SDL2, SDL2_mixer, SDL2_net
+, fetchFromGitHub, fetchpatch, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "chocolate-doom";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    owner = "chocolate-doom";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "1zlcqhd49c5n8vaahgaqrc2y10z86xng51sbd82xm3rk2dly25jp";
+  };
+
+  patches = [
+    # Pull upstream patch to fix builx against gcc-10:
+    #   https://github.com/chocolate-doom/chocolate-doom/pull/1257
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/chocolate-doom/chocolate-doom/commit/a8fd4b1f563d24d4296c3e8225c8404e2724d4c2.patch";
+      sha256 = "1dmbygn952sy5n8qqp0asg11pmygwgygl17lrj7i0fxa0nrhixhj";
+    })
+  ];
+
+  outputs = [ "out" "man" ];
+
+  postPatch = ''
+    sed -e 's#/games#/bin#g' -i src{,/setup}/Makefile.am
+    patchShebangs --build man/{simplecpp,docgen}
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    # for documentation
+    python3
+  ];
+  buildInputs = [ SDL2 SDL2_mixer SDL2_net ];
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "http://chocolate-doom.org/";
+    description = "A Doom source port that accurately reproduces the experience of Doom as it was played in the 1990s";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    hydraPlatforms = lib.platforms.linux; # darwin times out
+    maintainers = with lib.maintainers; [ MP2E ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/crispy-doom/default.nix b/nixpkgs/pkgs/games/doom-ports/crispy-doom/default.nix
new file mode 100644
index 000000000000..a4a0fc08730d
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/crispy-doom/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, autoreconfHook, pkg-config, SDL2, SDL2_mixer, SDL2_net, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "crispy-doom";
+  version = "6.0";
+
+  src = fetchFromGitHub {
+    owner = "fabiangreffrath";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "sha256-s/TAg0Di8Pkdjhk38c8OanmngjLqA8iEPweVRf1qwQI=";
+  };
+
+  postPatch = ''
+    sed -e 's#/games#/bin#g' -i src{,/setup}/Makefile.am
+    for script in $(grep -lr '^#!/usr/bin/env python3$'); do patchShebangs $script; done
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config python3 ];
+  buildInputs = [ SDL2 SDL2_mixer SDL2_net ];
+  enableParallelBuilding = true;
+
+  strictDeps = true;
+
+  meta = {
+    homepage = "http://fabiangreffrath.github.io/crispy-doom";
+    description = "A limit-removing enhanced-resolution Doom source port based on Chocolate Doom";
+    longDescription = ''
+      Crispy Doom is a limit-removing enhanced-resolution Doom source port based on Chocolate Doom.
+      Its name means that 640x400 looks \"crisp\" and is also a slight reference to its origin.
+    '';
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ neonfuz ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/dhewm3/default.nix b/nixpkgs/pkgs/games/doom-ports/dhewm3/default.nix
new file mode 100644
index 000000000000..20e9f986f0c9
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/dhewm3/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, cmake, SDL2, libGLU, libGL, zlib, libjpeg, libogg, libvorbis
+, openal, curl, copyDesktopItems, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+  pname = "dhewm3";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner = "dhewm";
+    repo = "dhewm3";
+    rev = version;
+    sha256 = "sha256-3ONOP/pRp04rxehXxgCCan1fPCqAs2bVDU/R4HPN1xQ=";
+  };
+
+  # Add libGLU libGL linking
+  patchPhase = ''
+    sed -i 's/\<idlib\()\?\)$/idlib GL\1/' neo/CMakeLists.txt
+  '';
+
+  preConfigure = ''
+    cd "$(ls -d dhewm3-*.src)"/neo
+  '';
+
+  nativeBuildInputs = [ cmake copyDesktopItems ];
+  buildInputs = [ SDL2 libGLU libGL zlib libjpeg libogg libvorbis openal curl ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "dhewm3";
+      exec = "dhewm3";
+      desktopName = "Doom 3";
+      categories = [ "Game" ];
+    })
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dhewm/dhewm3";
+    description = "Doom 3 port to SDL";
+    license = lib.licenses.gpl3;
+    maintainers = with maintainers; [ MP2E ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/doomretro/default.nix b/nixpkgs/pkgs/games/doom-ports/doomretro/default.nix
new file mode 100644
index 000000000000..f01a788b8f8d
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/doomretro/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, Cocoa
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "doomretro";
+  version = "5.0.4";
+
+  src = fetchFromGitHub {
+    owner = "bradharding";
+    repo = "doomretro";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-O8FuLFziwVNk2dcj52Xq/FG2vtei06iL8BG2jVugcxs=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    Cocoa
+  ];
+
+  meta = {
+    homepage = "https://www.doomretro.com/";
+    description = "A classic, refined DOOM source port";
+    longDescription = ''
+      DOOM Retro is the classic, refined DOOM source port for Windows PC. It
+      represents how I like my DOOM to be today, in all its dark and gritty,
+      unapologetically pixelated glory. I have strived to craft a unique and
+      cohesive set of compelling features, while continuing to uphold my respect
+      for that classic, nostalgic DOOM experience many of us, after all this
+      time, still hold dear.
+
+      DOOM Retro has been under relentless, meticulous development since its
+      debut on December 10, 2013 commemorating DOOM's 20th anniversary, and it
+      has absolutely no intention of stopping. Its source code was originally
+      derived from Chocolate DOOM but is now very much its own beast. It does
+      include the usual, necessary enhancements that you'll find in all those
+      other DOOM source ports out there, but it also has many of its own cool,
+      original ideas that continues to set itself apart.
+
+      DOOM Retro is and always will be intentionally minimalistic in its
+      approach, and does a few things differently. It supports all vanilla,
+      limit removing, BOOM, MBF and MBF21-compatible maps and mods. In order to
+      freely implement certain features, and due to the nature of DOOM demos,
+      DOOM Retro does not support their recording or playback.
+
+      DOOM Retro is singleplayer only. Written in C, and released as free, open
+      source software under version 3 of the GNU General Public License, DOOM
+      Retro's 100,000 or so lines of code are diligently maintained in this
+      public Git repository and regularly compiled into both 32 and 64-bit
+      Windows apps using Microsoft Visual Studio Community 2022. Although next
+      to no support is provided, DOOM Retro's source code may also be compiled
+      and run under Linux and macOS.
+    '';
+    changelog = "https://github.com/bradharding/doomretro/releases/tag/${finalAttrs.src.rev}";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/games/doom-ports/doomrunner/default.nix b/nixpkgs/pkgs/games/doom-ports/doomrunner/default.nix
new file mode 100644
index 000000000000..3c1e574ca5b1
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/doomrunner/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, qtbase
+, qmake
+, makeDesktopItem
+, wrapQtAppsHook
+, imagemagick
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "doomrunner";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "Youda008";
+    repo = "DoomRunner";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-mUtUXDcQXs5zTh9Msb3dXFicIsfbZpE9M8OPqtajDhw=";
+  };
+
+  buildInputs = [ qtbase ];
+  nativeBuildInputs = [ qmake wrapQtAppsHook imagemagick ];
+
+  makeFlags = [
+    "INSTALL_ROOT=${placeholder "out"}"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/{bin,share/applications}
+    install -Dm755 $out/usr/bin/DoomRunner $out/bin/DoomRunner
+
+    for size in 16 24 32 48 64 128; do
+      mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+      convert -background none -resize "$size"x"$size" $PWD/Resources/DoomRunner.ico -flatten $out/share/icons/hicolor/"$size"x"$size"/apps/DoomRunner.png
+    done;
+
+    install -m 444 -D "$desktopItem/share/applications/"* -t $out/share/applications/
+    rm -rf $out/usr
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "DoomRunner";
+    desktopName = "DoomRunner";
+    comment = "Preset-oriented graphical launcher of ZDoom and derivatives";
+    categories = [ "Game" ];
+    icon = "DoomRunner";
+    type = "Application";
+    exec = "DoomRunner";
+  };
+
+  meta = with lib; {
+    description = "Graphical launcher of ZDoom and derivatives";
+    homepage = "https://github.com/Youda008/DoomRunner/";
+    changelog = "https://github.com/Youda008/DoomRunner/blob/${finalAttrs.src.rev}/changelog.txt";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ keenanweaver ];
+  };
+})
diff --git a/nixpkgs/pkgs/games/doom-ports/doomseeker/default.nix b/nixpkgs/pkgs/games/doom-ports/doomseeker/default.nix
new file mode 100644
index 000000000000..48ea1a0296cf
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/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/games/doom-ports/doomseeker/fix_paths.patch b/nixpkgs/pkgs/games/doom-ports/doomseeker/fix_paths.patch
new file mode 100644
index 000000000000..08654c2384cb
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/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/games/doom-ports/doomseeker/qt_build_fix.patch b/nixpkgs/pkgs/games/doom-ports/doomseeker/qt_build_fix.patch
new file mode 100644
index 000000000000..e21b53b3cc53
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/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/games/doom-ports/enyo-launcher/default.nix b/nixpkgs/pkgs/games/doom-ports/enyo-launcher/default.nix
new file mode 100644
index 000000000000..170777cf5a35
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/enyo-launcher/default.nix
@@ -0,0 +1,25 @@
+{ mkDerivation, lib, fetchFromGitLab, cmake, qtbase }:
+
+mkDerivation rec {
+  pname = "enyo-launcher";
+  version = "2.0.5";
+
+  src = fetchFromGitLab {
+    owner = "sdcofer70";
+    repo = "enyo-launcher";
+    rev = version;
+    sha256 = "sha256-qdVP5QN2t0GK4VBWuFGrnRfgamQDZGRjwaAe6TIK604=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ qtbase ];
+
+  meta = {
+    homepage = "https://gitlab.com/sdcofer70/enyo-launcher";
+    description = "Frontend for Doom engines";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.usrfriendly ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/eternity-engine/default.nix b/nixpkgs/pkgs/games/doom-ports/eternity-engine/default.nix
new file mode 100644
index 000000000000..cdff7fab1e12
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/eternity-engine/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, cmake, libGL, SDL2, SDL2_mixer, SDL2_net, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "eternity-engine";
+  version = "4.02.00";
+  src = fetchFromGitHub {
+    owner = "team-eternity";
+    repo = "eternity";
+    rev = version;
+    sha256 = "0dlz7axbiw003bgwk2hl43w8r2bwnxhi042i1xwdiwaja0cpnf5y";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+  buildInputs = [ libGL SDL2 SDL2_mixer SDL2_net ];
+
+  installPhase = ''
+    install -Dm755 eternity/eternity $out/lib/eternity/eternity
+    cp -r $src/base $out/lib/eternity/base
+    mkdir $out/bin
+    makeWrapper $out/lib/eternity/eternity $out/bin/eternity
+  '';
+
+  meta = {
+    homepage = "https://doomworld.com/eternity";
+    description = "New school Doom port by James Haley";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ MP2E ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/eureka-editor/default.nix b/nixpkgs/pkgs/games/doom-ports/eureka-editor/default.nix
new file mode 100644
index 000000000000..6beae458d293
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/eureka-editor/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchzip, fltk, zlib, xdg-utils, xorg, libjpeg, libGLU }:
+
+stdenv.mkDerivation rec {
+  pname = "eureka-editor";
+  version = "1.27b";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/eureka-editor/Eureka/${lib.versions.majorMinor version}/eureka-${version}-source.tar.gz";
+    sha256 = "075w7xxsgbgh6dhndc1pfxb2h1s5fhsw28yl1c025gmx9bb4v3bf";
+  };
+
+  buildInputs = [ fltk zlib xdg-utils libjpeg xorg.libXinerama libGLU ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    substituteInPlace src/main.cc --replace /usr/local $out
+    substituteInPlace Makefile    --replace /usr/local $out
+  '';
+
+  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 = "https://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.gpl2Plus;
+    platforms = platforms.all;
+    badPlatforms = platforms.darwin;
+    maintainers = with maintainers; [ neonfuz ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/gzdoom/default.nix b/nixpkgs/pkgs/games/doom-ports/gzdoom/default.nix
new file mode 100644
index 000000000000..b8d273c54357
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/gzdoom/default.nix
@@ -0,0 +1,114 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, SDL2
+, bzip2
+, cmake
+, fluidsynth
+, game-music-emu
+, gtk3
+, imagemagick
+, libGL
+, libjpeg
+, libsndfile
+, libvpx
+, libwebp
+, mpg123
+, ninja
+, openal
+, pkg-config
+, vulkan-loader
+, zlib
+, zmusic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gzdoom";
+  version = "4.11.1";
+
+  src = fetchFromGitHub {
+    owner = "ZDoom";
+    repo = "gzdoom";
+    rev = "g${version}";
+    fetchSubmodules = true;
+    hash = "sha256-7PWaqYK7pa6jgl92+a9dqQVVKuE/lvqtm+7p0nfMTNI=";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  nativeBuildInputs = [
+    cmake
+    copyDesktopItems
+    imagemagick
+    makeWrapper
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    bzip2
+    fluidsynth
+    game-music-emu
+    gtk3
+    libGL
+    libjpeg
+    libsndfile
+    libvpx
+    libwebp
+    mpg123
+    openal
+    vulkan-loader
+    zlib
+    zmusic
+  ];
+
+  postPatch = ''
+    substituteInPlace tools/updaterevision/UpdateRevision.cmake \
+      --replace "ret_var(Tag)" "ret_var(\"${src.rev}\")" \
+      --replace "ret_var(Timestamp)" "ret_var(\"1970-00-00 00:00:00 +0000\")" \
+      --replace "ret_var(Hash)" "ret_var(\"${src.rev}\")"
+  '';
+
+  cmakeFlags = [
+    "-DDYN_GTK=OFF"
+    "-DDYN_OPENAL=OFF"
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "gzdoom";
+      exec = "gzdoom";
+      desktopName = "GZDoom";
+      comment = meta.description;
+      icon = "gzdoom";
+      categories = [ "Game" ];
+    })
+  ];
+
+  postInstall = ''
+    mv $out/bin/gzdoom $out/share/games/doom/gzdoom
+    makeWrapper $out/share/games/doom/gzdoom $out/bin/gzdoom
+
+    for size in 16 24 32 48 64 128; do
+      mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+      convert -background none -resize "$size"x"$size" $src/src/win32/icon1.ico -flatten \
+        $out/share/icons/hicolor/"$size"x"$size"/apps/gzdoom.png
+    done;
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ZDoom/gzdoom";
+    description = "Modder-friendly OpenGL and Vulkan source port based on the DOOM engine";
+    longDescription = ''
+      GZDoom is a feature centric port for all DOOM engine games, based on
+      ZDoom, adding an OpenGL renderer and powerful scripting capabilities.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ azahi lassulus ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/odamex/default.nix b/nixpkgs/pkgs/games/doom-ports/odamex/default.nix
new file mode 100644
index 000000000000..5fc1b57be5dc
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/odamex/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, pkg-config
+, makeWrapper
+, SDL
+, SDL_mixer
+, SDL_net
+, wxGTK32
+}:
+
+stdenv.mkDerivation rec {
+  pname = "odamex";
+  version = "0.9.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-src-${version}.tar.bz2";
+    sha256 = "sha256-WBqO5fWzemw1kYlY192v0nnZkbIEVuWmjWYMy+1ODPQ=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+    SDL_net
+    wxGTK32
+  ];
+
+  installPhase = ''
+    runHook preInstall
+  '' + (if stdenv.isDarwin then ''
+    mkdir -p $out/{Applications,bin}
+    mv odalaunch/odalaunch.app $out/Applications
+    makeWrapper $out/{Applications/odalaunch.app/Contents/MacOS,bin}/odalaunch
+  '' else ''
+    make install
+  '') + ''
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "http://odamex.net/";
+    description = "A client/server port for playing old-school Doom online";
+    license = lib.licenses.gpl2Only;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ MP2E ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/prboom-plus/default.nix b/nixpkgs/pkgs/games/doom-ports/prboom-plus/default.nix
new file mode 100644
index 000000000000..2d9be1073fa3
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/prboom-plus/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, SDL2
+, SDL2_mixer
+, SDL2_image
+, SDL2_net
+, fluidsynth
+, soundfont-fluid
+, portmidi
+, dumb
+, libvorbis
+, libmad
+, pcre
+}:
+
+stdenv.mkDerivation rec {
+  pname = "prboom-plus";
+  version = "2.6.66";
+
+  src = fetchFromGitHub {
+    owner = "coelckers";
+    repo = "prboom-plus";
+    rev = "v${version}";
+    sha256 = "sha256-moU/bZ2mS1QfKPP6HaAwWP1nRNZ4Ue5DFl9zBBrJiHw=";
+  };
+
+  sourceRoot = "${src.name}/prboom2";
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_mixer
+    SDL2_image
+    SDL2_net
+    fluidsynth
+    portmidi
+    dumb
+    libvorbis
+    libmad
+    pcre
+  ];
+
+  # Fixes impure path to soundfont
+  prePatch = ''
+    substituteInPlace src/m_misc.c --replace \
+      "/usr/share/sounds/sf3/default-GM.sf3" \
+      "${soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/coelckers/prboom-plus";
+    description = "An advanced, Vanilla-compatible Doom engine based on PrBoom";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ashley ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/rbdoom-3-bfg/default.nix b/nixpkgs/pkgs/games/doom-ports/rbdoom-3-bfg/default.nix
new file mode 100644
index 000000000000..c17adb72171f
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/rbdoom-3-bfg/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, directx-shader-compiler
+, libGLU
+, libpng
+, libjpeg_turbo
+, openal
+, rapidjson
+, SDL2
+, vulkan-headers
+, vulkan-loader
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rbdoom-3-bfg";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "RobertBeckebans";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-bjjeTdbQDWTibSrIWhCnr6F0Ef17efLgWGQAAwezjUw=";
+    fetchSubmodules = true;
+  };
+
+  postPatch = ''
+    substituteInPlace neo/extern/nvrhi/tools/shaderCompiler/CMakeLists.txt \
+      --replace "AppleClang" "Clang"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    directx-shader-compiler
+  ];
+
+  buildInputs = [
+    libGLU
+    libpng
+    libjpeg_turbo
+    openal
+    rapidjson
+    SDL2
+    vulkan-headers
+    vulkan-loader
+    zlib
+  ];
+
+  cmakeDir = "../neo";
+  cmakeFlags = [
+    "-DFFMPEG=OFF"
+    "-DBINKDEC=ON"
+    "-DUSE_SYSTEM_LIBGLEW=ON"
+    "-DUSE_SYSTEM_LIBPNG=ON"
+    "-DUSE_SYSTEM_LIBJPEG=ON"
+    "-DUSE_SYSTEM_RAPIDJSON=ON"
+    "-DUSE_SYSTEM_ZLIB=ON"
+  ];
+
+  # it caused build failure
+  hardeningDisable = [ "fortify3" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install RBDoom3BFG $out/bin/RBDoom3BFG
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/RobertBeckebans/RBDOOM-3-BFG";
+    description = "Doom 3 BFG Edition with modern engine features";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ Zaechus ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/slade/default.nix b/nixpkgs/pkgs/games/doom-ports/slade/default.nix
new file mode 100644
index 000000000000..9e9fc837e820
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/slade/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, which
+, zip
+, wxGTK
+, gtk3
+, sfml
+, fluidsynth
+, curl
+, freeimage
+, ftgl
+, glew
+, lua
+, mpg123
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slade";
+  version = "3.2.4";
+
+  src = fetchFromGitHub {
+    owner = "sirjuddington";
+    repo = "SLADE";
+    rev = version;
+    sha256 = "sha256-CN01w+sXXRqvQqu1whePAb+phVx+VM8tL2NusfnCyF8=";
+  };
+
+  postPatch = lib.optionalString (!stdenv.hostPlatform.isx86) ''
+    sed -i '/-msse/d' src/CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    which
+    zip
+  ];
+
+  buildInputs = [
+    wxGTK
+    gtk3
+    sfml
+    fluidsynth
+    curl
+    freeimage
+    ftgl
+    glew
+    lua
+    mpg123
+  ];
+
+  cmakeFlags = [
+    "-DwxWidgets_LIBRARIES=${wxGTK}/lib"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-narrowing";
+
+  meta = with lib; {
+    description = "Doom editor";
+    homepage = "http://slade.mancubus.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/slade/git.nix b/nixpkgs/pkgs/games/doom-ports/slade/git.nix
new file mode 100644
index 000000000000..1df734af5e00
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/slade/git.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, which
+, zip
+, wxGTK
+, gtk3
+, sfml
+, fluidsynth
+, curl
+, freeimage
+, ftgl
+, glew
+, lua
+, mpg123
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slade";
+  version = "unstable-2022-08-15";
+
+  src = fetchFromGitHub {
+    owner = "sirjuddington";
+    repo = "SLADE";
+    rev = "1a0d25eec54f9ca2eb3667676d93fb0b6b6aea26";
+    sha256 = "sha256-mtaJr4HJbp2UnzwaLq12V69DqPYDmSNqMGiuPpMlznI=";
+  };
+
+  postPatch = lib.optionalString (!stdenv.hostPlatform.isx86) ''
+    sed -i '/-msse/d' src/CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    which
+    zip
+  ];
+
+  buildInputs = [
+    wxGTK
+    gtk3
+    sfml
+    fluidsynth
+    curl
+    freeimage
+    ftgl
+    glew
+    lua
+    mpg123
+  ];
+
+  cmakeFlags = [
+    "-DwxWidgets_LIBRARIES=${wxGTK}/lib"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-narrowing";
+
+  meta = with lib; {
+    description = "Doom editor";
+    homepage = "http://slade.mancubus.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ertes ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/zandronum/add_gitinfo.patch b/nixpkgs/pkgs/games/doom-ports/zandronum/add_gitinfo.patch
new file mode 100644
index 000000000000..4d8d7c837961
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zandronum/add_gitinfo.patch
@@ -0,0 +1,15 @@
+diff -Naur blah/src/gitinfo.h blah2/src/gitinfo.h
+--- blah/src/gitinfo.h	1969-12-31 16:00:00.000000000 -0800
++++ blah2/src/gitinfo.h	2017-09-15 01:44:43.953562714 -0700
+@@ -0,0 +1,11 @@
++// dd3c3b57023f64cda84f09ed13e4c03a4ad2b920
++//
++// This file was automatically generated by the
++// updaterevision tool. Do not edit by hand.
++
++#define GIT_DESCRIPTION "ZA_3.0-0-dd3c3b57023f"
++#define GIT_HASH "dd3c3b57023f64cda84f09ed13e4c03a4ad2b920"
++#define GIT_TIME "2017-09-01 06:40:50 -0500"
++#define HG_REVISION_NUMBER 1504266050
++#define HG_REVISION_HASH_STRING "dd3c3b57023f"
++#define HG_TIME "170901-1140"
diff --git a/nixpkgs/pkgs/games/doom-ports/zandronum/default.nix b/nixpkgs/pkgs/games/doom-ports/zandronum/default.nix
new file mode 100644
index 000000000000..436a8738b5b1
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zandronum/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, lib, fetchhg, cmake, pkg-config, makeWrapper, callPackage
+, soundfont-fluid, SDL, libGL, glew, bzip2, zlib, libjpeg, fluidsynth, openssl, gtk2, python3, game-music-emu
+, serverOnly ? false
+}:
+
+let
+  suffix = lib.optionalString serverOnly "-server";
+  fmod = callPackage ./fmod.nix { };
+  sqlite = callPackage ./sqlite.nix { };
+  clientLibPath = lib.makeLibraryPath [ fluidsynth ];
+
+in stdenv.mkDerivation rec {
+  pname = "zandronum${suffix}";
+  version = "3.0.1";
+
+  src = fetchhg {
+    url = "https://hg.osdn.net/view/zandronum/zandronum-stable";
+    rev = "ZA_${version}";
+    sha256 = "16v5b6wfrmabs3ky6isbfhlrqdjrr1pvfxlxwk0im02kcpxxw9qw";
+  };
+
+  # zandronum tries to download sqlite now when running cmake, don't let it
+
+  # it also needs the current mercurial revision info embedded in gitinfo.h
+  # otherwise, the client will fail to connect to servers because the
+  # protocol version doesn't match.
+
+  patches = [ ./zan_configure_impurity.patch ./add_gitinfo.patch ./dont_update_gitinfo.patch ];
+
+  # I have no idea why would SDL and libjpeg be needed for the server part!
+  # But they are.
+  buildInputs = [ openssl bzip2 zlib SDL libjpeg sqlite game-music-emu ]
+             ++ lib.optionals (!serverOnly) [ libGL glew fmod fluidsynth gtk2 ];
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper python3 ];
+
+  preConfigure = ''
+    ln -s ${sqlite}/* sqlite/
+    sed -ie 's| restrict| _restrict|g' dumb/include/dumb.h \
+                                       dumb/src/it/*.c
+  '' + lib.optionalString (!serverOnly) ''
+    sed -i \
+      -e "s@/usr/share/sounds/sf2/@${soundfont-fluid}/share/soundfonts/@g" \
+      -e "s@FluidR3_GM.sf2@FluidR3_GM2-2.sf2@g" \
+      src/sound/music_fluidsynth_mididevice.cpp
+  '';
+
+  cmakeFlags =
+    [ "-DFORCE_INTERNAL_GME=OFF" ]
+    ++ (if serverOnly
+    then [ "-DSERVERONLY=ON" ]
+    else [ "-DFMOD_LIBRARY=${fmod}/lib/libfmodex.so" ]);
+
+  hardeningDisable = [ "format" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/lib/zandronum
+    cp zandronum${suffix} \
+       *.pk3 \
+       ${lib.optionalString (!serverOnly) "liboutput_sdl.so"} \
+       $out/lib/zandronum
+    makeWrapper $out/lib/zandronum/zandronum${suffix} $out/bin/zandronum${suffix}
+  '';
+
+  postFixup = lib.optionalString (!serverOnly) ''
+    patchelf --set-rpath $(patchelf --print-rpath $out/lib/zandronum/zandronum):$out/lib/zandronum:${clientLibPath} \
+      $out/lib/zandronum/zandronum
+  '';
+
+  passthru = {
+    inherit fmod sqlite;
+  };
+
+  meta = with lib; {
+    homepage = "https://zandronum.com/";
+    description = "Multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software";
+    maintainers = with maintainers; [ lassulus MP2E ];
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/zandronum/dont_update_gitinfo.patch b/nixpkgs/pkgs/games/doom-ports/zandronum/dont_update_gitinfo.patch
new file mode 100644
index 000000000000..d6dd3a58f457
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zandronum/dont_update_gitinfo.patch
@@ -0,0 +1,19 @@
+diff -r dd3c3b57023f src/CMakeLists.txt
+--- a/src/CMakeLists.txt	Fri Sep 01 06:40:50 2017 -0500
++++ b/src/CMakeLists.txt	Fri Sep 15 01:46:34 2017 -0700
+@@ -636,15 +636,6 @@
+	add_definitions( -DBACKPATCH )
+ endif( BACKPATCH )
+
+-# Update gitinfo.h
+-
+-get_target_property( UPDATEREVISION_EXE updaterevision LOCATION )
+-
+-add_custom_target( revision_check ALL
+-	COMMAND ${UPDATEREVISION_EXE} src/gitinfo.h
+-	WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+-	DEPENDS updaterevision )
+-
+ # Libraries ZDoom needs
+
+ message( STATUS "Fluid synth libs: ${FLUIDSYNTH_LIBRARIES}" )
diff --git a/nixpkgs/pkgs/games/doom-ports/zandronum/fmod.nix b/nixpkgs/pkgs/games/doom-ports/zandronum/fmod.nix
new file mode 100644
index 000000000000..59075d69c753
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zandronum/fmod.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchurl, alsa-lib, libpulseaudio, undmg }:
+
+let
+  bits = lib.optionalString (stdenv.hostPlatform.system == "x86_64-linux") "64";
+  libPath = lib.makeLibraryPath [ stdenv.cc.cc alsa-lib libpulseaudio ];
+
+in
+stdenv.mkDerivation rec {
+  pname = "fmod";
+  version = "4.44.64";
+  shortVersion = builtins.replaceStrings [ "." ] [ "" ] version;
+
+  src = fetchurl (if stdenv.isLinux then {
+    url = "https://zdoom.org/files/fmod/fmodapi${shortVersion}linux.tar.gz";
+    sha256 = "047hk92xapwwqj281f4zwl0ih821rrliya70gfj82sdfjh9lz8i1";
+  } else {
+    url = "https://zdoom.org/files/fmod/fmodapi${shortVersion}mac-installer.dmg";
+    sha256 = "1m1y4cpcwpkl8x31d3s68xzp107f343ma09w2437i2adn5y7m8ii";
+  });
+
+  nativeBuildInputs = [ undmg ];
+
+  dontStrip = true;
+  dontPatchELF = true;
+  dontBuild = true;
+
+  installPhase = lib.optionalString stdenv.isLinux ''
+    install -Dm755 api/lib/libfmodex${bits}-${version}.so $out/lib/libfmodex-${version}.so
+    ln -s libfmodex-${version}.so $out/lib/libfmodex.so
+    patchelf --set-rpath ${libPath} $out/lib/libfmodex.so
+  '' + lib.optionalString stdenv.isDarwin ''
+    install -D api/lib/libfmodex.dylib $out/lib/libfmodex.dylib
+    install -D api/lib/libfmodexL.dylib $out/lib/libfmodexL.dylib
+  '' + ''
+    cp -r api/inc $out/include
+  '';
+
+  meta = with lib; {
+    description = "Programming library and toolkit for the creation and playback of interactive audio";
+    homepage    = "http://www.fmod.org/";
+    license     = licenses.unfreeRedistributable;
+    platforms   = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
+    maintainers = [ maintainers.lassulus ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/zandronum/sqlite.nix b/nixpkgs/pkgs/games/doom-ports/zandronum/sqlite.nix
new file mode 100644
index 000000000000..c7687f89589d
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zandronum/sqlite.nix
@@ -0,0 +1,28 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation {
+  pname = "sqlite-zandronum";
+  version = "3.0";
+
+  src = fetchurl {
+    url = "https://www.sqlite.org/2017/sqlite-autoconf-3180000.tar.gz";
+    hash = "sha256-N1dhJGOXbn0IxenwrzAhYT/CS7z+HFEZfWd2uezprFw=";
+  };
+
+  buildPhase = ''
+    mkdir -p $out
+    cp sqlite3.c $out/
+    cp sqlite3.h $out/
+    cp sqlite3ext.h $out/
+  '';
+
+  meta = {
+    homepage = "http://www.sqlite.org/";
+    description = "A single C code file, named sqlite3.c, that contains all C code for the core SQLite library and the FTS3 and RTREE extensions";
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.lassulus ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/zandronum/zan_configure_impurity.patch b/nixpkgs/pkgs/games/doom-ports/zandronum/zan_configure_impurity.patch
new file mode 100644
index 000000000000..0cf7150502e4
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zandronum/zan_configure_impurity.patch
@@ -0,0 +1,65 @@
+diff -r 6d5130e4ae52 sqlite/CMakeLists.txt
+--- a/sqlite/CMakeLists.txt	Sun Sep 10 18:53:00 2017 +0200
++++ b/sqlite/CMakeLists.txt	Fri Sep 15 00:12:11 2017 -0700
+@@ -1,62 +1,5 @@
+ cmake_minimum_required( VERSION 2.4 )
+
+-# [BB/EP] Download SQLite archive and extract the sources if necessary.
+-set( ZAN_SQLITE_VERSION 3180000 ) # SQL version 3.18.0
+-set( ZAN_SQLITE_YEAR 2017 )
+-set( ZAN_SQLITE_SHA1 "74559194e1dd9b9d577cac001c0e9d370856671b" )
+-set( ZAN_SQLITE_DOWNLOAD_NAME "sqlite-autoconf-${ZAN_SQLITE_VERSION}" )
+-set( ZAN_SQLITE_TEMP_ARCHIVE "${CMAKE_CURRENT_SOURCE_DIR}/${ZAN_SQLITE_DOWNLOAD_NAME}.tar.gz" )
+-set( ZAN_SQLITE_HASHED_ARCHIVE "${CMAKE_CURRENT_SOURCE_DIR}/sqlite-${ZAN_SQLITE_SHA1}.tar.gz" )
+-
+-if( IS_DIRECTORY ${ZAN_SQLITE_HASHED_ARCHIVE} OR IS_SYMLINK ${ZAN_SQLITE_HASHED_ARCHIVE} )
+-	message( FATAL_ERROR "SQLite: ${ZAN_SQLITE_HASHED_ARCHIVE} must be a valid file.\n"
+-				"SQLite: Please remove it and try again." )
+-elseif( NOT EXISTS ${ZAN_SQLITE_HASHED_ARCHIVE} )
+-
+-	if( IS_DIRECTORY ${ZAN_SQLITE_TEMP_ARCHIVE} OR IS_SYMLINK ${ZAN_SQLITE_TEMP_ARCHIVE} )
+-		message( FATAL_ERROR "SQLite: ${ZAN_SQLITE_TEMP_ARCHIVE} must be a valid file.\n"
+-					"SQLite: Please remove it and try again." )
+-	endif()
+-	message( STATUS "SQLite: downloading the archive..." )
+-
+-	file( DOWNLOAD https://www.sqlite.org/${ZAN_SQLITE_YEAR}/${ZAN_SQLITE_DOWNLOAD_NAME}.tar.gz ${ZAN_SQLITE_TEMP_ARCHIVE}
+-			SHOW_PROGRESS
+-			STATUS ZAN_SQLITE_DOWNLOAD_STATUS )
+-
+-	# Report any problem if present and abort immediately.
+-	list( GET ZAN_SQLITE_DOWNLOAD_STATUS 0 ZAN_SQLITE_DOWNLOAD_ERROR_CODE )
+-	if( ZAN_SQLITE_DOWNLOAD_ERROR_CODE )
+-		list( GET ZAN_SQLITE_DOWNLOAD_STATUS 1 ZAN_SQLITE_DOWNLOAD_ERROR_MESSAGE )
+-		message( FATAL_ERROR "SQLite: download failed. Reason: ${ZAN_SQLITE_DOWNLOAD_ERROR_MESSAGE}" )
+-	endif()
+-
+-	# Check the hash. Abort immediately if it's not valid (something is wrong with the download)
+-	file( SHA1 ${ZAN_SQLITE_TEMP_ARCHIVE} ZAN_SQLITE_CURRENT_SHA1 )
+-	if( NOT ZAN_SQLITE_CURRENT_SHA1 STREQUAL ZAN_SQLITE_SHA1 )
+-		message( FATAL_ERROR "SQLite: download failed. The downloaded file has a different hash:\n"
+-					"SQLite:    valid:      ${ZAN_SQLITE_SHA1}\n"
+-					"SQLite:    downloaded: ${ZAN_SQLITE_CURRENT_SHA1}" )
+-	endif()
+-
+-	message( STATUS "SQLite: saving the source files into the 'sqlite' directory." )
+-
+-	# Rename the archive.
+-	execute_process( COMMAND ${CMAKE_COMMAND} -E rename ${ZAN_SQLITE_TEMP_ARCHIVE} ${ZAN_SQLITE_HASHED_ARCHIVE} )
+-
+-	# Extract the archive.
+-	execute_process( COMMAND ${CMAKE_COMMAND} -E tar xzf ${ZAN_SQLITE_HASHED_ARCHIVE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
+-
+-	# Copy the required files.
+-	execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${ZAN_SQLITE_DOWNLOAD_NAME}/sqlite3.c ${CMAKE_CURRENT_SOURCE_DIR} )
+-	execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${ZAN_SQLITE_DOWNLOAD_NAME}/sqlite3.h ${CMAKE_CURRENT_SOURCE_DIR} )
+-	execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${ZAN_SQLITE_DOWNLOAD_NAME}/sqlite3ext.h ${CMAKE_CURRENT_SOURCE_DIR} )
+-
+-	# Remove the extracted folder.
+-	execute_process( COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_SOURCE_DIR}/${ZAN_SQLITE_DOWNLOAD_NAME} )
+-
+-	message( STATUS "SQLite: done." )
+-endif()
+-
+ add_library( sqlite3 sqlite3.c )
+ target_link_libraries( sqlite3 ${CMAKE_DL_LIBS} )
diff --git a/nixpkgs/pkgs/games/doom-ports/zdoom/bcc-git.nix b/nixpkgs/pkgs/games/doom-ports/zdoom/bcc-git.nix
new file mode 100644
index 000000000000..aa3fdeca183a
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zdoom/bcc-git.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "doom-bcc";
+  version = "unstable-2018-01-04";
+
+  src = fetchFromGitHub {
+    owner = "wormt";
+    repo = "bcc";
+    rev = "d58b44d9f18b28fd732c27113e5607a454506d19";
+    sha256 = "1m83ip40ln61qrvb1fbgaqbld2xip9n3k817lwkk1936pml9zcrq";
+  };
+
+  enableParallelBuilding = true;
+  makeFlags = ["CC=${stdenv.cc.targetPrefix}cc"];
+
+  patches = [ ./bcc-warning-fix.patch ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib,share/doc}
+    install -m755 bcc $out/bin/bcc
+    cp -av doc $out/share/doc/bcc
+    cp -av lib $out/lib/bcc
+  '';
+
+  meta = with lib; {
+    description = "Compiler for Doom/Hexen scripts (ACS, BCS)";
+    homepage = "https://github.com/wormt/bcc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ertes];
+  };
+}
diff --git a/nixpkgs/pkgs/games/doom-ports/zdoom/bcc-warning-fix.patch b/nixpkgs/pkgs/games/doom-ports/zdoom/bcc-warning-fix.patch
new file mode 100644
index 000000000000..4a352cb1e471
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zdoom/bcc-warning-fix.patch
@@ -0,0 +1,25 @@
+From c6ac05c96b7908ccd35f3908fc0f13650b0583c0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ertugrul=20S=C3=B6ylemez?= <esz@posteo.de>
+Date: Sat, 3 Feb 2018 17:08:54 +0100
+Subject: [PATCH] Remove -Werror
+
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index bbe2c75..3357d2d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -4,7 +4,7 @@ EXE=bcc
+ BUILD_DIR=build
+ CC=gcc
+ INCLUDE=-Isrc -I src/parse
+-OPTIONS=-Wall -Werror -Wno-unused -std=c99 -pedantic -Wstrict-aliasing \
++OPTIONS=-Wall -Wno-unused -std=c99 -pedantic -Wstrict-aliasing \
+ 	-Wstrict-aliasing=2 -Wmissing-field-initializers -D_BSD_SOURCE \
+ 	-D_DEFAULT_SOURCE $(INCLUDE)
+ VERSION_FILE=$(BUILD_DIR)/version.c
+-- 
+2.15.1
+
diff --git a/nixpkgs/pkgs/games/doom-ports/zdoom/default.nix b/nixpkgs/pkgs/games/doom-ports/zdoom/default.nix
new file mode 100644
index 000000000000..3a31f8fdfb5f
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zdoom/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, p7zip, cmake
+, SDL2, openal, fluidsynth, soundfont-fluid, bzip2, zlib, libjpeg, game-music-emu
+, libsndfile, mpg123 }:
+
+stdenv.mkDerivation rec {
+  pname = "zdoom";
+  majorVersion = "2.8";
+  version = "${majorVersion}.1";
+
+  src = fetchurl {
+    url = "https://zdoom.org/files/zdoom/${majorVersion}/zdoom-${version}-src.7z";
+    sha256 = "0453fqrh9l00xwphfxni5qkf9y134n3s1mr1dvi5cbkxcva7j8bq";
+  };
+
+  nativeBuildInputs = [ p7zip cmake ];
+  buildInputs = [
+    SDL2 openal fluidsynth bzip2 zlib libjpeg game-music-emu libsndfile mpg123
+  ];
+
+  cmakeFlags = [
+    "-DFORCE_INTERNAL_GME=OFF"
+    "-DGME_INCLUDE_DIR=${game-music-emu}/include"
+    "-DGME_LIBRARIES=${game-music-emu}/lib/libgme.so"
+  ];
+
+  sourceRoot = ".";
+
+  NIX_CFLAGS_LINK = [ "-lopenal" "-lfluidsynth" ];
+
+  preConfigure = ''
+    sed -i \
+      -e "s@/usr/share/sounds/sf2/@${soundfont-fluid}/share/soundfonts/@g" \
+      -e "s@FluidR3_GM.sf2@FluidR3_GM2-2.sf2@g" \
+      src/sound/music_fluidsynth_mididevice.cpp
+  '';
+
+  installPhase = ''
+    install -Dm755 zdoom "$out/lib/zdoom/zdoom"
+    for i in *.pk3; do
+      install -Dm644 "$i" "$out/lib/zdoom/$i"
+    done
+    mkdir -p $out/bin
+    ln -s $out/lib/zdoom/zdoom $out/bin/zdoom
+  '';
+
+  meta = with lib; {
+    homepage = "http://zdoom.org/";
+    description = "Enhanced port of the official DOOM source code";
+    # Doom source license, MAME license
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lassulus ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/games/doom-ports/zdoom/zdbsp.nix b/nixpkgs/pkgs/games/doom-ports/zdoom/zdbsp.nix
new file mode 100644
index 000000000000..d18eb144292f
--- /dev/null
+++ b/nixpkgs/pkgs/games/doom-ports/zdoom/zdbsp.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchzip
+, cmake
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zdbsp";
+  version = "1.19";
+
+  src = fetchzip {
+    url = "https://zdoom.org/files/utils/zdbsp/zdbsp-${version}-src.zip";
+    sha256 = "sha256-DTj0jMNurvwRwMbo0L4+IeNlbfIwUbqcG1LKd68C08g=";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    zlib
+  ];
+
+  installPhase = ''
+    install -Dm755 zdbsp $out/bin/zdbsp
+  '';
+
+  meta = with lib; {
+    homepage = "https://zdoom.org/wiki/ZDBSP";
+    description = "ZDoom's internal node builder for DOOM maps";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ lassulus siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/duckmarines/default.nix b/nixpkgs/pkgs/games/duckmarines/default.nix
new file mode 100644
index 000000000000..a4e37081ab0e
--- /dev/null
+++ b/nixpkgs/pkgs/games/duckmarines/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, love, lua, makeWrapper, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+  pname = "duckmarines";
+  version = "1.0c";
+
+  icon = fetchurl {
+    url = "http://tangramgames.dk/img/thumb/duckmarines.png";
+    sha256 = "07ypbwqcgqc5f117yxy9icix76wlybp1cmykc8f3ivdps66hl0k5";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "duckmarines";
+    exec = pname;
+    icon = icon;
+    comment = "Duck-themed action puzzle video game";
+    desktopName = "Duck Marines";
+    genericName = "duckmarines";
+    categories = [ "Game" ];
+  };
+
+  src = fetchurl {
+    url = "https://github.com/SimonLarsen/${pname}/releases/download/v${version}/${pname}-1.0c.love";
+    sha256 = "1rvgpkvi4h9zhc4fwb4knhsa789yjcx4a14fi4vqfdyybhvg5sh9";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ lua love ];
+
+  dontUnpack = true;
+
+  installPhase =
+  ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/games/lovegames
+
+    cp -v ${src} $out/share/games/lovegames/${pname}.love
+
+    makeWrapper ${love}/bin/love $out/bin/${pname} --add-flags $out/share/games/lovegames/${pname}.love
+
+    chmod +x $out/bin/${pname}
+    mkdir -p $out/share/applications
+    ln -s ${desktopItem}/share/applications/* $out/share/applications/
+  '';
+
+  meta = with lib; {
+    description = "Duck-themed action puzzle video game";
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.linux;
+    hydraPlatforms = [];
+    license = licenses.free;
+    downloadPage = "http://tangramgames.dk/games/duckmarines";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/default.nix b/nixpkgs/pkgs/games/dwarf-fortress/default.nix
new file mode 100644
index 000000000000..dd8e6b5503da
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/default.nix
@@ -0,0 +1,119 @@
+{ stdenv, stdenvNoCC, gccStdenv, lib, recurseIntoAttrs, libsForQt5, newScope, texlive, perlPackages, jdk8, jre8 }:
+
+# To whomever it may concern:
+#
+# This directory menaces with spikes of Nix code. It is terrifying.
+#
+# If this is your first time here, you should probably install the dwarf-fortress-full package,
+# for instance with:
+#
+# environment.systemPackages = [ pkgs.dwarf-fortress-packages.dwarf-fortress-full ];
+#
+# You can adjust its settings by using override, or compile your own package by
+# using the other packages here.
+#
+# For example, you can enable the FPS indicator, disable the intro, pick a
+# theme other than phoebus (the default for dwarf-fortress-full), _and_ use
+# an older version with something like:
+#
+# environment.systemPackages = [
+#   (pkgs.dwarf-fortress-packages.dwarf-fortress-full.override {
+#      dfVersion = "0.44.11";
+#      theme = "cla";
+#      enableIntro = false;
+#      enableFPS = true;
+#   })
+# ]
+#
+# Take a look at lazy-pack.nix to see all the other options.
+#
+# You will find the configuration files in ~/.local/share/df_linux/data/init. If
+# you un-symlink them and edit, then the scripts will avoid overwriting your
+# changes on later launches, but consider extending the wrapper with your
+# desired options instead.
+
+with lib;
+
+let
+  callPackage = newScope self;
+
+  # The latest Dwarf Fortress version. Maintainers: when a new version comes
+  # out, ensure that (unfuck|dfhack|twbt) are all up to date before changing
+  # this.
+  latestVersion = "0.47.05";
+
+  # Converts a version to a package name.
+  versionToName = version: "dwarf-fortress_${lib.replaceStrings ["."] ["_"] version}";
+
+  dwarf-therapist-original = libsForQt5.callPackage ./dwarf-therapist {
+    texlive = texlive.combine {
+      inherit (texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem;
+    };
+  };
+
+  # A map of names to each Dwarf Fortress package we know about.
+  df-games = lib.listToAttrs (map
+    (dfVersion: {
+      name = versionToName dfVersion;
+      value =
+        let
+          # I can't believe this syntax works. Spikes of Nix code indeed...
+          dwarf-fortress = callPackage ./game.nix {
+            inherit dfVersion;
+            inherit dwarf-fortress-unfuck;
+          };
+
+          dwarf-fortress-unfuck = callPackage ./unfuck.nix { inherit dfVersion; };
+
+          twbt = callPackage ./twbt { inherit dfVersion; };
+
+          dfhack = callPackage ./dfhack {
+            inherit (perlPackages) XMLLibXML XMLLibXSLT;
+            inherit dfVersion;
+            stdenv = gccStdenv;
+          };
+
+          dwarf-therapist = libsForQt5.callPackage ./dwarf-therapist/wrapper.nix {
+            inherit dwarf-fortress;
+            dwarf-therapist = dwarf-therapist-original;
+          };
+        in
+        callPackage ./wrapper {
+          inherit (self) themes;
+          inherit dwarf-fortress twbt dfhack dwarf-therapist;
+
+          jdk = jdk8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
+        };
+    })
+    (lib.attrNames self.df-hashes));
+
+  self = rec {
+    df-hashes = lib.importJSON ./game.json;
+
+    # Aliases for the latest Dwarf Fortress and the selected Therapist install
+    dwarf-fortress = getAttr (versionToName latestVersion) df-games;
+    inherit dwarf-therapist-original;
+    dwarf-therapist = dwarf-fortress.dwarf-therapist;
+    dwarf-fortress-original = dwarf-fortress.dwarf-fortress;
+
+    dwarf-fortress-full = callPackage ./lazy-pack.nix {
+      inherit df-games versionToName latestVersion;
+    };
+
+    soundSense = callPackage ./soundsense.nix { };
+
+    legends-browser = callPackage ./legends-browser {
+      jre = jre8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
+    };
+
+    themes = recurseIntoAttrs (callPackage ./themes {
+      stdenv = stdenvNoCC;
+    });
+
+    # Theme aliases
+    phoebus-theme = themes.phoebus;
+    cla-theme = themes.cla;
+  };
+
+in
+self // df-games
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/df_permission b/nixpkgs/pkgs/games/dwarf-fortress/df_permission
new file mode 100644
index 000000000000..dc1c0c151e0b
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/df_permission
@@ -0,0 +1,40 @@
+From tarn.adams@gmail.com Sat Oct 30 00:56:16 2010
+Date: Fri, 29 Oct 2010 16:56:15 -0800
+From: Tarn Adams <tarn.adams@gmail.com>
+To: roconnor@theorem.ca
+Subject: Re: Dwarf Fortress Redistribution for NixOS
+
+Sure, that redistribution is fine.  I think I've handled the movie
+issue for next time now.  Thanks for the heads up on that.
+
+Tarn
+
+On Fri, Oct 29, 2010 at 6:56 AM,  <roconnor@theorem.ca> wrote:
+> I'd like to distribute a *slightly* modified version of Dwarf Fortress which
+> is needed to run it under the NixOS distribution of Linux (see
+> <https://nixos.org/>
+>
+> Modification: The interpreter location /lib/ld-linux.so.2 in
+> lib/Dwarf_Fortress is replaced with the location of ld-linux.so.2 under the
+> NixOS distribution (which is currently
+> /nix/store/l8x3fdy1r6zf441vnqa87lzsvxrjbdz9-glibc-2.11.1/lib/ld-linux.so.2
+> but might change at a later date to something similar).
+>
+> I don't need you to recompile Dwarf Fortress.  I can patch the binary itself
+> using patchelf.  I just would like your permission to redistrubute this
+> modified binary.
+>
+> Thanks, I'm looking forward to trying out your game and letting other Nix
+> users try it out too.
+>
+> P.S. the inital_movies are open in read/write mode instead of read-only mode
+> which causes some issues under NixOS because the inital_movies are stored
+> read-only.  I have a workaround, but you may want to consider opening these
+> files in read-only mode.
+>
+> --
+> Russell O'Connor                                      <http://r6.ca/>
+> ``All talk about `theft,''' the general counsel of the American Graphophone
+> Company wrote, ``is the merest claptrap, for there exists no property in
+> ideas musical, literary or artistic, except as defined by statute.''
+>
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/dfhack/default.nix b/nixpkgs/pkgs/games/dwarf-fortress/dfhack/default.nix
new file mode 100644
index 000000000000..914ccbb6ab33
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/dfhack/default.nix
@@ -0,0 +1,171 @@
+{ stdenv
+, buildEnv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, writeScriptBin
+, perl
+, XMLLibXML
+, XMLLibXSLT
+, zlib
+, ruby
+, enableStoneSense ? false
+, allegro5
+, libGLU
+, libGL
+, SDL
+, dfVersion
+}:
+
+with lib;
+
+let
+  dfhack-releases = {
+    "0.44.10" = {
+      dfHackRelease = "0.44.10-r2";
+      sha256 = "19bxsghxzw3bilhr8sm4axz7p7z8lrvbdsd1vdjf5zbg04rs866i";
+      xmlRev = "321bd48b10c4c3f694cc801a7dee6be392c09b7b";
+      prerelease = false;
+    };
+    "0.44.11" = {
+      dfHackRelease = "0.44.11-beta2.1";
+      sha256 = "1jgwcqg9m1ybv3szgnklp6zfpiw5mswla464dlj2gfi5v82zqbv2";
+      xmlRev = "f27ebae6aa8fb12c46217adec5a812cd49a905c8";
+      prerelease = true;
+    };
+    "0.44.12" = {
+      dfHackRelease = "0.44.12-r1";
+      sha256 = "0j03lq6j6w378z6cvm7jspxc7hhrqm8jaszlq0mzfvap0k13fgyy";
+      xmlRev = "23500e4e9bd1885365d0a2ef1746c321c1dd5094";
+      prerelease = false;
+    };
+    "0.47.02" = {
+      dfHackRelease = "0.47.02-alpha0";
+      sha256 = "19lgykgqm0si9vd9hx4zw8b5m9188gg8r1a6h25np2m2ziqwbjj9";
+      xmlRev = "23500e4e9bd1885365d0a2ef1746c321c1dd509a";
+      prerelease = true;
+    };
+    "0.47.04" = {
+      dfHackRelease = "0.47.04-r5";
+      sha256 = "sha256-0s+/LKbqsS/mrxKPDeniqykE5+Gy3ZzCa8yEDzMyssY=";
+      xmlRev = "be0444cc165a1abff053d5893dc1f780f06526b7";
+      prerelease = false;
+    };
+    "0.47.05" = {
+      dfHackRelease = "0.47.05-r7";
+      sha256 = "sha256-vBKUTSjfCnalkBzfjaIKcxUuqsGGOTtoJC1RHJIDlNc=";
+      xmlRev = "f5019a5c6f19ef05a28bd974c3e8668b78e6e2a4";
+      prerelease = false;
+    };
+
+  };
+
+  release =
+    if lib.isAttrs dfVersion
+    then dfVersion
+    else if hasAttr dfVersion dfhack-releases
+    then getAttr dfVersion dfhack-releases
+    else throw "[DFHack] Unsupported Dwarf Fortress version: ${dfVersion}";
+
+  version = release.dfHackRelease;
+
+  # revision of library/xml submodule
+  xmlRev = release.xmlRev;
+
+  arch =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "32"
+    else throw "Unsupported architecture";
+
+  fakegit = writeScriptBin "git" ''
+    #! ${stdenv.shell}
+    if [ "$*" = "describe --tags --long" ]; then
+      echo "${version}-unknown"
+    elif [ "$*" = "describe --tags --abbrev=8 --long" ]; then
+      echo "${version}-unknown"
+    elif [ "$*" = "describe --tags --abbrev=8 --exact-match" ]; then
+      echo "${version}"
+    elif [ "$*" = "rev-parse HEAD" ]; then
+      if [ "$(dirname "$(pwd)")" = "xml" ]; then
+        echo "${xmlRev}"
+      else
+        echo "refs/tags/${version}"
+      fi
+    elif [ "$*" = "rev-parse HEAD:library/xml" ]; then
+      echo "${xmlRev}"
+    else
+      exit 1
+    fi
+  '';
+in
+  stdenv.mkDerivation {
+    pname = "dfhack";
+    inherit version;
+
+    # Beware of submodules
+    src = fetchFromGitHub {
+      owner = "DFHack";
+      repo = "dfhack";
+      rev = release.dfHackRelease;
+      sha256 = release.sha256;
+      fetchSubmodules = true;
+    };
+
+    patches = lib.optional (lib.versionOlder version "0.44.12-r3") (fetchpatch {
+      name = "fix-stonesense.patch";
+      url = "https://github.com/DFHack/stonesense/commit/f5be6fe5fb192f01ae4551ed9217e97fd7f6a0ae.patch";
+      extraPrefix = "plugins/stonesense/";
+      stripLen = 1;
+      hash = "sha256-wje6Mkct29eyMOcJnbdefwBOLJko/s4JcJe52ojuW+8=";
+    }) ++ lib.optional (lib.versionOlder version "0.47.04-r1") (fetchpatch {
+      name = "fix-protobuf.patch";
+      url = "https://github.com/DFHack/dfhack/commit/7bdf958518d2892ee89a7173224a069c4a2190d8.patch";
+      hash = "sha256-p+mKhmYbnhWKNiGPMjbYO505Gcg634n0nudqH0NX3KY=";
+    });
+
+    # gcc 11 fix
+    CXXFLAGS = lib.optionalString (lib.versionOlder version "0.47.05-r3") "-fpermissive";
+
+    # As of
+    # https://github.com/DFHack/dfhack/commit/56e43a0dde023c5a4595a22b29d800153b31e3c4,
+    # dfhack gets its goodies from the directory above the Dwarf_Fortress
+    # executable, which leads to stock Dwarf Fortress and not the built
+    # environment where all the dfhack resources are symlinked to (typically
+    # ~/.local/share/df_linux). This causes errors like `tweak is not a
+    # recognized command` to be reported and dfhack to lose some of its
+    # functionality.
+    postPatch = ''
+      sed -i 's@cached_path = path_string.*@cached_path = getenv("DF_DIR");@' library/Process-linux.cpp
+    '';
+
+    nativeBuildInputs = [ cmake perl XMLLibXML XMLLibXSLT fakegit ];
+    # We don't use system libraries because dfhack needs old C++ ABI.
+    buildInputs = [ zlib SDL ]
+      ++ lib.optionals enableStoneSense [ allegro5 libGLU libGL ];
+
+    preConfigure = ''
+      # Trick build system into believing we have .git
+      mkdir -p .git/modules/library/xml
+      touch .git/index .git/modules/library/xml/index
+    '';
+
+    cmakeFlags = [ "-DDFHACK_BUILD_ARCH=${arch}" "-DDOWNLOAD_RUBY=OFF" ]
+      ++ lib.optionals enableStoneSense [ "-DBUILD_STONESENSE=ON" "-DSTONESENSE_INTERNAL_SO=OFF" ];
+
+    # dfhack expects an unversioned libruby.so to be present in the hack
+    # subdirectory for ruby plugins to function.
+    postInstall = ''
+      ln -s ${ruby}/lib/libruby-*.so $out/hack/libruby.so
+    '';
+
+    passthru = { inherit dfVersion; };
+
+    meta = with lib; {
+      description = "Memory hacking library for Dwarf Fortress and a set of tools that use it";
+      homepage = "https://github.com/DFHack/dfhack/";
+      license = licenses.zlib;
+      platforms = [ "x86_64-linux" "i686-linux" ];
+      maintainers = with maintainers; [ robbinch a1russell abbradar numinit ncfavier ];
+    };
+  }
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix b/nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
new file mode 100644
index 000000000000..42dd74a766b2
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, qtbase
+, qtdeclarative
+, cmake
+, texlive
+, ninja
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dwarf-therapist";
+  version = "41.2.2";
+
+  src = fetchFromGitHub {
+    owner = "Dwarf-Therapist";
+    repo = "Dwarf-Therapist";
+    rev = "v${version}";
+    sha256 = "sha256-zsEG68ioSw64UfmqlTLO1i5sObg8C4zxvdPxdQGMhhU=";
+  };
+
+  nativeBuildInputs = [ texlive cmake ninja ];
+  buildInputs = [ qtbase qtdeclarative ];
+
+  installPhase =
+    if stdenv.isDarwin then ''
+      mkdir -p $out/Applications
+      cp -r DwarfTherapist.app $out/Applications
+    '' else null;
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    description = "Tool to manage dwarves in a running game of Dwarf Fortress";
+    maintainers = with maintainers; [ abbradar bendlas numinit jonringer ];
+    license = licenses.mit;
+    platforms = platforms.x86;
+    homepage = "https://github.com/Dwarf-Therapist/Dwarf-Therapist";
+  };
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in b/nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in
new file mode 100644
index 000000000000..5ae0a35b5e20
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/dwarf-therapist.in
@@ -0,0 +1,25 @@
+#!@stdenv_shell@ -e
+
+[ -z "$DT_DIR" ] && DT_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/dwarftherapist"
+
+install_dir="@install@"
+therapist_dir="@therapist@"
+
+@cat@ <<EOF >&2
+Using $DT_DIR as Dwarf Therapist overlay directory.
+EOF
+
+update_path() {
+  local path="$1"
+
+  @mkdir@ -p "$DT_DIR/$(@dirname@ "$path")"
+  if [ ! -e "$DT_DIR/$path" ] || [ -L "$DT_DIR/$path" ]; then
+    @rm@ -f "$DT_DIR/$path"
+    @ln@ -s "$install_dir/share/dwarftherapist/$path" "$DT_DIR/$path"
+  fi
+}
+
+cd "$install_dir/share/dwarftherapist"
+update_path memory_layouts
+
+exec "$therapist_dir/bin/dwarftherapist" "$@"
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix b/nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
new file mode 100644
index 000000000000..dad59953533b
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
@@ -0,0 +1,60 @@
+{ stdenv, dwarf-therapist, dwarf-fortress, substituteAll, coreutils, wrapQtAppsHook }:
+
+let
+  platformSlug =
+    if stdenv.targetPlatform.is32bit then
+      "linux32" else "linux64";
+  inifile = "linux/v0.${dwarf-fortress.baseVersion}.${dwarf-fortress.patchVersion}_${platformSlug}.ini";
+
+in
+
+stdenv.mkDerivation {
+  pname = "dwarf-therapist";
+  inherit (dwarf-therapist) version meta;
+
+  wrapper = substituteAll {
+    src = ./dwarf-therapist.in;
+    stdenv_shell = "${stdenv.shell}";
+    rm = "${coreutils}/bin/rm";
+    ln = "${coreutils}/bin/ln";
+    cat = "${coreutils}/bin/cat";
+    mkdir = "${coreutils}/bin/mkdir";
+    dirname = "${coreutils}/bin/dirname";
+    therapist = "${dwarf-therapist}";
+  };
+
+  paths = [ dwarf-therapist ];
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  passthru = { inherit dwarf-fortress dwarf-therapist; };
+
+  buildCommand = ''
+    mkdir -p $out/bin
+
+    install -Dm755 $wrapper $out/bin/dwarftherapist
+    ln -s $out/bin/dwarftherapist $out/bin/DwarfTherapist
+
+    substituteInPlace $out/bin/dwarftherapist \
+      --subst-var-by install $out
+    wrapQtApp $out/bin/dwarftherapist
+
+    # Fix up memory layouts
+    rm -rf $out/share/dwarftherapist/memory_layouts/linux
+    mkdir -p $out/share/dwarftherapist/memory_layouts/linux
+    orig_md5=$(cat "${dwarf-fortress}/hash.md5.orig" | cut -c1-8)
+    patched_md5=$(cat "${dwarf-fortress}/hash.md5" | cut -c1-8)
+    input_file="${dwarf-therapist}/share/dwarftherapist/memory_layouts/${inifile}"
+    output_file="$out/share/dwarftherapist/memory_layouts/${inifile}"
+
+    echo "[Dwarf Therapist Wrapper] Fixing Dwarf Fortress MD5 prefix:"
+    echo "  Input:   $input_file"
+    echo "  Search:  $orig_md5"
+    echo "  Output:  $output_file"
+    echo "  Replace: $patched_md5"
+
+    substitute "$input_file" "$output_file" --replace "$orig_md5" "$patched_md5"
+  '';
+
+  preferLocalBuild = true;
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/game.json b/nixpkgs/pkgs/games/dwarf-fortress/game.json
new file mode 100644
index 000000000000..522cccdcda45
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/game.json
@@ -0,0 +1,139 @@
+{
+  "0.43.05": {
+    "linux": "1r0b96yrdf24m9476k5x7rmp3faxr0kfwwdf35agpvlb1qbi6v45",
+    "linux32": "16l1lydpkbnl3zhz4i2snmjk7pps8vmw3zv0bjgr8dncbsrycd03",
+    "osx": "1j2zdkjnmxy8yn599pm0qmbi4zjp1m8h4ggqjxhyzp135h0lqqf9",
+    "osx32": "09ym4mflp5z78pk5mvj7b44xihnsvrxmh0b5kix6h1m6z3cc90l4",
+    "win": "0m337wh4c47ij1f3zrimvy7baff7nzrmgjbmrwdy89d0z90xpnx8",
+    "win_s": "0bjk5m1qkn3ldhqiwbq24y2m9fz9r574d54ngdb8b4ri2xfl1fbp",
+    "win32": "162rl9ygpj66pis87bqc5bwc0mk75hxv6ianhn87pbl4rh7g8ax8",
+    "win32_s": "0gv1jyw5fdskjjs27pr41grbmkk7ipqn0ry615f5g79k3mhl200i",
+    "legacy": "09lvbmg1gq257qchlbmq7hxc5nl9r39jpf73zhmwb5xfbpprn0zs",
+    "legacy_s": "023a5b27fm65w7gmzjssyyci70fdjk2zbv965y4n0f23kc4rj9gl",
+    "legacy32": "1m75arxj1q82l2dkk8qcargm3xczxlqi8krwvg3iimddky34gipq",
+    "legacy32_s": "1hgzsk66isfr5vcraxwgl7cvycl14kwf8w9kzxr8jyp5z7k24q29"
+  },
+  "0.44.05": {
+    "linux": "18bjyhjp5458bfbizm8vq4s00pqpfs097qp6pv76m84kgbc4ghg3",
+    "linux32": "1b9i4kf4c8s6bhqwn8jx100mg7fqp8nmswrai5w8dsma01py4amr",
+    "osx": "1ssc8vq3ad38x9c04j8gg96kxv0g2npi3jwcg40676byx5nrx7b6",
+    "osx32": "12i7x8idcbvp5h62jyc7b7j98jf4lrisnwglvnrms6jclj0b3g0q",
+    "win": "1kaifarjx0akg7s5a2ngfw0vm0vyr4jnax5rrbv96dliqn5knddz",
+    "win_s": "1a1xikrjdv4b0yfgnp5s8d6xn0njylynsqd8zixdc01vccl5kqm6",
+    "win32": "1j3cq0h7jdvxbsbpfxa7bli45smvy9m4fji0j6849kj7x0vcpwq4",
+    "win32_s": "10cw1n48ffkrv9ms07ka5b5370d9k2fm051cnnq03lkcvlwrq145",
+    "legacy": "0y7xpgmwn4nshhc7apyf8mj5ycl0q5vckdaviwzz6w1x31s3dp6n",
+    "legacy_s": "0j8rbw9ww1avmh8zhyzljjj6in87q4qffpffdl394fsi74n8px0d",
+    "legacy32": "0d3l4jvx53a01fjf1lf20ar9lfyykfhk05dlrfwz3w4k7vj4vvlf",
+    "legacy32_s": "1c5x9x44bblz7anhmk4y9a7p1b39b9k7gzvj4pi55jzfq0k60kl7"
+  },
+  "0.44.09": {
+    "linux": "1haikynkg1pqyrzzqk1qxm19p36ww58qp8brh3fjxssp4x71rcdy",
+    "linux32": "0lmbrdf7wjdwj5yx0khnq871yxvhfwqxjjyfkqcdy5ik18lvlkj8",
+    "osx": "01dss8g9lmi8majp6lxcfw166ydz4himkz6am5pi29gixaf4vfqs",
+    "osx32": "1iwlvmz1ir9k0kzn6726frmkznvsg9a99bbqnxvwcnq3nnnjxw3s",
+    "win": "08g5irgp59dfjgj3jxc8ixwzgnz2wghcl8cg1b1g4088dsf2x3x8",
+    "win_s": "1xyb4msn9wfrh7x136r8xn3sjz6z8c4zksbzifa0z0bpa3pdviap",
+    "win32": "0m8bs2mnyi1r4x84fwnfgd1ijdcf08xsq5zy84476svci932g5kz",
+    "win32_s": "0pl319qmyy96ibzlgj4wfj19dv1wzyg8ig6q11l4c7rivzc9286i",
+    "legacy": "0l8nrvppfzazhjsfkd5nd0bxnc6ljk8fs6yg8qh69g7q7zvzgnd3",
+    "legacy_s": "1c49z539a31czzq0rnhg6yrv1zbaja35sd0ssr4k7lsghjv84k1z",
+    "legacy32": "155xg6dpb8frlw7d9h7m1y0spw55wl4nkn7zrm70bpyp39pydlqp",
+    "legacy32_s": "05qkzjfx1ybrv96wya1dirdfxdkhj6a440sjpzwbqpkqgr8z57a3"
+  },
+  "0.44.10": {
+    "linux": "1cqm43hn3ar9d8a7y7dwq48ajp72cirn1gclh8r2fykkypprxmp2",
+    "linux32": "0gdb6sq8725nwdisxwha8f5b6arq570s73aj4gdrh611gxh13r6n",
+    "osx": "1wpa45d81q8f5mhqmaxvdkz93k6cm3pg7vpsqjjjsp5s961gd74g",
+    "osx32": "0rsy1n19n12gh8rddgi3db32in488f2nizq8kw25hga03hsh4r6x",
+    "win": "04i0ka12hmn3chsyfmk2pbknr1pdf3p8yaz7kv82ri4g6dvsjfv6",
+    "win_s": "01m6nqcrz4rhdc8wb31azj3vmjid8bdpqaf9wkz4g4vvjyy7xiyz",
+    "win32": "1nymin8wbzbh8gm2702dy7h5spdijdxnysdz71ldyl0xx4vw68d9",
+    "win32_s": "1skz0jpfm6j9bins04kn96f3v3k0kvjqlh25x3129r3hh8xacnd3",
+    "legacy": "0s84vpfr2b5y1kda9allqjrpkaxw15mkblk9dq08syhsj19vspa7",
+    "legacy_s": "18b7ikp7xy2y071h3ydfh5mq9hw9y303rdqyikvra5ji3n5p96cm",
+    "legacy32": "1yh2fl3qwpy6wrxavhn75grbjygymnfh746hxbmc60la7y5flrpy",
+    "legacy32_s": "0j65w2hxgpccg9qsaz14r82qvnvfd0pbl2gyx9fv8d77kxhkc4pw"
+  },
+  "0.44.11": {
+    "linux": "1qizfkxl2k6pn70is4vz94q4k55bc3pm13b2r6yqi6lw1cnna4sf",
+    "linux32": "11m39lfyrsxlw1g7f269q7fzwichg06l21fxhqzgvlvmzmxsf8q5",
+    "osx": "073hmcj7bm323m3xqi42605rkvmgmv83bnxz1byymgs8aqyfykkx",
+    "osx32": "0w5avnj86wprk8q0rb5qm9kxbigzk6dk0akqbw4m76jgg2jdmir7",
+    "win": "1yxyv1sycn5jc3g1y02d82154xydg3kbghis7l3xi28n3bh8387b",
+    "win_s": "1xzwl6c362wqgps911y9q8vndp8zyd20fc2p7pkzzmw2hrgfqi6q",
+    "win32": "16x2rg3gm3lh2akg7n057kkxxigb2ljz0nk685lmn4j0adq8l31p",
+    "win32_s": "1a2y220111d94mzj5y3jwpy062k8fw25akyp7yn3fwa17vwvn8zq",
+    "legacy": "0gfjmsfqj21hs4d1hm7fvppbdjspc4r2qnnp6mwcbgh67i5p5rdb",
+    "legacy_s": "1wr4hpzmhgl8haric3jpfd3kwqv1fi4vkb1gvaax5f7kplvfqfac",
+    "legacy32": "1cpzckwvqkxqn0c498mmh4papsjdi3mcvcp2vzlvj46kvdl3n0f0",
+    "legacy32_s": "024vzwfcrx7ms4dip0ccwd0vizzck2pwz2ryyvlz4rpjzhswj5gi"
+  },
+  "0.44.12": {
+    "win32": "0bxrc7zj4vgcgdwc130g6f5jnp13vgx9a2kn2l1jcc958x8a367g",
+    "linux32": "0fmr8diskmbh12s0bpfn5gky9lmrc7xxj6va5adjm6ahxv9jwr06",
+    "osx": "1md6r1pimmlhcn5gjqzg0ygbdwc2v125sfjy0f6gbfbykwcm7391",
+    "osx32": "1dbg7pavxw20r8iqc566fn558avgj5glsycvi6ggbvsh0rpw6n5v",
+    "win": "0zb5ximqi5j7vyvgjzfz7ycadh5sgb7jlyaa68x0sjlbybdr1min",
+    "win_s": "1ncf5zr1fggr5knf30l0wh7spp376v1jcc6m9c86zim8azcfx0y7",
+    "linux": "0ydr5lnysy45nsznqp5r2pysdqn3f0xkrkh9v9l1md111mriabas",
+    "win32_s": "1mxbjkikf010skrpng51r86jmv4nal51j5n1y9kyhv344bq6chr9",
+    "legacy": "11a212ynhx18p3k8hvdjx199din14wggxiwz191b4309fznzpprz",
+    "legacy_s": "05madj529y18ndxrih96mivbzng1vz2zbzicrcnj58i2084zm23f",
+    "legacy32": "0rapcydiic2nq6idjf7fg53xsxk8dxzyi1vflpz554ghdrnsmwjv",
+    "legacy32_s": "16fgbd3lx4r270dxqj6gr1g1iqjj8cv389h2hw1l646xx28g8d2m"
+  },
+  "0.47.01": {
+    "linux": "1wbybkfpgvpd2yliy8mfgddnz806ac4rv4j0lhlsqwpk8jj0mx81",
+    "linux32": "1fnz1mydqgybcm8kzranvjzc2x9g6bcalxv3fsjngvpv13x6izzv",
+    "osx": "18wdffidasbrsbhqjwds08ckbrjhcw0759aynz7zggyy5is9q8iw",
+    "osx32": "1b4kf3vg0zd5w5s0rdhzfz0rswkl6sq0j1f8qmimnw7qd09h43wx",
+    "win": "1v3v2z7g67d6926h9lxakznvbddyxyr85i1ym34y2wywnc886z7r",
+    "win_s": "0yahynimhz4nvdi5qp5a612vf7ikg87w2aj2r8s1lhdw6xwdkpyc",
+    "win32": "07mqhm64c1ddjc3vpyhf9qf14lp19xwz3pgg4c2pvcwy4yyrys22",
+    "win32_s": "07acbxai8g04yxg7n68nyx4jwcqqkgjn7n96q2lzxdvc988kiivz",
+    "legacy32_s": "1gxmc3rsl9glai3wb4wzsda3qyhdimd8s5kbr5m753n8lmzasafx"
+  },
+  "0.47.02": {
+    "linux": "1zbsygbfiqxxs767qxkxjp3ayywi5q0d8xlrqlbd0l8a3ccg5avw",
+    "linux32": "1ddc9s4n408j8gidgign51bgv2wgy5z4cy74jzx00pvnhsfp2mpy",
+    "osx": "1mwy88yxip1wys1kxpfsbg7wlvfrkc4lg04gqw0d266a88dj7a30",
+    "osx32": "08ssnzl52gqqgcqhl0ynyikbxz76825kpcg1d6yx8g7ifjndf19n",
+    "win": "08g7fy18y8q32l0158314bny0qg57xz37qj9fri9r4xbhci67ldk",
+    "win_s": "0x56s1md62yk661aqcdgnz8k0zir0zr8qwan5vrqc0q9yh069yl1",
+    "win32": "0ww64mymbilb235n93d7w4c9axq3ww2mxa0f7bl4x8yrxwc8k942",
+    "win32_s": "0r801vip807v88icf47i3s82v7lshx67q4ilzfjirqfslh1x00bs",
+    "legacy": "14f4d6r7swfjnlaalg4l5916ihj6wvhlsgjp7cygamzp4c2wgng8",
+    "legacy_s": "1jxf52kaijf4crwxj30a4f6z7rzs6xa91y6vn5s8jr0cvbr5pz64",
+    "legacy32": "0j7shqdv3gimacj03cil2y0fmr0j0fp57cwmdjwnxwx3m96k3xwm",
+    "legacy32_s": "1wc7pcp9dwz0q1na3i5pbqknya595qdkmr7hsmgh2kk8rsp3g9g2"
+  },
+  "0.47.04": {
+    "linux": "1ri82c5hja6n0wv538srf2nbcyb8ip49w4l201m90cmcycmqgr8x",
+    "linux32": "00yz8gl75sbx15d7vl22ij0a5qd325kpc9mgm1lh5g7i065vgzn8",
+    "osx": "0c1g655bn5n4pbzxw3v83gmy54va5y87m7ksi6iryfal0m9lshhv",
+    "osx32": "1knfgqbwa7v9va1w6i8yzz6xp3dj633dbs50izx6ldszm0ra42pg",
+    "win": "0j7ixr3rf9900zzfw3nd3vg97kdkspm530cmf9dkwhf6klmpks7s",
+    "win_s": "11amw5gjhi753mvf17wifcjiyikjx0qwa16787gfhj9jfp0yw764",
+    "win32": "1xw9f49n85c31kbzkm5zh81kccjx9msjyy3xwr0klak5w398a59l",
+    "win32_s": "0s26hrgfk2b5wg4dvg90wgw1mvrrvbyjhmsys9f5fl7zn1pjbxxr",
+    "legacy": "103bcnn8gxi2rkpjmjfgv5a5kxmh1zd7vagrsscv55sppd7fcl7n",
+    "legacy_s": "19ai7lvxx0y3iha9qrbl5krric547rzs6vm4ibk8x61vv97jrbd8",
+    "legacy32": "0lli6s1g7yj3p3h26ajgq3h619n88qn6s7amyz6z8w7hyzfi7wij",
+    "legacy32_s": "1wzxbzgln9pmsk2nchrl94d2yd09xdgynmjl4qwcaqzkrnf3sfqc"
+  },
+  "0.47.05": {
+    "linux": "18zwmz2nsgwjxbr2yd9jcrgw6l5b481hh1848cgn5nfpnzdscx5c",
+    "linux32": "1jbav7ghsjsxd6cdp6f2x5qn83zc8707dqan5sp73fp6mbj2jasl",
+    "osx": "092z1vhc5sbdc5irggdz5ai7rxifmg4yhy33aicpsjcnvcmajydw",
+    "osx32": "0lpbwfiagp0zp280aw3fmj8938w5fc5r9gibzk2h86jy63ps29ww",
+    "win": "0bbk7j3d4h2wn9hmbsbbbbr0ajf3ddlprxfaajfbnbiyv72cpn9s",
+    "win_s": "0nl7c9dpfx7jjpy7y52z8h3kiy4cpax1m58apbcfyy95an4jz8s4",
+    "win32": "08ka1lklly82h4mr770y9p0a21x9dx6jqvjgxdsxj5979f26il1v",
+    "win32_s": "06w844zxzx3lfykibgkk4gbg4xymnqraj1ikv4mzlv31l727a1x4",
+    "legacy": "042a0gbad3cp5dwhnrzg3vr9w48b8ybqgxgw5i9rk4c1i0gjjpw2",
+    "legacy_s": "1rb7h8lzlsjs08rvhhl3nwbrpj54zijijp4y0qdp4vyzsig6nisk",
+    "legacy32": "0ayw09x9smihh8qp5pdvr6vvhwkvcqz36h3lh4g1b5kzxj7g9cyf",
+    "legacy32_s": "10gfxlysfs9gyi1mv52idp5xk45g9h517g2jq4a8cqp2j7594v9c"
+  }
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/game.nix b/nixpkgs/pkgs/games/dwarf-fortress/game.nix
new file mode 100644
index 000000000000..7ce837b7b0b5
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/game.nix
@@ -0,0 +1,109 @@
+{ stdenv
+, lib
+, fetchurl
+, SDL
+, dwarf-fortress-unfuck
+
+  # Our own "unfuck" libs for macOS
+, ncurses
+, fmodex
+, gcc
+
+, dfVersion
+, df-hashes
+}:
+
+with lib;
+
+let
+  libpath = makeLibraryPath [ stdenv.cc.cc stdenv.cc.libc dwarf-fortress-unfuck SDL ];
+
+  # Map Dwarf Fortress platform names to Nixpkgs platform names.
+  # Other srcs are avilable like 32-bit mac & win, but I have only
+  # included the ones most likely to be needed by Nixpkgs users.
+  platforms = {
+    x86_64-linux = "linux";
+    i686-linux = "linux32";
+    x86_64-darwin = "osx";
+    i686-darwin = "osx32";
+    x86_64-cygwin = "win";
+    i686-cygwin = "win32";
+  };
+
+  dfVersionTriple = splitVersion dfVersion;
+  baseVersion = elemAt dfVersionTriple 1;
+  patchVersion = elemAt dfVersionTriple 2;
+
+  game =
+    if hasAttr dfVersion df-hashes
+    then getAttr dfVersion df-hashes
+    else throw "Unknown Dwarf Fortress version: ${dfVersion}";
+  dfPlatform =
+    if hasAttr stdenv.hostPlatform.system platforms
+    then getAttr stdenv.hostPlatform.system platforms
+    else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+  sha256 =
+    if hasAttr dfPlatform game
+    then getAttr dfPlatform game
+    else throw "Unsupported dfPlatform: ${dfPlatform}";
+
+in
+
+stdenv.mkDerivation {
+  pname = "dwarf-fortress";
+  version = dfVersion;
+
+  src = fetchurl {
+    url = "https://www.bay12games.com/dwarves/df_${baseVersion}_${patchVersion}_${dfPlatform}.tar.bz2";
+    inherit sha256;
+  };
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r * $out
+    rm $out/libs/lib*
+
+    exe=$out/${if stdenv.isLinux then "libs/Dwarf_Fortress"
+                                 else "dwarfort.exe"}
+
+    # Store the original hash
+    md5sum $exe | awk '{ print $1 }' > $out/hash.md5.orig
+  '' + optionalString stdenv.isLinux ''
+    patchelf \
+      --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
+      --set-rpath "${libpath}" \
+      $exe
+  '' + optionalString stdenv.isDarwin ''
+    # My custom unfucked dwarfort.exe for macOS. Can't use
+    # absolute paths because original doesn't have enough
+    # header space. Someone plz break into Tarn's house & put
+    # -headerpad_max_install_names into his LDFLAGS.
+
+    ln -s ${getLib ncurses}/lib/libncurses.dylib $out/libs
+    ln -s ${getLib gcc.cc}/lib/libstdc++.6.dylib $out/libs
+    ln -s ${getLib fmodex}/lib/libfmodex.dylib $out/libs
+
+    install_name_tool \
+      -change /usr/lib/libncurses.5.4.dylib \
+              @executable_path/libs/libncurses.dylib \
+      -change /usr/local/lib/x86_64/libstdc++.6.dylib \
+              @executable_path/libs/libstdc++.6.dylib \
+      $exe
+  '' + ''
+    # Store the new hash
+    md5sum $exe | awk '{ print $1 }' > $out/hash.md5
+  '';
+
+  passthru = {
+    inherit baseVersion patchVersion dfVersion;
+    updateScript = ./update.sh;
+  };
+
+  meta = {
+    description = "A single-player fantasy game with a randomly generated adventure world";
+    homepage = "https://www.bay12games.com/dwarves/";
+    license = licenses.unfreeRedistributable;
+    platforms = attrNames platforms;
+    maintainers = with maintainers; [ a1russell robbinch roconnor abbradar numinit shazow ncfavier ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/lazy-pack.nix b/nixpkgs/pkgs/games/dwarf-fortress/lazy-pack.nix
new file mode 100644
index 000000000000..17037dbdb278
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/lazy-pack.nix
@@ -0,0 +1,56 @@
+{ stdenvNoCC
+, lib
+, buildEnv
+, df-games
+, themes
+, latestVersion
+, versionToName
+, dfVersion ? latestVersion
+  # This package should, at any given time, provide an opinionated "optimal"
+  # DF experience. It's the equivalent of the Lazy Newbie Pack, that is, and
+  # should contain every utility available unless you disable them.
+, enableDFHack ? stdenvNoCC.isLinux
+, enableTWBT ? enableDFHack
+, enableSoundSense ? true
+, enableStoneSense ? true
+, enableDwarfTherapist ? true
+, enableLegendsBrowser ? true
+, legends-browser
+, theme ? themes.phoebus
+  # General config options:
+, enableIntro ? true
+, enableTruetype ? null # defaults to 24, see init.txt
+, enableFPS ? false
+, enableTextMode ? false
+, enableSound ? true
+}:
+
+with lib;
+
+let
+  dfGame = versionToName dfVersion;
+  dwarf-fortress =
+    if hasAttr dfGame df-games
+    then getAttr dfGame df-games
+    else throw "Unknown Dwarf Fortress version: ${dfVersion}";
+  dwarf-therapist = dwarf-fortress.dwarf-therapist;
+in
+buildEnv {
+  name = "dwarf-fortress-full";
+  paths = [
+    (dwarf-fortress.override {
+      inherit enableDFHack enableTWBT enableSoundSense enableStoneSense theme
+        enableIntro enableTruetype enableFPS enableTextMode enableSound;
+    })
+  ]
+  ++ lib.optional enableDwarfTherapist dwarf-therapist
+  ++ lib.optional enableLegendsBrowser legends-browser;
+
+  meta = with lib; {
+    description = "An opinionated wrapper for Dwarf Fortress";
+    maintainers = with maintainers; [ Baughn numinit ];
+    license = licenses.mit;
+    platforms = platforms.all;
+    homepage = "https://github.com/NixOS/nixpkgs/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/legends-browser/default.nix b/nixpkgs/pkgs/games/dwarf-fortress/legends-browser/default.nix
new file mode 100644
index 000000000000..3484db0cc8ff
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/legends-browser/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildEnv, writeShellScriptBin, fetchurl, jre }:
+
+let
+  name = "legends-browser-${version}";
+  version = "1.17.1";
+
+  jar = fetchurl {
+    url = "https://github.com/robertjanetzko/LegendsBrowser/releases/download/${version}/legendsbrowser-${version}.jar";
+    sha256 = "05b4ksbl4481rh3ykfirbp6wvxhppcd5mvclhn9995gsrcaj8gx9";
+  };
+
+  script = writeShellScriptBin "legends-browser" ''
+    set -eu
+    BASE="$HOME/.local/share/df_linux/legends-browser/"
+    mkdir -p "$BASE"
+    cd "$BASE"
+    if [[ ! -e legendsbrowser.properties ]]; then
+      echo 'Creating initial configuration for legends-browser'
+      echo "last=$(cd ..; pwd)" > legendsbrowser.properties
+    fi
+    ${jre}/bin/java -jar ${jar}
+  '';
+in
+
+buildEnv {
+  inherit name;
+  paths = [ script ];
+
+  meta = with lib; {
+    description = "A multi-platform, open source, java-based legends viewer for dwarf fortress";
+    maintainers = with maintainers; [ Baughn ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    platforms = platforms.all;
+    homepage = "https://github.com/robertjanetzko/LegendsBrowser";
+  };
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/soundsense.nix b/nixpkgs/pkgs/games/dwarf-fortress/soundsense.nix
new file mode 100644
index 000000000000..8ed1e7be1b20
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/soundsense.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, fetchzip
+, dos2unix
+, soundPack ? stdenv.mkDerivation {
+    name = "soundsense-soundpack";
+    src = fetchzip {
+      url = "http://df.zweistein.cz/soundsense/soundpack.zip";
+      sha256 = "0qz0mjkp7wp0gxk3ws2x760awv8c9lkacj2fn9bz3gqqnq262ffa";
+    };
+    installPhase = ''
+      cp -r . $out
+    '';
+  }
+}:
+
+stdenv.mkDerivation rec {
+  version = "2016-1_196";
+  dfVersion = "0.44.12";
+  inherit soundPack;
+  pname = "soundsense";
+  src = fetchzip {
+    url = "http://df.zweistein.cz/soundsense/soundSense_${version}.zip";
+    sha256 = "1gkrs69l3xsh858yjp204ddp29m668j630akm7arssc9359wxqkk";
+  };
+  nativeBuildInputs = [ dos2unix ];
+  buildPhase = ''
+    dos2unix soundSense.sh
+    chmod +x soundSense.sh
+  '';
+  installPhase = ''
+    mkdir $out
+    cp -R . $out/soundsense
+    ln -s $out/soundsense/dfhack $out/hack
+    ln -s $soundPack $out/soundsense/packs
+  '';
+  passthru = { inherit version dfVersion; };
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/themes/default.nix b/nixpkgs/pkgs/games/dwarf-fortress/themes/default.nix
new file mode 100644
index 000000000000..d2e2ec5fd19b
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/themes/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchFromGitHub, ... }:
+
+with builtins;
+
+listToAttrs (map
+  (v: {
+    inherit (v) name;
+    value = fetchFromGitHub {
+      name = "${v.name}-theme-${v.version}";
+      owner = "DFgraphics";
+      repo = v.name;
+      rev = v.version;
+      sha256 = v.sha256;
+      meta = with lib; {
+        platforms = platforms.all;
+        maintainers = [ maintainers.matthewbauer maintainers.shazow ];
+        license = licenses.free;
+      };
+    };
+  })
+  (fromJSON (readFile ./themes.json)))
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/themes/themes.json b/nixpkgs/pkgs/games/dwarf-fortress/themes/themes.json
new file mode 100644
index 000000000000..1b2449addf40
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/themes/themes.json
@@ -0,0 +1,87 @@
+[
+  {
+    "name": "afro-graphics",
+    "version": "47.05",
+    "sha256": "0gqrxb4bbx1h93xjz4ygd7yp8g5barj2zc6y7xvr94ww8b9a2r28"
+  },
+  {
+    "name": "autoreiv",
+    "version": "47.01",
+    "sha256": "1c2xchlfq7ajpcq8qgrzkw5yfgm0k3fiwq6n7l4724dlbim3rjp2"
+  },
+  {
+    "name": "cla",
+    "version": "0.47.xx-v26.3",
+    "sha256": "0ca81r3821jja4pqib75qxcsgg3s0wxzyq1jb4jc0495cvzxw7qa"
+  },
+  {
+    "name": "dfgraphics",
+    "version": "42.05",
+    "sha256": "18xyqn458hh8l2qgbvrvz17nbp6yk91d7rqlxlp1g5wr9qfq28rp"
+  },
+  {
+    "name": "gemset",
+    "version": "47.05",
+    "sha256": "1ivsbj71w3zwxnaz0405xhqhn4yzdfziijc0s0vmbmcphhhqnjaj"
+  },
+  {
+    "name": "ironhand",
+    "version": "47.05",
+    "sha256": "003yrwishkzf6nvr6xlldbnd3x7rf5ds7l91mc0npdq1lcl0br9w"
+  },
+  {
+    "name": "jolly-bastion",
+    "version": "47.04",
+    "sha256": "0799ad90g62nvpdcl6zq3vr2nvfc62lprm4br9n2hbs8wgrra6rq"
+  },
+  {
+    "name": "mayday",
+    "version": "47.05",
+    "sha256": "17sdvr9a98xx5r2nrr3m4jlddvlb4h6qlch8r23g9g4mj0hsifnj"
+  },
+  {
+    "name": "meph",
+    "version": "47.05_v5.5.1-V",
+    "sha256": "1kiqxiqw686dii5x7zav2nsw15csg0grv4h8hrb764rl4fw6x9nl"
+  },
+  {
+    "name": "obsidian",
+    "version": "47.05",
+    "sha256": "1dkwdwm52fsj4gqqqr5vppbsk8a4kd3i7d3qawawgl0qn6q139xs"
+  },
+  {
+    "name": "phoebus",
+    "version": "47.05",
+    "sha256": "18pn3dqyk9hp82gva92c6y3vk52s366rrx74rdnvahswdr5dmq4d"
+  },
+  {
+    "name": "rally-ho",
+    "version": "47.05",
+    "sha256": "1h3jqq0yq2rbzbl70sq85lgdpwswczpay16kqfwq1n8zdisl4gqn"
+  },
+  {
+    "name": "spacefox",
+    "version": "47.05a",
+    "sha256": "1y1rbsxr1m0mb2k02q6gh24c4nyqc9lw98dvfckp2bzc5f9cx3ks"
+  },
+  {
+    "name": "taffer",
+    "version": "47.04",
+    "sha256": "1ly2sc0pb2kybb8grj19zx372whblmd0bj8p64akpi2rrywi13sy"
+  },
+  {
+    "name": "tergel",
+    "version": "47.01",
+    "sha256": "142sd1i11vvirn68rp4gqzl67ww597df1lc57ycnpnz0n3q39kxy"
+  },
+  {
+    "name": "vettlingr",
+    "version": "47.05",
+    "sha256": "0s1vy3ssp1hk8f6wlkz09xy5v747dpbsgw5vi6i1mq3lnlcy68vq"
+  },
+  {
+    "name": "wanderlust",
+    "version": "47.04",
+    "sha256": "1z56m8zplq5d18sbkwg5lwcy8iwfa5hbxixsm3hdxm04qyld1z89"
+  }
+]
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/themes/update.sh b/nixpkgs/pkgs/games/dwarf-fortress/themes/update.sh
new file mode 100755
index 000000000000..1b652bf49943
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/themes/update.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p jq nix coreutils curl nix-prefetch-git
+
+curl "https://api.github.com/users/dfgraphics/repos" | jq -r '.[].name | ascii_downcase' | while read repo; do
+    version="$(curl "https://api.github.com/repos/DFgraphics/${repo}/releases/latest" | jq -r .tag_name)"
+    sha256="$(nix-prefetch-git "https://github.com/DFgraphics/${repo}" "${version}" | jq -r ".sha256")"
+    echo "{}" | jq ".name=\"${repo}\" | .version=\"${version}\" | .sha256=\"${sha256}\""
+done | jq -s . > themes.json
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/twbt/default.nix b/nixpkgs/pkgs/games/dwarf-fortress/twbt/default.nix
new file mode 100644
index 000000000000..311a36da2bf1
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/twbt/default.nix
@@ -0,0 +1,85 @@
+{ stdenvNoCC
+, lib
+, fetchurl
+, unzip
+, dfVersion
+}:
+
+with lib;
+
+let
+  twbt-releases = {
+    "0.44.10" = {
+      twbtRelease = "6.49";
+      sha256 = "1qjkc7k33qhxj2g18njzasccjqsis5y8zrw5vl90h4rs3i8ld9xz";
+      prerelease = false;
+    };
+    "0.44.11" = {
+      twbtRelease = "6.51";
+      sha256 = "1yclqmarjd97ch054h425a12r8a5ailmflsd7b39cg4qhdr1nii5";
+      prerelease = true;
+    };
+    "0.44.12" = {
+      twbtRelease = "6.54";
+      sha256 = "10gfd6vv0vk4v1r5hjbz7vf1zqys06dsad695gysc7fbcik2dakh";
+      prerelease = false;
+    };
+    "0.47.02" = {
+      twbtRelease = "6.61";
+      sha256 = "07bqy9rkd64h033sxdpigp5zq4xrr0xd36wdr1b21g649mv8j6yw";
+      prerelease = false;
+    };
+    "0.47.04" = {
+      twbtRelease = "6.xx";
+      dfhackRelease = "0.47.04-r5";
+      sha256 = "sha256-+C3g4KJShCb2VXGQ4mtkDOufXZQ1P+ebDTmUzL3tNyU=";
+      prerelease = true;
+    };
+    "0.47.05" = {
+      twbtRelease = "6.xx";
+      dfhackRelease = "0.47.05-r7";
+      sha256 = "sha256-4xMKuSP5J6pMK+hwjTAcTI0gsLJfw+Xt+vh9CopR4tk=";
+      prerelease = true;
+    };
+  };
+
+  release =
+    if hasAttr dfVersion twbt-releases
+    then getAttr dfVersion twbt-releases
+    else throw "[TWBT] Unsupported Dwarf Fortress version: ${dfVersion}";
+in
+
+stdenvNoCC.mkDerivation rec {
+  pname = "twbt";
+  version = release.twbtRelease;
+
+  src = fetchurl {
+    url =
+      if version == "6.xx" then
+        "https://github.com/thurin/df-twbt/releases/download/${release.dfhackRelease}/twbt-${version}-linux64-${release.dfhackRelease}.zip"
+      else
+        "https://github.com/mifki/df-twbt/releases/download/v${version}/twbt-${version}-linux.zip";
+    sha256 = release.sha256;
+  };
+
+  sourceRoot = ".";
+
+  outputs = [ "lib" "art" "out" ];
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p $lib/hack/{plugins,lua} $art/data/art
+    cp -a */twbt.plug.so $lib/hack/plugins/
+    cp -a *.lua $lib/hack/lua/
+    cp -a *.png $art/data/art/
+  '';
+
+  meta = with lib; {
+    description = "A plugin for Dwarf Fortress / DFHack that improves various aspects the game interface.";
+    maintainers = with maintainers; [ Baughn numinit ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+    homepage = "https://github.com/mifki/df-twbt";
+  };
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/unfuck.nix b/nixpkgs/pkgs/games/dwarf-fortress/unfuck.nix
new file mode 100644
index 000000000000..9b7de93ecd7d
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/unfuck.nix
@@ -0,0 +1,134 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, libGL
+, libSM
+, SDL
+, SDL_image
+, SDL_ttf
+, glew
+, openalSoft
+, ncurses
+, glib
+, gtk2
+, gtk3
+, libsndfile
+, zlib
+, dfVersion
+, pkg-config
+}:
+
+with lib;
+
+let
+  unfuck-releases = {
+    "0.43.05" = {
+      unfuckRelease = "0.43.05";
+      sha256 = "173dyrbxlzqvjf1j3n7vpns4gfjkpyvk9z16430xnmd5m6nda8p2";
+    };
+    "0.44.05" = {
+      unfuckRelease = "0.44.05";
+      sha256 = "00yj4l4gazxg4i6fj9rwri6vm17i6bviy2mpkx0z5c0mvsr7s14b";
+    };
+    "0.44.09" = {
+      unfuckRelease = "0.44.09";
+      sha256 = "138p0v8z2x47f0fk9k6g75ikw5wb3vxldwv5ggbkf4hhvlw6lvzm";
+    };
+    "0.44.10" = {
+      unfuckRelease = "0.44.10";
+      sha256 = "0vb19qx2ibc79j4bgbk9lskb883qfb0815zw1dfz9k7rqwal8mzj";
+    };
+    "0.44.11" = {
+      unfuckRelease = "0.44.11.1";
+      sha256 = "1kszkb1d1vll8p04ja41nangsaxb5lv4p3xh2jhmsmipfixw7nvz";
+    };
+    "0.44.12" = {
+      unfuckRelease = "0.44.12";
+      sha256 = "1kszkb1d1vll8p04ja41nangsaxb5lv4p3xh2jhmsmipfixw7nvz";
+    };
+    "0.47.01" = {
+      unfuckRelease = "0.47.01";
+      sha256 = "11xvb3qh4crdf59pwfwpi73rzm3ysd1r1xp2k1jp7527jmqapk4k";
+    };
+    "0.47.02" = {
+      unfuckRelease = "0.47.01";
+      sha256 = "11xvb3qh4crdf59pwfwpi73rzm3ysd1r1xp2k1jp7527jmqapk4k";
+    };
+    "0.47.04" = {
+      unfuckRelease = "0.47.04";
+      sha256 = "1wa990xbsyiiz7abq153xmafvvk1dmgz33rp907d005kzl1z86i9";
+    };
+    "0.47.05" = {
+      unfuckRelease = "0.47.04";
+      sha256 = "1wa990xbsyiiz7abq153xmafvvk1dmgz33rp907d005kzl1z86i9";
+    };
+  };
+
+  release =
+    if hasAttr dfVersion unfuck-releases
+    then getAttr dfVersion unfuck-releases
+    else throw "[unfuck] Unknown Dwarf Fortress version: ${dfVersion}";
+in
+
+stdenv.mkDerivation {
+  pname = "dwarf_fortress_unfuck";
+  version = release.unfuckRelease;
+
+  src = fetchFromGitHub {
+    owner = "svenstaro";
+    repo = "dwarf_fortress_unfuck";
+    rev = release.unfuckRelease;
+    sha256 = release.sha256;
+  };
+
+  postPatch = ''
+    # https://github.com/svenstaro/dwarf_fortress_unfuck/pull/27
+    substituteInPlace CMakeLists.txt --replace \''${GLEW_LIBRARIES} GLEW::glew
+  '';
+
+  cmakeFlags = [
+    "-DGTK2_GLIBCONFIG_INCLUDE_DIR=${glib.out}/lib/glib-2.0/include"
+    "-DGTK2_GDKCONFIG_INCLUDE_DIR=${gtk2.out}/lib/gtk-2.0/include"
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+    libSM
+    SDL
+    SDL_image
+    SDL_ttf
+    glew
+    openalSoft
+    ncurses
+    libsndfile
+    zlib
+    libGL
+  ]
+  # switched to gtk3 in 0.47.05
+  ++ (if lib.versionOlder release.unfuckRelease "0.47.05" then [
+    gtk2
+  ] else [
+    gtk3
+  ]);
+
+  # Don't strip unused symbols; dfhack hooks into some of them.
+  dontStrip = true;
+
+  installPhase = ''
+    install -D -m755 ../build/libgraphics.so $out/lib/libgraphics.so
+  '';
+
+  # Breaks dfhack because of inlining.
+  hardeningDisable = [ "fortify" ];
+
+  passthru = { inherit dfVersion; };
+
+  meta = with lib; {
+    description = "Unfucked multimedia layer for Dwarf Fortress";
+    homepage = "https://github.com/svenstaro/dwarf_fortress_unfuck";
+    license = licenses.free;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar numinit ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/update.sh b/nixpkgs/pkgs/games/dwarf-fortress/update.sh
new file mode 100755
index 000000000000..5b99dff8aa77
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/update.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p jq nix coreutils curl
+
+# systems to generate hashes for
+systems='linux linux32 osx osx32
+     win win_s win32 win32_s
+         legacy legacy_s legacy32 legacy32_s'
+
+if [ $# -eq 0 ]; then
+    versions="$(curl http://www.bay12games.com/dwarves/ \
+           | grep 'DWARF FORTRESS CLASSIC ' \
+           | sed 's/.*DWARF FORTRESS CLASSIC \([0-9.]*\) .*/\1/')"
+else
+    versions="$@"
+fi
+
+tmp1="$(mktemp)"
+tmp2="$(mktemp)"
+for version in $versions; do
+    for system in $systems; do
+    echo -n $version,$system,
+    ver=$(echo $version | sed -e s,^0\.,, | tr . _)
+    if [[ "$system" = *win* ]] || [[ "$system" = *legacy* ]]; then
+        ext=zip
+    else
+        ext=tar.bz2
+    fi
+    nix-prefetch-url \
+        http://www.bay12games.com/dwarves/df_${ver}_${system}.${ext}
+    done
+done | jq --slurp --raw-input \
+      'split("\n")  | .[:-1] | map(split(",")) |
+           map({ "version": .[0], "platform": .[1], "sha256": .[2] }) |
+       group_by(.version) |
+       map(map({"version": .version, (.platform): .sha256}) | add |
+           {(.version): .} | map_values(del(.version))) | add' \
+      > "$tmp1"
+
+# Append $tmp1 to game.json. There should be a better way to handle
+# this but all other attempts failed for me.
+jq -M --slurpfile a "$tmp1" '. + $a[]' < "$(dirname "$0")/game.json" > "$tmp2"
+cat "$tmp2" > "$(dirname "$0")/game.json"
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/wrapper/default.nix b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/default.nix
new file mode 100644
index 000000000000..a4433821d20d
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/default.nix
@@ -0,0 +1,182 @@
+{ stdenv
+, lib
+, buildEnv
+, substituteAll
+, runCommand
+, coreutils
+, gawk
+, dwarf-fortress
+, dwarf-therapist
+, enableDFHack ? false
+, dfhack
+, enableSoundSense ? false
+, soundSense
+, jdk
+, enableStoneSense ? false
+, enableTWBT ? false
+, twbt
+, themes ? { }
+, theme ? null
+, extraPackages ? [ ]
+  # General config options:
+, enableIntro ? true
+, enableTruetype ? null # defaults to 24, see init.txt
+, enableFPS ? false
+, enableTextMode ? false
+, enableSound ? true
+# An attribute set of settings to override in data/init/*.txt.
+# For example, `init.FOO = true;` is translated to `[FOO:YES]` in init.txt
+, settings ? { }
+# TODO world-gen.txt, interface.txt require special logic
+}:
+
+let
+  dfhack_ = dfhack.override {
+    inherit enableStoneSense;
+  };
+
+  ptheme =
+    if builtins.isString theme
+    then builtins.getAttr theme themes
+    else theme;
+
+  baseEnv = buildEnv {
+    name = "dwarf-fortress-base-env-${dwarf-fortress.dfVersion}";
+
+    # These are in inverse order for first packages to override the next ones.
+    paths = extraPackages
+         ++ lib.optional (theme != null) ptheme
+         ++ lib.optional enableDFHack dfhack_
+         ++ lib.optional enableSoundSense soundSense
+         ++ lib.optionals enableTWBT [ twbt.lib twbt.art ]
+         ++ [ dwarf-fortress ];
+
+    ignoreCollisions = true;
+  };
+
+  settings_ = lib.recursiveUpdate {
+    init = {
+      PRINT_MODE =
+        if enableTextMode then "TEXT"
+        else if enableTWBT then "TWBT"
+        else if stdenv.hostPlatform.isDarwin then "STANDARD" # https://www.bay12games.com/dwarves/mantisbt/view.php?id=11680
+        else null;
+      INTRO = enableIntro;
+      TRUETYPE = enableTruetype;
+      FPS = enableFPS;
+      SOUND = enableSound;
+    };
+  } settings;
+
+  forEach = attrs: f: lib.concatStrings (lib.mapAttrsToList f attrs);
+
+  toTxt = v:
+    if lib.isBool v then if v then "YES" else "NO"
+    else if lib.isInt v then toString v
+    else if lib.isString v then v
+    else throw "dwarf-fortress: unsupported configuration value ${toString v}";
+
+  config = runCommand "dwarf-fortress-config" {
+    nativeBuildInputs = [ gawk ];
+  } (''
+    mkdir -p $out/data/init
+
+    edit_setting() {
+      v=''${v//'&'/'\&'}
+      if ! gawk -i inplace -v RS='\r?\n' '
+        { n += sub("\\[" ENVIRON["k"] ":[^]]*\\]", "[" ENVIRON["k"] ":" ENVIRON["v"] "]"); print }
+        END { exit(!n) }
+      ' "$out/$file"; then
+        echo "error: no setting named '$k' in $file" >&2
+        exit 1
+      fi
+    }
+  '' + forEach settings_ (file: kv: ''
+    file=data/init/${lib.escapeShellArg file}.txt
+    cp ${baseEnv}/"$file" "$out/$file"
+  '' + forEach kv (k: v: lib.optionalString (v != null) ''
+    export k=${lib.escapeShellArg k} v=${lib.escapeShellArg (toTxt v)}
+    edit_setting
+  '')) + lib.optionalString enableDFHack ''
+    mkdir -p $out/hack
+
+    # Patch the MD5
+    orig_md5=$(< "${dwarf-fortress}/hash.md5.orig")
+    patched_md5=$(< "${dwarf-fortress}/hash.md5")
+    input_file="${dfhack_}/hack/symbols.xml"
+    output_file="$out/hack/symbols.xml"
+
+    echo "[DFHack Wrapper] Fixing Dwarf Fortress MD5:"
+    echo "  Input:   $input_file"
+    echo "  Search:  $orig_md5"
+    echo "  Output:  $output_file"
+    echo "  Replace: $patched_md5"
+
+    substitute "$input_file" "$output_file" --replace "$orig_md5" "$patched_md5"
+  '');
+
+  # This is a separate environment because the config files to modify may come
+  # from any of the paths in baseEnv.
+  env = buildEnv {
+    name = "dwarf-fortress-env-${dwarf-fortress.dfVersion}";
+    paths = [ config baseEnv ];
+    ignoreCollisions = true;
+  };
+in
+
+lib.throwIf (enableTWBT && !enableDFHack) "dwarf-fortress: TWBT requires DFHack to be enabled"
+lib.throwIf (enableStoneSense && !enableDFHack) "dwarf-fortress: StoneSense requires DFHack to be enabled"
+lib.throwIf (enableTextMode && enableTWBT) "dwarf-fortress: text mode and TWBT are mutually exclusive"
+
+stdenv.mkDerivation {
+  pname = "dwarf-fortress";
+  version = dwarf-fortress.dfVersion;
+
+  dfInit = substituteAll {
+    name = "dwarf-fortress-init";
+    src = ./dwarf-fortress-init.in;
+    inherit env;
+    exe =
+      if stdenv.isLinux then "libs/Dwarf_Fortress"
+      else "dwarfort.exe";
+    stdenv_shell = "${stdenv.shell}";
+    cp = "${coreutils}/bin/cp";
+    rm = "${coreutils}/bin/rm";
+    ln = "${coreutils}/bin/ln";
+    cat = "${coreutils}/bin/cat";
+    mkdir = "${coreutils}/bin/mkdir";
+  };
+
+  runDF = ./dwarf-fortress.in;
+  runDFHack = ./dfhack.in;
+  runSoundSense = ./soundSense.in;
+
+  passthru = {
+    inherit dwarf-fortress dwarf-therapist twbt env;
+    dfhack = dfhack_;
+  };
+
+  buildCommand = ''
+    mkdir -p $out/bin
+
+    substitute $runDF $out/bin/dwarf-fortress \
+      --subst-var-by stdenv_shell ${stdenv.shell} \
+      --subst-var dfInit
+    chmod 755 $out/bin/dwarf-fortress
+  '' + lib.optionalString enableDFHack ''
+    substitute $runDFHack $out/bin/dfhack \
+      --subst-var-by stdenv_shell ${stdenv.shell} \
+      --subst-var dfInit
+    chmod 755 $out/bin/dfhack
+  '' + lib.optionalString enableSoundSense ''
+    substitute $runSoundSense $out/bin/soundsense \
+      --subst-var-by stdenv_shell ${stdenv.shell} \
+      --subst-var-by jre ${jdk.jre} \
+      --subst-var dfInit
+    chmod 755 $out/bin/soundsense
+  '';
+
+  preferLocalBuild = true;
+
+  inherit (dwarf-fortress) meta;
+}
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/wrapper/dfhack.in b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/dfhack.in
new file mode 100755
index 000000000000..0f74674baf29
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/dfhack.in
@@ -0,0 +1,11 @@
+#!@stdenv_shell@ -e
+
+source @dfInit@
+
+for i in *.init *.init-example dfhack-config/default dfhack-config/init hack/* stonesense/*; do
+  if [ -e "$i" ]; then update_path "$i"; fi
+done
+
+cd "$DF_DIR"
+LD_LIBRARY_PATH="$env_dir/hack/libs:$env_dir/hack${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" \
+  LD_PRELOAD="$env_dir/hack/libdfhack.so:$LD_PRELOAD" exec $env_dir/libs/Dwarf_Fortress "$@"
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in
new file mode 100644
index 000000000000..27639e57f212
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in
@@ -0,0 +1,45 @@
+#!@stdenv_shell@ -e
+shopt -s extglob
+
+[ -z "$DF_DIR" ] && export DF_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/df_linux"
+env_dir="@env@"
+exe="$env_dir/@exe@"
+
+update_path() {
+  local path="$1"
+
+  @mkdir@ -p "$DF_DIR/$(dirname "$path")"
+  # If user has replaced these data directories, let them stay.
+  if [ ! -e "$DF_DIR/$path" ] || [ -L "$DF_DIR/$path" ]; then
+    @rm@ -f "$DF_DIR/$path"
+    @ln@ -s "$env_dir/$path" "$DF_DIR/$path"
+  fi
+}
+
+forcecopy_path() {
+  local path="$1"
+
+  @mkdir@ -p "$DF_DIR/$(dirname "$path")"
+  @rm@ -rf "$DF_DIR/$path"
+  @cp@ -rL --no-preserve=all "$env_dir/$path" "$DF_DIR/$path"
+}
+
+@mkdir@ -p "$DF_DIR"
+
+@cat@ <<EOF >&2
+Using $DF_DIR as Dwarf Fortress overlay directory.
+If you do any changes in it, don't forget to clean it when updating the game version!
+We try to detect changes based on data directories being symbolic links -- keep this in mind.
+
+EOF
+
+cd "$env_dir"
+for i in data/init/* data/!(init|index|announcement) raw; do
+  update_path "$i"
+done
+
+forcecopy_path data/index
+# For some reason, it's needed to be writable...
+forcecopy_path data/announcement
+forcecopy_path data/help
+forcecopy_path data/dipscript
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in
new file mode 100644
index 000000000000..4448bd05fda5
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in
@@ -0,0 +1,9 @@
+#!@stdenv_shell@ -e
+
+source @dfInit@
+
+export DYLD_LIBRARY_PATH="$env_dir/libs"
+export DYLD_FRAMEWORK_PATH="$env_dir/libs"
+
+cd "$DF_DIR"
+exec "$exe" "$@"
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/wrapper/soundSense.in b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/soundSense.in
new file mode 100644
index 000000000000..28357ed7579f
--- /dev/null
+++ b/nixpkgs/pkgs/games/dwarf-fortress/wrapper/soundSense.in
@@ -0,0 +1,10 @@
+#!@stdenv_shell@ -e
+
+source @dfInit@
+
+for p in soundsense/*; do
+  update_path "$p"
+done
+
+cd "$DF_DIR"
+PATH=@jre@/bin exec $DF_DIR/soundsense/soundSense.sh
diff --git a/nixpkgs/pkgs/games/dxx-rebirth/assets.nix b/nixpkgs/pkgs/games/dxx-rebirth/assets.nix
new file mode 100644
index 000000000000..b214d49659b6
--- /dev/null
+++ b/nixpkgs/pkgs/games/dxx-rebirth/assets.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, requireFile, gogUnpackHook }:
+
+let
+  generic = ver: source: let
+    pname = "descent${toString ver}";
+  in stdenv.mkDerivation rec {
+    name = "${pname}-assets-${version}";
+    version = "2.0.0.7";
+
+    src = requireFile rec {
+      name = "setup_descent12_${version}.exe";
+      sha256 = "1r1drbfda6czg21f9qqiiwgnkpszxgmcn5bafp5ljddh34swkn3f";
+      message = ''
+        While the Descent ${toString ver} game engine is free, the game assets are not.
+
+        Please purchase the game on gog.com and download the Windows installer.
+
+        Once you have downloaded the file, please use the following command and re-run the
+        installation:
+
+        nix-prefetch-url file://\$PWD/${name}
+      '';
+    };
+
+    nativeBuildInputs = [ gogUnpackHook ];
+
+    dontBuild = true;
+    dontFixup = true;
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/share/{games/${pname},doc/${pname}/examples}
+      pushd "app/${source}"
+      mv dosbox*.conf $out/share/doc/${pname}/examples
+      mv *.txt *.pdf  $out/share/doc/${pname}
+      cp -r * $out/share/games/descent${toString ver}
+      popd
+
+      runHook postInstall
+    '';
+
+    meta = with lib; {
+      description = "Descent ${toString ver} assets from GOG";
+      homepage    = "https://www.dxx-rebirth.com/";
+      license     = licenses.unfree;
+      maintainers = with maintainers; [ peterhoeg ];
+      hydraPlatforms = [];
+    };
+  };
+
+in {
+  descent1-assets = generic 1 "descent";
+  descent2-assets = generic 2 "descent 2";
+}
diff --git a/nixpkgs/pkgs/games/dxx-rebirth/default.nix b/nixpkgs/pkgs/games/dxx-rebirth/default.nix
new file mode 100644
index 000000000000..95cf0918b52c
--- /dev/null
+++ b/nixpkgs/pkgs/games/dxx-rebirth/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchurl
+, fetchpatch
+, scons
+, pkg-config
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, libGLU
+, libGL
+, libpng
+, physfs
+}:
+
+let
+  music = fetchurl {
+    url = "https://www.dxx-rebirth.com/download/dxx/res/d2xr-sc55-music.dxa";
+    sha256 = "05mz77vml396mff43dbs50524rlm4fyds6widypagfbh5hc55qdc";
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "dxx-rebirth";
+  version = "unstable-2023-03-23";
+
+  src = fetchFromGitHub {
+    owner = "dxx-rebirth";
+    repo = "dxx-rebirth";
+    rev = "841ebcc11d249febe48911bc239606ade3bd78b3";
+    hash = "sha256-cr5QdkKO/HNvtc2w4ynJixuLauhPCwtsSC3UEV7+C1A=";
+  };
+
+  nativeBuildInputs = [ pkg-config scons ];
+
+  buildInputs = [ libGLU libGL libpng physfs SDL2 SDL2_image SDL2_mixer ];
+
+  enableParallelBuilding = true;
+
+  sconsFlags = [ "sdl2=1" ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-Wno-format-nonliteral"
+    "-Wno-format-truncation"
+  ];
+
+  postInstall = ''
+    install -Dm644 ${music} $out/share/games/dxx-rebirth/${music.name}
+    install -Dm644 -t $out/share/doc/dxx-rebirth *.txt
+  '';
+
+  meta = with lib; {
+    description = "Source Port of the Descent 1 and 2 engines";
+    homepage = "https://www.dxx-rebirth.com/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/dxx-rebirth/full.nix b/nixpkgs/pkgs/games/dxx-rebirth/full.nix
new file mode 100644
index 000000000000..f3349c114eed
--- /dev/null
+++ b/nixpkgs/pkgs/games/dxx-rebirth/full.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, makeWrapper
+, dxx-rebirth, descent1-assets, descent2-assets }:
+
+let
+  generic = ver: assets: stdenv.mkDerivation {
+    name = "d${toString ver}x-rebirth-full-${assets.version}";
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    buildCommand = ''
+      mkdir -p $out/bin
+
+      makeWrapper ${dxx-rebirth}/bin/d${toString ver}x-rebirth $out/bin/descent${toString ver} \
+        --add-flags "-hogdir ${assets}/share/games/descent${toString ver}"
+    '';
+
+    meta = with lib; {
+      description = "Descent ${toString ver} using the DXX-Rebirth project engine and game assets from GOG";
+      homepage    = "https://www.dxx-rebirth.com/";
+      license     = with licenses; [ free unfree ];
+      maintainers = with maintainers; [ peterhoeg ];
+      platforms   = with platforms; linux;
+      hydraPlatforms = [];
+    };
+  };
+
+in {
+  d1x-rebirth-full = generic 1 descent1-assets;
+  d2x-rebirth-full = generic 2 descent2-assets;
+}
diff --git a/nixpkgs/pkgs/games/easyrpg-player/default.nix b/nixpkgs/pkgs/games/easyrpg-player/default.nix
new file mode 100644
index 000000000000..ea68c3a110e2
--- /dev/null
+++ b/nixpkgs/pkgs/games/easyrpg-player/default.nix
@@ -0,0 +1,135 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, doxygen
+, pkg-config
+, freetype
+, fmt
+, glib
+, harfbuzz
+, liblcf
+, libpng
+, libsndfile
+, libvorbis
+, libxmp
+, libXcursor
+, libXext
+, libXi
+, libXinerama
+, libXrandr
+, libXScrnSaver
+, libXxf86vm
+, mpg123
+, opusfile
+, pcre
+, pixman
+, SDL2
+, speexdsp
+, wildmidi
+, zlib
+, libdecor
+, alsa-lib
+, asciidoctor
+, Foundation
+, AudioUnit
+, AudioToolbox
+}:
+
+stdenv.mkDerivation rec {
+  pname = "easyrpg-player";
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner = "EasyRPG";
+    repo = "Player";
+    rev = version;
+    hash = "sha256-t0sa9ONVVfsiTy+us06vU2bMa4QmmQeYxU395g0WS6w=";
+  };
+
+  patches = [
+    # Fixed compatibility with fmt > 9
+    # Remove when version > 0.8
+    (fetchpatch {
+      name = "0001-Fix-building-with-fmtlib-10.patch";
+      url = "https://github.com/EasyRPG/Player/commit/ab6286f6d01bada649ea52d1f0881dde7db7e0cf.patch";
+      hash = "sha256-GdSdVFEG1OJCdf2ZIzTP+hSrz+ddhTMBvOPjvYQHy54=";
+    })
+  ];
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    asciidoctor
+    cmake
+    doxygen
+    pkg-config
+  ];
+
+  buildInputs = [
+    fmt
+    freetype
+    glib
+    harfbuzz
+    liblcf
+    libpng
+    libsndfile
+    libvorbis
+    libxmp
+    mpg123
+    opusfile
+    pcre
+    pixman
+    SDL2
+    speexdsp
+    zlib
+  ] ++ lib.optionals stdenv.hostPlatform.isLinux [
+    alsa-lib
+    libXcursor
+    libXext
+    libXi
+    libXinerama
+    libXrandr
+    libXScrnSaver
+    libXxf86vm
+    libdecor
+    wildmidi # until packaged on Darwin
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    Foundation
+    AudioUnit
+    AudioToolbox
+  ];
+
+  cmakeFlags = [
+    "-DPLAYER_ENABLE_TESTS=${lib.boolToString doCheck}"
+  ];
+
+  makeFlags = [
+    "all"
+    "man"
+  ];
+
+  buildFlags = lib.optionals doCheck [
+    "test_runner_player"
+  ];
+
+  postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
+    mkdir $out/bin
+    mv Package $out/Applications
+    ln -s $out/{Applications/EasyRPG\ Player.app/Contents/MacOS,bin}/EasyRPG\ Player
+  '';
+
+  doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
+
+  enableParallelChecking = true;
+
+  meta = with lib; {
+    description = "RPG Maker 2000/2003 and EasyRPG games interpreter";
+    homepage = "https://easyrpg.org/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ yana ];
+    platforms = platforms.all;
+    mainProgram = lib.optionalString stdenv.hostPlatform.isDarwin "EasyRPG Player";
+  };
+}
diff --git a/nixpkgs/pkgs/games/eboard/default.nix b/nixpkgs/pkgs/games/eboard/default.nix
new file mode 100644
index 000000000000..49721fd2ce1e
--- /dev/null
+++ b/nixpkgs/pkgs/games/eboard/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, perl, pkg-config, gtk2 }:
+
+stdenv.mkDerivation rec {
+  pname = "eboard";
+  version = "1.1.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/eboard/eboard-${version}.tar.bz2";
+    sha256 = "0vm25j1s2zg1lipwjv9qrcm877ikfmk1yh34i8f5l3bwd63115xd";
+  };
+
+  patches = [ ./eboard.patch ];
+
+  buildInputs = [ gtk2 ];
+  nativeBuildInputs = [ perl pkg-config ];
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    patchShebangs ./configure
+  '';
+
+  env.NIX_CFLAGS_COMPILE = "-fpermissive";
+
+  meta = {
+    homepage = "http://www.bergo.eng.br/eboard/";
+    description = "Chess interface for Unix-like systems";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/eboard/eboard.patch b/nixpkgs/pkgs/games/eboard/eboard.patch
new file mode 100644
index 000000000000..f80c1b2f78d7
--- /dev/null
+++ b/nixpkgs/pkgs/games/eboard/eboard.patch
@@ -0,0 +1,16 @@
+--- a/cimg.cc	2014-05-25 02:41:58.000000000 -0500
++++ b/cimg.cc	2014-05-25 02:42:31.000000000 -0500
+@@ -94,11 +94,11 @@
+       ct == PNG_COLOR_TYPE_GRAY_ALPHA)
+     png_set_gray_to_rgb(pngp);
+
+-  alloc(pngp->width,pngp->height);
++  alloc(png_get_image_width(pngp, infp),png_get_image_height(pngp, infp));
+   if (!ok) { fclose(f); return; }
+   ok = 0;
+
+-  for(i=0;i<pngp->height;i++) {
++  for(i=0;i<png_get_image_height(pngp, infp);i++) {
+     png_read_row(pngp, (png_bytep) (&data[i*rowlen]), NULL);
+   }
+
diff --git a/nixpkgs/pkgs/games/ecwolf/default.nix b/nixpkgs/pkgs/games/ecwolf/default.nix
new file mode 100644
index 000000000000..542b414d8a45
--- /dev/null
+++ b/nixpkgs/pkgs/games/ecwolf/default.nix
@@ -0,0 +1,51 @@
+{ stdenv
+, lib
+, fetchFromBitbucket
+, cmake
+, copyDesktopItems
+, pkg-config
+, makeWrapper
+, zlib
+, bzip2
+, libjpeg
+, SDL2
+, SDL2_net
+, SDL2_mixer
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ecwolf";
+  version = "1.4.1";
+
+  src = fetchFromBitbucket {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "V2pSP8i20zB50WtUMujzij+ISSupdQQ/oCYYrOaTU1g=";
+  };
+
+  nativeBuildInputs = [ cmake copyDesktopItems pkg-config ]
+    ++ lib.optionals stdenv.isDarwin [ makeWrapper ];
+  buildInputs = [ zlib bzip2 libjpeg SDL2 SDL2_net SDL2_mixer gtk3 ];
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-framework AppKit";
+
+  # ECWolf installs its binary to the games/ directory, but Nix only adds bin/
+  # directories to the PATH.
+  postInstall = lib.optionalString stdenv.isLinux ''
+    mv "$out/games" "$out/bin"
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/{Applications,bin}
+    cp -R ecwolf.app $out/Applications
+    makeWrapper $out/{Applications/ecwolf.app/Contents/MacOS,bin}/ecwolf
+  '';
+
+  meta = with lib; {
+    description = "Enhanched SDL-based port of Wolfenstein 3D for various platforms";
+    homepage = "https://maniacsvault.net/ecwolf/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jayman2000 sander ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/eduke32/default.nix b/nixpkgs/pkgs/games/eduke32/default.nix
new file mode 100644
index 000000000000..051e097eb3a3
--- /dev/null
+++ b/nixpkgs/pkgs/games/eduke32/default.nix
@@ -0,0 +1,123 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, pkg-config
+, nasm
+, makeDesktopItem
+, alsa-lib
+, flac
+, gtk2
+, libvorbis
+, libvpx
+, libGLU
+, libGL
+, SDL2
+, SDL2_mixer
+, AGL
+, Cocoa
+, GLUT
+, OpenGL
+}:
+
+let
+  desktopItem = makeDesktopItem {
+    name = "eduke32";
+    exec = "@out@/bin/${wrapper}";
+    comment = "Duke Nukem 3D port";
+    desktopName = "Enhanced Duke Nukem 3D";
+    genericName = "Duke Nukem 3D port";
+    categories = [ "Game" ];
+  };
+
+  wrapper = "eduke32-wrapper";
+
+in stdenv.mkDerivation rec {
+  pname = "eduke32";
+  version = "20230926";
+  rev = "10459";
+  revExtra = "8feaf6c25";
+
+  src = fetchurl {
+    url = "https://dukeworld.com/eduke32/synthesis/${version}-${rev}-${revExtra}/eduke32_src_${version}-${rev}-${revExtra}.tar.xz";
+    hash = "sha256-GQOpDQm2FeaOMyYu9L5zhrM6XFvZAHMAwn1tSK7RCB8=";
+  };
+
+  buildInputs = [
+    flac
+    libvorbis
+    libvpx
+    SDL2
+    SDL2_mixer
+  ] ++ lib.optionals stdenv.isLinux [
+    alsa-lib
+    gtk2
+    libGL
+    libGLU
+  ] ++ lib.optionals stdenv.isDarwin [
+    AGL
+    Cocoa
+    GLUT
+    OpenGL
+  ];
+
+  nativeBuildInputs = [ makeWrapper pkg-config ]
+    ++ lib.optional (stdenv.hostPlatform.system == "i686-linux") nasm;
+
+  postPatch = ''
+    substituteInPlace source/imgui/src/imgui_impl_sdl2.cpp \
+      --replace '#include <SDL.h>' '#include <SDL2/SDL.h>' \
+      --replace '#include <SDL_syswm.h>' '#include <SDL2/SDL_syswm.h>' \
+      --replace '#include <SDL_vulkan.h>' '#include <SDL2/SDL_vulkan.h>'
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace source/build/src/glbuild.cpp \
+      --replace libGLU.so ${libGLU}/lib/libGLU.so
+
+    for f in glad.c glad_wgl.c ; do
+      substituteInPlace source/glad/src/$f \
+        --replace libGL.so ${libGL}/lib/libGL.so
+    done
+  '';
+
+  makeFlags = [
+    "SDLCONFIG=${SDL2}/bin/sdl2-config"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # broken, see: https://github.com/NixOS/nixpkgs/issues/19098
+    "LTO=0"
+  ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin eduke32 mapster32
+  '' + lib.optionalString stdenv.isLinux ''
+    makeWrapper $out/bin/eduke32 $out/bin/${wrapper} \
+      --set-default EDUKE32_DATA_DIR /var/lib/games/eduke32 \
+      --add-flags '-g "$EDUKE32_DATA_DIR/DUKE3D.GRP"'
+
+    cp -rv ${desktopItem}/share $out
+    substituteInPlace $out/share/applications/eduke32.desktop \
+      --subst-var out
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications/EDuke32.app/Contents/MacOS
+    mkdir -p $out/Applications/Mapster32.app/Contents/MacOS
+
+    cp -r platform/Apple/bundles/EDuke32.app/* $out/Applications/EDuke32.app/
+    cp -r platform/Apple/bundles/Mapster32.app/* $out/Applications/Mapster32.app/
+
+    ln -sf $out/bin/eduke32 $out/Applications/EDuke32.app/Contents/MacOS/eduke32
+    ln -sf $out/bin/mapster32 $out/Applications/Mapster32.app/Contents/MacOS/mapster32
+  '' + ''
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Enhanched port of Duke Nukem 3D for various platforms";
+    homepage = "http://eduke32.com";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ mikroskeem sander ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/egoboo/default.nix b/nixpkgs/pkgs/games/egoboo/default.nix
new file mode 100644
index 000000000000..ba89e4ca7afd
--- /dev/null
+++ b/nixpkgs/pkgs/games/egoboo/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchurl, libGLU, libGL, SDL, SDL_mixer, SDL_image, SDL_ttf }:
+
+stdenv.mkDerivation rec {
+  # pf5234 (a developer?) at freenode #egoboo told me that I better use 2.7.3 until
+  # they fix more, because it even has at least one bugs less than 2.7.4.
+  # 2.8.0 does not start properly on linux
+  # They just starting making that 2.8.0 work on linux.
+  pname = "egoboo";
+  version = "2.7.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/egoboo/egoboo-${version}.tar.gz";
+    sha256 = "18cjgp9kakrsa90jcb4cl8hhh9k57mi5d1sy5ijjpd3p7zl647hd";
+  };
+
+  buildPhase = ''
+    cd source
+    make -C enet all
+    # The target 'all' has trouble
+    make -C game -f Makefile.unix egoboo
+  '';
+
+  # The user will need to have all the files in '.' to run egoboo, with
+  # writeable controls.txt and setup.txt
+  installPhase = ''
+    mkdir -p $out/share/egoboo-${version}
+    cp -v game/egoboo $out/share/egoboo-${version}
+    cd ..
+    cp -v -Rd controls.txt setup.txt players modules basicdat $out/share/egoboo-${version}
+  '';
+
+  buildInputs = [ libGLU libGL SDL SDL_mixer SDL_image SDL_ttf ];
+
+  /*
+    This big commented thing may be needed for versions 2.8.0 or beyond
+    I keep it here for future updates.
+
+    # Some files have to go to $HOME, but we put them in the 'shared'.
+    patchPhase = ''
+      sed -i -e 's,''${HOME}/.''${PROJ_NAME},''${PREFIX}/share/games/''${PROJ_NAME},g' Makefile
+    '';
+
+    preBuild = ''
+      makeFlags=PREFIX=$out
+    '';
+  */
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: mad.o:(.bss+0x233800): multiple definition of `tile_dict'; camera.o:(.bss+0x140): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  NIX_LDFLAGS = "-lm";
+
+  meta = {
+    description = "3D dungeon crawling adventure";
+
+    homepage = "https://egoboo.sourceforge.net/";
+    license = lib.licenses.gpl2Plus;
+
+    # I take it out of hydra as it does not work as well as I'd like
+    # maintainers = [ ];
+    # platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/eidolon/Cargo.lock b/nixpkgs/pkgs/games/eidolon/Cargo.lock
new file mode 100644
index 000000000000..3a800a1263cb
--- /dev/null
+++ b/nixpkgs/pkgs/games/eidolon/Cargo.lock
@@ -0,0 +1,2087 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "blake2b_simd"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "constant_time_eq",
+]
+
+[[package]]
+name = "butlerd"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "095899eb6b69e0a1c98215e51a44c67b8e3c902ebb9440afaafe2eb45e650a09"
+dependencies = [
+ "hyper",
+ "rand 0.5.6",
+ "regex 1.7.1",
+ "reqwest",
+ "serde",
+ "serde_derive",
+ "serde_json",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "either",
+ "iovec",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "concolor"
+version = "0.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "318d6c16e73b3a900eb212ad6a82fc7d298c5ab8184c7a9998646455bc474a16"
+dependencies = [
+ "bitflags",
+ "concolor-query",
+ "is-terminal",
+]
+
+[[package]]
+name = "concolor-query"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82a90734b3d5dcf656e7624cca6bce9c3a90ee11f900e80141a7427ccfb3d317"
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "cookie"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5"
+dependencies = [
+ "time",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "cookie_store"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c"
+dependencies = [
+ "cookie",
+ "failure",
+ "idna 0.1.5",
+ "log",
+ "publicsuffix",
+ "serde",
+ "serde_json",
+ "time",
+ "try_from",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils 0.7.2",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 0.1.10",
+ "crossbeam-utils 0.7.2",
+ "lazy_static",
+ "maybe-uninit",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
+dependencies = [
+ "cfg-if 0.1.10",
+ "crossbeam-utils 0.7.2",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 0.1.10",
+ "lazy_static",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "dirs"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "eidolon"
+version = "1.4.6"
+dependencies = [
+ "butlerd",
+ "dirs",
+ "human-panic",
+ "regex 0.2.11",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "structopt",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "failure"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+dependencies = [
+ "backtrace",
+ "failure_derive",
+]
+
+[[package]]
+name = "failure_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+dependencies = [
+ "proc-macro2 1.0.51",
+ "quote 1.0.23",
+ "syn 1.0.109",
+ "synstructure",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+
+[[package]]
+name = "futures-cpupool"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
+dependencies = [
+ "futures",
+ "num_cpus",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "h2"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "fnv",
+ "futures",
+ "http",
+ "indexmap",
+ "log",
+ "slab",
+ "string",
+ "tokio-io",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "http"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 0.4.8",
+]
+
+[[package]]
+name = "http-body"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d"
+dependencies = [
+ "bytes",
+ "futures",
+ "http",
+ "tokio-buf",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "human-panic"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87eb03e654582b31967d414b86711a7bbd7c6b28a6b7d32857b7d1d45c0926f9"
+dependencies = [
+ "backtrace",
+ "concolor",
+ "os_info",
+ "serde",
+ "serde_derive",
+ "termcolor",
+ "toml",
+ "uuid 0.8.2",
+]
+
+[[package]]
+name = "hyper"
+version = "0.12.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52"
+dependencies = [
+ "bytes",
+ "futures",
+ "futures-cpupool",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "iovec",
+ "itoa 0.4.8",
+ "log",
+ "net2",
+ "rustc_version",
+ "time",
+ "tokio",
+ "tokio-buf",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-tcp",
+ "tokio-threadpool",
+ "tokio-timer",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f"
+dependencies = [
+ "bytes",
+ "futures",
+ "hyper",
+ "native-tls",
+ "tokio-io",
+]
+
+[[package]]
+name = "idna"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg 1.1.0",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "lock_api"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2 1.0.51",
+ "quote 1.0.23",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7"
+dependencies = [
+ "autocfg 1.1.0",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "os_info"
+version = "2.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc1b4330bb29087e791ae2a5cf56be64fb8946a4ff5aec2ba11c6ca51f5d60"
+dependencies = [
+ "log",
+ "serde",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+ "rustc_version",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda66b810a62be75176a80873726630147a5ca780cd33921e0b5709033e66b0a"
+dependencies = [
+ "cfg-if 0.1.10",
+ "cloudabi",
+ "libc",
+ "redox_syscall 0.1.57",
+ "rustc_version",
+ "smallvec",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+dependencies = [
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "publicsuffix"
+version = "1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f"
+dependencies = [
+ "idna 0.2.3",
+ "url 2.3.1",
+]
+
+[[package]]
+name = "quote"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+dependencies = [
+ "proc-macro2 0.4.30",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2 1.0.51",
+]
+
+[[package]]
+name = "rand"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.8",
+ "libc",
+ "rand_chacha",
+ "rand_core 0.4.2",
+ "rand_hc",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg",
+ "rand_xorshift",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
+dependencies = [
+ "getrandom 0.1.16",
+ "redox_syscall 0.1.57",
+ "rust-argon2",
+]
+
+[[package]]
+name = "regex"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384"
+dependencies = [
+ "aho-corasick 0.6.10",
+ "memchr",
+ "regex-syntax 0.5.6",
+ "thread_local",
+ "utf8-ranges",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick 0.7.20",
+ "memchr",
+ "regex-syntax 0.6.28",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7"
+dependencies = [
+ "ucd-util",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "reqwest"
+version = "0.9.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab"
+dependencies = [
+ "base64 0.10.1",
+ "bytes",
+ "cookie",
+ "cookie_store",
+ "encoding_rs",
+ "flate2",
+ "futures",
+ "http",
+ "hyper",
+ "hyper-tls",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "time",
+ "tokio",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-threadpool",
+ "tokio-timer",
+ "url 1.7.2",
+ "uuid 0.7.4",
+ "winreg",
+]
+
+[[package]]
+name = "rust-argon2"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
+dependencies = [
+ "base64 0.13.1",
+ "blake2b_simd",
+ "constant_time_eq",
+ "crossbeam-utils 0.8.14",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2 1.0.51",
+ "quote 1.0.23",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76"
+dependencies = [
+ "itoa 1.0.5",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a"
+dependencies = [
+ "dtoa",
+ "itoa 0.4.8",
+ "serde",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "string"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d"
+dependencies = [
+ "bytes",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16c2cdbf9cc375f15d1b4141bc48aeef444806655cd0e904207edc8d68d86ed7"
+dependencies = [
+ "clap",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53010261a84b37689f9ed7d395165029f9cc7abb9f56bbfe86bee2597ed25107"
+dependencies = [
+ "heck",
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2 1.0.51",
+ "quote 1.0.23",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2 1.0.51",
+ "quote 1.0.23",
+ "syn 1.0.109",
+ "unicode-xid 0.2.4",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.2.16",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
+dependencies = [
+ "bytes",
+ "futures",
+ "mio",
+ "num_cpus",
+ "tokio-current-thread",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-tcp",
+ "tokio-threadpool",
+ "tokio-timer",
+]
+
+[[package]]
+name = "tokio-buf"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46"
+dependencies = [
+ "bytes",
+ "either",
+ "futures",
+]
+
+[[package]]
+name = "tokio-current-thread"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"
+dependencies = [
+ "futures",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-executor"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
+dependencies = [
+ "crossbeam-utils 0.7.2",
+ "futures",
+]
+
+[[package]]
+name = "tokio-io"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
+dependencies = [
+ "bytes",
+ "futures",
+ "log",
+]
+
+[[package]]
+name = "tokio-reactor"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
+dependencies = [
+ "crossbeam-utils 0.7.2",
+ "futures",
+ "lazy_static",
+ "log",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "slab",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-sync",
+]
+
+[[package]]
+name = "tokio-sync"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
+dependencies = [
+ "fnv",
+ "futures",
+]
+
+[[package]]
+name = "tokio-tcp"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
+dependencies = [
+ "bytes",
+ "futures",
+ "iovec",
+ "mio",
+ "tokio-io",
+ "tokio-reactor",
+]
+
+[[package]]
+name = "tokio-threadpool"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-queue",
+ "crossbeam-utils 0.7.2",
+ "futures",
+ "lazy_static",
+ "log",
+ "num_cpus",
+ "slab",
+ "tokio-executor",
+]
+
+[[package]]
+name = "tokio-timer"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"
+dependencies = [
+ "crossbeam-utils 0.7.2",
+ "futures",
+ "slab",
+ "tokio-executor",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "try_from"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b"
+dependencies = [
+ "cfg-if 0.1.10",
+]
+
+[[package]]
+name = "ucd-util"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abd2fc5d32b590614af8b0a20d837f32eca055edd0bbead59a9cfe80858be003"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "url"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+dependencies = [
+ "idna 0.1.5",
+ "matches",
+ "percent-encoding 1.0.1",
+]
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.3.0",
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba"
+
+[[package]]
+name = "uuid"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a"
+dependencies = [
+ "rand 0.6.5",
+]
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+dependencies = [
+ "getrandom 0.2.8",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230"
+dependencies = [
+ "futures",
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "winreg"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
diff --git a/nixpkgs/pkgs/games/eidolon/default.nix b/nixpkgs/pkgs/games/eidolon/default.nix
new file mode 100644
index 000000000000..8807852f2486
--- /dev/null
+++ b/nixpkgs/pkgs/games/eidolon/default.nix
@@ -0,0 +1,38 @@
+{
+  lib,
+  fetchFromSourcehut,
+  rustPlatform,
+  pkg-config,
+  openssl,
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "eidolon";
+  version = "1.4.6";
+
+  src = fetchFromSourcehut {
+    owner = "~nicohman";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Ofc3i+iMmbUgY3bomUk4rM3bEQInTV3rIPz3m0yZw/o=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ];
+
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "A single TUI-based registry for drm-free, wine and steam games on linux, accessed through a rofi launch menu";
+    homepage = "https://github.com/nicohman/eidolon";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ _0x4A6F ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/empty-epsilon/default.nix b/nixpkgs/pkgs/games/empty-epsilon/default.nix
new file mode 100644
index 000000000000..ba41431eb5ca
--- /dev/null
+++ b/nixpkgs/pkgs/games/empty-epsilon/default.nix
@@ -0,0 +1,85 @@
+{ lib, stdenv, fetchFromGitHub, cmake, sfml, libX11, glew, python3, fetchpatch, applyPatches, glm, meshoptimizer, SDL2, ninja}:
+
+let
+
+  major = "2023";
+  minor = "06";
+  patch.seriousproton = "17";
+  patch.emptyepsilon = "17";
+
+  version.seriousproton = "${major}.${minor}.${patch.seriousproton}";
+  version.emptyepsilon = "${major}.${minor}.${patch.emptyepsilon}";
+  version.basis-universal = "v1_15_update2";
+
+  basis-universal = fetchFromGitHub {
+    owner = "BinomialLLC";
+    repo = "basis_universal";
+    rev = version.basis-universal;
+    sha256 = "sha256-2snzq/SnhWHIgSbUUgh24B6tka7EfkGO+nwKEObRkU4=";
+  };
+
+  serious-proton = stdenv.mkDerivation {
+    pname = "serious-proton";
+    version = version.seriousproton;
+
+    src = fetchFromGitHub {
+      owner = "daid";
+      repo = "SeriousProton";
+      rev = "EE-${version.seriousproton}";
+      sha256 = "sha256-5ifYb5dX8ihQmJB1RHyzMsZJeXZ+m27JmA+W+XA/XwI=";
+    };
+
+    nativeBuildInputs = [ cmake ];
+    buildInputs = [ sfml libX11 glm SDL2 ];
+
+    cmakeFlags = [
+      "-DFETCHCONTENT_SOURCE_DIR_BASIS=${basis-universal}"
+    ];
+
+    meta = with lib; {
+      description = "C++ game engine coded on top of SFML used for EmptyEpsilon";
+      homepage = "https://github.com/daid/SeriousProton";
+      license = licenses.mit;
+      maintainers = with maintainers; [ fpletz ];
+      platforms = platforms.linux;
+    };
+  };
+
+in
+
+
+stdenv.mkDerivation {
+  pname = "empty-epsilon";
+  version = version.emptyepsilon;
+
+  src = fetchFromGitHub {
+    owner = "daid";
+    repo = "EmptyEpsilon";
+    rev = "EE-${version.emptyepsilon}";
+    sha256 = "sha256-zuXbCBlv6URndbB0aA+3bli0cSeUBf3LT/7/jcPITnc=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ serious-proton sfml glew libX11 python3 glm SDL2 ninja ];
+
+  cmakeFlags = [
+    "-DSERIOUS_PROTON_DIR=${serious-proton.src}"
+    "-DCPACK_PACKAGE_VERSION=${version.emptyepsilon}"
+    "-DCPACK_PACKAGE_VERSION_MAJOR=${major}"
+    "-DCPACK_PACKAGE_VERSION_MINOR=${minor}"
+    "-DCPACK_PACKAGE_VERSION_PATCH=${patch.emptyepsilon}"
+    "-DFETCHCONTENT_SOURCE_DIR_BASIS=${basis-universal}"
+    "-DFETCHCONTENT_SOURCE_DIR_MESHOPTIMIZER=${meshoptimizer.src}"
+    "-DCMAKE_AR=${stdenv.cc.cc}/bin/gcc-ar"
+    "-DCMAKE_RANLIB=${stdenv.cc.cc}/bin/gcc-ranlib"
+    "-G Ninja"
+  ];
+
+  meta = with lib; {
+    description = "Open source bridge simulator based on Artemis";
+    homepage = "https://daid.github.io/EmptyEpsilon/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ fpletz lheckemann ma27 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/endgame-singularity/default.nix b/nixpkgs/pkgs/games/endgame-singularity/default.nix
new file mode 100644
index 000000000000..ceb3d74816a0
--- /dev/null
+++ b/nixpkgs/pkgs/games/endgame-singularity/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchurl
+, fetchFromGitHub
+, unzip
+, python3
+, enableDefaultMusicPack ? true
+}:
+
+let
+  pname = "endgame-singularity";
+  version = "1.00";
+
+  main_src = fetchFromGitHub {
+    owner = "singularity";
+    repo = "singularity";
+    rev = "v${version}";
+    sha256 = "0ndrnxwii8lag6vrjpwpf5n36hhv223bb46d431l9gsigbizv0hl";
+  };
+
+  music_src = fetchurl {
+    url = "http://www.emhsoft.com/singularity/endgame-singularity-music-007.zip";
+    sha256 = "0vf2qaf66jh56728pq1zbnw50yckjz6pf6c6qw6dl7vk60kkqnpb";
+  };
+in
+
+python3.pkgs.buildPythonApplication rec {
+  inherit pname version;
+
+  srcs = [ main_src ] ++ lib.optional enableDefaultMusicPack music_src;
+  sourceRoot = main_src.name;
+
+  nativeBuildInputs = [ unzip ]; # The music is zipped
+  propagatedBuildInputs = with python3.pkgs; [ pygame numpy polib ];
+
+  # Add the music
+  postInstall = lib.optionalString enableDefaultMusicPack ''
+    cp -R "../endgame-singularity-music-007" \
+          "$(echo $out/lib/python*/site-packages/singularity)/music"
+          # ↑ we cannot glob on [...]/music, it doesn't exist yet
+  '';
+
+  meta = {
+    homepage = "http://www.emhsoft.com/singularity/";
+    description = "A simulation game about strong AI";
+    longDescription = ''
+      A simulation of a true AI. Go from computer to computer, pursued by the
+      entire world. Keep hidden, and you might have a chance
+    '';
+    # License details are in LICENSE.txt
+    license = with lib.licenses; [
+      gpl2Plus # most of the code, some translations
+      mit # recursive_fix_pickle, polib
+      cc-by-sa-30 # data and artwork, some translations
+      free # earth images from NASA, some fonts
+      cc0 # cick0.wav
+    ];
+    maintainers = with lib.maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/endless-sky/default.nix b/nixpkgs/pkgs/games/endless-sky/default.nix
new file mode 100644
index 000000000000..ac44390faf56
--- /dev/null
+++ b/nixpkgs/pkgs/games/endless-sky/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub
+, SDL2, libpng, libjpeg, glew, openal, scons, libmad, libuuid
+}:
+
+stdenv.mkDerivation rec {
+  pname = "endless-sky";
+  version = "0.9.16.1";
+
+  src = fetchFromGitHub {
+    owner = "endless-sky";
+    repo = "endless-sky";
+    rev = "v${version}";
+    sha256 = "sha256-bohljxAtSVqsfnge6t4LF3pC1s1r99v3hNLKTBquC20=";
+  };
+
+  patches = [
+    ./fixes.patch
+  ];
+
+  preBuild = ''
+    export AR="${stdenv.cc.targetPrefix}gcc-ar"
+  '';
+
+  enableParallelBuilding = true;
+
+  buildInputs = [
+    SDL2 libpng libjpeg glew openal scons libmad libuuid
+  ];
+
+  prefixKey = "PREFIX=";
+
+  meta = with lib; {
+    description = "A sandbox-style space exploration game similar to Elite, Escape Velocity, or Star Control";
+    homepage = "https://endless-sky.github.io/";
+    license = with licenses; [
+      gpl3Plus cc-by-sa-30 cc-by-sa-40 publicDomain
+    ];
+    maintainers = with maintainers; [ lheckemann ];
+    platforms = platforms.linux; # Maybe other non-darwin Unix
+  };
+}
diff --git a/nixpkgs/pkgs/games/endless-sky/fixes.patch b/nixpkgs/pkgs/games/endless-sky/fixes.patch
new file mode 100644
index 000000000000..359e2ee4af3b
--- /dev/null
+++ b/nixpkgs/pkgs/games/endless-sky/fixes.patch
@@ -0,0 +1,36 @@
+diff --git a/SConstruct b/SConstruct
+index 48fd080..419b40d 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -55,7 +55,7 @@ sky = env.Program("endless-sky", Glob("build/" + env["mode"] + "/*.cpp"))
+ 
+ 
+ # Install the binary:
+-env.Install("$DESTDIR$PREFIX/games", sky)
++env.Install("$DESTDIR$PREFIX/bin", sky)
+ 
+ # Install the desktop file:
+ env.Install("$DESTDIR$PREFIX/share/applications", "endless-sky.desktop")
+diff --git a/source/Files.cpp b/source/Files.cpp
+index c8c8957..d196459 100644
+--- a/source/Files.cpp
++++ b/source/Files.cpp
+@@ -114,15 +114,9 @@ void Files::Init(const char * const *argv)
+ 	if(resources.back() != '/')
+ 		resources += '/';
+ #if defined __linux__ || defined __FreeBSD__ || defined __DragonFly__
+-	// Special case, for Linux: the resource files are not in the same place as
+-	// the executable, but are under the same prefix (/usr or /usr/local).
+-	static const string LOCAL_PATH = "/usr/local/";
+-	static const string STANDARD_PATH = "/usr/";
+-	static const string RESOURCE_PATH = "share/games/endless-sky/";
+-	if(!resources.compare(0, LOCAL_PATH.length(), LOCAL_PATH))
+-		resources = LOCAL_PATH + RESOURCE_PATH;
+-	else if(!resources.compare(0, STANDARD_PATH.length(), STANDARD_PATH))
+-		resources = STANDARD_PATH + RESOURCE_PATH;
++	// Workaround for NixOS. Not sure how to proceed with other OSes, feedback
++	// is welcome.
++	resources += "../share/games/endless-sky/";
+ #elif defined __APPLE__
+ 	// Special case for Mac OS X: the resources are in ../Resources relative to
+ 	// the folder the binary is in.
diff --git a/nixpkgs/pkgs/games/enigma/default.nix b/nixpkgs/pkgs/games/enigma/default.nix
new file mode 100644
index 000000000000..c9f16918b490
--- /dev/null
+++ b/nixpkgs/pkgs/games/enigma/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, fetchpatch, makeWrapper, pkg-config, gettext, imagemagick, curl, libpng, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, xercesc, xdg-utils, hicolor-icon-theme }:
+stdenv.mkDerivation rec {
+  pname = "enigma";
+  version = "1.30";
+
+  src = fetchurl {
+    url = "https://github.com/Enigma-Game/Enigma/releases/download/${version}/Enigma-${version}-src.tar.gz";
+    sha256 = "rmS5H7wrEJcAcdDXjtW07enuOGjeLm6VaVRvxYQ3+K8=";
+  };
+
+  patches = [
+    # fix format string security warning (turned into error)
+    (fetchpatch {
+      url = "https://github.com/Enigma-Game/Enigma/pull/70/commits/d25051eb6228c885e779a9674f8ee3979da30663.patch";
+      sha256 = "L5C4NCZDDUKji9Tg4geKaiw3CkSY6rCoawqGKqR4dFM=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config gettext makeWrapper imagemagick ];
+  buildInputs = [ SDL2 SDL2_image SDL2_mixer SDL2_ttf libpng xercesc curl xdg-utils ];
+
+  # The configure script of enigma uses pkg-config to determine the header
+  # directories of SDL2. However, pkg-config only returns the path to the core
+  # SDL2 library, not to the additional libraries SDL2_ttf, SDL2_image and
+  # SDL2_mixer. In contrast, sdl2-config does return the correct list of paths.
+  # We don't use configureFlags here so that the shell can correctly carry
+  # out the interpolation.
+  preConfigure = ''
+    export SDL_CFLAGS=$(sdl2-config --cflags)
+  '';
+
+  postInstall = ''
+    rm -r $out/include
+    # make xdg-open overrideable at runtime
+    wrapProgram $out/bin/enigma --suffix PATH : "${lib.makeBinPath [ xdg-utils ]}"
+  '';
+
+  meta = with lib; {
+    description = "Puzzle game inspired by Oxyd on the Atari ST and Rock'n'Roll on the Amiga";
+    license = with licenses; [ gpl2 free ]; # source + bundles libs + art
+    platforms = platforms.unix;
+    broken = stdenv.targetPlatform.isDarwin;
+    maintainers = with maintainers; [ iblech ];
+    homepage = "https://www.nongnu.org/enigma/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/etlegacy/default.nix b/nixpkgs/pkgs/games/etlegacy/default.nix
new file mode 100644
index 000000000000..befbbc5ed291
--- /dev/null
+++ b/nixpkgs/pkgs/games/etlegacy/default.nix
@@ -0,0 +1,141 @@
+{ lib
+, stdenv
+, fetchurl
+, writeShellApplication
+, fetchFromGitHub
+, cjson
+, cmake
+, git
+, makeWrapper
+, unzip
+, curl
+, freetype
+, glew
+, libjpeg
+, libogg
+, libpng
+, libtheora
+, lua
+, minizip
+, openal
+, SDL2
+, sqlite
+, zlib
+}:
+let
+  version = "2.81.1";
+
+  fetchAsset = { asset, hash }: fetchurl {
+    url = "https://mirror.etlegacy.com/etmain/${asset}";
+    inherit hash;
+  };
+
+  pak0 = fetchAsset {
+    asset = "pak0.pk3";
+    hash = "sha256-cSlmsg4GUj/oFBlRZQDkmchrK0/sgjhW3b0zP8s9JuU=";
+  };
+
+  pak1 = fetchAsset {
+    asset = "pak1.pk3";
+    hash = "sha256-VhD9dJAkQFtEJafOY5flgYe5QdIgku8R1IRLQn31Pl0=";
+  };
+
+  pak2 = fetchAsset {
+    asset = "pak2.pk3";
+    hash = "sha256-pIq3SaGhKrTZE3KGsfI9ZCwp2lmEWyuvyPZOBSzwbz4=";
+  };
+
+  fakeGit = writeShellApplication {
+    name = "git";
+
+    text = ''
+      if [ "$1" = "describe" ]; then
+        echo "${version}"
+      fi
+    '';
+  };
+in
+stdenv.mkDerivation {
+  pname = "etlegacy";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "etlegacy";
+    repo = "etlegacy";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-CGXtc51vaId/SHbD34ZeT0gPsrl7p2DEw/Kp+GBZIaA="; # 2.81.1
+  };
+
+  nativeBuildInputs = [
+    cjson
+    cmake
+    fakeGit
+    git
+    makeWrapper
+    unzip
+  ];
+
+  buildInputs = [
+    curl
+    freetype
+    glew
+    libjpeg
+    libogg
+    libpng
+    libtheora
+    lua
+    minizip
+    openal
+    SDL2
+    sqlite
+    zlib
+  ];
+
+  preBuild = ''
+    # Required for build time to not be in 1980
+    export SOURCE_DATE_EPOCH=$(date +%s)
+    # This indicates the build was by a CI pipeline and prevents the resource
+    # files from being flagged as 'dirty' due to potentially being custom built.
+    export CI="true"
+  '';
+
+  cmakeFlags = [
+    "-DCROSS_COMPILE32=0"
+    "-DBUILD_SERVER=1"
+    "-DBUILD_CLIENT=1"
+    "-DBUNDLED_JPEG=0"
+    "-DBUNDLED_LIBS=0"
+    "-DINSTALL_EXTRA=0"
+    "-DINSTALL_OMNIBOT=0"
+    "-DINSTALL_GEOIP=0"
+    "-DINSTALL_WOLFADMIN=0"
+    "-DFEATURE_AUTOUPDATE=0"
+    "-DINSTALL_DEFAULT_BASEDIR=${placeholder "out"}/lib/etlegacy"
+    "-DINSTALL_DEFAULT_BINDIR=${placeholder "out"}/bin"
+  ];
+
+  postInstall = ''
+    ln -s ${pak0} $out/lib/etlegacy/etmain/pak0.pk3
+    ln -s ${pak1} $out/lib/etlegacy/etmain/pak1.pk3
+    ln -s ${pak2} $out/lib/etlegacy/etmain/pak2.pk3
+
+    makeWrapper $out/bin/etl.* $out/bin/etl
+    makeWrapper $out/bin/etlded.* $out/bin/etlded
+  '';
+
+  hardeningDisable = [ "fortify" ];
+
+  meta = {
+    description = "ET: Legacy is an open source project based on the code of Wolfenstein: Enemy Territory which was released in 2010 under the terms of the GPLv3 license";
+    homepage = "https://etlegacy.com";
+    license = with lib.licenses; [ gpl3 cc-by-nc-sa-30 ];
+    longDescription = ''
+      ET: Legacy, an open source project fully compatible client and server
+      for the popular online FPS game Wolfenstein: Enemy Territory - whose
+      gameplay is still considered unmatched by many, despite its great age.
+    '';
+    mainProgram = "etl";
+    maintainers = with lib.maintainers; [ ashleyghooper drupol ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/everspace/default.nix b/nixpkgs/pkgs/games/everspace/default.nix
new file mode 100644
index 000000000000..abf568d6acab
--- /dev/null
+++ b/nixpkgs/pkgs/games/everspace/default.nix
@@ -0,0 +1,118 @@
+{
+  # Packaging Dependencies
+  lib, stdenv, requireFile, autoPatchelfHook, unzip, copyDesktopItems, makeDesktopItem,
+
+  # Everspace Dependencies
+  cairo, gdk-pixbuf, pango, gtk2-x11, libGL, openal,
+
+  # Unreal Engine 4 Dependencies
+  xorg
+}:
+
+# Known issues:
+# - Video playback (upon starting a new game) does not work (screen is black)
+stdenv.mkDerivation rec {
+  pname = "everspace";
+  version = "1.3.5.3655";
+
+  src = requireFile {
+    name = "everspace_1_3_5_3655_32896.sh";
+    url = "https://www.gog.com/";
+    sha256 = "0jlvxq14k1pxmbr08y8kar0ijlqxcnkfqlvw883j96v9zr34ynj3";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    copyDesktopItems
+    unzip
+  ];
+
+  buildInputs = [
+    cairo
+    gdk-pixbuf
+    pango
+    gtk2-x11
+    openal
+    stdenv.cc.cc.lib
+  ];
+
+  runtimeDependencies = [
+    libGL
+
+    # ue4
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXau
+    xorg.libXcursor
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXxf86vm
+    xorg.libxcb
+  ];
+
+  unpackPhase = ''
+    runHook preUnpack
+
+    # The shell script contains a zip file. Unzipping it works but will result
+    # in some error output and an error exit code.
+    unzip "$src" || true
+
+    runHook postUnpack
+  '';
+
+  postPatch = ''
+    ## Remove Bundled Libs ##
+
+    # vlc libs
+    #
+    # TODO: This is probably what breaks video playback. It would be cleaner
+    #   to remove the bundled libs and replace them with system libs but there
+    #   are so many. Copy-pasting the list from the vlc package is a good start
+    #   but still leaves us with many unresolved dependencies.
+    rm -rf ./data/noarch/game/RSG/Plugins/VlcMedia
+
+    # openal
+    rm -rf ./data/noarch/game/Engine/Binaries/ThirdParty/OpenAL
+  '';
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/opt"
+    cp -r "./data/noarch" "$out/opt/everspace"
+
+    mkdir -p "$out/bin"
+    ln -s "$out/opt/everspace/game/RSG/Binaries/Linux/RSG-Linux-Shipping" "$out/bin/everspace"
+
+    mkdir -p "$out/share/pixmaps"
+    ln -s "$out/opt/everspace/support/icon.png" "$out/share/pixmaps/everspace-gog.png"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      type = "Application";
+      name = "everspace-gog";
+      desktopName = "EVERSPACEâ„¢";
+      comment = meta.description;
+      exec = "everspace";
+      icon = "everspace-gog";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "Action-focused single-player space shooter with roguelike elements";
+    homepage = "https://classic.everspace-game.com/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ jtrees ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/extremetuxracer/default.nix b/nixpkgs/pkgs/games/extremetuxracer/default.nix
new file mode 100644
index 000000000000..a2614b2f1a9e
--- /dev/null
+++ b/nixpkgs/pkgs/games/extremetuxracer/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, libGLU, libGL, libX11, xorgproto, tcl, freeglut, freetype
+, sfml, libXi
+, libXmu, libXext, libXt, libSM, libICE
+, libpng, pkg-config, gettext, intltool
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.8.3";
+  pname = "extremetuxracer";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/extremetuxracer/etr-${version}.tar.xz";
+    sha256 = "sha256-LuQvP1/C+NSap1BW6xFvbKuE1lZBIOaWGuWSc2ckURM=";
+  };
+
+  nativeBuildInputs = [ pkg-config intltool ];
+  buildInputs = [
+    libGLU libGL libX11 xorgproto tcl freeglut freetype
+    sfml libXi
+    libXmu libXext libXt libSM libICE
+    libpng gettext
+  ];
+
+  configureFlags = [ "--with-tcl=${tcl}/lib" ];
+
+  preConfigure = ''
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE"
+  '';
+
+  meta = {
+    description = "High speed arctic racing game based on Tux Racer";
+    longDescription = ''
+      ExtremeTuxRacer - Tux lies on his belly and accelerates down ice slopes.
+    '';
+    license = lib.licenses.gpl2Plus;
+    homepage = "https://sourceforge.net/projects/extremetuxracer/";
+    maintainers = with lib.maintainers; [ ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/exult/default.nix b/nixpkgs/pkgs/games/exult/default.nix
new file mode 100644
index 000000000000..eddb96f301da
--- /dev/null
+++ b/nixpkgs/pkgs/games/exult/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, autoconf
+, automake
+, libogg
+, libtool
+, libvorbis
+, pkg-config
+, zlib
+, enableTools ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "exult";
+  version = "1.8";
+
+  src = fetchFromGitHub {
+    owner = "exult";
+    repo = "exult";
+    rev = "v${version}";
+    hash = "sha256-Y7FpgiGuqR4ZG/PNSfLcNcRWeeC7GebUTighXsCfy+E=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    libtool
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    libogg
+    libvorbis
+    zlib
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  configureFlags = lib.optional (!enableTools) "--disable-tools";
+
+  meta = with lib; {
+    description = "Exult is a project to recreate Ultima VII for modern operating systems";
+    longDescription = ''
+      Ultima VII, an RPG from the early 1990's, still has a huge following. But,
+      being a DOS game with a very nonstandard memory manager, it is difficult
+      to run it on the latest computers. Exult is a project that created an
+      Ultima VII game engine that runs on modern operating systems, capable of
+      using the data and graphics files that come with the game. Exult aims to
+      let those people who own Ultima VII play the game on modern hardware, in
+      as close to (or perhaps even surpassing) its original splendor as is
+      possible.
+    '';
+    homepage = "http://exult.info";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ azahi eelco ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/ezquake/default.nix b/nixpkgs/pkgs/games/ezquake/default.nix
new file mode 100644
index 000000000000..a562b9353ebe
--- /dev/null
+++ b/nixpkgs/pkgs/games/ezquake/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, curl, expat
+, jansson, libpng, libjpeg, libGLU, libGL
+, libsndfile, libXxf86vm, pcre, pkg-config, SDL2
+, vim, speex }:
+
+stdenv.mkDerivation rec {
+  pname = "ezquake";
+  version = "3.6.3";
+
+  src = fetchFromGitHub {
+    owner = "QW-Group";
+    repo = pname + "-source";
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-ThrsJfj+eP7Lv2ZSNLO6/b98VHrL6/rhwf2p0qMvTF8=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    expat curl jansson libpng libjpeg libGLU libGL libsndfile libXxf86vm pcre SDL2 vim speex
+  ];
+
+  installPhase = with lib; let
+    sys = last (splitString "-" stdenv.hostPlatform.system);
+    arch = head (splitString "-" stdenv.hostPlatform.system);
+  in ''
+    mkdir -p $out/bin
+    find .
+    mv ezquake-${sys}-${arch} $out/bin/ezquake
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://ezquake.com/";
+    description = "A modern QuakeWorld client focused on competitive online play";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ edwtjo ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/factorio/default.nix b/nixpkgs/pkgs/games/factorio/default.nix
new file mode 100644
index 000000000000..7851cd6e8d1e
--- /dev/null
+++ b/nixpkgs/pkgs/games/factorio/default.nix
@@ -0,0 +1,277 @@
+{ lib
+, alsa-lib
+, factorio-utils
+, fetchurl
+, libGL
+, libICE
+, libSM
+, libX11
+, libXcursor
+, libXext
+, libXi
+, libXinerama
+, libXrandr
+, libpulseaudio
+, libxkbcommon
+, makeDesktopItem
+, makeWrapper
+, releaseType
+, stdenv
+, wayland
+
+, mods-dat ? null
+, versionsJson ? ./versions.json
+, username ? ""
+, token ? "" # get/reset token at https://factorio.com/profile
+, experimental ? false # true means to always use the latest branch
+, ...
+} @ args:
+
+assert releaseType == "alpha"
+  || releaseType == "headless"
+  || releaseType == "demo";
+
+let
+
+  inherit (lib) importJSON;
+
+  mods = args.mods or [ ];
+
+  helpMsg = ''
+
+    ===FETCH FAILED===
+    Please ensure you have set the username and token with config.nix, or
+    /etc/nix/nixpkgs-config.nix if on NixOS.
+
+    Your token can be seen at https://factorio.com/profile (after logging in). It is
+    not as sensitive as your password, but should still be safeguarded. There is a
+    link on that page to revoke/invalidate the token, if you believe it has been
+    leaked or wish to take precautions.
+
+    Example:
+    {
+      packageOverrides = pkgs: {
+        factorio = pkgs.factorio.override {
+          username = "FactorioPlayer1654";
+          token = "d5ad5a8971267c895c0da598688761";
+        };
+      };
+    }
+
+    Alternatively, instead of providing the username+token, you may manually
+    download the release through https://factorio.com/download , then add it to
+    the store using e.g.:
+
+      releaseType=alpha
+      version=0.17.74
+      nix-prefetch-url file://\''$HOME/Downloads/factorio_\''${releaseType}_x64_\''${version}.tar.xz --name factorio_\''${releaseType}_x64-\''${version}.tar.xz
+
+    Note the ultimate "_" is replaced with "-" in the --name arg!
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "factorio";
+    desktopName = "Factorio";
+    comment = "A game in which you build and maintain factories.";
+    exec = "factorio";
+    icon = "factorio";
+    categories = [ "Game" ];
+  };
+
+  branch = if experimental then "experimental" else "stable";
+
+  # NB `experimental` directs us to take the latest build, regardless of its branch;
+  # hence the (stable, experimental) pairs may sometimes refer to the same distributable.
+  versions = importJSON versionsJson;
+  binDists = makeBinDists versions;
+
+  actual = binDists.${stdenv.hostPlatform.system}.${releaseType}.${branch} or (throw "Factorio ${releaseType}-${branch} binaries for ${stdenv.hostPlatform.system} are not available for download.");
+
+  makeBinDists = versions:
+    let
+      f = path: name: value:
+        if builtins.isAttrs value then
+          if value ? "name" then
+            makeBinDist value
+          else
+            builtins.mapAttrs (f (path ++ [ name ])) value
+        else
+          throw "expected attrset at ${toString path} - got ${toString value}";
+    in
+    builtins.mapAttrs (f [ ]) versions;
+  makeBinDist = { name, version, tarDirectory, url, sha256, needsAuth }: {
+    inherit version tarDirectory;
+    src =
+      if !needsAuth then
+        fetchurl { inherit name url sha256; }
+      else
+        (lib.overrideDerivation
+          (fetchurl {
+            inherit name url sha256;
+            curlOptsList = [
+              "--get"
+              "--data-urlencode"
+              "username@username"
+              "--data-urlencode"
+              "token@token"
+            ];
+          })
+          (_: {
+            # This preHook hides the credentials from /proc
+            preHook =
+              if username != "" && token != "" then ''
+                echo -n "${username}" >username
+                echo -n "${token}"    >token
+              '' else ''
+                # Deliberately failing since username/token was not provided, so we can't fetch.
+                # We can't use builtins.throw since we want the result to be used if the tar is in the store already.
+                exit 1
+              '';
+            failureHook = ''
+              cat <<EOF
+              ${helpMsg}
+              EOF
+            '';
+          }));
+  };
+
+  configBaseCfg = ''
+    use-system-read-write-data-directories=false
+    [path]
+    read-data=$out/share/factorio/data/
+    [other]
+    check_updates=false
+  '';
+
+  updateConfigSh = ''
+    #! $SHELL
+    if [[ -e ~/.factorio/config.cfg ]]; then
+      # Config file exists, but may have wrong path.
+      # Try to edit it. I'm sure this is perfectly safe and will never go wrong.
+      sed -i 's|^read-data=.*|read-data=$out/share/factorio/data/|' ~/.factorio/config.cfg
+    else
+      # Config file does not exist. Phew.
+      install -D $out/share/factorio/config-base.cfg ~/.factorio/config.cfg
+    fi
+  '';
+
+  modDir = factorio-utils.mkModDirDrv mods mods-dat;
+
+  base = with actual; {
+    pname = "factorio-${releaseType}";
+    inherit version src;
+
+    preferLocalBuild = true;
+    dontBuild = true;
+
+    installPhase = ''
+      mkdir -p $out/{bin,share/factorio}
+      cp -a data $out/share/factorio
+      cp -a bin/${tarDirectory}/factorio $out/bin/factorio
+      patchelf \
+        --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+        $out/bin/factorio
+    '';
+
+    passthru.updateScript =
+      if (username != "" && token != "") then [
+        ./update.py
+        "--username=${username}"
+        "--token=${token}"
+      ] else null;
+
+    meta = {
+      description = "A game in which you build and maintain factories";
+      longDescription = ''
+        Factorio is a game in which you build and maintain factories.
+
+        You will be mining resources, researching technologies, building
+        infrastructure, automating production and fighting enemies. Use your
+        imagination to design your factory, combine simple elements into
+        ingenious structures, apply management skills to keep it working and
+        finally protect it from the creatures who don't really like you.
+
+        Factorio has been in development since spring of 2012, and reached
+        version 1.0 in mid 2020.
+      '';
+      homepage = "https://www.factorio.com/";
+      sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+      license = lib.licenses.unfree;
+      maintainers = with lib.maintainers; [ Baughn elitak erictapen priegger lukegb ];
+      platforms = [ "x86_64-linux" ];
+    };
+  };
+
+  releases = rec {
+    headless = base;
+    demo = base // {
+
+      nativeBuildInputs = [ makeWrapper ];
+      buildInputs = [ libpulseaudio ];
+
+      libPath = lib.makeLibraryPath [
+        alsa-lib
+        libGL
+        libICE
+        libSM
+        libX11
+        libXcursor
+        libXext
+        libXi
+        libXinerama
+        libXrandr
+        libpulseaudio
+        libxkbcommon
+        wayland
+      ];
+
+      installPhase = base.installPhase + ''
+        wrapProgram $out/bin/factorio                                \
+          --prefix LD_LIBRARY_PATH : /run/opengl-driver/lib:$libPath \
+          --run "$out/share/factorio/update-config.sh"               \
+          --argv0 ""                                                 \
+          --add-flags "-c \$HOME/.factorio/config.cfg"               \
+          ${lib.optionalString (mods!=[]) "--add-flags --mod-directory=${modDir}"}
+
+          # TODO Currently, every time a mod is changed/added/removed using the
+          # modlist, a new derivation will take up the entire footprint of the
+          # client. The only way to avoid this is to remove the mods arg from the
+          # package function. The modsDir derivation will have to be built
+          # separately and have the user specify it in the .factorio config or
+          # right along side it using a symlink into the store I think i will
+          # just remove mods for the client derivation entirely. this is much
+          # cleaner and more useful for headless mode.
+
+          # TODO: trying to toggle off a mod will result in read-only-fs-error.
+          # not much we can do about that except warn the user somewhere. In
+          # fact, no exit will be clean, since this error will happen on close
+          # regardless. just prints an ugly stacktrace but seems to be otherwise
+          # harmless, unless maybe the user forgets and tries to use the mod
+          # manager.
+
+        install -m0644 <(cat << EOF
+        ${configBaseCfg}
+        EOF
+        ) $out/share/factorio/config-base.cfg
+
+        install -m0755 <(cat << EOF
+        ${updateConfigSh}
+        EOF
+        ) $out/share/factorio/update-config.sh
+
+        mkdir -p $out/share/icons/hicolor/{64x64,128x128}/apps
+        cp -a data/core/graphics/factorio-icon.png $out/share/icons/hicolor/64x64/apps/factorio.png
+        cp -a data/core/graphics/factorio-icon@2x.png $out/share/icons/hicolor/128x128/apps/factorio.png
+        ln -s ${desktopItem}/share/applications $out/share/
+      '';
+    };
+    alpha = demo // {
+
+      installPhase = demo.installPhase + ''
+        cp -a doc-html $out/share/factorio
+      '';
+    };
+  };
+
+in
+stdenv.mkDerivation (releases.${releaseType})
diff --git a/nixpkgs/pkgs/games/factorio/mods.nix b/nixpkgs/pkgs/games/factorio/mods.nix
new file mode 100644
index 000000000000..7327b9e22870
--- /dev/null
+++ b/nixpkgs/pkgs/games/factorio/mods.nix
@@ -0,0 +1,213 @@
+# This file is here for demo purposes only, populated with a small sampling of
+# mods. It will eventually be replaced by a nixos-channel that will provide
+# derivations for most or all of the mods tracked through the official mod
+# manager site.
+{ lib, fetchurl
+, factorio-utils
+, allRecommendedMods ? true
+, allOptionalMods ? false
+}:
+with lib;
+let
+  modDrv = factorio-utils.modDrv { inherit allRecommendedMods allOptionalMods; };
+in
+rec {
+
+  bobassembly = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobassembly_0.13.0.zip"
+      ];
+      sha256 = "0c0m7sb45r37g882x0aq8mc82yhfh9j9h8g018d4s5pf93vzr6d1";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig ];
+    recommendedDeps = [ bobplates ];
+  };
+
+  bobconfig = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobconfig_0.13.1.zip"
+      ];
+      sha256 = "0z4kmggm1slbr3qiy5xahc9nhdffllp21n9nv5gh1zbzv72sb1rp";
+    };
+  };
+
+  bobelectronics = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobelectronics_0.13.1.zip"
+      ];
+      sha256 = "16sn5w33s0ckiwqxx7b2pcsqmhxbxjm2w4h4vd99hwpvdpjyav52";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig ];
+    recommendedDeps = [ bobplates ];
+  };
+
+  bobenemies = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobenemies_0.13.1.zip"
+      ];
+      sha256 = "1wnb5wsvh9aa3i9mj17f36ybbd13qima3iwshw60i6xkzzqfk44d";
+    };
+    optionalDeps = [ bobconfig ];
+  };
+
+  bobgreenhouse = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobgreenhouse_0.13.2.zip"
+      ];
+      sha256 = "1ql26875dvz2lqln289jg1w6yjzsd0x0pqmd570jffwi5m320rrw";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig ];
+    recommendedDeps = [ bobplates ];
+  };
+
+  bobinserters = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobinserters_0.13.3.zip"
+      ];
+      sha256 = "0nys9zhaw0v3w2xzrhawr8g2hcxkzdmyqd4s8xm5bnbrgrq86g9z";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig ];
+    recommendedDeps = [ ];
+  };
+
+  boblibrary = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/boblibrary_0.13.1.zip"
+      ];
+      sha256 = "04fybs626lzxf0p21jl8kakh2mddah7l9m57srk7a87jw5bj1zx8";
+    };
+  };
+
+  boblogistics = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/boblogistics_0.13.7.zip"
+      ];
+      sha256 = "0c91zmyxwsmyv6vm6gp498vb7flqlcyzkbp9s5q1651hpyd378hx";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig ];
+    recommendedDeps = [ bobplates ];
+  };
+
+  bobmining = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobmining_0.13.1.zip"
+      ];
+      sha256 = "1l7k3v4aizihppgi802fr5b8zbnq2h05c2bbsk5hds239qgxy80m";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig bobores bobplates ];
+  };
+
+  bobmodules = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobmodules_0.13.0.zip"
+      ];
+      sha256 = "0ggd2gc4s5sbld7gyncbzdgq8gc00mvxjcfv7i2dchcrdzrlr556";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig ];
+    recommendedDeps = [ bobplates bobassembly bobelectronics ];
+  };
+
+  bobores = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobores_0.13.1.zip"
+      ];
+      sha256 = "1rri70655kj77sdr3zgp56whmcl0gfjmw90jm7lj1jp8l1pdfzb9";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig ];
+  };
+
+  bobplates = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobplates_0.13.2.zip"
+      ];
+      sha256 = "0iczpa26hflj17k84p4n6wz0pwhbbrfk86dgac4bfz28kqg58nj1";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig bobenemies ];
+    recommendedDeps = [ bobores bobtech ];
+  };
+
+  bobpower = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobpower_0.13.1.zip"
+      ];
+      sha256 = "18sblnlvprrm2vzlczlki09yj9lr4y64808zrwmcasf7470skar3";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobconfig ];
+    recommendedDeps = [ bobplates ];
+  };
+
+  bobrevamp = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobrevamp_0.13.0.zip"
+      ];
+      sha256 = "0rkyf61clh8fjg72z9i7r4skvdzgd49ky6s0486xxljhbil4nxb7";
+    };
+    deps = [ boblibrary ];
+  };
+
+  bobtech = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobtech_0.13.0.zip"
+      ];
+      sha256 = "0arc9kilxzdpapn3gh5h8269ssgsjxib4ny0qissq2sg95gxlsn0";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ bobenemies ];
+  };
+
+  bobtechsave = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobtechsave_0.13.0.zip"
+      ];
+      sha256 = "1vlv4sgdfd9ldjm8y79n95ms5k6x2i7khjc422lp9080m03v1hcl";
+    };
+  };
+
+  bobwarfare = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/bobwarfare_0.13.4.zip"
+      ];
+      sha256 = "07wzn16i4r0qjm41wfyl17rrhry2vrph08a0kq8w5iy6qcbqqfd3";
+    };
+    deps = [ boblibrary ];
+    optionalDeps = [ boblibrary bobplates ];
+    recommendedDeps = [ bobtech ];
+  };
+
+  clock = modDrv {
+    src = fetchurl {
+      urls = [
+        "https://f.xor.us/factorio-mods/clock_0.13.0.zip"
+      ];
+      sha256 = "0nflywbj6p2kz2w9wff78vskzljrzaf32ib56k3z456d9y8mlxfd";
+    };
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/factorio/update.py b/nixpkgs/pkgs/games/factorio/update.py
new file mode 100755
index 000000000000..c234b36264e8
--- /dev/null
+++ b/nixpkgs/pkgs/games/factorio/update.py
@@ -0,0 +1,190 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i python -p "python3.withPackages (ps: with ps; [ ps.absl-py ps.requests ])" nix
+
+from collections import defaultdict
+import copy
+from dataclasses import dataclass
+import json
+import os.path
+import subprocess
+from typing import Callable, Dict
+
+from absl import app
+from absl import flags
+from absl import logging
+import requests
+
+
+FACTORIO_API = "https://factorio.com/api/latest-releases"
+
+
+FLAGS = flags.FLAGS
+
+flags.DEFINE_string('username', '', 'Factorio username for retrieving binaries.')
+flags.DEFINE_string('token', '', 'Factorio token for retrieving binaries.')
+flags.DEFINE_string('out', '', 'Output path for versions.json.')
+flags.DEFINE_list('release_type', '', 'If non-empty, a comma-separated list of release types to update (e.g. alpha).')
+flags.DEFINE_list('release_channel', '', 'If non-empty, a comma-separated list of release channels to update (e.g. experimental).')
+
+
+@dataclass
+class System:
+    nix_name: str
+    url_name: str
+    tar_name: str
+
+
+@dataclass
+class ReleaseType:
+    name: str
+    needs_auth: bool = False
+
+
+@dataclass
+class ReleaseChannel:
+    name: str
+
+
+FactorioVersionsJSON = Dict[str, Dict[str, str]]
+OurVersionJSON = Dict[str, Dict[str, Dict[str, Dict[str, str]]]]
+
+
+SYSTEMS = [
+    System(nix_name="x86_64-linux", url_name="linux64", tar_name="x64"),
+]
+
+RELEASE_TYPES = [
+    ReleaseType("alpha", needs_auth=True),
+    ReleaseType("demo"),
+    ReleaseType("headless"),
+]
+
+RELEASE_CHANNELS = [
+    ReleaseChannel("experimental"),
+    ReleaseChannel("stable"),
+]
+
+
+def find_versions_json() -> str:
+    if FLAGS.out:
+        return FLAGS.out
+    try_paths = ["pkgs/games/factorio/versions.json", "versions.json"]
+    for path in try_paths:
+        if os.path.exists(path):
+            return path
+    raise Exception("Couldn't figure out where to write versions.json; try specifying --out")
+
+
+def fetch_versions() -> FactorioVersionsJSON:
+    return json.loads(requests.get("https://factorio.com/api/latest-releases").text)
+
+
+def generate_our_versions(factorio_versions: FactorioVersionsJSON) -> OurVersionJSON:
+    rec_dd = lambda: defaultdict(rec_dd)
+    output = rec_dd()
+
+    # Deal with times where there's no experimental version
+    for rc in RELEASE_CHANNELS:
+        if not factorio_versions[rc.name]:
+            factorio_versions[rc.name] = factorio_versions['stable']
+
+    for system in SYSTEMS:
+        for release_type in RELEASE_TYPES:
+            for release_channel in RELEASE_CHANNELS:
+                version = factorio_versions[release_channel.name].get(release_type.name)
+                if version == None:
+                    continue
+                this_release = {
+                    "name":         f"factorio_{release_type.name}_{system.tar_name}-{version}.tar.xz",
+                    "url":          f"https://factorio.com/get-download/{version}/{release_type.name}/{system.url_name}",
+                    "version":      version,
+                    "needsAuth":    release_type.needs_auth,
+                    "tarDirectory": system.tar_name,
+                }
+                output[system.nix_name][release_type.name][release_channel.name] = this_release
+    return output
+
+
+def iter_version(versions: OurVersionJSON, it: Callable[[str, str, str, Dict[str, str]], Dict[str, str]]) -> OurVersionJSON:
+    versions = copy.deepcopy(versions)
+    for system_name, system in versions.items():
+        for release_type_name, release_type in system.items():
+            for release_channel_name, release in release_type.items():
+                release_type[release_channel_name] = it(system_name, release_type_name, release_channel_name, dict(release))
+    return versions
+
+
+def merge_versions(old: OurVersionJSON, new: OurVersionJSON) -> OurVersionJSON:
+    """Copies already-known hashes from version.json to avoid having to re-fetch."""
+    def _merge_version(system_name: str, release_type_name: str, release_channel_name: str, release: Dict[str, str]) -> Dict[str, str]:
+        old_system = old.get(system_name, {})
+        old_release_type = old_system.get(release_type_name, {})
+        old_release = old_release_type.get(release_channel_name, {})
+        if FLAGS.release_type and release_type_name not in FLAGS.release_type:
+            logging.info("%s/%s/%s: not in --release_type, not updating", system_name, release_type_name, release_channel_name)
+            return old_release
+        if FLAGS.release_channel and release_channel_name not in FLAGS.release_channel:
+            logging.info("%s/%s/%s: not in --release_channel, not updating", system_name, release_type_name, release_channel_name)
+            return old_release
+        if not "sha256" in old_release:
+            logging.info("%s/%s/%s: not copying sha256 since it's missing", system_name, release_type_name, release_channel_name)
+            return release
+        if not all(old_release.get(k, None) == release[k] for k in ['name', 'version', 'url']):
+            logging.info("%s/%s/%s: not copying sha256 due to mismatch", system_name, release_type_name, release_channel_name)
+            return release
+        release["sha256"] = old_release["sha256"]
+        return release
+    return iter_version(new, _merge_version)
+
+
+def nix_prefetch_url(name: str, url: str, algo: str = 'sha256') -> str:
+    cmd = ['nix-prefetch-url', '--type', algo, '--name', name, url]
+    logging.info('running %s', cmd)
+    out = subprocess.check_output(cmd)
+    return out.decode('utf-8').strip()
+
+
+def fill_in_hash(versions: OurVersionJSON) -> OurVersionJSON:
+    """Fill in sha256 hashes for anything missing them."""
+    urls_to_hash = {}
+    def _fill_in_hash(system_name: str, release_type_name: str, release_channel_name: str, release: Dict[str, str]) -> Dict[str, str]:
+        if "sha256" in release:
+            logging.info("%s/%s/%s: skipping fetch, sha256 already present", system_name, release_type_name, release_channel_name)
+            return release
+        url = release["url"]
+        if url in urls_to_hash:
+            logging.info("%s/%s/%s: found url %s in cache", system_name, release_type_name, release_channel_name, url)
+            release["sha256"] = urls_to_hash[url]
+            return release
+        logging.info("%s/%s/%s: fetching %s", system_name, release_type_name, release_channel_name, url)
+        if release["needsAuth"]:
+            if not FLAGS.username or not FLAGS.token:
+                raise Exception("fetching %s/%s/%s from %s requires --username and --token" % (system_name, release_type_name, release_channel_name, url))
+            url += f"?username={FLAGS.username}&token={FLAGS.token}"
+        release["sha256"] = nix_prefetch_url(release["name"], url)
+        urls_to_hash[url] = release["sha256"]
+        return release
+    return iter_version(versions, _fill_in_hash)
+
+
+def main(argv):
+    factorio_versions = fetch_versions()
+    new_our_versions = generate_our_versions(factorio_versions)
+    old_our_versions = None
+    our_versions_path = find_versions_json()
+    if our_versions_path:
+        logging.info('Loading old versions.json from %s', our_versions_path)
+        with open(our_versions_path, 'r') as f:
+            old_our_versions = json.load(f)
+    if old_our_versions:
+        logging.info('Merging in old hashes')
+        new_our_versions = merge_versions(old_our_versions, new_our_versions)
+    logging.info('Fetching necessary tars to get hashes')
+    new_our_versions = fill_in_hash(new_our_versions)
+    with open(our_versions_path, 'w') as f:
+        logging.info('Writing versions.json to %s', our_versions_path)
+        json.dump(new_our_versions, f, sort_keys=True, indent=2)
+        f.write("\n")
+
+if __name__ == '__main__':
+    app.run(main)
diff --git a/nixpkgs/pkgs/games/factorio/utils.nix b/nixpkgs/pkgs/games/factorio/utils.nix
new file mode 100644
index 000000000000..d2b52ae48366
--- /dev/null
+++ b/nixpkgs/pkgs/games/factorio/utils.nix
@@ -0,0 +1,51 @@
+# This file provides a top-level function that will be used by both nixpkgs and nixos
+# to generate mod directories for use at runtime by factorio.
+{ lib, stdenv }:
+with lib;
+{
+  mkModDirDrv = mods: modsDatFile: # a list of mod derivations
+    let
+      recursiveDeps = modDrv: [modDrv] ++ map recursiveDeps modDrv.deps;
+      modDrvs = unique (flatten (map recursiveDeps mods));
+    in
+    stdenv.mkDerivation {
+      name = "factorio-mod-directory";
+
+      preferLocalBuild = true;
+      buildCommand = ''
+        mkdir -p $out
+        for modDrv in ${toString modDrvs}; do
+          # NB: there will only ever be a single zip file in each mod derivation's output dir
+          ln -s $modDrv/*.zip $out
+        done
+      '' + (lib.optionalString (modsDatFile != null) ''
+       cp ${modsDatFile} $out/mod-settings.dat
+      '');
+    };
+
+    modDrv = { allRecommendedMods, allOptionalMods }:
+      { src
+      , name ? null
+      , deps ? []
+      , optionalDeps ? []
+      , recommendedDeps ? []
+      }: stdenv.mkDerivation {
+
+        inherit src;
+
+        # Use the name of the zip, but endstrip ".zip" and possibly the querystring that gets left in by fetchurl
+        name = replaceStrings ["_"] ["-"] (if name != null then name else removeSuffix ".zip" (head (splitString "?" src.name)));
+
+        deps = deps ++ optionals allOptionalMods optionalDeps
+                    ++ optionals allRecommendedMods recommendedDeps;
+
+        preferLocalBuild = true;
+        buildCommand = ''
+          mkdir -p $out
+          srcBase=$(basename $src)
+          srcBase=''${srcBase#*-}  # strip nix hash
+          srcBase=''${srcBase%\?*} # strip querystring leftover from fetchurl
+          cp $src $out/$srcBase
+        '';
+      };
+}
diff --git a/nixpkgs/pkgs/games/factorio/versions.json b/nixpkgs/pkgs/games/factorio/versions.json
new file mode 100644
index 000000000000..a016676ac1d1
--- /dev/null
+++ b/nixpkgs/pkgs/games/factorio/versions.json
@@ -0,0 +1,58 @@
+{
+  "x86_64-linux": {
+    "alpha": {
+      "experimental": {
+        "name": "factorio_alpha_x64-1.1.92.tar.xz",
+        "needsAuth": true,
+        "sha256": "1arirh9180bmix2dglqlgcm036mbjanc4sxx0kc92j2grpw7xf53",
+        "tarDirectory": "x64",
+        "url": "https://factorio.com/get-download/1.1.92/alpha/linux64",
+        "version": "1.1.92"
+      },
+      "stable": {
+        "name": "factorio_alpha_x64-1.1.91.tar.xz",
+        "needsAuth": true,
+        "sha256": "0dcanryqmikhllp8lwhdapbm9scrgfgnvgwdf18wn8asr652vz39",
+        "tarDirectory": "x64",
+        "url": "https://factorio.com/get-download/1.1.91/alpha/linux64",
+        "version": "1.1.91"
+      }
+    },
+    "demo": {
+      "experimental": {
+        "name": "factorio_demo_x64-1.1.92.tar.xz",
+        "needsAuth": false,
+        "sha256": "02mqj2hlpsd0kgg0rav4k70pqh2sk4g2879c2nhp61ms79kdizh4",
+        "tarDirectory": "x64",
+        "url": "https://factorio.com/get-download/1.1.92/demo/linux64",
+        "version": "1.1.92"
+      },
+      "stable": {
+        "name": "factorio_demo_x64-1.1.91.tar.xz",
+        "needsAuth": false,
+        "sha256": "1j9nzc3rs9q43vh9i0jgpyhgnjjif98sdgk4r47m0qrxjb4pnfx0",
+        "tarDirectory": "x64",
+        "url": "https://factorio.com/get-download/1.1.91/demo/linux64",
+        "version": "1.1.91"
+      }
+    },
+    "headless": {
+      "experimental": {
+        "name": "factorio_headless_x64-1.1.92.tar.xz",
+        "needsAuth": false,
+        "sha256": "04j3p2r1r0h3fak3vxxq3d7qqpyjlg57n3c8sm6gadg4q4h15aw8",
+        "tarDirectory": "x64",
+        "url": "https://factorio.com/get-download/1.1.92/headless/linux64",
+        "version": "1.1.92"
+      },
+      "stable": {
+        "name": "factorio_headless_x64-1.1.91.tar.xz",
+        "needsAuth": false,
+        "sha256": "0v8zg3q79n15242fr79f9amg0icw3giy4aiaf43am5hxzcdb5212",
+        "tarDirectory": "x64",
+        "url": "https://factorio.com/get-download/1.1.91/headless/linux64",
+        "version": "1.1.91"
+      }
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/games/fairymax/default.nix b/nixpkgs/pkgs/games/fairymax/default.nix
new file mode 100644
index 000000000000..b493f4dcfa27
--- /dev/null
+++ b/nixpkgs/pkgs/games/fairymax/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fairymax";
+  version = "4.8";
+
+  src = fetchurl {
+    url = "http://home.hccnet.nl/h.g.muller/fmax4_8w.c";
+    hash = "sha256-ikn+CA5lxtDYSDT+Nsv1tfORhKW6/vlmHcGAT9SFfQc=";
+  };
+
+  ini = fetchurl {
+    url = "http://home.hccnet.nl/h.g.muller/fmax.ini";
+    hash = "sha256-lh2ivXx4jNdWn3pT1WKKNEvkVQ31JfdDx+vqNx44nf8=";
+  };
+
+  unpackPhase = ''
+    cp ${src} fairymax.c
+    cp ${ini} fmax.ini
+  '';
+
+  buildPhase = ''
+    cc *.c -Wno-return-type \
+      -o fairymax \
+      -DINI_FILE='"'"$out/share/fairymax/fmax.ini"'"'
+  '';
+
+  installPhase = ''
+    mkdir -p "$out"/{bin,share/fairymax}
+    cp fairymax "$out/bin"
+    cp fmax.ini "$out/share/fairymax"
+  '';
+
+  meta = with lib; {
+    homepage = "http://home.hccnet.nl/h.g.muller/dwnldpage.html";
+    description = "A small chess engine supporting fairy pieces";
+    longDescription = ''
+       A version of micro-Max that reads the piece description from a file
+       fmax.ini, so that arbitrary fairy pieces can be implemented. This version
+       (4.8J) supports up to 15 piece types, and board sizes up to 12x8.
+    '';
+    license = licenses.free;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/fallout-ce/build.nix b/nixpkgs/pkgs/games/fallout-ce/build.nix
new file mode 100644
index 000000000000..c220895db08c
--- /dev/null
+++ b/nixpkgs/pkgs/games/fallout-ce/build.nix
@@ -0,0 +1,77 @@
+{ cmake
+, fpattern
+, lib
+, SDL2
+, stdenv
+, writeShellScript
+
+, extraBuildInputs ? [ ]
+, extraMeta
+, pname
+, version
+, src
+}:
+
+let
+  launcher = writeShellScript "${pname}" ''
+    set -eu
+    assetDir="''${XDG_DATA_HOME:-$HOME/.local/share}/${pname}"
+    [ -d "$assetDir" ] || mkdir -p "$assetDir"
+    cd "$assetDir"
+
+    notice=0 fault=0
+    requiredFiles=(master.dat critter.dat)
+    for f in "''${requiredFiles[@]}"; do
+      if [ ! -f "$f" ]; then
+        echo "Required file $f not found in $PWD, note the files are case-sensitive"
+        notice=1 fault=1
+      fi
+    done
+
+    if [ ! -d "data/sound/music" ]; then
+      echo "data/sound/music directory not found in $PWD. This may prevent in-game music from functioning."
+      notice=1
+    fi
+
+    if [ $notice -ne 0 ]; then
+      echo "Please reference the installation instructions at https://github.com/alexbatalov/fallout2-ce"
+    fi
+
+    if [ $fault -ne 0 ]; then
+      exit $fault;
+    fi
+
+    exec @out@/libexec/${pname} "$@"
+  '';
+in
+stdenv.mkDerivation {
+  inherit pname version src;
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ SDL2 ] ++ extraBuildInputs;
+  hardeningDisable = [ "format" ];
+  cmakeBuildType = "RelWithDebInfo";
+
+  postPatch = ''
+    substituteInPlace third_party/fpattern/CMakeLists.txt \
+      --replace "FetchContent_Populate" "#FetchContent_Populate" \
+      --replace "{fpattern_SOURCE_DIR}" "${fpattern}/include" \
+      --replace "$/nix/" "/nix/"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ${pname} $out/libexec/${pname}
+    install -D ${launcher} $out/bin/${pname}
+    substituteInPlace $out/bin/${pname} --subst-var out
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    license = licenses.sustainableUse;
+    maintainers = with maintainers; [ hughobrien TheBrainScrambler ];
+    platforms = platforms.linux;
+  } // extraMeta;
+}
diff --git a/nixpkgs/pkgs/games/fallout-ce/fallout-ce.nix b/nixpkgs/pkgs/games/fallout-ce/fallout-ce.nix
new file mode 100644
index 000000000000..5f55743a674b
--- /dev/null
+++ b/nixpkgs/pkgs/games/fallout-ce/fallout-ce.nix
@@ -0,0 +1,20 @@
+{ callPackage
+, fetchFromGitHub
+}:
+
+callPackage ./build.nix rec {
+  pname = "fallout-ce";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "alexbatalov";
+    repo = "fallout1-ce";
+    rev = "v${version}";
+    hash = "sha256-EvRkOlvtiVao63S0WRKKuHlhfkdTgc0m6GTyv4EfJFU=";
+  };
+
+  extraMeta = {
+    description = "A fully working re-implementation of Fallout, with the same original gameplay, engine bugfixes, and some quality of life improvements";
+    homepage = "https://github.com/alexbatalov/fallout1-ce";
+  };
+}
diff --git a/nixpkgs/pkgs/games/fallout-ce/fallout2-ce.nix b/nixpkgs/pkgs/games/fallout-ce/fallout2-ce.nix
new file mode 100644
index 000000000000..b28a9701c202
--- /dev/null
+++ b/nixpkgs/pkgs/games/fallout-ce/fallout2-ce.nix
@@ -0,0 +1,23 @@
+{ callPackage
+, fetchFromGitHub
+, zlib
+}:
+
+callPackage ./build.nix rec {
+  pname = "fallout2-ce";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "alexbatalov";
+    repo = "fallout2-ce";
+    rev = "v${version}";
+    hash = "sha256-+N4jhmxBX6z48kaU0jm90OKhguHlggT3OF9uuyY0EV0=";
+  };
+
+  extraBuildInputs = [ zlib ];
+
+  extraMeta = {
+    description = "A fully working re-implementation of Fallout 2, with the same original gameplay, engine bugfixes, and some quality of life improvements";
+    homepage = "https://github.com/alexbatalov/fallout2-ce";
+  };
+}
diff --git a/nixpkgs/pkgs/games/ferium/default.nix b/nixpkgs/pkgs/games/ferium/default.nix
new file mode 100644
index 000000000000..2cc48b6d8fbe
--- /dev/null
+++ b/nixpkgs/pkgs/games/ferium/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ferium";
+  version = "4.4.1";
+
+  src = fetchFromGitHub {
+    owner = "gorilla-devs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-3ILDR6CmR/CTzZfUEPD10TQZRSDKSqHmwxU3GPHIyK8=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoHash = "sha256-00rzn8eWcxRfPvIT2+EVQLd6e8gnMWx78QrwURpxstg=";
+
+  # Disable the GUI file picker so that GTK/XDG dependencies aren't used
+  buildNoDefaultFeatures = true;
+
+  # Requires an internet connection
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/ferium complete $shell > ferium.$shell
+      installShellCompletion ferium.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "Fast and multi-source CLI program for managing Minecraft mods and modpacks from Modrinth, CurseForge, and GitHub Releases";
+    homepage = "https://github.com/gorilla-devs/ferium";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ leo60228 soupglasses ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/fheroes2/default.nix b/nixpkgs/pkgs/games/fheroes2/default.nix
new file mode 100644
index 000000000000..9c51b457fb4d
--- /dev/null
+++ b/nixpkgs/pkgs/games/fheroes2/default.nix
@@ -0,0 +1,71 @@
+{ stdenv, lib, fetchFromGitHub, imagemagick
+, gettext, glibcLocalesUtf8, libpng, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, zlib
+
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fheroes2";
+  version = "1.0.9";
+
+  src = fetchFromGitHub {
+    owner = "ihhub";
+    repo = "fheroes2";
+    rev = version;
+    hash = "sha256-l2NIoZrevI1PWK4mRjGP6jbx0LvXjz9oFsiTJ6m43JQ=";
+  };
+
+  nativeBuildInputs = [ imagemagick ];
+
+  buildInputs = [ gettext glibcLocalesUtf8 libpng SDL2 SDL2_image SDL2_mixer SDL2_ttf zlib ];
+
+  makeFlags = [
+    "FHEROES2_STRICT_COMPILATION=1"
+    "FHEROES2_DATA=\"${placeholder "out"}/share/fheroes2\""
+  ];
+
+  enableParallelBuilding = true;
+
+  postBuild = ''
+    # Pick guaranteed to be present UTF-8 locale.
+    # Otherwise `iconv` calls fail to produce valid translations.
+    LANG=en_US.UTF_8 make -C files/lang
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 $PWD/src/dist/fheroes2 $out/bin/fheroes2
+
+    install -Dm644 -t $out/share/fheroes2/files/lang $PWD/files/lang/*.mo
+    install -Dm644 -t $out/share/fheroes2/files/data $PWD/files/data/resurrection.h2d
+
+    install -Dm644 -t $out/share/applications $PWD/script/packaging/common/fheroes2.desktop
+
+    for size in 16 24 32 48 64 128; do
+      mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+      convert -resize "$size"x"$size" $PWD/src/resources/fheroes2.png $out/share/icons/hicolor/"$size"x"$size"/apps/fheroes2.png
+    done;
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = gitUpdater {
+      url = "https://github.com/ihhub/fheroes2.git";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/ihhub/fheroes2";
+    description = "Free implementation of Heroes of Might and Magic II game engine";
+    longDescription = ''
+        In order to play this game, an original game data is required.
+        Please refer to README of the project for instructions.
+        On linux, the data can be placed in ~/.local/share/fheroes2 folder.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.karolchmist ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/fish-fillets-ng/default.nix b/nixpkgs/pkgs/games/fish-fillets-ng/default.nix
new file mode 100644
index 000000000000..787795828f4f
--- /dev/null
+++ b/nixpkgs/pkgs/games/fish-fillets-ng/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, makeDesktopItem, copyDesktopItems, SDL, lua5_1, pkg-config, SDL_mixer, SDL_image, SDL_ttf }:
+
+stdenv.mkDerivation rec {
+  pname = "fish-fillets-ng";
+  version = "1.0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fillets/fillets-ng-${version}.tar.gz";
+    sha256 = "1nljp75aqqb35qq3x7abhs2kp69vjcj0h1vxcpdyn2yn2nalv6ij";
+  };
+  data = fetchurl {
+    url = "mirror://sourceforge/fillets/fillets-ng-data-${version}.tar.gz";
+    sha256 = "169p0yqh2gxvhdilvjc2ld8aap7lv2nhkhkg4i1hlmgc6pxpkjgh";
+  };
+
+  nativeBuildInputs = [ pkg-config copyDesktopItems ];
+  buildInputs = [ SDL lua5_1 SDL_mixer SDL_image SDL_ttf ];
+
+  desktopItems = [ (makeDesktopItem {
+    name = "fish-fillets-ng";
+    exec = "fillets";
+    icon = "fish-fillets-ng";
+    desktopName = "Fish Fillets";
+    comment     = "Puzzle game about witty fish saving the world sokoban-style";
+    categories  = [ "Game" "LogicGame" ];
+  }) ];
+
+  postInstall = ''
+    mkdir -p $out/share/games/fillets-ng
+    tar -xf ${data} -C $out/share/games/fillets-ng --strip-components=1
+    install -Dm644 ${./icon.xpm} $out/share/pixmaps/fish-fillets-ng.xpm
+  '';
+
+  meta = with lib; {
+    description = "A puzzle game";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    homepage = "https://fillets.sourceforge.net/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/fish-fillets-ng/icon.xpm b/nixpkgs/pkgs/games/fish-fillets-ng/icon.xpm
new file mode 100644
index 000000000000..9947c54e7e55
--- /dev/null
+++ b/nixpkgs/pkgs/games/fish-fillets-ng/icon.xpm
@@ -0,0 +1,39 @@
+/* XPM */
+static char * fillets_ng_xpm[] = {
+"32 32 4 1",
+"   c None",
+".  c #000000",
+"+  c #808000",
+"@  c #FFFF00",
+"           ..........           ",
+"         ...+@@@@@@+...         ",
+"       ...@@@@@@@@@@@@...       ",
+"      ..+@@@+......+@@@+..      ",
+"     ..@@@+..........+@@@..     ",
+"    ..@@@..............@@@..    ",
+"   ..@@@................@@@..   ",
+"  ..@@@..................@@@..  ",
+"  .+@@....................@@+.  ",
+" ..@@......................@@.. ",
+" .@@+......................+@@. ",
+"..@@.....@@@@@.........@@...@@..",
+".+@+...@@@@@@@@@.....@@@@...+@+.",
+".@@...@@@.....@@@...@@+@@....@@.",
+".@@...@@.+@....+@@+@@+.@@....@@.",
+".@@..@@..@@.....+@@@+..@@....@@.",
+".@@..@@.........+@@@+..@@....@@.",
+".@@...@@.......+@@+@@+.@@....@@.",
+".@@...@@@.....@@@...@@+@@....@@.",
+".+@+...@@@@@@@@@.....@@@@...+@+.",
+"..@@.....@@@@@.........@@...@@..",
+" .@@+......................+@@. ",
+" ..@@......................@@.. ",
+"  .+@@....................@@+.  ",
+"  ..@@@..................@@@..  ",
+"   ..@@@................@@@..   ",
+"    ..@@@..............@@@..    ",
+"     ..@@@+..........+@@@..     ",
+"      ..+@@@+......+@@@+..      ",
+"       ...@@@@@@@@@@@@...       ",
+"         ...+@@@@@@+...         ",
+"           ..........           "};
diff --git a/nixpkgs/pkgs/games/flare/default.nix b/nixpkgs/pkgs/games/flare/default.nix
new file mode 100644
index 000000000000..45e1ee765426
--- /dev/null
+++ b/nixpkgs/pkgs/games/flare/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildEnv, callPackage, makeWrapper, Cocoa }:
+
+buildEnv {
+  name = "flare-1.14";
+
+  paths = [
+    (callPackage ./engine.nix { inherit Cocoa; })
+    (callPackage ./game.nix {})
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  postBuild = ''
+    mkdir -p $out/bin
+    makeWrapper $out/games/flare $out/bin/flare --chdir "$out/share/games/flare"
+  '';
+
+  meta = with lib; {
+    description = "Fantasy action RPG using the FLARE engine";
+    homepage = "https://flarerpg.org/";
+    maintainers = with maintainers; [ aanderse McSinyx ];
+    license = [ licenses.gpl3 licenses.cc-by-sa-30 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/flare/desktop.patch b/nixpkgs/pkgs/games/flare/desktop.patch
new file mode 100644
index 000000000000..1ef3c21d010e
--- /dev/null
+++ b/nixpkgs/pkgs/games/flare/desktop.patch
@@ -0,0 +1,15 @@
+diff --git a/distribution/flare.desktop.in b/distribution/flare.desktop.in
+index c740e2a6..eef91a89 100644
+--- a/distribution/flare.desktop.in
++++ b/distribution/flare.desktop.in
+@@ -14,8 +14,8 @@ Comment[fr]=Un jeu de rôle d'action monojoueur en 2D isométrique
+ Comment[gl]=Xogo individual de acción e rol cunha vista isométrica en dúas dimensións.
+ Comment[ru]=ИзометричеÑкий ролевой боевик Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ игрока
+ Comment[uk]=Ізометричний рольовий екшн (Action/RPG) Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ гравцÑ
+-TryExec=@FLARE_EXECUTABLE_PATH@
+-Exec=@FLARE_EXECUTABLE_PATH@
++TryExec=flare
++Exec=flare
+ Categories=Game;RolePlaying;
+ Icon=flare
+ Terminal=false
diff --git a/nixpkgs/pkgs/games/flare/engine.nix b/nixpkgs/pkgs/games/flare/engine.nix
new file mode 100644
index 000000000000..a1f8761815aa
--- /dev/null
+++ b/nixpkgs/pkgs/games/flare/engine.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, Cocoa }:
+
+stdenv.mkDerivation rec {
+  pname = "flare-engine";
+  version = "1.14";
+
+  src = fetchFromGitHub {
+    owner = "flareteam";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-DIzfTqwZJ8NAPB/TWzvPjepHb7hIbIr+Kk+doXJmpLc=";
+  };
+
+  patches = [ ./desktop.patch ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ SDL2 SDL2_image SDL2_mixer SDL2_ttf ]
+    ++ lib.optional stdenv.isDarwin Cocoa;
+
+  meta = with lib; {
+    description = "Free/Libre Action Roleplaying Engine";
+    homepage = "https://github.com/flareteam/flare-engine";
+    maintainers = with maintainers; [ aanderse McSinyx ];
+    license = [ licenses.gpl3 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/flare/game.nix b/nixpkgs/pkgs/games/flare/game.nix
new file mode 100644
index 000000000000..8cfe40dc22b5
--- /dev/null
+++ b/nixpkgs/pkgs/games/flare/game.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "flare-game";
+  version = "1.14";
+
+  src = fetchFromGitHub {
+    owner = "flareteam";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-tINIwxyQn8eeJCHwRmAMo2TYRgrgJlGaUrnrgbmM3Jo=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "Fantasy action RPG using the FLARE engine";
+    homepage = "https://github.com/flareteam/flare-game";
+    maintainers = with maintainers; [ aanderse McSinyx ];
+    license = [ licenses.cc-by-sa-30 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/flightgear/default.nix b/nixpkgs/pkgs/games/flightgear/default.nix
new file mode 100644
index 000000000000..e7e57a595560
--- /dev/null
+++ b/nixpkgs/pkgs/games/flightgear/default.nix
@@ -0,0 +1,79 @@
+{ lib, stdenv, fetchurl, wrapQtAppsHook
+, freeglut, freealut, libGLU, libGL, libICE, libjpeg, openal, openscenegraph, plib
+, libSM, libunwind, libX11, xorgproto, libXext, libXi
+, libXmu, libXt, simgear, zlib, boost, cmake, libpng, udev, fltk13, apr
+, makeDesktopItem, qtbase, qtdeclarative, glew, curl
+}:
+
+let
+  version = "2020.3.18";
+  shortVersion = builtins.substring 0 6 version;
+  data = stdenv.mkDerivation rec {
+    pname = "flightgear-data";
+    inherit version;
+
+    src = fetchurl {
+      url = "mirror://sourceforge/flightgear/release-${shortVersion}/FlightGear-${version}-data.txz";
+      sha256 = "sha256-U8lsHrw40Xo6a3jZw6GiPnOALvvg9PdecVAdkZewUjg=";
+    };
+
+    dontUnpack = true;
+
+    installPhase = ''
+      mkdir -p "$out/share/FlightGear"
+      tar xf "${src}" -C "$out/share/FlightGear/" --strip-components=1
+    '';
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "flightgear";
+  # inheriting data for `nix-prefetch-url -A pkgs.flightgear.data.src`
+  inherit version data;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/flightgear/release-${shortVersion}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-OajjGj/Bgqg8H/6PjXkwJHwbSQqtzbQ1b3Xwk3aI3jc=";
+  };
+
+  # Of all the files in the source and data archives, there doesn't seem to be
+  # a decent icon :-)
+  iconsrc = fetchurl {
+    url = "https://wiki.flightgear.org/w/images/6/62/FlightGear_logo.png";
+    sha256 = "1ikz413jia55vfnmx8iwrlxvx8p16ggm81mbrj66wam3q7s2dm5p";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "flightgear";
+    exec = "fgfs";
+    icon = iconsrc;
+    comment = "FlightGear Flight Simulator";
+    desktopName = "FlightGear";
+    genericName = "Flight simulator";
+    categories = [ "Game" "Simulation" ];
+  };
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+  buildInputs = [
+    freeglut freealut libGLU libGL libICE libjpeg openal openscenegraph plib
+    libSM libunwind libX11 xorgproto libXext libXi
+    libXmu libXt simgear zlib boost libpng udev fltk13 apr qtbase
+    glew qtdeclarative curl
+  ];
+
+  postInstall = ''
+    mkdir -p "$out/share/applications/"
+    cp "${desktopItem}"/share/applications/* "$out/share/applications/" #*/
+  '';
+
+  qtWrapperArgs = [
+    "--set FG_ROOT ${data}/share/FlightGear"
+  ];
+
+  meta = with lib; {
+    description = "Flight simulator";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    hydraPlatforms = []; # disabled from hydra because it's so big
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/games/fltrator/default.nix b/nixpkgs/pkgs/games/fltrator/default.nix
new file mode 100644
index 000000000000..b1a2bb6b8c0d
--- /dev/null
+++ b/nixpkgs/pkgs/games/fltrator/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, unzip, fltk, which, libjpeg }:
+
+stdenv.mkDerivation rec {
+  pname = "fltrator";
+  version = "2.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fltrator/fltrator-${version}-code.zip";
+    sha256 = "125aqq1sfrm0c9cm6gyylwdmc8xrb0rjf563xvw7q28sdbl6ayp7";
+  };
+
+  buildInputs = [ fltk libjpeg ];
+  nativeBuildInputs = [ unzip which ];
+
+  postPatch = ''
+    substituteInPlace src/fltrator.cxx\
+      --replace 'home += "fltrator/"' "home = \"$out/fltrator/\""
+    substituteInPlace src/fltrator-landscape.cxx\
+      --replace 'home += "fltrator/"' "home = \"$out/fltrator/\""
+    substituteInPlace rsc/fltrator.desktop \
+      --replace 'Exec=fltrator' "Exec=$out/bin/fltrator"
+  '';
+
+  dontAddPrefix = true;
+
+  makeFlags = [ "HOME=$(out)" "RSC_PATH=$(out)/fltrator"];
+
+  postInstall = ''
+    mkdir -p $out/share/applications
+    cp rsc/fltrator.desktop $out/share/applications
+    mkdir -p $out/share/icons/hicolor/128x128/apps/
+    cp rsc/fltrator-128.png $out/share/icons/hicolor/128x128/apps/fltrator2.png
+  '';
+
+  meta = with lib; {
+    description = "A simple retro style arcade side-scroller game";
+    longDescription = '' FLTrator is a simple retro style arcade side-scroller game in which you steer a spaceship through a landscape with hostile rockets and other obstacles.
+    It has ten different levels and a level editor to create new levels or modify the existing.''; # from https://libregamewiki.org/FLTrator
+    homepage = "https://fltrator.sourceforge.net/";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.marius851000 ];
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/forge-mtg/default.nix b/nixpkgs/pkgs/games/forge-mtg/default.nix
new file mode 100644
index 000000000000..cc5c56977bb9
--- /dev/null
+++ b/nixpkgs/pkgs/games/forge-mtg/default.nix
@@ -0,0 +1,65 @@
+{ coreutils
+, fetchFromGitHub
+, gnused
+, lib
+, maven
+, makeWrapper
+, openjdk
+}:
+
+let
+  version = "1.6.57";
+
+  src = fetchFromGitHub {
+    owner = "Card-Forge";
+    repo = "forge";
+    rev = "forge-${version}";
+    hash = "sha256-pxnnqLfyblbIgIRZZrx8Y8K43zUv9mu7PzZ7zltpEUQ=";
+  };
+
+  # launch4j downloads and runs a native binary during the package phase.
+  patches = [ ./no-launch4j.patch ];
+
+in
+maven.buildMavenPackage {
+  pname = "forge-mtg";
+  inherit version src patches;
+
+  # Tests need a running Xorg.
+  mvnParameters = "-DskipTests";
+  mvnHash = "sha256-QK9g0tG75lIhEtf4jW03N32YbD9Fe5iI0JTuqmCTtnE=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin $out/share/forge
+    cp -a \
+      forge-gui-desktop/target/forge.sh \
+      forge-gui-desktop/target/forge-gui-desktop-${version}-jar-with-dependencies.jar \
+      forge-gui-mobile-dev/target/forge-adventure.sh \
+      forge-gui-mobile-dev/target/forge-gui-mobile-dev-${version}-jar-with-dependencies.jar \
+      forge-adventure/target/forge-adventure-editor.sh \
+      forge-adventure/target/forge-adventure-${version}-jar-with-dependencies.jar \
+      forge-gui/res \
+      $out/share/forge
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    for commandToInstall in forge forge-adventure forge-adventure-editor; do
+      chmod 555 $out/share/forge/$commandToInstall.sh
+      makeWrapper $out/share/forge/$commandToInstall.sh $out/bin/$commandToInstall \
+        --prefix PATH : ${lib.makeBinPath [ coreutils openjdk gnused ]} \
+        --set JAVA_HOME ${openjdk}/lib/openjdk \
+        --set SENTRY_DSN ""
+    done
+  '';
+
+  meta = with lib; {
+    description = "Magic: the Gathering card game with rules enforcement";
+    homepage = "https://www.slightlymagic.net/forum/viewforum.php?f=26";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ eigengrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/forge-mtg/no-launch4j.patch b/nixpkgs/pkgs/games/forge-mtg/no-launch4j.patch
new file mode 100644
index 000000000000..7e9d9f4790a0
--- /dev/null
+++ b/nixpkgs/pkgs/games/forge-mtg/no-launch4j.patch
@@ -0,0 +1,466 @@
+diff --git a/forge-adventure/pom.xml b/forge-adventure/pom.xml
+index b35356ea76..b7ab1c775b 100644
+--- a/forge-adventure/pom.xml
++++ b/forge-adventure/pom.xml
+@@ -47,131 +47,6 @@
+                 </configuration>
+             </plugin>
+ 
+-            <plugin>
+-                    <groupId>com.akathist.maven.plugins.launch4j</groupId>
+-                    <artifactId>launch4j-maven-plugin</artifactId>
+-                    <version>1.7.25</version>
+-                    <executions>
+-                        <execution>
+-                            <id>l4j-adv</id>
+-                            <phase>package</phase>
+-                            <goals>
+-                                <goal>launch4j</goal>
+-                            </goals>
+-                            <configuration>
+-                                <headerType>gui</headerType>
+-                                <outfile>${project.build.directory}/forge-adventure-editor-java8.exe</outfile>
+-                                <jar>${project.build.finalName}-jar-with-dependencies.jar</jar>
+-                                <dontWrapJar>true</dontWrapJar>
+-                                <errTitle>forge</errTitle>
+-                                <icon>src/main/config/forge-adventure-editor.ico</icon>
+-                                <classPath>
+-                                    <mainClass>forge.adventure.Main</mainClass>
+-                                    <addDependencies>false</addDependencies>
+-                                    <preCp>anything</preCp>
+-                                </classPath>
+-                                <jre>
+-                                    <minVersion>1.8.0</minVersion>
+-                                    <maxHeapSize>4096</maxHeapSize>
+-                                    <opts>
+-                                        <opt>-Dfile.encoding=UTF-8</opt>
+-                                    </opts>
+-                                </jre>
+-                                <versionInfo>
+-                                    <fileVersion>
+-                                        1.0.0.0
+-                                    </fileVersion>
+-                                    <txtFileVersion>
+-                                        1.0.0.0
+-                                    </txtFileVersion>
+-                                    <fileDescription>Forge</fileDescription>
+-                                    <copyright>Forge</copyright>
+-                                    <productVersion>
+-                                        1.0.0.0
+-                                    </productVersion>
+-                                    <txtProductVersion>
+-                                        1.0.0.0
+-                                    </txtProductVersion>
+-                                    <productName>forge-adventure-editor</productName>
+-                                    <internalName>forge-adventure-editor</internalName>
+-                                    <originalFilename>forge-adventure-editor-java8.exe</originalFilename>
+-                                </versionInfo>
+-                            </configuration>
+-                        </execution>
+-                        <!--extra-->
+-                        <execution>
+-                            <id>l4j-adv2</id>
+-                            <phase>package</phase>
+-                            <goals>
+-                                <goal>launch4j</goal>
+-                            </goals>
+-                            <configuration>
+-                                <headerType>gui</headerType>
+-                                <outfile>${project.build.directory}/forge-adventure-editor.exe</outfile>
+-                                <jar>${project.build.finalName}-jar-with-dependencies.jar</jar>
+-                                <dontWrapJar>true</dontWrapJar>
+-                                <errTitle>forge</errTitle>
+-                                <downloadUrl>https://www.oracle.com/java/technologies/downloads/</downloadUrl>
+-                                <icon>src/main/config/forge-adventure-editor.ico</icon>
+-                                <classPath>
+-                                    <mainClass>forge.adventure.Main</mainClass>
+-                                    <addDependencies>false</addDependencies>
+-                                    <preCp>anything</preCp>
+-                                </classPath>
+-                                <jre>
+-                                    <minVersion>11.0.1</minVersion>
+-                                    <jdkPreference>jdkOnly</jdkPreference>
+-                                    <maxHeapSize>4096</maxHeapSize>
+-                                    <opts>
+-                                        <opt>-Dfile.encoding=UTF-8</opt>
+-                                        <opt>--add-opens java.base/java.lang=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.base/java.math=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.base/jdk.internal.misc=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.base/java.nio=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens=java.base/sun.nio.ch=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.base/java.util=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.base/java.lang.reflect=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.base/java.text=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/java.awt=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/java.awt.font=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/java.awt.image=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/java.awt.color=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/sun.awt.image=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/javax.swing=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/javax.swing.border=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/javax.swing.event=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/sun.swing=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.desktop/java.beans=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.base/java.util.concurrent=ALL-UNNAMED</opt>
+-                                        <opt>--add-opens java.base/java.net=ALL-UNNAMED</opt>
+-                                        <opt>-Dio.netty.tryReflectionSetAccessible=true</opt>
+-                                    </opts>
+-                                </jre>
+-                                <versionInfo>
+-                                    <fileVersion>
+-                                        1.0.0.0
+-                                    </fileVersion>
+-                                    <txtFileVersion>
+-                                        1.0.0.0
+-                                    </txtFileVersion>
+-                                    <fileDescription>Forge</fileDescription>
+-                                    <copyright>Forge</copyright>
+-                                    <productVersion>
+-                                        1.0.0.0
+-                                    </productVersion>
+-                                    <txtProductVersion>
+-                                        1.0.0.0
+-                                    </txtProductVersion>
+-                                    <productName>forge-adventure-editor</productName>
+-                                    <internalName>forge-adventure-editor</internalName>
+-                                    <originalFilename>forge-adventure-editor.exe</originalFilename>
+-                                </versionInfo>
+-                            </configuration>
+-                        </execution>
+-                        <!--extra-->
+-                    </executions>
+-            </plugin>
+-
+             <plugin>
+                 <groupId>com.google.code.maven-replacer-plugin</groupId>
+                 <artifactId>replacer</artifactId>
+diff --git a/forge-gui-desktop/pom.xml b/forge-gui-desktop/pom.xml
+index 3b74663b04..f0e324b69c 100644
+--- a/forge-gui-desktop/pom.xml
++++ b/forge-gui-desktop/pom.xml
+@@ -282,59 +282,6 @@
+             <id>windows-linux-release</id>
+             <build>
+                 <plugins>
+-                    <plugin>
+-                        <groupId>com.akathist.maven.plugins.launch4j</groupId>
+-                        <artifactId>launch4j-maven-plugin</artifactId>
+-                        <version>2.1.2</version>
+-                        <executions>
+-                            <execution>
+-                                <id>l4j-gui</id>
+-                                <phase>package</phase>
+-                                <goals>
+-                                    <goal>launch4j</goal>
+-                                </goals>
+-                                <configuration>
+-                                    <headerType>gui</headerType>
+-                                    <outfile>${project.build.directory}/forge-java8.exe</outfile>
+-                                    <jar>${project.build.finalName}-jar-with-dependencies.jar</jar>
+-                                    <dontWrapJar>true</dontWrapJar>
+-                                    <errTitle>forge</errTitle>
+-                                    <icon>src/main/config/forge.ico</icon>
+-                                    <classPath>
+-                                        <mainClass>forge.view.Main</mainClass>
+-                                        <addDependencies>false</addDependencies>
+-                                        <preCp>anything</preCp>
+-                                    </classPath>
+-                                    <jre>
+-                                        <minVersion>1.8.0</minVersion>
+-                                        <maxHeapSize>4096</maxHeapSize>
+-                                        <opts>
+-                                            <opt>-Dfile.encoding=UTF-8</opt>
+-                                        </opts>
+-                                    </jre>
+-                                    <versionInfo>
+-                                        <fileVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </fileVersion>
+-                                        <txtFileVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </txtFileVersion>
+-                                        <fileDescription>Forge</fileDescription>
+-                                        <copyright>Forge</copyright>
+-                                        <productVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </productVersion>
+-                                        <txtProductVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </txtProductVersion>
+-                                        <productName>Forge</productName>
+-                                        <internalName>forge</internalName>
+-                                        <originalFilename>forge-java8.exe</originalFilename>
+-                                    </versionInfo>
+-                                </configuration>
+-                            </execution>
+-                        </executions>
+-                    </plugin>
+ 
+                     <plugin>
+                         <groupId>org.apache.maven.plugins</groupId>
+@@ -447,130 +394,6 @@
+             <id>windows-linux</id>
+             <build>
+                 <plugins>
+-                    <plugin>
+-                        <groupId>com.akathist.maven.plugins.launch4j</groupId>
+-                        <artifactId>launch4j-maven-plugin</artifactId>
+-                        <version>2.1.2</version>
+-                        <executions>
+-                            <execution>
+-                                <id>l4j-gui</id>
+-                                <phase>package</phase>
+-                                <goals>
+-                                    <goal>launch4j</goal>
+-                                </goals>
+-                                <configuration>
+-                                    <headerType>gui</headerType>
+-                                    <outfile>${project.build.directory}/forge-java8.exe</outfile>
+-                                    <jar>${project.build.finalName}-jar-with-dependencies.jar</jar>
+-                                    <dontWrapJar>true</dontWrapJar>
+-                                    <errTitle>forge</errTitle>
+-                                    <icon>src/main/config/forge.ico</icon>
+-                                    <classPath>
+-                                        <mainClass>forge.view.Main</mainClass>
+-                                        <addDependencies>false</addDependencies>
+-                                        <preCp>anything</preCp>
+-                                    </classPath>
+-                                    <jre>
+-                                        <minVersion>1.8.0</minVersion>
+-                                        <maxHeapSize>4096</maxHeapSize>
+-                                        <opts>
+-                                            <opt>-Dfile.encoding=UTF-8</opt>
+-                                        </opts>
+-                                    </jre>
+-                                    <versionInfo>
+-                                        <fileVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </fileVersion>
+-                                        <txtFileVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </txtFileVersion>
+-                                        <fileDescription>Forge</fileDescription>
+-                                        <copyright>Forge</copyright>
+-                                        <productVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </productVersion>
+-                                        <txtProductVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </txtProductVersion>
+-                                        <productName>Forge</productName>
+-                                        <internalName>forge</internalName>
+-                                        <originalFilename>forge-java8.exe</originalFilename>
+-                                    </versionInfo>
+-                                </configuration>
+-                            </execution>
+-                            <!--extra-->
+-                            <execution>
+-                                <id>l4j-gui2</id>
+-                                <phase>package</phase>
+-                                <goals>
+-                                    <goal>launch4j</goal>
+-                                </goals>
+-                                <configuration>
+-                                    <headerType>gui</headerType>
+-                                    <outfile>${project.build.directory}/forge.exe</outfile>
+-                                    <jar>${project.build.finalName}-jar-with-dependencies.jar</jar>
+-                                    <dontWrapJar>true</dontWrapJar>
+-                                    <errTitle>forge</errTitle>
+-                                    <downloadUrl>https://www.oracle.com/java/technologies/downloads/</downloadUrl>
+-                                    <icon>src/main/config/forge.ico</icon>
+-                                    <classPath>
+-                                        <mainClass>forge.view.Main</mainClass>
+-                                        <addDependencies>false</addDependencies>
+-                                        <preCp>anything</preCp>
+-                                    </classPath>
+-                                    <jre>
+-                                        <minVersion>11.0.1</minVersion>
+-                                        <jdkPreference>jdkOnly</jdkPreference>
+-                                        <maxHeapSize>4096</maxHeapSize>
+-                                        <opts>
+-                                            <opt>-Dfile.encoding=UTF-8</opt>
+-                                            <opt>--add-opens java.base/java.lang=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.base/java.math=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.base/jdk.internal.misc=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.base/java.nio=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens=java.base/sun.nio.ch=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.base/java.util=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.base/java.lang.reflect=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.base/java.text=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/java.awt=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/java.awt.font=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/java.awt.image=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/java.awt.color=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/sun.awt.image=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/javax.swing=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/javax.swing.border=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/javax.swing.event=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/sun.swing=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.desktop/java.beans=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.base/java.util.concurrent=ALL-UNNAMED</opt>
+-                                            <opt>--add-opens java.base/java.net=ALL-UNNAMED</opt>
+-                                            <opt>-Dio.netty.tryReflectionSetAccessible=true</opt>
+-                                        </opts>
+-                                    </jre>
+-                                    <versionInfo>
+-                                        <fileVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </fileVersion>
+-                                        <txtFileVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </txtFileVersion>
+-                                        <fileDescription>Forge</fileDescription>
+-                                        <copyright>Forge</copyright>
+-                                        <productVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </productVersion>
+-                                        <txtProductVersion>
+-                                            ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0
+-                                        </txtProductVersion>
+-                                        <productName>Forge</productName>
+-                                        <internalName>forge</internalName>
+-                                        <originalFilename>forge.exe</originalFilename>
+-                                    </versionInfo>
+-                                </configuration>
+-                            </execution>
+-                            <!--extra-->
+-                        </executions>
+-                    </plugin>
+ 
+                     <plugin>
+                         <groupId>org.apache.maven.plugins</groupId>
+diff --git a/forge-gui-mobile-dev/pom.xml b/forge-gui-mobile-dev/pom.xml
+index e7439c1e3a..de0cbc16a1 100644
+--- a/forge-gui-mobile-dev/pom.xml
++++ b/forge-gui-mobile-dev/pom.xml
+@@ -64,130 +64,6 @@
+                     </replacements>
+                 </configuration>
+             </plugin>
+-            <plugin>
+-                <groupId>com.akathist.maven.plugins.launch4j</groupId>
+-                <artifactId>launch4j-maven-plugin</artifactId>
+-                <version>1.7.25</version>
+-                <executions>
+-                    <execution>
+-                        <id>l4j-adv</id>
+-                        <phase>package</phase>
+-                        <goals>
+-                            <goal>launch4j</goal>
+-                        </goals>
+-                        <configuration>
+-                            <headerType>gui</headerType>
+-                            <outfile>${project.build.directory}/forge-adventure-java8.exe</outfile>
+-                            <jar>${project.build.finalName}-jar-with-dependencies.jar</jar>
+-                            <dontWrapJar>true</dontWrapJar>
+-                            <errTitle>forge</errTitle>
+-                            <icon>src/main/config/forge-adventure.ico</icon>
+-                            <classPath>
+-                                <mainClass>forge.app.Main</mainClass>
+-                                <addDependencies>false</addDependencies>
+-                                <preCp>anything</preCp>
+-                            </classPath>
+-                            <jre>
+-                                <minVersion>1.8.0</minVersion>
+-                                <maxHeapSize>4096</maxHeapSize>
+-                                <opts>
+-                                    <opt>-Dfile.encoding=UTF-8</opt>
+-                                </opts>
+-                            </jre>
+-                            <versionInfo>
+-                                <fileVersion>
+-                                    1.0.0.0
+-                                </fileVersion>
+-                                <txtFileVersion>
+-                                    1.0.0.0
+-                                </txtFileVersion>
+-                                <fileDescription>Forge</fileDescription>
+-                                <copyright>Forge</copyright>
+-                                <productVersion>
+-                                    1.0.0.0
+-                                </productVersion>
+-                                <txtProductVersion>
+-                                    1.0.0.0
+-                                </txtProductVersion>
+-                                <productName>forge-adventure</productName>
+-                                <internalName>forge-adventure</internalName>
+-                                <originalFilename>forge-adventure-java8.exe</originalFilename>
+-                            </versionInfo>
+-                        </configuration>
+-                    </execution>
+-                    <!--extra-->
+-                    <execution>
+-                        <id>l4j-adv2</id>
+-                        <phase>package</phase>
+-                        <goals>
+-                            <goal>launch4j</goal>
+-                        </goals>
+-                        <configuration>
+-                            <headerType>gui</headerType>
+-                            <outfile>${project.build.directory}/forge-adventure.exe</outfile>
+-                            <jar>${project.build.finalName}-jar-with-dependencies.jar</jar>
+-                            <dontWrapJar>true</dontWrapJar>
+-                            <errTitle>forge</errTitle>
+-                            <downloadUrl>https://www.oracle.com/java/technologies/downloads/</downloadUrl>
+-                            <icon>src/main/config/forge-adventure.ico</icon>
+-                            <classPath>
+-                                <mainClass>forge.app.Main</mainClass>
+-                                <addDependencies>false</addDependencies>
+-                                <preCp>anything</preCp>
+-                            </classPath>
+-                            <jre>
+-                                <minVersion>11.0.1</minVersion>
+-                                <jdkPreference>jdkOnly</jdkPreference>
+-                                <maxHeapSize>4096</maxHeapSize>
+-                                <opts>
+-                                    <opt>-Dfile.encoding=UTF-8</opt>
+-                                    <opt>--add-opens java.base/java.lang=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.base/java.math=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.base/jdk.internal.misc=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.base/java.nio=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens=java.base/sun.nio.ch=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.base/java.util=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.base/java.lang.reflect=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.base/java.text=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/java.awt=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/java.awt.font=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/java.awt.image=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/java.awt.color=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/sun.awt.image=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/javax.swing=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/javax.swing.border=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/javax.swing.event=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/sun.swing=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.desktop/java.beans=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.base/java.util.concurrent=ALL-UNNAMED</opt>
+-                                    <opt>--add-opens java.base/java.net=ALL-UNNAMED</opt>
+-                                    <opt>-Dio.netty.tryReflectionSetAccessible=true</opt>
+-                                </opts>
+-                            </jre>
+-                            <versionInfo>
+-                                <fileVersion>
+-                                    1.0.0.0
+-                                </fileVersion>
+-                                <txtFileVersion>
+-                                    1.0.0.0
+-                                </txtFileVersion>
+-                                <fileDescription>Forge</fileDescription>
+-                                <copyright>Forge</copyright>
+-                                <productVersion>
+-                                    1.0.0.0
+-                                </productVersion>
+-                                <txtProductVersion>
+-                                    1.0.0.0
+-                                </txtProductVersion>
+-                                <productName>forge-adventure</productName>
+-                                <internalName>forge-adventure</internalName>
+-                                <originalFilename>forge-adventure.exe</originalFilename>
+-                            </versionInfo>
+-                        </configuration>
+-                    </execution>
+-                    <!--extra-->
+-                </executions>
+-            </plugin>
+             <plugin>
+                 <artifactId>maven-assembly-plugin</artifactId>
+                 <configuration>
diff --git a/nixpkgs/pkgs/games/freeciv/default.nix b/nixpkgs/pkgs/games/freeciv/default.nix
new file mode 100644
index 000000000000..89d38d941e96
--- /dev/null
+++ b/nixpkgs/pkgs/games/freeciv/default.nix
@@ -0,0 +1,86 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, lua5_3, pkg-config, python3
+, zlib, bzip2, curl, xz, gettext, libiconv, icu
+, SDL2, SDL2_mixer, SDL2_image, SDL2_ttf, SDL2_gfx, freetype, fluidsynth
+, sdl2Client ? false
+, gtkClient ? true, gtk3, wrapGAppsHook
+, qtClient ? false, qt5
+, server ? true, readline
+, enableSqlite ? true, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "freeciv";
+  version = "3.0.8";
+
+  src = fetchFromGitHub {
+    owner = "freeciv";
+    repo = "freeciv";
+    rev = "R${lib.replaceStrings [ "." ] [ "_" ] version}";
+    hash = "sha256-6DWVou4d1oAOlhHb2A2vxR4Fy+1q7Xz9w9VK9rEzZxA=";
+  };
+
+  postPatch = ''
+    for f in {common,utility}/*.py; do
+      substituteInPlace $f \
+        --replace '/usr/bin/env python3' ${python3.interpreter}
+    done
+    for f in bootstrap/*.sh; do
+      patchShebangs $f
+    done
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ]
+    ++ lib.optionals qtClient [ qt5.wrapQtAppsHook ]
+    ++ lib.optionals gtkClient [ wrapGAppsHook ];
+
+  buildInputs = [ lua5_3 zlib bzip2 curl xz gettext libiconv icu ]
+    ++ [ SDL2 SDL2_mixer SDL2_image SDL2_ttf SDL2_gfx freetype fluidsynth ]
+    ++ lib.optionals gtkClient [ gtk3 ]
+    ++ lib.optionals qtClient  [ qt5.qtbase ]
+    ++ lib.optional server readline
+    ++ lib.optional enableSqlite sqlite;
+
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+
+  # configure is not smart enough to look for SDL2 headers under
+  # .../SDL2, but thankfully $SDL2_PATH is almost exactly what we want
+  preConfigure = ''
+    export CPPFLAGS="$(echo $SDL2_PATH | sed 's#/nix/store/#-I/nix/store/#g')"
+  '';
+  configureFlags = [ "--enable-shared" ]
+    ++ lib.optionals sdl2Client [
+      "--enable-client=sdl2"
+      "--enable-sdl-mixer=sdl2"
+    ]
+    ++ lib.optionals qtClient [
+      "--enable-client=qt"
+      "--with-qt5-includes=${qt5.qtbase.dev}/include"
+    ] ++ lib.optionals gtkClient [ "--enable-client=gtk3.22" ]
+    ++ lib.optional enableSqlite "--enable-fcdb=sqlite3"
+    ++ lib.optional (!gtkClient) "--enable-fcmp=cli"
+    ++ lib.optional (!server)    "--disable-server";
+
+  postFixup = lib.optionalString qtClient ''
+    wrapQtApp $out/bin/freeciv-qt
+  '' + lib.optionalString gtkClient ''
+    wrapGApp $out/bin/freeciv-gtk3.22
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Multiplayer (or single player), turn-based strategy game";
+    longDescription = ''
+      Freeciv is a Free and Open Source empire-building strategy game
+      inspired by the history of human civilization. The game commences in
+      prehistory and your mission is to lead your tribe from the stone age
+      to the space age...
+    '';
+    homepage = "http://www.freeciv.org"; # http only
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pierron ];
+    platforms = platforms.unix;
+    hydraPlatforms = platforms.linux; # sdl-config times out on darwin
+  };
+}
diff --git a/nixpkgs/pkgs/games/freedink/default.nix b/nixpkgs/pkgs/games/freedink/default.nix
new file mode 100644
index 000000000000..ecdcbb7dce69
--- /dev/null
+++ b/nixpkgs/pkgs/games/freedink/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchurl, SDL, SDL_mixer, SDL_image, SDL_ttf, SDL_gfx
+, pkg-config, intltool, fontconfig, libzip, zip, zlib }:
+
+let
+  version = "1.08.20121209";
+
+  freedink_data = stdenv.mkDerivation rec {
+    pname = "freedink-data";
+    inherit version;
+
+    src = fetchurl {
+      url = "mirror://gnu/freedink/${pname}-${version}.tar.gz";
+      sha256 = "1mhns09l1s898x18ahbcy9gabrmgsr8dv7pm0a2ivid8mhxahn1j";
+    };
+
+    prePatch = "substituteInPlace Makefile --replace /usr/local $out";
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "freedink";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://gnu/freedink/${pname}-${version}.tar.gz";
+    sha256 = "19xximbcm6506kvpf3s0q96697kmzca3yrjdr6dgphklp33zqsqr";
+  };
+
+  nativeBuildInputs = [ pkg-config intltool ];
+
+  buildInputs = [
+    SDL SDL_mixer SDL_image SDL_ttf SDL_gfx
+    fontconfig libzip zip zlib
+  ];
+
+  preConfigure = ''
+    # Build fails on Linux with windres.
+    export ac_cv_prog_ac_ct_WINDRES=
+  '';
+
+  postInstall = ''
+    mkdir -p "$out/share/"
+    ln -s ${freedink_data}/share/dink "$out/share/"
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "A free, portable and enhanced version of the Dink Smallwood game engine";
+
+    longDescription = ''
+      GNU FreeDink is a new and portable version of the Dink Smallwood
+      game engine, which runs the original game as well as its D-Mods,
+      with close compatibility, under multiple platforms.
+    '';
+
+    homepage = "https://www.gnu.org/software/freedink/"; # Formerly http://www.freedink.org
+    license = lib.licenses.gpl3Plus;
+
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+    hydraPlatforms = lib.platforms.linux; # sdl-config times out on darwin
+  };
+}
diff --git a/nixpkgs/pkgs/games/freedroid/default.nix b/nixpkgs/pkgs/games/freedroid/default.nix
new file mode 100644
index 000000000000..38eb60e7e045
--- /dev/null
+++ b/nixpkgs/pkgs/games/freedroid/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv
+, fetchFromGitHub
+, makeDesktopItem, copyDesktopItems
+, imagemagick
+, autoreconfHook
+, SDL, SDL_mixer, SDL_image, SDL_gfx
+, libvorbis
+, libjpeg, libpng
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname   = "freedroid";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner  = "ReinhardPrix";
+    repo   = "FreedroidClassic";
+    rev    = "release-${version}";
+    sha256 = "027wns25nyyc8afyhyp5a8wn13x9nlzmnqzqyyma1055xjy5imis";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems imagemagick autoreconfHook ];
+  buildInputs = [ SDL SDL_image SDL_gfx SDL_mixer libjpeg libpng libvorbis zlib ];
+
+  postPatch = ''
+    touch NEWS
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/icons/hicolor/32x32/apps
+    convert graphics/paraicon.bmp $out/share/icons/hicolor/32x32/apps/freedroid.png
+  '';
+
+  desktopItems = [ (makeDesktopItem {
+    name = pname;
+    exec = pname;
+    icon = pname;
+    desktopName = "Freedroid Classic";
+    comment     = "A clone of the classic game 'Paradroid' on Commodore 64";
+    categories  = [ "Game" "ArcadeGame" ];
+  }) ];
+
+  meta = with lib; {
+    description = "A clone of the classic game 'Paradroid' on Commodore 64";
+    homepage    = "https://github.com/ReinhardPrix/FreedroidClassic";
+    license     = licenses.gpl2Only;
+    maintainers = with maintainers; [ iblech ];
+    platforms   = platforms.unix;
+    # Builds but fails to render to the screen at runtime.
+    broken      = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/freedroidrpg/default.nix b/nixpkgs/pkgs/games/freedroidrpg/default.nix
new file mode 100644
index 000000000000..254d9b2ce6a6
--- /dev/null
+++ b/nixpkgs/pkgs/games/freedroidrpg/default.nix
@@ -0,0 +1,76 @@
+{ fetchurl, fetchpatch, lib, stdenv, pkg-config, gettext, python3, SDL, SDL_image, SDL_gfx, SDL_mixer, libogg, libvorbis, lua5_3, libjpeg, libpng, zlib, libiconv }:
+
+let
+  version = "0.16.1";
+in stdenv.mkDerivation {
+  pname = "freedroidrpg";
+  inherit version;
+
+  src = fetchurl {
+    url = "ftp://ftp.osuosl.org/pub/freedroid/freedroidRPG-${lib.versions.majorMinor version}/freedroidRPG-${version}.tar.gz";
+    sha256 = "0n4kn38ncmcy3lrxmq8fjry6c1z50z4q1zcqfig0j4jb0dsz2va2";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common tolchains.
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://gitlab.com/freedroid/freedroid-src/-/commit/e610d427374226b79da5258d979936459f30c761.patch";
+      sha256 = "1s7sw4dkc7b6i72j6x47driq6v0k3wss48l9ivd4fw40n3iaxjb1";
+    })
+
+    # Do not embed build flags in the binary to reduce closure size.
+    ./drop-build-deps.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config gettext python3 ];
+
+  buildInputs = [
+    SDL SDL_image SDL_gfx SDL_mixer libogg libvorbis lua5_3 libjpeg libpng zlib
+  ] ++ lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "Isometric 3D RPG similar to game Diablo";
+
+    longDescription = ''
+      <para>
+        FreedroidRPG is an original isometric 3D role playing game
+        taking place in the future, on Earth. It features action and
+        dialogs.
+      </para>
+      <para>
+        The game tells the story of a world destroyed by a conflict between
+        robots and their human masters. Play as Tux in a quest to save the
+        world from the murderous rebel bots who know no mercy. You get to
+        choose which path you wish to follow, and freedom of choice is
+        everywhere in the game.
+      </para>
+      <para>
+        FreedroidRPG features a real time combat system with melee and
+        ranged weapons, fairly similar to the proprietary game Diablo.
+        There is an innovative system of programs that can be run in order
+        to take control of enemy robots, alter their behavior, or improve one's
+        characteristics. You can use over 50 different kinds of items and
+        fight countless enemies on your way to your destiny. An advanced
+        dialog system provides story background and immersive role
+        playing situations.
+      </para>
+      <para>
+        The game is complete, fully playable, and can provide about
+        12 hours of fun. It is still being actively developed, and
+        help is welcome in many areas. People having - or trying to acquire -
+        programming, map editing, or writing skills will find FreedroidRPG
+        to be an exciting, fast-moving project in which they can fully
+        express their creativity.
+      </para>
+    '';
+
+    homepage = "https://www.freedroid.org/";
+
+    license = licenses.gpl2Plus;
+
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    hydraPlatforms = platforms.linux; # sdl-config times out on darwin
+  };
+}
diff --git a/nixpkgs/pkgs/games/freedroidrpg/drop-build-deps.patch b/nixpkgs/pkgs/games/freedroidrpg/drop-build-deps.patch
new file mode 100644
index 000000000000..d9f2d37b57c7
--- /dev/null
+++ b/nixpkgs/pkgs/games/freedroidrpg/drop-build-deps.patch
@@ -0,0 +1,15 @@
+Do not embed paths to build-only depends (-I...SDL2-dev and friends)
+into savefile lua comments.
+--- a/src/savestruct_internal.c
++++ b/src/savestruct_internal.c
+@@ -486,8 +486,8 @@ void save_game_data(struct auto_string *strout)
+ 	autostr_append(strout,
+ 		"SAVEGAME: %s %s %s;sizeof(tux_t)=%d;sizeof(enemy)=%d;sizeof(bullet)=%d;MAXBULLETS=%d\n",
+ 		SAVEGAME_VERSION, SAVEGAME_REVISION, VERSION, (int)sizeof(tux_t), (int)sizeof(enemy), (int)sizeof(bullet), (int)MAXBULLETS);
+-	autostr_append(strout, "BUILD_CFLAGS: %s\n", BUILD_CFLAGS);
+-	autostr_append(strout, "BUILD_LDFLAGS: %s\n", BUILD_LDFLAGS);
++	autostr_append(strout, "BUILD_CFLAGS: %s\n", "<hidden>");
++	autostr_append(strout, "BUILD_LDFLAGS: %s\n", "<hidden>");
+ 	autostr_append(strout, "VERSION: %s\n", freedroid_version);
+ 	autostr_append(strout, "--]]\n");
+ 
diff --git a/nixpkgs/pkgs/games/freenukum/default.nix b/nixpkgs/pkgs/games/freenukum/default.nix
new file mode 100644
index 000000000000..89c26099db09
--- /dev/null
+++ b/nixpkgs/pkgs/games/freenukum/default.nix
@@ -0,0 +1,74 @@
+{ lib, stdenv
+, rustPlatform
+, fetchFromGitLab
+, makeDesktopItem
+, installShellFiles
+, dejavu_fonts
+, SDL2
+, SDL2_ttf
+, SDL2_image
+}:
+let
+  pname = "freenukum";
+  description = "Clone of the original Duke Nukum 1 Jump'n Run game";
+
+  desktopItem = makeDesktopItem {
+    desktopName = pname;
+    name = pname;
+    exec = pname;
+    icon = pname;
+    comment = description;
+    categories = [ "Game" "ArcadeGame" "ActionGame" ];
+    genericName = pname;
+  };
+
+in
+rustPlatform.buildRustPackage rec {
+  inherit pname;
+  version = "0.4.0";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "silwol";
+    repo = "freenukum";
+    rev = "v${version}";
+    sha256 = "sha256-Tk9n2gPwyPin6JZ4RSO8d/+xVpEz4rF8C2eGKwrAXU0=";
+  };
+
+  cargoSha256 = "sha256-8RfiObWDqZJg+sjjDBk+sRoS5CiECIdNPH79T+O8e8M=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_ttf
+    SDL2_image
+  ];
+
+  postPatch = ''
+    substituteInPlace src/graphics.rs \
+      --replace /usr $out
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/fonts/truetype/dejavu
+    ln -sf \
+      ${dejavu_fonts}/share/fonts/truetype/DejaVuSans.ttf \
+      $out/share/fonts/truetype/dejavu/DejaVuSans.ttf
+    mkdir -p $out/share/doc/freenukum
+    install -Dm644 README.md CHANGELOG.md $out/share/doc/freenukum/
+    installManPage doc/freenukum.6
+    install -Dm644 "${desktopItem}/share/applications/"* -t $out/share/applications/
+  '';
+
+  meta = with lib; {
+    description = "Clone of the original Duke Nukum 1 Jump'n Run game";
+    homepage = "https://salsa.debian.org/silwol/freenukum";
+    changelog = "https://salsa.debian.org/silwol/freenukum/-/blob/v${version}/CHANGELOG.md";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ _0x4A6F ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/freeorion/default.nix b/nixpkgs/pkgs/games/freeorion/default.nix
new file mode 100644
index 000000000000..8c2c4ef86a08
--- /dev/null
+++ b/nixpkgs/pkgs/games/freeorion/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, doxygen
+, graphviz
+, makeWrapper
+, boost179
+, SDL2
+, python3
+, freetype
+, openal
+, libogg
+, libvorbis
+, zlib
+, libpng
+, libtiff
+, libjpeg
+, libGLU
+, libGL
+, glew
+, libxslt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "freeorion";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "freeorion";
+    repo = "freeorion";
+    rev = "v${version}";
+    sha256 = "sha256-uJRDU0Xd+sHL2IDvMiElUSOhvchVMW9wYMSLSN7pYtQ=";
+  };
+
+  buildInputs = [
+    (boost179.override { enablePython = true; python = python3; })
+    (python3.withPackages (p: with p; [ pycodestyle ]))
+    SDL2
+    freetype
+    glew
+    libGL
+    libGLU
+    libjpeg
+    libogg
+    libpng
+    libtiff
+    libvorbis
+    openal
+    zlib
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    doxygen
+    graphviz
+    makeWrapper
+  ];
+
+  # as of 0.5 FreeOrion doesn't work with "-DOpenGL_GL_PREFERENCE=GLVND"
+  cmakeFlags = [ "-DOpenGL_GL_PREFERENCE=LEGACY" ];
+
+  postInstall = ''
+    mkdir -p $out/libexec
+    # We need final slashes for XSLT replace to work properly
+    substitute ${./fix-paths.xslt} $out/share/freeorion/fix-paths.xslt \
+      --subst-var-by nixStore "$NIX_STORE/" \
+      --subst-var-by out "$out/"
+    substitute ${./fix-paths.sh} $out/libexec/fix-paths \
+      --subst-var-by libxsltBin ${libxslt.bin} \
+      --subst-var-by shell ${stdenv.shell} \
+      --subst-var out
+    chmod +x $out/libexec/fix-paths
+
+    wrapProgram $out/bin/freeorion \
+      --run $out/libexec/fix-paths \
+      --prefix LD_LIBRARY_PATH : $out/lib/freeorion
+  '';
+
+  meta = with lib; {
+    description = "A free, open source, turn-based space empire and galactic conquest (4X) computer game";
+    homepage = "https://www.freeorion.org/";
+    license = with licenses; [ gpl2 cc-by-sa-30 ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ tex ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/freeorion/fix-paths.sh b/nixpkgs/pkgs/games/freeorion/fix-paths.sh
new file mode 100644
index 000000000000..def017ddc5b0
--- /dev/null
+++ b/nixpkgs/pkgs/games/freeorion/fix-paths.sh
@@ -0,0 +1,6 @@
+#!@shell@
+
+if [ -e ~/.config/freeorion/config.xml ]; then
+  @libxsltBin@/bin/xsltproc -o ~/.config/freeorion/config.xml @out@/share/freeorion/fix-paths.xslt ~/.config/freeorion/config.xml
+fi
+exit 0
diff --git a/nixpkgs/pkgs/games/freeorion/fix-paths.xslt b/nixpkgs/pkgs/games/freeorion/fix-paths.xslt
new file mode 100644
index 000000000000..f0db646b81ad
--- /dev/null
+++ b/nixpkgs/pkgs/games/freeorion/fix-paths.xslt
@@ -0,0 +1,13 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+  <xsl:output method="xml" omit-xml-declaration="no" indent="yes" />
+
+  <xsl:template match='node() | @*'>
+    <xsl:copy>
+      <xsl:apply-templates select='node() | @*'/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match='//text()[starts-with(., "@nixStore@")]'>
+    <xsl:value-of select='concat("@out@", substring-after(substring-after(., "@nixStore@"), "/"))'/>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/nixpkgs/pkgs/games/freesweep/default.nix b/nixpkgs/pkgs/games/freesweep/default.nix
new file mode 100644
index 000000000000..feba049a5cf0
--- /dev/null
+++ b/nixpkgs/pkgs/games/freesweep/default.nix
@@ -0,0 +1,37 @@
+{ fetchFromGitHub, fetchpatch, ncurses, lib, stdenv
+, updateAutotoolsGnuConfigScriptsHook, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "freesweep";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "rwestlund";
+    repo = "freesweep";
+    rev = "v${version}";
+    hash = "sha256-iuu81yHbNrjdPsimBrPK58PJ0d8i3ySM7rFUG/d8NJM";
+  };
+
+  nativeBuildInputs = [ updateAutotoolsGnuConfigScriptsHook installShellFiles ];
+  buildInputs = [ ncurses ];
+
+  configureFlags = [ "--with-prefsdir=$out/share" ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -D -m 0555 freesweep $out/bin/freesweep
+    install -D -m 0444 sweeprc $out/share/sweeprc
+    installManPage freesweep.6
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A console minesweeper-style game written in C for Unix-like systems";
+    homepage = "https://github.com/rwestlund/freesweep";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ kierdavis ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/frogatto/data.nix b/nixpkgs/pkgs/games/frogatto/data.nix
new file mode 100644
index 000000000000..a61bddf94bfb
--- /dev/null
+++ b/nixpkgs/pkgs/games/frogatto/data.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "frogatto-data";
+  version = "unstable-2023-02-27";
+
+  src = fetchFromGitHub {
+    owner = "frogatto";
+    repo = "frogatto";
+    rev = "5ca339f4b97e5004dc07394407bf1da43fbd6204";
+    sha256 = "sha256-6wqCFc7DlDt0u0JnPg4amVemc9HOjsB/U4s9n7N84QA=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/share/frogatto/modules
+    cp -ar . $out/share/frogatto/modules/frogatto4
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/frogatto/frogatto";
+    description = "Data files to the frogatto game";
+    license = with licenses; [ cc-by-30 unfree ];
+    maintainers = with maintainers; [ astro ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/frogatto/default.nix b/nixpkgs/pkgs/games/frogatto/default.nix
new file mode 100644
index 000000000000..036b2abec19c
--- /dev/null
+++ b/nixpkgs/pkgs/games/frogatto/default.nix
@@ -0,0 +1,43 @@
+{ buildEnv, lib, callPackage, makeWrapper, makeDesktopItem }:
+
+let
+  description = "Action-adventure game, starring a certain quixotic frog";
+  engine = callPackage ./engine.nix { };
+  data = callPackage ./data.nix { };
+  desktopItem = makeDesktopItem {
+    name = "frogatto";
+    exec = "frogatto";
+    startupNotify = true;
+    icon = "${data}/share/frogatto/modules/frogatto/images/os/frogatto-icon.png";
+    comment = description;
+    desktopName = "Frogatto";
+    genericName = "frogatto";
+    categories = [ "Game" "ArcadeGame" ];
+  };
+  inherit (data) version;
+in buildEnv {
+  name = "frogatto-${version}";
+
+  nativeBuildInputs = [ makeWrapper ];
+  paths = [ engine data desktopItem ];
+  pathsToLink = [
+    "/bin"
+    "/share/frogatto/data"
+    "/share/frogatto/images"
+    "/share/frogatto/modules"
+    "/share/applications"
+  ];
+
+  postBuild = ''
+    wrapProgram $out/bin/frogatto \
+      --chdir "$out/share/frogatto"
+  '';
+
+  meta = with lib; {
+    homepage = "https://frogatto.com";
+    description = description;
+    license = with licenses; [ cc-by-30 unfree ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ astro ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/frogatto/engine.nix b/nixpkgs/pkgs/games/frogatto/engine.nix
new file mode 100644
index 000000000000..95e2135660fd
--- /dev/null
+++ b/nixpkgs/pkgs/games/frogatto/engine.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, which
+, boost, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf
+, glew, zlib, icu, pkg-config, cairo, libvpx, glm
+}:
+
+stdenv.mkDerivation {
+  pname = "anura-engine";
+  version = "unstable-2023-02-27";
+
+  src = fetchFromGitHub {
+    owner = "anura-engine";
+    repo = "anura";
+    rev = "65d85b6646099db1d5cd25d31321bb434a3f94f1";
+    sha256 = "sha256-hb4Sn7uI+eXLaGb4zkEy4w+ByQJ6FqkoMUYFsyiFCeE=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    which pkg-config
+  ];
+
+  buildInputs = [
+    boost
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+    glew
+    zlib
+    icu
+    cairo
+    libvpx
+    glm
+  ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/frogatto
+    cp -ar data images modules $out/share/frogatto/
+    cp -a anura $out/bin/frogatto
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/anura-engine/anura";
+    description = "Game engine used by Frogatto";
+    license = licenses.zlib;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ astro ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/frotz/default.nix b/nixpkgs/pkgs/games/frotz/default.nix
new file mode 100644
index 000000000000..9b5256fc1c72
--- /dev/null
+++ b/nixpkgs/pkgs/games/frotz/default.nix
@@ -0,0 +1,43 @@
+{ fetchFromGitLab
+, libao
+, libmodplug
+, libsamplerate
+, libsndfile
+, libvorbis
+, ncurses
+, which
+, pkg-config
+, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  version = "2.53";
+  pname = "frotz";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.com";
+    owner = "DavidGriffith";
+    repo = "frotz";
+    rev = version;
+    sha256 = "sha256-xVC/iE71W/Wdy5aPGH9DtcVAHWCcg3HkEA3iDV6OYUo=";
+  };
+
+  nativeBuildInputs = [ which pkg-config ];
+  buildInputs = [ libao libmodplug libsamplerate libsndfile libvorbis ncurses ];
+  preBuild = ''
+    makeFlagsArray+=(
+      CC="cc"
+      CFLAGS="-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600"
+      LDFLAGS="-lncursesw -ltinfo"
+    )
+  '';
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://davidgriffith.gitlab.io/frotz/";
+    changelog = "https://gitlab.com/DavidGriffith/frotz/-/raw/${version}/NEWS";
+    description = "A z-machine interpreter for Infocom games and other interactive fiction";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ nicknovitski  ddelabru ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/games/frozen-bubble/default.nix b/nixpkgs/pkgs/games/frozen-bubble/default.nix
new file mode 100644
index 000000000000..6738f979d00b
--- /dev/null
+++ b/nixpkgs/pkgs/games/frozen-bubble/default.nix
@@ -0,0 +1,37 @@
+{ lib, fetchurl, perlPackages, pkg-config, SDL, SDL_mixer, SDL_Pango, glib
+, copyDesktopItems, makeDesktopItem
+}:
+perlPackages.buildPerlModule {
+  pname = "frozen-bubble";
+  version = "2.212";
+
+  src = fetchurl {
+    url = "mirror://cpan/authors/id/K/KT/KTHAKORE/Games-FrozenBubble-2.212.tar.gz";
+    sha256 = "721e04ff69c5233060656bfbf4002aa1aeadd96c95351f0c57bb85b6da35a305";
+  };
+  patches = [ ./fix-compilation.patch ];
+
+  nativeBuildInputs = [ copyDesktopItems pkg-config ];
+
+  buildInputs =  [ glib SDL SDL_mixer SDL_Pango perlPackages.SDL perlPackages.FileSlurp ];
+  propagatedBuildInputs = with perlPackages; [ AlienSDL CompressBzip2 FileShareDir FileWhich IPCSystemSimple LocaleMaketextLexicon ];
+
+  perlPreHook = "export LD=$CC";
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "frozen-bubble";
+      exec = "frozen-bubble";
+      desktopName = "Frozen Bubble";
+      genericName = "Frozen Bubble";
+      comment = "Arcade/reflex colour matching game";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = {
+    description = "Puzzle with Bubbles";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ puckipedia ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/frozen-bubble/fix-compilation.patch b/nixpkgs/pkgs/games/frozen-bubble/fix-compilation.patch
new file mode 100644
index 000000000000..e87dd0668dc2
--- /dev/null
+++ b/nixpkgs/pkgs/games/frozen-bubble/fix-compilation.patch
@@ -0,0 +1,33 @@
+diff --git a/Build.PL b/Build.PL
+index b029d1e..8737395 100644
+--- a/Build.PL
++++ b/Build.PL
+@@ -16,13 +16,14 @@ use Games::FrozenBubble;
+ my $prefix = Alien::SDL->config('prefix');
+ my $cflags = '-I'
+   . File::Spec->catfile( $prefix, 'include' )
++  . ' ' . `pkg-config --cflags SDL_mixer`
+   ;
+ $cflags .= ' -fnested-functions' if $^O =~ /darwin/;
+ ###!!! this looks strange, you perhaps meant "$cflags .= ..."
+ ###!!! I intended Alien::SDL to add -I$prefix/include automatically, please tell me when it does not work (kmx)
+ my $devnull = File::Spec->devnull();
+ my @cflags =  ExtUtils::CBuilder->new->split_like_shell( $cflags );
+-my @linkers = ( ExtUtils::CBuilder->new->split_like_shell( Alien::SDL->config('libs', '-lSDL_mixer', '-lSDL_Pango') ) );
++my @linkers = ( ExtUtils::CBuilder->new->split_like_shell( Alien::SDL->config('libs', '-lSDL_Pango',`pkg-config --libs SDL_mixer`) ) );
+ push @linkers, '-liconv'
+   if $^O =~ /win/i;    ###!!! really only Win needs this? ; BEWARE this matches also 'darwin', 'cygwin'!!!!
+ 
+diff --git a/inc/My/Builder.pm b/inc/My/Builder.pm
+index 2ebaf91..c420b9a 100644
+--- a/inc/My/Builder.pm
++++ b/inc/My/Builder.pm
+@@ -123,7 +123,7 @@ sub ACTION_server {
+             push @ofiles, $cbuilder->compile(
+                 source               => catfile($server_directory, $cfile),
+                 extra_compiler_flags => [
+-                    qw(-g -Wall -Werror -pipe), # verbatim from Makefile
++                    qw(-g -pipe), # verbatim from Makefile
+                     '-I' . $server_directory, # does not seem to be necessary
+                     $cbuilder->split_like_shell(`pkg-config glib-2.0 --cflags`),
+                     $cbuilder->split_like_shell(`pkg-config glib-2.0 --libs`),
diff --git a/nixpkgs/pkgs/games/fsg/default.nix b/nixpkgs/pkgs/games/fsg/default.nix
new file mode 100644
index 000000000000..282030023f74
--- /dev/null
+++ b/nixpkgs/pkgs/games/fsg/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, gtk2, glib, pkg-config, libGLU, libGL, wxGTK32, libX11, xorgproto, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "fsg";
+  version = "4.4";
+
+  src = fetchurl {
+    name = "fsg-src-${version}.tar.gz";
+    url = "https://github.com/ctrlcctrlv/wxsand/blob/master/fsg-src-${version}-ORIGINAL.tar.gz?raw=true";
+    sha256 = "1756y01rkvd3f1pkj88jqh83fqcfl2fy0c48mcq53pjzln9ycv8c";
+  };
+
+  patches = [ ./wxgtk-3.2.patch ];
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ glib libGLU libGL wxGTK32 libX11 xorgproto ];
+
+  preBuild = ''
+    sed -e '
+      s@currentProbIndex != 100@0@;
+    ' -i MainFrame.cpp
+    sed -re '/ctrans_prob/s/energy\[center][+]energy\[other]/(int)(fmin(energy[center]+energy[other],99))/g' -i Canvas.cpp
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/libexec
+    cp sand $out/libexec
+    echo -e '#!${runtimeShell}\nLC_ALL=C '$out'/libexec/sand "$@"' >$out/bin/fsg
+    chmod a+x $out/bin/fsg
+  '';
+
+  meta = {
+    description = "Cellular automata engine tuned towards the likes of Falling Sand";
+    maintainers = [ lib.maintainers.raskin ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/fsg/wxgtk-3.2.patch b/nixpkgs/pkgs/games/fsg/wxgtk-3.2.patch
new file mode 100644
index 000000000000..dff9f54aeeeb
--- /dev/null
+++ b/nixpkgs/pkgs/games/fsg/wxgtk-3.2.patch
@@ -0,0 +1,68 @@
+diff --git a/Canvas.cpp b/Canvas.cpp
+index 8c00727..5ee7756 100644
+--- a/Canvas.cpp
++++ b/Canvas.cpp
+@@ -889,7 +889,6 @@ void Canvas::Refresh(){
+   if (doDraw){
+     wxClientDC dc(this);
+ 
+-    dc.BeginDrawing();
+     
+     wxMemoryDC memdc;
+     wxImage image(g_width, g_height, bitmapdata, true);
+@@ -899,7 +898,6 @@ void Canvas::Refresh(){
+     dc.Blit(0,0,g_width, g_height, &memdc, 0, 0);
+     
+     if (!drawAll){
+-      dc.EndDrawing();
+       return;
+     }
+     else{
+@@ -912,7 +910,6 @@ void Canvas::Refresh(){
+     }
+     
+ 
+-    dc.EndDrawing();
+ 
+   }
+ }
+diff --git a/MainFrame.cpp b/MainFrame.cpp
+index c45107b..d93f9e1 100644
+--- a/MainFrame.cpp
++++ b/MainFrame.cpp
+@@ -178,7 +178,7 @@ MainFrame::MainFrame(const wxString& title, const wxPoint& pos, const wxSize& si
+       RHSizer->Add(RH4, 0, wxEXPAND | wxALL, 5);
+     }
+ 
+-    sizer->Add(g_canvas, 0, wxADJUST_MINSIZE | wxALL, 10);
++    sizer->Add(g_canvas, 0, wxALL, 10);
+     sizer->Add(RHSizer, 1, wxEXPAND);
+   }
+   this->SetSizer(sizer);
+@@ -1165,7 +1165,7 @@ void MainFrame::OnMenu(wxCommandEvent& event){
+   }
+   else if(event.GetId() == 1051){
+     //Load
+-    wxFileDialog dialog(this, _("Load from a file"), _(""), _(""), _("Any Image Files (*.*)|*.*"), wxOPEN);
++    wxFileDialog dialog(this, _("Load from a file"), _(""), _(""), _("Any Image Files (*.*)|*.*"), wxFD_OPEN);
+     
+     if (dialog.ShowModal() == wxID_OK){
+       sandboxFilename = dialog.GetPath();
+@@ -1174,7 +1174,7 @@ void MainFrame::OnMenu(wxCommandEvent& event){
+   }
+   else if(event.GetId() == 1052){
+     //Save
+-    wxFileDialog dialog(this, _("Save to a file"), _(""), _(""), _("PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp"), wxSAVE);
++    wxFileDialog dialog(this, _("Save to a file"), _(""), _(""), _("PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp"), wxFD_SAVE);
+     
+     if (dialog.ShowModal() == wxID_OK){
+       wxString filename = dialog.GetPath();
+@@ -1216,7 +1216,7 @@ void MainFrame::OnMenu(wxCommandEvent& event){
+   else if(event.GetId() == 1055){
+     //Load physics
+ 
+-    wxFileDialog dialog(this, _("Load from a file"), _(""), _(""), _("Physics Files (*.txt)|*.txt"), wxOPEN);
++    wxFileDialog dialog(this, _("Load from a file"), _(""), _(""), _("Physics Files (*.txt)|*.txt"), wxFD_OPEN);
+     if (dialog.ShowModal() == wxID_OK){
+       physicsFilename = dialog.GetPath();
+       loadPhysics(physicsFilename);
diff --git a/nixpkgs/pkgs/games/fteqw/default.nix b/nixpkgs/pkgs/games/fteqw/default.nix
new file mode 100644
index 000000000000..c4129d3974d6
--- /dev/null
+++ b/nixpkgs/pkgs/games/fteqw/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gzip
+, libvorbis
+, libmad
+, SDL2
+, SDL2_mixer
+, libpng
+, alsa-lib
+, gnutls
+, zlib
+, libjpeg
+, vulkan-loader
+, vulkan-headers
+, speex
+, libopus
+, xorg
+, libGL
+}@attrs:
+{
+  fteqw = import ./generic.nix (rec {
+    pname = "fteqw";
+
+    buildFlags = [ "m-rel" ];
+
+    nativeBuildInputs = [
+      vulkan-headers
+    ];
+
+    buildInputs = [
+      gzip
+      libvorbis
+      libmad
+      SDL2
+      SDL2_mixer
+      libpng
+      alsa-lib
+      gnutls
+      libjpeg
+      vulkan-loader
+      speex
+      libopus
+      xorg.libXrandr
+      xorg.libXcursor
+    ];
+
+    postFixup = ''
+      patchelf $out/bin/${pname} \
+        --add-needed ${SDL2}/lib/libSDL2.so \
+        --add-needed ${libGL}/lib/libGLX.so \
+        --add-needed ${libGL}/lib/libGL.so \
+        --add-needed ${lib.getLib gnutls}/lib/libgnutls.so \
+        --add-needed ${vulkan-loader}/lib/libvulkan.so
+    '';
+
+    description = "A hybrid and versatile game engine";
+  } // attrs);
+
+  fteqw-dedicated = import ./generic.nix (rec {
+    pname = "fteqw-dedicated";
+    releaseFile = "fteqw-sv";
+
+    buildFlags = [ "sv-rel" ];
+
+    buildInputs = [
+      gnutls
+      zlib
+    ];
+
+    postFixup = ''
+      patchelf $out/bin/${pname} \
+        --add-needed ${gnutls}/lib/libgnutls.so \
+    '';
+
+    description = "Dedicated server for FTEQW";
+  } // attrs);
+
+  fteqcc = import ./generic.nix ({
+    pname = "fteqcc";
+
+    buildFlags = [ "qcc-rel" ];
+
+    buildInputs = [
+      zlib
+    ];
+
+    description = "User friendly QuakeC compiler";
+  } // attrs);
+}
diff --git a/nixpkgs/pkgs/games/fteqw/generic.nix b/nixpkgs/pkgs/games/fteqw/generic.nix
new file mode 100644
index 000000000000..a525cf5a6c44
--- /dev/null
+++ b/nixpkgs/pkgs/games/fteqw/generic.nix
@@ -0,0 +1,61 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, libopus
+, xorg
+, pname
+, releaseFile ? pname
+, buildFlags
+, buildInputs
+, nativeBuildInputs ? []
+, postFixup ? ""
+, description
+, ... }:
+
+stdenv.mkDerivation {
+  inherit pname buildFlags buildInputs nativeBuildInputs postFixup;
+  version = "unstable-2023-08-03";
+
+  src = fetchFromGitHub {
+    owner = "fte-team";
+    repo = "fteqw";
+    rev = "3adec5d0a53ba9ae32a92fc0a805cf6d5ec107fb";
+    hash = "sha256-p/U02hwKI+YqlVXIS/7+gujknNDLr5L53unjvG5qLJU=";
+  };
+
+  makeFlags = [
+    "PKGCONFIG=$(PKG_CONFIG)"
+    "-C" "engine"
+  ];
+
+  enableParallelBuilding = true;
+  postPatch = ''
+    substituteInPlace ./engine/Makefile \
+      --replace "I/usr/include/opus" "I${libopus.dev}/include/opus"
+    substituteInPlace ./engine/gl/gl_vidlinuxglx.c \
+      --replace 'Sys_LoadLibrary("libXrandr"' 'Sys_LoadLibrary("${xorg.libXrandr}/lib/libXrandr.so"'
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 engine/release/${releaseFile} $out/bin/${pname}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    inherit description;
+    homepage = "https://fteqw.org";
+    longDescription = ''
+      FTE is a game engine baed on QuakeWorld able to
+      play games such as Quake 1, 2, 3, and Hexen 2.
+      It includes various features such as extended map
+      limits, vulkan and OpenGL renderers, a dedicated
+      server, and fteqcc, for easier QuakeC development
+    '';
+    maintainers = with maintainers; [ necrophcodr ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/galaxis/default.nix b/nixpkgs/pkgs/games/galaxis/default.nix
new file mode 100644
index 000000000000..a3847e73c8da
--- /dev/null
+++ b/nixpkgs/pkgs/games/galaxis/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, ncurses, xmlto }:
+
+with lib;
+stdenv.mkDerivation rec {
+
+  pname = "galaxis";
+  version = "1.10";
+
+  src = fetchurl{
+    url = "http://www.catb.org/~esr/galaxis/${pname}-${version}.tar.gz";
+    sha256 = "1181x3z4r0794v2bkpigb5fablw1nayj42wvhy2am79p7j1iqq5r";
+  };
+
+  buildInputs = [ ncurses xmlto ];
+
+  patchPhase = ''
+    sed -i\
+     -e 's|^install: galaxis\.6 uninstall|install: galaxis.6|'\
+     -e 's|usr/||g' -e 's|ROOT|DESTDIR|g'\
+     -e 's|install -m 755 -o 0 -g 0|install -m 755|' Makefile
+  '';
+
+  dontConfigure = true;
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  meta = {
+    description = "Rescue lifeboats lost in interstellar space";
+    longDescription = ''
+      Lifeboats from a crippled interstellar liner are adrift in a starfield. To
+      find them, you can place probes that look in all eight compass directions
+      and tell you how many lifeboats they see. If you drop a probe directly on
+      a lifeboat it will be revealed immediately. Your objective: find the
+      lifeboats as quickly as possible, before the stranded passengers run out
+      of oxygen!
+
+      This is a UNIX-hosted, curses-based clone of the nifty little Macintosh
+      freeware game Galaxis. It doesn't have the super-simple, point-and-click
+      interface of the original, but compensates by automating away some of the
+      game's simpler deductions.
+    '';
+    homepage = "http://catb.org/~esr/galaxis/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gambatte/fix-scons-paths.patch b/nixpkgs/pkgs/games/gambatte/fix-scons-paths.patch
new file mode 100644
index 000000000000..ea10ee4163b4
--- /dev/null
+++ b/nixpkgs/pkgs/games/gambatte/fix-scons-paths.patch
@@ -0,0 +1,15 @@
+diff --git a/libgambatte/SConstruct b/libgambatte/SConstruct
+index e882514..87e1eaa 100644
+--- a/libgambatte/SConstruct
++++ b/libgambatte/SConstruct
+@@ -5,7 +5,9 @@ vars = Variables()
+ vars.Add('CC')
+ vars.Add('CXX')
+ 
+-env = Environment(CPPPATH = ['src', 'include', '../common'],
++import os
++env = Environment(ENV = os.environ,
++                  CPPPATH = ['src', 'include', '../common'],
+                   CFLAGS = global_cflags + global_defines,
+                   CXXFLAGS = global_cxxflags + global_defines,
+                   variables = vars)
diff --git a/nixpkgs/pkgs/games/gambit/default.nix b/nixpkgs/pkgs/games/gambit/default.nix
new file mode 100644
index 000000000000..4bcd329171cc
--- /dev/null
+++ b/nixpkgs/pkgs/games/gambit/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, gambit-chess
+}:
+
+buildGoModule rec {
+  pname = "gambit";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "maaslalani";
+    repo = "gambit";
+    rev = "v${version}";
+    hash = "sha256-RLbD9JK1yJn30WWg7KWDjJoj4WXIoy3Kb8t2F8rFPuk=";
+  };
+
+  vendorHash = "sha256-d9fPlv+ZAzQA42I61B5JEzfYpfJc9vWBcLYTX/s5dhs=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.Version=v${version}"
+    "-X=main.CommitSHA=${src.rev}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd gambit \
+      --bash <($out/bin/gambit completion bash) \
+      --fish <($out/bin/gambit completion fish) \
+      --zsh <($out/bin/gambit completion zsh)
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = gambit-chess;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Play chess in your terminal";
+    homepage = "https://github.com/maaslalani/gambit";
+    changelog = "https://github.com/maaslalani/gambit/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gamehub/default.nix b/nixpkgs/pkgs/games/gamehub/default.nix
new file mode 100644
index 000000000000..87796d58c732
--- /dev/null
+++ b/nixpkgs/pkgs/games/gamehub/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, meson
+, ninja
+, vala
+, pkg-config
+, desktop-file-utils
+, glib
+, gtk3
+, glib-networking
+, libgee
+, libsoup
+, json-glib
+, sqlite
+, webkitgtk
+, libmanette
+, libXtst
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "GameHub";
+  version = "0.16.3-2";
+
+  src = fetchFromGitHub {
+    owner = "tkashkin";
+    repo = pname;
+    rev = "${version}-master";
+    hash = "sha256-dBGzXwDO9BvnEIcdfqlGnMzUdBqaVA96Ds0fY6eukes=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    glib-networking
+    gtk3
+    json-glib
+    libgee
+    libmanette
+    libsoup
+    libXtst
+    sqlite
+    webkitgtk
+  ];
+
+  meta = with lib; {
+    homepage = "https://tkashkin.github.io/projects/gamehub";
+    description = "Unified library for all your games";
+    longDescription = ''
+      GameHub is a unified library for all your games. It allows you to store
+      your games from different platforms into one program to make it easier
+      for you to manage your games.
+    '';
+    maintainers = with maintainers; [ pasqui23 ];
+    license = with licenses; [ gpl3Only ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gamepad-tool/default.nix b/nixpkgs/pkgs/games/gamepad-tool/default.nix
new file mode 100644
index 000000000000..b73a1d4f3c0d
--- /dev/null
+++ b/nixpkgs/pkgs/games/gamepad-tool/default.nix
@@ -0,0 +1,46 @@
+{ stdenvNoCC, fetchurl, dpkg, lib, qt5, autoPatchelfHook, SDL2 }:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "gamepad-tool";
+  version = "1.2";
+
+  src = fetchurl {
+    url = "https://generalarcade.com/gamepadtool/linux/gamepadtool_${finalAttrs.version}_amd64.deb";
+    hash = "sha256-ZuB0TOyT2B5QkU1o5h3/8PL85tBq06hlz5YclRanD88=";
+  };
+
+  nativeBuildInputs = [ dpkg qt5.wrapQtAppsHook autoPatchelfHook ];
+
+  unpackCmd = ''
+    mkdir -p root
+    dpkg-deb -x $curSrc root
+  '';
+
+  dontBuild = true;
+
+  buildInputs = [
+    SDL2
+    qt5.qtbase
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/applications
+    cp usr/bin/gamepad-tool $out/bin
+    cp -r usr/share/icons $out/share/icons
+    substitute usr/share/applications/gamepad-tool-debian.desktop \
+      $out/share/applications/gamepad-tool.desktop \
+      --replace "Exec=gamepad-tool" "Exec=$out/bin/gamepad-tool" \
+      --replace "/usr/share/icons/hicolor/256x256/apps/gamepad-tool.png" "$out/share/icons/hicolor/256x256/apps/gamepad-tool.png"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A simple GUI tool to create/modify gamepad mappings for games that use SDL2 Game Controller API";
+    homepage = "https://generalarcade.com/gamepadtool/";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ gador ];
+  };
+})
diff --git a/nixpkgs/pkgs/games/garden-of-coloured-lights/default.nix b/nixpkgs/pkgs/games/garden-of-coloured-lights/default.nix
new file mode 100644
index 000000000000..7012449f6afc
--- /dev/null
+++ b/nixpkgs/pkgs/games/garden-of-coloured-lights/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, autoconf, automake, allegro }:
+
+stdenv.mkDerivation rec {
+  pname = "garden-of-coloured-lights";
+  version = "1.0.9";
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ allegro ];
+
+  prePatch = ''
+    noInline='s/inline //'
+    sed -e "$noInline" -i src/stuff.c
+    sed -e "$noInline" -i src/stuff.h
+  '';
+
+  src = fetchurl {
+    url = "mirror://sourceforge/garden/${version}/garden-${version}.tar.gz";
+    sha256 = "1qsj4d7r22m5f9f5f6cyvam1y5q5pbqvy5058r7w0k4s48n77y6s";
+  };
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: main.o:src/main.c:58: multiple definition of
+  #     `eclass'; eclass.o:src/eclass.c:21: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  meta = with lib; {
+    description = "Old-school vertical shoot-em-up / bullet hell";
+    homepage = "https://garden.sourceforge.net/drupal/";
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl3;
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/gargoyle/darwin.sh b/nixpkgs/pkgs/games/gargoyle/darwin.sh
new file mode 100644
index 000000000000..ed0daec4ef1f
--- /dev/null
+++ b/nixpkgs/pkgs/games/gargoyle/darwin.sh
@@ -0,0 +1,54 @@
+#!@shell@
+
+set -e
+
+GARGDIST=build/macosx.release
+BUNDLE=${out}/Applications/Gargoyle.app/Contents
+TERPS="
+advsys/advsys
+agility/agility
+alan2/alan2
+alan3/alan3
+bocfel/bocfel
+frotz/frotz
+garglk/gargoyle
+geas/geas
+git/git
+glulxe/glulxe
+hugo/hugo
+jacl/jacl
+level9/level9
+magnetic/magnetic
+nitfol/nitfol
+scare/scare
+scott/scott
+tads/tadsr
+"
+
+mkdir -p $BUNDLE/MacOS
+mkdir -p $BUNDLE/Frameworks
+mkdir -p $BUNDLE/Resources
+mkdir -p $BUNDLE/PlugIns
+
+install_name_tool -id @executable_path/../Frameworks/libgarglk.dylib $GARGDIST/garglk/libgarglk.dylib
+for file in $TERPS
+do
+install_name_tool -change @executable_path/libgarglk.dylib @executable_path/../Frameworks/libgarglk.dylib $GARGDIST/$file || true
+cp -f $GARGDIST/$file $BUNDLE/PlugIns
+done
+
+cp -f garglk/launcher.plist $BUNDLE/Info.plist
+cp -f $GARGDIST/garglk/gargoyle $BUNDLE/MacOS/Gargoyle
+cp -f $GARGDIST/garglk/libgarglk.dylib $BUNDLE/Frameworks
+cp -f $GARGDIST/garglk/libgarglk.dylib $BUNDLE/PlugIns
+cp -f garglk/launchmac.nib $BUNDLE/Resources/MainMenu.nib
+cp -f garglk/garglk.ini $BUNDLE/Resources
+cp -f garglk/*.icns $BUNDLE/Resources
+cp -f licenses/* $BUNDLE/Resources
+
+mkdir $BUNDLE/Resources/Fonts
+cp fonts/LiberationMono*.ttf $BUNDLE/Resources/Fonts
+cp fonts/LinLibertine*.otf $BUNDLE/Resources/Fonts
+
+mkdir -p ${out}/bin
+ln -s $BUNDLE/MacOS/Gargoyle ${out}/bin/gargoyle
diff --git a/nixpkgs/pkgs/games/gargoyle/default.nix b/nixpkgs/pkgs/games/gargoyle/default.nix
new file mode 100644
index 000000000000..9be95457b41c
--- /dev/null
+++ b/nixpkgs/pkgs/games/gargoyle/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchFromGitHub, substituteAll, jam, cctools, pkg-config
+, SDL, SDL_mixer, SDL_sound, gtk2, libvorbis, smpeg }:
+
+let
+
+  jamenv = ''
+    unset AR
+  '' + (if stdenv.isDarwin then ''
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${lib.getDev SDL}/include/SDL"
+    export GARGLKINI="$out/Applications/Gargoyle.app/Contents/Resources/garglk.ini"
+  '' else ''
+    export NIX_LDFLAGS="$NIX_LDFLAGS -rpath $out/libexec/gargoyle"
+    export DESTDIR="$out"
+    export _BINDIR=libexec/gargoyle
+    export _APPDIR=libexec/gargoyle
+    export _LIBDIR=libexec/gargoyle
+    export GARGLKINI="$out/etc/garglk.ini"
+  '');
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "gargoyle";
+  version = "2019.1.1";
+
+  src = fetchFromGitHub {
+    owner = "garglk";
+    repo = "garglk";
+    rev = version;
+    sha256 = "0w54avmbp4i4zps2rb4acmpa641s6wvwbrln4vbdhcz97fx48nzz";
+  };
+
+  nativeBuildInputs = [ jam pkg-config ] ++ lib.optional stdenv.isDarwin cctools;
+
+  buildInputs = [ SDL SDL_mixer SDL_sound gtk2 ]
+    ++ lib.optionals stdenv.isDarwin [ smpeg libvorbis ];
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: build/linux.release/alan3/Location.o:(.bss+0x0): multiple definition of
+  #     `logFile'; build/linux.release/alan3/act.o:(.bss+0x0): first defined here
+  # TODO: drop once updated to 2022.1 or later.
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  buildPhase = jamenv + "jam -j$NIX_BUILD_CORES";
+
+  installPhase =
+  if stdenv.isDarwin then
+  (substituteAll {
+    inherit (stdenv) shell;
+    isExecutable = true;
+    src = ./darwin.sh;
+  })
+  else jamenv + ''
+    jam -j$NIX_BUILD_CORES install
+    mkdir -p "$out/bin"
+    ln -s ../libexec/gargoyle/gargoyle "$out/bin"
+    mkdir -p "$out/etc"
+    cp garglk/garglk.ini "$out/etc"
+    mkdir -p "$out/share/applications"
+    cp garglk/gargoyle.desktop "$out/share/applications"
+    mkdir -p "$out/share/icons/hicolor/32x32/apps"
+    cp garglk/gargoyle-house.png "$out/share/icons/hicolor/32x32/apps"
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "http://ccxvii.net/gargoyle/";
+    license = licenses.gpl2Plus;
+    description = "Interactive fiction interpreter GUI";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gav/default.nix b/nixpkgs/pkgs/games/gav/default.nix
new file mode 100644
index 000000000000..dc2868ba21b5
--- /dev/null
+++ b/nixpkgs/pkgs/games/gav/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchurl, SDL, SDL_image, SDL_mixer, SDL_net} :
+
+stdenv.mkDerivation rec {
+  pname = "gav";
+  version = "0.9.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gav/gav-${version}.tar.gz";
+    sha256 = "8f0deb8b2cd775b339229054f4f282583a4cfbcba9d27a6213cf910bab944f3e";
+  };
+
+  prePatch = ''
+    mkdir -p $out/bin
+    sed -e "s@/usr@$out@" -i Makefile
+    sed -e "s@/usr@$out@" -i Theme.h
+  '';
+
+  patches = [ ./gcc.patch ];
+  buildInputs = [SDL SDL_image SDL_mixer SDL_net];
+
+  meta = {
+    description = "Remake of AV Arcade Volleyball";
+    homepage = "https://gav.sourceforge.net/";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gav/gcc.patch b/nixpkgs/pkgs/games/gav/gcc.patch
new file mode 100644
index 000000000000..eb4c64727bce
--- /dev/null
+++ b/nixpkgs/pkgs/games/gav/gcc.patch
@@ -0,0 +1,12 @@
+diff --git a/aarg.h b/aarg.h
+index a212870..907671c 100644
+--- a/aarg.h
++++ b/aarg.h
+@@ -5,6 +5,7 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <unistd.h>
++#include <string.h>
+ #include <map>
+ #include <string>
+ #include <sstream>
diff --git a/nixpkgs/pkgs/games/gcompris/default.nix b/nixpkgs/pkgs/games/gcompris/default.nix
new file mode 100644
index 000000000000..4a5670bb9c3e
--- /dev/null
+++ b/nixpkgs/pkgs/games/gcompris/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, cmake
+, fetchurl
+, gettext
+, gst_all_1
+, lib
+, ninja
+, wrapQtAppsHook
+, qmlbox2d
+, qtbase
+, qtcharts
+, qtdeclarative
+, qtgraphicaleffects
+, qtmultimedia
+, qtquickcontrols2
+, qtsensors
+, qttools
+, qtxmlpatterns
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gcompris";
+  version = "3.3";
+
+  src = fetchurl {
+    url = "https://download.kde.org/stable/gcompris/qt/src/gcompris-qt-${version}.tar.xz";
+    hash = "sha256-8hqiq1wYw4irbOXCrwcJqTMuLISzSmSqPuw2Rn8XzQA=";
+  };
+
+  cmakeFlags = [
+    "-DQML_BOX2D_LIBRARY=${qmlbox2d}/${qtbase.qtQmlPrefix}/Box2D.2.1"
+  ];
+
+  nativeBuildInputs = [ cmake gettext ninja qttools wrapQtAppsHook ];
+
+  buildInputs = [
+    qmlbox2d
+    qtbase
+    qtcharts
+    qtdeclarative
+    qtgraphicaleffects
+    qtmultimedia
+    qtquickcontrols2
+    qtsensors
+    qtxmlpatterns
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+  ]);
+
+  postInstall = ''
+    install -Dm444 ../org.kde.gcompris.desktop     -t $out/share/applications
+    install -Dm444 ../org.kde.gcompris.appdata.xml -t $out/share/metainfo
+    install -Dm444 ../images/256-apps-gcompris-qt.png $out/share/icons/hicolor/256x256/apps/gcompris-qt.png
+
+    qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
+  '';
+
+  meta = with lib; {
+    description = "A high quality educational software suite, including a large number of activities for children aged 2 to 10";
+    homepage = "https://gcompris.net/";
+    license = licenses.gpl3Plus;
+    mainProgram = "gcompris-qt";
+    maintainers = with maintainers; [ guibou ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gcs/default.nix b/nixpkgs/pkgs/games/gcs/default.nix
new file mode 100644
index 000000000000..be8bb7017863
--- /dev/null
+++ b/nixpkgs/pkgs/games/gcs/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchFromGitHub, runCommand
+, jdk8, ant
+, jre8, makeWrapper
+}:
+
+let
+  gcs = fetchFromGitHub {
+    owner = "richardwilkes";
+    repo = "gcs";
+    rev = "gcs-4.8.0";
+    sha256 = "0k8am8vfwls5s2z4zj1p1aqy8gapn5vbr9zy66s5g048ch8ah1hm";
+  };
+  appleStubs = fetchFromGitHub {
+    owner = "richardwilkes";
+    repo = "apple_stubs";
+    rev = "gcs-4.3.0";
+    sha256 = "0m1qw30b19s04hj7nch1mbvv5s698g5dr1d1r7r07ykvk1yh7zsa";
+  };
+  toolkit = fetchFromGitHub {
+    owner = "richardwilkes";
+    repo = "toolkit";
+    rev = "gcs-4.8.0";
+    sha256 = "1ciwwh0wxk3pzsj6rbggsbg3l2f741qy7yx1ca4v7vflsma84f1n";
+  };
+  library = fetchFromGitHub {
+    owner = "richardwilkes";
+    repo = "gcs_library";
+    rev = "gcs-4.8.0";
+    sha256 = "085jpp9mpv5kw00zds9sywmfq31mrlbrgahnwcjkx0z9i22amz4g";
+  };
+in stdenv.mkDerivation rec {
+  pname = "gcs";
+  version = "4.8.0";
+
+  src = runCommand "${pname}-${version}-src" { preferLocalBuild = true; } ''
+    mkdir -p $out
+    cd $out
+
+    cp -r ${gcs} gcs
+    cp -r ${appleStubs} apple_stubs
+    cp -r ${toolkit} toolkit
+    cp -r ${library} gcs_library
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk8 jre8 ant ];
+  buildPhase = ''
+    cd apple_stubs
+    ant
+
+    cd ../toolkit
+    ant
+
+    cd ../gcs
+    ant
+
+    cd ..
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/java
+
+    find gcs/libraries toolkit/libraries apple_stubs/ \( -name '*.jar' -and -not -name '*-src.jar' \) -exec cp '{}' $out/share/java ';'
+
+    makeWrapper ${jre8}/bin/java $out/bin/gcs \
+      --set GCS_LIBRARY ${library} \
+      --add-flags "-cp $out/share/java/gcs-${version}.jar com.trollworks.gcs.app.GCS"
+  '';
+
+  meta = with lib; {
+    description = "A stand-alone, interactive, character sheet editor for the GURPS 4th Edition roleplaying game system";
+    homepage = "https://gurpscharactersheet.com/";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependencies as jars
+    ];
+    license = licenses.mpl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gemrb/default.nix b/nixpkgs/pkgs/games/gemrb/default.nix
new file mode 100644
index 000000000000..7768ccf76253
--- /dev/null
+++ b/nixpkgs/pkgs/games/gemrb/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, SDL2
+, SDL2_mixer
+, freetype
+, libGL
+, libiconv
+, libpng
+, libvlc
+, libvorbis
+, openal
+, python3
+, zlib
+}:
+
+let
+  # the GLES backend on rpi is untested as I don't have the hardware
+  backend =
+    if stdenv.hostPlatform.isx86 then "OpenGL" else "GLES";
+
+  withVLC = stdenv.isDarwin;
+
+  inherit (lib) optional optionalString;
+
+in
+stdenv.mkDerivation rec {
+  pname = "gemrb";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "gemrb";
+    repo = "gemrb";
+    rev = "v${version}";
+    hash = "sha256-riea48Jc9zYb19mf5sBunTp5l27PGRFd/B5KdCUWr6Y=";
+  };
+
+  buildInputs = [
+    SDL2
+    SDL2_mixer
+    freetype
+    libGL
+    libiconv
+    libpng
+    libvorbis
+    openal
+    python3
+    zlib
+  ]
+  ++ optional withVLC libvlc;
+
+  nativeBuildInputs = [ cmake ];
+
+  # libvlc isn't being detected properly as of 0.9.0, so set it
+  LIBVLC_INCLUDE_PATH = optionalString withVLC "${lib.getDev libvlc}/include";
+  LIBVLC_LIBRARY_PATH = optionalString withVLC "${lib.getLib libvlc}/lib";
+
+  cmakeFlags = [
+    "-DDATA_DIR=${placeholder "out"}/share/gemrb"
+    "-DEXAMPLE_CONF_DIR=${placeholder "out"}/share/doc/gemrb/examples"
+    "-DSYSCONF_DIR=/etc"
+    # use the Mesa drivers for video on ARM (harmless on x86)
+    "-DDISABLE_VIDEOCORE=ON"
+    "-DLAYOUT=opt"
+    "-DOPENGL_BACKEND=${backend}"
+    "-DOpenGL_GL_PREFERENCE=GLVND"
+  ];
+
+  postInstall = ''
+    for s in 36 48 72 96 144; do
+      install -Dm444 ../artwork/gemrb-logo-glow-''${s}px.png $out/share/icons/hicolor/''${s}x''${s}/gemrb.png
+    done
+    install -Dm444 ../artwork/gemrb-logo.png $out/share/icons/gemrb.png
+  '';
+
+  meta = with lib; {
+    description = "A reimplementation of the Infinity Engine, used by games such as Baldur's Gate";
+    longDescription = ''
+      GemRB (Game engine made with pre-Rendered Background) is a portable
+      open-source implementation of Bioware's Infinity Engine. It was written to
+      support pseudo-3D role playing games based on the Dungeons & Dragons
+      ruleset (Baldur's Gate and Icewind Dale series, Planescape: Torment).
+    '';
+    homepage = "https://gemrb.org/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gimx/conf.patch b/nixpkgs/pkgs/games/gimx/conf.patch
new file mode 100644
index 000000000000..875cc68824ac
--- /dev/null
+++ b/nixpkgs/pkgs/games/gimx/conf.patch
@@ -0,0 +1,26 @@
+diff --git a/core/config_reader.c b/core/config_reader.c
+index 451fc48..ed45f4d 100644
+--- a/core/config_reader.c
++++ b/core/config_reader.c
+@@ -1355,7 +1355,7 @@ int read_config_file(const char* file)
+   char file_path[PATH_MAX];
+ 
+   snprintf(file_path, sizeof(file_path), "%s%s%s%s", gimx_params.homedir, GIMX_DIR, CONFIG_DIR, file);
+-
++  if(getenv("GIMXCONF")) { snprintf(file_path, sizeof(file_path), "%s", file); }
+   if(read_file(file_path) == -1)
+   {
+     gerror("read_file failed\n");
+diff --git a/core/gimx.c b/core/gimx.c
+index 700cae9..9143d8b 100755
+--- a/core/gimx.c
++++ b/core/gimx.c
+@@ -192,7 +192,7 @@ void show_config()
+   char file_path[PATH_MAX];
+ 
+   snprintf(file_path, sizeof(file_path), "%s%s%s%s", gimx_params.homedir, GIMX_DIR, CONFIG_DIR, gimx_params.config_file);
+-
++  if(getenv("GIMXCONF")) { snprintf(file_path, sizeof(file_path), "%s", gimx_params.config_file); }
+   FILE * fp = gfile_fopen(file_path, "r");
+   if (fp == NULL)
+   {
diff --git a/nixpkgs/pkgs/games/gimx/custom/Dualshock4.xml b/nixpkgs/pkgs/games/gimx/custom/Dualshock4.xml
new file mode 100644
index 000000000000..45ee5ed7c1c1
--- /dev/null
+++ b/nixpkgs/pkgs/games/gimx/custom/Dualshock4.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <controller id="1" dpi="0" type="DS4">
+    <configuration id="1">
+      <trigger type="" id="" name="" button_id="" switch_back="no" delay="0"/>
+      <mouse_options_list/>
+      <intensity_list/>
+      <button_map>
+        <button id="abs_axis_10" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="3"/>
+        </button>
+        <button id="abs_axis_9" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="0"/>
+        </button>
+        <button id="abs_axis_8" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="1"/>
+        </button>
+        <button id="abs_axis_7" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="2"/>
+        </button>
+        <button id="abs_axis_11" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="4"/>
+        </button>
+        <button id="abs_axis_12" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="5"/>
+        </button>
+        <button id="abs_axis_0" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="8"/>
+        </button>
+        <button id="abs_axis_1" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="9"/>
+        </button>
+        <button id="abs_axis_15" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="11"/>
+        </button>
+        <button id="abs_axis_16" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="12"/>
+        </button>
+        <button id="abs_axis_2" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="10"/>
+        </button>
+        <button id="abs_axis_3" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="13"/>
+        </button>
+        <button id="abs_axis_4" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="14"/>
+        </button>
+        <button id="abs_axis_5" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="15"/>
+        </button>
+        <button id="abs_axis_6" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="button" id="16"/>
+        </button>
+      </button_map>
+      <axis_map>
+        <axis id="rel_axis_0" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="axis" id="0" dead_zone="0" multiplier="0.004" exponent="1.00" shape=""/>
+        </axis>
+        <axis id="rel_axis_1" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="axis" id="1" dead_zone="0" multiplier="0.004" exponent="1.00" shape=""/>
+        </axis>
+        <axis id="rel_axis_2" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="axis" id="3" dead_zone="0" multiplier="0.004" exponent="1.00" shape=""/>
+        </axis>
+        <axis id="rel_axis_3" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="axis" id="4" dead_zone="0" multiplier="0.004" exponent="1.00" shape=""/>
+        </axis>
+        <axis id="abs_axis_13" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="axis" id="2" dead_zone="0" multiplier="0.008" exponent="1.00" shape=""/>
+        </axis>
+        <axis id="abs_axis_14" label="">
+          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+          <event type="axis" id="5" dead_zone="0" multiplier="0.008" exponent="1.00" shape=""/>
+        </axis>
+      </axis_map>
+      <joystick_corrections_list/>
+      <force_feedback>
+        <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
+        <inversion enable="no"/>
+        <gain rumble="0" constant="0" spring="0" damper="0"/>
+      </force_feedback>
+    </configuration>
+  </controller>
+</root>
diff --git a/nixpkgs/pkgs/games/gimx/default.nix b/nixpkgs/pkgs/games/gimx/default.nix
new file mode 100644
index 000000000000..9c2b260f1dbf
--- /dev/null
+++ b/nixpkgs/pkgs/games/gimx/default.nix
@@ -0,0 +1,86 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, curl, libusb1, xorg, libxml2
+, ncurses5, bluez, libmhash, gimxPdpGamepad ? false }:
+
+let
+  gimx-config = fetchFromGitHub {
+    owner = "matlo";
+    repo = "GIMX-configurations";
+    rev = "c20300f24d32651d369e2b27614b62f4b856e4a0";
+    sha256 = "02wcjk8da188x7y0jf3p0arjdh9zbb0lla3fxdb28b1xyybfvx5p";
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "gimx";
+  version = "unstable-2021-08-31";
+
+  src = fetchFromGitHub {
+    owner = "matlo";
+    repo = "GIMX";
+    rev = "58d2098dce75ed4c90ae649460d3a7a150f4ef0a";
+    fetchSubmodules = true;
+    sha256 = "05kdv2qqr311c2p76hdlgvrq7b04vcpps5c80zn8b8l7p831ilgz";
+  };
+
+  patches = [ ./conf.patch ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [
+    curl libusb1 bluez libxml2 ncurses5 libmhash
+    xorg.libX11 xorg.libXi xorg.libXext
+  ];
+
+  postPatch = lib.optionals gimxPdpGamepad ''
+    substituteInPlace ./shared/gimxcontroller/include/x360.h \
+      --replace "0x045e" "0x0e6f" --replace "0x028e" "0x0213"
+    substituteInPlace ./loader/firmware/EMU360.hex \
+      --replace "1B210001" "1B211001" \
+      --replace "09210001" "09211001" \
+      --replace "5E048E021001" "6F0E13020001"
+  '';
+
+  makeFlags = [ "build-core" ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Needed with GCC 12
+    "-Wno-error=address"
+    "-Wno-error=deprecated-declarations"
+    "-Wno-error=use-after-free"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    substituteInPlace ./core/Makefile --replace "chmod ug+s" "echo"
+
+    export DESTDIR="$out"
+    make install-shared install-core
+    mv $out/usr/lib $out/lib
+    mv $out/usr/bin $out/bin
+    rmdir $out/usr
+
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share
+    cp -r ./loader/firmware $out/share/firmware
+    cp -r ${gimx-config}/Linux $out/share/config
+    cp -r ${./custom} $out/share/custom
+
+    makeWrapper $out/bin/gimx $out/bin/gimx-dualshock4 \
+      --set GIMXCONF 1 --add-flags "--nograb" --add-flags "-p /dev/ttyUSB0" \
+      --add-flags "-c $out/share/custom/Dualshock4.xml"
+
+    makeWrapper $out/bin/gimx $out/bin/gimx-xboxonepad \
+      --set GIMXCONF 1 --add-flags "--nograb" --add-flags "-p /dev/ttyUSB0" \
+      --add-flags "-c $out/share/config/XOnePadUsb.xml"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/matlo/GIMX";
+    description = "Game Input Multiplexer";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bb2020 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gl-117/default.nix b/nixpkgs/pkgs/games/gl-117/default.nix
new file mode 100644
index 000000000000..f135c93ff04f
--- /dev/null
+++ b/nixpkgs/pkgs/games/gl-117/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl
+, libGLU, libGL, SDL, freeglut, SDL_mixer, autoconf, automake, libtool
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gl-117";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/gl-117/gl-117/GL-117%20Source/${pname}-${version}.tar.bz2";
+    sha256 = "1yvg1rp1yijv0b45cz085b29x5x0g5fkm654xdv5qwh2l6803gb4";
+  };
+
+  nativeBuildInputs = [ automake autoconf ];
+  buildInputs = [ libGLU libGL SDL freeglut SDL_mixer libtool ];
+
+  meta = with lib; {
+    description = "An air combat simulator";
+    homepage = "https://sourceforge.net/projects/gl-117";
+    maintainers = with maintainers; [ raskin ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gl-gsync-demo/default.nix b/nixpkgs/pkgs/games/gl-gsync-demo/default.nix
new file mode 100644
index 000000000000..968d4d5e4a3d
--- /dev/null
+++ b/nixpkgs/pkgs/games/gl-gsync-demo/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, libX11, freeglut, glew, libXNVCtrl, libXext, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "gl-gsync-demo";
+  version = "unstable-2020-12-27";
+
+  src = fetchFromGitHub {
+    owner = "dahenry";
+    repo = "gl-gsync-demo";
+    rev = "4fd963a8ad880dc2d846394c8c80b2091a119591";
+    sha256 = "1innsmpsd9n9ih80v16rhj2ijrl28jd7x6a4jmxdirba7mjibm8d";
+  };
+
+  buildInputs = [ libX11 freeglut glew libXNVCtrl libXext ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D gl-gsync-demo -t $out/bin/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    license = with licenses; mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ atemu ];
+    description = "A very basic OpenGL demo for testing NVIDIA's G-SYNC technology on Linux";
+    longDescription = ''
+      The demo simply draws a vertical bar moving across the screen at constant speed, but deliberately rendered at a variable frame rate.
+
+      The min and max frame rates can be manually changed at runtime, by step of 10 fps and with a min of 10 fps.
+
+      The demo also allows to toggle V-Sync on/off.
+    '';
+    homepage = "https://github.com/dahenry/gl-gsync-demo";
+  };
+}
diff --git a/nixpkgs/pkgs/games/globulation/default.nix b/nixpkgs/pkgs/games/globulation/default.nix
new file mode 100644
index 000000000000..039098f87da5
--- /dev/null
+++ b/nixpkgs/pkgs/games/globulation/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchurl, libGLU, libGL, SDL, scons, SDL_ttf, SDL_image, zlib, SDL_net
+, speex, libvorbis, libogg, boost, fribidi, bsdiff
+, fetchpatch
+}:
+let
+  version = "0.9.4";
+  patchlevel = "4";
+  tutorial4patch = fetchurl {
+    url = "http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=34;filename=tutorial-part4.map.bspatch;att=1;bug=595448";
+    name = "globulation2-tutorial4-map-patch-debian.bspatch";
+    sha256 = "d3511ac0f822d512c42abd34b3122f2990862d3d0af6ce464ff372f5bd7f35e9";
+  };
+in
+stdenv.mkDerivation rec {
+  name = "glob2-${version}.${patchlevel}";
+
+  src = fetchurl {
+    url = "mirror://savannah/glob2/${version}/${name}.tar.gz";
+    sha256 = "1f0l2cqp2g3llhr9jl6jj15k0wb5q8n29vqj99xy4p5hqs78jk8g";
+  };
+
+  patches = [ ./header-order.patch ./public-buildproject.patch
+    (fetchpatch {
+      url = "https://bitbucket.org/giszmo/glob2/commits/c9dc715624318e4fea4abb24e04f0ebdd9cd8d2a/raw";
+      sha256 = "0017xg5agj3dy0hx71ijdcrxb72bjqv7x6aq7c9zxzyyw0mkxj0k";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/g/glob2/0.9.4.4-6/debian/patches/10_pthread_underlinkage.patch";
+      sha256 = "sha256-L9POADlkgQbUQEUmx4s3dxXG9tS0w2IefpRGuQNRMI0=";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/g/glob2/0.9.4.4-6/debian/patches/link-boost-system.patch";
+      sha256 = "sha256-ne6F2ZowB+TUmg3ePuUoPNxXI0ZJC6HEol3oQQHJTy4=";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/g/glob2/0.9.4.4-6/debian/patches/scons.patch";
+      sha256 = "sha256-Gah7SoVcd/Aljs0Nqo3YF0lZImUWtrGM4HbbQ4yrhHU=";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/g/glob2/0.9.4.4-6/debian/patches/boost-1.69.patch";
+      sha256 = "sha256-D7agFR4uyIHxQz690Q8EHPF+rTEoiGUpgkm7r5cL5SI=";
+    })
+  ];
+
+  postPatch = ''
+    cp campaigns/tutorial-part4.map{,.orig}
+    bspatch  campaigns/tutorial-part4.map{.orig,} ${tutorial4patch}
+    sed -i -e "s@env = Environment()@env = Environment( ENV = os.environ )@" SConstruct
+  '';
+
+  nativeBuildInputs = [ scons ];
+  buildInputs = [ libGLU libGL SDL SDL_ttf SDL_image zlib SDL_net speex libvorbis libogg boost fribidi bsdiff ];
+
+  postConfigure = ''
+    sconsFlags+=" BINDIR=$out/bin"
+    sconsFlags+=" INSTALLDIR=$out/share/globulation2"
+    sconsFlags+=" DATADIR=$out/share/globulation2/glob2"
+  '';
+
+  NIX_LDFLAGS = "-lboost_system";
+
+  meta = with lib; {
+    description = "RTS without micromanagement";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+  passthru.updateInfo.downloadPage = "http://globulation2.org/wiki/Download_and_Install";
+}
diff --git a/nixpkgs/pkgs/games/globulation/header-order.patch b/nixpkgs/pkgs/games/globulation/header-order.patch
new file mode 100644
index 000000000000..6c8dd922c255
--- /dev/null
+++ b/nixpkgs/pkgs/games/globulation/header-order.patch
@@ -0,0 +1,23 @@
+With gcc 4.4, compilation of libgag/src/TextStream.cpp fails with the error: 
+'class GAGCore::StreamBackend' has no member named 'getc'. Reordering 
+#include's solves the problem.
+
+Patch from Debian.
+
+Index: glob2-0.9.4.1/libgag/src/TextStream.cpp
+===================================================================
+--- glob2-0.9.4.1.orig/libgag/src/TextStream.cpp        2009-06-27 20:19:38.000000000 +0400
++++ glob2-0.9.4.1/libgag/src/TextStream.cpp     2009-06-27 20:20:22.000000000 +0400
+@@ -17,11 +17,11 @@
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+ 
+-#include <TextStream.h>
+ #include <assert.h>
+ #include <fstream>
+ #include <iostream>
+ #include <stack>
++#include <TextStream.h>
+ #ifdef WIN32
+ #define snprintf _snprintf
+ #define vsnprintf _vsnprintf
diff --git a/nixpkgs/pkgs/games/globulation/public-buildproject.patch b/nixpkgs/pkgs/games/globulation/public-buildproject.patch
new file mode 100644
index 000000000000..1eaedf08820d
--- /dev/null
+++ b/nixpkgs/pkgs/games/globulation/public-buildproject.patch
@@ -0,0 +1,21 @@
+diff -Nru glob2-0.9.4.4/src/Game.h glob2-0.9.4.4.new/src/Game.h
+--- glob2-0.9.4.4/src/Game.h	2009-08-29 16:39:06.000000000 -0400
++++ glob2-0.9.4.4.new/src/Game.h	2015-08-29 00:59:07.843398596 -0400
+@@ -148,7 +148,7 @@
+ 		TOP_TO_BOTTOM,
+ 		BOTTOM_TO_TOP
+ 	};
+-	
++public:	
+ 	struct BuildProject
+ 	{
+ 		int posX;
+@@ -158,7 +158,7 @@
+ 		int unitWorking;
+ 		int unitWorkingFuture;
+ 	};
+-	
++private:	
+ 	///Initiates Game
+ 	void init(GameGUI *gui, MapEdit* edit);
+ 
diff --git a/nixpkgs/pkgs/games/gltron/default.nix b/nixpkgs/pkgs/games/gltron/default.nix
new file mode 100644
index 000000000000..540170c49b21
--- /dev/null
+++ b/nixpkgs/pkgs/games/gltron/default.nix
@@ -0,0 +1,30 @@
+{lib, stdenv, fetchurl, SDL, libGLU, libGL, zlib, libpng, libvorbis, libmikmod, SDL_sound } :
+
+stdenv.mkDerivation rec {
+  pname = "gltron";
+  version = "0.70";
+  src = fetchurl {
+    url = "mirror://sourceforge/gltron/gltron-${version}-source.tar.gz";
+    sha256 = "e0c8ebb41a18a1f8d7302a9c2cb466f5b1dd63e9a9966c769075e6b6bdad8bb0";
+  };
+
+  patches = [ ./gentoo-prototypes.patch ];
+
+  postPatch = ''
+     # Fix https://sourceforge.net/p/gltron/bugs/15
+     sed -i /__USE_MISC/d lua/src/lib/liolib.c
+  '';
+
+  # The build fails, unless we disable the default -Wall -Werror
+  configureFlags = [ "--disable-warn" ];
+
+  buildInputs = [ SDL libGLU libGL zlib libpng libvorbis libmikmod SDL_sound ];
+
+  meta = {
+    homepage = "http://www.gltron.org/";
+    description = "Game based on the movie Tron";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gltron/gentoo-prototypes.patch b/nixpkgs/pkgs/games/gltron/gentoo-prototypes.patch
new file mode 100644
index 000000000000..71078ae553f7
--- /dev/null
+++ b/nixpkgs/pkgs/games/gltron/gentoo-prototypes.patch
@@ -0,0 +1,27 @@
+Taken from:
+http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/games-action/gltron/files/gltron-0.70-prototypes.patch?revision=1.1&view=markup
+
+scripting.h declares these params as const so make sure they're the same.
+
+--- a/nebu/scripting/scripting.c
++++ b/nebu/scripting/scripting.c
+@@ -169,16 +169,16 @@
+   return status;
+ }    
+ 
+-void scripting_RunFile(char *name) {
++void scripting_RunFile(const char *name) {
+   lua_dofile(L, name);
+ }
+ 
+-void scripting_Run(char *command) {
++void scripting_Run(const char *command) {
+   /* fprintf(stderr, "[command] %s\n", command); */
+   lua_dostring(L, command);
+ }
+ 
+-void scripting_RunFormat(char *format, ... ) {
++void scripting_RunFormat(const char *format, ... ) {
+   char buf[4096];
+   va_list ap;
+   va_start(ap, format);
diff --git a/nixpkgs/pkgs/games/gmad/default.nix b/nixpkgs/pkgs/games/gmad/default.nix
new file mode 100644
index 000000000000..97538679ee59
--- /dev/null
+++ b/nixpkgs/pkgs/games/gmad/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, premake4, bootil }:
+
+stdenv.mkDerivation rec {
+  pname = "gmad";
+  version = "unstable-2020-02-24";
+
+  meta = {
+    description = "Garry's Mod Addon Creator and Extractor";
+    homepage = "https://github.com/Facepunch/gmad";
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.abigailbuccaneer ];
+    platforms = lib.platforms.all;
+  };
+
+  src = fetchFromGitHub {
+    owner = "Facepunch";
+    repo = "gmad";
+    rev = "5236973a2fcbb3043bdd3d4529ce68b6d938ad93";
+    sha256="04an17nvnj38mpi0w005v41ib8ynb5qhgrdkmsda4hq7l1gn276s";
+  };
+
+  buildInputs = [ premake4 bootil ];
+
+  targetName =
+    if stdenv.isLinux then "gmad_linux"
+    else if stdenv.isDarwin then "gmad_osx"
+    else "gmad";
+
+  premakeFlags = [ "--bootil_lib=${bootil}/lib" "--bootil_inc=${bootil}/include" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${targetName} $out/bin/gmad
+  '';
+}
diff --git a/nixpkgs/pkgs/games/gnome-hexgl/default.nix b/nixpkgs/pkgs/games/gnome-hexgl/default.nix
new file mode 100644
index 000000000000..54d74ffa5fa0
--- /dev/null
+++ b/nixpkgs/pkgs/games/gnome-hexgl/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv
+, fetchFromGitHub
+, ninja
+, meson
+, pkg-config
+, gthree
+, gsound
+, libepoxy
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-hexgl";
+  version = "unstable-2020-07-24";
+
+  src = fetchFromGitHub {
+    owner = "alexlarsson";
+    repo = "gnome-hexgl";
+    rev = "f47a351055a235730795341dcd6b2397cc4bfa0c";
+    sha256 = "yZWGymaSUfnCP8VAEdDH64w0muSnRK/XPi1/IqTrE4k=";
+  };
+
+  nativeBuildInputs = [
+    ninja
+    meson
+    pkg-config
+  ];
+
+  buildInputs = [
+    gthree
+    gsound
+    libepoxy
+    gtk3
+  ];
+
+  meta = with lib; {
+    description = "Gthree port of HexGL";
+    homepage = "https://github.com/alexlarsson/gnome-hexgl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gnonograms/default.nix b/nixpkgs/pkgs/games/gnonograms/default.nix
new file mode 100644
index 000000000000..2446384ff719
--- /dev/null
+++ b/nixpkgs/pkgs/games/gnonograms/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, vala
+, meson
+, ninja
+, pkg-config
+, desktop-file-utils
+, appstream
+, python3
+, shared-mime-info
+, wrapGAppsHook
+, gtk3
+, pantheon
+, libgee
+, libhandy
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnonograms";
+  version = "2.1.2";
+
+  src = fetchFromGitHub {
+    owner = "jeremypw";
+    repo = "gnonograms";
+    rev = "v${version}";
+    sha256 = "sha256-TkEVjrwlr4Q5FsfcdY+9fxwaMq+DFs0RwGI2E+GT5Mk=";
+  };
+
+  postPatch = ''
+    patchShebangs meson/post_install.py
+  '';
+
+  nativeBuildInputs = [
+    vala
+    meson
+    ninja
+    pkg-config
+    desktop-file-utils
+    appstream
+    python3
+    shared-mime-info
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    pantheon.granite
+    libgee
+    libhandy
+  ];
+
+  meta = with lib; {
+    description = "Nonograms puzzle game";
+    longDescription = ''
+      An implementation of the Japanese logic puzzle "Nonograms" written in
+      Vala, allowing the user to:
+      * Draw puzzles
+      * Generate random puzzles of chosen difficulty
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+    homepage = "https://github.com/jeremypw/gnonograms";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gnubg/default.nix b/nixpkgs/pkgs/games/gnubg/default.nix
new file mode 100644
index 000000000000..84bc7f5df8af
--- /dev/null
+++ b/nixpkgs/pkgs/games/gnubg/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, python3, gtk2, readline,
+  copyDesktopItems, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+  pname = "gnubg";
+  version = "1.07.001";
+
+  src = fetchurl {
+    url = "mirror://gnu/gnubg/gnubg-release-${version}-sources.tar.gz";
+    hash = "sha256-cjmXKUGcrZ8RLDBmoS0AANpFCkVq3XsJTYkVUGnWgh4=";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems pkg-config python3 glib ];
+
+  buildInputs = [ gtk2 readline ];
+
+  strictDeps = true;
+
+  configureFlags = [ "--with-gtk" "--with--board3d" ];
+
+  desktopItems = makeDesktopItem {
+    desktopName = "GNU Backgammon";
+    name = pname;
+    genericName = "Backgammon";
+    comment = meta.description;
+    exec = pname;
+    icon = pname;
+    categories = [ "Game" "GTK" "StrategyGame" ];
+  };
+
+  meta = with lib;
+    { description = "World class backgammon application";
+      homepage = "https://www.gnu.org/software/gnubg/";
+      license = licenses.gpl3;
+      maintainers = [ maintainers.ehmry ];
+      platforms = platforms.linux;
+    };
+}
diff --git a/nixpkgs/pkgs/games/gnuchess/default.nix b/nixpkgs/pkgs/games/gnuchess/default.nix
new file mode 100644
index 000000000000..3acf6a8aa62d
--- /dev/null
+++ b/nixpkgs/pkgs/games/gnuchess/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, flex, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "gnuchess";
+  version = "6.2.9";
+
+  src = fetchurl {
+    url = "mirror://gnu/chess/gnuchess-${version}.tar.gz";
+    sha256 = "sha256-3fzCC911aQCpq2xCx9r5CiiTv38ZzjR0IM42uuvEGJA=";
+  };
+
+  buildInputs = [
+    flex
+  ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/gnuchessx --set PATH "$out/bin"
+    wrapProgram $out/bin/gnuchessu --set PATH "$out/bin"
+  '';
+
+  meta = with lib; {
+    description = "GNU Chess engine";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gnugo/default.nix b/nixpkgs/pkgs/games/gnugo/default.nix
new file mode 100644
index 000000000000..3b8449ab4c7f
--- /dev/null
+++ b/nixpkgs/pkgs/games/gnugo/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "gnugo";
+  version = "3.8";
+
+  src = fetchurl {
+    url = "mirror://gnu/gnugo/gnugo-${version}.tar.gz";
+    sha256 = "0wkahvqpzq6lzl5r49a4sd4p52frdmphnqsfdv7gdp24bykdfs6s";
+  };
+
+  patches = [
+    # Pull patch pending upstream inclusion for -fno-common toolchain support:
+    #   https://savannah.gnu.org/patch/index.php?10208
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://savannah.gnu.org/patch/download.php?file_id=53240";
+      sha256 = "0s96qvmx244vq5pv2nzf7x863kq2y5skzjhbpyzaajfkldbj0sw4";
+    })
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "GNU Go - A computer go player";
+    homepage = "https://www.gnu.org/software/gnugo/";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gnujump/default.nix b/nixpkgs/pkgs/games/gnujump/default.nix
new file mode 100644
index 000000000000..1c918395d40b
--- /dev/null
+++ b/nixpkgs/pkgs/games/gnujump/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, makeDesktopItem, copyDesktopItems, fetchurl, SDL, SDL_image, SDL_mixer }:
+
+stdenv.mkDerivation rec {
+  pname = "gnujump";
+  version = "1.0.8";
+  src = fetchurl {
+    url = "mirror://gnu/gnujump/${pname}-${version}.tar.gz";
+    sha256 = "05syy9mzbyqcfnm0hrswlmhwlwx54f0l6zhcaq8c1c0f8dgzxhqk";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems ];
+  buildInputs = [ SDL SDL_image SDL_mixer ];
+
+  NIX_LDFLAGS = "-lm";
+
+  desktopItems = [ (makeDesktopItem {
+    name = "gnujump";
+    exec = "gnujump";
+    icon = "gnujump";
+    desktopName = "GNUjump";
+    comment     = "Jump up the tower to survive";
+    categories  = [ "Game" "ArcadeGame" ];
+  }) ];
+
+  postInstall = ''
+    install -Dm644 ${./gnujump.xpm} $out/share/pixmaps/gnujump.xpm
+  '';
+
+  meta = with lib; {
+    homepage = "https://jump.gnu.sinusoid.es/index.php?title=Main_Page";
+    description = "A clone of the simple yet addictive game Xjump";
+    longDescription = ''
+      The goal in this game is to jump to the next floor trying not to fall
+      down. As you go upper in the Falling Tower the floors will fall faster.
+      Try to survive longer get upper than anyone. It might seem too simple but
+      once you've tried you'll realize how addictive this is.
+    '';
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gnujump/gnujump.xpm b/nixpkgs/pkgs/games/gnujump/gnujump.xpm
new file mode 100644
index 000000000000..d8b6bcb4c8cb
--- /dev/null
+++ b/nixpkgs/pkgs/games/gnujump/gnujump.xpm
@@ -0,0 +1,64 @@
+/* XPM */
+static char *gnujump[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 26 1 ",
+"  c black",
+". c #D10000",
+"X c #E80000",
+"o c #E90000",
+"O c #F90000",
+"+ c red",
+"@ c #00C500",
+"# c #00DC00",
+"$ c #00DD00",
+"% c #00EF00",
+"& c #00FA00",
+"* c #00FB00",
+"= c green",
+"- c #FFC882",
+"; c #FFC982",
+": c #FFD298",
+"> c #FFD299",
+", c #FFD399",
+"< c #FFDAAB",
+"1 c #FFDBAB",
+"2 c #FFDBAC",
+"3 c #FFE1BA",
+"4 c #FFE5C3",
+"5 c #FFE5C4",
+"6 c #FFE7C7",
+"7 c None",
+/* pixels */
+"77777777777777777777777777777777",
+"77777777777777777777777777777777",
+"7777777777777     77777777777777",
+"77777777777         777777777777",
+"7777777777           77777777777",
+"777777777             7777777777",
+"777777777       ;;;-- 7777777777",
+"77777777      ::>>,>1: 777777777",
+"77777777     :<1<1:>2: 777777777",
+"77777777    :1331:  :: 7777 7777",
+"77777777   :<3431:  :, 777 o 777",
+"777  777  ->236531>:2: 77 oo 777",
+"77 .o  77 -,145443<1, 77 oOo 777",
+"77 .ooo 7 -:13333312: 7 oOo 7777",
+"777 oOOo   :,11<<<::   oOOo 7777",
+"7777 XOOooo  :::>:  XooO+Oo 7777",
+"77777 oOOOOoo     ooOOO+Oo 77777",
+"777777 oOO+OOoooooOO++OOo 777777",
+"7777777 XoOOOOOOOOOOOOoo 7777777",
+"77777777  oooooooooooo  77777777",
+"7777777777            7777777777",
+"777777777 @@@@@@@@@@@@   7777777",
+"77777777 #######$$##$#### 777777",
+"7777777 #%%%%%%%%%%%%%%%%# 77777",
+"7777777 #%*&*&*%%%%%%*&*%# 77777",
+"777777 #%*=**%%#####$%%&*%# 7777",
+"777777 #%&*%%##      ##%&%# 7777",
+"77777 #%*%%##  777777  #%%# 7777",
+"77777 #%%#$   777777777 #%%# 777",
+"7777 @%##   777777777777 #%# 777",
+"7777 ##  7777777777777777 $# 777",
+"77777  7777777777777777777  7777"
+};
diff --git a/nixpkgs/pkgs/games/gnushogi/default.nix b/nixpkgs/pkgs/games/gnushogi/default.nix
new file mode 100644
index 000000000000..2557b0571ea9
--- /dev/null
+++ b/nixpkgs/pkgs/games/gnushogi/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnushogi";
+  version = "1.4.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/gnushogi/${pname}-${version}.tar.gz";
+    hash = "sha256-HsxIqGYwPGNlJVKzJdaF5+9emJMkQIApGmHZZQXVKyk=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/g/gnushogi/1.4.2-7/debian/patches/01-make-dont-ignore";
+      hash = "sha256-Aw0zfH+wkj+rQQzKIn6bSilP76YIO27FwJ8n1UzG6ow=";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/g/gnushogi/1.4.2-7/debian/patches/globals";
+      hash = "sha256-wZJBPMYSz4n1kOyLmR9QOp70650R9xXQUWD5hvaMRok=";
+    })
+  ];
+
+  buildInputs = [ zlib ];
+
+  meta = with lib; {
+    description = "GNU implementation of Shogi, also known as Japanese Chess";
+    homepage = "https://www.gnu.org/software/gnushogi/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ciil ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gogdl/default.nix b/nixpkgs/pkgs/games/gogdl/default.nix
new file mode 100644
index 000000000000..d5b3d0a5a544
--- /dev/null
+++ b/nixpkgs/pkgs/games/gogdl/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, fetchpatch
+, writeScript
+, buildPythonApplication
+, fetchFromGitHub
+, pythonOlder
+, setuptools
+, requests
+, cacert
+}:
+
+buildPythonApplication rec {
+  pname = "gogdl";
+  version = "0.7.3";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Heroic-Games-Launcher";
+    repo = "heroic-gogdl";
+    rev = "89d15f1593cc26f15a5f8f409bb623764c095d37";
+    hash = "sha256-EECpXGVhcwihKB8fLObVvYzFD8uh7CxYKtFiGc0Jqbk=";
+  };
+
+  disabled = pythonOlder "3.8";
+
+  propagatedBuildInputs = [
+    setuptools
+    requests
+  ];
+
+  pythonImportsCheck = [ "gogdl" ];
+
+  meta = with lib; {
+    description = "GOG Downloading module for Heroic Games Launcher";
+    homepage = "https://github.com/Heroic-Games-Launcher/heroic-gogdl";
+    license = with licenses; [ gpl3 ];
+    maintainers = with maintainers; [ aidalgol ];
+  };
+
+  # Upstream no longer create git tags when bumping the version, so we have to
+  # extract it from the source code on the main branch.
+  passthru.updateScript = writeScript "gogdl-update-script" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl gnused jq common-updater-scripts
+    set -eou pipefail;
+
+    owner=Heroic-Games-Launcher
+    repo=heroic-gogdl
+    path='gogdl/__init__.py'
+
+    version=$(
+      curl --cacert "${cacert}/etc/ssl/certs/ca-bundle.crt" \
+      https://raw.githubusercontent.com/$owner/$repo/main/$path |
+      sed -n 's/^\s*version\s*=\s*"\([0-9]\.[0-9]\.[0-9]\)"\s*$/\1/p')
+
+    commit=$(curl --cacert "${cacert}/etc/ssl/certs/ca-bundle.crt" \
+      https://api.github.com/repos/$owner/$repo/commits?path=$path |
+      jq -r '.[0].sha')
+
+    update-source-version \
+      ${pname} \
+      "$version" \
+      --file=./pkgs/games/gogdl/default.nix \
+      --rev=$commit
+  '';
+}
diff --git a/nixpkgs/pkgs/games/gogui/default.nix b/nixpkgs/pkgs/games/gogui/default.nix
new file mode 100644
index 000000000000..212f0af0e8e3
--- /dev/null
+++ b/nixpkgs/pkgs/games/gogui/default.nix
@@ -0,0 +1,95 @@
+{ ant
+, docbook-xsl-ns
+, docbook_xml_dtd_42
+, fetchFromGitHub
+, imagemagick
+, lib
+, libxslt
+, makeWrapper
+, openjdk
+, stdenv
+}:
+
+let
+  version = "1.5.3";
+in stdenv.mkDerivation {
+  pname = "gogui";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "Remi-Coulom";
+    repo = "gogui";
+    rev = "v${version}";
+    hash = "sha256-GezFhNYB542JnAIUeUVa188+SR5mCedwj0hZN8L83UQ=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    ant
+  ];
+
+  buildInputs = [
+    docbook-xsl-ns
+    imagemagick
+    libxslt
+    openjdk
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    substituteInPlace doc/manual/xml/book.xml \
+      --replace http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd \
+      ${docbook_xml_dtd_42}/xml/dtd/docbook/docbookx.dtd
+    substituteInPlace doc/manual/xml/manpages.xml \
+      --replace http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd \
+      ${docbook_xml_dtd_42}/xml/dtd/docbook/docbookx.dtd
+
+    # generate required gui images from svg
+    # see https://github.com/Remi-Coulom/gogui/issues/36
+    sizes=( 16x16 24x24 32x32 48x48 64x64 )
+    for i in src/net/sf/gogui/images/*.svg; do
+      for j in ''${sizes[@]}; do
+        convert $i -resize $j src/net/sf/gogui/images/$(basename $i .svg)-''${j}.png
+      done
+    done
+
+    for i in src/net/sf/gogui/images/gogui-{black,white,setup}.svg; do
+      convert $i -resize 8x8 src/net/sf/gogui/images/$(basename $i .svg)-8x8.png
+    done
+
+    ant -Ddocbook-xsl.dir=${docbook-xsl-ns}/xml/xsl/docbook
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # copy documentation
+    mkdir -p $out/share/doc
+    mv -vi doc $out/share/doc/gogui
+
+    # make man pages available
+    mkdir -p $out/share/man/
+    ln -s $out/share/doc/gogui/manual/man $out/share/man/man1
+
+    # copy programs
+    mv -vi {bin,lib} $out/
+
+    # wrap programs
+    for x in $out/bin/*; do
+      wrapProgram $x --prefix PATH ":" ${openjdk}/bin --set GOGUI_JAVA_HOME ${openjdk}
+    done
+
+    runHook postInstall
+  '';
+
+  meta = {
+    maintainers = [ lib.maintainers.cleverca22 lib.maintainers.omnipotententity];
+    description = "A graphical user interface to programs that play the board game Go and support the Go Text Protocol such as GNU Go";
+    homepage = "https://github.com/Remi-Coulom/gogui";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/games/gotypist/default.nix b/nixpkgs/pkgs/games/gotypist/default.nix
new file mode 100644
index 000000000000..24afb9317c5b
--- /dev/null
+++ b/nixpkgs/pkgs/games/gotypist/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gotypist";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "pb-";
+    repo = "gotypist";
+    rev = version;
+    sha256 = "0khl2f6bl121slw9mlf4qzsdarpk1v3vry11f3dvz7pb1q6zjj11";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "A touch-typing tutor";
+    longDescription = ''
+      A simple touch-typing tutor that follows Steve Yegge's methodology of
+      going in fast, slow, and medium cycles.
+    '';
+    homepage = "https://github.com/pb-/gotypist";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pb- ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/grapejuice/default.nix b/nixpkgs/pkgs/games/grapejuice/default.nix
new file mode 100644
index 000000000000..c8d1956eb9a5
--- /dev/null
+++ b/nixpkgs/pkgs/games/grapejuice/default.nix
@@ -0,0 +1,138 @@
+{ lib
+, fetchFromGitLab
+, gobject-introspection
+, pciutils
+, python3Packages
+, gtk3
+, wrapGAppsHook
+, glib
+, cairo
+, desktop-file-utils
+, xdg-utils
+, xdg-user-dirs
+, gettext
+, winetricks
+, wine
+, glxinfo
+, xrandr
+, bash
+}:
+
+python3Packages.buildPythonApplication rec  {
+  pname = "grapejuice";
+  version = "7.20.11";
+
+  src = fetchFromGitLab {
+    owner = "BrinkerVII";
+    repo = "grapejuice";
+    rev = "v${version}";
+    hash = "sha256-sDw67Xseeak1v5x0daznfdeNQahDTj21AVvXmuZlsgg=";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    desktop-file-utils
+    glib
+    wrapGAppsHook
+    python3Packages.pip
+  ];
+
+  buildInputs = [
+    cairo
+    gettext
+    gtk3
+    bash
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    psutil
+    dbus-python
+    pygobject3
+    packaging
+    wheel
+    setuptools
+    requests
+    unidecode
+    click
+    pydantic
+  ];
+
+  dontWrapGApps = true;
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ xdg-user-dirs wine winetricks pciutils glxinfo xrandr ]}"
+    # make xdg-open overrideable at runtime
+    "--suffix PATH : ${lib.makeBinPath [ xdg-utils ]}"
+  ];
+
+  postPatch = ''
+    substituteInPlace src/grapejuice_common/assets/desktop/grapejuice.desktop \
+      --replace \$GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice" \
+      --replace \$GRAPEJUICE_GUI_EXECUTABLE "$out/bin/grapejuice-gui" \
+      --replace \$GRAPEJUICE_ICON grapejuice
+
+    substituteInPlace src/grapejuice_common/assets/desktop/roblox-player.desktop \
+      --replace \$GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice" \
+      --replace \$PLAYER_ICON "grapejuice-roblox-player"
+
+    substituteInPlace src/grapejuice_common/assets/desktop/roblox-app.desktop \
+      --replace \$GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice" \
+      --replace \$PLAYER_ICON "grapejuice-roblox-player"
+
+    substituteInPlace src/grapejuice_common/assets/desktop/roblox-studio.desktop src/grapejuice_common/assets/desktop/roblox-studio-auth.desktop \
+      --replace \$GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice" \
+      --replace \$STUDIO_ICON "grapejuice-roblox-studio"
+
+    substituteInPlace src/grapejuice_common/paths.py \
+      --replace 'return local_share() / "locale"' 'return Path("${placeholder "out"}/share/locale")'
+
+    substituteInPlace src/grapejuice_common/models/settings_model.py \
+      --replace 'default_wine_home: Optional[str] = ""' 'default_wine_home: Optional[str] = "${wine}"'
+
+    substituteInPlace src/grapejuice_packaging/builders/linux_package_builder.py \
+      --replace '"--no-dependencies",' '"--no-dependencies", "--no-build-isolation",'
+
+    substituteInPlace src/grapejuice_packaging/packaging_resources/bin/grapejuice src/grapejuice_packaging/packaging_resources/bin/grapejuice-gui \
+      --replace "/usr/bin/env python3" "${python3Packages.python.interpreter}"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    PYTHONPATH=$(pwd)/src:$PYTHONPATH python3 -m grapejuice_packaging linux_package
+
+    mkdir -p "$out" "$out/${python3Packages.python.sitePackages}"
+    tar -xvf ./dist/linux_package/grapejuice-''${version}.tar.gz --strip-components=1 -C "$out"
+
+    mv "$out/lib/python3/dist-packages/"* "$out/${python3Packages.python.sitePackages}"
+    rmdir --ignore-fail-on-non-empty -p "$out/lib/python3/dist-packages"
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    patchShebangs "$out/bin/grapejuice{,-gui}"
+
+    buildPythonPath "$out $pythonPath"
+
+    for bin in grapejuice grapejuice-gui; do
+    wrapProgram "$out/bin/$bin" \
+      --prefix PYTHONPATH : "$PYTHONPATH:$(toPythonPath $out)" \
+      ''${makeWrapperArgs[@]} \
+      ''${gappsWrapperArgs[@]}
+    done
+  '';
+
+  # No tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "grapejuice" ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/brinkervii/grapejuice";
+    description = "Simple Wine+Roblox management tool";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ artturin helium ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/graphwar/default.nix b/nixpkgs/pkgs/games/graphwar/default.nix
new file mode 100644
index 000000000000..3586979292e6
--- /dev/null
+++ b/nixpkgs/pkgs/games/graphwar/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, copyDesktopItems
+, jdk
+, makeDesktopItem
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "graphwar";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "catabriga";
+    repo = "graphwar";
+    rev = version;
+    sha256 = "sha256-t3Y576dXWp2Mj6OSQN5cm9FuNBWNqKq6xxkVRbjIBgE=";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+  buildInputs = [ jdk ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    mkdir -p out/
+    javac -d out/ -sourcepath src/ -classpath out/ -encoding utf8 src/**/*.java
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib/
+    mv out $out/lib/graphwar
+    cp -r rsc $out/lib/graphwar/rsc
+
+    makeWrapper ${jdk}/bin/java $out/bin/graphwar \
+      --add-flags "-classpath $out/lib/graphwar Graphwar.Graphwar"
+    makeWrapper ${jdk}/bin/java $out/bin/graphwar-roomserver \
+      --add-flags "-classpath $out/lib/graphwar RoomServer.RoomServer"
+    makeWrapper ${jdk}/bin/java $out/bin/graphwar-globalserver \
+      --add-flags "-classpath $out/lib/graphwar GlobalServer.GlobalServer"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "graphwar";
+      exec = "graphwar";
+      desktopName = "Graphwar";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "http://www.graphwar.com/";
+    description = "An artillery game in which you must hit your enemies using mathematical functions";
+    license = licenses.gpl3Plus;
+    platforms = jdk.meta.platforms;
+    maintainers = with maintainers; [ yrd ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gscrabble/default.nix b/nixpkgs/pkgs/games/gscrabble/default.nix
new file mode 100644
index 000000000000..28e2a58b0d00
--- /dev/null
+++ b/nixpkgs/pkgs/games/gscrabble/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildPythonApplication, fetchFromGitHub
+, gtk3, wrapGAppsHook, gst_all_1, gobject-introspection
+, python3Packages, gnome }:
+
+buildPythonApplication {
+  pname = "gscrabble";
+  version = "unstable-2020-04-21";
+
+  src = fetchFromGitHub {
+    owner = "RaaH";
+    repo = "gscrabble";
+    rev = "aba37f062a6b183dcc084c453f395af1dc437ec8";
+    sha256 = "sha256-rYpPHgOlPRnlA+Nkvo/J+/8/vl24/Ssk55fTq9oNCz4=";
+  };
+
+  doCheck = false;
+
+  nativeBuildInputs = [ wrapGAppsHook gobject-introspection ];
+
+  buildInputs = with gst_all_1; [
+    gst-plugins-base gst-plugins-good gst-plugins-ugly gst-plugins-bad
+    gnome.adwaita-icon-theme gtk3
+  ];
+
+  propagatedBuildInputs = with python3Packages; [ gst-python pygobject3 ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PYTHONPATH : "$out/share/GScrabble/modules"
+      )
+  '';
+
+  meta = with lib; {
+    # Fails to build, propably incompatible with latest Python
+    # error: Multiple top-level packages discovered in a flat-layout
+    # https://github.com/RaaH/gscrabble/issues/13
+    broken = true;
+    description = "Golden Scrabble crossword puzzle game";
+    homepage = "https://github.com/RaaH/gscrabble/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gshogi/default.nix b/nixpkgs/pkgs/games/gshogi/default.nix
new file mode 100644
index 000000000000..77eab7918b91
--- /dev/null
+++ b/nixpkgs/pkgs/games/gshogi/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, gobject-introspection
+, gtk3
+, python3
+, wrapGAppsHook
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gshogi";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "johncheetham";
+    repo = "gshogi";
+    rev = "v${version}";
+    hash = "sha256-EPOIYPSFAhilxuZeYfuZ4Cd29ReJs/E4KNF5/lyzbxs=";
+  };
+
+  doCheck = false;  # no tests available
+
+  buildInputs = [
+    gtk3
+  ];
+
+  nativeBuildInputs = [ wrapGAppsHook gobject-introspection ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygobject3
+    pycairo
+  ];
+
+  meta = with lib; {
+    homepage = "http://johncheetham.com/projects/gshogi/";
+    description = "A graphical implementation of the Shogi board game, also known as Japanese Chess";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ciil ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gtetrinet/default.nix b/nixpkgs/pkgs/games/gtetrinet/default.nix
new file mode 100644
index 000000000000..af16d5e9f748
--- /dev/null
+++ b/nixpkgs/pkgs/games/gtetrinet/default.nix
@@ -0,0 +1,45 @@
+{ fetchFromGitHub, lib, stdenv, autoreconfHook, intltool, pkg-config, libgnome, libgnomeui, GConf }:
+
+stdenv.mkDerivation {
+  pname = "gtetrinet";
+  version = "0.7.11";
+
+  src = fetchFromGitHub {
+    owner = "GNOME";
+    repo = "gtetrinet";
+    rev = "6be3df83f3dc5c7cb966e6cd447182df01b93222";
+    sha256 = "1y05x8lfyxvkjg6c87cfd0xxmb22c88scx8fq3gah7hjy5i42v93";
+  };
+
+  nativeBuildInputs = [ autoreconfHook intltool pkg-config ];
+
+  buildInputs = [ libgnome libgnomeui ];
+
+  propagatedUserEnvPkgs = [ GConf ];
+
+  postAutoreconf = ''
+    intltoolize --force
+  '';
+
+  preInstall = ''
+    export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1
+  '';
+
+  postInstall = ''
+    mv "$out/games" "$out/bin"
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Client for Tetrinet, a multiplayer online Tetris game";
+    longDescription = ''
+      GTetrinet is a client program for Tetrinet, a multiplayer tetris game
+      that is played over the internet.
+    '';
+    homepage = "https://gtetrinet.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.chris-martin ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gtypist/default.nix b/nixpkgs/pkgs/games/gtypist/default.nix
new file mode 100644
index 000000000000..43b95bacefc8
--- /dev/null
+++ b/nixpkgs/pkgs/games/gtypist/default.nix
@@ -0,0 +1,28 @@
+{lib, stdenv, fetchurl, makeWrapper, libiconv, ncurses, perl, fortune}:
+
+stdenv.mkDerivation rec {
+  pname = "gtypist";
+  version = "2.9.5";
+
+  src = fetchurl {
+    url = "mirror://gnu/gtypist/gtypist-${version}.tar.xz";
+    sha256 = "0xzrkkmj0b1dw3yr0m9hml2y634cc4h61im6zwcq57s7285z8fn1";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ ncurses perl fortune ]
+   ++ lib.optional stdenv.isDarwin libiconv;
+
+  preFixup = ''
+     wrapProgram "$out/bin/typefortune" \
+       --prefix PATH : "${fortune}/bin" \
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/gtypist";
+    description = "Universal typing tutor";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gweled/default.nix b/nixpkgs/pkgs/games/gweled/default.nix
new file mode 100644
index 000000000000..fc187afbe806
--- /dev/null
+++ b/nixpkgs/pkgs/games/gweled/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchbzr, gettext
+, gtk2, wrapGAppsHook, autoreconfHook, pkg-config
+, libmikmod, librsvg, libcanberra-gtk2, hicolor-icon-theme }:
+
+stdenv.mkDerivation rec {
+  pname = "gweled";
+  version = "unstable-2021-02-11";
+
+  src = fetchbzr {
+    url = "lp:gweled";
+    rev = "108";
+    sha256 = "sha256-rM4dgbYfSrVqZwi+xzKuEtmtjK3HVvqeutmni1vleLo=";
+  };
+
+  doCheck = false;
+
+  postPatch = ''
+    substituteInPlace configure.ac --replace "AM_GNU_GETTEXT_VERSION([0.19.8])" "AM_GNU_GETTEXT_VERSION([${gettext.version}])"
+  '';
+
+  nativeBuildInputs = [ wrapGAppsHook gettext autoreconfHook pkg-config ];
+
+  buildInputs = [ gtk2 libmikmod librsvg hicolor-icon-theme libcanberra-gtk2 ];
+
+  configureFlags = [ "--disable-setgid" ];
+
+  meta = with lib; {
+    description = "Bejeweled clone game";
+    homepage = "https://gweled.org";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/harmonist/default.nix b/nixpkgs/pkgs/games/harmonist/default.nix
new file mode 100644
index 000000000000..cbb556cbc948
--- /dev/null
+++ b/nixpkgs/pkgs/games/harmonist/default.nix
@@ -0,0 +1,30 @@
+{lib, fetchurl, buildGoModule}:
+
+buildGoModule rec {
+  pname = "harmonist";
+  version = "0.5.1";
+
+  src = fetchurl {
+    url = "https://download.tuxfamily.org/harmonist/releases/${pname}-${version}.tar.gz";
+    hash = "sha256-NkUrBvOOs6yctW4CVRpJNcdfdPvUJZp9HaWLS7eO4yE=";
+  };
+
+  vendorHash = "sha256-0DV32a2LYnfYzg/tqwear9uaaahNUIi0M8uWlXOQ5Ic=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A stealth coffee-break roguelike game";
+    longDescription = ''
+      Harmonist is a stealth coffee-break roguelike game. The game has a heavy
+      focus on tactical positioning, light and noise mechanisms, making use of
+      various terrain types and cones of view for monsters. Aiming for a
+      replayable streamlined experience, the game avoids complex inventory
+      management and character building, relying on items and player
+      adaptability for character progression.
+    '';
+    homepage = "https://harmonist.tuxfamily.org/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/hase/default.nix b/nixpkgs/pkgs/games/hase/default.nix
new file mode 100644
index 000000000000..f807572455af
--- /dev/null
+++ b/nixpkgs/pkgs/games/hase/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, sparrow3d
+, zlib
+}:
+
+stdenv.mkDerivation {
+  pname = "hase";
+  version = "unstable-2020-10-06";
+
+  src = fetchFromGitHub {
+    owner = "theZiz";
+    repo = "hase";
+    rev = "31d6840cdf0c72fc459f10402dae7726096b2974";
+    hash = "sha256-d9So3E8nCQJ1/BdlwMkGbaFPT9mkX1VzlDGKp71ptEE=";
+  };
+
+  patches = [ ./prefer-dynamic.patch ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    sparrow3d
+    zlib
+  ];
+
+  buildPhase = ''
+    NIX_CFLAGS_COMPILE=$(pkg-config --cflags sparrow3d zlib)
+
+    # build and install are one step, and inseparable without patching
+    mkdir -p $out/{bin,share/applications,share/pixmaps}
+    ./install.sh $out
+  '';
+
+  postFixup = ''
+    substituteInPlace "$out/share/applications/hase.desktop" \
+      --replace "Exec=hase" "Exec=$out/bin/hase"
+  '';
+
+  meta = {
+    description = "An open-source artillery shooter";
+    longDescription = ''
+      Hase is an open source gravity based artillery shooter. It is similar to
+      Worms, Hedgewars or artillery, but the gravity force and direction
+      depends on the mass nearby. It is optimized for mobile game consoles like
+      the GP2X, Open Pandora or GCW Zero.
+    '';
+    homepage = "http://ziz.gp2x.de/hase/";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ colinsane ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/hase/prefer-dynamic.patch b/nixpkgs/pkgs/games/hase/prefer-dynamic.patch
new file mode 100644
index 000000000000..ab36e6b2b3d7
--- /dev/null
+++ b/nixpkgs/pkgs/games/hase/prefer-dynamic.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index 95d894e..3c561c1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -35,7 +35,7 @@ endif
+ LIB += -L$(SPARROW_LIB)
+ INCLUDE += -I$(SPARROW_FOLDER)
+ 
+-HASE_STATIC = $(SPARROW_LIB)/$(SPARROW3D_STATIC_LIB) $(SPARROW_LIB)/$(SPARROWSOUND_STATIC_LIB) $(SPARROW_LIB)/$(SPARROWNET_STATIC_LIB) $(STATIC)
++DYNAMIC += -lsparrow3d -lsparrowSound -lsparrowNet
+ 
+ ifneq ($(TARGET),win32)
+ DYNAMIC += -lz
diff --git a/nixpkgs/pkgs/games/hedgewars/default.nix b/nixpkgs/pkgs/games/hedgewars/default.nix
new file mode 100644
index 000000000000..6674c85c3323
--- /dev/null
+++ b/nixpkgs/pkgs/games/hedgewars/default.nix
@@ -0,0 +1,88 @@
+{ stdenv, SDL2_image, SDL2_ttf, SDL2_net, fpc, ghcWithPackages, ffmpeg_4, freeglut
+, lib, fetchurl, cmake, pkg-config, lua5_1, SDL2, SDL2_mixer
+, zlib, libpng, libGL, libGLU, physfs
+, qtbase, qttools, wrapQtAppsHook
+, llvm
+, withServer ? true
+}:
+
+let
+  ghc = ghcWithPackages (pkgs: with pkgs; [
+          SHA bytestring entropy hslogger network pkgs.zlib random
+          regex-tdfa sandi utf8-string vector
+        ]);
+in
+stdenv.mkDerivation rec {
+  pname = "hedgewars";
+  version = "1.0.2";
+
+  src = fetchurl {
+    url = "https://www.hedgewars.org/download/releases/hedgewars-src-${version}.tar.bz2";
+    sha256 = "sha256-IB/l5FvYyls9gbGOwGvWu8n6fCxjvwGQBeL4C+W88hI=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config qttools wrapQtAppsHook ];
+
+  buildInputs = [
+    SDL2_ttf SDL2_net SDL2 SDL2_mixer SDL2_image
+    fpc lua5_1
+    llvm # hard-requirement on aarch64, for some reason not strictly necessary on x86-64
+    ffmpeg_4 freeglut physfs
+    qtbase
+  ] ++ lib.optional withServer ghc;
+
+  cmakeFlags = [
+    "-DNOVERSIONINFOUPDATE=ON"
+    "-DNOSERVER=${if withServer then "OFF" else "ON"}"
+  ];
+
+  NIX_LDFLAGS = lib.concatMapStringsSep " " (e: "-rpath ${e}/lib") [
+    SDL2.out
+    SDL2_image
+    SDL2_mixer
+    SDL2_net
+    SDL2_ttf
+    libGL
+    libGLU
+    libpng.out
+    lua5_1
+    physfs
+    zlib.out
+  ];
+
+  qtWrapperArgs = [
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libGL libGLU freeglut physfs ]}"
+  ];
+
+  meta = with lib; {
+    description = "Turn-based strategy artillery game similar to Worms";
+    homepage = "http://hedgewars.org/";
+    license = licenses.gpl2;
+    longDescription = ''
+       Each player controls a team of several hedgehogs. During the course of
+       the game, players take turns with one of their hedgehogs. They then use
+       whatever tools and weapons are available to attack and kill the
+       opponents' hedgehogs, thereby winning the game. Hedgehogs may move
+       around the terrain in a variety of ways, normally by walking and jumping
+       but also by using particular tools such as the "Rope" or "Parachute", to
+       move to otherwise inaccessible areas. Each turn is time-limited to
+       ensure that players do not hold up the game with excessive thinking or
+       moving.
+
+       A large variety of tools and weapons are available for players during
+       the game: Grenade, Cluster Bomb, Bazooka, UFO, Homing Bee, Shotgun,
+       Desert Eagle, Fire Punch, Baseball Bat, Dynamite, Mine, Rope, Pneumatic
+       pick, Parachute. Most weapons, when used, cause explosions that deform
+       the terrain, removing circular chunks. The landscape is an island
+       floating on a body of water, or a restricted cave with water at the
+       bottom. A hedgehog dies when it enters the water (either by falling off
+       the island, or through a hole in the bottom of it), it is thrown off
+       either side of the arena or when its health is reduced, typically from
+       contact with explosions, to zero (the damage dealt to the attacked
+       hedgehog or hedgehogs after a player's or CPU turn is shown only when
+       all movement on the battlefield has ceased).'';
+    maintainers = with maintainers; [ kragniz fpletz ];
+    broken = stdenv.isDarwin;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/heroic/default.nix b/nixpkgs/pkgs/games/heroic/default.nix
new file mode 100644
index 000000000000..eca086020709
--- /dev/null
+++ b/nixpkgs/pkgs/games/heroic/default.nix
@@ -0,0 +1,118 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchYarnDeps
+, yarn
+, fixup_yarn_lock
+, nodejs
+, python3
+, makeWrapper
+, electron
+, vulkan-helper
+, gogdl
+, legendary-gl
+, nile
+}:
+
+let appName = "heroic";
+in stdenv.mkDerivation rec {
+  pname = "heroic-unwrapped";
+  version = "2.9.2";
+
+  src = fetchFromGitHub {
+    owner = "Heroic-Games-Launcher";
+    repo = "HeroicGamesLauncher";
+    rev = "v${version}";
+    hash = "sha256-kCvMUhN1kjGb5rV+lkKm1FFYBJUSQGOKTY1DQdiAWLU=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-kHZL7TENVK58dvr8PBFtWYZ2PSKEYESX4e1xYmMA5+Y=";
+  };
+
+  nativeBuildInputs = [
+    yarn
+    fixup_yarn_lock
+    nodejs
+    python3
+    makeWrapper
+  ];
+
+  patches = [
+    # Reverts part of upstream PR 2761 so that we don't have to use a non-free Electron fork.
+    # https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher/pull/2761
+    ./remove-drm-support.patch
+    # Make Heroic create Steam shortcuts (to non-steam games) with the correct path to heroic.
+    ./fix-non-steam-shortcuts.patch
+  ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    fixup_yarn_lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules/
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn --offline vite build
+
+    # Remove dev dependencies.
+    yarn install --production --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+
+    runHook postBuild
+  '';
+
+  # --disable-gpu-compositing is to work around upstream bug
+  # https://github.com/electron/electron/issues/32317
+  installPhase = let
+    binPlatform = if stdenv.isDarwin then "darwin" else "linux";
+  in ''
+    runHook preInstall
+
+    mkdir -p $out/share/{applications,${appName}}
+    cp -r . $out/share/${appName}
+    rm -rf $out/share/${appName}/{.devcontainer,.vscode,.husky,.idea,.github}
+
+    chmod -R u+w "$out/share/${appName}/public/bin" "$out/share/${appName}/build/bin"
+    rm -rf "$out/share/${appName}/public/bin" "$out/share/${appName}/build/bin"
+    mkdir -p "$out/share/${appName}/build/bin/${binPlatform}"
+    ln -s \
+      "${gogdl}/bin/gogdl" \
+      "${legendary-gl}/bin/legendary" \
+      "${nile}/bin/nile" \
+      "${lib.optionalString stdenv.isLinux "${vulkan-helper}/bin/vulkan-helper"}" \
+      "$out/share/${appName}/build/bin/${binPlatform}"
+
+    makeWrapper "${electron}/bin/electron" "$out/bin/heroic" \
+      --inherit-argv0 \
+      --add-flags --disable-gpu-compositing \
+      --add-flags $out/share/${appName} \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime}}"
+
+    substituteInPlace "$out/share/${appName}/flatpak/com.heroicgameslauncher.hgl.desktop" \
+      --replace "Exec=heroic-run" "Exec=heroic"
+    mkdir -p "$out/share/applications" "$out/share/icons/hicolor/512x512/apps"
+    ln -s "$out/share/${appName}/flatpak/com.heroicgameslauncher.hgl.desktop" "$out/share/applications"
+    ln -s "$out/share/${appName}/flatpak/com.heroicgameslauncher.hgl.png" "$out/share/icons/hicolor/512x512/apps"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A Native GOG, Epic, and Amazon Games Launcher for Linux, Windows and Mac";
+    homepage = "https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher";
+    changelog = "https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher/releases";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ aidalgol ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
+    mainProgram = appName;
+  };
+}
diff --git a/nixpkgs/pkgs/games/heroic/fhsenv.nix b/nixpkgs/pkgs/games/heroic/fhsenv.nix
new file mode 100644
index 000000000000..19b44b280f85
--- /dev/null
+++ b/nixpkgs/pkgs/games/heroic/fhsenv.nix
@@ -0,0 +1,139 @@
+{ buildFHSEnv
+, heroic-unwrapped
+, extraPkgs ? pkgs: [ ]
+, extraLibraries ? pkgs: [ ]
+}:
+
+buildFHSEnv {
+  name = "heroic";
+
+  runScript = "heroic";
+
+  # Many Wine and native games need 32-bit libraries.
+  multiArch = true;
+
+  # required by Electron
+  unshareIpc = false;
+
+  targetPkgs = pkgs: with pkgs; [
+    heroic-unwrapped
+    gamemode
+    curl
+    gawk
+    gnome.zenity
+    plasma5Packages.kdialog
+    mangohud
+    nettools
+    opencl-headers
+    p7zip
+    perl
+    psmisc
+    python3
+    which
+    xorg.xrandr
+    zstd
+  ] ++ extraPkgs pkgs;
+
+  multiPkgs = let
+    xorgDeps = pkgs: with pkgs.xorg; [
+      libpthreadstubs
+      libSM
+      libX11
+      libXaw
+      libxcb
+      libXcomposite
+      libXcursor
+      libXdmcp
+      libXext
+      libXi
+      libXinerama
+      libXmu
+      libXrandr
+      libXrender
+      libXv
+      libXxf86vm
+    ];
+    gstreamerDeps = pkgs: with pkgs.gst_all_1; [
+      gstreamer
+      gst-plugins-base
+      gst-plugins-good
+      gst-plugins-ugly
+      gst-plugins-bad
+      gst-libav
+    ];
+  in pkgs: with pkgs; [
+    alsa-lib
+    alsa-plugins
+    bash
+    cabextract
+    cairo
+    coreutils
+    cups
+    dbus
+    freealut
+    freetype
+    fribidi
+    giflib
+    glib
+    gnutls
+    gtk3
+    lcms2
+    libevdev
+    libgcrypt
+    libGLU
+    libglvnd
+    libgpg-error
+    libgudev
+    libjpeg
+    libkrb5
+    libmpeg2
+    libogg
+    libopus
+    libpng
+    libpulseaudio
+    libselinux
+    libsndfile
+    libsoup
+    libtheora
+    libtiff
+    libusb1
+    libv4l
+    libva
+    libvdpau
+    libvorbis
+    libvpx
+    libwebp
+    libxkbcommon
+    libxml2
+    mpg123
+    ncurses
+    ocl-icd
+    openal
+    openldap
+    openssl
+    pango
+    pipewire
+    samba4
+    sane-backends
+    SDL2
+    speex
+    sqlite
+    udev
+    unixODBC
+    util-linux
+    v4l-utils
+    vulkan-loader
+    wayland
+    zlib
+  ] ++ xorgDeps pkgs
+    ++ gstreamerDeps pkgs
+    ++ extraLibraries pkgs;
+
+  extraInstallCommands = ''
+    mkdir -p $out/share
+    ln -s ${heroic-unwrapped}/share/applications $out/share
+    ln -s ${heroic-unwrapped}/share/icons $out/share
+  '';
+
+  meta = heroic-unwrapped.meta;
+}
diff --git a/nixpkgs/pkgs/games/heroic/fix-non-steam-shortcuts.patch b/nixpkgs/pkgs/games/heroic/fix-non-steam-shortcuts.patch
new file mode 100644
index 000000000000..7b46473245f7
--- /dev/null
+++ b/nixpkgs/pkgs/games/heroic/fix-non-steam-shortcuts.patch
@@ -0,0 +1,13 @@
+diff --git a/src/backend/shortcuts/nonesteamgame/nonesteamgame.ts b/src/backend/shortcuts/nonesteamgame/nonesteamgame.ts
+index ebef6aa4..c8bd853d 100644
+--- a/src/backend/shortcuts/nonesteamgame/nonesteamgame.ts
++++ b/src/backend/shortcuts/nonesteamgame/nonesteamgame.ts
+@@ -252,7 +252,7 @@ async function addNonSteamGame(props: {
+     // add new Entry
+     const newEntry = {} as ShortcutEntry
+     newEntry.AppName = props.gameInfo.title
+-    newEntry.Exe = `"${app.getPath('exe')}"`
++    newEntry.Exe = `"heroic"`
+     newEntry.StartDir = `"${process.cwd()}"`
+ 
+     if (isFlatpak) {
diff --git a/nixpkgs/pkgs/games/heroic/remove-drm-support.patch b/nixpkgs/pkgs/games/heroic/remove-drm-support.patch
new file mode 100644
index 000000000000..f3cd80f003f3
--- /dev/null
+++ b/nixpkgs/pkgs/games/heroic/remove-drm-support.patch
@@ -0,0 +1,24 @@
+diff --git a/src/backend/main.ts b/src/backend/main.ts
+index 2cd1a28f..a60e04d0 100644
+--- a/src/backend/main.ts
++++ b/src/backend/main.ts
+@@ -19,8 +19,7 @@ import {
+   powerSaveBlocker,
+   protocol,
+   screen,
+-  clipboard,
+-  components
++  clipboard
+ } from 'electron'
+ import 'backend/updater'
+ import { autoUpdater } from 'electron-updater'
+@@ -286,8 +285,7 @@ if (!gotTheLock) {
+     initImagesCache()
+ 
+     if (!process.env.CI) {
+-      await components.whenReady()
+-      logInfo(['DRM module staus', components.status()])
++      logInfo('DRM modules disabled for nixpkgs')
+     }
+ 
+     // try to fix notification app name on windows
diff --git a/nixpkgs/pkgs/games/hex-a-hop/default.nix b/nixpkgs/pkgs/games/hex-a-hop/default.nix
new file mode 100644
index 000000000000..c6eaed57a9ca
--- /dev/null
+++ b/nixpkgs/pkgs/games/hex-a-hop/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, fetchzip, SDL, SDL_mixer, SDL_ttf }:
+
+stdenv.mkDerivation rec {
+  pname = "hex-a-hop";
+  version = "1.1.0";
+
+  src = fetchzip {
+    url = "https://downloads.sourceforge.net/project/hexahop/${version}/hex-a-hop-${version}.tar.gz";
+    sha256 = "sha256-fBSvNtgNR0aNofbvoYpM1e8ww4ARlXIvrQUvJqVGLlY=";
+  };
+
+  icon = fetchurl {
+    # Fetched from dfa365a90be5c52ef21235a9e90a865b04da3ad4, remove in the next version when the file is included
+    url = "https://sourceforge.net/p/hexahop/code/ci/dfa365a90be5c52ef21235a9e90a865b04da3ad4/tree/data/hex-a-hop.png?format=raw";
+    sha256 = "sha256-Vh/1wwRmC2eSD/+mk1Oqt7EX4a4k++nUAbWQD2P2hNA=";
+  };
+
+  desktop = fetchurl {
+    # Fetched from e67385078e4f248a3877ee1066613d231c0d0eee, remove in the next version when the file is included
+    url = "https://sourceforge.net/p/hexahop/code/ci/e67385078e4f248a3877ee1066613d231c0d0eee/tree/data/hex-a-hop.desktop?format=raw";
+    sha256 = "sha256-j6gKRq+8b1NDwP1WcCaScfmwNxAl78CfK6pemROrRak=";
+  };
+
+  buildInputs = [ SDL SDL_mixer SDL_ttf ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postFixup = ''
+    install -Dm644 ${icon} $out/share/icons/${pname}.png
+    install -Dm644 ${desktop} $out/share/applications/${pname}.desktop
+  '';
+
+  meta = {
+    description = "A puzzle game based on hexagonal tiles";
+    homepage = "http://hexahop.sourceforge.net";
+    license = with lib.licenses; [
+      gpl2Plus # Main code
+      cc-by-30 # Assets
+      lgpl2Plus # i18n
+      lgpl3Plus # source files from Lips of Suna
+    ];
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ rampoina ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/hexgui/default.nix b/nixpkgs/pkgs/games/hexgui/default.nix
new file mode 100644
index 000000000000..49dae4217551
--- /dev/null
+++ b/nixpkgs/pkgs/games/hexgui/default.nix
@@ -0,0 +1,36 @@
+{ ant
+, fetchFromGitHub
+, jdk
+, lib
+, makeWrapper
+, stdenv
+}:
+stdenv.mkDerivation {
+  pname = "hexgui";
+  version = "unstable-2023-1-7";
+
+  src = fetchFromGitHub {
+    owner = "selinger";
+    repo = "hexgui";
+    rev = "62f07ff51db0d4a945ad42f86167cc2f2ce65d90";
+    hash = "sha256-yEdZs9HUt3lcrdNO1OH8M8g71+2Ltf+v1RR1fKRDV0o=";
+  };
+
+  nativeBuildInputs = [ ant jdk makeWrapper ];
+  buildPhase = ''
+    ant
+  '';
+
+  installPhase = ''
+    mkdir $out
+    mv bin lib $out
+    wrapProgram $out/bin/hexgui --prefix PATH : ${lib.makeBinPath [ jdk ]}
+  '';
+
+  meta = {
+    description = "GUI for the board game Hex";
+    homepage = "https://github.com/selinger/hexgui";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.ursi ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/hheretic/default.nix b/nixpkgs/pkgs/games/hheretic/default.nix
new file mode 100644
index 000000000000..6e4be6bd54b7
--- /dev/null
+++ b/nixpkgs/pkgs/games/hheretic/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL
+, SDL_mixer
+, autoreconfHook
+, gitUpdater
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "hheretic";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "sezero";
+    repo = "hheretic";
+    rev = "hheretic-${finalAttrs.version}";
+    hash = "sha256-e9N869W8STZdLUBSscxEnF2Z+SrdVv8ARDL8AMe1SJ8=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    SDL.dev
+  ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+  ];
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  configureFlags = [ "--with-audio=sdlmixer" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 hheretic-gl -t $out/bin
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "hheretic-";
+  };
+
+  meta = {
+    description = "Linux port of Raven Game's Heretic";
+    homepage = "https://hhexen.sourceforge.net/hhexen.html";
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "hheretic-gl";
+    maintainers = with lib.maintainers; [ moody ];
+    inherit (SDL.meta) platforms;
+    broken = stdenv.isDarwin;
+  };
+})
diff --git a/nixpkgs/pkgs/games/hhexen/default.nix b/nixpkgs/pkgs/games/hhexen/default.nix
new file mode 100644
index 000000000000..0e5345e85a7d
--- /dev/null
+++ b/nixpkgs/pkgs/games/hhexen/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL
+, SDL_mixer
+, autoreconfHook
+, gitUpdater
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "hhexen";
+  version = "1.6.3";
+
+  src = fetchFromGitHub {
+    owner = "sezero";
+    repo = "hhexen";
+    rev = "hhexen-${finalAttrs.version}";
+    hash = "sha256-y3jKfU4e8R2pJQN/FN7W6KQ7D/P+7pmQkdmZug15ApI=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    SDL.dev
+  ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+  ];
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  configureFlags = [ "--with-audio=sdlmixer" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 hhexen-gl -t $out/bin
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "hhexen-";
+  };
+
+  meta = {
+    description = "Linux port of Raven Game's Hexen";
+    homepage = "https://hhexen.sourceforge.net/hhexen.html";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ moody djanatyn ];
+    mainProgram = "hhexen-gl";
+    inherit (SDL.meta) platforms;
+    broken = stdenv.isDarwin;
+  };
+})
diff --git a/nixpkgs/pkgs/games/hikounomizu/default.nix b/nixpkgs/pkgs/games/hikounomizu/default.nix
new file mode 100644
index 000000000000..c59418ac1a43
--- /dev/null
+++ b/nixpkgs/pkgs/games/hikounomizu/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, pkg-config
+, util-linux
+, libGL
+, freetype
+, pugixml
+, SDL2
+, SDL2_image
+, openal
+, libogg
+, libvorbis
+, libGLU
+, enet
+, synfigstudio
+, inkscape
+, imagemagick
+, pngquant
+, xz
+, bc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hikounomizu";
+  version = "1.0";
+
+  src = fetchurl {
+    url = "http://download.tuxfamily.org/hnm/${version}/hikounomizu-${version}-src.tar.bz2";
+    hash = "sha256-Hw/BA7jOW9KGdde1NLDh4SfQXxvZkNGx/sHXukgFZ5M=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    # for make data
+    util-linux
+    synfigstudio.synfig
+    inkscape
+    imagemagick
+    pngquant
+    xz
+    bc
+  ];
+
+  buildInputs = [
+    libGL
+    freetype
+    pugixml
+    SDL2
+    SDL2_image
+    openal
+    libogg
+    libvorbis
+    libGLU
+    enet
+  ];
+
+  postBuild = ''
+    make data HNM_PARALLEL=$NIX_BUILD_CORES
+  '';
+
+  meta = with lib; {
+    description = "A free platform-based fighting game";
+    longDescription = ''
+      Hikou no mizu (ãƒã‚¤ã‚¯ã®æ°´) is a free platform-based fighting game,
+      licensed under the GNU GPL v3 (program) and the LAL (graphics).
+      It works on many operating systems including GNU/Linux, *BSD, Haiku,
+      OS X and Windows.
+
+      The characters use natural powers such as water or lightning,
+      but they can also (mostly for now) fight the traditional way!
+    '';
+    homepage = "https://hikounomizu.org/";
+    downloadPage = "https://hikounomizu.org/download.html";
+    maintainers = with maintainers; [ fgaz ];
+    license = [ licenses.gpl3Plus licenses.lal13 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/hmcl/default.nix b/nixpkgs/pkgs/games/hmcl/default.nix
new file mode 100644
index 000000000000..fcaa01ea2d95
--- /dev/null
+++ b/nixpkgs/pkgs/games/hmcl/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, stdenv
+, fetchurl
+, makeBinaryWrapper
+, makeDesktopItem
+, wrapGAppsHook
+, copyDesktopItems
+, imagemagick
+, jre
+, xorg
+, libGL
+, glfw
+, openal
+, libglvnd
+, alsa-lib
+, wayland
+, libpulseaudio
+}:
+
+let
+  version = "3.5.5";
+  icon = fetchurl {
+    url = "https://github.com/huanghongxun/HMCL/raw/release-${version}/HMCLauncher/HMCL/HMCL.ico";
+    hash = "sha256-MWp78rP4b39Scz5/gpsjwaJhSu+K9q3S2B2cD/V31MA=";
+  };
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "hmcl";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://github.com/huanghongxun/HMCL/releases/download/release-${version}/HMCL-${version}.jar";
+    hash = "sha256-bXZF38pd8I8cReuDNrZzDj1hp1Crk+P26JNiikUCg4g=";
+  };
+
+  dontUnpack = true;
+
+  dontWrapGApps = true;
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "HMCL";
+      exec = "hmcl";
+      icon = "hmcl";
+      comment = finalAttrs.meta.description;
+      desktopName = "HMCL";
+      categories = [ "Game" ];
+    })
+  ];
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+    wrapGAppsHook
+    copyDesktopItems
+    imagemagick
+  ];
+
+  installPhase =
+    let
+      libpath = lib.makeLibraryPath ([
+        libGL
+        glfw
+        openal
+        libglvnd
+      ] ++ lib.optionals stdenv.isLinux [
+        xorg.libX11
+        xorg.libXxf86vm
+        xorg.libXext
+        xorg.libXcursor
+        xorg.libXrandr
+        xorg.libXtst
+        libpulseaudio
+        wayland
+        alsa-lib
+      ]);
+    in
+    ''
+      runHook preInstall
+      mkdir -p $out/{bin,lib/hmcl}
+      cp $src $out/lib/hmcl/hmcl.jar
+      magick ${icon} hmcl.png
+      install -Dm644 hmcl.png $out/share/icons/hicolor/32x32/apps/hmcl.png
+      makeBinaryWrapper ${jre}/bin/java $out/bin/hmcl \
+        --add-flags "-jar $out/lib/hmcl/hmcl.jar" \
+        --set LD_LIBRARY_PATH ${libpath}
+      runHook postInstall
+    '';
+
+  meta = with lib; {
+    homepage = "https://hmcl.huangyuhui.net";
+    description = "A Minecraft Launcher which is multi-functional, cross-platform and popular";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ];
+    inherit (jre.meta) platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/games/hyperrogue/default.nix b/nixpkgs/pkgs/games/hyperrogue/default.nix
new file mode 100644
index 000000000000..cd44b9904c46
--- /dev/null
+++ b/nixpkgs/pkgs/games/hyperrogue/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchFromGitHub, SDL, SDL_ttf, SDL_gfx, SDL_mixer, libpng
+, glew, dejavu_fonts, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+  pname = "hyperrogue";
+  version = "12.1q";
+
+  src = fetchFromGitHub {
+    owner = "zenorogue";
+    repo = "hyperrogue";
+    rev = "v${version}";
+    sha256 = "sha256-dYkeAQBpnETbJiXZSejFPJVhXt3kJBBv6qBKPb7t9fU=";
+  };
+
+  CXXFLAGS = [
+    "-I${lib.getDev SDL}/include/SDL"
+    "-DHYPERPATH='\"${placeholder "out"}/share/hyperrogue/\"'"
+    "-DRESOURCEDESTDIR=HYPERPATH"
+    "-DHYPERFONTPATH='\"${dejavu_fonts}/share/fonts/truetype/\"'"
+  ];
+  HYPERROGUE_USE_GLEW = 1;
+  HYPERROGUE_USE_PNG = 1;
+
+  buildInputs = [ SDL SDL_ttf SDL_gfx SDL_mixer libpng glew ];
+
+  desktopItem = makeDesktopItem {
+    name = "hyperrogue";
+    desktopName = "HyperRogue";
+    genericName = "HyperRogue";
+    comment = meta.description;
+    icon = "hyperrogue";
+    exec = "hyperrogue";
+    categories = [ "Game" "AdventureGame" ];
+  };
+
+  installPhase = ''
+    install -d $out/share/hyperrogue/{sounds,music}
+
+    install -m 555 -D hyperrogue $out/bin/hyperrogue
+    install -m 444 -D hyperrogue-music.txt *.dat $out/share/hyperrogue
+    install -m 444 -D music/* $out/share/hyperrogue/music
+    install -m 444 -D sounds/* $out/share/hyperrogue/sounds
+
+    install -m 444 -D ${desktopItem}/share/applications/hyperrogue.desktop \
+      $out/share/applications/hyperrogue.desktop
+    install -m 444 -D hyperroid/app/src/main/res/drawable-ldpi/icon.png \
+      $out/share/icons/hicolor/36x36/apps/hyperrogue.png
+    install -m 444 -D hyperroid/app/src/main/res/drawable-mdpi/icon.png \
+      $out/share/icons/hicolor/48x48/apps/hyperrogue.png
+    install -m 444 -D hyperroid/app/src/main/res/drawable-hdpi/icon.png \
+      $out/share/icons/hicolor/72x72/apps/hyperrogue.png
+    install -m 444 -D hyperroid/app/src/main/res/drawable-xhdpi/icon.png \
+      $out/share/icons/hicolor/96x96/apps/hyperrogue.png
+    install -m 444 -D hyperroid/app/src/main/res/drawable-xxhdpi/icon.png \
+      $out/share/icons/hicolor/144x144/apps/hyperrogue.png
+    install -m 444 -D hyperroid/app/src/main/res/drawable-xxxhdpi/icon.png \
+      $out/share/icons/hicolor/192x192/apps/hyperrogue.png
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "http://www.roguetemple.com/z/hyper/";
+    description = "A roguelike game set in hyperbolic geometry";
+    maintainers = with maintainers; [ rardiol ];
+    license = licenses.gpl2;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/icbm3d/default.nix b/nixpkgs/pkgs/games/icbm3d/default.nix
new file mode 100644
index 000000000000..a166b4f83f2b
--- /dev/null
+++ b/nixpkgs/pkgs/games/icbm3d/default.nix
@@ -0,0 +1,24 @@
+{lib, stdenv, fetchurl, libX11}:
+
+stdenv.mkDerivation rec {
+  pname = "icbm3d";
+  version = "0.4";
+  src = fetchurl {
+    url = "ftp://ftp.tuxpaint.org/unix/x/icbm3d/icbm3d.${version}.tar.gz";
+    sha256 = "1z9q01mj0v9qbwby5cajjc9wpvdw2ma5v1r639vraxpl9qairm4s";
+  };
+
+  buildInputs = [ libX11 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp icbm3d $out/bin
+  '';
+
+  meta = {
+    homepage = "http://www.newbreedsoftware.com/icbm3d/";
+    description = "3D vector-based clone of the atari game Missile Command";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/infra-arcana/default.nix b/nixpkgs/pkgs/games/infra-arcana/default.nix
new file mode 100644
index 000000000000..4e80ad3e4d13
--- /dev/null
+++ b/nixpkgs/pkgs/games/infra-arcana/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitLab, cmake, makeWrapper, SDL2, SDL2_image, SDL2_mixer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "infra-arcana";
+  version = "22.0.0";
+
+  src = fetchFromGitLab {
+    owner = "martin-tornqvist";
+    repo = "ia";
+    rev = "v${version}";
+    sha256 = "sha256-EFpeuzxhRriQOBtmw0D+SY6sOWGyY8iA5Xnm6PCaMX0=";
+  };
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+  buildInputs = [ SDL2 SDL2_image SDL2_mixer ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{opt/ia,bin}
+
+    # Remove build artifacts
+    rm -rf CMake* cmake* compile_commands.json CTest* Makefile
+    cp -ra * $out/opt/ia
+
+    # IA uses relative paths when looking for assets
+    wrapProgram $out/opt/ia/ia --run "cd $out/opt/ia"
+    ln -s $out/opt/ia/ia $out/bin/infra-arcana
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://sites.google.com/site/infraarcana";
+    description = "A Lovecraftian single-player roguelike game";
+    longDescription = ''
+      Infra Arcana is a Roguelike set in the early 20th century. The goal is to
+      explore the lair of a dreaded cult called The Church of Starry Wisdom.
+
+      Buried deep beneath their hallowed grounds lies an artifact called The
+      Shining Trapezohedron - a window to all secrets of the universe. Your
+      ultimate goal is to unearth this artifact.
+    '';
+    platforms = platforms.linux;
+    maintainers = [ maintainers.kenran ];
+    license = licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/instead/default.nix b/nixpkgs/pkgs/games/instead/default.nix
new file mode 100644
index 000000000000..cafdd2b84f0d
--- /dev/null
+++ b/nixpkgs/pkgs/games/instead/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, fetchurl, SDL2, SDL2_ttf, SDL2_image, SDL2_mixer, pkg-config, lua, zlib, unzip }:
+
+let
+  # I took several games at random from https://instead.syscall.ru/games/
+  games = [
+    (fetchurl {
+      url = "http://instead-games.googlecode.com/files/instead-apple-day-1.2.zip";
+      sha256 = "0d4m554hiqmgl4xl0jp0b3bqjl35879768hqznh9y57y04sygd2a";
+    })
+    (fetchurl {
+      url = "http://instead-games.googlecode.com/files/instead-cat_en-1.2.zip";
+      sha256 = "0jlm3ssqlka16dm0rg6qfjh6xdh3pv7lj2s4ib4mqwj2vfy0v6sg";
+    })
+    (fetchurl {
+      url = "http://instead-games.googlecode.com/files/instead-vinny-0.1.zip";
+      sha256 = "15qdbg82zp3a8vz4qxminr0xbzbdpnsciliy2wm3raz4hnadawg1";
+    })
+    (fetchurl {
+      url = "http://instead-games.googlecode.com/files/instead-toilet3in1-1.2.zip";
+      sha256 = "0wz4bljbg67m84qwpaqpzs934a5pcbhpgh39fvbbbfvnnlm4lirl";
+    })
+    (fetchurl {
+      url = "http://instead-games.googlecode.com/files/instead-kayleth-0.4.1.zip";
+      sha256 = "0xmn9inys0kbcdd02qaqp8gazqs67xq3fq7hvcy2qb9jbq85j8b2";
+    })
+  ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "instead";
+  version = "3.3.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/instead/instead/${version}/instead_${version}.tar.gz";
+    sha256 = "u5j2kDKRvMQPsG8iA6uOBScuyE/e1BJIK2+qVL6jqQs=";
+  };
+
+  NIX_LDFLAGS = "-llua -lgcc_s";
+
+  nativeBuildInputs = [ pkg-config unzip ];
+  buildInputs = [ SDL2 SDL2_ttf SDL2_image SDL2_mixer lua zlib ];
+
+  postPatch = ''
+    substituteInPlace configure.sh \
+      --replace "/tmp/sdl-test" $(mktemp)
+  '';
+
+  configurePhase = ''
+    { echo 2; echo $out; } | ./configure.sh
+  '';
+
+  inherit games;
+
+  postInstall = ''
+    pushd $out/share/instead/games
+    for a in $games; do
+      unzip $a
+    done
+    popd
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Simple text adventure interpreter for Unix and Windows";
+    homepage = "https://instead.syscall.ru/";
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/iortcw/default.nix b/nixpkgs/pkgs/games/iortcw/default.nix
new file mode 100644
index 000000000000..44a554b9e7d6
--- /dev/null
+++ b/nixpkgs/pkgs/games/iortcw/default.nix
@@ -0,0 +1,27 @@
+{ buildEnv, callPackage, makeWrapper }:
+
+let
+  sp = callPackage ./sp.nix {};
+  mp = sp.overrideAttrs (oldAttrs: {
+    sourceRoot = "${oldAttrs.src.name}/MP";
+  });
+in buildEnv {
+  name = "iortcw";
+
+  paths = [ sp mp ];
+
+  pathsToLink = [ "/opt" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # so we can launch sp from mp game and vice versa
+  postBuild = ''
+    for i in `find -L $out/opt/iortcw -maxdepth 1 -type f -executable`; do
+      makeWrapper $i $out/bin/`basename $i` --chdir "$out/opt/iortcw"
+    done
+  '';
+
+  meta = sp.meta // {
+    description = "Game engine for Return to Castle Wolfenstein";
+  };
+}
diff --git a/nixpkgs/pkgs/games/iortcw/sp.nix b/nixpkgs/pkgs/games/iortcw/sp.nix
new file mode 100644
index 000000000000..66944c49ddd4
--- /dev/null
+++ b/nixpkgs/pkgs/games/iortcw/sp.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchFromGitHub, opusfile, libogg, SDL2, openal, freetype
+, libjpeg, curl, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "iortcw-sp";
+  version = "1.51c";
+
+  src = fetchFromGitHub {
+    owner = "iortcw";
+    repo = "iortcw";
+    rev = version;
+    sha256 = "0g5wgqb1gm34pd05dj2i8nj3qhsz0831p3m7bsgxpjcg9c00jpyw";
+  };
+
+  enableParallelBuilding = true;
+
+  sourceRoot = "${src.name}/SP";
+
+  makeFlags = [
+    "USE_INTERNAL_LIBS=0"
+    "COPYDIR=${placeholder "out"}/opt/iortcw"
+    "USE_OPENAL_DLOPEN=0"
+    "USE_CURL_DLOPEN=0"
+  ];
+
+  installTargets = [ "copyfiles" ];
+
+  buildInputs = [
+    opusfile libogg SDL2 freetype libjpeg openal curl
+  ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-I${SDL2.dev}/include/SDL2"
+    "-I${opusfile.dev}/include/opus"
+  ];
+  NIX_CFLAGS_LINK = [ "-lSDL2" ];
+
+  postInstall = ''
+    for i in `find $out/opt/iortcw -maxdepth 1 -type f -executable`; do
+      makeWrapper $i $out/bin/`basename $i` --chdir "$out/opt/iortcw"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Single player version of game engine for Return to Castle Wolfenstein";
+    homepage = src.meta.homepage;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/ironwail/default.nix b/nixpkgs/pkgs/games/ironwail/default.nix
new file mode 100644
index 000000000000..f55d72c4a40b
--- /dev/null
+++ b/nixpkgs/pkgs/games/ironwail/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, SDL2
+, fetchurl
+, gzip
+, libvorbis
+, libmad
+, flac
+, libopus
+, opusfile
+, libogg
+, curl
+, libxmp
+, vulkan-headers
+, vulkan-loader
+, copyDesktopItems
+, makeDesktopItem
+, pkg-config
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ironwail";
+  version = "0.7.0";
+
+  src = fetchurl {
+    url = "https://github.com/andrei-drexler/ironwail/archive/refs/tags/v${finalAttrs.version}.tar.gz";
+    hash = "sha256-NBG0wwQWqyGWQYJmiLKfxGxpDJLw7Kwf4EnYd33dOpU=";
+  };
+
+  sourceRoot = "${finalAttrs.pname}-${finalAttrs.version}/Quake";
+
+  nativeBuildInputs = [
+    copyDesktopItems pkg-config vulkan-headers
+    gzip libvorbis libmad flac curl libopus
+    opusfile libogg libxmp vulkan-loader SDL2
+  ];
+
+  buildFlags = [
+    "DO_USERDIRS=1"
+    # Makefile defaults, set here to enforce consistency on Darwin build
+    "USE_CODEC_WAVE=1"
+    "USE_CODEC_MP3=1"
+    "USE_CODEC_VORBIS=1"
+    "USE_CODEC_FLAC=1"
+    "USE_CODEC_OPUS=1"
+    "USE_CODEC_MIKMOD=0"
+    "USE_CODEC_UMX=0"
+    "USE_CODEC_XMP=1"
+    "MP3LIB=mad"
+    "VORBISLIB=vorbis"
+    "SDL_CONFIG=sdl2-config"
+    "USE_SDL2=1"
+  ];
+
+  preInstall = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/quake"
+    substituteInPlace Makefile --replace "cp ironwail.pak /usr/local/games/quake" "cp ironwail.pak $out/share/quake/ironwail.pak"
+    substituteInPlace Makefile --replace "/usr/local/games" "$out/bin"
+  '';
+
+  enableParallelBuilding = true;
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "ironwail";
+      exec = "quake";
+      desktopName = "Ironwail";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = {
+    description = "A fork of the QuakeSpasm engine for iD software's Quake";
+    homepage = "https://github.com/andrei-drexler/ironwail";
+    longDescription = ''
+      Ironwail is a fork of QuakeSpasm with focus on high performance instead of
+      compatibility.
+      It features the ability to play the 2021 re-release content with no setup
+      required, a mods menu for quick access to installation of mods, and ease of
+      switching to installed mods.
+      It also include various visual features as well as improved limits for playing
+      larger levels with less performance impacts.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.necrophcodr ];
+    mainProgram = "quake";
+  };
+})
diff --git a/nixpkgs/pkgs/games/itch/butler.nix b/nixpkgs/pkgs/games/itch/butler.nix
new file mode 100644
index 000000000000..cbd6b8aef936
--- /dev/null
+++ b/nixpkgs/pkgs/games/itch/butler.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+, Cocoa
+, fetchpatch
+}:
+
+buildGoModule rec {
+  pname = "butler";
+  version = "15.21.0";
+
+  src = fetchFromGitHub {
+    owner = "itchio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vciSmXR3wI3KcnC+Uz36AgI/WUfztA05MJv1InuOjJM=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Cocoa
+  ];
+
+  patches = [
+    # update x/sys dependency for darwin build https://github.com/itchio/butler/pull/245
+    (fetchpatch {
+      url = "https://github.com/itchio/butler/pull/245/commits/ef651d373e3061fda9692dd44ae0f7ce215e9655.patch";
+      hash = "sha256-rZZn/OGiv3mRyy89uORyJ99zWN21kZCCQAlFvSKxlPU=";
+    })
+  ];
+
+  proxyVendor = true;
+
+  vendorHash = "sha256-CtBwc5mcgLvl2Bvg5gI+ULJMQEEibx1aN3IpmRNUtwE=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command-line itch.io helper";
+    homepage = "https://github.com/itchio/butler";
+    license = licenses.mit;
+    maintainers = with maintainers; [ martfont ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/itch/default.nix b/nixpkgs/pkgs/games/itch/default.nix
new file mode 100644
index 000000000000..a075a789f9d2
--- /dev/null
+++ b/nixpkgs/pkgs/games/itch/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenvNoCC
+, fetchzip
+, fetchFromGitHub
+, butler
+, electron_11
+, steam-run
+, makeWrapper
+, copyDesktopItems
+, makeDesktopItem
+}:
+stdenvNoCC.mkDerivation rec {
+  pname = "itch";
+  version = "25.6.2";
+
+  src = fetchzip {
+    url = "https://broth.itch.ovh/${pname}/linux-amd64/${version}/itch.zip";
+    stripRoot = false;
+    sha256 = "sha256-F/vaYBHCygseiKNMJ+jBy31YDIFqYToAETGUl/pkHII=";
+  };
+
+  itch-setup = fetchzip {
+    url = "https://broth.itch.ovh/itch-setup/linux-amd64/1.26.0/itch-setup.zip";
+    stripRoot = false;
+    sha256 = "sha256-5MP6X33Jfu97o5R1n6Og64Bv4ZMxVM0A8lXeQug+bNA=";
+  };
+
+  icons = let sparseCheckout = "/release/images/itch-icons"; in
+    fetchFromGitHub {
+        owner = "itchio";
+        repo = pname;
+        rev = "v25.6.1-canary"; # Use ${version} if possible
+        hash = "sha256-iBp7K7AW97SOlRa8N8TW2LcVtmUi9JU00fYUuPwKORc=";
+        sparseCheckout = [ sparseCheckout ];
+      } + sparseCheckout;
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = "itch %U";
+      tryExec = pname;
+      icon = pname;
+      desktopName = pname;
+      mimeTypes = [ "x-scheme-handler/itchio" "x-scheme-handler/itch" ];
+      comment = "Install and play itch.io games easily";
+      categories = [ "Game" ];
+    })
+  ];
+
+  # As taken from https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=itch-bin
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname}/resources/app
+    cp -r resources/app "$out/share/${pname}/resources/"
+
+    install -Dm644 LICENSE -t "$out/share/licenses/$pkgname/"
+    install -Dm644 LICENSES.chromium.html -t "$out/share/licenses/$pkgname/"
+
+    for icon in $icons/icon*.png
+    do
+      iconsize="''${icon#$icons/icon}"
+      iconsize="''${iconsize%.png}"
+      icondir="$out/share/icons/hicolor/''${iconsize}x''${iconsize}/apps/"
+      install -Dm644 "$icon" "$icondir/itch.png"
+    done
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${steam-run}/bin/steam-run $out/bin/${pname} \
+      --add-flags ${electron_11}/bin/electron \
+      --add-flags $out/share/${pname}/resources/app \
+      --set BROTH_USE_LOCAL butler,itch-setup \
+      --prefix PATH : ${butler}/bin/:${itch-setup}
+  '';
+
+  meta = with lib; {
+    description = "The best way to play itch.io games";
+    homepage = "https://github.com/itchio/itch";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    sourceProvenance = [ lib.sourceTypes.binaryBytecode ];
+    maintainers = with maintainers; [ pasqui23 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/itchiodl/default.nix b/nixpkgs/pkgs/games/itchiodl/default.nix
new file mode 100644
index 000000000000..57a5d1473e17
--- /dev/null
+++ b/nixpkgs/pkgs/games/itchiodl/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "itchiodl";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "Emersont1";
+    repo = "itchio";
+    rev = "v${version}";
+    hash = "sha256-XuNkqTAT9LlSwruchGQbombAKHZvKhpnqLfvJdDcrj0=";
+  };
+
+  format = "pyproject";
+
+  nativeBuildInputs = with python3Packages; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    beautifulsoup4
+    clint
+    requests
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Emersont1/itchio";
+    description = "itch.io download tool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/ivan/default.nix b/nixpkgs/pkgs/games/ivan/default.nix
new file mode 100644
index 000000000000..21f071af379b
--- /dev/null
+++ b/nixpkgs/pkgs/games/ivan/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, SDL2, SDL2_mixer, alsa-lib, libpng
+, pcre, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+
+  pname = "ivan";
+  version = "059";
+
+  src = fetchFromGitHub {
+    owner = "Attnam";
+    repo = "ivan";
+    rev = "v${version}";
+    sha256 = "sha256-5Ijy28LLx1TGnZE6ZNQXPYfvW2KprF+91fKx2MzLEms=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ SDL2 SDL2_mixer alsa-lib libpng pcre ];
+
+  hardeningDisable = ["all"];
+
+  # Enable wizard mode
+  cmakeFlags = ["-DCMAKE_CXX_FLAGS=-DWIZARD"];
+
+  # Help CMake find SDL_mixer.h
+  env.NIX_CFLAGS_COMPILE = "-I${lib.getDev SDL2_mixer}/include/SDL2";
+
+  # Create "ivan.desktop" file
+  ivanDesktop = makeDesktopItem {
+    name = pname;
+    exec = pname;
+    icon = "ivan.png";
+    desktopName = "IVAN";
+    genericName = pname;
+    categories = [ "Game" "AdventureGame" "RolePlaying" ];
+    comment = meta.description;
+  };
+
+  # Create appropriate directories. Copy icons and desktop item to these directories.
+  postInstall = ''
+    mkdir -p $out/share/applications
+    mkdir -p $out/share/icons/hicolor/16x16/apps
+    mkdir -p $out/share/icons/hicolor/32x32/apps
+    mkdir -p $out/share/icons/hicolor/128x128/apps
+    mkdir -p $out/share/icons/hicolor/256x256/apps
+    mkdir -p $out/share/icons/hicolor/512x512/apps
+    cp $src/Graphics/icons/shadowless.iconset/icon_16x16.png $out/share/icons/hicolor/16x16/apps/ivan.png
+    cp $src/Graphics/icons/shadowless.iconset/icon_32x32.png $out/share/icons/hicolor/32x32/apps/ivan.png
+    cp $src/Graphics/icons/shadowless.iconset/icon_128x128.png $out/share/icons/hicolor/128x128/apps/ivan.png
+    cp $src/Graphics/icons/shadowless.iconset/icon_256x256.png $out/share/icons/hicolor/256x256/apps/ivan.png
+    cp $src/Graphics/icons/shadowless.iconset/icon_512x512.png $out/share/icons/hicolor/512x512/apps/ivan.png
+    cp ${ivanDesktop}/share/applications/* $out/share/applications
+  '';
+
+  meta = with lib; {
+    description = "Graphical roguelike game";
+    longDescription = ''
+      Iter Vehemens ad Necem (IVAN) is a graphical roguelike game, which currently
+      runs in Windows, DOS, Linux, and OS X. It features advanced bodypart and
+      material handling, multi-colored lighting and, above all, deep gameplay.
+
+      This is a fan continuation of IVAN by members of Attnam.com
+    '';
+    homepage = "https://attnam.com/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/ja2-stracciatella/default.nix b/nixpkgs/pkgs/games/ja2-stracciatella/default.nix
new file mode 100644
index 000000000000..ea363c969429
--- /dev/null
+++ b/nixpkgs/pkgs/games/ja2-stracciatella/default.nix
@@ -0,0 +1,62 @@
+{ stdenv, lib, fetchurl, fetchFromGitHub, cmake, python3, rustPlatform, SDL2, fltk, rapidjson, gtest, Carbon, Cocoa }:
+let
+  version = "0.17.0";
+  src = fetchFromGitHub {
+    owner = "ja2-stracciatella";
+    repo = "ja2-stracciatella";
+    rev = "v${version}";
+    sha256 = "0m6rvgkba29jy3yq5hs1sn26mwrjl6mamqnv4plrid5fqaivhn6j";
+  };
+  libstracciatella = rustPlatform.buildRustPackage {
+    pname = "libstracciatella";
+    inherit version;
+    src = "${src}/rust";
+    cargoHash = "sha256-asUt+wUpwwDvSyuNZds6yMC4Ef4D8woMYWamzcJJiy4=";
+
+    preBuild = ''
+      mkdir -p $out/include/stracciatella
+      export HEADER_LOCATION=$out/include/stracciatella/stracciatella.h
+    '';
+  };
+  stringTheoryUrl = "https://github.com/zrax/string_theory/archive/3.1.tar.gz";
+  stringTheory = fetchurl {
+    url = stringTheoryUrl;
+    sha256 = "1flq26kkvx2m1yd38ldcq2k046yqw07jahms8a6614m924bmbv41";
+  };
+in
+stdenv.mkDerivation {
+  pname = "ja2-stracciatella";
+  inherit src version;
+
+  nativeBuildInputs = [ cmake python3 ];
+  buildInputs = [ SDL2 fltk rapidjson gtest ] ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa ];
+
+  patches = [
+    ./remove-rust-buildstep.patch
+  ];
+
+  preConfigure = ''
+    # Use rust library built with nix
+    substituteInPlace CMakeLists.txt \
+      --replace lib/libstracciatella_c_api.a ${libstracciatella}/lib/libstracciatella_c_api.a \
+      --replace include/stracciatella ${libstracciatella}/include/stracciatella \
+      --replace bin/ja2-resource-pack ${libstracciatella}/bin/ja2-resource-pack
+
+    # Patch dependencies that are usually loaded by url
+    substituteInPlace dependencies/lib-string_theory/builder/CMakeLists.txt.in \
+      --replace ${stringTheoryUrl} file://${stringTheory}
+
+    cmakeFlagsArray+=("-DLOCAL_RAPIDJSON_LIB=OFF" "-DLOCAL_GTEST_LIB=OFF" "-DEXTRA_DATA_DIR=$out/share/ja2")
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    HOME=/tmp $out/bin/ja2 -unittests
+  '';
+
+  meta = {
+    description = "Jagged Alliance 2, with community fixes";
+    license = "SFI Source Code license agreement";
+    homepage = "https://ja2-stracciatella.github.io/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/ja2-stracciatella/remove-rust-buildstep.patch b/nixpkgs/pkgs/games/ja2-stracciatella/remove-rust-buildstep.patch
new file mode 100644
index 000000000000..64e3c11b2502
--- /dev/null
+++ b/nixpkgs/pkgs/games/ja2-stracciatella/remove-rust-buildstep.patch
@@ -0,0 +1,73 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e4e5547af..a3017d197 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -175,13 +175,12 @@ if(BUILD_LAUNCHER)
+ endif()
+ message(STATUS "Fltk Libraries: ${FLTK_LIBRARIES}")
+ 
+-set(JA2_INCLUDES "")
++set(JA2_INCLUDES "include/stracciatella")
+ set(JA2_SOURCES "")
+ add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/externalized")
+ add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/game")
+ add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/sgp")
+ add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/dependencies/lib-smacker")
+-add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/dependencies/lib-stracciatella")
+ add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/dependencies/lib-string_theory")
+ 
+ if(BUILD_LAUNCHER)
+@@ -239,14 +238,12 @@ string(LENGTH "${CMAKE_SOURCE_DIR}/src/" SOURCE_PATH_SIZE)
+ add_definitions("-DSOURCE_PATH_SIZE=${SOURCE_PATH_SIZE}")
+ 
+ add_executable(${JA2_BINARY} ${JA2_SOURCES})
+-target_link_libraries(${JA2_BINARY} ${SDL2_LIBRARY} ${GTEST_LIBRARIES} smacker ${STRACCIATELLA_LIBRARIES} string_theory-internal)
+-add_dependencies(${JA2_BINARY} stracciatella)
++target_link_libraries(${JA2_BINARY} ${SDL2_LIBRARY} ${GTEST_LIBRARIES} smacker lib/libstracciatella_c_api.a dl pthread string_theory-internal)
+ set_property(SOURCE ${CMAKE_SOURCE_DIR}/src/game/GameVersion.cc APPEND PROPERTY COMPILE_DEFINITIONS "GAME_VERSION=v${ja2-stracciatella_VERSION}")
+ 
+ if(BUILD_LAUNCHER)
+     add_executable(${LAUNCHER_BINARY} ${LAUNCHER_SOURCES})
+-    target_link_libraries(${LAUNCHER_BINARY} ${FLTK_LIBRARIES} ${STRACCIATELLA_LIBRARIES} string_theory-internal)
+-    add_dependencies(${LAUNCHER_BINARY} stracciatella)
++    target_link_libraries(${LAUNCHER_BINARY} ${FLTK_LIBRARIES} lib/libstracciatella_c_api.a dl pthread string_theory-internal)
+ endif()
+ 
+ macro(copy_assets_dir_to_ja2_binary_after_build DIR)
+@@ -375,12 +372,12 @@ set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}_${CPACK_PACKAGE_VERSION}_${PACKAGE_
+ 
+ include(CPack)
+ 
+-if (UNIX AND NOT MINGW AND NOT APPLE)
++if (UNIX)
+     install(TARGETS ${JA2_BINARY} RUNTIME DESTINATION bin)
+     if(BUILD_LAUNCHER)
+         install(TARGETS ${LAUNCHER_BINARY} RUNTIME DESTINATION bin)
+     endif()
+-    install(PROGRAMS "${CMAKE_BINARY_DIR}/lib-stracciatella/bin/ja2-resource-pack${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION bin)
++    install(PROGRAMS "bin/ja2-resource-pack" DESTINATION bin)
+     install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/assets/externalized assets/mods assets/unittests DESTINATION share/ja2)
+     if(WITH_EDITOR_SLF)
+         install(FILES "${EDITORSLF_FILE}" DESTINATION share/ja2)
+@@ -400,7 +397,7 @@ else()
+     if(BUILD_LAUNCHER)
+         install(TARGETS ${LAUNCHER_BINARY} RUNTIME DESTINATION .)
+     endif()
+-    install(PROGRAMS "${CMAKE_BINARY_DIR}/lib-stracciatella/bin/ja2-resource-pack${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION .)
++    install(PROGRAMS "bin/ja2-resource-pack" DESTINATION .)
+     install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/assets/externalized assets/mods assets/unittests DESTINATION .)
+     if(WITH_EDITOR_SLF)
+         install(FILES "${EDITORSLF_FILE}" DESTINATION .)
+@@ -428,12 +425,6 @@ if (MINGW)
+     install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/install-dlls-mingw.cmake")
+ endif()
+ 
+-if(APPLE)
+-    file(GLOB APPLE_DIST_FILES "${CMAKE_CURRENT_SOURCE_DIR}/assets/distr-files-mac/*.txt")
+-    install(FILES ${APPLE_DIST_FILES} DESTINATION .)
+-    install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/lib-SDL2-2.0.8-macos/SDL2.framework DESTINATION .)
+-endif()
+-
+ ## Uninstall
+ 
+ add_custom_templated_target("uninstall")
diff --git a/nixpkgs/pkgs/games/jazz2/content.nix b/nixpkgs/pkgs/games/jazz2/content.nix
new file mode 100644
index 000000000000..0a0e72075635
--- /dev/null
+++ b/nixpkgs/pkgs/games/jazz2/content.nix
@@ -0,0 +1,20 @@
+{ jazz2
+, lib
+, runCommand
+}:
+
+runCommand "jazz2-content"
+{
+  inherit (jazz2) version src;
+
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    description = "Assets needed for jazz2";
+    homepage = "https://github.com/deathkiller/jazz2-native";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ surfaceflinger ];
+  };
+} ''
+  cp -r $src/Content $out
+''
diff --git a/nixpkgs/pkgs/games/jazz2/game.nix b/nixpkgs/pkgs/games/jazz2/game.nix
new file mode 100644
index 000000000000..22ddbfe337a7
--- /dev/null
+++ b/nixpkgs/pkgs/games/jazz2/game.nix
@@ -0,0 +1,47 @@
+{ cmake
+, fetchFromGitHub
+, glew
+, glfw
+, jazz2-content
+, lib
+, libGL
+, libopenmpt
+, libvorbis
+, openal
+, SDL2
+, stdenv
+, xorg
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jazz2";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "deathkiller";
+    repo = "jazz2-native";
+    rev = version;
+    sha256 = "nJha7+geP2Ov7ciEDzJ+XWdiF1jzv4Oeis1DwxcpJXo=";
+  };
+
+  patches = [ ./nocontent.patch ];
+
+  buildInputs = [ libGL SDL2 zlib glew glfw openal libvorbis libopenmpt xorg.libSM xorg.libICE xorg.libXext ];
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [
+    "-DNCINE_DOWNLOAD_DEPENDENCIES=OFF"
+    "-DGLFW_INCLUDE_DIR=${glfw}/include/GLFW"
+    "-DLIBOPENMPT_INCLUDE_DIR=${libopenmpt.dev}/include/libopenmpt"
+    "-DNCINE_OVERRIDE_CONTENT_PATH=${jazz2-content}"
+  ];
+
+  meta = with lib; {
+    description = "Open-source Jazz Jackrabbit 2 reimplementation";
+    homepage = "https://github.com/deathkiller/jazz2-native";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ surfaceflinger ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/jazz2/nocontent.patch b/nixpkgs/pkgs/games/jazz2/nocontent.patch
new file mode 100644
index 000000000000..28ced9426b49
--- /dev/null
+++ b/nixpkgs/pkgs/games/jazz2/nocontent.patch
@@ -0,0 +1,12 @@
+diff --git a/cmake/ncine_installation.cmake b/cmake/ncine_installation.cmake
+index 9ccb707..89c350f 100644
+--- a/cmake/ncine_installation.cmake
++++ b/cmake/ncine_installation.cmake
+@@ -195,7 +195,6 @@ endif()
+ #endif()
+ 
+ if(NOT EMSCRIPTEN)
+-	install(DIRECTORY "${NCINE_ROOT}/Content/" DESTINATION ${DATA_INSTALL_DESTINATION})
+ else()
+ 	install(FILES "${CMAKE_BINARY_DIR}/${CPACK_EXECUTABLE_NAME}.html" DESTINATION ".")
+ 	install(FILES "${CMAKE_BINARY_DIR}/${CPACK_EXECUTABLE_NAME}.data" DESTINATION ".")
diff --git a/nixpkgs/pkgs/games/jfsw/default.nix b/nixpkgs/pkgs/games/jfsw/default.nix
new file mode 100644
index 000000000000..e170f0024531
--- /dev/null
+++ b/nixpkgs/pkgs/games/jfsw/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, which
+, SDL2
+, perl
+, pkg-config
+, wrapGAppsHook
+, gtk3
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "jfsw";
+  version = "20211225";
+
+  src = fetchFromGitHub {
+    owner = "jonof";
+    repo = "jfsw";
+    rev = "refs/tags/${finalAttrs.version}";
+    fetchSubmodules = true;
+    hash = "sha256-oRJHVsVo+KQfJyd8TcPxTMPPi993qxQb0wnD9nR4vJY=";
+  };
+
+  nativeBuildInputs = [
+    which
+    SDL2
+    perl
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    SDL2
+    gtk3
+  ];
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 sw -t $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Modern port the original Shadow Warrior";
+    homepage = "http://www.jonof.id.au/jfsw/";
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "sw";
+    maintainers = with lib.maintainers; [ moody ];
+    broken = stdenv.isDarwin;
+    inherit (SDL2.meta) platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/games/julius/default.nix b/nixpkgs/pkgs/games/julius/default.nix
new file mode 100644
index 000000000000..df1ff2bd1a06
--- /dev/null
+++ b/nixpkgs/pkgs/games/julius/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, SDL2_mixer
+, cmake
+, libpng
+}:
+
+stdenv.mkDerivation rec {
+  pname = "julius";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "bvschaik";
+    repo = "julius";
+    rev = "v${version}";
+    hash = "sha256-I5GTaVWzz0ryGLDSS3rzxp+XFVXZa9hZmgwon/6r83A=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ SDL2 SDL2_mixer libpng ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bvschaik/julius";
+    description = "An open source re-implementation of Caesar III";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ Thra11 ];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/jumpnbump/default.nix b/nixpkgs/pkgs/games/jumpnbump/default.nix
new file mode 100644
index 000000000000..193d4dc0b585
--- /dev/null
+++ b/nixpkgs/pkgs/games/jumpnbump/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv
+, fetchFromGitLab
+, fetchzip
+, SDL2, SDL2_mixer, SDL2_net
+, gtk3, gobject-introspection
+, python3Packages
+, wrapGAppsHook
+}:
+
+let data = fetchzip {
+  url = "https://mirandir.pagesperso-orange.fr/files/additional-levels.tar.xz";
+  sha256 = "167hisscsbldrwrs54gq6446shl8h26qdqigmfg0lq3daynqycg2";
+}; in
+
+stdenv.mkDerivation rec {
+  pname = "jumpnbump";
+  version = "1.70-dev";
+
+  # By targeting the development version, we can omit the patches Arch uses
+  src = fetchFromGitLab {
+    domain = "gitlab.com";
+    owner = "LibreGames";
+    repo = pname;
+    rev = "5744738211ca691444f779aafee3537fb3562516";
+    sha256 = "0f1k26jicmb95bx19wgcdpwsbbl343i7mqqqc2z9lkb8drlsyqcy";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [ python3Packages.wrapPython wrapGAppsHook gobject-introspection ];
+  buildInputs = [ SDL2 SDL2_mixer SDL2_net gtk3 ];
+
+  postInstall = ''
+    make -C menu PREFIX=$out all install
+    cp -r ${data}/* $out/share/jumpnbump/
+    rm $out/share/applications/jumpnbump-menu.desktop
+    sed -ie 's+Exec=jumpnbump+Exec=jumpnbump-menu+' $out/share/applications/jumpnbump.desktop
+  '';
+
+  pythonPath = with python3Packages; [ pygobject3 pillow ];
+  preFixup = ''
+    buildPythonPath "$out $pythonPath"
+  '';
+  postFixup = ''
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "cute, true multiplayer platform game with bunnies";
+    homepage    = "https://libregames.gitlab.io/jumpnbump/";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ iblech ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/jumpy/Cargo.lock b/nixpkgs/pkgs/games/jumpy/Cargo.lock
new file mode 100644
index 000000000000..55e2b382e610
--- /dev/null
+++ b/nixpkgs/pkgs/games/jumpy/Cargo.lock
@@ -0,0 +1,5117 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ab_glyph"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1061f3ff92c2f65800df1f12fc7b4ff44ee14783104187dd04dfee6f11b0fd2"
+dependencies = [
+ "ab_glyph_rasterizer",
+ "owned_ttf_parser",
+]
+
+[[package]]
+name = "ab_glyph_rasterizer"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
+
+[[package]]
+name = "accesskit"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76eb1adf08c5bcaa8490b9851fd53cca27fa9880076f178ea9d29f05196728a8"
+dependencies = [
+ "enumn",
+ "serde",
+]
+
+[[package]]
+name = "accesskit_consumer"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04bb4d9e4772fe0d47df57d0d5dbe5d85dd05e2f37ae1ddb6b105e76be58fb00"
+dependencies = [
+ "accesskit",
+]
+
+[[package]]
+name = "accesskit_macos"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134d0acf6acb667c89d3332999b1a5df4edbc8d6113910f392ebb73f2b03bb56"
+dependencies = [
+ "accesskit",
+ "accesskit_consumer",
+ "objc2",
+ "once_cell",
+]
+
+[[package]]
+name = "accesskit_windows"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9eac0a7f2d7cd7a93b938af401d3d8e8b7094217989a7c25c55a953023436e31"
+dependencies = [
+ "accesskit",
+ "accesskit_consumer",
+ "arrayvec",
+ "once_cell",
+ "paste",
+ "windows 0.48.0",
+]
+
+[[package]]
+name = "accesskit_winit"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "825d23acee1bd6d25cbaa3ca6ed6e73faf24122a774ec33d52c5c86c6ab423c0"
+dependencies = [
+ "accesskit",
+ "accesskit_macos",
+ "accesskit_windows",
+ "winit",
+]
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "getrandom 0.2.10",
+ "once_cell",
+ "serde",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "alsa"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2562ad8dcf0f789f65c6fdaad8a8a9708ed6b488e649da28c01656ad66b8b47"
+dependencies = [
+ "alsa-sys",
+ "bitflags 1.3.2",
+ "libc",
+ "nix 0.24.3",
+]
+
+[[package]]
+name = "alsa-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "android-activity"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0"
+dependencies = [
+ "android-properties",
+ "bitflags 1.3.2",
+ "cc",
+ "jni-sys",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-sys",
+ "num_enum 0.6.1",
+]
+
+[[package]]
+name = "android-properties"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
+
+[[package]]
+name = "android_log-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "append-only-vec"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3cb8f874ecf419dd8165d0279746de966cb8966636d028845e3bd65d519812a"
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "arboard"
+version = "3.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc"
+dependencies = [
+ "clipboard-win",
+ "core-graphics",
+ "image",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "parking_lot",
+ "thiserror",
+ "winapi",
+ "x11rb",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "ash"
+version = "0.37.3+1.3.251"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a"
+dependencies = [
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 2.5.3",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 2.0.1",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener 2.5.3",
+]
+
+[[package]]
+name = "async-task"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921"
+
+[[package]]
+name = "atomic-arena"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5450eca8ce5abcfd5520727e975ebab30ccca96030550406b0ca718b224ead10"
+
+[[package]]
+name = "atomicell"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "157342dd84c64f16899b4b16c1fb2cce54b887990362aac3c590b3d13810890f"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
+
+[[package]]
+name = "bevy"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91c6d3ec4f89e85294dc97334c5b271ddc301fdf67ac9bb994fe44d9273e6ed7"
+dependencies = [
+ "bevy_internal",
+]
+
+[[package]]
+name = "bevy_a11y"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "132c9e35a77c5395951f6d25fa2c52ee92296353426df4f961e60f3ff47e2e42"
+dependencies = [
+ "accesskit",
+ "bevy_app",
+ "bevy_derive",
+ "bevy_ecs",
+]
+
+[[package]]
+name = "bevy_app"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f557a7d59e1e16892d7544fc37316506ee598cb5310ef0365125a30783c11531"
+dependencies = [
+ "bevy_derive",
+ "bevy_ecs",
+ "bevy_reflect",
+ "bevy_tasks",
+ "bevy_utils",
+ "downcast-rs",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "bevy_asset"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9714af523da4cdf58c42a317e5ed40349708ad954a18533991fd64c8ae0a6f68"
+dependencies = [
+ "anyhow",
+ "async-channel",
+ "bevy_app",
+ "bevy_diagnostic",
+ "bevy_ecs",
+ "bevy_log",
+ "bevy_reflect",
+ "bevy_tasks",
+ "bevy_utils",
+ "bevy_winit",
+ "crossbeam-channel",
+ "downcast-rs",
+ "fastrand 1.9.0",
+ "js-sys",
+ "parking_lot",
+ "serde",
+ "thiserror",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "bevy_core"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d5272321be5fcf5ce2fb16023bc825bb10dfcb71611117296537181ce950f48"
+dependencies = [
+ "bevy_app",
+ "bevy_ecs",
+ "bevy_math",
+ "bevy_reflect",
+ "bevy_tasks",
+ "bevy_utils",
+ "bytemuck",
+]
+
+[[package]]
+name = "bevy_core_pipeline"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67382fa9c96ce4f4e5833ed7cedd9886844a8f3284b4a717bd4ac738dcdea0c3"
+dependencies = [
+ "bevy_app",
+ "bevy_asset",
+ "bevy_core",
+ "bevy_derive",
+ "bevy_ecs",
+ "bevy_math",
+ "bevy_reflect",
+ "bevy_render",
+ "bevy_transform",
+ "bevy_utils",
+ "bitflags 2.4.0",
+ "radsort",
+ "serde",
+]
+
+[[package]]
+name = "bevy_derive"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44e4e2784a81430199e4157e02903a987a32127c773985506f020e7d501b62e"
+dependencies = [
+ "bevy_macro_utils",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "bevy_diagnostic"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6babb230dc383c98fdfc9603e3a7a2a49e1e2879dbe8291059ef37dca897932e"
+dependencies = [
+ "bevy_app",
+ "bevy_core",
+ "bevy_ecs",
+ "bevy_log",
+ "bevy_time",
+ "bevy_utils",
+ "sysinfo",
+]
+
+[[package]]
+name = "bevy_dylib"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22ea11f830028e1c9d37f8bc88c5873f1c4c0346661209c2ba015f899c51863c"
+dependencies = [
+ "bevy_internal",
+]
+
+[[package]]
+name = "bevy_ecs"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266144b36df7e834d5198049e037ecdf2a2310a76ce39ed937d1b0a6a2c4e8c6"
+dependencies = [
+ "async-channel",
+ "bevy_ecs_macros",
+ "bevy_ptr",
+ "bevy_reflect",
+ "bevy_tasks",
+ "bevy_utils",
+ "downcast-rs",
+ "event-listener 2.5.3",
+ "fixedbitset",
+ "rustc-hash",
+ "serde",
+ "thiserror",
+ "thread_local",
+]
+
+[[package]]
+name = "bevy_ecs_macros"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7157a9c3be038d5008ee3f114feb6cf6b39c1d3d32ee21a7cacb8f81fccdfa80"
+dependencies = [
+ "bevy_macro_utils",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "bevy_egui"
+version = "0.21.0"
+source = "git+https://github.com/zicklag/bevy_egui?branch=feat/egui-0.23#aeb3d7f1eaaacc67cf3966974d1e31f31e8fad62"
+dependencies = [
+ "arboard",
+ "bevy",
+ "egui",
+ "thread_local",
+ "webbrowser",
+]
+
+[[package]]
+name = "bevy_encase_derive"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0ac0f55ad6bca1be7b0f35bbd5fc95ed3d31e4e9db158fee8e5327f59006001"
+dependencies = [
+ "bevy_macro_utils",
+ "encase_derive_impl",
+]
+
+[[package]]
+name = "bevy_gilrs"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65f4d79c55829f8016014593a42453f61a564ffb06ef79460d25696ccdfac67b"
+dependencies = [
+ "bevy_app",
+ "bevy_ecs",
+ "bevy_input",
+ "bevy_log",
+ "bevy_time",
+ "bevy_utils",
+ "gilrs",
+ "thiserror",
+]
+
+[[package]]
+name = "bevy_gizmos"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e286a3e7276431963f4aa29165ea5429fa7dbbc6d5c5ba0c531e7dd44ecc88a2"
+dependencies = [
+ "bevy_app",
+ "bevy_asset",
+ "bevy_core",
+ "bevy_core_pipeline",
+ "bevy_ecs",
+ "bevy_math",
+ "bevy_reflect",
+ "bevy_render",
+ "bevy_sprite",
+ "bevy_transform",
+ "bevy_utils",
+]
+
+[[package]]
+name = "bevy_hierarchy"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "103f8f58416ac6799b8c7f0b418f1fac9eba44fa924df3b0e16b09256b897e3d"
+dependencies = [
+ "bevy_app",
+ "bevy_core",
+ "bevy_ecs",
+ "bevy_log",
+ "bevy_reflect",
+ "bevy_utils",
+ "smallvec",
+]
+
+[[package]]
+name = "bevy_input"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbd935401101ac8003f3c3aea70788c65ad03f7a32716a10608bedda7a648bc"
+dependencies = [
+ "bevy_app",
+ "bevy_ecs",
+ "bevy_math",
+ "bevy_reflect",
+ "bevy_utils",
+ "thiserror",
+]
+
+[[package]]
+name = "bevy_internal"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0e35a9b2bd29aa784b3cc416bcbf2a298f69f00ca51fd042ea39d9af7fad37e"
+dependencies = [
+ "bevy_a11y",
+ "bevy_app",
+ "bevy_asset",
+ "bevy_core",
+ "bevy_core_pipeline",
+ "bevy_derive",
+ "bevy_diagnostic",
+ "bevy_ecs",
+ "bevy_gilrs",
+ "bevy_gizmos",
+ "bevy_hierarchy",
+ "bevy_input",
+ "bevy_log",
+ "bevy_math",
+ "bevy_pbr",
+ "bevy_ptr",
+ "bevy_reflect",
+ "bevy_render",
+ "bevy_scene",
+ "bevy_sprite",
+ "bevy_tasks",
+ "bevy_time",
+ "bevy_transform",
+ "bevy_utils",
+ "bevy_window",
+ "bevy_winit",
+]
+
+[[package]]
+name = "bevy_log"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07dcc615ff4f617b06c3f9522fca3c55d56f9644db293318f8ab68fcdea5d4fe"
+dependencies = [
+ "android_log-sys",
+ "bevy_app",
+ "bevy_ecs",
+ "bevy_utils",
+ "console_error_panic_hook",
+ "tracing-log",
+ "tracing-subscriber",
+ "tracing-wasm",
+]
+
+[[package]]
+name = "bevy_macro_utils"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ddc18d489b4e57832d4958cde7cd2f349f0ad91e5892ac9e2f2ee16546b981"
+dependencies = [
+ "quote",
+ "rustc-hash",
+ "syn 2.0.38",
+ "toml_edit",
+]
+
+[[package]]
+name = "bevy_math"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78286a81fead796dc4b45ab14f4f02fe29a94423d3587bcfef872b2a8e0a474b"
+dependencies = [
+ "glam",
+ "serde",
+]
+
+[[package]]
+name = "bevy_mikktspace"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cfc2a21ea47970a9b1f0f4735af3256a8f204815bd756110051d10f9d909497"
+dependencies = [
+ "glam",
+]
+
+[[package]]
+name = "bevy_pbr"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63ca796a619e61cd43a0a3b11fde54644f7f0732a1fba1eef5d406248c6eba85"
+dependencies = [
+ "bevy_app",
+ "bevy_asset",
+ "bevy_core_pipeline",
+ "bevy_derive",
+ "bevy_ecs",
+ "bevy_math",
+ "bevy_reflect",
+ "bevy_render",
+ "bevy_transform",
+ "bevy_utils",
+ "bevy_window",
+ "bitflags 2.4.0",
+ "bytemuck",
+ "naga_oil",
+ "radsort",
+]
+
+[[package]]
+name = "bevy_prototype_lyon"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e347c16caede05dc5f774ba388cefeef0ab558a5601fc6b5ffd6606bef77308"
+dependencies = [
+ "bevy",
+ "lyon_algorithms",
+ "lyon_tessellation",
+ "svgtypes",
+]
+
+[[package]]
+name = "bevy_ptr"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72c7586401a46f7d8e436028225c1df5288f2e0082d066b247a82466fea155c6"
+
+[[package]]
+name = "bevy_reflect"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0778197a1eb3e095a71417c74b7152ede02975cdc95b5ea4ddc5251ed00a2eb5"
+dependencies = [
+ "bevy_math",
+ "bevy_ptr",
+ "bevy_reflect_derive",
+ "bevy_utils",
+ "downcast-rs",
+ "erased-serde",
+ "glam",
+ "once_cell",
+ "parking_lot",
+ "serde",
+ "smallvec",
+ "smol_str",
+ "thiserror",
+]
+
+[[package]]
+name = "bevy_reflect_derive"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "342a4b2d09db22c48607d23ad59a056aff1ee004549050a51d490d375ba29528"
+dependencies = [
+ "bevy_macro_utils",
+ "bit-set",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "uuid",
+]
+
+[[package]]
+name = "bevy_render"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39df4824b760928c27afc7b00fb649c7a63c9d76661ab014ff5c86537ee906cb"
+dependencies = [
+ "anyhow",
+ "async-channel",
+ "bevy_app",
+ "bevy_asset",
+ "bevy_core",
+ "bevy_derive",
+ "bevy_ecs",
+ "bevy_encase_derive",
+ "bevy_hierarchy",
+ "bevy_log",
+ "bevy_math",
+ "bevy_mikktspace",
+ "bevy_reflect",
+ "bevy_render_macros",
+ "bevy_tasks",
+ "bevy_time",
+ "bevy_transform",
+ "bevy_utils",
+ "bevy_window",
+ "bitflags 2.4.0",
+ "bytemuck",
+ "codespan-reporting",
+ "downcast-rs",
+ "encase",
+ "futures-lite",
+ "hexasphere",
+ "image",
+ "js-sys",
+ "naga",
+ "naga_oil",
+ "parking_lot",
+ "regex",
+ "serde",
+ "smallvec",
+ "thiserror",
+ "thread_local",
+ "wasm-bindgen",
+ "web-sys",
+ "wgpu",
+ "wgpu-hal",
+]
+
+[[package]]
+name = "bevy_render_macros"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bd08c740aac73363e32fb45af869b10cec65bcb76fe3e6cd0f8f7eebf4c36c9"
+dependencies = [
+ "bevy_macro_utils",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "bevy_scene"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd47e1263506153bef3a8be97fe2d856f206d315668c4f97510ca6cc181d9681"
+dependencies = [
+ "anyhow",
+ "bevy_app",
+ "bevy_asset",
+ "bevy_derive",
+ "bevy_ecs",
+ "bevy_hierarchy",
+ "bevy_reflect",
+ "bevy_render",
+ "bevy_transform",
+ "bevy_utils",
+ "ron",
+ "serde",
+ "thiserror",
+ "uuid",
+]
+
+[[package]]
+name = "bevy_sprite"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68a8ca824fad75c6ef74cfbbba0a4ce3ccc435fa23d6bf3f003f260548813397"
+dependencies = [
+ "bevy_app",
+ "bevy_asset",
+ "bevy_core_pipeline",
+ "bevy_derive",
+ "bevy_ecs",
+ "bevy_log",
+ "bevy_math",
+ "bevy_reflect",
+ "bevy_render",
+ "bevy_transform",
+ "bevy_utils",
+ "bitflags 2.4.0",
+ "bytemuck",
+ "fixedbitset",
+ "guillotiere",
+ "rectangle-pack",
+ "thiserror",
+]
+
+[[package]]
+name = "bevy_tasks"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c73bbb847c83990d3927005090df52f8ac49332e1643d2ad9aac3cd2974e66bf"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-task",
+ "concurrent-queue",
+ "futures-lite",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "bevy_time"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d58d6dbae9c8225d8c0e0f04d2c5dbb71d22adc01ecd5ab3cebc364139e4a6d"
+dependencies = [
+ "bevy_app",
+ "bevy_ecs",
+ "bevy_reflect",
+ "bevy_utils",
+ "crossbeam-channel",
+ "thiserror",
+]
+
+[[package]]
+name = "bevy_transform"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9b0ac0149a57cd846cb357a35fc99286f9848e53d4481954608ac9552ed2d4"
+dependencies = [
+ "bevy_app",
+ "bevy_ecs",
+ "bevy_hierarchy",
+ "bevy_math",
+ "bevy_reflect",
+]
+
+[[package]]
+name = "bevy_utils"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d9484e32434ea84dc548cff246ce0c6f756c1336f5ea03f24ac120a48595c7"
+dependencies = [
+ "ahash",
+ "bevy_utils_proc_macros",
+ "getrandom 0.2.10",
+ "hashbrown 0.14.1",
+ "instant",
+ "petgraph",
+ "thiserror",
+ "tracing",
+ "uuid",
+]
+
+[[package]]
+name = "bevy_utils_proc_macros"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5391b242c36f556db01d5891444730c83aa9dd648b6a8fd2b755d22cb3bddb57"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "bevy_window"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd584c0da7c4ada6557b09f57f30fb7cff21ccedc641473fc391574b4c9b7944"
+dependencies = [
+ "bevy_app",
+ "bevy_ecs",
+ "bevy_input",
+ "bevy_math",
+ "bevy_reflect",
+ "bevy_utils",
+ "raw-window-handle",
+]
+
+[[package]]
+name = "bevy_winit"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdc044abdb95790c20053e6326760f0a2985f0dcd78613d397bf35f16039d53"
+dependencies = [
+ "accesskit_winit",
+ "approx",
+ "bevy_a11y",
+ "bevy_app",
+ "bevy_derive",
+ "bevy_ecs",
+ "bevy_hierarchy",
+ "bevy_input",
+ "bevy_math",
+ "bevy_tasks",
+ "bevy_utils",
+ "bevy_window",
+ "crossbeam-channel",
+ "raw-window-handle",
+ "wasm-bindgen",
+ "web-sys",
+ "winit",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.68.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078"
+dependencies = [
+ "bitflags 2.4.0",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitset-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f421f1bcb30aa9d851a03c2920ab5d96ca920d5786645a597b5fc37922f8b89e"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-sys"
+version = "0.1.0-beta.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146"
+dependencies = [
+ "objc-sys",
+]
+
+[[package]]
+name = "block2"
+version = "0.2.0-alpha.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42"
+dependencies = [
+ "block-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "bones_asset"
+version = "0.3.0"
+source = "git+https://github.com/fishfolk/bones#65d667e2ccd691388f0318c76d3a236bee9d11be"
+dependencies = [
+ "anyhow",
+ "append-only-vec",
+ "async-channel",
+ "bevy_tasks",
+ "bones_schema",
+ "bones_utils",
+ "bs58",
+ "dashmap",
+ "ehttp",
+ "erased-serde",
+ "event-listener 3.0.0",
+ "notify",
+ "once_cell",
+ "paste",
+ "path-absolutize",
+ "semver",
+ "serde",
+ "serde_json",
+ "serde_yaml",
+ "sha2",
+ "tracing",
+ "ulid",
+]
+
+[[package]]
+name = "bones_bevy_renderer"
+version = "0.3.0"
+source = "git+https://github.com/fishfolk/bones#65d667e2ccd691388f0318c76d3a236bee9d11be"
+dependencies = [
+ "anyhow",
+ "bevy",
+ "bevy_egui",
+ "bevy_prototype_lyon",
+ "bones_framework",
+ "directories 5.0.1",
+ "glam",
+ "serde",
+ "serde_yaml",
+ "web-sys",
+]
+
+[[package]]
+name = "bones_ecs"
+version = "0.3.0"
+source = "git+https://github.com/fishfolk/bones#65d667e2ccd691388f0318c76d3a236bee9d11be"
+dependencies = [
+ "anyhow",
+ "atomicell",
+ "bitset-core",
+ "bones_schema",
+ "bones_utils",
+ "glam",
+ "paste",
+ "thiserror",
+]
+
+[[package]]
+name = "bones_framework"
+version = "0.3.0"
+source = "git+https://github.com/fishfolk/bones#65d667e2ccd691388f0318c76d3a236bee9d11be"
+dependencies = [
+ "bones_asset",
+ "bones_lib",
+ "bones_schema",
+ "csscolorparser",
+ "egui",
+ "fluent",
+ "fluent-langneg",
+ "glam",
+ "hex",
+ "image",
+ "instant",
+ "intl-memoizer",
+ "kira",
+ "noise",
+ "serde",
+ "serde_yaml",
+ "sys-locale",
+ "thiserror",
+ "tracing",
+ "ttf-parser",
+ "unic-langid",
+]
+
+[[package]]
+name = "bones_lib"
+version = "0.3.0"
+source = "git+https://github.com/fishfolk/bones#65d667e2ccd691388f0318c76d3a236bee9d11be"
+dependencies = [
+ "bones_ecs",
+ "instant",
+]
+
+[[package]]
+name = "bones_schema"
+version = "0.3.0"
+source = "git+https://github.com/fishfolk/bones#65d667e2ccd691388f0318c76d3a236bee9d11be"
+dependencies = [
+ "append-only-vec",
+ "bones_schema_macros",
+ "bones_utils",
+ "erased-serde",
+ "glam",
+ "humantime",
+ "paste",
+ "serde",
+ "sptr",
+ "ulid",
+]
+
+[[package]]
+name = "bones_schema_macros"
+version = "0.3.0"
+source = "git+https://github.com/fishfolk/bones#65d667e2ccd691388f0318c76d3a236bee9d11be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "venial",
+]
+
+[[package]]
+name = "bones_utils"
+version = "0.3.0"
+source = "git+https://github.com/fishfolk/bones#65d667e2ccd691388f0318c76d3a236bee9d11be"
+dependencies = [
+ "bevy_ptr",
+ "bones_utils_macros",
+ "branches",
+ "futures-lite",
+ "fxhash",
+ "getrandom 0.2.10",
+ "hashbrown 0.14.1",
+ "instant",
+ "maybe-owned",
+ "parking_lot",
+ "serde",
+ "smallvec",
+ "turborand",
+ "ulid",
+ "ustr",
+]
+
+[[package]]
+name = "bones_utils_macros"
+version = "0.3.0"
+source = "git+https://github.com/fishfolk/bones#65d667e2ccd691388f0318c76d3a236bee9d11be"
+dependencies = [
+ "quote",
+ "venial",
+]
+
+[[package]]
+name = "branches"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7958fb9748a08a6f46ef773e87c43997a844709bc293b4c3de48135debaf9d2a"
+
+[[package]]
+name = "bs58"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "com-rs"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "const_panic"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b"
+
+[[package]]
+name = "const_soft_float"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff"
+
+[[package]]
+name = "constgebra"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edd23e864550e6dafc1e41ac78ce4f1ccddc8672b40c403524a04ff3f0518420"
+dependencies = [
+ "const_soft_float",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "libc",
+]
+
+[[package]]
+name = "coreaudio-rs"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation-sys",
+ "coreaudio-sys",
+]
+
+[[package]]
+name = "coreaudio-sys"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8478e5bdad14dce236b9898ea002eabfa87cbe14f0aa538dbe3b6a4bec4332d"
+dependencies = [
+ "bindgen",
+]
+
+[[package]]
+name = "cpal"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d959d90e938c5493000514b446987c07aed46c668faaa7d34d6c7a67b1a578c"
+dependencies = [
+ "alsa",
+ "core-foundation-sys",
+ "coreaudio-rs",
+ "dasp_sample",
+ "jni 0.19.0",
+ "js-sys",
+ "libc",
+ "mach2",
+ "ndk",
+ "ndk-context",
+ "oboe",
+ "once_cell",
+ "parking_lot",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "windows 0.46.0",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "csscolorparser"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf"
+dependencies = [
+ "phf",
+]
+
+[[package]]
+name = "d3d12"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da"
+dependencies = [
+ "bitflags 1.3.2",
+ "libloading 0.7.4",
+ "winapi",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.1",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "dasp_sample"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f"
+
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "directories"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72d337a64190607d4fcca2cb78982c5dd57f4916e19696b48a575fa746b6cb0f"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "directories"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "document-features"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e493c573fce17f00dcab13b6ac057994f3ce17d1af4dc39bfd482b83c6eb6157"
+dependencies = [
+ "litrs",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "ecolor"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfdf4e52dbbb615cfd30cf5a5265335c217b5fd8d669593cea74a517d9c605af"
+dependencies = [
+ "bytemuck",
+ "serde",
+]
+
+[[package]]
+name = "egui"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bd69fed5fcf4fbb8225b24e80ea6193b61e17a625db105ef0c4d71dde6eb8b7"
+dependencies = [
+ "accesskit",
+ "ahash",
+ "epaint",
+ "nohash-hasher",
+ "serde",
+]
+
+[[package]]
+name = "egui_extras"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68ffe3fe5c00295f91c2a61a74ee271c32f74049c94ba0b1cea8f26eb478bc07"
+dependencies = [
+ "egui",
+ "enum-map",
+ "log",
+ "serde",
+]
+
+[[package]]
+name = "ehttp"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f88f45662356f96afc7d9e2bc9910ad8352ee01417f7c69b8b16a53c8767a75d"
+dependencies = [
+ "document-features",
+ "js-sys",
+ "ureq",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "emath"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ef2b29de53074e575c18b694167ccbe6e5191f7b25fe65175a0d905a32eeec0"
+dependencies = [
+ "bytemuck",
+ "serde",
+]
+
+[[package]]
+name = "encase"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fce2eeef77fd4a293a54b62aa00ac9daebfbcda4bf8998c5a815635b004aa1c"
+dependencies = [
+ "const_panic",
+ "encase_derive",
+ "glam",
+ "thiserror",
+]
+
+[[package]]
+name = "encase_derive"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e520cde08cbf4f7cc097f61573ec06ce467019803de8ae82fb2823fa1554a0e"
+dependencies = [
+ "encase_derive_impl",
+]
+
+[[package]]
+name = "encase_derive_impl"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fe2568f851fd6144a45fa91cfed8fe5ca8fc0b56ba6797bfc1ed2771b90e37c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum-map"
+version = "2.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c188012f8542dee7b3996e44dd89461d64aa471b0a7c71a1ae2f595d259e96e5"
+dependencies = [
+ "enum-map-derive",
+ "serde",
+]
+
+[[package]]
+name = "enum-map-derive"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04d0b288e3bb1d861c4403c1774a6f7a798781dfc519b3647df2a3dd4ae95f25"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "enumn"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "epaint"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58067b840d009143934d91d8dcb8ded054d8301d7c11a517ace0a99bb1e1595e"
+dependencies = [
+ "ab_glyph",
+ "ahash",
+ "bytemuck",
+ "ecolor",
+ "emath",
+ "nohash-hasher",
+ "parking_lot",
+ "serde",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "erased-serde"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "euclid"
+version = "0.22.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "event-listener"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29e56284f00d94c1bc7fd3c77027b4623c88c1f53d8d2394c6199f2921dea325"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float_next_after"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fc612c5837986b7104a87a0df74a5460931f1c5274be12f8d0f40aa2f30d632"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "fluent"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc4d7142005e2066e4844caf9f271b93fc79836ee96ec85057b8c109687e629a"
+dependencies = [
+ "fluent-bundle",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-bundle"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd"
+dependencies = [
+ "fluent-langneg",
+ "fluent-syntax",
+ "intl-memoizer",
+ "intl_pluralrules",
+ "rustc-hash",
+ "self_cell",
+ "smallvec",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-langneg"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-syntax"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gilrs"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62fd19844d0eb919aca41d3e4ea0e0b6bf60e1e827558b101c269015b8f5f27a"
+dependencies = [
+ "fnv",
+ "gilrs-core",
+ "log",
+ "uuid",
+ "vec_map",
+]
+
+[[package]]
+name = "gilrs-core"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ccc99e9b8d63ffcaa334c4babfa31f46e156618a11f63efb6e8e6bcb37b830d"
+dependencies = [
+ "core-foundation",
+ "io-kit-sys",
+ "js-sys",
+ "libc",
+ "libudev-sys",
+ "log",
+ "nix 0.26.4",
+ "uuid",
+ "vec_map",
+ "wasm-bindgen",
+ "web-sys",
+ "windows 0.51.1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "glam"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945"
+dependencies = [
+ "bytemuck",
+ "mint",
+ "serde",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "glow"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "gpu-alloc"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22beaafc29b38204457ea030f6fb7a84c9e4dd1b86e311ba0542533453d87f62"
+dependencies = [
+ "bitflags 1.3.2",
+ "gpu-alloc-types",
+]
+
+[[package]]
+name = "gpu-alloc-types"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "gpu-allocator"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8"
+dependencies = [
+ "backtrace",
+ "log",
+ "thiserror",
+ "winapi",
+ "windows 0.44.0",
+]
+
+[[package]]
+name = "gpu-descriptor"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c"
+dependencies = [
+ "bitflags 2.4.0",
+ "gpu-descriptor-types",
+ "hashbrown 0.14.1",
+]
+
+[[package]]
+name = "gpu-descriptor-types"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c"
+dependencies = [
+ "bitflags 2.4.0",
+]
+
+[[package]]
+name = "guillotiere"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782"
+dependencies = [
+ "euclid",
+ "svg_fmt",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+ "serde",
+]
+
+[[package]]
+name = "hassle-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0"
+dependencies = [
+ "bitflags 1.3.2",
+ "com-rs",
+ "libc",
+ "libloading 0.7.4",
+ "thiserror",
+ "widestring",
+ "winapi",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hexasphere"
+version = "9.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cb3df16a7bcb1b5bc092abd55e14f77ca70aea14445026e264586fc62889a10"
+dependencies = [
+ "constgebra",
+ "glam",
+]
+
+[[package]]
+name = "hexf-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime",
+ "serde",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.24.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-rational",
+ "num-traits",
+ "png",
+ "tiff",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.1",
+]
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "intl-memoizer"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f"
+dependencies = [
+ "type-map",
+ "unic-langid",
+]
+
+[[package]]
+name = "intl_pluralrules"
+version = "7.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "io-kit-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2d4429acc1deff0fbdece0325b4997bdb02b2c245ab7023fd5deca0f6348de"
+dependencies = [
+ "core-foundation-sys",
+ "mach2",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jni"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec"
+dependencies = [
+ "cesu8",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "jni"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+dependencies = [
+ "cesu8",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "jumpy"
+version = "0.7.0"
+dependencies = [
+ "async-channel",
+ "bevy_dylib",
+ "bevy_tasks",
+ "bones_bevy_renderer",
+ "bones_framework",
+ "directories 1.0.2",
+ "egui_extras",
+ "humantime-serde",
+ "indexmap 2.0.2",
+ "nalgebra",
+ "once_cell",
+ "ordered-float",
+ "peg",
+ "petgraph",
+ "puffin",
+ "rapier2d",
+ "serde",
+ "serde_yaml",
+ "shiftnanigans",
+ "thiserror",
+ "tracing",
+ "turborand",
+]
+
+[[package]]
+name = "khronos-egl"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3"
+dependencies = [
+ "libc",
+ "libloading 0.7.4",
+ "pkg-config",
+]
+
+[[package]]
+name = "kira"
+version = "0.8.5"
+source = "git+https://github.com/zicklag/kira.git?branch=feat/sync#e587b155e862567677c114d0d6fc2963be37c14b"
+dependencies = [
+ "atomic-arena",
+ "cpal",
+ "glam",
+ "mint",
+ "ringbuf",
+ "symphonia",
+]
+
+[[package]]
+name = "kqueue"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libloading"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libudev-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "litrs"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9275e0933cf8bb20f008924c0cb07a0692fe54d8064996520bf998de9eb79aa"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "lyon_algorithms"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00a0349cd8f0270781bb93a824b63df6178e3b4a27794e7be3ce3763f5a44d6e"
+dependencies = [
+ "lyon_path",
+ "num-traits",
+]
+
+[[package]]
+name = "lyon_geom"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74df1ff0a0147282eb10699537a03baa7d31972b58984a1d44ce0624043fe8ad"
+dependencies = [
+ "arrayvec",
+ "euclid",
+ "num-traits",
+]
+
+[[package]]
+name = "lyon_path"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca507745ba7ccbc76e5c44e7b63b1a29d2b0d6126f375806a5bbaf657c7d6c45"
+dependencies = [
+ "lyon_geom",
+ "num-traits",
+]
+
+[[package]]
+name = "lyon_tessellation"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d2124218d5428149f9e09520b9acc024334a607e671f032d06567b61008977c"
+dependencies = [
+ "float_next_after",
+ "lyon_path",
+ "thiserror",
+]
+
+[[package]]
+name = "mach2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matrixmultiply"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2"
+dependencies = [
+ "autocfg",
+ "rawpointer",
+]
+
+[[package]]
+name = "maybe-owned"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4"
+
+[[package]]
+name = "memchr"
+version = "2.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metal"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-graphics-types",
+ "foreign-types",
+ "log",
+ "objc",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mint"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff"
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "naga"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbcc2e0513220fd2b598e6068608d4462db20322c0e77e47f6f488dfcfc279cb"
+dependencies = [
+ "bit-set",
+ "bitflags 1.3.2",
+ "codespan-reporting",
+ "hexf-parse",
+ "indexmap 1.9.3",
+ "log",
+ "num-traits",
+ "pp-rs",
+ "rustc-hash",
+ "spirv",
+ "termcolor",
+ "thiserror",
+ "unicode-xid",
+]
+
+[[package]]
+name = "naga_oil"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8be942a5c21c58b9b0bf4d9b99db3634ddb7a916f8e1d1d0b71820cc4150e56b"
+dependencies = [
+ "bit-set",
+ "codespan-reporting",
+ "data-encoding",
+ "indexmap 1.9.3",
+ "naga",
+ "once_cell",
+ "regex",
+ "regex-syntax 0.6.29",
+ "rustc-hash",
+ "thiserror",
+ "tracing",
+ "unicode-ident",
+]
+
+[[package]]
+name = "nalgebra"
+version = "0.32.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa"
+dependencies = [
+ "approx",
+ "glam",
+ "matrixmultiply",
+ "nalgebra-macros",
+ "num-complex",
+ "num-rational",
+ "num-traits",
+ "simba",
+ "typenum",
+]
+
+[[package]]
+name = "nalgebra-macros"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ndk"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
+dependencies = [
+ "bitflags 1.3.2",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum 0.5.11",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-sys"
+version = "0.4.1+23.1.7779620"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "nohash-hasher"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
+
+[[package]]
+name = "noise"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ba869e17168793186c10ca82c7079a4ffdeac4f1a7d9e755b9491c028180e40"
+dependencies = [
+ "num-traits",
+ "rand 0.7.3",
+ "rand_xorshift",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "notify"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
+dependencies = [
+ "bitflags 2.4.0",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "log",
+ "mio",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive 0.5.11",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1"
+dependencies = [
+ "num_enum_derive 0.6.1",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+ "objc_exception",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc-sys"
+version = "0.2.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7"
+
+[[package]]
+name = "objc2"
+version = "0.3.0-beta.3.patch-leaks.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468"
+dependencies = [
+ "block2",
+ "objc-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "2.0.0-pre.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512"
+dependencies = [
+ "objc-sys",
+]
+
+[[package]]
+name = "objc_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "oboe"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0"
+dependencies = [
+ "jni 0.20.0",
+ "ndk",
+ "ndk-context",
+ "num-derive",
+ "num-traits",
+ "oboe-sys",
+]
+
+[[package]]
+name = "oboe-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f44155e7fb718d3cfddcf70690b2b51ac4412f347cd9e4fbe511abe9cd7b5f2"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "optional"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978aa494585d3ca4ad74929863093e87cac9790d81fe7aba2b3dc2890643a0fc"
+
+[[package]]
+name = "orbclient"
+version = "0.3.46"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8378ac0dfbd4e7895f2d2c1f1345cab3836910baf3a300b000d04250f0c8428f"
+dependencies = [
+ "redox_syscall 0.3.5",
+]
+
+[[package]]
+name = "ordered-float"
+version = "3.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owned_ttf_parser"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4"
+dependencies = [
+ "ttf-parser",
+]
+
+[[package]]
+name = "parking"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "parry2d"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "104ae65232e20477a98f9f1e75ca9850eae24a2ea846a2b1a0af03ad752136ce"
+dependencies = [
+ "approx",
+ "arrayvec",
+ "bitflags 1.3.2",
+ "downcast-rs",
+ "either",
+ "indexmap 1.9.3",
+ "nalgebra",
+ "num-derive",
+ "num-traits",
+ "rustc-hash",
+ "simba",
+ "slab",
+ "smallvec",
+ "spade",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "path-absolutize"
+version = "3.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4af381fe79fa195b4909485d99f73a80792331df0625188e707854f0b3383f5"
+dependencies = [
+ "path-dedot",
+]
+
+[[package]]
+name = "path-dedot"
+version = "3.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07ba0ad7e047712414213ff67533e6dd477af0a4e1d14fb52343e53d30ea9397"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "peg"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "400bcab7d219c38abf8bd7cc2054eb9bbbd4312d66f6a5557d572a203f646f61"
+dependencies = [
+ "peg-macros",
+ "peg-runtime",
+]
+
+[[package]]
+name = "peg-macros"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46e61cce859b76d19090f62da50a9fe92bab7c2a5f09e183763559a2ac392c90"
+dependencies = [
+ "peg-runtime",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "peg-runtime"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36bae92c60fa2398ce4678b98b2c4b5a7c61099961ca1fa305aec04a9ad28922"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.0.2",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "png"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "pp-rs"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "profiling"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f89dff0959d98c9758c88826cc002e2c3d0b9dfac4139711d1f30de442f1139b"
+
+[[package]]
+name = "puffin"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76425abd4e1a0ad4bd6995dd974b52f414fca9974171df8e3708b3e660d05a21"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "cfg-if",
+ "instant",
+ "once_cell",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "radsort"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17fd96390ed3feda12e1dfe2645ed587e0bea749e319333f104a33ff62f77a0b"
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.10",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77d416b86801d23dde1aa643023b775c3a462efc0ed96443add11546cdf1dca8"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "range-alloc"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
+
+[[package]]
+name = "rapier2d"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f94d294a9b96694c14888dd0e8ce77620dcc4f2f49264109ef835fa5e2285b84"
+dependencies = [
+ "approx",
+ "arrayvec",
+ "bit-vec",
+ "bitflags 1.3.2",
+ "crossbeam",
+ "downcast-rs",
+ "indexmap 1.9.3",
+ "nalgebra",
+ "num-derive",
+ "num-traits",
+ "parry2d",
+ "rustc-hash",
+ "simba",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "rawpointer"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
+
+[[package]]
+name = "rectangle-pack"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.10",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaac441002f822bc9705a681810a4dd2963094b9ca0ddc41cb963a4c189189ea"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.2",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5011c7e263a695dc8ca064cddb722af1be54e517a280b12a5356f98366899e5d"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "renderdoc-sys"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b"
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "ringbuf"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79abed428d1fd2a128201cec72c5f6938e2da607c6f3745f769fabea399d950a"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "robust"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5864e7ef1a6b7bcf1d6ca3f655e65e724ed3b52546a0d0a663c991522f552ea"
+
+[[package]]
+name = "ron"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
+dependencies = [
+ "base64",
+ "bitflags 2.4.0",
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustls"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "safe_arch"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "self_cell"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af"
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.189"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.189"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
+dependencies = [
+ "indexmap 2.0.2",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shiftnanigans"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9635466532d454fa020acbb12f629f1fc02fc9b4d5b39cc72ca478be37e314bc"
+dependencies = [
+ "bitvec",
+ "fastrand 1.9.0",
+ "itertools",
+ "log",
+ "nohash-hasher",
+]
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "simba"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae"
+dependencies = [
+ "approx",
+ "libm",
+ "num-complex",
+ "num-traits",
+ "paste",
+ "wide",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "smol_str"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "spade"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88e65803986868d2372c582007c39ba89936a36ea5f236bf7a7728dc258f04f9"
+dependencies = [
+ "num-traits",
+ "optional",
+ "robust",
+ "smallvec",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spirv"
+version = "0.2.0+1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830"
+dependencies = [
+ "bitflags 1.3.2",
+ "num-traits",
+]
+
+[[package]]
+name = "sptr"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "svg_fmt"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2"
+
+[[package]]
+name = "svgtypes"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22975e8a2bac6a76bb54f898a6b18764633b00e780330f0b689f65afb3975564"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "symphonia"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62e48dba70095f265fdb269b99619b95d04c89e619538138383e63310b14d941"
+dependencies = [
+ "lazy_static",
+ "symphonia-codec-vorbis",
+ "symphonia-core",
+ "symphonia-format-ogg",
+ "symphonia-metadata",
+]
+
+[[package]]
+name = "symphonia-codec-vorbis"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3953397e3506aa01350c4205817e4f95b58d476877a42f0458d07b665749e203"
+dependencies = [
+ "log",
+ "symphonia-core",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-core"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7c73eb88fee79705268cc7b742c7bc93a7b76e092ab751d0833866970754142"
+dependencies = [
+ "arrayvec",
+ "bitflags 1.3.2",
+ "bytemuck",
+ "lazy_static",
+ "log",
+]
+
+[[package]]
+name = "symphonia-format-ogg"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bf1a00ccd11452d44048a0368828040f778ae650418dbd9d8765b7ee2574c8d"
+dependencies = [
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-metadata"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89c3e1937e31d0e068bbe829f66b2f2bfaa28d056365279e0ef897172c3320c0"
+dependencies = [
+ "encoding_rs",
+ "lazy_static",
+ "log",
+ "symphonia-core",
+]
+
+[[package]]
+name = "symphonia-utils-xiph"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a450ca645b80d69aff8b35576cbfdc7f20940b29998202aab910045714c951f8"
+dependencies = [
+ "symphonia-core",
+ "symphonia-metadata",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sys-locale"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.29.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5"
+dependencies = [
+ "cfg-if",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "winapi",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "termcolor"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tiff"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211"
+dependencies = [
+ "flate2",
+ "jpeg-decoder",
+ "weezl",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5d0e245e80bdc9b4e5356fc45a72184abbc3861992603f515270e9340f5a219"
+dependencies = [
+ "displaydoc",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.0.2",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "tracing-wasm"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07"
+dependencies = [
+ "tracing",
+ "tracing-subscriber",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "ttf-parser"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1"
+
+[[package]]
+name = "turborand"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28d61f1c96db8c016037a77961fa5da84fc3a57fe69a15283ace0ab1647bac0"
+dependencies = [
+ "getrandom 0.2.10",
+ "instant",
+]
+
+[[package]]
+name = "type-map"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46"
+dependencies = [
+ "rustc-hash",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "ulid"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e37c4b6cbcc59a8dcd09a6429fbc7890286bcbb79215cea7b38a3c4c0921d93"
+dependencies = [
+ "rand 0.8.5",
+ "serde",
+]
+
+[[package]]
+name = "unic-langid"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "398f9ad7239db44fd0f80fe068d12ff22d78354080332a5077dc6f52f14dcf2f"
+dependencies = [
+ "unic-langid-impl",
+]
+
+[[package]]
+name = "unic-langid-impl"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e35bfd2f2b8796545b55d7d3fd3e89a0613f68a0d1c8bc28cb7ff96b411a35ff"
+dependencies = [
+ "serde",
+ "tinystr",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "ureq"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5ccd538d4a604753ebc2f17cd9946e89b77bf87f6a8e2309667c6f2e87855e3"
+dependencies = [
+ "base64",
+ "flate2",
+ "log",
+ "once_cell",
+ "rustls",
+ "rustls-webpki",
+ "url",
+ "webpki-roots",
+]
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "ustr"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b050b13c1933490b043b8238a75bc7676cb49292f49768c9350eabb284eaeb87"
+dependencies = [
+ "ahash",
+ "byteorder",
+ "lazy_static",
+ "parking_lot",
+ "serde",
+]
+
+[[package]]
+name = "uuid"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+dependencies = [
+ "getrandom 0.2.10",
+ "serde",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "venial"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61584a325b16f97b5b25fcc852eb9550843a251057a5e3e5992d2376f3df4bb2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webbrowser"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71"
+dependencies = [
+ "core-foundation",
+ "home",
+ "jni 0.21.1",
+ "log",
+ "ndk-context",
+ "objc",
+ "raw-window-handle",
+ "url",
+ "web-sys",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "wgpu"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "480c965c9306872eb6255fa55e4b4953be55a8b64d57e61d7ff840d3dcc051cd"
+dependencies = [
+ "arrayvec",
+ "cfg-if",
+ "js-sys",
+ "log",
+ "naga",
+ "parking_lot",
+ "profiling",
+ "raw-window-handle",
+ "smallvec",
+ "static_assertions",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "wgpu-core",
+ "wgpu-hal",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-core"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f478237b4bf0d5b70a39898a66fa67ca3a007d79f2520485b8b0c3dfc46f8c2"
+dependencies = [
+ "arrayvec",
+ "bit-vec",
+ "bitflags 2.4.0",
+ "codespan-reporting",
+ "log",
+ "naga",
+ "parking_lot",
+ "profiling",
+ "raw-window-handle",
+ "rustc-hash",
+ "smallvec",
+ "thiserror",
+ "web-sys",
+ "wgpu-hal",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-hal"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ecb3258078e936deee14fd4e0febe1cfe9bbb5ffef165cb60218d2ee5eb4448"
+dependencies = [
+ "android_system_properties",
+ "arrayvec",
+ "ash",
+ "bit-set",
+ "bitflags 2.4.0",
+ "block",
+ "core-graphics-types",
+ "d3d12",
+ "foreign-types",
+ "glow",
+ "gpu-alloc",
+ "gpu-allocator",
+ "gpu-descriptor",
+ "hassle-rs",
+ "js-sys",
+ "khronos-egl",
+ "libc",
+ "libloading 0.8.1",
+ "log",
+ "metal",
+ "naga",
+ "objc",
+ "parking_lot",
+ "profiling",
+ "range-alloc",
+ "raw-window-handle",
+ "renderdoc-sys",
+ "rustc-hash",
+ "smallvec",
+ "thiserror",
+ "wasm-bindgen",
+ "web-sys",
+ "wgpu-types",
+ "winapi",
+]
+
+[[package]]
+name = "wgpu-types"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0c153280bb108c2979eb5c7391cb18c56642dd3c072e55f52065e13e2a1252a"
+dependencies = [
+ "bitflags 2.4.0",
+ "js-sys",
+ "web-sys",
+]
+
+[[package]]
+name = "wide"
+version = "0.7.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebecebefc38ff1860b4bc47550bbfa63af5746061cf0d29fcd7fa63171602598"
+dependencies = [
+ "bytemuck",
+ "safe_arch",
+]
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
+dependencies = [
+ "windows-core",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winit"
+version = "0.28.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94"
+dependencies = [
+ "android-activity",
+ "bitflags 1.3.2",
+ "cfg_aliases",
+ "core-foundation",
+ "core-graphics",
+ "dispatch",
+ "instant",
+ "libc",
+ "log",
+ "mio",
+ "ndk",
+ "objc2",
+ "once_cell",
+ "orbclient",
+ "percent-encoding",
+ "raw-window-handle",
+ "redox_syscall 0.3.5",
+ "wasm-bindgen",
+ "wayland-scanner",
+ "web-sys",
+ "windows-sys 0.45.0",
+ "x11-dl",
+]
+
+[[package]]
+name = "winnow"
+version = "0.5.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
+dependencies = [
+ "gethostname",
+ "nix 0.24.3",
+ "winapi",
+ "winapi-wsapoll",
+ "x11rb-protocol",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67"
+dependencies = [
+ "nix 0.24.3",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a"
diff --git a/nixpkgs/pkgs/games/jumpy/default.nix b/nixpkgs/pkgs/games/jumpy/default.nix
new file mode 100644
index 000000000000..d4f8a8fcbdbc
--- /dev/null
+++ b/nixpkgs/pkgs/games/jumpy/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeWrapper
+, pkg-config
+, zstd
+, stdenv
+, alsa-lib
+, libxkbcommon
+, udev
+, vulkan-loader
+, wayland
+, xorg
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jumpy";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "fishfolk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ggePJH2kKJ17aOWRKUnLyolIdSzlc6Axf5Iw74iFfek=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "bevy_egui-0.21.0" = "sha256-hu55tZQppw1NajwqIsYsw6de0IAwQwgra3D9OFzSSLc=";
+      "bones_asset-0.3.0" = "sha256-1UeOXW6O/gMQBBUnHxRreJgmiUTPC5SJB+uLn9V8aa4=";
+      "kira-0.8.5" = "sha256-z4R5aIaoRQQprL6JsVrFI69rwTOsW5OH01+jORS+hBQ=";
+    };
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    zstd
+  ] ++ lib.optionals stdenv.isLinux [
+    alsa-lib
+    libxkbcommon
+    udev
+    vulkan-loader
+    wayland
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXi
+    xorg.libXrandr
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.Cocoa
+    rustPlatform.bindgenHook
+  ];
+
+  cargoBuildFlags = [ "--bin" "jumpy" ];
+
+  env = {
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  # jumpy only loads assets from the current directory
+  # https://github.com/fishfolk/bones/blob/f84d07c2f2847d9acd5c07098fe1575abc496400/framework_crates/bones_asset/src/io.rs#L50
+  postInstall = ''
+    mkdir $out/share
+    cp -r assets $out/share
+    wrapProgram $out/bin/jumpy --chdir $out/share
+  '';
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    patchelf $out/bin/.jumpy-wrapped \
+      --add-rpath ${lib.makeLibraryPath [ vulkan-loader ]}
+  '';
+
+  meta = with lib; {
+    description = "A tactical 2D shooter played by up to 4 players online or on a shared screen";
+    homepage = "https://fishfight.org/";
+    changelog = "https://github.com/fishfolk/jumpy/releases/tag/v${version}";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/kabeljau/default.nix b/nixpkgs/pkgs/games/kabeljau/default.nix
new file mode 100644
index 000000000000..0b5b1167ead3
--- /dev/null
+++ b/nixpkgs/pkgs/games/kabeljau/default.nix
@@ -0,0 +1,40 @@
+{ stdenvNoCC, lib, fetchFromGitea, just, inkscape, makeWrapper, bash, dialog }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "kabeljau";
+  version = "1.2.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = "kabeljau";
+    rev = "v${version}";
+    sha256 = "sha256-RedVItgfr6vgqXHA3bOiHXDpfGuHI+sX4jCHL9G5jYk=";
+  };
+
+  # Inkscape is needed in a just recipe where it is used to export the SVG icon to several different sized PNGs.
+  nativeBuildInputs = [ just inkscape makeWrapper ];
+  postPatch = ''
+    patchShebangs --host ${pname}
+    substituteInPlace ./justfile \
+      --replace " /bin" " $out/bin" \
+      --replace " /usr" " $out"
+  '';
+  installPhase = ''
+    runHook preInstall
+
+    just install
+    wrapProgram $out/bin/${pname} --suffix PATH : ${
+      lib.makeBinPath [ dialog ]
+    }
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Survive as a stray cat in an ncurses game";
+    homepage = "https://codeberg.org/annaaurora/kabeljau";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/katago/default.nix b/nixpkgs/pkgs/games/katago/default.nix
new file mode 100644
index 000000000000..0ca0deb518ff
--- /dev/null
+++ b/nixpkgs/pkgs/games/katago/default.nix
@@ -0,0 +1,115 @@
+{ stdenv
+, boost
+, cmake
+, config
+, cudaPackages
+, eigen
+, fetchFromGitHub
+, gperftools
+, lib
+, libzip
+, makeWrapper
+, mesa
+, ocl-icd
+, opencl-headers
+, openssl
+, writeShellScriptBin
+, enableAVX2 ? stdenv.hostPlatform.avx2Support
+, backend ? if config.cudaSupport then "cuda" else "opencl"
+, enableBigBoards ? false
+, enableContrib ? false
+, enableTcmalloc ? true
+}:
+
+assert lib.assertOneOf "backend" backend [ "opencl" "cuda" "tensorrt" "eigen" ];
+
+# N.b. older versions of cuda toolkit (e.g. 10) do not support newer versions
+# of gcc.  If you need to use cuda10, please override stdenv with gcc8Stdenv
+stdenv.mkDerivation rec {
+  pname = "katago";
+  version = "1.13.1";
+  githash = "3539a3d410b12f79658bb7a2cdaf1ecb6c95e6c1";
+
+  src = fetchFromGitHub {
+    owner = "lightvector";
+    repo = "katago";
+    rev = "v${version}";
+    sha256 = "sha256-A2ZvFcklYQoxfqYrLrazksrJkfdELnn90aAbkm7pJg0=";
+  };
+
+  fakegit = writeShellScriptBin "git" "echo ${githash}";
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+
+  buildInputs = [
+    libzip
+    boost
+  ] ++ lib.optionals (backend == "eigen") [
+    eigen
+  ] ++ lib.optionals (backend == "cuda") [
+    cudaPackages.cudnn
+    cudaPackages.cudatoolkit
+    mesa.drivers
+  ] ++ lib.optionals (backend == "tensorrt") [
+      cudaPackages.cudatoolkit
+      cudaPackages.tensorrt
+      mesa.drivers
+  ] ++ lib.optionals (backend == "opencl") [
+    opencl-headers
+    ocl-icd
+  ] ++ lib.optionals enableContrib [
+    openssl
+  ] ++ lib.optionals enableTcmalloc [
+    gperftools
+  ];
+
+  cmakeFlags = [
+    "-DNO_GIT_REVISION=ON"
+  ] ++ lib.optionals enableAVX2 [
+    "-DUSE_AVX2=ON"
+  ] ++ lib.optionals (backend == "eigen") [
+    "-DUSE_BACKEND=EIGEN"
+  ] ++ lib.optionals (backend == "cuda") [
+    "-DUSE_BACKEND=CUDA"
+  ] ++ lib.optionals (backend == "tensorrt") [
+    "-DUSE_BACKEND=TENSORRT"
+  ] ++ lib.optionals (backend == "opencl") [
+    "-DUSE_BACKEND=OPENCL"
+  ] ++ lib.optionals enableContrib [
+    "-DBUILD_DISTRIBUTED=1"
+    "-DNO_GIT_REVISION=OFF"
+    "-DGIT_EXECUTABLE=${fakegit}/bin/git"
+  ] ++ lib.optionals enableTcmalloc [
+    "-DUSE_TCMALLOC=ON"
+  ] ++ lib.optionals enableBigBoards [
+    "-DUSE_BIGGER_BOARDS_EXPENSIVE=ON"
+  ];
+
+  preConfigure = ''
+    cd cpp/
+  '' + lib.optionalString (backend == "cuda" || backend == "tensorrt") ''
+    export CUDA_PATH="${cudaPackages.cudatoolkit}"
+    export EXTRA_LDFLAGS="-L/run/opengl-driver/lib"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin; cp katago $out/bin;
+  '' + lib.optionalString (backend == "cuda" || backend == "tensorrt") ''
+    wrapProgram $out/bin/katago \
+      --prefix LD_LIBRARY_PATH : "/run/opengl-driver/lib"
+  '' + ''
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Go engine modeled after AlphaGo Zero";
+    homepage    = "https://github.com/lightvector/katago";
+    license     = licenses.mit;
+    maintainers = [ maintainers.omnipotententity ];
+    platforms   = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/katawa-shoujo/default.nix b/nixpkgs/pkgs/games/katawa-shoujo/default.nix
new file mode 100644
index 000000000000..e549fbbcf963
--- /dev/null
+++ b/nixpkgs/pkgs/games/katawa-shoujo/default.nix
@@ -0,0 +1,181 @@
+{ stdenvNoCC
+, lib
+, fetchurl
+, autoPatchelfHook
+, copyDesktopItems
+, freetype
+, makeDesktopItem
+, makeWrapper
+, libGL
+, libGLU
+# Darwin cannot handle these when devendored:
+# - DYLD_LIBRARY_PATH masks system libraries with similar, differently-cased names and cause missing symbol errors
+# - symlinks cause unrelated BMP image loading to fail(?)
+, devendorImageLibs ? !stdenvNoCC.hostPlatform.isDarwin
+, libjpeg
+, libpng12
+, libX11
+, libXext
+, libXi
+, libXmu
+, runtimeShell
+, SDL_compat
+, SDL_image
+, SDL_ttf
+, undmg
+, unrpa
+, zlib
+}:
+
+let
+  stdenv = stdenvNoCC;
+  srcDetails = rec {
+    x86_64-linux = {
+      urlSuffix = "%5blinux-x86%5d%5b18161880%5d.tar.bz2";
+      hash = "sha256-7FoFz88dWYHs2/pxkEwnmiFeeb3+slayrWknEJoAB9o=";
+    };
+    i686-linux = x86_64-linux;
+    x86_64-darwin = {
+      urlSuffix = "%5bmac%5d%5b1DFC84A6%5d.dmg";
+      hash = "sha256-Sc5BAlpJsffjcNrZ8+VU3n7G10DoqDKQn/leHDW32Y8=";
+    };
+  }.${stdenv.hostPlatform.system} or (throw "Don't know how to fetch source for ${stdenv.hostPlatform.system}!");
+in
+stdenv.mkDerivation rec {
+  pname = "katawa-shoujo";
+  version = "1.3.1";
+
+  src = fetchurl {
+    url = "https://dl.katawa-shoujo.com/gold_${version}/%5b4ls%5d_katawa_shoujo_${version}-${srcDetails.urlSuffix}";
+    inherit (srcDetails) hash;
+  };
+
+  # fetchzip requires a custom unpackPhase to handle dmg, fetchurl cannot handle undmg producing >1 directory without this
+  sourceRoot = ".";
+
+  nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [
+    autoPatchelfHook
+    copyDesktopItems
+    unrpa
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    makeWrapper
+    undmg
+  ];
+
+  buildInputs = [
+    freetype
+    SDL_compat
+    zlib
+  ] ++ lib.optionals devendorImageLibs [
+    libjpeg
+    libpng12
+  ] ++ lib.optionals stdenv.hostPlatform.isLinux [
+    libX11
+    libXext
+    libXi
+    libXmu
+    libGL
+    libGLU
+  ];
+
+  desktopItems = [(makeDesktopItem rec {
+    name = "katawa-shoujo";
+    desktopName = "Katawa Shoujo";
+    comment = meta.description;
+    exec = name;
+    icon = name;
+    categories = [ "Game" ];
+  })];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = let
+    platformDetails = with stdenv.hostPlatform; if isDarwin then rec {
+      arch = "darwin-x86_64";
+      sourceDir = "'Katawa Shoujo'.app";
+      installDir = "$out/Applications/'Katawa Shoujo'.app";
+      dataDir = "${installDir}/Contents/Resources/autorun";
+      bin = "${installDir}/Contents/MacOS/'Katawa Shoujo'";
+    } else rec {
+      arch = "linux-${if isx86_64 then "x86_64" else "i686"}";
+      sourceDir = "'Katawa Shoujo'-${version}-linux";
+      installDir = "$out/share/katawa-shoujo";
+      dataDir = installDir;
+      bin = "${installDir}/'Katawa Shoujo'.sh";
+    };
+    libDir = with platformDetails; "${dataDir}/lib/${arch}";
+  in with platformDetails; ''
+    runHook preInstall
+
+    mkdir -p "$(dirname ${installDir})"
+    cp -R ${sourceDir} ${installDir}
+
+    # Simplify launcher script
+    cat <<EOF >${bin}
+    #!${runtimeShell}
+    exec \$RENPY_GDB ${libDir}/'Katawa Shoujo' \$RENPY_PYARGS -EO ${dataDir}/'Katawa Shoujo'.py "\$@"
+    EOF
+
+  '' + (if stdenv.hostPlatform.isDarwin then ''
+    # No autoPatchelfHook on Darwin
+    wrapProgram ${bin} \
+      --prefix DYLD_LIBRARY_PATH : ${lib.makeLibraryPath buildInputs}
+  '' else ''
+    # Extract icon for xdg desktop file
+    unrpa ${dataDir}/game/data.rpa
+    install -Dm644 ui/icon.png $out/share/icons/hicolor/512x512/apps/katawa-shoujo.png
+  '') + ''
+
+    # Delete binaries for wrong arch, autoPatchelfHook gets confused by them & less to keep in the store
+    find "$(dirname ${libDir})" -mindepth 1 -maxdepth 1 \
+      -not -name 'python*' -not -name ${arch} \
+      -exec rm -r {} \;
+
+    # Replace some bundled libs so Nixpkgs' versions are used
+    rm ${libDir}/libz*
+    rm ${libDir}/libfreetype*
+    rm ${libDir}/libSDL-1.2*
+  '' + lib.optionalString devendorImageLibs ''
+    rm ${libDir}/libjpeg*
+    rm ${libDir}/libpng12*
+  '' + ''
+
+    mkdir -p $out/share/{doc,licenses}/katawa-shoujo
+    mv ${dataDir}/'Game Manual'.pdf $out/share/doc/katawa-shoujo/
+    mv ${dataDir}/LICENSE.txt $out/share/licenses/katawa-shoujo/
+
+    mkdir -p $out/bin
+    ln -s ${bin} $out/bin/katawa-shoujo
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Bishoujo-style visual novel by Four Leaf Studios, built in Ren'Py";
+    longDescription = ''
+      Katawa Shoujo is a bishoujo-style visual novel set in the fictional Yamaku High School for disabled children,
+      located somewhere in modern Japan. Hisao Nakai, a normal boy living a normal life, has his life turned upside down
+      when a congenital heart defect forces him to move to a new school after a long hospitalization. Despite his difficulties,
+      Hisao is able to find friends—and perhaps love, if he plays his cards right. There are five main paths corresponding
+      to the 5 main female characters, each path following the storyline pertaining to that character.
+
+      The story is told through the perspective of the main character, using a first person narrative. The game uses a
+      traditional text and sprite-based visual novel model with an ADV text box.
+
+      Katawa Shoujo contains adult material, and was created using the Ren'Py scripting system. It is the product of an
+      international team of amateur developers, and is available free of charge under the Creative Commons BY-NC-ND License.
+    '';
+    homepage = "https://www.katawa-shoujo.com/";
+    # https://www.katawa-shoujo.com/about.php
+    # November 2022: Update, is it still ND?
+    # https://ks.renai.us/viewtopic.php?f=13&p=248149#p248149
+    license = with licenses; [ cc-by-nc-nd-30 ];
+    maintainers = with maintainers; [ OPNA2608 ];
+    # Building Ren'Py6 from source would allow more, but too much of a hassle
+    platforms = platforms.x86;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    # Needs different srcDetails & installPhase
+    broken = stdenv.hostPlatform.isWindows;
+  };
+}
diff --git a/nixpkgs/pkgs/games/keen4/default.nix b/nixpkgs/pkgs/games/keen4/default.nix
new file mode 100644
index 000000000000..5e2468a8f9ea
--- /dev/null
+++ b/nixpkgs/pkgs/games/keen4/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, dosbox, unzip }:
+
+stdenv.mkDerivation {
+  name = "keen4";
+
+  src = fetchurl {
+    url = "http://tarballs.nixos.org/keen4.zip";
+    sha256 = "12rnc9ksl7v6l8wsxvr26ylkafzq80dbsa7yafzw9pqc8pafkhx1";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p $out/share/keen4
+    mv * $out/share/keen4
+
+    mkdir -p $out/bin
+    cat > $out/bin/keen4 <<EOF
+    #! $SHELL -e
+    if test -z "\$HOME"; then
+        echo "HOME directory not set"
+        exit 1
+    fi
+
+    # Game wants to write in the current directory, but of course we can't
+    # let it write in the Nix store.  So create symlinks to the game files
+    # in ~/.keen4 and execute game from there.
+    mkdir -p \$HOME/.keen4
+    cd \$HOME/.keen4
+
+    ln -sf $out/share/keen4/* .
+
+    ${dosbox}/bin/dosbox ./KEEN4E.EXE -fullscreen -exit || true
+
+    # Cleanup the symlinks.
+    for i in *; do
+        if test -L "\$i"; then
+            rm "\$i"
+        fi
+    done
+    EOF
+    chmod +x $out/bin/keen4
+  '';
+
+  meta = {
+    description = "Commander Keen Episode 4: Secret of the Oracle";
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.eelco ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/keeperrl/default.nix b/nixpkgs/pkgs/games/keeperrl/default.nix
new file mode 100644
index 000000000000..c66ffdee920d
--- /dev/null
+++ b/nixpkgs/pkgs/games/keeperrl/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, requireFile
+, openal
+, curl
+, libogg
+, libvorbis
+, SDL2
+, SDL2_image
+, zlib
+, clang
+, libtheora
+, unfree_assets ? false }:
+
+let
+  pname = "keeperrl";
+  version = "alpha34";
+
+  free_src = fetchFromGitHub {
+    owner = "miki151";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0sww+ppctXvxMouclG3OdXpcNgrrOZJw9z8s2GhJ+IE=";
+  };
+
+  assets = requireFile rec {
+    name = "keeperrl_data_${version}.tar.gz";
+    message = ''
+      This nix expression requires that the KeeperRL art assets are already
+      part of the store. These can be obtained from a purchased copy of the game
+      and found in the "data" directory. Make a tar archive of this directory
+      with
+
+      "tar czf ${name} data"
+
+      Then add this archive to the nix store with
+
+      "nix-prefetch-url file://\$PWD/${name}".
+    '';
+    sha256 = "0115pxdzdyma2vicxgr0j21pp82gxdyrlj090s8ihp0b50f0nlll";
+  };
+in
+
+stdenv.mkDerivation {
+  inherit pname version;
+
+  srcs = [ free_src ] ++ lib.optional unfree_assets assets;
+
+  sourceRoot = free_src.name;
+
+  postUnpack = lib.optionalString unfree_assets ''
+    mv data $sourceRoot
+  '';
+
+  buildInputs = [
+    openal curl libogg libvorbis libtheora SDL2 SDL2_image zlib clang
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-I${SDL2.dev}/include/SDL2"
+  ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "OPT=true"
+    "RELEASE=true"
+    "DATA_DIR=$(out)/share"
+    "ENABLE_LOCAL_USER_DIR=true"
+    "NO_STEAMWORKS=true"
+  ];
+
+  installPhase = ''
+    install -Dm755 keeper $out/bin/keeper
+    install -Dm755 appconfig.txt $out/share/appconfig.txt
+
+    cp -r data_free $out/share
+    cp -r data_contrib $out/share
+    ${lib.optionalString unfree_assets "cp -r data $out/share"}
+  '';
+
+  meta = with lib; {
+    description = "A dungeon management rogue-like";
+    homepage = "https://keeperrl.com/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ onny ];
+    # TODO: Add OS X
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/klavaro/default.nix b/nixpkgs/pkgs/games/klavaro/default.nix
new file mode 100644
index 000000000000..b99969bf6a81
--- /dev/null
+++ b/nixpkgs/pkgs/games/klavaro/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv
+, fetchurl
+, makeWrapper
+, curl
+, espeak
+, file
+, gtk3
+, gtkdatabox
+, intltool
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "klavaro";
+  version = "3.14";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/klavaro/${pname}-${version}.tar.bz2";
+    hash = "sha256-hxh+SdMBxRDmlkCYzbYSEmvwMNKodf15nq3K0+rlbas=";
+  };
+
+  nativeBuildInputs = [ intltool makeWrapper pkg-config ];
+  buildInputs = [ curl gtk3 gtkdatabox ];
+
+  postPatch = ''
+    substituteInPlace src/tutor.c --replace '"espeak ' '"${espeak}/bin/espeak '
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/klavaro \
+      --prefix LD_LIBRARY_PATH : $out/lib
+  '';
+
+  # Fixes /usr/bin/file: No such file or directory
+  preConfigure = ''
+    substituteInPlace configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+  '';
+
+  # remove forbidden references to $TMPDIR
+  preFixup = lib.optionalString stdenv.isLinux ''
+    for f in "$out"/bin/*; do
+      if isELF "$f"; then
+        patchelf --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE" "$f"
+      fi
+    done
+  '';
+
+  meta = with lib; {
+    description = "Free touch typing tutor program";
+    homepage = "http://klavaro.sourceforge.net/";
+    changelog = "https://sourceforge.net/p/klavaro/code/HEAD/tree/trunk/ChangeLog";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mimame davidak ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/kobodeluxe/default.nix b/nixpkgs/pkgs/games/kobodeluxe/default.nix
new file mode 100644
index 000000000000..9dea90824204
--- /dev/null
+++ b/nixpkgs/pkgs/games/kobodeluxe/default.nix
@@ -0,0 +1,25 @@
+{lib, stdenv, fetchurl, SDL, SDL_image, libGLU, libGL} :
+
+stdenv.mkDerivation rec {
+  pname = "kobodeluxe";
+  version = "0.5.1";
+  src = fetchurl {
+    url = "http://olofson.net/kobodl/download/KoboDeluxe-${version}.tar.bz2";
+    sha256 = "0f7b910a399d985437564af8c5d81d6dcf22b96b26b01488d72baa6a6fdb5c2c";
+  };
+
+  buildInputs = [ SDL SDL_image libGLU libGL ];
+
+  prePatch = ''
+    sed -e 's/char \*tok/const char \*tok/' -i graphics/window.cpp
+  '';
+
+  patches = [ ./glibc29.patch ];
+
+  meta = {
+    homepage = "http://olofson.net/kobodl/";
+    description = "Enhanced version of Akira Higuchi's game XKobo  for Un*x systems with X11";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/kobodeluxe/glibc29.patch b/nixpkgs/pkgs/games/kobodeluxe/glibc29.patch
new file mode 100644
index 000000000000..7a9ef355a821
--- /dev/null
+++ b/nixpkgs/pkgs/games/kobodeluxe/glibc29.patch
@@ -0,0 +1,83 @@
+--- a/enemies.h
++++ b/enemies.h
+@@ -70,9 +70,9 @@
+ extern const enemy_kind bomb2;
+ extern const enemy_kind bombdeto;
+ extern const enemy_kind cannon;
+-extern const enemy_kind pipe1;
++extern const enemy_kind pipeone;
+ extern const enemy_kind core;
+-extern const enemy_kind pipe2;
++extern const enemy_kind pipetwo;
+ extern const enemy_kind rock;
+ extern const enemy_kind ring;
+ extern const enemy_kind enemy_m1;
+@@ -430,7 +430,7 @@
+ 
+ inline int _enemy::is_pipe()
+ {
+-	return ((_state != notuse) && ((ek == &pipe1) || (ek == &pipe2)));
++	return ((_state != notuse) && ((ek == &pipeone) || (ek == &pipetwo)));
+ }
+ 
+ 
+--- a/enemy.cpp
++++ b/enemy.cpp
+@@ -713,7 +713,7 @@
+ 
+ void _enemy::kill_cannon()
+ {
+-	enemies.make(&pipe1, CS2PIXEL(x), CS2PIXEL(y));
++	enemies.make(&pipeone, CS2PIXEL(x), CS2PIXEL(y));
+ 	sound.g_base_node_explo(x, y);
+ 	release();
+ }
+@@ -755,10 +755,10 @@
+ 
+ void _enemy::kill_core()
+ {
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
++	enemies.make(&pipetwo, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
++	enemies.make(&pipetwo, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
++	enemies.make(&pipetwo, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
++	enemies.make(&pipetwo, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
+ 	enemies.make(&explosion4, CS2PIXEL(x), CS2PIXEL(y));
+ 	sound.g_base_core_explo(x, y);
+ 	release();
+@@ -851,7 +851,7 @@
+ 		screen.set_map(x1, y1, m ^ a);
+ 	release();
+ }
+-const enemy_kind pipe1 = {
++const enemy_kind pipeone = {
+ 	0,
+ 	&_enemy::make_pipe1,
+ 	&_enemy::move_pipe1,
+@@ -978,19 +978,19 @@
+ 	}
+ 	p ^= a;
+ 	if(p & U_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
++		enemies.make(&pipetwo, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
+ 	if(p & R_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
++		enemies.make(&pipetwo, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
+ 	if(p & D_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
++		enemies.make(&pipetwo, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
+ 	if(p & L_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
++		enemies.make(&pipetwo, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
+ 	manage.add_score(10);
+ 	release();
+ }
+ 
+ 
+-const enemy_kind pipe2 = {
++const enemy_kind pipetwo = {
+ 	0,
+ 	&_enemy::make_pipe2,
+ 	&_enemy::move_pipe2,
diff --git a/nixpkgs/pkgs/games/koboredux/default.nix b/nixpkgs/pkgs/games/koboredux/default.nix
new file mode 100644
index 000000000000..91981fc85fba
--- /dev/null
+++ b/nixpkgs/pkgs/games/koboredux/default.nix
@@ -0,0 +1,94 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchpatch
+, requireFile
+, cmake
+, pkg-config
+, SDL2
+, SDL2_image
+, audiality2
+, useProprietaryAssets ? true
+}:
+
+with lib;
+
+let
+  pname = "koboredux";
+  version = "0.7.5.1";
+
+  main_src = fetchFromGitHub {
+    owner = "olofson";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "09h9r65z8bar2z89s09j6px0gdq355kjf38rmd85xb2aqwnm6xig";
+  };
+
+  assets_src = requireFile {
+    name = "koboredux-${version}-Linux.tar.bz2";
+    sha256 = "11bmicx9i11m4c3dp19jsql0zy4rjf5a28x4hd2wl8h3bf8cdgav";
+    message = ''
+      Please purchase the game on https://olofson.itch.io/kobo-redux
+      and download the Linux build.
+
+      Once you have downloaded the file, please use the following command
+      and re-run the installation:
+
+      nix-prefetch-url file://\$PWD/koboredux-${version}-Linux.tar.bz2
+
+      Alternatively, install the "koboredux-free" package, which replaces the
+      proprietary assets with a placeholder theme.
+    '';
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  inherit pname version;
+
+  src = [ main_src ] ++ optional useProprietaryAssets assets_src;
+
+  sourceRoot = main_src.name;
+
+  # Fix clang build
+  patches = [(fetchpatch {
+    url = "https://github.com/olofson/koboredux/commit/cf92b8a61d002ccaa9fbcda7a96dab08a681dee4.patch";
+    sha256 = "0dwhvis7ghf3mgzjd2rwn8hk3ndlgfwwcqaq581yc5rwd73v6vw4";
+  })];
+
+  postPatch = optionalString useProprietaryAssets ''
+    cp -r ../koboredux-${version}-Linux/sfx/redux data/sfx/
+    cp -r ../koboredux-${version}-Linux/gfx/redux data/gfx/
+    cp -r ../koboredux-${version}-Linux/gfx/redux_fullscreen data/gfx/
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    audiality2
+  ];
+
+  meta = {
+    description = "A frantic 80's style 2D shooter, similar to XKobo and Kobo Deluxe" +
+      optionalString (!useProprietaryAssets) " (built without proprietary assets)";
+    longDescription = ''
+      Kobo Redux is a frantic 80's style 2D shooter, inspired by the look and
+      feel of 90's arcade cabinets. The gameplay is fast and unforgiving,
+      although with less of the frustrating quirkiness of the actual games
+      of the 80's. A true challenge in the spirit of the arcade era!
+    '' + optionalString (!useProprietaryAssets) ''
+
+      This version replaces the official proprietary assets with placeholders.
+      For the full experience, consider installing "koboredux" instead.
+    '';
+    homepage = "https://olofson.itch.io/kobo-redux";
+    license = with licenses; if useProprietaryAssets then unfree else gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/games/koules/default.nix b/nixpkgs/pkgs/games/koules/default.nix
new file mode 100644
index 000000000000..360415dc2e1d
--- /dev/null
+++ b/nixpkgs/pkgs/games/koules/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchzip
+, copyDesktopItems
+, gccmakedep
+, imake
+, installShellFiles
+, libX11
+, libXext
+, makeDesktopItem
+}:
+
+let
+  debian-extras = fetchzip {
+    url = "mirror://debian/pool/main/k/koules/koules_1.4-27.debian.tar.xz";
+    hash = "sha256-g0Z6C1YSZL6N2eYUuZgXkPDoOLc4e9jAFL3ivk3OAS8=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "koules";
+  version = "1.4";
+
+  src = fetchurl {
+    url = "https://www.ucw.cz/~hubicka/koules/packages/${pname}${version}-src.tar.gz";
+    hash = "sha256-w2+T/q/uvVmYO/RBACQOZ6hKi6yr1+5SjJMEbe/kohs=";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep installShellFiles copyDesktopItems ];
+  buildInputs = [ libX11 libXext ];
+
+  # Debian maintains lots of patches for koules. Let's include all of them.
+  prePatch = ''
+    patches="$patches $(cat ${debian-extras}/patches/series | sed 's|^|${debian-extras}/patches/|')"
+  '';
+
+  postPatch = ''
+    # We do not want to depend on that particular font to be available in the
+    # xserver, hence substitute it by a font which is always available
+    sed -ie 's:-schumacher-clean-bold-r-normal--8-80-75-75-c-80-\*iso\*:fixed:' xlib/init.c
+  '';
+
+  preBuild = ''
+    cp xkoules.6 xkoules.man  # else "make" will not succeed
+    sed -ie "s:^SOUNDDIR\s*=.*:SOUNDDIR=$out/lib:" Makefile
+    sed -ie "s:^KOULESDIR\s*=.*:KOULESDIR=$out:" Makefile
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 xkoules $out/bin/xkoules
+    install -Dm755 koules.sndsrv.linux $out/lib/koules.sndsrv.linux
+    install -m644 sounds/* $out/lib/
+    install -Dm644 Koules.xpm $out/share/pixmaps/koules.xpm
+    installManPage xkoules.6
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      desktopName = "Koules";
+      name = "koules";
+      exec = "xkoules";
+      icon = "koules";
+      comment = "Push your enemies away, but stay away from obstacles";
+      categories = [ "Game" "ArcadeGame" ];
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.ucw.cz/~hubicka/koules/English/";
+    description = "Fast arcade game based on the fundamental law of body attraction";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.iblech ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ldmud/default.nix b/nixpkgs/pkgs/games/ldmud/default.nix
new file mode 100644
index 000000000000..41348fa0bcfa
--- /dev/null
+++ b/nixpkgs/pkgs/games/ldmud/default.nix
@@ -0,0 +1,102 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, autoreconfHook
+, pkg-config
+, bison
+, libiconv
+, pcre
+, libgcrypt
+, libxcrypt
+, json_c
+, libxml2
+, ipv6Support ? false
+, mccpSupport ? false
+, zlib
+, mysqlSupport ? false
+, libmysqlclient
+, postgresSupport ? false
+, postgresql
+, sqliteSupport ? false
+, sqlite
+, tlsSupport ? false
+, openssl
+, pythonSupport ? false
+, python310
+, ...
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ldmud";
+  version = "3.6.7";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-PkrjP7tSZMaj61Hsn++7+CumhqFPLbf0+eAI6afP9HA=";
+  };
+
+  sourceRoot = "${src.name}/src";
+
+  nativeBuildInputs =
+    [ autoreconfHook pkg-config bison ];
+  buildInputs = [ libgcrypt libxcrypt pcre json_c libxml2 ]
+    ++ lib.optional mccpSupport zlib ++ lib.optional mysqlSupport libmysqlclient
+    ++ lib.optional postgresSupport postgresql
+    ++ lib.optional sqliteSupport sqlite ++ lib.optional tlsSupport openssl
+    ++ lib.optional pythonSupport python310
+    ++ lib.optionals stdenv.isDarwin [ libiconv ];
+
+  # To support systems without autoconf LD puts its configure.ac in a non-default
+  # location and uses a helper script. We skip that script and symlink the .ac
+  # file to where the autoreconfHook find it.
+  preAutoreconf = ''
+    ln -fs ./autoconf/configure.ac ./
+  '';
+
+  configureFlags = [
+    "--enable-erq=xerq"
+    "--enable-filename-spaces"
+    "--enable-use-json"
+    "--enable-use-xml=xml2"
+    (lib.enableFeature ipv6Support "use-ipv6")
+    (lib.enableFeature mccpSupport "use-mccp")
+    (lib.enableFeature mysqlSupport "use-mysql")
+    (lib.enableFeature postgresSupport "use-pgsql")
+    (lib.enableFeature sqliteSupport "use-sqlite")
+    (lib.enableFeatureAs tlsSupport "use-tls" "ssl")
+    (lib.enableFeature pythonSupport "use-python")
+  ];
+
+  preConfigure = lib.optionalString mysqlSupport ''
+    export CPPFLAGS="-I${lib.getDev libmysqlclient}/include/mysql"
+    export LDFLAGS="-L${libmysqlclient}/lib/mysql"
+  '';
+
+  installTargets = [ "install-driver" "install-utils" "install-headers" ];
+
+  postInstall = ''
+    mkdir -p "$out/share/"
+    cp -v ../COPYRIGHT $out/share/
+  '';
+
+  meta = with lib; {
+    description = "A gamedriver for LPMuds including a LPC compiler, interpreter and runtime";
+    homepage = "https://ldmud.eu";
+    changelog = "https://github.com/ldmud/ldmud/blob/${version}/HISTORY";
+    longDescription = ''
+      LDMud started as a project to clean up and modernize Amylaar's LPMud
+      gamedriver. Primary goals are full documentation, a commented source body
+      and out-of-the-box support for the major mudlibs, of which the commented
+      source body has been pretty much completed. During the course of work
+      a lot of bug fixes and improvements found their way into the driver - much
+      more than originally expected, and definitely enough to make LDMud
+      a driver in its own right.
+    '';
+    # See https://github.com/ldmud/ldmud/blob/master/COPYRIGHT
+    license = licenses.unfreeRedistributable;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ cpu ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/leela-zero/default.nix b/nixpkgs/pkgs/games/leela-zero/default.nix
new file mode 100644
index 000000000000..e7b6c7934188
--- /dev/null
+++ b/nixpkgs/pkgs/games/leela-zero/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, boost
+, opencl-headers
+, ocl-icd
+, qtbase
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "leela-zero";
+  version = "0.17";
+
+  src = fetchFromGitHub {
+    owner = "gcp";
+    repo = "leela-zero";
+    rev = "v${version}";
+    sha256 = "sha256-AQRp2rkL9KCZdsJN6uz2Y+3kV4lyRLYjWn0p7UOjBMw=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ boost opencl-headers ocl-icd qtbase zlib ];
+
+  nativeBuildInputs = [ cmake ];
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    description = "Go engine modeled after AlphaGo Zero";
+    homepage = "https://github.com/gcp/leela-zero";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.averelld maintainers.omnipotententity ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/left4gore/default.nix b/nixpkgs/pkgs/games/left4gore/default.nix
new file mode 100644
index 000000000000..c203d03ab13e
--- /dev/null
+++ b/nixpkgs/pkgs/games/left4gore/default.nix
@@ -0,0 +1,48 @@
+{ stdenvNoCC, lib, fetchurl, buildFHSEnv }:
+
+let
+  version = "2.3";
+
+  # Unwrapped package, for putting into the FHS env
+  left4gore-unwrapped = stdenvNoCC.mkDerivation {
+    pname = "left4gore-unwrapped";
+    inherit version;
+
+    src = fetchurl {
+      url = "http://www.left4gore.com/dist/left4gore-${version}-linux.tar.gz";
+      sha256 = "1n57nh32ybn6kirn8djh0nsjx6m84c0jfi1x8r4w2qr0qky3z7p0";
+    };
+
+    installPhase = ''
+      mkdir -p $out/bin
+      cp left4gore $out/bin
+    '';
+  };
+
+  # FHS env, as patchelf will not work
+  env = buildFHSEnv {
+    name = "left4gore-env-${version}";
+    targetPkgs = _: [ left4gore-unwrapped ];
+    runScript = "left4gore";
+  };
+
+in stdenvNoCC.mkDerivation {
+  pname = "left4gore";
+  inherit version;
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    ln -s ${env}/bin/* $out/bin/left4gore
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.left4gore.com";
+    description = "Memory patcher which adds the gore back into Left 4 Dead 2";
+    license = licenses.unfree; # Probably the best choice
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/legendary-gl/default.nix b/nixpkgs/pkgs/games/legendary-gl/default.nix
new file mode 100644
index 000000000000..569148f2cf50
--- /dev/null
+++ b/nixpkgs/pkgs/games/legendary-gl/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, gitUpdater
+, fetchFromGitHub
+, buildPythonApplication
+, pythonOlder
+, requests
+, filelock
+}:
+
+buildPythonApplication rec {
+  pname = "legendary-gl"; # Name in pypi
+  version = "0.20.33";
+
+  src = fetchFromGitHub {
+    owner = "derrod";
+    repo = "legendary";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-fEQUChkxrKV2IkFGORUolZE2qTzA10Xxogjl5Va4TcE=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    filelock
+  ];
+
+  disabled = pythonOlder "3.8";
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "legendary" ];
+
+  meta = with lib; {
+    description = "A free and open-source Epic Games Launcher alternative";
+    homepage = "https://github.com/derrod/legendary";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ equirosa ];
+  };
+
+  passthru.updateScript = gitUpdater { };
+}
diff --git a/nixpkgs/pkgs/games/lgames/barrage/default.nix b/nixpkgs/pkgs/games/lgames/barrage/default.nix
new file mode 100644
index 000000000000..822ec04f1d45
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgames/barrage/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL
+, SDL_mixer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "barrage";
+  version = "1.0.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-cGYrG7A4Ffh51KyR+UpeWu7A40eqxI8g4LefBIs18kg=";
+  };
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://lgames.sourceforge.io/Barrage/";
+    description = "A destructive action game";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    inherit (SDL.meta) platforms;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lgames/lbreakout2/default.nix b/nixpkgs/pkgs/games/lgames/lbreakout2/default.nix
new file mode 100644
index 000000000000..f554a1683eee
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgames/lbreakout2/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, SDL
+, SDL_mixer
+, libintl
+, libpng
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lbreakout2";
+  version = "2.6.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    sha256 = "0vwdlyvh7c4y80q5vp7fyfpzbqk9lq3w8pvavi139njkalbxc14i";
+  };
+
+  # Can't exit from pause without this patch
+  patches = [(fetchpatch {
+    url = "https://sources.debian.org/data/main/l/lbreakout2/2.6.5-2/debian/patches/sdl_fix_pauses.patch";
+    hash = "sha256-ycsuxfokpOblLky42MwtJowdEp7v5dZRMFIR4id4ZBI=";
+  })];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+    libintl
+    libpng
+    zlib
+  ];
+
+  # With fortify it crashes at runtime:
+  #   *** buffer overflow detected ***: terminated
+  #   Aborted (core dumped)
+  hardeningDisable = [ "fortify" ];
+
+  meta = with lib; {
+    homepage = "http://lgames.sourceforge.net/LBreakout2/";
+    description = "Breakout clone from the LGames series";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.ciil ];
+    platforms = platforms.unix;
+    hydraPlatforms = lib.platforms.linux; # sdl-config times out on darwin
+  };
+}
diff --git a/nixpkgs/pkgs/games/lgames/lbreakouthd/default.nix b/nixpkgs/pkgs/games/lgames/lbreakouthd/default.nix
new file mode 100644
index 000000000000..d5f78facca2a
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgames/lbreakouthd/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchurl
+, directoryListingUpdater
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "lbreakouthd";
+  version = "1.1.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/lbreakouthd-${finalAttrs.version}.tar.gz";
+    hash = "sha256-fJGhGg6da/leHI52fDeVlRHOrrV0xedSEMHyC1PpNII=";
+  };
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  passthru.updateScript = directoryListingUpdater {
+    inherit (finalAttrs) pname version;
+    url = "https://lgames.sourceforge.io/LBreakoutHD/";
+    extraRegex = "(?!.*-win(32|64)).*";
+  };
+
+  meta = {
+    homepage = "https://lgames.sourceforge.io/LBreakoutHD/";
+    description = "A widescreen Breakout clone";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    inherit (SDL2.meta) platforms;
+    broken = stdenv.isDarwin;
+  };
+})
diff --git a/nixpkgs/pkgs/games/lgames/lpairs2/default.nix b/nixpkgs/pkgs/games/lgames/lpairs2/default.nix
new file mode 100644
index 000000000000..7993fd0657da
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgames/lpairs2/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+, directoryListingUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lpairs2";
+  version = "2.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-gw1BNkcztyTuoXRdx5+TBZNJEJNrLCfEUCQ1JzROogA=";
+  };
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+  ];
+
+  passthru.updateScript = directoryListingUpdater {
+    inherit pname version;
+    url = "https://lgames.sourceforge.io/LPairs/";
+    extraRegex = "(?!.*-win(32|64)).*";
+  };
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "http://lgames.sourceforge.net/LPairs/";
+    description = "Matching the pairs - a typical Memory Game";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lgames/ltris/default.nix b/nixpkgs/pkgs/games/lgames/ltris/default.nix
new file mode 100644
index 000000000000..8cf581b376bf
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgames/ltris/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL
+, SDL_mixer
+, directoryListingUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ltris";
+  version = "1.2.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-EpHGpkLQa57hU6wKLnhVosmD6DnGGPGilN8E2ClSXLA=";
+  };
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  passthru.updateScript = directoryListingUpdater {
+    inherit pname version;
+    url = "https://lgames.sourceforge.io/LTris/";
+    extraRegex = "(?!.*-win(32|64)).*";
+  };
+
+  meta = with lib; {
+    homepage = "https://lgames.sourceforge.io/LTris/";
+    description = "Tetris clone from the LGames series";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ciil ];
+    inherit (SDL.meta) platforms;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lgogdownloader/default.nix b/nixpkgs/pkgs/games/lgogdownloader/default.nix
new file mode 100644
index 000000000000..e538a19938a7
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgogdownloader/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, curl
+, boost
+, liboauth
+, jsoncpp
+, htmlcxx
+, rhash
+, tinyxml-2
+, help2man
+, wrapQtAppsHook
+, qtbase
+, qtwebengine
+, testers
+, lgogdownloader
+
+, enableGui ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lgogdownloader";
+  version = "3.11";
+
+  src = fetchFromGitHub {
+    owner = "Sude-";
+    repo = "lgogdownloader";
+    rev = "v${version}";
+    hash = "sha256-zSAtQPgniI4hwhqiknP4zQAH6dhEmoAC1iF577ahnFU=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    help2man
+  ] ++ lib.optional enableGui wrapQtAppsHook;
+
+  buildInputs = [
+    boost
+    curl
+    htmlcxx
+    jsoncpp
+    liboauth
+    rhash
+    tinyxml-2
+  ] ++ lib.optionals enableGui [
+    qtbase
+    qtwebengine
+  ];
+
+  cmakeFlags = lib.optional enableGui "-DUSE_QT_GUI=ON";
+
+  passthru.tests = {
+    version = testers.testVersion { package = lgogdownloader; };
+  };
+
+  meta = with lib; {
+    description = "Unofficial downloader to GOG.com for Linux users. It uses the same API as the official GOGDownloader";
+    homepage = "https://github.com/Sude-/lgogdownloader";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ _0x4A6F ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/liberal-crime-squad/default.nix b/nixpkgs/pkgs/games/liberal-crime-squad/default.nix
new file mode 100644
index 000000000000..f46bd3b50a38
--- /dev/null
+++ b/nixpkgs/pkgs/games/liberal-crime-squad/default.nix
@@ -0,0 +1,30 @@
+{ fetchFromGitHub, lib, stdenv, autoreconfHook, libiconv, ncurses, SDL2, SDL2_mixer }:
+
+stdenv.mkDerivation {
+  version = "2016-07-06";
+  pname = "liberal-crime-squad";
+
+  src = fetchFromGitHub {
+    owner = "Kamal-Sadek";
+    repo = "Liberal-Crime-Squad";
+    rev = "2ace84e";
+    sha256 = "0mcldn8ivlfyjfx22ygzcbbw3bzl0j6vi3g6jyj8jmcrni61mgmb";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ libiconv ncurses SDL2 SDL2_mixer ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A humorous politically themed ncurses game";
+    longDescription = ''
+      Welcome to Liberal Crime Squad! The Conservatives have taken the Executive, Legislative, and Judicial branches of government. Over time, the Liberal laws of this nation will erode and turn the country into a BACKWOODS YET CORPORATE NIGHTMARE. To prevent this from happening, the Liberal Crime Squad was established. The mood of the country is shifting, and we need to turn things around. Go out on the streets and indoctrinate Conservative automatons. That is, let them see their True Liberal Nature. Then arm them and send them forth to Stop Evil.
+    '';
+    homepage = "https://github.com/Kamal-Sadek/Liberal-Crime-Squad";
+    maintainers = [ maintainers.rardiol ];
+    mainProgram = "crimesquad";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/liberation-circuit/default.nix b/nixpkgs/pkgs/games/liberation-circuit/default.nix
new file mode 100644
index 000000000000..365fbb2983eb
--- /dev/null
+++ b/nixpkgs/pkgs/games/liberation-circuit/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, lib, fetchFromGitHub, fetchurl, pkg-config, makeWrapper, allegro5, libGL }:
+
+stdenv.mkDerivation rec {
+  pname = "liberation-circuit";
+  version = "unstable-2022-01-02";
+
+  src = fetchFromGitHub {
+    owner = "linleyh";
+    repo = pname;
+    rev = "19e3363547793e931fd9419b61ebc2cd8e257714";
+    sha256 = "zIwjh4CBSmKz7pF7GM5af+VslWho5jHOLsulbW4C8TY=";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ allegro5 libGL ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/opt
+    cp -r bin $out/opt/liberation-circuit
+    chmod +x $out/opt/liberation-circuit/launcher.sh
+    makeWrapper $out/opt/liberation-circuit/launcher.sh $out/bin/liberation-circuit
+
+    install -D linux-packaging/liberation-circuit.desktop $out/share/applications/liberation-circuit.desktop
+    install -D linux-packaging/liberation-circuit.appdata.xml $out/share/metainfo/liberation-circuit.appdata.xml
+    install -D linux-packaging/icon-256px.png $out/share/pixmaps/liberation-circuit.png
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Real-time strategy game with programmable units";
+    longDescription = ''
+      Escape from a hostile computer system! Harvest data to create an armada of battle-processes to aid your escape! Take command directly and play the game as an RTS, or use the game's built-in editor and compiler to write your own unit AI in a simplified version of C.
+    '';
+    homepage = "https://linleyh.itch.io/liberation-circuit";
+    maintainers = with maintainers; [ emilytrau ];
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/libremines/default.nix b/nixpkgs/pkgs/games/libremines/default.nix
new file mode 100644
index 000000000000..fb7f6ae96873
--- /dev/null
+++ b/nixpkgs/pkgs/games/libremines/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, wrapQtAppsHook
+, qtmultimedia
+, qtwayland
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libremines";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "Bollos00";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-aqWzTvvRoke+Rakb6dNpDoD7haKHEKW3XARGLrH2WiY=";
+  };
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  buildInputs = [
+    qtmultimedia
+  ] ++ lib.optionals stdenv.isLinux [
+    qtwayland
+  ];
+
+  cmakeFlags = [ "-DUSE_QT6=TRUE" ];
+
+  meta = with lib; {
+    description = "Qt based Minesweeper game";
+    longDescription = ''
+      A Free/Libre and Open Source Software Qt based Minesweeper game available for GNU/Linux, FreeBSD and Windows systems.
+    '';
+    homepage = "https://bollos00.github.io/LibreMines";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lincity/default.nix b/nixpkgs/pkgs/games/lincity/default.nix
new file mode 100644
index 000000000000..50b48f0a1582
--- /dev/null
+++ b/nixpkgs/pkgs/games/lincity/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, fetchpatch, libX11, libXext, xorgproto, libICE, libSM, libpng12, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "lincity";
+  version = "1.13.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lincity/${pname}-${version}.tar.gz";
+    sha256 = "0p81wl7labyfb6rgp0hi42l2akn3n7r2bnxal1wyvjylzw8vsk3v";
+  };
+
+  buildInputs = [
+    libICE libpng12 libSM libX11 libXext
+    xorgproto zlib
+  ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.net/data/main/l/lincity/1.13.1-13/debian/patches/extern-inline-functions-777982";
+      sha256 = "06dp3zwk0z5wr5a3xaaj2my75vcjcy98vc22hsag7ggd9jwrkcp0";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.net/data/main/l/lincity/1.13.1-13/debian/patches/clang-ftbfs-757859";
+      sha256 = "098rnywcsyc0m11x4a5m3dza8i0jmfh6pacfgma1vvxpsfkb6ngp";
+    })
+  ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: modules/.libs/libmodules.a(rocket_pad.o):/build/lincity-1.13.1/modules/../screen.h:23:
+  #     multiple definition of `monthgraph_style'; ldsvguts.o:/build/lincity-1.13.1/screen.h:23: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  meta = with lib; {
+    description = "City simulation game";
+    license = licenses.gpl2Plus;
+    homepage = "https://sourceforge.net/projects/lincity";
+    maintainers = with maintainers; [ ];
+    # ../lcintl.h:14:10: fatal error: 'libintl.h' file not found
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lincity/ng.nix b/nixpkgs/pkgs/games/lincity/ng.nix
new file mode 100644
index 000000000000..9901255be4dc
--- /dev/null
+++ b/nixpkgs/pkgs/games/lincity/ng.nix
@@ -0,0 +1,84 @@
+{ stdenv
+, SDL2
+, SDL2_gfx
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+, autoreconfHook
+, fetchFromGitHub
+, jam
+, lib
+, libGL
+, libGLU
+, libX11
+, libxml2
+, libxslt
+, physfs
+, pkg-config
+, xorgproto
+, zlib
+}:
+
+stdenv.mkDerivation {
+  pname = "lincity-ng";
+  version = "2.9beta.20211125";
+
+  src = fetchFromGitHub {
+    owner = "lincity-ng";
+    repo = "lincity-ng";
+    rev = "b9062bec252632ca5d26b98d71453b8762c63173";
+    sha256 = "0l07cn8rmpmlqdppjc2ikh5c7xmwib27504zpmn3n9pryp394r46";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    jam
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_gfx
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+    libGL
+    libGLU
+    libX11
+    libxml2
+    libxslt
+    physfs
+    xorgproto
+    zlib
+  ];
+
+  autoreconfPhase = ''
+    ./autogen.sh
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    AR='ar r' jam -j $NIX_BUILD_CORES
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    touch CREDITS
+    AR='ar r' jam install
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "City building game";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/linthesia/default.nix b/nixpkgs/pkgs/games/linthesia/default.nix
new file mode 100644
index 000000000000..0fd252e7ba5d
--- /dev/null
+++ b/nixpkgs/pkgs/games/linthesia/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, SDL2
+, SDL2_image
+, SDL2_ttf
+, alsa-lib
+, fetchFromGitHub
+, glibmm
+, gtk3
+, libGL
+, libGLU
+, meson
+, ninja
+, pkg-config
+, python3
+, sqlite
+, stdenv
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "linthesia";
+  version = "unstable-2023-05-23";
+
+  src = fetchFromGitHub {
+    owner = "linthesia";
+    repo = "linthesia";
+    rev = "1f2701241f8865c2f5c14a97b81ae64884cf0396";
+    sha256 = "sha256-3uPcpDUGtAGW9q/u8Cn+0bNqikII1Y/a0PKARW/5nao=";
+  };
+
+  postPatch = ''
+    patchShebangs meson_post_install.py
+  '';
+
+  nativeBuildInputs = [ meson ninja pkg-config python3 wrapGAppsHook ];
+  buildInputs = [
+    libGL
+    libGLU
+    alsa-lib
+    glibmm
+    sqlite
+    SDL2
+    SDL2_ttf
+    SDL2_image
+    gtk3.out # icon cache
+  ];
+
+  meta = with lib; {
+    description = "A game of playing music using a MIDI keyboard following a MIDI file";
+    inherit (src.meta) homepage;
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ckie ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/liquidwar/5.nix b/nixpkgs/pkgs/games/liquidwar/5.nix
new file mode 100644
index 000000000000..fc9802d46e5e
--- /dev/null
+++ b/nixpkgs/pkgs/games/liquidwar/5.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, allegro }:
+stdenv.mkDerivation rec {
+  version = "5.6.5";
+  pname = "liquidwar5";
+  src = fetchurl {
+    url = "http://www.ufoot.org/download/liquidwar/v5/${version}/liquidwar-${version}.tar.gz";
+    sha256 = "2tCqhN1BbK0FVCHtm0DfOe+ueNPfdZwFg8ZMVPfy/18=";
+  };
+
+  buildInputs = [ allegro ];
+
+  configureFlags = lib.optional stdenv.isx86_64 "--disable-asm";
+
+  hardeningDisable = [ "format" ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Workaround build failure on -fno-common toolchains like upstream
+    # gcc-10. Otherwise build fails as:
+    #   ld: random.o:(.bss+0x0): multiple definition of `LW_RANDOM_ON'; game.o:(.bss+0x4): first defined here
+    "-fcommon"
+
+    "-lm"
+  ];
+
+  meta = with lib; {
+    description = "The classic version of a quick tactics game LiquidWar";
+    maintainers = [ maintainers.raskin ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/liquidwar/default.nix b/nixpkgs/pkgs/games/liquidwar/default.nix
new file mode 100644
index 000000000000..83ac293f8b63
--- /dev/null
+++ b/nixpkgs/pkgs/games/liquidwar/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, xorgproto, libX11, libXrender
+, gmp, libjpeg, libpng
+, expat, gettext, perl, guile
+, SDL, SDL_image, SDL_mixer, SDL_ttf
+, curl, sqlite, libtool, readline
+, libogg, libvorbis, libcaca, csound, cunit
+, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "liquidwar6";
+  version = "0.6.3902";
+
+  src = fetchurl {
+    url = "mirror://gnu/liquidwar6/${pname}-${version}.tar.gz";
+    sha256 = "1976nnl83d8wspjhb5d5ivdvdxgb8lp34wp54jal60z4zad581fn";
+  };
+
+  buildInputs = [
+    xorgproto libX11 gmp guile
+    libjpeg libpng
+    expat gettext perl
+    SDL SDL_image SDL_mixer SDL_ttf
+    curl sqlite
+    libogg libvorbis csound
+    libXrender libcaca cunit
+    libtool readline
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  hardeningDisable = [ "format" ];
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals (stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "12") [
+    # Needed with GCC 12 but problematic with some old GCCs
+    "-Wno-error=address"
+    "-Wno-error=use-after-free"
+  ] ++ [
+    "-Wno-error=deprecated-declarations"
+    # Avoid GL_GLEXT_VERSION double definition
+    " -DNO_SDL_GLEXT"
+  ]);
+
+  # To avoid problems finding SDL_types.h.
+  configureFlags = [ "CFLAGS=-I${lib.getDev SDL}/include/SDL" ];
+
+  meta = with lib; {
+    description = "Quick tactics game";
+    homepage = "https://www.gnu.org/software/liquidwar6/";
+    maintainers = [ maintainers.raskin ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lugaru/default.nix b/nixpkgs/pkgs/games/lugaru/default.nix
new file mode 100644
index 000000000000..9d10691fe49c
--- /dev/null
+++ b/nixpkgs/pkgs/games/lugaru/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitLab, cmake, openal, pkg-config, libogg,
+  libvorbis, SDL2, makeWrapper, libpng, libjpeg_turbo, libGLU }:
+
+with lib;
+
+stdenv.mkDerivation rec {
+
+  pname = "lugaru";
+  version = "1.2";
+
+  src = fetchFromGitLab {
+    owner = "osslugaru";
+    repo = "lugaru";
+    rev = version;
+    sha256 = "089rblf8xw3c6dq96vnfla6zl8gxcpcbc1bj5jysfpq63hhdpypz";
+  };
+
+  nativeBuildInputs = [ makeWrapper cmake pkg-config ];
+
+  buildInputs = [ libGLU openal SDL2 libogg libvorbis libpng libjpeg_turbo ];
+
+  cmakeFlags = [ "-DSYSTEM_INSTALL=ON" ];
+
+  meta = {
+    description = "Third person ninja rabbit fighting game";
+    homepage = "https://osslugaru.gitlab.io";
+    maintainers = [ ];
+    platforms = platforms.linux;
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lunar-client/default.nix b/nixpkgs/pkgs/games/lunar-client/default.nix
new file mode 100644
index 000000000000..042259fcfae2
--- /dev/null
+++ b/nixpkgs/pkgs/games/lunar-client/default.nix
@@ -0,0 +1,40 @@
+{ appimageTools
+, fetchurl
+, lib
+, makeWrapper
+}:
+
+let
+  pname = "lunar-client";
+  version = "3.1.0";
+
+  src = fetchurl {
+    url = "https://launcherupdates.lunarclientcdn.com/Lunar%20Client-${version}.AppImage";
+    hash = "sha256-6OAGNkMyHOZI5wh92OtalnvUVFWNAS9PvkFS0e4YXhk=";
+  };
+
+  appimageContents = appimageTools.extract { inherit pname version src; };
+in
+appimageTools.wrapType2 rec {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv $out/bin/{${pname}-${version},${pname}}
+    source "${makeWrapper}/nix-support/setup-hook"
+    wrapProgram $out/bin/${pname} \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+    install -Dm444 ${appimageContents}/launcher.desktop $out/share/applications/lunar-client.desktop
+    install -Dm444 ${appimageContents}/launcher.png $out/share/pixmaps/lunar-client.png
+    substituteInPlace $out/share/applications/lunar-client.desktop \
+      --replace 'Exec=AppRun --no-sandbox %U' 'Exec=lunar-client' \
+      --replace 'Icon=launcher' 'Icon=lunar-client'
+  '';
+
+  meta = with lib; {
+    description = "Free Minecraft client with mods, cosmetics, and performance boost.";
+    homepage = "https://www.lunarclient.com/";
+    license = with licenses; [ unfree ];
+    maintainers = with maintainers; [ zyansheep Technical27 surfaceflinger ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/lzwolf/default.nix b/nixpkgs/pkgs/games/lzwolf/default.nix
new file mode 100644
index 000000000000..37bcc7fc8e06
--- /dev/null
+++ b/nixpkgs/pkgs/games/lzwolf/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, lib
+, fetchFromBitbucket
+, p7zip
+, cmake
+, SDL2
+, bzip2
+, zlib
+, libjpeg
+, libsndfile
+, mpg123
+, pkg-config
+, SDL2_net
+, SDL2_mixer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lzwolf";
+  # Fix-Me: Remember to remove SDL2_mixer pin (at top-level) on next lzwolf upgrade.
+  version = "unstable-2022-12-26";
+
+  src = fetchFromBitbucket {
+    owner = "linuxwolf6";
+    repo = "lzwolf";
+    rev = "a24190604296e16941c601b57afe4350462fc659";
+    sha256 = "sha256-CtBdvk6LXb/ll92Fxig/M4t4QNj8dNFJYd8F99b47kQ=";
+  };
+
+  postPatch = ''
+    # SDL2_net-2.2.0 changed CMake component name slightly.
+    substituteInPlace src/CMakeLists.txt \
+      --replace 'SDL2::SDL2_net' 'SDL2_net::SDL2_net'
+  '';
+
+  nativeBuildInputs = [ p7zip pkg-config cmake ];
+  buildInputs = [
+    SDL2 bzip2 zlib libjpeg SDL2_mixer SDL2_net libsndfile mpg123
+  ];
+
+  cmakeFlags = [
+    "-DGPL=ON"
+  ];
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 lzwolf "$out/lib/lzwolf/lzwolf"
+    for i in *.pk3; do
+      install -Dm644 "$i" "$out/lib/lzwolf/$i"
+    done
+    mkdir -p $out/bin
+    ln -s $out/lib/lzwolf/lzwolf $out/bin/lzwolf
+  '';
+
+  meta = with lib; {
+    homepage = "https://bitbucket.org/linuxwolf6/lzwolf";
+    description = "Enhanced fork of ECWolf, a Wolfenstein 3D source port";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ tgunnoe ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/macopix/default.nix b/nixpkgs/pkgs/games/macopix/default.nix
new file mode 100644
index 000000000000..277752dc91c3
--- /dev/null
+++ b/nixpkgs/pkgs/games/macopix/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, pkg-config, gtk, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "macopix";
+  version = "1.7.4";
+
+  src = fetchurl {
+    url = "http://rosegray.sakura.ne.jp/macopix/macopix-${version}.tar.bz2";
+    sha256 = "0sgnr0wrw3hglcnsyvipll7icfv69ssmyw584zfhk1rgramlkzyb";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk openssl ];
+
+  preConfigure = ''
+    # Build fails on Linux with windres.
+    export ac_cv_prog_WINDRES=
+  '';
+
+  enableParallelBuilding = true;
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: dnd.o:src/main.h:136: multiple definition of
+  #     `MENU_EXT'; main.o:src/main.h:136: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  NIX_LDFLAGS = "-lX11";
+
+  meta = {
+    description = "Mascot Constructive Pilot for X";
+    homepage = "http://rosegray.sakura.ne.jp/macopix/index-e.html";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/maelstrom/default.nix b/nixpkgs/pkgs/games/maelstrom/default.nix
new file mode 100644
index 000000000000..065784d605ef
--- /dev/null
+++ b/nixpkgs/pkgs/games/maelstrom/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, makeDesktopItem, SDL2, SDL2_net }:
+
+stdenv.mkDerivation rec {
+  pname = "maelstrom";
+  version = "3.0.7";
+
+  src = fetchurl {
+    url = "http://www.libsdl.org/projects/Maelstrom/src/Maelstrom-${version}.tar.gz";
+    sha256 = "0dm0m5wd7amrsa8wnrblkv34sq4v4lglc2wfx8klfkdhyhi06s4k";
+  };
+
+  # this fixes a typedef compilation error with gcc-3.x
+  patches = [ ./fix-compilation.patch ];
+
+  buildInputs = [ SDL2 SDL2_net ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s $out/games/Maelstrom/Maelstrom $out/bin/maelstrom
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "maelstrom";
+      exec = "maelstrom";
+      desktopName = "Maelstrom";
+      genericName = "Maelstrom";
+      comment = "An arcade-style game resembling Asteroids";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "An arcade-style game resembling Asteroids";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ tmountain ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/maelstrom/fix-compilation.patch b/nixpkgs/pkgs/games/maelstrom/fix-compilation.patch
new file mode 100644
index 000000000000..3fa8980c5ee1
--- /dev/null
+++ b/nixpkgs/pkgs/games/maelstrom/fix-compilation.patch
@@ -0,0 +1,42 @@
+diff -Naur Maelstrom-3.0.7/buttonlist.h Maelstrom-3.0.7-patched/buttonlist.h
+--- Maelstrom-3.0.7/buttonlist.h	2000-01-25 11:41:32.000000000 -0500
++++ Maelstrom-3.0.7-patched/buttonlist.h	2021-02-22 08:34:01.000000000 -0500
+@@ -16,7 +16,7 @@
+ 
+ 	void Add_Button(Uint16 x, Uint16 y, Uint16 width, Uint16 height, 
+ 						void (*callback)(void)) {
+-		struct button *belem;
++        button *belem;
+ 		
+ 		for ( belem=&button_list; belem->next; belem=belem->next );
+ 		belem->next = new button;
+@@ -30,7 +30,7 @@
+ 	}
+ 
+ 	void Activate_Button(Uint16 x, Uint16 y) {
+-		struct button *belem;
++        button *belem;
+ 
+ 		for ( belem=button_list.next; belem; belem=belem->next ) {
+ 			if ( (x >= belem->x1) && (x <= belem->x2) &&
+@@ -42,7 +42,7 @@
+ 	}
+ 
+ 	void Delete_Buttons(void) {
+-		struct button *belem, *btemp;
++        button *belem, *btemp;
+ 
+ 		for ( belem=button_list.next; belem; ) {
+ 			btemp = belem;
+diff -Naur Maelstrom-3.0.7/main.cpp Maelstrom-3.0.7-patched/main.cpp
+--- Maelstrom-3.0.7/main.cpp	2021-02-04 11:50:27.000000000 -0500
++++ Maelstrom-3.0.7-patched/main.cpp	2021-02-22 08:34:34.000000000 -0500
+@@ -153,7 +153,7 @@
+ 	error("or\n");
+ 	error("Usage: %s <options>\n\n", progname);
+ 	error("Where <options> can be any of:\n\n"
+-"	-fullscreen		# Run Maelstrom in full-screen mode\n"
++"	-windowed		# Run Maelstrom in windowed mode\n"
+ "	-gamma [0-8]		# Set the gamma correction\n"
+ "	-volume [0-8]		# Set the sound volume\n"
+ "	-netscores		# Use the world-wide network score server\n"
diff --git a/nixpkgs/pkgs/games/manaplus/default.nix b/nixpkgs/pkgs/games/manaplus/default.nix
new file mode 100644
index 000000000000..1ea5231a65ea
--- /dev/null
+++ b/nixpkgs/pkgs/games/manaplus/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchurl, SDL2, SDL2_image, SDL2_ttf, SDL2_mixer
+, SDL2_net , SDL2_gfx, zlib, physfs, curl, libxml2, libpng, pkg-config
+, libGL, autoreconfHook }:
+stdenv.mkDerivation rec {
+  pname = "manaplus";
+  version = "2.1.3.17";
+
+  src = fetchurl {
+    url = "https://download.evolonline.org/manaplus/download/${version}/manaplus-${version}.tar.xz";
+    sha256 = "sha256-6NFqxUjEAp7aiIScyTOFh2tT7PfuTCKH1vTgPpTm+j0=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook pkg-config
+  ];
+
+  buildInputs = [
+    SDL2 SDL2_image SDL2_ttf SDL2_mixer SDL2_net SDL2_gfx zlib
+    physfs curl libxml2 libpng libGL
+  ];
+
+  configureFlags = [ "--with-sdl2" "--without-dyecmd" ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    maintainers = [ lib.maintainers.lheckemann ];
+    description = "A free OpenSource 2D MMORPG client";
+    homepage = "https://manaplus.org/";
+    license = lib.licenses.gpl2;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/maptool/default.nix b/nixpkgs/pkgs/games/maptool/default.nix
new file mode 100644
index 000000000000..eed8bac656be
--- /dev/null
+++ b/nixpkgs/pkgs/games/maptool/default.nix
@@ -0,0 +1,119 @@
+{ lib
+, copyDesktopItems
+, fetchurl
+, ffmpeg
+, gitUpdater
+, jre
+, libarchive
+, makeDesktopItem
+, openjfx
+, stdenvNoCC
+, wrapGAppsHook
+}:
+let
+  pname = "maptool";
+  version = "1.13.2";
+  repoBase = "https://github.com/RPTools/${pname}";
+  src = fetchurl {
+    url = "${repoBase}/releases/download/${version}/MapTool-${version}.jar";
+    hash = "sha256-14ULI1OAk0V4DqiL5IF7DK6pw0NRfmU+omrFP72PblA=";
+  };
+
+  icon = fetchurl {
+    url = "https://raw.githubusercontent.com/RPTools/${pname}/${version}/package/linux/MapTool.png";
+    hash = "sha256-xkVYjMprTanHu8r4b9PHORI8E1aJp+9KDSP5mqCE8ew=";
+  };
+
+  meta = with lib; {
+    description = "Virtual Tabletop for playing roleplaying games with remote players or face to face";
+    homepage = "https://www.rptools.net/toolbox/maptool/";
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ rhendric ];
+  };
+
+  javafxModules = [ "base" "controls" "media" "swing" "web" "fxml" "graphics" ];
+
+  classpath =
+    lib.concatMap (mod: [
+      "${openjfx}/modules_src/javafx.${mod}/module-info.java"
+      "${openjfx}/modules/javafx.${mod}"
+      "${openjfx}/modules_libs/javafx.${mod}"
+    ]) javafxModules ++
+    [ src ];
+
+  jvmArgs = [
+    "-cp" (lib.concatStringsSep ":" classpath)
+    "-Xss8M"
+    "-Dsun.java2d.d3d=false"
+    "-Dfile.encoding=UTF-8"
+    "-Dpolyglot.engine.WarnInterpreterOnly=false"
+    "-XX:+ShowCodeDetailsInExceptionMessages"
+    "--add-opens=java.desktop/java.awt=ALL-UNNAMED"
+    "--add-opens=java.desktop/java.awt.geom=ALL-UNNAMED"
+    "--add-opens=java.desktop/sun.awt.geom=ALL-UNNAMED"
+    "--add-opens=java.base/java.util=ALL-UNNAMED"
+    "--add-opens=javafx.web/javafx.scene.web=ALL-UNNAMED"
+    "--add-opens=javafx.web/com.sun.webkit=ALL-UNNAMED"
+    "--add-opens=javafx.web/com.sun.webkit.dom=ALL-UNNAMED"
+    "--add-opens=java.desktop/javax.swing=ALL-UNNAMED"
+    "--add-opens=java.desktop/sun.awt.shell=ALL-UNNAMED"
+    "--add-opens=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED"
+
+    # disable telemetry (the empty DSN disables the Sentry library, setting the
+    # environment to Development disables some logic inside MapTool)
+    "-Dsentry.dsn"
+    "-Dsentry.environment=Development"
+  ];
+
+  binName = pname;
+  rdnsName = "net.rptools.maptool";
+in
+stdenvNoCC.mkDerivation {
+  inherit pname version src meta;
+
+  dontUnpack = true;
+  dontBuild = true;
+  dontWrapGApps = true;
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    libarchive
+    wrapGAppsHook
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = rdnsName;
+      desktopName = "MapTool";
+      icon = rdnsName;
+      exec = binName;
+      comment = meta.description;
+      categories = [ "Game" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/${binName} \
+      "''${gappsWrapperArgs[@]}" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ ffmpeg ]} \
+      --add-flags '${lib.concatStringsSep " " jvmArgs} net.rptools.maptool.client.LaunchInstructions'
+
+    dest=$out/share/icons/hicolor/256x256/apps
+    mkdir -p "$dest"
+    ln -s ${icon} "$dest/${rdnsName}.png"
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = gitUpdater {
+    url = "${repoBase}.git";
+    ignoredVersions = "-";
+  };
+}
diff --git a/nixpkgs/pkgs/games/mar1d/default.nix b/nixpkgs/pkgs/games/mar1d/default.nix
new file mode 100644
index 000000000000..6b3fe5feb2de
--- /dev/null
+++ b/nixpkgs/pkgs/games/mar1d/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, lib
+, SDL2
+, SDL2_mixer
+, libGLU
+, libconfig
+, meson
+, ninja
+, pkg-config
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "MAR1D";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    sha256 = "sha256-c48azBGdnzhEQGUeRJWlNLJhtrYjnpiORuWvowcQK5Y=";
+    rev = "v${version}";
+    repo = "MAR1D";
+    owner = "Radvendii";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+
+  buildInputs = [
+    SDL2
+    SDL2_mixer
+    libconfig
+    libGLU
+  ];
+
+  meta = with lib; {
+    description = "First person Super Mario Bros";
+    longDescription = ''
+      The original Super Mario Bros as you've never seen it. Step into Mario's
+      shoes in this first person clone of the classic Mario game. True to the
+      original, however, the game still takes place in a two dimensional world.
+      You must view the world as mario does, as a one dimensional line.
+    '';
+    homepage = "https://mar1d.com";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ taeer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/marble-marcher-ce/default.nix b/nixpkgs/pkgs/games/marble-marcher-ce/default.nix
new file mode 100644
index 000000000000..08ff58addf59
--- /dev/null
+++ b/nixpkgs/pkgs/games/marble-marcher-ce/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, fetchFromGitHub
+, sfml
+, anttweakbar
+, glm
+, eigen
+, glew
+, cmake
+}:
+stdenv.mkDerivation rec {
+  pname = "marble-marcher-ce";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "WAUthethird";
+    repo = "Marble-Marcher-Community-Edition";
+    rev = version;
+    hash = "sha256-m5i/Q4k5S4wcojHqMYS7e1W/Ph7q/95j3oOK2xbrHSk=";
+  };
+
+  buildInputs = [ sfml anttweakbar glm eigen glew ];
+  nativeBuildInputs = [ cmake makeWrapper copyDesktopItems ];
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  prePatch = ''
+    # the path /home/MMCE is always added to DESTDIR
+    # we change this to a more sensible path
+    # see https://github.com/WAUthethird/Marble-Marcher-Community-Edition/issues/23
+    substituteInPlace CMakeLists.txt \
+      --replace '/home/MMCE' '/share/MMCE'
+  '';
+
+  postInstall = ''
+    mkdir $out/bin
+    mkdir -p $out/share/icons/
+    # The executable has to be run from the same directory the assets are in
+    makeWrapper $out/share/MMCE/MarbleMarcher $out/bin/${pname} --chdir $out/share/MMCE
+    ln -s $out/share/MMCE/images/MarbleMarcher.png $out/share/icons/${pname}.png
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = pname;
+      icon = pname;
+      desktopName = pname;
+      comment = meta.description;
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "A fractal physics game.";
+    longDescription = "A community-developed version of the original Marble Marcher - a fractal physics game.";
+    homepage = "https://michaelmoroz.itch.io/mmce";
+    license = with licenses; [
+      gpl2Plus # Code
+      cc-by-30 # Assets
+      ofl # Fonts
+    ];
+    maintainers = with maintainers; [ rampoina ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/mari0/default.nix b/nixpkgs/pkgs/games/mari0/default.nix
new file mode 100644
index 000000000000..6e644245c4fb
--- /dev/null
+++ b/nixpkgs/pkgs/games/mari0/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, copyDesktopItems
+, fetchFromGitHub
+, love
+, makeDesktopItem
+, makeWrapper
+, stdenv
+, strip-nondeterminism
+, zip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mari0";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "Stabyourself";
+    repo = pname;
+    rev = version;
+    sha256 = "1zqaq4w599scsjvy1rsb21fd2r8j3srx9vym4ir9bh666dp36gxa";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+    strip-nondeterminism
+    zip
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "mari0";
+      exec = pname;
+      comment = "Crossover between Super Mario Bros. and Portal";
+      desktopName = "mari0";
+      genericName = "mari0";
+      categories = [ "Game" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    zip -9 -r mari0.love ./*
+    strip-nondeterminism --type zip mari0.love
+    install -Dm444 -t $out/share/games/lovegames/ mari0.love
+    makeWrapper ${love}/bin/love $out/bin/mari0 \
+      --add-flags $out/share/games/lovegames/mari0.love
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Crossover between Super Mario Bros. and Portal";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    downloadPage = "https://stabyourself.net/mari0/";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/mars/default.nix b/nixpkgs/pkgs/games/mars/default.nix
new file mode 100644
index 000000000000..3ce42bb7748e
--- /dev/null
+++ b/nixpkgs/pkgs/games/mars/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libGLU, libGL, sfml, fribidi, taglib }:
+stdenv.mkDerivation rec {
+  pname = "mars";
+  version = "unstable-17.10.2021";
+
+  src = fetchFromGitHub {
+    owner = "thelaui";
+    repo = "M.A.R.S.";
+    rev = "84664cda094efe6e49d9b1550e4f4f98c33eefa2";
+    sha256 = "sha256-SWLP926SyVTjn+UT1DCaJSo4Ue0RbyzImVnlNJQksS0=";
+  };
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libGLU libGL sfml fribidi taglib ];
+  installPhase = ''
+    cd ..
+    mkdir -p "$out/share/mars/"
+    mkdir -p "$out/bin/"
+    cp -rv data resources credits.txt license.txt "$out/share/mars/"
+    cp -v marsshooter "$out/bin/mars.bin"
+    cat << EOF > "$out/bin/mars"
+    #! ${stdenv.shell}
+    cd "$out/share/mars/"
+    exec "$out/bin/mars.bin" "\$@"
+    EOF
+    chmod +x "$out/bin/mars"
+  '';
+  meta = with lib; {
+    homepage = "https://mars-game.sourceforge.net/";
+    description = "A game about fighting with ships in a 2D space setting";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.astsmtl ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/mchprs/Cargo.lock b/nixpkgs/pkgs/games/mchprs/Cargo.lock
new file mode 100644
index 000000000000..79850247ef9a
--- /dev/null
+++ b/nixpkgs/pkgs/games/mchprs/Cargo.lock
@@ -0,0 +1,3052 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide 0.6.2",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bigdecimal"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aaf33151a6429fe9211d1b276eafdf70cdff28b071e76c0b0e1503221ea3744"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.59.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "borsh"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b"
+dependencies = [
+ "borsh-derive",
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7"
+dependencies = [
+ "borsh-derive-internal",
+ "borsh-schema-derive-internal",
+ "proc-macro-crate",
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-schema-derive-internal"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bufstream"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8"
+
+[[package]]
+name = "bus"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34701d821c19736317bc716b8eb6153a78b431b06fbd3950716cedc705a6c811"
+dependencies = [
+ "crossbeam-channel",
+ "num_cpus",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "bytecheck"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13fe11640a23eb24562225322cd3e452b93a3d4091d62fab69c70542fcd17d1f"
+dependencies = [
+ "bytecheck_derive",
+ "ptr_meta",
+ "simdutf8",
+]
+
+[[package]]
+name = "bytecheck_derive"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e31225543cb46f81a7e224762764f4a6a0f097b1db0b175f69e8065efaa42de5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "bitflags",
+ "clap_lex",
+ "indexmap",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb"
+dependencies = [
+ "anes",
+ "atty",
+ "cast",
+ "ciborium",
+ "clap",
+ "criterion-plot",
+ "itertools",
+ "lazy_static",
+ "num-traits",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools",
+]
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639"
+dependencies = [
+ "nix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "derive_utils"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff8f6a793f528719e1ad4425a52a213ac1214ac7158c5fb97a7f50a64bfc96d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum_dispatch"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11f36e95862220b211a6e2aa5eca09b4fa391b13cd52ceb8035a24bf65a79de2"
+dependencies = [
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "libz-sys",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "frunk"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89c703bf50009f383a0873845357cc400a95fc535f836feddfe015d7df6e1e0"
+dependencies = [
+ "frunk_core",
+ "frunk_derives",
+ "frunk_proc_macros",
+]
+
+[[package]]
+name = "frunk_core"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a446d01a558301dca28ef43222864a9fa2bd9a2e71370f769d5d5d5ec9f3537"
+
+[[package]]
+name = "frunk_derives"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b83164912bb4c97cfe0772913c7af7387ee2e00cb6d4636fb65a35b3d0c8f173"
+dependencies = [
+ "frunk_proc_macro_helpers",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "frunk_proc_macro_helpers"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "015425591bbeb0f5b8a75593340f1789af428e9f887a4f1e36c0c471f067ef50"
+dependencies = [
+ "frunk_core",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "frunk_proc_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea01524f285deab48affffb342b97f186e657b119c3f1821ac531780e0fbfae0"
+dependencies = [
+ "frunk_core",
+ "frunk_proc_macros_impl",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "frunk_proc_macros_impl"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a802d974cc18ee7fe1a7868fc9ce31086294fd96ba62f8da64ecb44e92a2653"
+dependencies = [
+ "frunk_core",
+ "frunk_proc_macro_helpers",
+ "proc-macro-hack",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "h2"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash 0.8.3",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
+dependencies = [
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "hematite-nbt"
+version = "0.5.2"
+source = "git+https://github.com/StackDoubleFlow/hematite_nbt#50bf06b3de166603dfef611b9f4773fdb118f8ff"
+dependencies = [
+ "byteorder",
+ "cesu8",
+ "flate2",
+ "serde",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "impls"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a46645bbd70538861a90d0f26c31537cdf1e44aae99a794fb75a664b70951bc"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-enum"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01c662c349c9c9f542e7bfd9134143beb27da4b20dfbc3b3ef5b2a5b507dafbd"
+dependencies = [
+ "derive_utils",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lexical"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6"
+dependencies = [
+ "lexical-core",
+]
+
+[[package]]
+name = "lexical-core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
+dependencies = [
+ "lexical-parse-float",
+ "lexical-parse-integer",
+ "lexical-util",
+ "lexical-write-float",
+ "lexical-write-integer",
+]
+
+[[package]]
+name = "lexical-parse-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
+dependencies = [
+ "lexical-parse-integer",
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-parse-integer"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-util"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
+dependencies = [
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
+dependencies = [
+ "lexical-util",
+ "lexical-write-integer",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-integer"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.142"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "lru"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909"
+dependencies = [
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "mchprs"
+version = "0.4.1"
+dependencies = [
+ "mchprs_core",
+ "tracing",
+ "tracing-appender",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "mchprs_blocks"
+version = "0.1.0"
+dependencies = [
+ "hematite-nbt",
+ "mchprs_proc_macros",
+ "mchprs_utils",
+ "serde",
+]
+
+[[package]]
+name = "mchprs_core"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "backtrace",
+ "bincode",
+ "bitflags",
+ "bus",
+ "byteorder",
+ "chrono",
+ "criterion",
+ "ctrlc",
+ "enum_dispatch",
+ "hematite-nbt",
+ "impls",
+ "itertools",
+ "mchprs_blocks",
+ "mchprs_network",
+ "mchprs_proc_macros",
+ "mchprs_save_data",
+ "mchprs_utils",
+ "mchprs_world",
+ "md5",
+ "mysql",
+ "once_cell",
+ "petgraph",
+ "rand",
+ "redpiler_graph",
+ "regex",
+ "reqwest",
+ "rusqlite",
+ "serde",
+ "serde_json",
+ "smallvec",
+ "tokio",
+ "toml 0.7.3",
+ "toml_edit",
+ "tracing",
+]
+
+[[package]]
+name = "mchprs_network"
+version = "0.1.0"
+dependencies = [
+ "byteorder",
+ "flate2",
+ "hematite-nbt",
+ "serde",
+ "tracing",
+]
+
+[[package]]
+name = "mchprs_proc_macros"
+version = "0.1.0"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "mchprs_save_data"
+version = "0.1.0"
+dependencies = [
+ "bincode",
+ "byteorder",
+ "mchprs_blocks",
+ "mchprs_world",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "mchprs_utils"
+version = "0.1.0"
+
+[[package]]
+name = "mchprs_world"
+version = "0.1.0"
+dependencies = [
+ "mchprs_blocks",
+ "serde",
+]
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "mysql"
+version = "23.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f11339ca5c251941805d51362a07823605a80586ced92914ab7de84fba813f"
+dependencies = [
+ "bufstream",
+ "bytes",
+ "crossbeam",
+ "flate2",
+ "io-enum",
+ "libc",
+ "lru",
+ "mysql_common",
+ "named_pipe",
+ "native-tls",
+ "once_cell",
+ "pem",
+ "percent-encoding",
+ "serde",
+ "serde_json",
+ "socket2",
+ "twox-hash",
+ "url",
+]
+
+[[package]]
+name = "mysql_common"
+version = "0.29.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9006c95034ccf7b903d955f210469119f6c3477fc9c9e7a7845ce38a3e665c2a"
+dependencies = [
+ "base64 0.13.1",
+ "bigdecimal",
+ "bindgen",
+ "bitflags",
+ "bitvec",
+ "byteorder",
+ "bytes",
+ "cc",
+ "cmake",
+ "crc32fast",
+ "flate2",
+ "frunk",
+ "lazy_static",
+ "lexical",
+ "num-bigint",
+ "num-traits",
+ "rand",
+ "regex",
+ "rust_decimal",
+ "saturating",
+ "serde",
+ "serde_json",
+ "sha1",
+ "sha2",
+ "smallvec",
+ "subprocess",
+ "thiserror",
+ "time 0.3.20",
+ "uuid",
+]
+
+[[package]]
+name = "named_pipe"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad9c443cce91fc3e12f017290db75dde490d685cdaaf508d7159d7cf41f0eb2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "openssl"
+version = "0.10.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pem"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "petgraph"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "plotters"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "ptr_meta"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
+dependencies = [
+ "ptr_meta_derive",
+]
+
+[[package]]
+name = "ptr_meta_derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redpiler_graph"
+version = "0.1.0"
+dependencies = [
+ "bincode",
+ "serde",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.1",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "rend"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab"
+dependencies = [
+ "bytecheck",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91"
+dependencies = [
+ "base64 0.21.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rkyv"
+version = "0.7.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21499ed91807f07ae081880aabb2ccc0235e9d88011867d984525e9a4c3cfa3e"
+dependencies = [
+ "bytecheck",
+ "hashbrown 0.12.3",
+ "ptr_meta",
+ "rend",
+ "rkyv_derive",
+ "seahash",
+]
+
+[[package]]
+name = "rkyv_derive"
+version = "0.7.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1c672430eb41556291981f45ca900a0239ad007242d1cb4b4167af842db666"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"
+dependencies = [
+ "bitflags",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+]
+
+[[package]]
+name = "rust_decimal"
+version = "1.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26bd36b60561ee1fb5ec2817f198b6fd09fa571c897a5e86d1487cfc2b096dfc"
+dependencies = [
+ "arrayvec",
+ "borsh",
+ "bytecheck",
+ "byteorder",
+ "bytes",
+ "num-traits",
+ "rand",
+ "rkyv",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "saturating"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "simdutf8"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "subprocess"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c2e86926081dda636c546d8c5e641661049d7562a68f5488be4a1f7f66f6086"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-appender"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e"
+dependencies = [
+ "crossbeam-channel",
+ "time 0.3.20",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if",
+ "rand",
+ "static_assertions",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "uuid"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
diff --git a/nixpkgs/pkgs/games/mchprs/default.nix b/nixpkgs/pkgs/games/mchprs/default.nix
new file mode 100644
index 000000000000..feda0c496f9c
--- /dev/null
+++ b/nixpkgs/pkgs/games/mchprs/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, sqlite
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mchprs";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "MCHPR";
+    repo = "MCHPRS";
+    rev = "v${version}";
+    hash = "sha256-y1ILZvnDWVlghvUVe8xU5wP2TMW+Q/l+V+bqDZrpnBk=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "hematite-nbt-0.5.2" = "sha256-knBmH/32JJclhFZbKTNx5XgLSQ2rIrXUGu8uoAHAXMk=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    openssl
+    sqlite
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    mainProgram = "mchprs";
+    description = "A multithreaded Minecraft server built for redstone";
+    homepage = "https://github.com/MCHPR/MCHPRS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gdd ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/megaglest/default.nix b/nixpkgs/pkgs/games/megaglest/default.nix
new file mode 100644
index 000000000000..83954c1b2463
--- /dev/null
+++ b/nixpkgs/pkgs/games/megaglest/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv, cmake, pkg-config, git, curl, SDL2, xercesc, openal, lua, libvlc
+, libjpeg, wxGTK32, cppunit, ftgl, glew, libogg, libvorbis, buildEnv, libpng
+, fontconfig, freetype, xorg, makeWrapper, bash, which, gnome, libGLU, glib
+, fetchFromGitHub, fetchpatch
+}:
+let
+  version = "3.13.0";
+  lib-env = buildEnv {
+    name = "megaglest-lib-env";
+    paths = [ SDL2 xorg.libSM xorg.libICE xorg.libX11 xorg.libXext
+      xercesc openal libvorbis lua libjpeg libpng curl fontconfig ftgl freetype
+      stdenv.cc.cc glew libGLU wxGTK32 ];
+  };
+  path-env = buildEnv {
+    name = "megaglest-path-env";
+    paths = [ bash which gnome.zenity ];
+  };
+in
+stdenv.mkDerivation {
+  pname = "megaglest";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "MegaGlest";
+    repo = "megaglest-source";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "0fb58a706nic14ss89zrigphvdiwy5s9dwvhscvvgrfvjpahpcws";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common toolchains
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/MegaGlest/megaglest-source/commit/5a3520540276a6fd06f7c88e571b6462978e3eab.patch";
+      sha256 = "0y554kjw56dikq87vs709pmq97hdx9hvqsk27f81v4g90m3b3qhi";
+    })
+    # Pull upstream and Debian fixes for wxWidgets 3.2
+    (fetchpatch {
+      name = "get-rid-of-manual-wxPaintEvent-creation-1.patch";
+      url = "https://github.com/MegaGlest/megaglest-source/commit/e09ba53c436279588f769d6ce8852e74d58f8391.patch";
+      hash = "sha256-1ZG6AjnLXW18wwad05kjH7W5rTaP1SDpZ5zLH4nRQt4=";
+    })
+    (fetchpatch {
+      name = "get-rid-of-manual-wxPaintEvent-creation-2.patch";
+      url = "https://sources.debian.org/data/main/m/megaglest/3.13.0-9/debian/patches/fbd0cfb17ed759d24aeb577a602b0d97f7895cc2.patch";
+      hash = "sha256-aMDDboNdH22r7YOiZCEApwz+FpM60anBp82tLwiIH6g=";
+    })
+    (fetchpatch {
+      name = "get-rid-of-manual-wxPaintEvent-creation-3.patch";
+      url = "https://github.com/MegaGlest/megaglest-source/commit/5801b1fafff8ad9618248d4d5d5c751fdf52be2f.patch";
+      hash = "sha256-/RpBoT1JsSFtOrAXphHrPp9DnTbaEN/2h8EZmQ9PIPU=";
+    })
+    (fetchpatch {
+      name = "fix-editor-and-g3dviewer-for-wx-3.1.x.patch";
+      url = "https://github.com/MegaGlest/megaglest-source/commit/789e1cdf371137b729e832e28a5feb6e97a3a243.patch";
+      hash = "sha256-fK7vkHCu6bqVB6I7vMsWMGiczSdxVgo1KqqBNMkEbfM=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper git ];
+  buildInputs = [ curl SDL2 xercesc openal lua libpng libjpeg libvlc wxGTK32
+    glib cppunit fontconfig freetype ftgl glew libogg libvorbis libGLU ];
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
+    "-DBUILD_MEGAGLEST=On"
+    "-DBUILD_MEGAGLEST_MAP_EDITOR=On"
+    "-DBUILD_MEGAGLEST_MODEL_IMPORT_EXPORT_TOOLS=On"
+    "-DBUILD_MEGAGLEST_MODEL_VIEWER=On"
+  ];
+
+  postInstall =  ''
+    for i in $out/bin/*; do
+      wrapProgram $i \
+        --prefix LD_LIBRARY_PATH ":" "${lib-env}/lib" \
+        --prefix PATH ":" "${path-env}/bin"
+    done
+  '';
+
+  meta = with lib; {
+    description = "An entertaining free (freeware and free software) and open source cross-platform 3D real-time strategy (RTS) game";
+    license = licenses.gpl3;
+    homepage = "https://megaglest.org/";
+    maintainers = [ maintainers.matejc ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/meritous/default.nix b/nixpkgs/pkgs/games/meritous/default.nix
new file mode 100644
index 000000000000..c7631f2370db
--- /dev/null
+++ b/nixpkgs/pkgs/games/meritous/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitLab, SDL, SDL_image, SDL_mixer, zlib }:
+
+stdenv.mkDerivation {
+  pname = "meritous";
+  version = "1.4";
+
+  src = fetchFromGitLab {
+    owner = "meritous";
+    repo = "meritous";
+    rev = "314af46d84d2746eec4c30a0f63cbc2e651d5303";
+    sha256 = "1hrwm65isg5nwzydyd8gvgl3p36sbj09rsn228sppr8g5p9sm10x";
+  };
+
+  prePatch = ''
+    substituteInPlace Makefile \
+      --replace "CPPFLAGS +=" "CPPFLAGS += -DSAVES_IN_HOME -DDATADIR=\\\"$out/share/meritous\\\"" \
+      --replace sld-config ${lib.getDev SDL}/bin/sdl-config
+    substituteInPlace src/audio.c \
+      --replace "filename[64]" "filename[256]"
+  '';
+
+  buildInputs = [ SDL SDL_image SDL_mixer zlib ];
+
+  installPhase = ''
+    install -m 555 -D meritous $out/bin/meritous
+    mkdir -p $out/share/meritous
+    cp -r dat/* $out/share/meritous/
+  '';
+
+  hardeningDisable = [ "stackprotector" "fortify" ];
+
+  meta = with lib; {
+    description = "Action-adventure dungeon crawl game";
+    homepage = "http://www.asceai.net/meritous/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.alexvorobiev ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/games/methane/default.nix b/nixpkgs/pkgs/games/methane/default.nix
new file mode 100644
index 000000000000..071e1a64b545
--- /dev/null
+++ b/nixpkgs/pkgs/games/methane/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, fontconfig
+, freealut
+, freeglut
+, gettext
+, libGL
+, libGLU
+, openal
+, quesoglc
+, clanlib
+, libXrender
+, libmikmod
+, alsa-lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "methane";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    repo = "methane";
+    owner = "rombust";
+    rev = "v${version}";
+    sha256 = "sha256-STS2+wfZ8E1jpr0PYQOBQsztxhJU0Dt3IhWBE3sjdWE=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    pkg-config
+  ];
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    fontconfig
+    freealut
+    freeglut
+    libGL
+    libGLU
+    openal
+    quesoglc
+    clanlib
+    libXrender
+    libmikmod
+    alsa-lib
+  ];
+
+  installPhase  = ''
+    runHook preInstall
+    mkdir -p $out/bin/ $out/share/methane/ $out/share/docs/
+    cp methane $out/bin
+    cp -r resources/* $out/share/methane/.
+    cp -r docs/* $out/share/docs/.
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/rombust/methane";
+    description = "A clone of Taito's Bubble Bobble arcade game released for Amiga in 1993 by Apache Software";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ nixinator ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/mindustry/0001-fix-include-path-for-SDL2-on-linux.patch b/nixpkgs/pkgs/games/mindustry/0001-fix-include-path-for-SDL2-on-linux.patch
new file mode 100644
index 000000000000..3df759d63e21
--- /dev/null
+++ b/nixpkgs/pkgs/games/mindustry/0001-fix-include-path-for-SDL2-on-linux.patch
@@ -0,0 +1,33 @@
+From 9dbfa680db6bfd1033772dda753120fe4452e0d9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Milan=20P=C3=A4ssler?= <milan@petabyte.dev>
+Date: Fri, 8 Jan 2021 04:49:14 +0100
+Subject: [PATCH] fix include path for SDL2 on linux
+
+---
+ .../src/arc/backend/sdl/jni/SDL.java            | 8 --------
+ 1 file changed, 8 deletions(-)
+
+diff --git a/backends/backend-sdl/src/arc/backend/sdl/jni/SDL.java b/backends/backend-sdl/src/arc/backend/sdl/jni/SDL.java
+index 62d9286a..2853119d 100644
+--- a/Arc/backends/backend-sdl/src/arc/backend/sdl/jni/SDL.java
++++ b/Arc/backends/backend-sdl/src/arc/backend/sdl/jni/SDL.java
+@@ -8,16 +8,8 @@ import java.nio.*;
+ public class SDL{
+     /*JNI
+ 
+-    #ifdef __APPLE__
+-
+     #include "SDL2/SDL.h"
+ 
+-    #else
+-
+-    #include "SDL.h"
+-
+-    #endif
+-
+     */
+ 
+     static{
+-- 
+2.29.2
+
diff --git a/nixpkgs/pkgs/games/mindustry/default.nix b/nixpkgs/pkgs/games/mindustry/default.nix
new file mode 100644
index 000000000000..2bf239579e4a
--- /dev/null
+++ b/nixpkgs/pkgs/games/mindustry/default.nix
@@ -0,0 +1,251 @@
+{ lib, stdenv, fetchurl
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, fetchFromGitHub
+, gradle
+, jdk
+, perl
+
+# for arc
+, SDL2
+, pkg-config
+, stb
+, ant
+, alsa-lib
+, alsa-plugins
+, glew
+, glew-egl
+
+# for soloud
+, libpulseaudio ? null
+, libjack2 ? null
+
+, nixosTests
+
+
+# Make the build version easily overridable.
+# Server and client build versions must match, and an empty build version means
+# any build is allowed, so this parameter acts as a simple whitelist.
+# Takes the package version and returns the build version.
+, makeBuildVersion ? (v: v)
+, enableClient ? true
+, enableServer ? true
+
+, enableWayland ? false
+}:
+
+let
+  pname = "mindustry";
+  version = "146";
+  buildVersion = makeBuildVersion version;
+
+  selectedGlew = if enableWayland then glew-egl else glew;
+
+  Mindustry = fetchFromGitHub {
+    owner = "Anuken";
+    repo = "Mindustry";
+    rev = "v${version}";
+    hash = "sha256-pJAJjb8rgDL5q2hfuXH2Cyb1Szu4GixeXoLMdnIAlno=";
+  };
+  Arc = fetchFromGitHub {
+    owner = "Anuken";
+    repo = "Arc";
+    rev = "v${version}";
+    hash = "sha256-L+5fshI1oo1lVdTMTBuPzqtEeR2dq1NORP84rZ83rT0=";
+  };
+  soloud = fetchFromGitHub {
+    owner = "Anuken";
+    repo = "soloud";
+    # This is pinned in Arc's arc-core/build.gradle
+    rev = "v0.9";
+    hash = "sha256-6KlqOtA19MxeqZttNyNrMU7pKqzlNiA4rBZKp9ekanc=";
+  };
+  freetypeSource = fetchurl {
+    # This is pinned in Arc's extensions/freetype/build.gradle
+    url = "https://download.savannah.gnu.org/releases/freetype/freetype-2.10.4.tar.gz";
+    hash = "sha256-Xqt5XrsjrHcAHPtot9TVC11sdGkkewsBsslTJp9ljaw=";
+  };
+  glewSource = fetchurl {
+    # This is pinned in Arc's backends/backend-sdl/build.gradle
+    url = "https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0.zip";
+    hash = "sha256-qQRqkTd0OVoJXtzAsKwtgcOqzKYXh7OYOblB6b4U4NQ=";
+  };
+  SDLmingwSource = fetchurl {
+    # This is pinned in Arc's backends/backend-sdl/build.gradle
+    url = "https://www.libsdl.org/release/SDL2-devel-2.0.20-mingw.tar.gz";
+    hash = "sha256-OAlNgqhX1sYjUuXFzex0lIxbTSXFnL0pjW0jNWiXa9E=";
+  };
+
+  patches = [
+    ./0001-fix-include-path-for-SDL2-on-linux.patch
+  ];
+
+  unpackPhase = ''
+    cp -r ${Mindustry} Mindustry
+    cp -r ${Arc} Arc
+    chmod -R u+w -- Mindustry Arc
+    cp ${stb.src}/stb_image.h Arc/arc-core/csrc/
+    cp -r ${soloud} Arc/arc-core/csrc/soloud
+    chmod -R u+w -- Arc
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "Mindustry";
+    desktopName = "Mindustry";
+    exec = "mindustry";
+    icon = "mindustry";
+  };
+
+  cleanupMindustrySrc = ''
+    # Ensure the prebuilt shared objects don't accidentally get shipped
+    rm -r Arc/natives/natives-*/libs/*
+    rm -r Arc/backends/backend-*/libs/*
+
+    # Remove unbuildable iOS stuff
+    sed -i '/^project(":ios"){/,/^}/d' Mindustry/build.gradle
+    sed -i '/robo(vm|VM)/d' Mindustry/build.gradle
+    rm Mindustry/ios/build.gradle
+  '';
+
+  # fake build to pre-download deps into fixed-output derivation
+  deps = stdenv.mkDerivation {
+    pname = "${pname}-deps";
+    inherit version unpackPhase patches;
+    postPatch = cleanupMindustrySrc;
+
+    nativeBuildInputs = [ gradle perl ];
+    # Here we download dependencies for both the server and the client so
+    # we only have to specify one hash for 'deps'. Deps can be garbage
+    # collected after the build, so this is not really an issue.
+    buildPhase = ''
+      pushd Mindustry
+      export GRADLE_USER_HOME=$(mktemp -d)
+      gradle --no-daemon resolveDependencies
+      popd
+    '';
+    # 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
+    '';
+    outputHashMode = "recursive";
+    outputHash = "sha256-hbWLsWorEo+1BBURvrFMXpxvZjJBZ1p7HVlJN5e5JZc=";
+  };
+
+in
+assert lib.assertMsg (enableClient || enableServer)
+  "mindustry: at least one of 'enableClient' and 'enableServer' must be true";
+stdenv.mkDerivation rec {
+  inherit pname version unpackPhase patches;
+
+  postPatch = cleanupMindustrySrc;
+
+  buildInputs = lib.optionals enableClient [
+    SDL2
+    selectedGlew
+    alsa-lib
+  ];
+  nativeBuildInputs = [
+    pkg-config
+    gradle
+    makeWrapper
+    jdk
+  ] ++ lib.optionals enableClient [
+    ant
+    copyDesktopItems
+  ];
+
+  desktopItems = lib.optional enableClient desktopItem;
+
+  buildPhase = with lib; ''
+    export GRADLE_USER_HOME=$(mktemp -d)
+
+    # point to offline repo
+    sed -ie "1ipluginManagement { repositories { maven { url '${deps}' } } }; " Mindustry/settings.gradle
+    sed -ie "s#mavenLocal()#mavenLocal(); maven { url '${deps}' }#g" Mindustry/build.gradle
+    sed -ie "s#mavenCentral()#mavenCentral(); maven { url '${deps}' }#g" Arc/build.gradle
+    sed -ie "s#wget.*freetype.* -O #cp ${freetypeSource} #" Arc/extensions/freetype/build.gradle
+    sed -ie "/curl.*glew/{;s#curl -o #cp ${glewSource} #;s# -L http.*\.zip##;}" Arc/backends/backend-sdl/build.gradle
+    sed -ie "/curl.*sdlmingw/{;s#curl -o #cp ${SDLmingwSource} #;s# -L http.*\.tar.gz##;}" Arc/backends/backend-sdl/build.gradle
+
+    pushd Mindustry
+  '' + optionalString enableClient ''
+
+    pushd ../Arc
+    gradle --offline --no-daemon jnigenBuild -Pbuildversion=${buildVersion}
+    gradle --offline --no-daemon jnigenJarNativesDesktop -Pbuildversion=${buildVersion}
+    glewlib=${lib.getLib selectedGlew}/lib/libGLEW.so
+    sdllib=${lib.getLib SDL2}/lib/libSDL2.so
+    patchelf backends/backend-sdl/libs/linux64/libsdl-arc*.so \
+      --add-needed $glewlib \
+      --add-needed $sdllib
+    # Put the freshly-built libraries where the pre-built libraries used to be:
+    cp arc-core/libs/*/* natives/natives-desktop/libs/
+    cp extensions/freetype/libs/*/* natives/natives-freetype-desktop/libs/
+    popd
+
+    gradle --offline --no-daemon desktop:dist -Pbuildversion=${buildVersion}
+  '' + optionalString enableServer ''
+    gradle --offline --no-daemon server:dist -Pbuildversion=${buildVersion}
+  '';
+
+  installPhase = with lib; let
+    installClient = ''
+      install -Dm644 desktop/build/libs/Mindustry.jar $out/share/mindustry.jar
+      mkdir -p $out/bin
+      makeWrapper ${jdk}/bin/java $out/bin/mindustry \
+        --add-flags "-jar $out/share/mindustry.jar" \
+        --suffix LD_LIBRARY_PATH : ${lib.makeLibraryPath [libpulseaudio alsa-lib libjack2]} \
+        --set ALSA_PLUGIN_DIR ${alsa-plugins}/lib/alsa-lib/'' + optionalString enableWayland '' \
+        --set SDL_VIDEODRIVER wayland \
+        --set SDL_VIDEO_WAYLAND_WMCLASS Mindustry
+      '' + ''
+
+      # Retain runtime depends to prevent them from being cleaned up.
+      # Since a jar is a compressed archive, nix can't figure out that the dependency is actually in there,
+      # and will assume that it's not actually needed.
+      # This can cause issues.
+      # See https://github.com/NixOS/nixpkgs/issues/109798.
+      echo "# Retained runtime dependencies: " >> $out/bin/mindustry
+      for dep in ${SDL2.out} ${alsa-lib.out} ${selectedGlew.out}; do
+        echo "# $dep" >> $out/bin/mindustry
+      done
+
+      install -Dm644 core/assets/icons/icon_64.png $out/share/icons/hicolor/64x64/apps/mindustry.png
+    '';
+    installServer = ''
+      install -Dm644 server/build/libs/server-release.jar $out/share/mindustry-server.jar
+      mkdir -p $out/bin
+      makeWrapper ${jdk}/bin/java $out/bin/mindustry-server \
+        --add-flags "-jar $out/share/mindustry-server.jar"
+    '';
+  in ''
+    runHook preInstall
+  '' + optionalString enableClient installClient
+     + optionalString enableServer installServer
+     + ''
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    nixosTest = nixosTests.mindustry;
+  };
+
+  meta = with lib; {
+    homepage = "https://mindustrygame.github.io/";
+    downloadPage = "https://github.com/Anuken/Mindustry/releases";
+    description = "A sandbox tower defense game";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ chkno fgaz thekostins ];
+    platforms = if enableClient then platforms.x86_64 else platforms.linux;
+    # Hash mismatch on darwin:
+    # https://github.com/NixOS/nixpkgs/pull/105590#issuecomment-737120293
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/minecraft-servers/default.nix b/nixpkgs/pkgs/games/minecraft-servers/default.nix
new file mode 100644
index 000000000000..f3d4aad16698
--- /dev/null
+++ b/nixpkgs/pkgs/games/minecraft-servers/default.nix
@@ -0,0 +1,24 @@
+{ callPackage, lib, javaPackages }:
+let
+  versions = lib.importJSON ./versions.json;
+
+  latestVersion = lib.last (builtins.sort lib.versionOlder (builtins.attrNames versions));
+  escapeVersion = builtins.replaceStrings [ "." ] [ "-" ];
+
+  getJavaVersion = v: (builtins.getAttr "openjdk${toString v}" javaPackages.compiler).headless;
+
+  packages = lib.mapAttrs'
+    (version: value: {
+      name = "vanilla-${escapeVersion version}";
+      value = callPackage ./derivation.nix {
+        inherit (value) version url sha1;
+        jre_headless = getJavaVersion (if value.javaVersion == null then 8 else value.javaVersion); # versions <= 1.6 will default to 8
+      };
+    })
+    versions;
+in
+lib.recurseIntoAttrs (
+  packages // {
+    vanilla = builtins.getAttr "vanilla-${escapeVersion latestVersion}" packages;
+  }
+)
diff --git a/nixpkgs/pkgs/games/minecraft-servers/derivation.nix b/nixpkgs/pkgs/games/minecraft-servers/derivation.nix
new file mode 100644
index 000000000000..0773be6bcfc7
--- /dev/null
+++ b/nixpkgs/pkgs/games/minecraft-servers/derivation.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, nixosTests, jre_headless, version, url, sha1 }:
+stdenv.mkDerivation {
+  pname = "minecraft-server";
+  inherit version;
+
+  src = fetchurl { inherit url sha1; };
+
+  preferLocalBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib/minecraft
+    cp -v $src $out/lib/minecraft/server.jar
+
+    cat > $out/bin/minecraft-server << EOF
+    #!/bin/sh
+    exec ${jre_headless}/bin/java \$@ -jar $out/lib/minecraft/server.jar nogui
+    EOF
+
+    chmod +x $out/bin/minecraft-server
+  '';
+
+  dontUnpack = true;
+
+  passthru = {
+    tests = { inherit (nixosTests) minecraft-server; };
+    updateScript = ./update.py;
+  };
+
+  meta = with lib; {
+    description = "Minecraft Server";
+    homepage = "https://minecraft.net";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ thoughtpolice tomberek costrouc joelkoen ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/minecraft-servers/update.py b/nixpkgs/pkgs/games/minecraft-servers/update.py
new file mode 100755
index 000000000000..f272c8b71a84
--- /dev/null
+++ b/nixpkgs/pkgs/games/minecraft-servers/update.py
@@ -0,0 +1,159 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p python3Packages.requests python3Packages.dataclasses-json
+
+import json
+from dataclasses import dataclass, field
+from datetime import datetime
+from pathlib import Path
+from typing import Any, Dict, List, Optional
+
+import requests
+from dataclasses_json import DataClassJsonMixin, LetterCase, config
+from marshmallow import fields
+
+
+@dataclass
+class Download(DataClassJsonMixin):
+    sha1: str
+    size: int
+    url: str
+
+
+@dataclass
+class Version(DataClassJsonMixin):
+    id: str
+    type: str
+    url: str
+    time: datetime = field(
+        metadata=config(
+            encoder=datetime.isoformat,
+            decoder=datetime.fromisoformat,
+            mm_field=fields.DateTime(format="iso"),
+        )
+    )
+    release_time: datetime = field(
+        metadata=config(
+            encoder=datetime.isoformat,
+            decoder=datetime.fromisoformat,
+            mm_field=fields.DateTime(format="iso"),
+            letter_case=LetterCase.CAMEL,
+        )
+    )
+
+    def get_manifest(self) -> Any:
+        """Return the version's manifest."""
+        response = requests.get(self.url)
+        response.raise_for_status()
+        return response.json()
+
+    def get_downloads(self) -> Dict[str, Download]:
+        """
+        Return all downloadable files from the version's manifest, in Download
+        objects.
+        """
+        return {
+            download_name: Download.from_dict(download_info)
+            for download_name, download_info in self.get_manifest()["downloads"].items()
+        }
+
+    def get_java_version(self) -> Any:
+        """
+        Return the java version specified in a version's manifest, if it is
+        present. Versions <= 1.6 do not specify this.
+        """
+        return self.get_manifest().get("javaVersion", {}).get("majorVersion", None)
+
+    def get_server(self) -> Optional[Download]:
+        """
+        If the version has a server download available, return the Download
+        object for the server download. If the version does not have a server
+        download avilable, return None.
+        """
+        downloads = self.get_downloads()
+        if "server" in downloads:
+            return downloads["server"]
+        return None
+
+
+def get_versions() -> List[Version]:
+    """Return a list of Version objects for all available versions."""
+    response = requests.get(
+        "https://launchermeta.mojang.com/mc/game/version_manifest.json"
+    )
+    response.raise_for_status()
+    data = response.json()
+    return [Version.from_dict(version) for version in data["versions"]]
+
+
+def get_major_release(version_id: str) -> str:
+    """
+    Return the major release for a version. The major release for 1.17 and
+    1.17.1 is 1.17.
+    """
+    if not len(version_id.split(".")) >= 2:
+        raise ValueError(f"version not in expected format: '{version_id}'")
+    return ".".join(version_id.split(".")[:2])
+
+
+def group_major_releases(releases: List[Version]) -> Dict[str, List[Version]]:
+    """
+    Return a dictionary containing each version grouped by each major release.
+    The key "1.17" contains a list with two Version objects, one for "1.17"
+    and another for "1.17.1".
+    """
+    groups: Dict[str, List[Version]] = {}
+    for release in releases:
+        major_release = get_major_release(release.id)
+        if major_release not in groups:
+            groups[major_release] = []
+        groups[major_release].append(release)
+    return groups
+
+
+def get_latest_major_releases(releases: List[Version]) -> Dict[str, Version]:
+    """
+    Return a dictionary containing the latest version for each major release.
+    The latest major release for 1.16 is 1.16.5, so the key "1.16" contains a
+    Version object for 1.16.5.
+    """
+    return {
+        major_release: max(
+            (release for release in releases if get_major_release(release.id) == major_release),
+            key=lambda x: tuple(map(int, x.id.split('.'))),
+        )
+        for major_release in group_major_releases(releases)
+    }
+
+
+def generate() -> Dict[str, Dict[str, str]]:
+    """
+    Return a dictionary containing the latest url, sha1 and version for each major
+    release.
+    """
+    versions = get_versions()
+    releases = list(
+        filter(lambda version: version.type == "release", versions)
+    )  # remove snapshots and betas
+    latest_major_releases = get_latest_major_releases(releases)
+
+    servers = {
+        version: Download.schema().dump(download_info)  # Download -> dict
+        for version, download_info in {
+            version: value.get_server()
+            for version, value in latest_major_releases.items()
+        }.items()
+        if download_info is not None  # versions < 1.2 do not have a server
+    }
+    for server in servers.values():
+        del server["size"]  # don't need it
+
+    for version, server in servers.items():
+        server["version"] = latest_major_releases[version].id
+        server["javaVersion"] = latest_major_releases[version].get_java_version()
+    return servers
+
+
+if __name__ == "__main__":
+    with open(Path(__file__).parent / "versions.json", "w") as file:
+        json.dump(generate(), file, indent=2)
+        file.write("\n")
diff --git a/nixpkgs/pkgs/games/minecraft-servers/versions.json b/nixpkgs/pkgs/games/minecraft-servers/versions.json
new file mode 100644
index 000000000000..142ef4e51c5d
--- /dev/null
+++ b/nixpkgs/pkgs/games/minecraft-servers/versions.json
@@ -0,0 +1,116 @@
+{
+  "1.20": {
+    "url": "https://piston-data.mojang.com/v1/objects/84194a2f286ef7c14ed7ce0090dba59902951553/server.jar",
+    "sha1": "84194a2f286ef7c14ed7ce0090dba59902951553",
+    "version": "1.20.1",
+    "javaVersion": 17
+  },
+  "1.19": {
+    "url": "https://piston-data.mojang.com/v1/objects/8f3112a1049751cc472ec13e397eade5336ca7ae/server.jar",
+    "sha1": "8f3112a1049751cc472ec13e397eade5336ca7ae",
+    "version": "1.19.4",
+    "javaVersion": 17
+  },
+  "1.18": {
+    "url": "https://piston-data.mojang.com/v1/objects/c8f83c5655308435b3dcf03c06d9fe8740a77469/server.jar",
+    "sha1": "c8f83c5655308435b3dcf03c06d9fe8740a77469",
+    "version": "1.18.2",
+    "javaVersion": 17
+  },
+  "1.17": {
+    "url": "https://piston-data.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar",
+    "sha1": "a16d67e5807f57fc4e550299cf20226194497dc2",
+    "version": "1.17.1",
+    "javaVersion": 16
+  },
+  "1.16": {
+    "url": "https://piston-data.mojang.com/v1/objects/1b557e7b033b583cd9f66746b7a9ab1ec1673ced/server.jar",
+    "sha1": "1b557e7b033b583cd9f66746b7a9ab1ec1673ced",
+    "version": "1.16.5",
+    "javaVersion": 8
+  },
+  "1.15": {
+    "url": "https://piston-data.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar",
+    "sha1": "bb2b6b1aefcd70dfd1892149ac3a215f6c636b07",
+    "version": "1.15.2",
+    "javaVersion": 8
+  },
+  "1.14": {
+    "url": "https://piston-data.mojang.com/v1/objects/3dc3d84a581f14691199cf6831b71ed1296a9fdf/server.jar",
+    "sha1": "3dc3d84a581f14691199cf6831b71ed1296a9fdf",
+    "version": "1.14.4",
+    "javaVersion": 8
+  },
+  "1.13": {
+    "url": "https://piston-data.mojang.com/v1/objects/3737db93722a9e39eeada7c27e7aca28b144ffa7/server.jar",
+    "sha1": "3737db93722a9e39eeada7c27e7aca28b144ffa7",
+    "version": "1.13.2",
+    "javaVersion": 8
+  },
+  "1.12": {
+    "url": "https://piston-data.mojang.com/v1/objects/886945bfb2b978778c3a0288fd7fab09d315b25f/server.jar",
+    "sha1": "886945bfb2b978778c3a0288fd7fab09d315b25f",
+    "version": "1.12.2",
+    "javaVersion": 8
+  },
+  "1.11": {
+    "url": "https://piston-data.mojang.com/v1/objects/f00c294a1576e03fddcac777c3cf4c7d404c4ba4/server.jar",
+    "sha1": "f00c294a1576e03fddcac777c3cf4c7d404c4ba4",
+    "version": "1.11.2",
+    "javaVersion": 8
+  },
+  "1.10": {
+    "url": "https://piston-data.mojang.com/v1/objects/3d501b23df53c548254f5e3f66492d178a48db63/server.jar",
+    "sha1": "3d501b23df53c548254f5e3f66492d178a48db63",
+    "version": "1.10.2",
+    "javaVersion": 8
+  },
+  "1.9": {
+    "url": "https://piston-data.mojang.com/v1/objects/edbb7b1758af33d365bf835eb9d13de005b1e274/server.jar",
+    "sha1": "edbb7b1758af33d365bf835eb9d13de005b1e274",
+    "version": "1.9.4",
+    "javaVersion": 8
+  },
+  "1.8": {
+    "url": "https://launcher.mojang.com/v1/objects/b58b2ceb36e01bcd8dbf49c8fb66c55a9f0676cd/server.jar",
+    "sha1": "b58b2ceb36e01bcd8dbf49c8fb66c55a9f0676cd",
+    "version": "1.8.9",
+    "javaVersion": 8
+  },
+  "1.7": {
+    "url": "https://launcher.mojang.com/v1/objects/952438ac4e01b4d115c5fc38f891710c4941df29/server.jar",
+    "sha1": "952438ac4e01b4d115c5fc38f891710c4941df29",
+    "version": "1.7.10",
+    "javaVersion": 8
+  },
+  "1.6": {
+    "url": "https://launcher.mojang.com/v1/objects/050f93c1f3fe9e2052398f7bd6aca10c63d64a87/server.jar",
+    "sha1": "050f93c1f3fe9e2052398f7bd6aca10c63d64a87",
+    "version": "1.6.4",
+    "javaVersion": null
+  },
+  "1.5": {
+    "url": "https://launcher.mojang.com/v1/objects/f9ae3f651319151ce99a0bfad6b34fa16eb6775f/server.jar",
+    "sha1": "f9ae3f651319151ce99a0bfad6b34fa16eb6775f",
+    "version": "1.5.2",
+    "javaVersion": 8
+  },
+  "1.4": {
+    "url": "https://launcher.mojang.com/v1/objects/2f0ec8efddd2f2c674c77be9ddb370b727dec676/server.jar",
+    "sha1": "2f0ec8efddd2f2c674c77be9ddb370b727dec676",
+    "version": "1.4.7",
+    "javaVersion": 8
+  },
+  "1.3": {
+    "url": "https://launcher.mojang.com/v1/objects/3de2ae6c488135596e073a9589842800c9f53bfe/server.jar",
+    "sha1": "3de2ae6c488135596e073a9589842800c9f53bfe",
+    "version": "1.3.2",
+    "javaVersion": 8
+  },
+  "1.2": {
+    "url": "https://launcher.mojang.com/v1/objects/d8321edc9470e56b8ad5c67bbd16beba25843336/server.jar",
+    "sha1": "d8321edc9470e56b8ad5c67bbd16beba25843336",
+    "version": "1.2.5",
+    "javaVersion": 8
+  }
+}
diff --git a/nixpkgs/pkgs/games/minecraft/default.nix b/nixpkgs/pkgs/games/minecraft/default.nix
new file mode 100644
index 000000000000..3009eb0b9a08
--- /dev/null
+++ b/nixpkgs/pkgs/games/minecraft/default.nix
@@ -0,0 +1,160 @@
+{ lib, stdenv
+, fetchurl
+, nixosTests
+, copyDesktopItems
+, makeDesktopItem
+, makeWrapper
+, wrapGAppsHook
+, gobject-introspection
+, jre # old or modded versions of the game may require Java 8 (https://aur.archlinux.org/packages/minecraft-launcher/#pinned-674960)
+, xorg
+, zlib
+, nss
+, nspr
+, fontconfig
+, pango
+, cairo
+, expat
+, alsa-lib
+, cups
+, dbus
+, atk
+, gtk3-x11
+, gtk2-x11
+, gdk-pixbuf
+, glib
+, curl
+, freetype
+, libpulseaudio
+, libuuid
+, systemd
+, flite ? null
+, libXxf86vm ? null
+}:
+let
+  desktopItem = makeDesktopItem {
+    name = "minecraft-launcher";
+    exec = "minecraft-launcher";
+    icon = "minecraft-launcher";
+    comment = "Official launcher for Minecraft, a sandbox-building game";
+    desktopName = "Minecraft Launcher";
+    categories = [ "Game" ];
+  };
+
+  envLibPath = lib.makeLibraryPath [
+    curl
+    libpulseaudio
+    systemd
+    alsa-lib # needed for narrator
+    flite # needed for narrator
+    libXxf86vm # needed only for versions <1.13
+  ];
+
+  libPath = lib.makeLibraryPath ([
+    alsa-lib
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    pango
+    gtk3-x11
+    gtk2-x11
+    nspr
+    nss
+    stdenv.cc.cc
+    zlib
+    libuuid
+  ] ++
+  (with xorg; [
+    libX11
+    libxcb
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libXScrnSaver
+  ]));
+in
+stdenv.mkDerivation rec {
+  pname = "minecraft-launcher";
+
+  version = "2.2.1441";
+
+  src = fetchurl {
+    url = "https://launcher.mojang.com/download/linux/x86_64/minecraft-launcher_${version}.tar.gz";
+    sha256 = "03q579hvxnsh7d00j6lmfh53rixdpf33xb5zlz7659pvb9j5w0cm";
+  };
+
+  icon = fetchurl {
+    url = "https://launcher.mojang.com/download/minecraft-launcher.svg";
+    sha256 = "0w8z21ml79kblv20wh5lz037g130pxkgs8ll9s3bi94zn2pbrhim";
+  };
+
+  nativeBuildInputs = [ makeWrapper wrapGAppsHook copyDesktopItems gobject-introspection ];
+
+  sourceRoot = ".";
+
+  dontWrapGApps = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/opt
+    mv minecraft-launcher $out/opt
+
+    install -D $icon $out/share/icons/hicolor/symbolic/apps/minecraft-launcher.svg
+
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    patchelf \
+      --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
+      --set-rpath '$ORIGIN/'":${libPath}" \
+      $out/opt/minecraft-launcher/minecraft-launcher
+    patchelf \
+      --set-rpath '$ORIGIN/'":${libPath}" \
+      $out/opt/minecraft-launcher/libcef.so
+    patchelf \
+      --set-rpath '$ORIGIN/'":${libPath}" \
+      $out/opt/minecraft-launcher/liblauncher.so
+  '';
+
+  postFixup = ''
+    # Do not create `GPUCache` in current directory
+    makeWrapper $out/opt/minecraft-launcher/minecraft-launcher $out/bin/minecraft-launcher \
+      --prefix LD_LIBRARY_PATH : ${envLibPath} \
+      --prefix PATH : ${lib.makeBinPath [ jre ]} \
+      --set JAVA_HOME ${lib.getBin jre} \
+      --chdir /tmp \
+      "''${gappsWrapperArgs[@]}"
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    description = "Official launcher for Minecraft, a sandbox-building game";
+    homepage = "https://minecraft.net";
+    maintainers = with maintainers; [ cpages ryantm infinisil ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+  };
+
+  passthru = {
+    tests = { inherit (nixosTests) minecraft; };
+    updateScript = ./update.sh;
+  };
+}
diff --git a/nixpkgs/pkgs/games/minecraft/update.sh b/nixpkgs/pkgs/games/minecraft/update.sh
new file mode 100755
index 000000000000..485fb5a560f6
--- /dev/null
+++ b/nixpkgs/pkgs/games/minecraft/update.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq common-updater-scripts
+
+set -eu -o pipefail
+
+version=$(curl -s 'https://launchermeta.mojang.com/v1/products/launcher/6f083b80d5e6fabbc4236f81d0d8f8a350c665a9/linux.json' | jq -r '."launcher-core"[0].version.name')
+update-source-version minecraft "${version}"
diff --git a/nixpkgs/pkgs/games/minesweep-rs/default.nix b/nixpkgs/pkgs/games/minesweep-rs/default.nix
new file mode 100644
index 000000000000..2cc65cd2c667
--- /dev/null
+++ b/nixpkgs/pkgs/games/minesweep-rs/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "minesweep-rs";
+  version = "6.0.35";
+
+  src = fetchFromGitHub {
+    owner = "cpcloud";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IxyryBWU4NULjcQtUXHel533JosAmp0d0w/+Ntl2aT0=";
+  };
+
+  cargoHash = "sha256-BGjxZxT7iypvhusyx6K4yvK1S7j4WlvoSTkb79d/H1s=";
+
+  meta = with lib; {
+    description = "Sweep some mines for fun, and probably not for profit";
+    homepage = "https://github.com/cpcloud/minesweep-rs";
+    license = licenses.asl20;
+    mainProgram = "minesweep";
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/minetest/default.nix b/nixpkgs/pkgs/games/minetest/default.nix
new file mode 100644
index 000000000000..550f088e8af0
--- /dev/null
+++ b/nixpkgs/pkgs/games/minetest/default.nix
@@ -0,0 +1,143 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, irrlichtmt
+, coreutils
+, libpng
+, bzip2
+, curl
+, libogg
+, jsoncpp
+, libjpeg
+, libGLU
+, openal
+, libvorbis
+, sqlite
+, lua5_1
+, luajit
+, freetype
+, gettext
+, doxygen
+, ncurses
+, graphviz
+, xorg
+, gmp
+, libspatialindex
+, leveldb
+, postgresql
+, hiredis
+, libiconv
+, zlib
+, libXrandr
+, libX11
+, ninja
+, prometheus-cpp
+, OpenGL
+, OpenAL ? openal
+, Carbon
+, Cocoa
+, withTouchSupport ? false
+}:
+
+with lib;
+
+let
+  boolToCMake = b: if b then "ON" else "OFF";
+
+  irrlichtmtInput = irrlichtmt.override { inherit withTouchSupport; };
+
+  generic = { version, rev ? version, sha256, dataRev ? version, dataSha256, buildClient ? true, buildServer ? false }: let
+    sources = {
+      src = fetchFromGitHub {
+        owner = "minetest";
+        repo = "minetest";
+        inherit rev sha256;
+      };
+      data = fetchFromGitHub {
+        owner = "minetest";
+        repo = "minetest_game";
+        rev = dataRev;
+        sha256 = dataSha256;
+      };
+    };
+  in stdenv.mkDerivation {
+    pname = "minetest";
+    inherit version;
+
+    src = sources.src;
+
+    cmakeFlags = [
+      "-G Ninja"
+      "-DBUILD_CLIENT=${boolToCMake buildClient}"
+      "-DBUILD_SERVER=${boolToCMake buildServer}"
+      "-DENABLE_GETTEXT=1"
+      "-DENABLE_SPATIAL=1"
+      "-DENABLE_SYSTEM_JSONCPP=1"
+
+      # Remove when https://github.com/NixOS/nixpkgs/issues/144170 is fixed
+      "-DCMAKE_INSTALL_BINDIR=bin"
+      "-DCMAKE_INSTALL_DATADIR=share"
+      "-DCMAKE_INSTALL_DOCDIR=share/doc"
+      "-DCMAKE_INSTALL_DOCDIR=share/doc"
+      "-DCMAKE_INSTALL_MANDIR=share/man"
+      "-DCMAKE_INSTALL_LOCALEDIR=share/locale"
+
+    ] ++ optionals buildServer [
+      "-DENABLE_PROMETHEUS=1"
+    ] ++ optionals withTouchSupport [
+      "-DENABLE_TOUCH=TRUE"
+    ];
+
+    env.NIX_CFLAGS_COMPILE = "-DluaL_reg=luaL_Reg"; # needed since luajit-2.1.0-beta3
+
+    nativeBuildInputs = [ cmake doxygen graphviz ninja ];
+
+    buildInputs = [
+      irrlichtmtInput jsoncpp gettext freetype sqlite curl bzip2 ncurses
+      gmp libspatialindex
+    ] ++ [ (if lib.meta.availableOn stdenv.hostPlatform luajit then luajit else lua5_1) ] ++ [
+    ] ++ optionals stdenv.isDarwin [
+      libiconv OpenGL OpenAL Carbon Cocoa
+    ] ++ optionals buildClient [
+      libpng libjpeg libGLU openal libogg libvorbis xorg.libX11
+    ] ++ optionals buildServer [
+      leveldb postgresql hiredis prometheus-cpp
+    ];
+
+    postPatch = ''
+      substituteInPlace src/filesys.cpp --replace "/bin/rm" "${coreutils}/bin/rm"
+    '' + lib.optionalString stdenv.isDarwin ''
+      sed -i '/pagezero_size/d;/fixup_bundle/d' src/CMakeLists.txt
+    '';
+
+    postInstall = lib.optionalString stdenv.isLinux ''
+      mkdir -pv $out/share/minetest/games/minetest_game/
+      cp -rv ${sources.data}/* $out/share/minetest/games/minetest_game/
+      patchShebangs $out
+    '' + lib.optionalString stdenv.isDarwin ''
+      mkdir -p $out/Applications
+      mv $out/minetest.app $out/Applications
+    '';
+
+    meta = with lib; {
+      homepage = "http://minetest.net/";
+      description = "Infinite-world block sandbox game";
+      license = licenses.lgpl21Plus;
+      platforms = platforms.linux ++ platforms.darwin;
+      maintainers = with maintainers; [ pyrolagus fpletz fgaz ];
+    };
+  };
+
+  v5 = {
+    version = "5.7.0";
+    sha256 = "sha256-9AL6gTmy05yTeYfCq3EMK4gqpBWdHwvJ5Flpzj8hFAE=";
+    dataSha256 = "sha256-wWgeO8513N5jQdWvZrq357fPpAU5ik06mgZraWCQawo=";
+  };
+
+  mkClient = version: generic (version // { buildClient = true; buildServer = false; });
+  mkServer = version: generic (version // { buildClient = false; buildServer = true; });
+in {
+  minetestclient_5 = mkClient v5;
+  minetestserver_5 = mkServer v5;
+}
diff --git a/nixpkgs/pkgs/games/mnemosyne/default.nix b/nixpkgs/pkgs/games/mnemosyne/default.nix
new file mode 100644
index 000000000000..33392d6ca05d
--- /dev/null
+++ b/nixpkgs/pkgs/games/mnemosyne/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, stdenv
+, python
+, fetchurl
+, anki
+}:
+
+python.pkgs.buildPythonApplication rec {
+  pname = "mnemosyne";
+  version = "2.7.2";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/project/mnemosyne-proj/mnemosyne/mnemosyne-${version}/Mnemosyne-${version}.tar.gz";
+    sha256 = "09yp9zc00xrc9dmjbsscnkb3hsv3yj46sxikc0r6s9cbghn3nypy";
+  };
+
+  nativeBuildInputs = with python.pkgs; [ pyqtwebengine.wrapQtAppsHook ];
+
+  buildInputs = [ anki ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    cheroot
+    cherrypy
+    googletrans
+    gtts
+    matplotlib
+    pyopengl
+    pyqt5
+    pyqtwebengine
+    webob
+  ];
+
+  prePatch = ''
+    substituteInPlace setup.py \
+      --replace '("", ["/usr/local/bin/mplayer"])' ""
+  '';
+
+  # No tests/ directory in tarball
+  doCheck = false;
+
+  postInstall = ''
+    mkdir -p $out/share/applications
+    mv mnemosyne.desktop $out/share/applications
+  '';
+
+  dontWrapQtApps = true;
+
+  makeWrapperArgs = [
+    "\${qtWrapperArgs[@]}"
+  ];
+
+  meta = {
+    homepage = "https://mnemosyne-proj.org/";
+    description = "Spaced-repetition software";
+    longDescription = ''
+      The Mnemosyne Project has two aspects:
+
+        * It's a free flash-card tool which optimizes your learning process.
+        * It's a research project into the nature of long-term memory.
+
+      We strive to provide a clear, uncluttered piece of software, easy to use
+      and to understand for newbies, but still infinitely customisable through
+      plugins and scripts for power users.
+
+      ## Efficient learning
+
+      Mnemosyne uses a sophisticated algorithm to schedule the best time for
+      a card to come up for review. Difficult cards that you tend to forget
+      quickly will be scheduled more often, while Mnemosyne won't waste your
+      time on things you remember well.
+
+      ## Memory research
+
+      If you want, anonymous statistics on your learning process can be
+      uploaded to a central server for analysis. This data will be valuable to
+      study the behaviour of our memory over a very long time period. The
+      results will be used to improve the scheduling algorithms behind the
+      software even further.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/games/moon-buggy/default.nix b/nixpkgs/pkgs/games/moon-buggy/default.nix
new file mode 100644
index 000000000000..12eb6b24a806
--- /dev/null
+++ b/nixpkgs/pkgs/games/moon-buggy/default.nix
@@ -0,0 +1,23 @@
+{lib, stdenv, fetchurl, ncurses}:
+
+stdenv.mkDerivation rec {
+  pname = "moon-buggy";
+  version = "1.0.51";
+
+  buildInputs = [
+    ncurses
+  ];
+
+  src = fetchurl {
+    url = "http://m.seehuhn.de/programs/moon-buggy-${version}.tar.gz";
+    sha256 = "0gyjwlpx0sd728dwwi7pwks4zfdy9rm1w1xbhwg6zip4r9nc2b9m";
+  };
+
+  meta = {
+    description = "A simple character graphics game where you drive some kind of car across the moon's surface";
+    license = lib.licenses.gpl2;
+    maintainers = [lib.maintainers.rybern];
+    platforms = lib.platforms.linux;
+    homepage = "https://www.seehuhn.de/pages/moon-buggy";
+  };
+}
diff --git a/nixpkgs/pkgs/games/mrrescue/default.nix b/nixpkgs/pkgs/games/mrrescue/default.nix
new file mode 100644
index 000000000000..a020a6b34f1b
--- /dev/null
+++ b/nixpkgs/pkgs/games/mrrescue/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, love, lua, makeWrapper, makeDesktopItem }:
+
+let
+  pname = "mrrescue";
+  version = "1.02d";
+
+  icon = fetchurl {
+    url = "http://tangramgames.dk/img/thumb/mrrescue.png";
+    sha256 = "1y5ahf0m01i1ch03axhvp2kqc6lc1yvh59zgvgxw4w7y3jryw20k";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "mrrescue";
+    exec = pname;
+    icon = icon;
+    comment = "Arcade-style fire fighting game";
+    desktopName = "Mr. Rescue";
+    genericName = "mrrescue";
+    categories = [ "Game" ];
+  };
+
+in
+
+stdenv.mkDerivation {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/SimonLarsen/${pname}/releases/download/v${version}/${pname}-${version}.love";
+    sha256 = "0kzahxrgpb4vsk9yavy7f8nc34d62d1jqjrpsxslmy9ywax4yfpi";
+  };
+
+  nativeBuildInputs = [ lua love makeWrapper ];
+
+  dontUnpack = true;
+
+  installPhase =
+  ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/games/lovegames
+
+    cp -v $src $out/share/games/lovegames/${pname}.love
+
+    makeWrapper ${love}/bin/love $out/bin/${pname} --add-flags $out/share/games/lovegames/${pname}.love
+
+    chmod +x $out/bin/${pname}
+    mkdir -p $out/share/applications
+    ln -s ${desktopItem}/share/applications/* $out/share/applications/
+  '';
+
+  meta = with lib; {
+    description = "Arcade-style fire fighting game";
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    license = licenses.zlib;
+    downloadPage = "http://tangramgames.dk/games/mrrescue";
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/mudlet/default.nix b/nixpkgs/pkgs/games/mudlet/default.nix
new file mode 100644
index 000000000000..52990a2d5eab
--- /dev/null
+++ b/nixpkgs/pkgs/games/mudlet/default.nix
@@ -0,0 +1,134 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, git
+, pkg-config
+, qttools
+, which
+, wrapQtAppsHook
+, boost
+, hunspell
+, libGLU
+, libsForQt5
+, libsecret
+, libzip
+, lua
+, pcre
+, pugixml
+, qtbase
+, qtmultimedia
+, discord-rpc
+, yajl
+}:
+
+let
+  overrideLua =
+    let
+      packageOverrides = self: super: {
+        # luasql-sqlite3 master branch broke compatibility with lua 5.1. Pin to
+        # an earlier commit.
+        # https://github.com/lunarmodules/luasql/issues/147
+        luasql-sqlite3 = super.luaLib.overrideLuarocks super.luasql-sqlite3
+          (drv: {
+            version = "2.6.0-1-custom";
+            src = fetchFromGitHub {
+              owner = "lunarmodules";
+              repo = "luasql";
+              rev = "8c58fd6ee32faf750daf6e99af015a31402578d1";
+              hash = "sha256-XlTB5O81yWCrx56m0cXQp7EFzeOyfNeqGbuiYqMrTUk=";
+            };
+          });
+      };
+    in
+    lua.override { inherit packageOverrides; };
+
+  luaEnv = overrideLua.withPackages (ps: with ps; [
+    luazip
+    luafilesystem
+    lrexlib-pcre
+    luasql-sqlite3
+    lua-yajl
+    luautf8
+  ]);
+in
+stdenv.mkDerivation rec {
+  pname = "mudlet";
+  version = "4.17.2";
+
+  src = fetchFromGitHub {
+    owner = "Mudlet";
+    repo = "Mudlet";
+    rev = "Mudlet-${version}";
+    fetchSubmodules = true;
+    hash = "sha256-K75frptePKfHeGQNXaX4lKsLwO6Rs6AAka6hvP8MA+k=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    git
+    pkg-config
+    qttools
+    which
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    boost
+    hunspell
+    libGLU
+    libsForQt5.qtkeychain
+    libsecret
+    libzip
+    luaEnv
+    pcre
+    pugixml
+    qtbase
+    qtmultimedia
+    yajl
+    discord-rpc
+  ];
+
+  cmakeFlags = [
+    # RPATH of binary /nix/store/.../bin/... contains a forbidden reference to /build/
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+
+  WITH_FONTS = "NO";
+  WITH_UPDATER = "NO";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -pv $out/lib
+    cp 3rdparty/edbee-lib/edbee-lib/qslog/lib/libQsLog.so $out/lib
+    mkdir -pv $out/bin
+    cp src/mudlet $out
+    mkdir -pv $out/share/mudlet
+    cp -r ../src/mudlet-lua/lua $out/share/mudlet/
+
+    mkdir -pv $out/share/applications
+    cp ../mudlet.desktop $out/share/applications/
+
+    mkdir -pv $out/share/pixmaps
+    cp -r ../mudlet.png $out/share/pixmaps/
+
+    cp -r ../translations $out/share/
+
+    makeQtWrapper $out/mudlet $out/bin/mudlet \
+      --set LUA_CPATH "${luaEnv}/lib/lua/${lua.luaversion}/?.so" \
+      --prefix LUA_PATH : "$NIX_LUA_PATH" \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libsForQt5.qtkeychain discord-rpc ]}" \
+      --chdir "$out";
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Crossplatform mud client";
+    homepage = "https://www.mudlet.org/";
+    maintainers = with maintainers; [ wyvie pstn cpu ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/n2048/default.nix b/nixpkgs/pkgs/games/n2048/default.nix
new file mode 100644
index 000000000000..ec3a4e2bbeec
--- /dev/null
+++ b/nixpkgs/pkgs/games/n2048/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "n2048";
+  version = "0.1";
+  src = fetchurl {
+    url = "http://www.dettus.net/n2048/n2048_v${version}.tar.gz";
+    sha256 = "184z2rr0rnj4p740qb4mzqr6kgd76ynb5gw9bj8hrfshcxdcg1kk";
+  };
+  buildInputs = [
+    ncurses
+  ];
+  makeFlags = [
+    "DESTDIR=$(out)"
+  ];
+  preInstall = ''
+    mkdir -p "$out"/{share/man,bin}
+  '';
+  meta = with lib; {
+    description = "Console implementation of 2048 game";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    homepage = "http://www.dettus.net/n2048/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/naev/default.nix b/nixpkgs/pkgs/games/naev/default.nix
new file mode 100644
index 000000000000..192898295257
--- /dev/null
+++ b/nixpkgs/pkgs/games/naev/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, SDL2
+, SDL2_image
+, enet
+, fetchFromGitHub
+, freetype
+, glpk
+, intltool
+, libpng
+, libunibreak
+, libvorbis
+, libwebp
+, libxml2
+, luajit
+, meson
+, ninja
+, openal
+, openblas
+, pcre2
+, physfs
+, pkg-config
+, python3
+, stdenv
+, suitesparse
+}:
+
+stdenv.mkDerivation rec {
+  pname = "naev";
+  version = "0.10.6";
+
+  src = fetchFromGitHub {
+    owner = "naev";
+    repo = "naev";
+    rev = "v${version}";
+    sha256 = "sha256-nUQhpKl1aIsoJZtQGyHuwPhRBeb7nSs6+MfmTtX17mY=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    enet
+    freetype
+    glpk
+    libpng
+    libunibreak
+    libvorbis
+    libwebp
+    libxml2
+    luajit
+    openal
+    openblas
+    pcre2
+    physfs
+    suitesparse
+  ];
+
+  nativeBuildInputs = [
+    (python3.withPackages (ps: with ps; [ pyyaml mutagen ]))
+    meson
+    ninja
+    pkg-config
+    intltool
+  ];
+
+  mesonFlags = [
+    "-Ddocs_c=disabled"
+    "-Ddocs_lua=disabled"
+    "-Dluajit=enabled"
+  ];
+
+  postPatch = ''
+    patchShebangs --build dat/outfits/bioship/generate.py utils/build/*.py utils/*.py
+  '';
+
+  meta = {
+    description = "2D action/rpg space game";
+    homepage = "http://www.naev.org";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ ralismark ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/nanosaur/default.nix b/nixpkgs/pkgs/games/nanosaur/default.nix
new file mode 100644
index 000000000000..4ec59b726ee3
--- /dev/null
+++ b/nixpkgs/pkgs/games/nanosaur/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, SDL2, cmake, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "nanosaur";
+  version = "unstable-2021-12-03";
+
+  src = fetchFromGitHub {
+    owner = "jorio";
+    repo = pname;
+    rev = "b567a3e6d7fd1cbc43800cfaa1bd82f31c6d9fae";
+    sha256 = "sha256-P/o6uSwUV6O8u8XNXN9YyA8XlgEUkqGj3SC+oD2/GKQ=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+  buildInputs = [
+    SDL2
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/Nanosaur"
+    mv Data ReadMe.txt "$out/share/Nanosaur/"
+    install -Dm755 {.,$out/bin}/Nanosaur
+    wrapProgram $out/bin/Nanosaur --chdir "$out/share/Nanosaur"
+    install -Dm644 $src/packaging/nanosaur.desktop $out/share/applications/nanosaur.desktop
+    install -Dm644 $src/packaging/nanosaur-desktopicon.png $out/share/pixmaps/nanosaur-desktopicon.png
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A port of Nanosaur, a 1998 Macintosh game by Pangea Software, for modern operating systems";
+    longDescription = ''
+      Nanosaur is a 1998 Macintosh game by Pangea Software.
+      In it, you’re a cybernetic dinosaur from the future who’s sent back in time 20 minutes before a giant asteroid hits the Earth.
+      And you get to shoot at T-Rexes with nukes.
+    '';
+    homepage = "https://github.com/jorio/Nanosaur";
+    license = licenses.cc-by-sa-40;
+    maintainers = with maintainers; [ lux ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/nanosaur2/default.nix b/nixpkgs/pkgs/games/nanosaur2/default.nix
new file mode 100644
index 000000000000..7ab77623e653
--- /dev/null
+++ b/nixpkgs/pkgs/games/nanosaur2/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, SDL2, cmake, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "nanosaur2";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jorio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UY+fyn8BA/HfCd2LCj5cfGmQACKUICH6CDCW4q6YDkg=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+  buildInputs = [
+    SDL2
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/Nanosaur2"
+    mv Data ReadMe.txt "$out/share/Nanosaur2/"
+    install -Dm755 {.,$out/bin}/Nanosaur2
+    wrapProgram $out/bin/Nanosaur2 --chdir "$out/share/Nanosaur2"
+    install -Dm644 $src/packaging/nanosaur2.desktop $out/share/applications/nanosaur2.desktop
+    install -Dm644 $src/packaging/nanosaur2-desktopicon.png $out/share/pixmaps/nanosaur2-desktopicon.png
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A port of Nanosaur2, a 2004 Macintosh game by Pangea Software, for modern operating systems";
+    longDescription = ''
+      Nanosaur is a 2004 Macintosh game by Pangea Software.
+
+      Is a continuation of the original Nanosaur storyline, only this time you get to fly a pterodactyl who’s loaded with hi-tech weaponry.
+    '';
+    homepage = "https://github.com/jorio/Nanosaur2";
+    license = licenses.cc-by-sa-40;
+    maintainers = with maintainers; [ lux ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/nethack/default.nix b/nixpkgs/pkgs/games/nethack/default.nix
new file mode 100644
index 000000000000..46e4dc9ca20b
--- /dev/null
+++ b/nixpkgs/pkgs/games/nethack/default.nix
@@ -0,0 +1,154 @@
+{ stdenv, lib, fetchurl, coreutils, ncurses, gzip, flex, bison
+, less
+, buildPackages
+, x11Mode ? false, qtMode ? false, libXaw, libXext, libXpm, bdftopcf, mkfontdir, pkg-config, qt5
+}:
+
+let
+  platform =
+    if stdenv.hostPlatform.isUnix then "unix"
+    else throw "Unknown platform for NetHack: ${stdenv.hostPlatform.system}";
+  unixHint =
+    if x11Mode then "linux-x11"
+    else if qtMode then "linux-qt4"
+    else if stdenv.hostPlatform.isLinux  then "linux"
+    else if stdenv.hostPlatform.isDarwin then "macosx10.10"
+    # We probably want something different for Darwin
+    else "unix";
+  userDir = "~/.config/nethack";
+  binPath = lib.makeBinPath [ coreutils less ];
+
+in stdenv.mkDerivation rec {
+  version = "3.6.7";
+  pname = if x11Mode then "nethack-x11"
+         else if qtMode then "nethack-qt"
+         else "nethack";
+
+  src = fetchurl {
+    url = "https://nethack.org/download/${version}/nethack-${lib.replaceStrings ["."] [""] version}-src.tgz";
+    sha256 = "sha256-mM9n323r+WaKYXRaqEwJvKs2Ll0z9blE7FFV1E0qrLI=";
+  };
+
+  buildInputs = [ ncurses ]
+                ++ lib.optionals x11Mode [ libXaw libXext libXpm ]
+                ++ lib.optionals qtMode [ gzip qt5.qtbase.bin qt5.qtmultimedia.bin ];
+
+  nativeBuildInputs = [ flex bison ]
+                      ++ lib.optionals x11Mode [ mkfontdir bdftopcf ]
+                      ++ lib.optionals qtMode [
+                           pkg-config mkfontdir qt5.qtbase.dev
+                           qt5.qtmultimedia.dev qt5.wrapQtAppsHook
+                           bdftopcf
+                         ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    sed -e '/^ *cd /d' -i sys/unix/nethack.sh
+    sed \
+      -e 's/^YACC *=.*/YACC = bison -y/' \
+      -e 's/^LEX *=.*/LEX = flex/' \
+      -i sys/unix/Makefile.utl
+    sed \
+      -e 's,^WINQT4LIB =.*,WINQT4LIB = `pkg-config Qt5Gui --libs` \\\
+            `pkg-config Qt5Widgets --libs` \\\
+            `pkg-config Qt5Multimedia --libs`,' \
+      -i sys/unix/Makefile.src
+    sed \
+      -e 's,^CFLAGS=-g,CFLAGS=,' \
+      -e 's,/bin/gzip,${gzip}/bin/gzip,g' \
+      -e 's,^WINTTYLIB=.*,WINTTYLIB=-lncurses,' \
+      -i sys/unix/hints/linux
+    sed \
+      -e 's,^CC=.*$,CC=${stdenv.cc.targetPrefix}cc,' \
+      -e 's,^HACKDIR=.*$,HACKDIR=\$(PREFIX)/games/lib/\$(GAME)dir,' \
+      -e 's,^SHELLDIR=.*$,SHELLDIR=\$(PREFIX)/games,' \
+      -e 's,^CFLAGS=-g,CFLAGS=,' \
+      -i sys/unix/hints/macosx10.10
+    sed -e '/define CHDIR/d' -i include/config.h
+    ${lib.optionalString qtMode ''
+    sed \
+      -e 's,^QTDIR *=.*,QTDIR=${qt5.qtbase.dev},' \
+      -e 's,CFLAGS.*QtGui.*,CFLAGS += `pkg-config Qt5Gui --cflags`,' \
+      -e 's,CFLAGS+=-DCOMPRESS.*,CFLAGS+=-DCOMPRESS=\\"${gzip}/bin/gzip\\" \\\
+        -DCOMPRESS_EXTENSION=\\".gz\\",' \
+      -e 's,moc-qt4,moc,' \
+      -i sys/unix/hints/linux-qt4
+    ''}
+    ${lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform)
+    # If we're cross-compiling, replace the paths to the data generation tools
+    # with the ones from the build platform's nethack package, since we can't
+    # run the ones we've built here.
+    ''
+    ${buildPackages.perl}/bin/perl -p \
+      -e 's,[a-z./]+/(makedefs|dgn_comp|lev_comp|dlb)(?!\.),${buildPackages.nethack}/libexec/nethack/\1,g' \
+      -i sys/unix/Makefile.*
+    ''}
+    sed -i -e '/rm -f $(MAKEDEFS)/d' sys/unix/Makefile.src
+    # Fix building on darwin where otherwise __has_attribute fails with an empty parameter
+    sed -e 's/define __warn_unused_result__ .*/define __warn_unused_result__ __unused__/' -i include/tradstdc.h
+    sed -e 's/define warn_unused_result .*/define warn_unused_result __unused__/' -i include/tradstdc.h
+  '';
+
+  configurePhase = ''
+    pushd sys/${platform}
+    ${lib.optionalString (platform == "unix") ''
+      sh setup.sh hints/${unixHint}
+    ''}
+    popd
+  '';
+
+  enableParallelBuilding = true;
+
+  preFixup = lib.optionalString qtMode ''
+    wrapQtApp "$out/games/nethack"
+  '';
+
+  postInstall = ''
+    mkdir -p $out/games/lib/nethackuserdir
+    for i in xlogfile logfile perm record save; do
+      mv $out/games/lib/nethackdir/$i $out/games/lib/nethackuserdir
+    done
+
+    mkdir -p $out/bin
+    cat <<EOF >$out/bin/nethack
+    #! ${stdenv.shell} -e
+    PATH=${binPath}:\$PATH
+
+    if [ ! -d ${userDir} ]; then
+      mkdir -p ${userDir}
+      cp -r $out/games/lib/nethackuserdir/* ${userDir}
+      chmod -R +w ${userDir}
+    fi
+
+    RUNDIR=\$(mktemp -d)
+
+    cleanup() {
+      rm -rf \$RUNDIR
+    }
+    trap cleanup EXIT
+
+    cd \$RUNDIR
+    for i in ${userDir}/*; do
+      ln -s \$i \$(basename \$i)
+    done
+    for i in $out/games/lib/nethackdir/*; do
+      ln -s \$i \$(basename \$i)
+    done
+    $out/games/nethack
+    EOF
+    chmod +x $out/bin/nethack
+    ${lib.optionalString x11Mode "mv $out/bin/nethack $out/bin/nethack-x11"}
+    ${lib.optionalString qtMode "mv $out/bin/nethack $out/bin/nethack-qt"}
+    install -Dm 555 util/{makedefs,dgn_comp,lev_comp} -t $out/libexec/nethack/
+    ${lib.optionalString (!(x11Mode || qtMode)) "install -Dm 555 util/dlb -t $out/libexec/nethack/"}
+  '';
+
+  meta = with lib; {
+    description = "Rogue-like game";
+    homepage = "http://nethack.org/";
+    license = "nethack";
+    platforms = if x11Mode then platforms.linux else platforms.unix;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/netris/default.nix b/nixpkgs/pkgs/games/netris/default.nix
new file mode 100644
index 000000000000..ff898128ca06
--- /dev/null
+++ b/nixpkgs/pkgs/games/netris/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation {
+  pname = "netris";
+  version = "0.52";
+
+  src = fetchFromGitHub {
+    owner = "naclander";
+    repo = "netris";
+    rev = "6773c9b2d39a70481a5d6eb5368e9ced6229ad2b";
+    sha256 = "0gmxbpn50pnffidwjchkzph9rh2jm4wfq7hj8msp5vhdq5h0z9hm";
+  };
+
+  buildInputs = [
+    ncurses
+  ];
+
+  configureScript = "./Configure";
+  dontAddPrefix = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./netris $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A free networked version of T*tris";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ patryk27 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/neverball/default.nix b/nixpkgs/pkgs/games/neverball/default.nix
new file mode 100644
index 000000000000..5e8e3f41c784
--- /dev/null
+++ b/nixpkgs/pkgs/games/neverball/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, fetchpatch, SDL2, libGL, libpng, libjpeg, SDL2_ttf, libvorbis, gettext
+, physfs }:
+
+stdenv.mkDerivation rec {
+  pname = "neverball";
+  version = "1.6.0";
+  src = fetchurl {
+    url = "https://neverball.org/neverball-${version}.tar.gz";
+    sha256 = "184gm36c6p6vaa6gwrfzmfh86klhnb03pl40ahsjsvprlk667zkk";
+  };
+  patches = [
+    # Pull upstream fix for -fno-common toolchains
+    #   https://github.com/Neverball/neverball/pull/198
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/Neverball/neverball/commit/a42492b8db06934c7a794630db92e3ff6ebaadaa.patch";
+      sha256 = "0sqyxfwpl4xxra8iz87j5rxzwani16xra2xl4l5z61shvq30308h";
+    })
+  ];
+
+  buildInputs = [ libpng SDL2 libGL libjpeg SDL2_ttf libvorbis gettext physfs ];
+
+  dontPatchELF = true;
+
+  postPatch = ''
+    sed -i -e 's@\./data@'$out/share/neverball/data@ share/base_config.h Makefile
+    sed -i -e 's@\./locale@'$out/share/neverball/locale@ share/base_config.h Makefile
+    sed -i -e 's@-lvorbisfile@-lvorbisfile -lX11 -lgcc_s@' Makefile
+  '';
+
+  # The map generation code requires a writable HOME
+  preConfigure = "export HOME=$TMPDIR";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/neverball
+    cp -R data locale $out/share/neverball
+    cp neverball $out/bin
+    cp neverputt $out/bin
+    cp mapc $out/bin
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "https://neverball.org/";
+    description = "Tilt the floor to roll a ball";
+    license = "GPL";
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/newtonwars/default.nix b/nixpkgs/pkgs/games/newtonwars/default.nix
new file mode 100644
index 000000000000..0be3d9bf7a0e
--- /dev/null
+++ b/nixpkgs/pkgs/games/newtonwars/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, freeglut, libGLU, libGL }:
+
+stdenv.mkDerivation {
+  pname = "newtonwars";
+  version = "20150609";
+
+  src = fetchFromGitHub {
+    owner = "Draradech";
+    repo = "NewtonWars";
+    rev = "98bb99a1797fd0073e0fd25ef9218468d3a9f7cb";
+    sha256 = "0g63fwfcdxxlnqlagj1fb8ngm385gmv8f7p8b4r1z5cny2znxdvs";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ freeglut libGL libGLU ];
+
+  patchPhase = ''
+    sed -i "s;font24.raw;$out/share/font24.raw;g" display.c
+  '';
+
+  buildPhase = "sh build-linux.sh";
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share
+    cp nw $out/bin
+    cp font24.raw $out/share
+
+    wrapProgram $out/bin/nw \
+      --prefix LD_LIBRARY_PATH ":" ${freeglut}/lib \
+      --prefix LD_LIBRARY_PATH ":" ${libGLU}/lib \
+      --prefix LD_LIBRARY_PATH ":" ${libGL}/lib
+  '';
+
+  meta = with lib; {
+    description = "A space battle game with gravity as the main theme";
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/games/nexuiz/default.nix b/nixpkgs/pkgs/games/nexuiz/default.nix
new file mode 100644
index 000000000000..fe3081109e9b
--- /dev/null
+++ b/nixpkgs/pkgs/games/nexuiz/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchurl
+, # required for both
+  unzip, zlib, curl, libjpeg, libpng, libvorbis, libtheora
+, libogg, libmodplug
+, # glx
+  libX11, libGLU, libGL, libXpm, libXext, libXxf86vm, libXxf86dga, alsa-lib
+, # sdl
+  SDL
+}:
+
+let
+  version = "2.5.2";
+
+  version_short = lib.replaceStrings [ "." ] [ "" ] version;
+in stdenv.mkDerivation {
+  pname = "nexuiz";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/nexuiz/nexuiz-${version_short}.zip";
+    sha256 = "0010jrxc68qqinkvdh1qn2b8z3sa5v1kcd8d1m4llp3pr6y7xqm5";
+  };
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [
+    # glx
+    libX11 libGLU libGL libXpm libXext libXxf86vm libXxf86dga alsa-lib
+    # sdl
+    SDL
+  ];
+
+  postUnpack = ''
+    cd Nexuiz/sources/
+    unzip enginesource*.zip
+    cd ../../
+  '';
+
+  NIX_LDFLAGS = ''
+    -rpath ${zlib.out}/lib
+    -rpath ${curl.out}/lib
+    -rpath ${libjpeg.out}/lib
+    -rpath ${libpng.out}/lib
+    -rpath ${libvorbis.out}/lib
+    -rpath ${libtheora.out}/lib
+    -rpath ${libogg.out}/lib
+    -rpath ${libmodplug.out}/lib
+  '';
+
+  buildPhase = ''
+    cd sources/darkplaces/
+    DP_FS_BASEDIR="$out/share/nexuiz"
+    make DP_FS_BASEDIR=$DP_FS_BASEDIR cl-release
+    make DP_FS_BASEDIR=$DP_FS_BASEDIR sdl-release
+    make DP_FS_BASEDIR=$DP_FS_BASEDIR sv-release
+    cd ../../
+  '';
+
+  installPhase = ''
+    mkdir -pv "$out/bin/"
+    cp -v sources/darkplaces/darkplaces-glx "$out/bin/nexuiz-glx"
+    cp -v sources/darkplaces/darkplaces-sdl "$out/bin/nexuiz-sdl"
+    cp -v sources/darkplaces/darkplaces-dedicated "$out/bin/nexuiz-dedicated"
+    mkdir -pv "$out/share/nexuiz/"
+    cp -rv data/ "$out/share/nexuiz/"
+    ln -s "$out/bin/nexuiz-sdl" "$out/bin/nexuiz"
+  '';
+
+  dontPatchELF = true;
+
+  meta = {
+    description = "A free fast-paced first-person shooter";
+    homepage = "http://www.alientrap.org/games/nexuiz";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/nile/default.nix b/nixpkgs/pkgs/games/nile/default.nix
new file mode 100644
index 000000000000..beb444ae11ec
--- /dev/null
+++ b/nixpkgs/pkgs/games/nile/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, writeScript
+, buildPythonApplication
+, fetchFromGitHub
+, pythonOlder
+, setuptools
+, requests
+, protobuf
+, pycryptodome
+, zstandard
+, json5
+, platformdirs
+, cacert
+}:
+
+buildPythonApplication rec {
+  pname = "nile";
+  version = "1.0.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "imLinguin";
+    repo = "nile";
+    rev = "f5f3b96f6483c59cfc646afbda6e97cb0bd94778";
+    hash = "sha256-HibY3U9/MibEDwHY+YiErW/pz6qwtps8wwjhznTISgA=";
+  };
+
+  disabled = pythonOlder "3.8";
+
+  propagatedBuildInputs = [
+    setuptools
+    requests
+    protobuf
+    pycryptodome
+    zstandard
+    json5
+    platformdirs
+  ];
+
+  pyprojectAppendix = ''
+    [tool.setuptools.packages.find]
+    include = ["nile*"]
+  '';
+
+  postPatch = ''
+    echo "$pyprojectAppendix" >> pyproject.toml
+  '';
+
+  pythonImportsCheck = [ "nile" ];
+
+  meta = with lib; {
+    description = "Unofficial Amazon Games client";
+    homepage = "https://github.com/imLinguin/nile";
+    license = with licenses; [ gpl3 ];
+    maintainers = with maintainers; [ aidalgol ];
+  };
+
+  # Upstream does not create git tags when bumping the version, so we have to
+  # extract it from the source code on the main branch.
+  passthru.updateScript = writeScript "gogdl-update-script" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl gnused jq common-updater-scripts
+    set -eou pipefail;
+
+    owner=imLinguin
+    repo=nile
+    path='nile/__init__.py'
+
+    version=$(
+      curl --cacert "${cacert}/etc/ssl/certs/ca-bundle.crt" \
+      https://raw.githubusercontent.com/$owner/$repo/main/$path |
+      sed -n 's/^\s*version\s*=\s*"\([0-9]\.[0-9]\.[0-9]\)"\s*$/\1/p')
+
+    commit=$(curl --cacert "${cacert}/etc/ssl/certs/ca-bundle.crt" \
+      https://api.github.com/repos/$owner/$repo/commits?path=$path |
+      jq -r '.[0].sha')
+
+    update-source-version \
+      ${pname} \
+      "$version" \
+      --file=./pkgs/games/nile/default.nix \
+      --rev=$commit
+  '';
+}
diff --git a/nixpkgs/pkgs/games/ninvaders/default.nix b/nixpkgs/pkgs/games/ninvaders/default.nix
new file mode 100644
index 000000000000..c3f455b71b07
--- /dev/null
+++ b/nixpkgs/pkgs/games/ninvaders/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "ninvaders";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "sf-refugees";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1wmwws1zsap4bfc2439p25vnja0hnsf57k293rdxw626gly06whi";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    description = "Space Invaders clone based on ncurses";
+    homepage = "https://ninvaders.sourceforge.net/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ _1000101 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/njam/default.nix b/nixpkgs/pkgs/games/njam/default.nix
new file mode 100644
index 000000000000..971cd1d0726c
--- /dev/null
+++ b/nixpkgs/pkgs/games/njam/default.nix
@@ -0,0 +1,28 @@
+{lib, stdenv, fetchurl, SDL, SDL_image, SDL_mixer, SDL_net }:
+
+stdenv.mkDerivation rec {
+  pname = "njam";
+  version = "1.25";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/njam/njam-${version}-src.tar.gz";
+    sha256 = "0ysvqw017xkvddj957pdfmbmji7qi20nyr7f0zxvcvm6c7d3cc7s";
+  };
+
+  preBuild = ''
+    rm src/*.o
+  '';
+
+  buildInputs = [ SDL SDL_image SDL_mixer SDL_net ];
+
+  hardeningDisable = [ "format" ];
+
+  patches = [ ./logfile.patch ];
+
+  meta = {
+    homepage = "https://trackballs.sourceforge.net/";
+    description = "Cross-platform pacman-like game";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/njam/logfile.patch b/nixpkgs/pkgs/games/njam/logfile.patch
new file mode 100644
index 000000000000..45fd82a0845b
--- /dev/null
+++ b/nixpkgs/pkgs/games/njam/logfile.patch
@@ -0,0 +1,22 @@
+diff --git a/src/njamedit.cpp b/src/njamedit.cpp
+index a895ca9..38477db 100644
+--- a/src/njamedit.cpp
++++ b/src/njamedit.cpp
+@@ -114,7 +114,7 @@ void NjamEngine::LevelEditor()
+ 				key = SDLK_a;
+ 			else if (CheckForSave())
+ 			{
+-				LogFile::LogFile("Saving maps");
++				LogFile("Saving maps");
+ 				m_Maps.Save(filename);
+ 				level_type_was = level_type;
+ 				changed = false;
+@@ -139,7 +139,7 @@ void NjamEngine::LevelEditor()
+ 						"levels/%s.%s",
+ #endif					
+ 						filename, types[level_type]);
+-					LogFile::LogFile("Saving maps");
++					LogFile("Saving maps");
+ 					m_Maps.Save(buf);
+ 					level_type_was = level_type;
+ 					changed = false;
diff --git a/nixpkgs/pkgs/games/npush/default.nix b/nixpkgs/pkgs/games/npush/default.nix
new file mode 100644
index 000000000000..7f4afb7b89f3
--- /dev/null
+++ b/nixpkgs/pkgs/games/npush/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchurl
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "npush";
+  version = "0.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/npush/${pname}/${version}/${pname}-${version}.tgz";
+    hash = "sha256-8hbSsyeehzd4T3fUhDyebyI/oTHOHr3a8ArYAquivNk=";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  buildInputs = [
+    ncurses
+  ];
+
+  dontConfigure = true;
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}c++"
+  ];
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=format-security";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/npush/levels $doc/share/doc/npush
+    cp npush $out/bin/
+    cp levels/* $out/share/npush/levels
+    cp CHANGES COPYING CREDITS index.html \
+       readme.txt screenshot1.png screenshot2.png $doc/share/doc/npush/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://npush.sourceforge.net/";
+    description = "A Sokoban-like game";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/npush/run.nix b/nixpkgs/pkgs/games/npush/run.nix
new file mode 100644
index 000000000000..bc4a3b5fda3f
--- /dev/null
+++ b/nixpkgs/pkgs/games/npush/run.nix
@@ -0,0 +1,31 @@
+{ runtimeShell
+, symlinkJoin
+, writeShellScriptBin
+, npush
+}:
+
+let
+  runScript = writeShellScriptBin "run-npush" ''
+    set -euo pipefail
+    CWD=$(pwd)
+
+    if [ -d "./levels" ]; then
+      echo "Directory ./levels found; skipping levelset copy"
+    else
+      echo "Directory ./levels not found; copying the official levelset to the current directory"
+      mkdir -p ./levels
+      cp ${npush}/share/npush/levels/* levels/
+      chmod 644 levels/*
+    fi
+    echo "Now calling npush"
+    exec "${npush}/bin/npush"
+  '';
+in
+symlinkJoin {
+  name = "run-npush-${npush.version}";
+
+  paths = [
+    npush
+    runScript
+  ];
+}
diff --git a/nixpkgs/pkgs/games/nsnake/default.nix b/nixpkgs/pkgs/games/nsnake/default.nix
new file mode 100644
index 000000000000..aa3f568ec009
--- /dev/null
+++ b/nixpkgs/pkgs/games/nsnake/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchFromGitHub, lib, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "nsnake";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    owner = "alexdantas";
+    repo = "nSnake";
+    rev = "v${version}";
+    sha256 = "sha256-MixwIhyymruruV8G8PjmR9EoZBpaDVBCKBccSFL0lS8=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "ncurses based snake game for the terminal";
+    homepage = "https://github.com/alexdantas/nSnake";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ clerie ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/nudoku/default.nix b/nixpkgs/pkgs/games/nudoku/default.nix
new file mode 100644
index 000000000000..d3e3d039d986
--- /dev/null
+++ b/nixpkgs/pkgs/games/nudoku/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config, gettext, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "nudoku";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jubalh";
+    repo = pname;
+    rev = version;
+    sha256 = "12v00z3p0ymi8f3w4b4bgl4c76irawn3kmd147r0ap6s9ssx2q6m";
+  };
+
+  patches = [
+    # Pull upstream fix for ncurses-6.3
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/jubalh/nudoku/commit/93899a0fd72e04b9f257e5f54af53466106b5959.patch";
+      sha256 = "1h3za0dnx8fk3vshql5mhcici8aw8j0vr7ra81p3r1rii4c479lm";
+    })
+  ];
+
+  # Allow gettext 0.20
+  postPatch = ''
+    substituteInPlace configure.ac --replace 0.19 0.20
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config gettext ];
+  buildInputs = [ ncurses ];
+
+  configureFlags = lib.optional stdenv.hostPlatform.isMusl "--disable-nls";
+
+  meta = with lib; {
+    description = "An ncurses based sudoku game";
+    homepage = "http://jubalh.github.io/nudoku/";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/games/nxengine-evo/default.nix b/nixpkgs/pkgs/games/nxengine-evo/default.nix
new file mode 100644
index 000000000000..4660423a3509
--- /dev/null
+++ b/nixpkgs/pkgs/games/nxengine-evo/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv
+, fetchpatch
+, fetchurl
+, fetchFromGitHub
+, cmake
+, libpng
+, SDL2
+, SDL2_mixer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nxengine-evo";
+  version = "2.6.4";
+  src = fetchFromGitHub {
+    owner = "nxengine";
+    repo = "nxengine-evo";
+    rev = "v${version}";
+    sha256 = "sha256-krK2b1E5JUMxRoEWmb3HZMNSIHfUUGXSpyb4/Zdp+5A=";
+  };
+  assets = fetchurl {
+    url = "https://github.com/nxengine/nxengine-evo/releases/download/v${version}/NXEngine-v${version}-Linux.tar.xz";
+    sha256 = "1b5hkmsrrhnjjf825ri6n62kb3fldwl7v5f1cqvqyv47zv15g5gy";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/nxengine/nxengine-evo/commit/1890127ec4b4b5f8d6cb0fb30a41868e95659840.patch";
+      sha256 = "18j22vzkikcwqd42vlhzd6rjp26dq0zslxw5yyl07flivms0hny2";
+    })
+    (fetchpatch {
+      url = "https://github.com/nxengine/nxengine-evo/commit/75b8b8e3b067fd354baa903332f2a3254d1cc017.patch";
+      sha256 = "0sjr7z63gp7nfxifxisvp2w664mxxk3xi4a3d86mm0470dj5m5bx";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    libpng
+    SDL2
+    SDL2_mixer
+  ];
+
+  # Allow finding game assets.
+  postPatch = ''
+    sed -i -e "s,/usr/share/,$out/share/," src/ResourceManager.cpp
+  '';
+
+  installPhase = ''
+    cd ..
+    unpackFile ${assets}
+    mkdir -p $out/bin/ $out/share/nxengine/
+    install bin/* $out/bin/
+    cp -r NXEngine-evo-${version}-Linux/data/ $out/share/nxengine/data
+    chmod -R a=r,a+X $out/share/nxengine/data
+  '';
+
+  meta = {
+    description = "A complete open-source clone/rewrite of the masterpiece jump-and-run platformer Doukutsu Monogatari (also known as Cave Story)";
+    license = with lib.licenses; [
+      gpl3                   # Game engine
+      unfreeRedistributable  # Game assets, freeware
+    ];
+    maintainers = [ lib.maintainers.scubed2 ];
+    homepage = "https://github.com/nxengine/nxengine-evo";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/oh-my-git/default.nix b/nixpkgs/pkgs/games/oh-my-git/default.nix
new file mode 100644
index 000000000000..f2ac8b4289c6
--- /dev/null
+++ b/nixpkgs/pkgs/games/oh-my-git/default.nix
@@ -0,0 +1,134 @@
+{ lib
+, autoPatchelfHook
+, copyDesktopItems
+, fetchFromGitHub
+, makeDesktopItem
+, stdenv
+, alsa-lib
+, gcc-unwrapped
+, git
+, godot3-export-templates
+, godot3-headless
+, libGLU
+, libX11
+, libXcursor
+, libXext
+, libXfixes
+, libXi
+, libXinerama
+, libXrandr
+, libXrender
+, libglvnd
+, libpulseaudio
+, perl
+, zlib
+, udev # for libudev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "oh-my-git";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    owner = "git-learning-game";
+    repo = "oh-my-git";
+    rev = version;
+    sha256 = "sha256-XqxliMVU55D5JSt7Yo5btvZnnTlagSukyhXv6Akgklo=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    copyDesktopItems
+    godot3-headless
+  ];
+
+  buildInputs = [
+    alsa-lib
+    gcc-unwrapped.lib
+    git
+    libGLU
+    libX11
+    libXcursor
+    libXext
+    libXfixes
+    libXi
+    libXinerama
+    libXrandr
+    libXrender
+    libglvnd
+    libpulseaudio
+    perl
+    zlib
+    udev
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "oh-my-git";
+      exec = "oh-my-git";
+      icon = "oh-my-git";
+      desktopName = "oh-my-git";
+      comment = "An interactive Git learning game!";
+      genericName = "An interactive Git learning game!";
+      categories = [ "Game" ];
+    })
+  ];
+
+  # patch shebangs so that e.g. the fake-editor script works:
+  # error: /usr/bin/env 'perl': No such file or directory
+  # error: There was a problem with the editor
+  postPatch = ''
+    patchShebangs scripts
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    # Cannot create file '/homeless-shelter/.config/godot/projects/...'
+    export HOME=$TMPDIR
+
+    # Link the export-templates to the expected location. The --export commands
+    # expects the template-file at .../templates/3.2.3.stable/linux_x11_64_release
+    # with 3.2.3 being the version of godot.
+    mkdir -p $HOME/.local/share/godot
+    ln -s ${godot3-export-templates}/share/godot/templates $HOME/.local/share/godot
+
+    mkdir -p $out/share/oh-my-git
+    godot3-headless --export "Linux" $out/share/oh-my-git/oh-my-git
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    ln -s $out/share/oh-my-git/oh-my-git $out/bin
+
+    # Patch binaries.
+    interpreter=$(cat $NIX_CC/nix-support/dynamic-linker)
+    patchelf \
+      --set-interpreter $interpreter \
+      --set-rpath ${lib.makeLibraryPath buildInputs} \
+      $out/share/oh-my-git/oh-my-git
+
+    mkdir -p $out/share/pixmaps
+    cp images/oh-my-git.png $out/share/pixmaps/oh-my-git.png
+
+    runHook postInstall
+  '';
+
+  runtimeDependencies = map lib.getLib [
+    alsa-lib
+    libpulseaudio
+    udev
+  ];
+
+  meta = with lib; {
+    homepage = "https://ohmygit.org/";
+    description = "An interactive Git learning game";
+    license = with licenses; [ blueOak100 ];
+    platforms   = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ jojosch ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/oilrush/default.nix b/nixpkgs/pkgs/games/oilrush/default.nix
new file mode 100644
index 000000000000..947b7141b572
--- /dev/null
+++ b/nixpkgs/pkgs/games/oilrush/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, config, fetchurl, libX11, libXext, libXinerama, libXrandr
+, libXrender, fontconfig, freetype, openal, runtimeShell }:
+
+let inherit (lib) makeLibraryPath; in
+
+stdenv.mkDerivation {
+  name = "oilrush";
+  src =
+  let
+    url = config.oilrush.url or null;
+    sha256 = config.oilrush.sha256 or null;
+  in
+    assert url != null && sha256 != null;
+    fetchurl { inherit url sha256; };
+  shell = stdenv.shell;
+  arch = if stdenv.hostPlatform.system == "x86_64-linux" then "x64"
+         else lib.optionalString (stdenv.hostPlatform.system == "i686-linux") "x86";
+  unpackPhase = ''
+    mkdir oilrush
+    cd oilrush
+    "$shell" "$src" --tar xf
+  '';
+  patchPhase = ''
+    cd bin
+    for f in launcher_$arch libQtCoreUnigine_$arch.so.4 OilRush_$arch
+    do
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f
+    done
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${makeLibraryPath [ stdenv.cc.cc libX11 libXext libXrender fontconfig freetype ]}\
+             launcher_$arch
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${stdenv.cc.cc.lib}/lib\
+             libNetwork_$arch.so
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${stdenv.cc.cc.lib}/lib\
+             libQtCoreUnigine_$arch.so.4
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${makeLibraryPath [ stdenv.cc.cc libX11 libXext libXrender fontconfig freetype ]}\
+             libQtGuiUnigine_$arch.so.4
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${stdenv.cc.cc.lib}/lib\
+             libQtNetworkUnigine_$arch.so.4
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${makeLibraryPath [ stdenv.cc.cc libX11 libXext libXrender fontconfig freetype ]}\
+             libQtWebKitUnigine_$arch.so.4
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${stdenv.cc.cc.lib}/lib\
+             libQtXmlUnigine_$arch.so.4
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${stdenv.cc.cc.lib}/lib\
+             libRakNet_$arch.so
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${makeLibraryPath [ stdenv.cc.cc libX11 libXext libXinerama libXrandr ]}\
+             libUnigine_$arch.so
+    patchelf --set-rpath ${stdenv.cc.cc.lib}/lib64:${makeLibraryPath [ stdenv.cc.cc libX11 libXext libXinerama libXrandr ]}\
+             OilRush_$arch
+  '';
+  installPhase = ''
+    cd ..
+    mkdir -p "$out/opt/oilrush"
+    cp -r * "$out/opt/oilrush"
+    mkdir -p "$out/bin"
+    cat << EOF > "$out/bin/oilrush"
+    #!${runtimeShell}
+    LD_LIBRARY_PATH=.:${makeLibraryPath [ openal ]}:\$LD_LIBRARY_PATH
+    cd "$out/opt/oilrush"
+    exec ./launcher_$arch.sh "\$@"
+    EOF
+    chmod +x "$out/bin/oilrush"
+  '';
+  meta = {
+    description = "A naval strategy game";
+    longDescription = ''
+      Oil Rush is a real-time naval strategy game based on group control. It
+      combines the strategic challenge of a classical RTS with the sheer fun
+      of Tower Defense.
+    '';
+    homepage = "http://oilrush-game.com/";
+    license = lib.licenses.unfree;
+    #maintainers = with lib.maintainers; [ astsmtl ];
+    platforms = lib.platforms.linux;
+    hydraPlatforms = [];
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/onscripter-en/default.nix b/nixpkgs/pkgs/games/onscripter-en/default.nix
new file mode 100644
index 000000000000..aaa14e6b2bd0
--- /dev/null
+++ b/nixpkgs/pkgs/games/onscripter-en/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl
+, libpng, libjpeg, libogg, libvorbis, freetype, smpeg
+, SDL, SDL_image, SDL_mixer, SDL_ttf }:
+
+
+stdenv.mkDerivation {
+  pname = "onscripter-en";
+  version = "20111009";
+
+  src = fetchurl {
+    # The website is not available now.
+    url = "https://www.dropbox.com/s/ag21owy9poyr2oy/onscripter-en-20111009-src.tar.bz2";
+    sha256 = "sha256-pir3ExhehJ9zNygDN83S4GOs5ugDNMjngxEwklAz9c8=";
+  };
+
+  buildInputs = [ libpng libjpeg libogg libvorbis freetype smpeg
+                  SDL SDL_image SDL_mixer SDL_ttf
+                ];
+
+  configureFlags = [ "--no-werror" ];
+
+  # Without this libvorbisfile.so is not getting linked properly for some reason.
+  NIX_CFLAGS_LINK = "-lvorbisfile";
+
+  preBuild = ''
+    sed -i 's/.dll//g' Makefile
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Japanese visual novel scripting engine";
+    homepage = "http://unclemion.com/onscripter/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/openarena/Makefile.local b/nixpkgs/pkgs/games/openarena/Makefile.local
new file mode 100644
index 000000000000..2055770f14b2
--- /dev/null
+++ b/nixpkgs/pkgs/games/openarena/Makefile.local
@@ -0,0 +1,12 @@
+BUILD_CLIENT=1
+BUILD_RENDERER_OPENGL2=1
+BUILD_SERVER=1
+USE_CURL_DLOPEN=0
+USE_FREETYPE=1
+USE_INTERNAL_SPEEX=0
+USE_INTERNAL_JPEG=0
+USE_INTERNAL_OGG=0
+USE_INTERNAL_OPUS=0
+USE_INTERNAL_ZLIB=0
+USE_OPENAL_DLOPEN=0
+USE_RENDERER_DLOPEN=0
diff --git a/nixpkgs/pkgs/games/openarena/default.nix b/nixpkgs/pkgs/games/openarena/default.nix
new file mode 100644
index 000000000000..7ae0111cfe4b
--- /dev/null
+++ b/nixpkgs/pkgs/games/openarena/default.nix
@@ -0,0 +1,113 @@
+{ lib
+, fetchzip
+, fetchFromGitHub
+, stdenv
+, fetchpatch
+, copyDesktopItems
+, curl
+, makeBinaryWrapper
+, pkg-config
+, which
+, freetype
+, libglvnd
+, libjpeg
+, libogg
+, libvorbis
+, libxmp
+, openal
+, SDL2
+, speex
+, makeDesktopItem
+}:
+
+let
+  openarena-maps = fetchzip {
+    name = "openarena-maps";
+    url = "https://download.tuxfamily.org/openarena/rel/088/openarena-0.8.8.zip";
+    hash = "sha256-Rup1n14k9sKcyVFYzFqPYV+BEBCnUNwpnFsnyGrhl20=";
+  };
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "openarena";
+  version = "unstable-2023-03-02";
+
+  src = fetchFromGitHub {
+    name = "openarena-source";
+    owner = "OpenArena";
+    repo = "engine";
+    rev = "075cb860a4d2bc43e75e5f506eba7da877708aba";
+    hash = "sha256-ofQKQyS3ti5TSN+zqwPFYuJiB9kvdER6zTWn8yrOpQU=";
+  };
+
+  patches = [
+    # Fix Makefile `copyFiles` target
+    # Related upstream issue: https://github.com/OpenArena/engine/issues/83
+    (fetchpatch {
+      url = "https://github.com/OpenArena/engine/commit/f2b424bd332e90a1e2592edd21c62bdb8cd05214.patch";
+      hash = "sha256-legiXLtZAeG2t1esiBa37qkAgxPJVM7JLhjpxGUmWCo=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    curl
+    makeBinaryWrapper
+    pkg-config
+    which
+  ];
+
+  buildInputs = [
+    freetype
+    libglvnd
+    libjpeg
+    libogg
+    libvorbis
+    libxmp
+    openal
+    SDL2
+    speex
+  ];
+
+  enableParallelBuilding = true;
+
+  preConfigure = ''
+    cp ${./Makefile.local} ./Makefile.local
+  '';
+
+  installTargets = [ "copyfiles" ];
+  installFlags = [ "COPYDIR=$(out)/share/openarena" ];
+
+  preInstall = ''
+    mkdir -p $out/share/openarena
+  '';
+
+  postInstall = ''
+    install -Dm644 misc/quake3.svg $out/share/icons/hicolor/scalable/apps/openarena.svg
+
+    makeWrapper $out/share/openarena/openarena.* $out/bin/openarena
+    makeWrapper $out/share/openarena/oa_ded.* $out/bin/oa_ded
+
+    ln -s ${openarena-maps}/baseoa $out/share/openarena/baseoa
+    ln -s ${openarena-maps}/missionpack $out/share/openarena/missionpack
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "OpenArena";
+      exec = "openarena";
+      icon = "openarena";
+      comment = "A fast-paced 3D first-person shooter, similar to id Software Inc.'s Quake III Arena";
+      desktopName = "OpenArena";
+      categories = [ "Game" "ActionGame" ];
+    })
+  ];
+
+  meta = {
+    description = "A fast-paced 3D first-person shooter, similar to id Software Inc.'s Quake III Arena";
+    homepage = "http://openarena.ws/";
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "openarena";
+    maintainers = with lib.maintainers; [ drupol wyvie ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/games/openclonk/default.nix b/nixpkgs/pkgs/games/openclonk/default.nix
new file mode 100644
index 000000000000..4b526975349b
--- /dev/null
+++ b/nixpkgs/pkgs/games/openclonk/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, cmake, pkg-config
+, SDL2, libvorbis, libogg, libjpeg, libpng, freetype, glew, tinyxml, openal
+, freealut, readline, gcc-unwrapped
+, enableSoundtrack ? false # Enable the "Open Clonk Soundtrack - Explorers Journey" by David Oerther
+}:
+
+let
+  soundtrack_src = fetchurl {
+    url = "http://www.openclonk.org/download/Music.ocg";
+    sha256 = "1ckj0dlpp5zsnkbb5qxxfxpkiq76jj2fgj91fyf3ll7n0gbwcgw5";
+  };
+in stdenv.mkDerivation rec {
+  version = "8.1";
+  pname = "openclonk";
+
+  src = fetchurl {
+    url = "https://www.openclonk.org/builds/release/8.1/openclonk-${version}-src.tar.bz2";
+    sha256 = "0imkqjp8lww5p0cnqf4k4mb2v682mnsas63qmiz17rspakr7fxik";
+  };
+
+  postInstall = ''
+    mv -v $out/games/openclonk $out/bin/
+  '' + lib.optionalString enableSoundtrack ''
+    ln -sv ${soundtrack_src} $out/share/games/openclonk/Music.ocg
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [
+    SDL2 libvorbis libogg libjpeg libpng freetype glew tinyxml openal freealut
+    readline
+  ];
+
+  cmakeFlags = [ "-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar" "-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib" ];
+
+  cmakeBuildType = "RelWithDebInfo";
+
+  meta = with lib; {
+    description = "Free multiplayer action game in which you control clonks, small but witty and nimble humanoid beings";
+    homepage = "https://www.openclonk.org";
+    license = if enableSoundtrack then licenses.unfreeRedistributable else licenses.isc;
+    maintainers = with maintainers; [ lheckemann ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/games/opendune/default.nix b/nixpkgs/pkgs/games/opendune/default.nix
new file mode 100644
index 000000000000..32e1ef4fca93
--- /dev/null
+++ b/nixpkgs/pkgs/games/opendune/default.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config
+, alsa-lib, libpulseaudio, SDL2, SDL2_image, SDL2_mixer }:
+
+# - set the opendune configuration at ~/.config/opendune/opendune.ini:
+#     [opendune]
+#     datadir=/path/to/opendune-data
+# - download dune2 into [datadir] http://www.bestoldgames.net/eng/old-games/dune-2.php
+
+stdenv.mkDerivation rec {
+  pname = "opendune";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "OpenDUNE";
+    repo = "OpenDUNE";
+    rev = version;
+    sha256 = "15rvrnszdy3db8s0dmb696l4isb3x2cpj7wcl4j09pdi59pc8p37";
+  };
+
+  configureFlags = [
+    "--with-alsa=${lib.getLib alsa-lib}/lib/libasound.so"
+    "--with-pulse=${lib.getLib libpulseaudio}/lib/libpulse.so"
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ alsa-lib libpulseaudio SDL2 SDL2_image SDL2_mixer ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin bin/opendune
+    install -Dm444 -t $out/share/doc/opendune enhancement.txt README.txt
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Dune, Reinvented";
+    homepage = "https://github.com/OpenDUNE/OpenDUNE";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/opendungeons/cmakepaths.patch b/nixpkgs/pkgs/games/opendungeons/cmakepaths.patch
new file mode 100644
index 000000000000..a3e7ba7d6c8d
--- /dev/null
+++ b/nixpkgs/pkgs/games/opendungeons/cmakepaths.patch
@@ -0,0 +1,20 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f8ff3c28..b57ee337 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -30,13 +30,13 @@ if(WIN32)
+     set(OD_BIN_PATH ${CMAKE_INSTALL_PREFIX})
+ else()
+     # Set binary and data install locations if we want to use the installer
+-    set(OD_BIN_PATH ${CMAKE_INSTALL_PREFIX}/games CACHE PATH "Absolute path to the game binary directory")
++    set(OD_BIN_PATH ${CMAKE_INSTALL_PREFIX}/bin CACHE PATH "Absolute path to the game binary directory")
+     set(OD_DATA_PATH ${CMAKE_INSTALL_PREFIX}/share/games/${PROJECT_NAME} CACHE PATH "Absolute path to the game data directory")
+     set(OD_SHARE_PATH ${CMAKE_INSTALL_PREFIX}/share CACHE PATH "Absolute path to the shared data directory (desktop file, icons, etc.)")
+     set(OD_MAN_PATH ${OD_SHARE_PATH}/man CACHE PATH "Absolute path to the manpages directory")
+     # Set the plugins.cfg file path to a common but architecture-dependent location.
+     # Because the plugins.cfg Ogre plugins path path may vary depending on the architecture used.
+-    set(OD_PLUGINS_CFG_PATH /etc/${PROJECT_NAME} CACHE PATH "Absolute path to the Ogre plugins.cfg file")
++    set(OD_PLUGINS_CFG_PATH ${CMAKE_INSTALL_PREFIX}/etc/${PROJECT_NAME} CACHE PATH "Absolute path to the Ogre plugins.cfg file")
+ endif()
+ 
+ if(NOT MSVC)
diff --git a/nixpkgs/pkgs/games/opendungeons/default.nix b/nixpkgs/pkgs/games/opendungeons/default.nix
new file mode 100644
index 000000000000..10bcf19a53e7
--- /dev/null
+++ b/nixpkgs/pkgs/games/opendungeons/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, ogre_13
+, cegui
+, boost
+, sfml
+, openal
+, ois
+}:
+
+let
+  ogre' = ogre_13.overrideAttrs (old: {
+    cmakeFlags = old.cmakeFlags ++ [
+      "-DOGRE_RESOURCEMANAGER_STRICT=0"
+    ];
+  });
+  cegui' = cegui.override {
+    ogre = ogre';
+  };
+in
+stdenv.mkDerivation {
+  pname = "opendungeons";
+  version = "unstable-2023-03-18";
+
+  src = fetchFromGitHub {
+    owner = "paroj";
+    repo = "OpenDungeons";
+    rev = "974378d75591214dccbe0fb26e6ec8a40c2156e0";
+    hash = "sha256-vz9cT+rNcyKT3W9I9VRKcFol2SH1FhOhOALALjgKfIE=";
+  };
+
+  patches = [
+    ./cmakepaths.patch
+    ./fix_link_date_time.patch
+  ];
+
+  # source/utils/StackTraceUnix.cpp:122:2: error: #error Unsupported architecture.
+  postPatch = lib.optionalString (!stdenv.isx86_64) ''
+    cp source/utils/StackTrace{Stub,Unix}.cpp
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    ogre'
+    cegui'
+    boost
+    sfml
+    openal
+    ois
+  ];
+
+  cmakeFlags = [
+    "-DOD_TREAT_WARNINGS_AS_ERRORS=FALSE"
+  ];
+
+  meta = with lib; {
+    description = "An open source, real time strategy game sharing game elements with the Dungeon Keeper series and Evil Genius";
+    homepage = "https://opendungeons.github.io";
+    license = with licenses; [ gpl3Plus zlib mit cc-by-sa-30 cc0 ofl cc-by-30 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/opendungeons/fix_link_date_time.patch b/nixpkgs/pkgs/games/opendungeons/fix_link_date_time.patch
new file mode 100644
index 000000000000..884aa9901ba7
--- /dev/null
+++ b/nixpkgs/pkgs/games/opendungeons/fix_link_date_time.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f8ff3c2..689c463 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -538,7 +538,7 @@ endif()
+ #This has to cover the versions not already known by CMake
+ set(Boost_ADDITIONAL_VERSIONS 1.47 1.47.0 1.47.1 1.55.0)
+ 
+-set(OD_BOOST_COMPONENTS system filesystem locale program_options thread)
++set(OD_BOOST_COMPONENTS system date_time filesystem locale program_options thread)
+ 
+ if(BUILD_TESTING AND OD_BUILD_TESTING)
+     set(OD_BOOST_COMPONENTS ${OD_BOOST_COMPONENTS} unit_test_framework)
diff --git a/nixpkgs/pkgs/games/openjk/default.nix b/nixpkgs/pkgs/games/openjk/default.nix
new file mode 100644
index 000000000000..092f442669a6
--- /dev/null
+++ b/nixpkgs/pkgs/games/openjk/default.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv, fetchFromGitHub, makeDesktopItem, makeWrapper, cmake, libjpeg, zlib, libpng, libGL, SDL2 }:
+
+let
+  jamp = makeDesktopItem rec {
+    name = "jamp";
+    exec = name;
+    icon = "OpenJK_Icon_128";
+    comment = "Open Source Jedi Academy game released by Raven Software";
+    desktopName = "Jedi Academy (Multi Player)";
+    genericName = "Jedi Academy";
+    categories = [ "Game" ];
+  };
+  jasp = makeDesktopItem rec {
+    name = "jasp";
+    exec = name;
+    icon = "OpenJK_Icon_128";
+    comment = "Open Source Jedi Academy game released by Raven Software";
+    desktopName = "Jedi Academy (Single Player)";
+    genericName = "Jedi Academy";
+    categories = [ "Game" ];
+  };
+  josp = makeDesktopItem rec {
+    name = "josp";
+    exec = name;
+    icon = "OpenJK_Icon_128";
+    comment = "Open Source Jedi Outcast game released by Raven Software";
+    desktopName = "Jedi Outcast (Single Player)";
+    genericName = "Jedi Outcast";
+    categories = [ "Game" ];
+  };
+in stdenv.mkDerivation {
+  pname = "OpenJK";
+  version = "unstable-2022-01-30";
+
+  src = fetchFromGitHub {
+    owner = "JACoders";
+    repo = "OpenJK";
+    rev = "235fb9e1a9c4537a603b2e54e444327d20d198a3";
+    sha256 = "sha256-DqP6wnu5sE7lQJGEdsEPOc6FIaJjqxt5ANKZ5eiabC4=";
+  };
+
+  dontAddPrefix = true;
+
+  nativeBuildInputs = [ makeWrapper cmake ];
+  buildInputs = [ libjpeg zlib libpng libGL SDL2 ];
+
+  outputs = [ "out" "openjo" "openja" ];
+
+  # move from $out/JediAcademy to $out/opt/JediAcademy
+  preConfigure = ''
+    cmakeFlagsArray=("-DCMAKE_INSTALL_PREFIX=$out/opt")
+  '';
+  cmakeFlags = ["-DBuildJK2SPEngine:BOOL=ON"
+                "-DBuildJK2SPGame:BOOL=ON"
+                "-DBuildJK2SPRdVanilla:BOOL=ON"];
+
+  postInstall = ''
+    mkdir -p $out/bin $openja/bin $openjo/bin
+    mkdir -p $openja/share/applications $openjo/share/applications
+    mkdir -p $openja/share/icons/hicolor/128x128/apps $openjo/share/icons/hicolor/128x128/apps
+    mkdir -p $openja/opt $openjo/opt
+    mv $out/opt/JediAcademy $openja/opt/
+    mv $out/opt/JediOutcast $openjo/opt/
+    jaPrefix=$openja/opt/JediAcademy
+    joPrefix=$openjo/opt/JediOutcast
+
+    makeWrapper $jaPrefix/openjk.* $openja/bin/jamp --chdir "$jaPrefix"
+    makeWrapper $jaPrefix/openjk_sp.* $openja/bin/jasp --chdir "$jaPrefix"
+    makeWrapper $jaPrefix/openjkded.* $openja/bin/openjkded --chdir "$jaPrefix"
+    makeWrapper $joPrefix/openjo_sp.* $openjo/bin/josp --chdir "$joPrefix"
+
+    cp $src/shared/icons/OpenJK_Icon_128.png $openjo/share/icons/hicolor/128x128/apps
+    cp $src/shared/icons/OpenJK_Icon_128.png $openja/share/icons/hicolor/128x128/apps
+    ln -s ${jamp}/share/applications/* $openja/share/applications
+    ln -s ${jasp}/share/applications/* $openja/share/applications
+    ln -s ${josp}/share/applications/* $openjo/share/applications
+    ln -s $openja/bin/* $out/bin
+    ln -s $openjo/bin/* $out/bin
+    rm -rf $out/opt
+  '';
+
+  meta = with lib; {
+    description = "An open-source engine for Star Wars Jedi Academy game";
+    homepage = "https://github.com/JACoders/OpenJK";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ tgunnoe ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/openlierox/default.nix b/nixpkgs/pkgs/games/openlierox/default.nix
new file mode 100644
index 000000000000..2543d71f0a88
--- /dev/null
+++ b/nixpkgs/pkgs/games/openlierox/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, libX11, xorgproto, gd, SDL, SDL_image, SDL_mixer, zlib
+, libxml2, pkg-config, curl, cmake, libzip }:
+
+stdenv.mkDerivation rec {
+  pname = "openlierox";
+  version = "0.58rc3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/openlierox/OpenLieroX_0.58_rc3.src.tar.bz2";
+    sha256 = "1k35xppfqi3qfysv81xq3hj4qdy9j2ciinbkfdcmwclcsf3nh94z";
+  };
+
+  env.NIX_CFLAGS_COMPILE = "-I${libxml2.dev}/include/libxml2 -std=c++98 -Wno-error";
+
+  # The breakpad fails to build on x86_64, and it's only to report bugs upstream
+  cmakeFlags = [ "-DBREAKPAD=0" ];
+
+  preConfigure = ''
+    cmakeFlags="$cmakeFlags -DSYSTEM_DATA_DIR=$out/share"
+  '';
+
+  patchPhase = ''
+    sed -i s,curl/types.h,curl/curl.h, include/HTTP.h src/common/HTTP.cpp
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/OpenLieroX
+    cp bin/* $out/bin
+    cp -R ../share/gamedir/* $out/share/OpenLieroX
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config curl ];
+  buildInputs = [ libX11 xorgproto gd SDL SDL_image SDL_mixer zlib libxml2
+    libzip ];
+
+  meta = {
+    homepage = "http://openlierox.net";
+    description = "Real-time game with Worms-like shooting";
+    license = lib.licenses.lgpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/openloco/default.nix b/nixpkgs/pkgs/games/openloco/default.nix
new file mode 100644
index 000000000000..c884c39dafa2
--- /dev/null
+++ b/nixpkgs/pkgs/games/openloco/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, cmake
+, libpng
+, libzip
+, openal
+, pkg-config
+, span-lite
+, yaml-cpp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openloco";
+  version = "23.02";
+
+  src = fetchFromGitHub {
+    owner = "OpenLoco";
+    repo = "OpenLoco";
+    rev = "v${version}";
+    hash = "sha256-35g7tnKez4tnTdZzavfU+X8f3btFG6EbLkU+cqL6Qek=";
+  };
+
+  # the upstream build process determines the version tag from git; since we
+  # are not using a git checkout, we patch it manually
+  postPatch = ''
+    sed -i '/#define NAME "OpenLoco"/a#define OPENLOCO_VERSION_TAG "${version}"' src/OpenLoco/src/Version.cpp
+  '';
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=null-dereference";
+
+  cmakeFlags = [
+    "-DOPENLOCO_BUILD_TESTS=NO"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+  buildInputs = [
+    SDL2
+    libpng
+    libzip
+    openal
+    yaml-cpp
+    span-lite
+  ];
+
+  meta = {
+    description = "An open source re-implementation of Chris Sawyer's Locomotion";
+    homepage = "https://github.com/OpenLoco/OpenLoco";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ icewind1991 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/openmw/default.nix b/nixpkgs/pkgs/games/openmw/default.nix
new file mode 100644
index 000000000000..99c58df37244
--- /dev/null
+++ b/nixpkgs/pkgs/games/openmw/default.nix
@@ -0,0 +1,113 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchpatch
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, SDL2
+, CoreMedia
+, VideoToolbox
+, VideoDecodeAcceleration
+, boost
+, bullet
+, ffmpeg
+, libXt
+, luajit
+, lz4
+, mygui
+, openal
+, openscenegraph
+, recastnavigation
+, unshield
+, yaml-cpp
+}:
+
+let
+  GL = "GLVND"; # or "LEGACY";
+
+  osg' = (openscenegraph.override { colladaSupport = true; }).overrideDerivation (old: {
+    patches = [
+      (fetchpatch {
+        # Darwin: Without this patch, OSG won't build osgdb_png.so, which is required by OpenMW.
+        name = "darwin-osg-plugins-fix.patch";
+        url = "https://gitlab.com/OpenMW/openmw-dep/-/raw/0abe3c9c3858211028d881d7706813d606335f72/macos/osg.patch";
+        sha256 = "sha256-/CLRZofZHot8juH78VG1/qhTHPhy5DoPMN+oH8hC58U=";
+      })
+    ];
+    cmakeFlags = (old.cmakeFlags or [ ]) ++ [
+      "-Wno-dev"
+      "-DOpenGL_GL_PREFERENCE=${GL}"
+      "-DBUILD_OSG_PLUGINS_BY_DEFAULT=0"
+      "-DBUILD_OSG_DEPRECATED_SERIALIZERS=0"
+    ] ++ (map (e: "-DBUILD_OSG_PLUGIN_${e}=1") [ "BMP" "DAE" "DDS" "FREETYPE" "JPEG" "OSG" "PNG" "TGA" ]);
+  });
+
+  bullet' = bullet.overrideDerivation (old: {
+    cmakeFlags = (old.cmakeFlags or [ ]) ++ [
+      "-Wno-dev"
+      "-DOpenGL_GL_PREFERENCE=${GL}"
+      "-DUSE_DOUBLE_PRECISION=ON"
+      "-DBULLET2_MULTITHREADING=ON"
+    ];
+  });
+
+in
+stdenv.mkDerivation rec {
+  pname = "openmw";
+  version = "0.48.0";
+
+  src = fetchFromGitLab {
+    owner = "OpenMW";
+    repo = "openmw";
+    rev = "${pname}-${version}";
+    hash = "sha256-zkjVt3GfQZsFXl2Ht3lCuQtDMYQWxhdFO4aGSb3rsyo=";
+  };
+
+  postPatch = ''
+    sed '1i#include <memory>' -i components/myguiplatform/myguidatamanager.cpp # gcc12
+  '' + lib.optionalString stdenv.isDarwin ''
+    # Don't fix Darwin app bundle
+    sed -i '/fixup_bundle/d' CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
+
+  # If not set, OSG plugin .so files become shell scripts on Darwin.
+  dontWrapQtApps = stdenv.isDarwin;
+
+  buildInputs = [
+    SDL2
+    boost
+    bullet'
+    ffmpeg
+    libXt
+    luajit
+    lz4
+    mygui
+    openal
+    osg'
+    recastnavigation
+    unshield
+    yaml-cpp
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreMedia
+    VideoDecodeAcceleration
+    VideoToolbox
+  ];
+
+  cmakeFlags = [
+    "-DOpenGL_GL_PREFERENCE=${GL}"
+    "-DOPENMW_USE_SYSTEM_RECASTNAVIGATION=1"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-DOPENMW_OSX_DEPLOYMENT=ON"
+  ];
+
+  meta = with lib; {
+    description = "An unofficial open source engine reimplementation of the game Morrowind";
+    homepage = "https://openmw.org";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ abbradar marius851000 ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/openmw/tes3mp.nix b/nixpkgs/pkgs/games/openmw/tes3mp.nix
new file mode 100644
index 000000000000..48454b42df29
--- /dev/null
+++ b/nixpkgs/pkgs/games/openmw/tes3mp.nix
@@ -0,0 +1,153 @@
+{ lib
+, stdenv
+, cmake
+, openmw
+, fetchFromGitHub
+, fetchpatch
+, luajit
+, makeWrapper
+, symlinkJoin
+}:
+
+# revisions are taken from https://github.com/GrimKriegor/TES3MP-deploy
+
+let
+  # raknet could also be split into dev and lib outputs
+  raknet = stdenv.mkDerivation {
+    pname = "raknet";
+    version = "unstable-2020-01-19";
+
+    src = fetchFromGitHub {
+      owner = "TES3MP";
+      repo = "CrabNet";
+      # usually fixed:
+      # https://github.com/GrimKriegor/TES3MP-deploy/blob/d2a4a5d3acb64b16d9b8ca85906780aeea8d311b/tes3mp-deploy.sh#L589
+      rev = "19e66190e83f53bcdcbcd6513238ed2e54878a21";
+      sha256 = "WIaJkSQnoOm9T7GoAwmWl7fNg79coIo/ILUsWcbH+lA=";
+    };
+
+    cmakeFlags = [
+      "-DCRABNET_ENABLE_DLL=OFF"
+    ];
+
+    nativeBuildInputs = [ cmake ];
+
+    installPhase = ''
+      install -Dm555 lib/libRakNetLibStatic.a $out/lib/libRakNetLibStatic.a
+    '';
+  };
+
+  coreScripts = stdenv.mkDerivation {
+    pname = "corescripts";
+    version = "0.8.1";
+
+    src = fetchFromGitHub {
+      owner = "TES3MP";
+      repo = "CoreScripts";
+      # usually latest in stable branch (e.g. 0.7.1)
+      rev = "6ae0a2a5d16171de3764817a7f8b1067ecde3def";
+      sha256 = "8j/Sr9IRMNFPEVfFzdb42PckHS3KW7FH7x7rRxIh5gY=";
+    };
+
+    buildCommand = ''
+      dir=$out/share/openmw-tes3mp
+      mkdir -p $dir
+      cp -r $src $dir/CoreScripts
+    '';
+  };
+
+  # build an unwrapped version so we don't have to rebuild it all over again in
+  # case the scripts or wrapper scripts change.
+  unwrapped = openmw.overrideAttrs (oldAttrs: rec {
+    pname = "openmw-tes3mp-unwrapped";
+    version = "0.8.1";
+
+    src = fetchFromGitHub {
+      owner = "TES3MP";
+      repo = "TES3MP";
+      # usually latest in stable branch (e.g. 0.7.1)
+      rev = "68954091c54d0596037c4fb54d2812313b7582a1";
+      sha256 = "8/bV4sw7Q8l8bDTHGQ0t4owf6J6h9q468JFx4KegY5o=";
+    };
+
+    nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ makeWrapper ];
+
+    buildInputs = oldAttrs.buildInputs ++ [ luajit ];
+
+    cmakeFlags = oldAttrs.cmakeFlags ++ [
+      "-DBUILD_OPENCS=OFF"
+      "-DRakNet_INCLUDES=${raknet.src}/include"
+      "-DRakNet_LIBRARY_RELEASE=${raknet}/lib/libRakNetLibStatic.a"
+      "-DRakNet_LIBRARY_DEBUG=${raknet}/lib/libRakNetLibStatic.a"
+    ];
+
+    prePatch = ''
+      substituteInPlace components/process/processinvoker.cpp \
+        --replace "\"./\"" "\"$out/bin/\""
+    '';
+
+    patches = [
+      (fetchpatch {
+        url = "https://gitlab.com/OpenMW/openmw/-/commit/98a7d90ee258ceef9c70b0b2955d0458ec46f048.patch";
+        sha256 = "sha256-RhbIGeE6GyqnipisiMTwWjcFnIiR055hUPL8IkjPgZw=";
+      })
+
+      # https://github.com/TES3MP/openmw-tes3mp/issues/552
+      ./tes3mp.patch
+    ];
+
+    env.NIX_CFLAGS_COMPILE = "-fpermissive";
+
+    preConfigure = ''
+      substituteInPlace files/version.in \
+        --subst-var-by OPENMW_VERSION_COMMITHASH ${src.rev}
+    '';
+
+    # move everything that we wrap out of the way
+    postInstall = ''
+      mkdir -p $out/libexec
+      mv $out/bin/tes3mp-* $out/libexec
+    '';
+
+    meta = with lib; {
+      description = "Multiplayer for TES3:Morrowind based on OpenMW";
+      homepage = "https://tes3mp.com/";
+      license = licenses.gpl3Only;
+      maintainers = with maintainers; [ peterhoeg ];
+      platforms = [ "x86_64-linux" "i686-linux" ];
+    };
+  });
+
+  tes3mp-server-run = ''
+    config="''${XDG_CONFIG_HOME:-''$HOME/.config}"/openmw
+    data="''${XDG_DATA_HOME:-''$HOME/.local/share}"/openmw
+    if [[ ! -f "$config"/tes3mp-server.cfg && ! -d "$data"/server ]]; then
+      mkdir -p "$config"
+      echo [Plugins] > "$config"/tes3mp-server.cfg
+      echo "home = $data/server" >> "$config"/tes3mp-server.cfg
+      mkdir -p "$data"
+      cp -r ${coreScripts}/share/openmw-tes3mp/CoreScripts "$data"/server
+      chmod -R u+w "$data"/server
+    fi
+  '';
+
+in
+symlinkJoin {
+  name = "openmw-tes3mp-${unwrapped.version}";
+  inherit (unwrapped) version meta;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  paths = [ unwrapped ];
+
+  postBuild = ''
+    mkdir -p $out/bin
+
+    makeWrapper ${unwrapped}/libexec/tes3mp-browser $out/bin/tes3mp-browser \
+      --chdir "$out/bin"
+
+    makeWrapper ${unwrapped}/libexec/tes3mp-server $out/bin/tes3mp-server \
+      --run '${tes3mp-server-run}' \
+      --chdir "$out/bin"
+  '';
+}
diff --git a/nixpkgs/pkgs/games/openmw/tes3mp.patch b/nixpkgs/pkgs/games/openmw/tes3mp.patch
new file mode 100644
index 000000000000..c2a78f9db9b0
--- /dev/null
+++ b/nixpkgs/pkgs/games/openmw/tes3mp.patch
@@ -0,0 +1,13 @@
+diff --git a/apps/openmw-mp/Script/Types.hpp b/apps/openmw-mp/Script/Types.hpp
+index be365cfb8..204dcdc7b 100644
+--- a/apps/openmw-mp/Script/Types.hpp
++++ b/apps/openmw-mp/Script/Types.hpp
+@@ -105,7 +105,7 @@ struct ScriptFunctionPointer : public ScriptIdentity
+     void *addr;
+ #if (!defined(__clang__) && defined(__GNUC__))
+     template<typename R, typename... Types>
+-    constexpr ScriptFunctionPointer(Function<R, Types...> addr) : ScriptIdentity(addr), addr((void*)(addr)) {}
++    constexpr ScriptFunctionPointer(Function<R, Types...> addr) : ScriptIdentity(addr), addr(addr) {}
+ #else
+     template<typename R, typename... Types>
+     constexpr ScriptFunctionPointer(Function<R, Types...> addr) : ScriptIdentity(addr), addr(addr) {}
diff --git a/nixpkgs/pkgs/games/openra/build-engine.nix b/nixpkgs/pkgs/games/openra/build-engine.nix
new file mode 100644
index 000000000000..10e8b4939215
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra/build-engine.nix
@@ -0,0 +1,82 @@
+{ lib, buildDotnetModule, dotnetCorePackages
+, fetchFromGitHub
+, SDL2, freetype, openal, lua51Packages
+}:
+engine:
+
+buildDotnetModule rec {
+  pname = "openra-${engine.build}";
+  inherit (engine) version;
+
+  src = if engine ? src then engine.src else fetchFromGitHub {
+    owner = "OpenRA";
+    repo = "OpenRA";
+    rev = "${engine.build}-${engine.version}";
+    sha256 = engine.sha256;
+  };
+
+  nugetDeps = engine.deps;
+
+  dotnet-sdk = dotnetCorePackages.sdk_6_0;
+  dotnet-runtime = dotnetCorePackages.runtime_6_0;
+
+  useAppHost = false;
+
+  dotnetFlags = [ "-p:Version=0.0.0.0" ]; # otherwise dotnet build complains, version is saved in VERSION file anyway
+
+  dotnetBuildFlags = [ "-p:TargetPlaform=unix-generic" ];
+  dotnetInstallFlags = [
+    "-p:TargetPlaform=unix-generic"
+    "-p:CopyGenericLauncher=True"
+    "-p:CopyCncDll=True"
+    "-p:CopyD2kDll=True"
+    "-p:UseAppHost=False"
+  ];
+
+  dontDotnetFixup = true;
+
+  preBuild = ''
+    make VERSION=${engine.build}-${version} version
+  '';
+
+  postInstall = ''
+    # Create the file so that the install_data script will not attempt to download it.
+    # TODO: fetch the file and include it
+    touch './IP2LOCATION-LITE-DB1.IPV6.BIN.ZIP'
+
+    # Install all the asset data
+    (
+      . ./packaging/functions.sh
+      install_data . "$out/lib/${pname}" cnc d2k ra
+    )
+
+    # Replace precompiled libraries with links to native one.
+    # This is similar to configure-system-libraries.sh in the source repository
+    ln -s -f ${lua51Packages.lua}/lib/liblua.so $out/lib/${pname}/lua51.so
+    ln -s -f ${SDL2}/lib/libSDL2.so             $out/lib/${pname}/SDL2.so
+    ln -s -f ${openal}/lib/libopenal.so         $out/lib/${pname}/soft_oal.so
+    ln -s -f ${freetype}/lib/libfreetype.so     $out/lib/${pname}/freetype6.so
+  '';
+
+  postFixup = ''
+    (
+      . ./packaging/functions.sh
+      install_linux_shortcuts . "" "$out/lib/${pname}" "$out/.bin-unwrapped" "$out/share" "${version}" cnc d2k ra
+    )
+
+    # Create Nix wrappers to the application scripts which setup the needed environment
+    for bin in $(find $out/.bin-unwrapped -type f); do
+      makeWrapper "$bin" "$out/bin/$(basename "$bin")" \
+        --prefix "PATH" : "${lib.makeBinPath [ dotnet-runtime ]}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Open Source real-time strategy game engine for early Westwood games such as Command & Conquer: Red Alert. ${engine.build} version.";
+    homepage = "https://www.openra.net/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ mdarocha ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "openra-ra";
+  };
+}
diff --git a/nixpkgs/pkgs/games/openra/default.nix b/nixpkgs/pkgs/games/openra/default.nix
new file mode 100644
index 000000000000..19913a224f46
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra/default.nix
@@ -0,0 +1,12 @@
+{ callPackage }:
+
+let
+  buildOpenRAEngine = callPackage ./build-engine.nix {};
+  callPackage' = path: callPackage path { inherit buildOpenRAEngine; };
+in
+{
+  engines = {
+    release = callPackage' ./engines/release;
+    devtest = callPackage' ./engines/devtest;
+  };
+}
diff --git a/nixpkgs/pkgs/games/openra/engines/devtest/default.nix b/nixpkgs/pkgs/games/openra/engines/devtest/default.nix
new file mode 100644
index 000000000000..7c10b6341b2d
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra/engines/devtest/default.nix
@@ -0,0 +1,8 @@
+{ buildOpenRAEngine }:
+
+buildOpenRAEngine {
+  build = "devtest";
+  version = "20230414";
+  sha256 = "sha256-NU7NEINyrXSkEI5f3q0FLDve1NkNtr0Gww8E8WF9f5A=";
+  deps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/games/openra/engines/devtest/deps.nix b/nixpkgs/pkgs/games/openra/engines/devtest/deps.nix
new file mode 100644
index 000000000000..81e72b23038c
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra/engines/devtest/deps.nix
@@ -0,0 +1,113 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "DiscordRichPresence"; version = "1.1.3.18"; sha256 = "0p4bhaggjjfd4gl06yiphqgncxgcq2bws4sjkrw0n2ldf3hgrps3"; })
+  (fetchNuGet { pname = "Linguini.Bundle"; version = "0.4.0"; sha256 = "0zf46vfhkhpirw6zls9y7v5zwgckscy7dk8ns77qvxxw7ir6r6v5"; })
+  (fetchNuGet { pname = "Linguini.Shared"; version = "0.4.0"; sha256 = "1cxjz4rv1jvxqhlyc1ighy16c5vsah3n0mpx7988cf77kqzm3pzs"; })
+  (fetchNuGet { pname = "Linguini.Syntax"; version = "0.3.0"; sha256 = "1qgj6vbdjjl30cqcyn8df30jj15c2ahj7clgb5fwcja47mnw3jd8"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "6.0.0"; sha256 = "08c4fh1n8vsish1vh7h73mva34g0as4ph29s4lvps7kmjb4z64nl"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.1"; sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "Mono.Nat"; version = "3.0.4"; sha256 = "10zvyq60wy02q21dszrk1h3ww23b7bkgjxaapx1ans4d9nwsmlrm"; })
+  (fetchNuGet { pname = "MP3Sharp"; version = "1.0.5"; sha256 = "14h506d27g5j5c374dvw7iwn9sl0p7xp58kk95dacnpkzk0hv8yv"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "NuGet.CommandLine"; version = "4.4.1"; sha256 = "1szk5hbw22c1k5747dk95mzsy5vjw7qmvwv1wc9h080h9xzj9aab"; })
+  (fetchNuGet { pname = "NVorbis"; version = "0.10.4"; sha256 = "0l4f3vhqc6ly7s8mszwarszgirz6ywx1rjsr1jx0fdlsjl02x6p9"; })
+  (fetchNuGet { pname = "OpenRA-Eluant"; version = "1.0.20"; sha256 = "0nq52kdpwsvmhxgcv26wajvn3yxd5l89918rnrzxa463hmyb2rmv"; })
+  (fetchNuGet { pname = "OpenRA-Freetype6"; version = "1.0.9"; sha256 = "1i5clsxszmdkhjcdkp9324zidhzp0dsvn7cbcgrnafs18yabjmzq"; })
+  (fetchNuGet { pname = "OpenRA-FuzzyLogicLibrary"; version = "1.0.1"; sha256 = "0kn0b8491srbllkpqvvkml02dkixs18y5hgcalnpbw8l5kkmwvim"; })
+  (fetchNuGet { pname = "OpenRA-OpenAL-CS"; version = "1.0.19"; sha256 = "1ywm3b15qywrxby3s9wjs9flfjq7vld0gqz0xw4psgvz38gdgh7p"; })
+  (fetchNuGet { pname = "OpenRA-SDL2-CS"; version = "1.0.36"; sha256 = "1vywf2bfqkq0mr58gfd5kafv12rri2bzfajajcj8ha9fmhdibj3s"; })
+  (fetchNuGet { pname = "Pfim"; version = "0.10.3"; sha256 = "1myjs99g14q1yj3j5hzhx8ic7i3rqh2mi3qy9gdfzi6n9dlz1b3d"; })
+  (fetchNuGet { pname = "rix0rrr.BeaconLib"; version = "1.0.2"; sha256 = "0f0yi7hp8v6jvhhv7k4whv8hqqxnx15nvbkll4f1ykaa1w2pr754"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "SharpZipLib"; version = "1.4.2"; sha256 = "0ijrzz2szxjmv2cipk7rpmg14dfaigdkg7xabjvb38ih56m9a27y"; })
+  (fetchNuGet { pname = "StyleCop.Analyzers"; version = "1.2.0-beta.435"; sha256 = "0dirz0av24ds2k7hgpss15y4wlhwlzz22qdjvkq0n3g3sxcckrsy"; })
+  (fetchNuGet { pname = "StyleCop.Analyzers.Unstable"; version = "1.2.0.435"; sha256 = "1jv4ha4y2c9922n21yf2dvfkmi8qfa8z28gk5zsqdyck08izp9mh"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.Loader"; version = "4.3.0"; sha256 = "07fgipa93g1xxgf7193a6vw677mpzgr0z0cfswbvqqb364cva8dk"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "6.0.0"; sha256 = "06n9ql3fmhpjl32g3492sj181zjml5dlcc5l76xq2h38c4f87sai"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "6.0.0"; sha256 = "1si2my1g0q0qv1hiqnji4xh9wd05qavxnzj9dwgs23iqvgjky0gl"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "6.0.0"; sha256 = "1qbyi7yymqc56frqy7awvcqc1m7x3xrpx87a37dgb3mbrjg9hlcj"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; })
+  (fetchNuGet { pname = "TagLibSharp"; version = "2.2.0"; sha256 = "0jb0f84p4jd59ha36spyk9q08g6fjap3xywq32rcs2xwzhhqiq0y"; })
+]
diff --git a/nixpkgs/pkgs/games/openra/engines/release/default.nix b/nixpkgs/pkgs/games/openra/engines/release/default.nix
new file mode 100644
index 000000000000..7c778679f30a
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra/engines/release/default.nix
@@ -0,0 +1,8 @@
+{ buildOpenRAEngine }:
+
+buildOpenRAEngine {
+  build = "release";
+  version = "20230225";
+  sha256 = "sha256-f1OwyxNNn1Wh5sfz4s81bbHDY6ot2tvjMD8EK87Hc7k=";
+  deps = ./deps.nix;
+}
diff --git a/nixpkgs/pkgs/games/openra/engines/release/deps.nix b/nixpkgs/pkgs/games/openra/engines/release/deps.nix
new file mode 100644
index 000000000000..81863502e1a2
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra/engines/release/deps.nix
@@ -0,0 +1,114 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "DiscordRichPresence"; version = "1.1.3.18"; sha256 = "0p4bhaggjjfd4gl06yiphqgncxgcq2bws4sjkrw0n2ldf3hgrps3"; })
+  (fetchNuGet { pname = "Linguini.Bundle"; version = "0.3.1"; sha256 = "14dz8idlr8pxv1psqbc4v3v460naj2kixwv2kwr5y11v4dj6vnvj"; })
+  (fetchNuGet { pname = "Linguini.Shared"; version = "0.3.0"; sha256 = "0hvml8qkb73408aqyb49dp6b168jrr6g1n0qszdhmgax4mgxdqxf"; })
+  (fetchNuGet { pname = "Linguini.Syntax"; version = "0.3.0"; sha256 = "1qgj6vbdjjl30cqcyn8df30jj15c2ahj7clgb5fwcja47mnw3jd8"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "6.0.0"; sha256 = "08c4fh1n8vsish1vh7h73mva34g0as4ph29s4lvps7kmjb4z64nl"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.1"; sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.2"; sha256 = "0i42rn8xmvhn08799manpym06kpw89qy9080myyy2ngy565pqh0a"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net461"; version = "1.0.2"; sha256 = "0js3dp26nszx82q0phv7hmsm5z23dva7javbmk6a91lbkm07y8p2"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "Mono.Nat"; version = "3.0.3"; sha256 = "1b3alh1wz28y62cflwl1jppigv499cndm8sds32xsmvwpdwiq4yl"; })
+  (fetchNuGet { pname = "MP3Sharp"; version = "1.0.5"; sha256 = "14h506d27g5j5c374dvw7iwn9sl0p7xp58kk95dacnpkzk0hv8yv"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "NuGet.CommandLine"; version = "4.4.1"; sha256 = "1szk5hbw22c1k5747dk95mzsy5vjw7qmvwv1wc9h080h9xzj9aab"; })
+  (fetchNuGet { pname = "NVorbis"; version = "0.10.4"; sha256 = "0l4f3vhqc6ly7s8mszwarszgirz6ywx1rjsr1jx0fdlsjl02x6p9"; })
+  (fetchNuGet { pname = "OpenRA-Eluant"; version = "1.0.20"; sha256 = "0nq52kdpwsvmhxgcv26wajvn3yxd5l89918rnrzxa463hmyb2rmv"; })
+  (fetchNuGet { pname = "OpenRA-Freetype6"; version = "1.0.9"; sha256 = "1i5clsxszmdkhjcdkp9324zidhzp0dsvn7cbcgrnafs18yabjmzq"; })
+  (fetchNuGet { pname = "OpenRA-FuzzyLogicLibrary"; version = "1.0.1"; sha256 = "0kn0b8491srbllkpqvvkml02dkixs18y5hgcalnpbw8l5kkmwvim"; })
+  (fetchNuGet { pname = "OpenRA-OpenAL-CS"; version = "1.0.19"; sha256 = "1ywm3b15qywrxby3s9wjs9flfjq7vld0gqz0xw4psgvz38gdgh7p"; })
+  (fetchNuGet { pname = "OpenRA-SDL2-CS"; version = "1.0.36"; sha256 = "1vywf2bfqkq0mr58gfd5kafv12rri2bzfajajcj8ha9fmhdibj3s"; })
+  (fetchNuGet { pname = "Pfim"; version = "0.10.3"; sha256 = "1myjs99g14q1yj3j5hzhx8ic7i3rqh2mi3qy9gdfzi6n9dlz1b3d"; })
+  (fetchNuGet { pname = "rix0rrr.BeaconLib"; version = "1.0.2"; sha256 = "0f0yi7hp8v6jvhhv7k4whv8hqqxnx15nvbkll4f1ykaa1w2pr754"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "SharpZipLib"; version = "1.3.3"; sha256 = "1gij11wfj1mqm10631cjpnhzw882bnzx699jzwhdqakxm1610q8x"; })
+  (fetchNuGet { pname = "StyleCop.Analyzers"; version = "1.1.118"; sha256 = "0hj4ax64cay2lvrh9693m0g4pmis0fi5wpm12xwzvc7lkizvac0a"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.Loader"; version = "4.3.0"; sha256 = "07fgipa93g1xxgf7193a6vw677mpzgr0z0cfswbvqqb364cva8dk"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "6.0.0"; sha256 = "06n9ql3fmhpjl32g3492sj181zjml5dlcc5l76xq2h38c4f87sai"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "6.0.0"; sha256 = "1si2my1g0q0qv1hiqnji4xh9wd05qavxnzj9dwgs23iqvgjky0gl"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "6.0.0"; sha256 = "1qbyi7yymqc56frqy7awvcqc1m7x3xrpx87a37dgb3mbrjg9hlcj"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; })
+  (fetchNuGet { pname = "TagLibSharp"; version = "2.2.0"; sha256 = "0jb0f84p4jd59ha36spyk9q08g6fjap3xywq32rcs2xwzhhqiq0y"; })
+]
diff --git a/nixpkgs/pkgs/games/openra_2019/common.nix b/nixpkgs/pkgs/games/openra_2019/common.nix
new file mode 100644
index 000000000000..5932eeb6e6d0
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/common.nix
@@ -0,0 +1,69 @@
+/*  The reusable code, and package attributes, between OpenRA engine packages (engine.nix)
+    and out-of-tree mod packages (mod.nix).
+*/
+{ lib, makeSetupHook, curl, unzip, dos2unix, pkg-config, makeWrapper
+, lua, mono, python3
+, libGL, freetype, openal, SDL2
+, zenity
+}:
+
+with lib;
+
+let
+  path = makeBinPath ([ mono python3 ] ++ optional (zenity != null) zenity);
+  rpath = makeLibraryPath [ lua freetype openal SDL2 ];
+  mkdirp = makeSetupHook {
+    name = "openra-mkdirp-hook";
+  } ./mkdirp.sh;
+
+in {
+  patchEngine = dir: version: ''
+    sed -i \
+      -e 's/^VERSION.*/VERSION = ${version}/g' \
+      -e '/fetch-geoip-db/d' \
+      -e '/GeoLite2-Country.mmdb.gz/d' \
+      ${dir}/Makefile
+
+    sed -i 's|locations=.*|locations=${lua}/lib|' ${dir}/thirdparty/configure-native-deps.sh
+  '';
+
+  wrapLaunchGame = openraSuffix: binaryName: ''
+    # Setting TERM=xterm fixes an issue with terminfo in mono: System.Exception: Magic number is wrong: 542
+    # https://github.com/mono/mono/issues/6752#issuecomment-365212655
+    wrapProgram $out/lib/openra${openraSuffix}/launch-game.sh \
+      --prefix PATH : "${path}" \
+      --prefix LD_LIBRARY_PATH : "${rpath}" \
+      --set TERM xterm
+
+    makeWrapper $out/lib/openra${openraSuffix}/launch-game.sh $(mkdirp $out/bin)/${binaryName} \
+      --chdir "$out/lib/openra${openraSuffix}"
+  '';
+
+  packageAttrs = {
+    buildInputs = [ libGL ];
+
+    # TODO: Test if this is correct.
+    nativeBuildInputs = [
+      curl
+      unzip
+      dos2unix
+      pkg-config
+      makeWrapper
+      mkdirp
+      mono
+      python3
+    ];
+
+    makeFlags = [ "prefix=$(out)" ];
+
+    doCheck = true;
+
+    dontStrip = true;
+
+    meta = {
+      maintainers = with maintainers; [ fusion809 msteen ];
+      license = licenses.gpl3;
+      platforms = platforms.linux;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/games/openra_2019/default.nix b/nixpkgs/pkgs/games/openra_2019/default.nix
new file mode 100644
index 000000000000..0bcf71cd87f1
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/default.nix
@@ -0,0 +1,74 @@
+/*  This file defines all OpenRA packages under `openraPackages`,
+    e.g. the OpenRA release engine can be found at `openraPackages.engines.release` (see `engines.nix`),
+    or the out-of-tree mod "Combined Arms" can be found at `openraPackages.mods.ca` (see `mods.nix`).
+    The `openra` package is just an alias to `openraPackages.engines.release`,
+    and just provides the mods included in the source code of the engine.
+    Additional engines or mods can be added with `openraPackages.buildOpenRAEngine` (function around `engine.nix`)
+    and `openraPackages.buildOpenRAMod` (function around `mod.nix`), respectively.
+*/
+{ pkgs, lib }:
+
+let
+  /*  Building an engine or out-of-tree mod is very similar,
+      but different enough not to be able to build them with the same package definition,
+      so instaed we define what is common between them in a separate file.
+
+      Although `callPackage` could be used, it would require undoing `makeOverridable`,
+      because `common.nix` does not define a package, but just an attribute set,
+      which is directly passed as part of the argument to the engines and mods `callPackage`,
+      so either the attributes added by `makeOverridable` have to be removed
+      or the engine and mod package definitions will need to add `...` to the argument list.
+  */
+  common = let
+    f = import ./common.nix;
+    fArgs = lib.functionArgs f;
+  in f (builtins.intersectAttrs fArgs pkgs // {
+    lua = pkgs.lua5_1;
+    # It is not necessary to run the game, but it is nicer to be given an error dialog in the case of failure,
+    # rather than having to look to the logs why it is not starting.
+    inherit (pkgs.gnome) zenity;
+  });
+
+  /*  Building a set of engines or mods requires some dependencies as well,
+      so the sets will actually be defined as a function instead,
+      requiring the dependencies and returning the actual set.
+
+      Not all dependencies for defining a engine or mod set are shared,
+      so additional arguments can be passed as well.
+
+      The builders for engines and mods allow to delay specifying the name,
+      by returning a function that expects a name, which we use, in this case,
+      to base the name on the attribute name instead, preventing the need to specify the name twice
+      if the attribute name and engine/mod name are equal.
+  */
+  callWithName = name: value: if lib.isFunction value then value name else value;
+  buildOpenRASet = f: args: pkgs.recurseIntoAttrs (lib.mapAttrs callWithName (f ({
+    inherit (pkgs) fetchFromGitHub;
+    postFetch = ''
+      sed -i 's/curl/curl --insecure/g' $out/thirdparty/{fetch-thirdparty-deps,noget}.sh
+      $out/thirdparty/fetch-thirdparty-deps.sh
+    '';
+  } // args)));
+
+in pkgs.recurseIntoAttrs rec {
+  # The whole attribute set is destructered to ensure those (and only those) attributes are given
+  # and to provide defaults for those that are optional.
+  buildOpenRAEngine = { name ? null, version, description, homepage, mods, src }@engine:
+    # Allow specifying the name at a later point if no name has been given.
+    let builder = name: pkgs.callPackage ./engine.nix (common // {
+      engine = engine // { inherit name; };
+    });
+    in if name == null then builder else builder name;
+
+  # See `buildOpenRAEngine`.
+  buildOpenRAMod = { name ? null, version, title, description, homepage, src, engine, assetsError ? "" }@mod: ({ version, mods ? [], src }@engine:
+    let builder = name: pkgs.callPackage ./mod.nix (common // {
+      mod = mod // { inherit name assetsError; };
+      engine = engine // { inherit mods; };
+    });
+    in if name == null then builder else builder name) engine;
+
+  # See `buildOpenRASet`.
+  engines = buildOpenRASet (import ./engines.nix) { inherit buildOpenRAEngine; };
+  mods = buildOpenRASet (import ./mods.nix) { inherit buildOpenRAMod; };
+}
diff --git a/nixpkgs/pkgs/games/openra_2019/engine.nix b/nixpkgs/pkgs/games/openra_2019/engine.nix
new file mode 100644
index 000000000000..d63800be1e29
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/engine.nix
@@ -0,0 +1,57 @@
+/*  The package defintion for an OpenRA engine.
+    It shares code with `mod.nix` by what is defined in `common.nix`.
+    Similar to `mod.nix` it is a generic package definition,
+    in order to make it easy to define multiple variants of the OpenRA engine.
+    For each mod provided by the engine, a wrapper script is created,
+    matching the naming convention used by `mod.nix`.
+    This package could be seen as providing a set of in-tree mods,
+    while the `mod.nix` pacakges provide a single out-of-tree mod.
+*/
+{ lib, stdenv
+, packageAttrs
+, patchEngine
+, wrapLaunchGame
+, engine
+}:
+
+stdenv.mkDerivation (lib.recursiveUpdate packageAttrs rec {
+  pname = "openra_2019";
+  version = "${engine.name}-${engine.version}";
+
+  src = engine.src;
+
+  postPatch = patchEngine "." version;
+
+  configurePhase = ''
+    runHook preConfigure
+
+    make version VERSION=${lib.escapeShellArg version}
+
+    runHook postConfigure
+  '';
+
+  buildFlags = [ "DEBUG=false" "default" "man-page" ];
+
+  checkTarget = "nunit test";
+
+  installTargets = [
+    "install"
+    "install-linux-icons"
+    "install-linux-desktop"
+    "install-linux-appdata"
+    "install-linux-mime"
+    "install-man-page"
+  ];
+
+  postInstall = ''
+    ${wrapLaunchGame "" "openra"}
+
+    ${lib.concatStrings (map (mod: ''
+      makeWrapper $out/bin/openra $out/bin/openra-${mod} --add-flags Game.Mod=${mod}
+    '') engine.mods)}
+  '';
+
+  meta = {
+    inherit (engine) description homepage;
+  };
+})
diff --git a/nixpkgs/pkgs/games/openra_2019/engines.nix b/nixpkgs/pkgs/games/openra_2019/engines.nix
new file mode 100644
index 000000000000..bbb4947acd23
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/engines.nix
@@ -0,0 +1,41 @@
+{ buildOpenRAEngine, fetchFromGitHub, postFetch }:
+
+let
+  buildUpstreamOpenRAEngine = { version, rev, sha256 }: name: (buildOpenRAEngine {
+    inherit version;
+    description = "Open-source re-implementation of Westwood Studios' 2D Command and Conquer games";
+    homepage = "https://www.openra.net/";
+    mods = [ "cnc" "d2k" "ra" "ts" ];
+    src = fetchFromGitHub {
+      owner = "OpenRA";
+      repo = "OpenRA" ;
+      inherit rev sha256 postFetch;
+    };
+  } name).overrideAttrs (origAttrs: {
+    postInstall = ''
+      ${origAttrs.postInstall}
+      cp -r mods/ts $out/lib/openra/mods/
+      cp mods/ts/icon.png $(mkdirp $out/share/pixmaps)/openra-ts.png
+      ( cd $out/share/applications; sed -e 's/Dawn/Sun/g' -e 's/cnc/ts/g' openra-cnc.desktop > openra-ts.desktop )
+    '';
+  });
+
+in {
+  release = name: (buildUpstreamOpenRAEngine rec {
+    version = "20190314";
+    rev = "${name}-${version}";
+    sha256 = "15pvn5cx3g0nzbrgpsfz8dngad5wkzp5dz25ydzn8bmxafiijvcr";
+  } name);
+
+  playtest = name: (buildUpstreamOpenRAEngine rec {
+    version = "20190302";
+    rev = "${name}-${version}";
+    sha256 = "1vqvfk2p2lpk3m0d3rpvj34i8cmk3mfc7w4cn4llqd9zp4kk9pya";
+  } name);
+
+  bleed = buildUpstreamOpenRAEngine {
+    version = "8ee1102";
+    rev = "8ee11028d72cde7556b31d45f556b40be65b4b70";
+    sha256 = "0f1fpf37ms8d7fhlh3rjzsxsk9w23iyi3phs2i7g561292d5rk3l";
+  };
+}
diff --git a/nixpkgs/pkgs/games/openra_2019/mkdirp.sh b/nixpkgs/pkgs/games/openra_2019/mkdirp.sh
new file mode 100644
index 000000000000..7b2cf0b89c0e
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/mkdirp.sh
@@ -0,0 +1,4 @@
+mkdirp() {
+  mkdir -p "$@"
+  echo "$@"
+}
diff --git a/nixpkgs/pkgs/games/openra_2019/mod-launch-game.sh b/nixpkgs/pkgs/games/openra_2019/mod-launch-game.sh
new file mode 100644
index 000000000000..16fb14c24d65
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/mod-launch-game.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+show_error() {
+  if command -v zenity > /dev/null; then
+    zenity --no-wrap --no-markup --error --title "OpenRA - @title@" --text "$1" 2>/dev/null
+  else
+    printf "$1\n" >&2
+  fi
+  exit 1
+}
+
+pushd "@out@/lib/openra_2019-@name@" > /dev/null
+
+# Check for missing assets
+assetsError='@assetsError@'
+if [[ -n "$assetsError" && ! -d "$HOME/.openra/Content/@name@" ]]; then
+  show_error "$assetsError"
+fi
+
+# Run the game
+mono --debug OpenRA.Game.exe Game.Mod=@name@ Engine.LaunchPath="@out@/bin/openra-@name@" Engine.ModSearchPaths="@out@/lib/openra_2019-@name@/mods" "$@"
+
+# Show a crash dialog if something went wrong
+if (( $? != 0 && $? != 1 )); then
+  show_error $'OpenRA - @title@ has encountered a fatal error.\nPlease refer to the crash logs for more information.\n\nLog files are located in ~/.openra/Logs'
+fi
diff --git a/nixpkgs/pkgs/games/openra_2019/mod-update.sh b/nixpkgs/pkgs/games/openra_2019/mod-update.sh
new file mode 100755
index 000000000000..8489d5a97a7c
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/mod-update.sh
@@ -0,0 +1,160 @@
+#!/usr/bin/env bash
+# shellcheck disable=SC2034
+
+# for mod in $(nix eval --raw '(
+#   with import <nixpkgs> { };
+#   with lib;
+#   let mods = attrNames (removeAttrs openraPackages.mods [ "recurseForDerivations" ]);
+#   in concatStringsSep " " mods
+# )'); do
+#   ./mod-update.sh "$mod"
+# done
+
+# Uses: https://github.com/msteen/nix-upfetch
+
+mod=$1
+commit_count=$2
+token=
+nixpkgs='<nixpkgs>'
+
+die() {
+  local ret=$?
+  echo "$*" >&2
+  exit $ret
+}
+
+curl() {
+  command curl --silent --show-error "$@"
+}
+
+get_sha1() {
+  local owner=$1 repo=$2 ref=$3
+  # https://developer.github.com/v3/#authentication
+  curl -H "Authorization: token $token" -H 'Accept: application/vnd.github.VERSION.sha' "https://api.github.com/repos/$owner/$repo/commits/$ref"
+}
+
+[[ -n $mod ]] || die "The first argument of this script has to be a mod identifier."
+
+[[ -n $token ]] || die "Please edit this script to include a GitHub API access token, which is required for API v4:
+https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/"
+
+# Get current mod_owner and mod_repo.
+vars=$(nix-prefetch --file "$nixpkgs" "openraPackages.mods.$mod" --index 0 --quiet --output json --no-compute-hash > >(
+  jq --raw-output 'with_entries(select(.value | contains("\n") | not)) | to_entries | .[] | .key + "=" + .value')) || exit
+
+mod_owner=; mod_repo=; mod_rev=
+while IFS='=' read -r key val; do
+  declare "mod_${key}=${val}"
+done <<< "$vars"
+
+if [[ -n $commit_count ]]; then
+  query_on_commit='{
+  history(first: 10) {
+    nodes {
+      abbreviatedOid
+      oid
+    }
+    totalCount
+  }
+}'
+else
+  query_on_commit='{
+  history(first: 0) {
+    totalCount
+  }
+  abbreviatedOid
+  oid
+}'
+fi
+
+# shellcheck disable=SC2089
+query='{
+  repository(owner: "'$mod_owner'", name: "'$mod_repo'") {
+    defaultBranchRef {
+      target {
+        ... on Commit '$query_on_commit'
+      }
+    }
+    licenseInfo {
+      key
+    }
+  }
+}'
+
+# Newlines are not allowed in a query.
+# https://developer.github.com/v4/guides/forming-calls/#communicating-with-graphql
+# shellcheck disable=SC2086 disable=SC2090 disable=SC2116
+query=$(echo $query)
+query=${query//\"/\\\"}
+
+# https://developer.github.com/v4/guides/using-the-explorer/#configuring-graphiql
+json=$(curl -H "Authorization: bearer $token" -X POST -d '{ "query": "'"$query"'" }' https://api.github.com/graphql) || exit
+
+if [[ -n $commit_count ]]; then
+  json=$(jq "$commit_count"' as $commit_count
+    | .data.repository.defaultBranchRef.target
+    |= (.history |= (. | del(.nodes) | .totalCount = $commit_count))
+    + (.history | .nodes[.totalCount - $commit_count])' <<< "$json") || exit
+fi
+
+vars=$(jq --raw-output '.data.repository | {
+  license_key: .licenseInfo.key,
+} + (.defaultBranchRef.target | {
+  version: ((.history.totalCount | tostring) + ".git." + .abbreviatedOid),
+  rev: .oid,
+}) | to_entries | .[] | .key + "=" + (.value | tostring)' <<< "$json") || exit
+
+mod_license_key=; mod_version=; mod_rev=
+while IFS='=' read -r key val; do
+  declare "mod_${key}=${val}"
+done <<< "$vars"
+
+mod_config=$(curl "https://raw.githubusercontent.com/$mod_owner/$mod_repo/$mod_rev/mod.config") || exit
+
+mod_id=; engine_version=; automatic_engine_management=; automatic_engine_source=
+while IFS='=' read -r key val; do
+  declare "${key,,}=$(jq --raw-output . <<< "$val")"
+done < <(grep '^\(MOD_ID\|ENGINE_VERSION\|AUTOMATIC_ENGINE_MANAGEMENT\|AUTOMATIC_ENGINE_SOURCE\)=' <<< "$mod_config")
+
+for var in mod_id engine_version automatic_engine_management automatic_engine_source; do
+  echo "$var=${!var}" >&2
+done
+echo >&2
+
+[[ $mod_id == "$mod" ]] ||
+  die "The mod '$mod' reports being mod '$mod_id' instead."
+# shellcheck disable=SC2005 disable=SC2046
+[[ $mod_license_key == gpl-3.0 ]] ||
+[[ $(echo $(head -2 <(curl "https://raw.githubusercontent.com/$mod_owner/$mod_repo/$mod_rev/COPYING"))) == 'GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007' ]] ||
+  die "The mod '$mod' is licensed under '$mod_license_key' while expecting 'gpl-3.0'."
+[[ $automatic_engine_management == True ]] ||
+  die "The mod '$mod' engine is not managed as a read-only dependency."
+[[ $automatic_engine_source =~ https://github.com/([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_\-]+)/archive/([a-zA-Z0-9_\-\$\{\}]+).zip ]] ||
+  die "The mod '$mod' engine is not hosted on GitHub as an archive."
+
+engine_owner=${BASH_REMATCH[1]}
+engine_repo=${BASH_REMATCH[2]}
+# shellcheck disable=SC2016
+[[ ${BASH_REMATCH[3]} == '${ENGINE_VERSION}' ]] || engine_version=${BASH_REMATCH[3]}
+engine_rev=$(get_sha1 "$engine_owner" "$engine_repo" "$engine_version")
+
+for type in mod engine; do
+  for name in version owner repo rev; do
+    var="${type}_${name}"
+    echo "$var=${!var}" >&2
+  done
+  echo >&2
+done
+
+i=0
+for type in mod engine; do
+  fetcher_args=()
+  for name in owner repo rev; do
+    var="${type}_${name}"
+    fetcher_args+=( "--$name" "${!var}" )
+  done
+  var="${type}_version"
+  version=${!var}
+  nix-upfetch --yes --version "$version" "$(nix-preupfetch --file "$nixpkgs" "openraPackages.mods.$mod" --index $i -- "${fetcher_args[@]}")"
+  (( i++ ))
+done
diff --git a/nixpkgs/pkgs/games/openra_2019/mod.nix b/nixpkgs/pkgs/games/openra_2019/mod.nix
new file mode 100644
index 000000000000..2f945b4b4ddc
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/mod.nix
@@ -0,0 +1,103 @@
+/*  The package defintion for an OpenRA out-of-tree mod.
+    It shares code with `engine.nix` by what is defined in `common.nix`.
+    To build an out-of-tree mod it needs the source code of the engine available,
+    and they each need to be build with a specific version or fork of the engine,
+    so the engine needs to be supplied as an argument as well.
+    The engine is relatively small and quick to build, so this is not much of a problem.
+    Building a mod will result in a wrapper script that starts the mod inside the specified engine.
+*/
+{ lib, stdenv
+, packageAttrs
+, patchEngine
+, wrapLaunchGame
+, mod
+, engine
+}:
+
+let
+  engineSourceName = engine.src.name or "engine";
+  modSourceName = mod.src.name or "mod";
+
+# Based on: https://build.opensuse.org/package/show/home:fusion809/openra-ura
+in stdenv.mkDerivation (lib.recursiveUpdate packageAttrs rec {
+  name = "${pname}-${version}";
+  pname = "openra_2019-${mod.name}";
+  inherit (mod) version;
+
+  srcs = [
+    mod.src
+    engine.src
+  ];
+
+  sourceRoot = ".";
+
+  postUnpack = ''
+    mv ${engineSourceName} ${modSourceName}
+    cd ${modSourceName}
+  '';
+
+  postPatch = ''
+    cat <<'EOF' > fetch-engine.sh
+    #!/bin/sh
+    exit 0
+    EOF
+
+    sed -i 's/^VERSION.*/VERSION = ${version}/g' Makefile
+
+    dos2unix *.md
+
+    ${patchEngine engineSourceName engine.version}
+  '';
+
+  configurePhase = ''
+    runHook preConfigure
+
+    make version VERSION=${lib.escapeShellArg version}
+    make -C ${engineSourceName} version VERSION=${lib.escapeShellArg engine.version}
+
+    runHook postConfigure
+  '';
+
+  checkTarget = "test";
+
+  installPhase = ''
+    runHook preInstall
+
+    make -C ${engineSourceName} install-engine install-common-mod-files DATA_INSTALL_DIR=$out/lib/${pname}
+
+    cp -r ${engineSourceName}/mods/{${lib.concatStringsSep "," ([ "common" "modcontent" ] ++ engine.mods)}} mods/* \
+      $out/lib/${pname}/mods/
+
+    substitute ${./mod-launch-game.sh} $out/lib/openra_2019-${mod.name}/launch-game.sh \
+      --subst-var out \
+      --subst-var-by name ${lib.escapeShellArg mod.name} \
+      --subst-var-by title ${lib.escapeShellArg mod.title} \
+      --subst-var-by assetsError ${lib.escapeShellArg mod.assetsError}
+    chmod +x $out/lib/openra_2019-${mod.name}/launch-game.sh
+
+    ${wrapLaunchGame "_2019-${mod.name}" "openra-${mod.name}"}
+
+    substitute ${./openra-mod.desktop} $(mkdirp $out/share/applications)/${pname}.desktop \
+      --subst-var-by name ${lib.escapeShellArg mod.name} \
+      --subst-var-by title ${lib.escapeShellArg mod.title} \
+      --subst-var-by description ${lib.escapeShellArg mod.description}
+
+    cp README.md $(mkdirp $out/share/doc/packages/${pname})/README.md
+
+    [[ -e mods/${mod.name}/icon.png ]] && mod_icon=mods/${mod.name}/icon.png || {
+      [[ -e mods/${mod.name}/logo.png ]] && mod_icon=mods/${mod.name}/logo.png || mod_icon=packaging/linux/mod_256x256.png
+    }
+    cp "$mod_icon" $(mkdirp $out/share/pixmaps)/${pname}.png
+
+    for size in 16 32 48 64 128 256; do
+      size=''${size}x''${size}
+      cp packaging/linux/mod_''${size}.png $(mkdirp $out/share/icons/hicolor/''${size}/apps)/${pname}.png
+    done
+
+    runHook postInstall
+  '';
+
+  meta = {
+    inherit (mod) description homepage;
+  };
+})
diff --git a/nixpkgs/pkgs/games/openra_2019/mods.nix b/nixpkgs/pkgs/games/openra_2019/mods.nix
new file mode 100644
index 000000000000..47e86fd09a7d
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/mods.nix
@@ -0,0 +1,345 @@
+{ buildOpenRAMod, fetchFromGitHub, postFetch }:
+
+let
+  unsafeBuildOpenRAMod = attrs: name: (buildOpenRAMod attrs name).overrideAttrs (_: {
+    doCheck = false;
+  });
+
+in {
+  ca = buildOpenRAMod {
+    version = "96.git.fc3cf0b";
+    title = "Combined Arms";
+    description = "A game that combines units from the official OpenRA Red Alert and Tiberian Dawn mods";
+    homepage = "https://github.com/Inq8/CAmod";
+    src = fetchFromGitHub {
+      owner = "Inq8";
+      repo = "CAmod";
+      rev = "fc3cf0baf2b827650eaae9e1d2335a3eed24bac9";
+      sha256 = "15w91xs253gyrlzsgid6ixxjazx0fbzick6vlkiay0znb58n883m";
+    };
+    engine = {
+      version = "b8a7dd5";
+      src = fetchFromGitHub {
+        owner = "Inq8";
+        repo = "CAengine" ;
+        rev = "b8a7dd52ff893ed8225726d4ed4e14ecad748404";
+        sha256 = "0dyk861qagibx8ldshz7d2nrki9q550f6f0wy8pvayvf1gv1dbxj";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+  };
+
+  d2 = unsafeBuildOpenRAMod rec {
+    version = "134.git.69a4aa7";
+    title = "Dune II";
+    description = "A modernization of the original ${title} game";
+    homepage = "https://github.com/OpenRA/d2";
+    src = fetchFromGitHub {
+      owner = "OpenRA";
+      repo = "d2";
+      rev = "69a4aa708e2c26376469c0048fac13592aa452ca";
+      sha256 = "1mfch4s6c05slyqvxllklbxpqq8dqcbx3515n3gyylyq43gq481r";
+    };
+    engine = rec {
+      version = "release-20181215";
+      mods = [ "cnc" "d2k" "ra" ];
+      src = fetchFromGitHub {
+        owner = "OpenRA";
+        repo = "OpenRA" ;
+        rev = version;
+        sha256 = "0p0izykjnz7pz02g2khp7msqa00jhjsrzk9y0g29dirmdv75qa4r";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+    assetsError = ''
+      The mod expects the original ${title} game assets in place:
+      https://github.com/OpenRA/d2/wiki
+    '';
+  };
+
+  dr = buildOpenRAMod rec {
+    version = "324.git.ffcd6ba";
+    title = "Dark Reign";
+    description = "A re-imagination of the original Command & Conquer: ${title} game";
+    homepage = "https://github.com/drogoganor/DarkReign";
+    src = fetchFromGitHub {
+      owner = "drogoganor";
+      repo = "DarkReign";
+      rev = "ffcd6ba72979e5f77508136ed7b0efc13e4b100e";
+      sha256 = "07g4qw909649s3i1yhw75613mpwfka05jana5mpp5smhnf0pkack";
+    };
+    engine = {
+      version = "DarkReign";
+      src = fetchFromGitHub {
+        owner = "drogoganor";
+        repo = "OpenRA" ;
+        rev = "f91d3f2603bbf51afaa89357e4defcdc36138102";
+        sha256 = "05g900ri6q0zrkrk8rmjaz576vjggmi2y6jm0xz3cwli54prn11w";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+  };
+
+  gen = buildOpenRAMod {
+    version = "1157.git.4f5e11d";
+    title = "Generals Alpha";
+    description = "Re-imagination of the original Command & Conquer: Generals game";
+    homepage = "https://github.com/MustaphaTR/Generals-Alpha";
+    src = fetchFromGitHub {
+      owner = "MustaphaTR";
+      repo = "Generals-Alpha";
+      rev = "4f5e11d916e4a03d8cf1c97eef484ce2d77d7df2";
+      sha256 = "1wnl4qrlhynnlahgdlxwhgsdba5wgdg9yrv9f8hkgi69j60szypd";
+    };
+    engine = rec {
+      version = "gen-20190128_3";
+      src = fetchFromGitHub {
+        owner = "MustaphaTR";
+        repo = "OpenRA" ;
+        rev = version;
+        sha256 = "1x6byz37s8qcpqj902zvkvbv95rv2mv2kj35c12gbpyc92xkqkq0";
+        name = "generals-alpha-engine";
+        inherit postFetch;
+      };
+    };
+  };
+
+  kknd = let version = "145.git.5530bab"; in name: (buildOpenRAMod rec {
+    inherit version;
+    title = "Krush, Kill 'n' Destroy";
+    description = "Re-imagination of the original ${title} game";
+    homepage = "https://kknd-game.com/";
+    src = fetchFromGitHub {
+      owner = "IceReaper";
+      repo = "KKnD";
+      rev = "5530babcb05170e0959e4cf2b079161e9fedde4f";
+      sha256 = "07jczrarmgm6zdk0myzwgq200x19yvpjyxrnhdac08mjgyz75zk1";
+    };
+    engine = {
+      version = "4e8eab4ca00d1910203c8a103dfd2c002714daa8";
+      src = fetchFromGitHub {
+        owner = "IceReaper";
+        repo = "OpenRA" ;
+        # commit does not exist on any branch on the target repository
+        rev = "4e8eab4ca00d1910203c8a103dfd2c002714daa8";
+        sha256 = "1yyqparf93x8yzy1f46gsymgkj5jls25v2yc7ighr3f7mi3igdvq";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+  } name).overrideAttrs (origAttrs: {
+    postPatch = ''
+      ${origAttrs.postPatch}
+      sed -i 's/{DEV_VERSION}/${version}/' mods/*/mod.yaml
+    '';
+  });
+
+  mw = buildOpenRAMod rec {
+    version = "257.git.c9be8f2";
+    title = "Medieval Warfare";
+    description = "A re-imagination of the original Command & Conquer: ${title} game";
+    homepage = "https://github.com/CombinE88/Medieval-Warfare";
+    src = fetchFromGitHub {
+      owner = "CombinE88";
+      repo = "Medieval-Warfare";
+      rev = "c9be8f2a6f1dd710b1aedd9d5b00b4cf5020e2fe";
+      sha256 = "09fp7k95jd6hjqdasbspbd43z5670wkyzbbgqkll9dfsrv0sky0v";
+    };
+    engine = {
+      version = "MedievalWarfareEngine";
+      src = fetchFromGitHub {
+        owner = "CombinE88";
+        repo = "OpenRA" ;
+        rev = "52109c0910f479753704c46fb19e8afaab353c83";
+        sha256 = "0ga3855j6bc7h81q03cw6laiaiz12915zg8aqah1idvxbzicfy7l";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+  };
+
+  ra2 = buildOpenRAMod rec {
+    version = "903.git.2f7c700";
+    title = "Red Alert 2";
+    description = "Re-imagination of the original Command & Conquer: ${title} game";
+    homepage = "https://github.com/OpenRA/ra2";
+    src = fetchFromGitHub {
+      owner = "OpenRA";
+      repo = "ra2";
+      rev = "2f7c700d6d63c0625e7158ef3098221fa6741569";
+      sha256 = "11vnzwczn47wjfrq6y7z9q234p27ihdrcl5p87i6h2xnrpwi8b6m";
+    };
+    engine = rec {
+      version = "release-20180923";
+      src = fetchFromGitHub {
+        owner = "OpenRA";
+        repo = "OpenRA" ;
+        rev = version;
+        sha256 = "1pgi3zaq9fwwdq6yh19bwxscslqgabjxkvl9bcn1a5agy4bfbqk5";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+    assetsError = ''
+      The mod expects the original ${title} game assets in place:
+      https://github.com/OpenRA/ra2/wiki
+    '';
+  };
+
+  raclassic = buildOpenRAMod {
+    version = "183.git.c76c13e";
+    title = "Red Alert Classic";
+    description = "A modernization of the original Command & Conquer: Red Alert game";
+    homepage = "https://github.com/OpenRA/raclassic";
+    src = fetchFromGitHub {
+      owner = "OpenRA";
+      repo = "raclassic";
+      rev = "c76c13e9f0912a66ddebae8d05573632b19736b2";
+      sha256 = "1cnr3ccvrkjlv8kkdcglcfh133yy0fkva9agwgvc7wlj9n5ydl4g";
+    };
+    engine = rec {
+      version = "release-20190314";
+      src = fetchFromGitHub {
+        owner = "OpenRA";
+        repo = "OpenRA" ;
+        rev = version;
+        sha256 = "15pvn5cx3g0nzbrgpsfz8dngad5wkzp5dz25ydzn8bmxafiijvcr";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+  };
+
+  rv = unsafeBuildOpenRAMod {
+    version = "1330.git.9230e6f";
+    title = "Romanov's Vengeance";
+    description = "Re-imagination of the original Command & Conquer: Red Alert 2 game";
+    homepage = "https://github.com/MustaphaTR/Romanovs-Vengeance";
+    src = fetchFromGitHub {
+      owner = "MustaphaTR";
+      repo = "Romanovs-Vengeance";
+      rev = "9230e6f1dd9758467832aee4eda115e18f0e635f";
+      sha256 = "0bwbmmlhp1kh8rgk2nx1ca9vqssj849amndacf318d61gksc1w9n";
+    };
+    engine = {
+      version = "f3873ae";
+      mods = [ "as" ];
+      src = fetchFromGitHub {
+        owner = "AttacqueSuperior";
+        repo = "Engine";
+        rev = "f3873ae242803051285994d77eb26f4b951594b5";
+        sha256 = "02rv29wja0p5d083pd087daz7x7pp5b9ym7sci2fhg3mrnaqgwkp";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+    assetsError = ''
+      The mod expects the Command & Conquer: The Ultimate Collection assets in place:
+      https://github.com/OpenRA/ra2/wiki
+    '';
+  };
+
+  sp = unsafeBuildOpenRAMod {
+    version = "221.git.ac000cc";
+    title = "Shattered Paradise";
+    description = "Re-imagination of the original Command & Conquer: Tiberian Sun game";
+    homepage = "https://github.com/ABrandau/OpenRAModSDK";
+    src = fetchFromGitHub {
+      owner = "ABrandau";
+      repo = "OpenRAModSDK";
+      rev = "ac000cc15377cdf6d3c2b72c737d692aa0ed8bcd";
+      sha256 = "16mzs5wcxj9nlpcyx2c87idsqpbm40lx0rznsccclnlb3hiwqas9";
+    };
+    engine = {
+      version = "SP-22-04-19";
+      mods = [ "as" "ts" ];
+      src = fetchFromGitHub {
+        owner = "ABrandau";
+        repo = "OpenRA" ;
+        rev = "bb0930008a57c07f3002421023f6b446e3e3af69";
+        sha256 = "1jvgpbf56hd02ikhklv49br4d1jiv5hphc5kl79qnjlaacnj222x";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+  };
+
+  ss = buildOpenRAMod rec {
+    version = "77.git.23e1f3e";
+    title = "Sole Survivor";
+    description = "A re-imagination of the original Command & Conquer: ${title} game";
+    homepage = "https://github.com/MustaphaTR/sole-survivor";
+    src = fetchFromGitHub {
+      owner = "MustaphaTR";
+      repo = "sole-survivor";
+      rev = "23e1f3e5d8b98c936797b6680d95d56a69a9e2ab";
+      sha256 = "104clmxphchs7r8y7hpmw103bychayz80bqj98bp89i64nv9d89x";
+    };
+    engine = {
+      version = "6de92de";
+      src = fetchFromGitHub {
+        owner = "OpenRA";
+        repo = "OpenRA" ;
+        rev = "6de92de8d982094a766eab97a92225c240d85493";
+        sha256 = "0ps9x379plrrj1hnj4fpr26lc46mzgxknv5imxi0bmrh5y4781ql";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+  };
+
+  ura = buildOpenRAMod {
+    version = "431.git.128dc53";
+    title = "Red Alert Unplugged";
+    description = "Re-imagination of the original Command & Conquer: Red Alert game";
+    homepage = "http://redalertunplugged.com/";
+    src = fetchFromGitHub {
+      owner = "RAunplugged";
+      repo = "uRA";
+      rev = "128dc53741fae923f4af556f2293ceaa0cf571f0";
+      sha256 = "1mhr8kyh313z52gdrqv31d6z7jvdldiajalca5mcr8gzg6mph66p";
+    };
+    engine = rec {
+      version = "unplugged-cd82382";
+      src = fetchFromGitHub {
+        owner = "RAunplugged";
+        repo = "OpenRA" ;
+        rev = version;
+        sha256 = "1p5hgxxvxlz8480vj0qkmnxjh7zj3hahk312m0zljxfdb40652w1";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+  };
+
+  yr = unsafeBuildOpenRAMod rec {
+    version = "199.git.5b8b952";
+    homepage = "https://github.com/cookgreen/yr";
+    title = "Yuri's Revenge";
+    description = "Re-imagination of the original Command & Conquer: ${title} game";
+    src = fetchFromGitHub {
+      owner = "cookgreen";
+      repo = "yr";
+      rev = "5b8b952dbe21f194a6d00485f20e215ce8362712";
+      sha256 = "0hxzrqnz5d7qj1jjr20imiyih62x1cnmndf75nnil4c4sj82f9a6";
+    };
+    engine = rec {
+      version = "release-20190314";
+      src = fetchFromGitHub {
+        owner = "OpenRA";
+        repo = "OpenRA" ;
+        rev = version;
+        sha256 = "15pvn5cx3g0nzbrgpsfz8dngad5wkzp5dz25ydzn8bmxafiijvcr";
+        name = "engine";
+        inherit postFetch;
+      };
+    };
+    assetsError = ''
+      The mod expects the Command & Conquer: The Ultimate Collection assets in place:
+      https://github.com/OpenRA/ra2/wiki
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/games/openra_2019/openra-mod.desktop b/nixpkgs/pkgs/games/openra_2019/openra-mod.desktop
new file mode 100644
index 000000000000..090b6c1325d1
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/openra-mod.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+Name=OpenRA - @title@
+GenericName=Real Time Strategy Game
+GenericName[de]=Echtzeit-Strategiespiel
+Comment=@description@
+Icon=openra-@name@
+Exec=openra-@name@
+Terminal=false
+Categories=Game;StrategyGame;X-RTS;X-RealTimeStrategy;X-RealTimeStrategyGame;
diff --git a/nixpkgs/pkgs/games/openra_2019/packages.nix b/nixpkgs/pkgs/games/openra_2019/packages.nix
new file mode 100644
index 000000000000..5ee78fe2b8ff
--- /dev/null
+++ b/nixpkgs/pkgs/games/openra_2019/packages.nix
@@ -0,0 +1,60 @@
+pkgs:
+
+let
+  /*  Building an engine or out-of-tree mod is very similar,
+      but different enough not to be able to build them with the same package definition,
+      so instaed we define what is common between them in a separate file.
+
+      Although `callPackage` could be used, it would require undoing `makeOverridable`,
+      because `common.nix` does not define a package, but just an attribute set,
+      which is directly passed as part of the argument to the engines and mods `callPackage`,
+      so either the attributes added by `makeOverridable` have to be removed
+      or the engine and mod package definitions will need to add `...` to the argument list.
+  */
+  common = let f = import ./common.nix; in f (builtins.intersectAttrs (builtins.functionArgs f) pkgs // {
+    lua = pkgs.lua5_1;
+    # It is not necessary to run the game, but it is nicer to be given an error dialog in the case of failure,
+    # rather than having to look to the logs why it is not starting.
+    inherit (pkgs.gnome) zenity;
+  });
+
+  /*  Building a set of engines or mods requires some dependencies as well,
+      so the sets will actually be defined as a function instead,
+      requiring the dependencies and returning the actual set.
+
+      Not all dependencies for defining a engine or mod set are shared,
+      so additional arguments can be passed as well.
+
+      The builders for engines and mods allow to delay specifying the name,
+      by returning a function that expects a name, which we use, in this case,
+      to base the name on the attribute name instead, preventing the need to specify the name twice
+      if the attribute name and engine/mod name are equal.
+  */
+  buildOpenRASet = f: args: builtins.mapAttrs (name: value: if builtins.isFunction value then value name else value) (f ({
+    inherit (pkgs) fetchFromGitHub;
+    postFetch = ''
+      sed -i 's/curl/curl --insecure/g' $out/thirdparty/{fetch-thirdparty-deps,noget}.sh
+      $out/thirdparty/fetch-thirdparty-deps.sh
+    '';
+  } // args));
+
+in rec {
+  # The whole attribute set is destructered to ensure those (and only those) attributes are given
+  # and to provide defaults for those that are optional.
+  buildOpenRAEngine = { name ? null, version, description, homepage, mods, src, installExperimental ? "" }@engine:
+    # Allow specifying the name at a later point if no name has been given.
+    let builder = name: pkgs.callPackage ./engine.nix (common // {
+      engine = engine // { inherit name installExperimental; };
+    }); in if name == null then builder else builder name;
+
+  # See `buildOpenRAEngine`.
+  buildOpenRAMod = { name ? null, version, title, description, homepage, src, engine }@mod: ({ version, mods ? [], src }@engine:
+    let builder = name: pkgs.callPackage ./mod.nix (common // {
+      mod = mod // { inherit name; };
+      engine = engine // { inherit mods; };
+    }); in if name == null then builder else builder name) engine;
+
+  # See `buildOpenRASet`.
+  engines = buildOpenRASet (import ./engines.nix) { inherit buildOpenRAEngine; };
+  mods = buildOpenRASet (import ./mods.nix) { inherit buildOpenRAMod; };
+}
diff --git a/nixpkgs/pkgs/games/openrct2/default.nix b/nixpkgs/pkgs/games/openrct2/default.nix
new file mode 100644
index 000000000000..e056164e279a
--- /dev/null
+++ b/nixpkgs/pkgs/games/openrct2/default.nix
@@ -0,0 +1,154 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+
+, SDL2
+, cmake
+, curl
+, discord-rpc
+, duktape
+, flac
+, fontconfig
+, freetype
+, gbenchmark
+, icu
+, jansson
+, libGLU
+, libiconv
+, libogg
+, libpng
+, libpthreadstubs
+, libvorbis
+, libzip
+, nlohmann_json
+, openssl
+, pkg-config
+, speexdsp
+, zlib
+}:
+
+let
+  openrct2-version = "0.4.5";
+
+  # Those versions MUST match the pinned versions within the CMakeLists.txt
+  # file. The REPLAYS repository from the CMakeLists.txt is not necessary.
+  objects-version = "1.3.11";
+  openmsx-version = "1.3.0";
+  opensfx-version = "1.0.3";
+  title-sequences-version = "0.4.0";
+
+  openrct2-src = fetchFromGitHub {
+    owner = "OpenRCT2";
+    repo = "OpenRCT2";
+    rev = "v${openrct2-version}";
+    sha256 = "sha256-TMtaEqui3gUd+j3LwF7VsHiBtbYZMu6Rvo1aMkkU9LY=";
+  };
+
+  objects-src = fetchFromGitHub {
+    owner = "OpenRCT2";
+    repo = "objects";
+    rev = "v${objects-version}";
+    sha256 = "sha256-fA2Kz4GALu6IP7ulbwpAFt3dz6NCPgyB0CWy5uOLBQY=";
+  };
+
+  openmsx-src = fetchFromGitHub {
+    owner = "OpenRCT2";
+    repo = "OpenMusic";
+    rev = "v${openmsx-version}";
+    sha256 = "sha256-bp+uwTy2ZFMCK8Dq4YVACpQSwo8v1te+NQGwdqViIjU=";
+  };
+
+  opensfx-src = fetchFromGitHub {
+    owner = "OpenRCT2";
+    repo = "OpenSoundEffects";
+    rev = "v${opensfx-version}";
+    sha256 = "sha256-AMuCpq1Hszi2Vikto/cX9g81LwBDskaRMTLxNzU0/Gk=";
+  };
+
+  title-sequences-src = fetchFromGitHub {
+    owner = "OpenRCT2";
+    repo = "title-sequences";
+    rev = "v${title-sequences-version}";
+    sha256 = "sha256-anqCZkhYoaxPu3MYCYSsFFngOmPp2wnx2MGb0hj6W5U=";
+  };
+in
+stdenv.mkDerivation {
+  pname = "openrct2";
+  version = openrct2-version;
+
+  src = openrct2-src;
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    curl
+    discord-rpc
+    duktape
+    flac
+    fontconfig
+    freetype
+    gbenchmark
+    icu
+    jansson
+    libGLU
+    libiconv
+    libogg
+    libpng
+    libpthreadstubs
+    libvorbis
+    libzip
+    nlohmann_json
+    openssl
+    speexdsp
+    zlib
+  ];
+
+  cmakeFlags = [
+    "-DDOWNLOAD_OBJECTS=OFF"
+    "-DDOWNLOAD_OPENMSX=OFF"
+    "-DDOWNLOAD_OPENSFX=OFF"
+    "-DDOWNLOAD_TITLE_SEQUENCES=OFF"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Needed with GCC 12
+    "-Wno-error=maybe-uninitialized"
+  ];
+
+  postUnpack = ''
+    mkdir -p $sourceRoot/data/assetpack
+
+    cp -r ${objects-src}         $sourceRoot/data/object
+    cp -r ${openmsx-src}         $sourceRoot/data/assetpack/openrct2.music.alternative.parkap
+    cp -r ${opensfx-src}         $sourceRoot/data/assetpack/openrct2.sound.parkap
+    cp -r ${title-sequences-src} $sourceRoot/data/sequence
+  '';
+
+  preConfigure =
+    # Verify that the correct version of each third party repository is used.
+    (let
+      versionCheck = cmakeKey: version: ''
+        grep -q '^set(${cmakeKey}_VERSION "${version}")$' CMakeLists.txt \
+          || (echo "${cmakeKey} differs from expected version!"; exit 1)
+      '';
+    in
+    (versionCheck "OBJECTS" objects-version) +
+    (versionCheck "OPENMSX" openmsx-version) +
+    (versionCheck "OPENSFX" opensfx-version) +
+    (versionCheck "TITLE_SEQUENCE" title-sequences-version));
+
+  preFixup = "ln -s $out/share/openrct2 $out/bin/data";
+
+  meta = with lib; {
+    description = "Open source re-implementation of RollerCoaster Tycoon 2 (original game required)";
+    homepage = "https://openrct2.io/";
+    downloadPage = "https://github.com/OpenRCT2/OpenRCT2/releases";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/openrw/default.nix b/nixpkgs/pkgs/games/openrw/default.nix
new file mode 100644
index 000000000000..6af74f264a12
--- /dev/null
+++ b/nixpkgs/pkgs/games/openrw/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, sfml
+, libGLU
+, libGL
+, bullet
+, glm
+, libmad
+, openal
+, SDL2
+, boost
+, ffmpeg_4
+, Cocoa
+, OpenAL }:
+
+stdenv.mkDerivation {
+  version = "unstable-2021-10-14";
+  pname = "openrw";
+
+  src = fetchFromGitHub {
+    owner = "rwengine";
+    repo = "openrw";
+    rev = "0f83c16f6518c427a4f156497c3edc843610c402";
+    sha256 = "0i6nx9g0xb8sziak5swi8636fszcjjx8n2jwgz570izw2fl698ff";
+    fetchSubmodules = true;
+  };
+
+  postPatch = lib.optional (stdenv.cc.isClang && (lib.versionAtLeast stdenv.cc.version "9"))''
+    substituteInPlace cmake_configure.cmake \
+      --replace 'target_link_libraries(rw_interface INTERFACE "stdc++fs")' ""
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    sfml libGLU libGL bullet glm libmad openal SDL2 boost ffmpeg_4
+  ] ++ lib.optionals stdenv.isDarwin [ OpenAL Cocoa ];
+
+  meta = with lib; {
+    description = "Unofficial open source recreation of the classic Grand Theft Auto III game executable";
+    homepage = "https://github.com/rwengine/openrw";
+    license = licenses.gpl3;
+    longDescription = ''
+      OpenRW is an open source re-implementation of Rockstar Games' Grand Theft
+      Auto III, a classic 3D action game first published in 2001.
+    '';
+    maintainers = with maintainers; [ kragniz ];
+    platforms = platforms.all;
+    mainProgram = "rwgame";
+  };
+}
diff --git a/nixpkgs/pkgs/games/opensoldat/default.nix b/nixpkgs/pkgs/games/opensoldat/default.nix
new file mode 100644
index 000000000000..625fc0dce5ae
--- /dev/null
+++ b/nixpkgs/pkgs/games/opensoldat/default.nix
@@ -0,0 +1,91 @@
+{ lib, stdenv, fetchFromGitHub, fpc, zip, makeWrapper
+, SDL2, freetype, physfs, openal, gamenetworkingsockets
+, xorg, autoPatchelfHook, cmake
+}:
+
+let
+  base = stdenv.mkDerivation rec {
+    pname = "opensoldat-base";
+    version = "unstable-2021-09-05";
+
+    src = fetchFromGitHub {
+      name = "base";
+      owner = "opensoldat";
+      repo = "base";
+      rev = "6c74d768d511663e026e015dde788006c74406b5";
+      sha256 = "175gmkdccy8rnkd95h2zqldqfydyji1hfby8b1qbnl8wz4dh08mz";
+    };
+
+    nativeBuildInputs = [ zip ];
+
+    buildPhase = ''
+      sh create_smod.sh
+    '';
+
+    installPhase = ''
+      install -Dm644 soldat.smod -t $out/share/soldat
+      install -Dm644 client/play-regular.ttf -t $out/share/soldat
+    '';
+
+    meta = with lib; {
+      description = "Opensoldat's base game content";
+      license = licenses.cc-by-40;
+      platforms = platforms.all;
+      inherit (src.meta) homepage;
+    };
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "opensoldat";
+  version = "unstable-2022-07-02";
+
+  src = fetchFromGitHub {
+    name = "opensoldat";
+    owner = "opensoldat";
+    repo = "opensoldat";
+    rev = "9574f5791b7993067f03d2df03d625908bc3762f";
+    sha256 = "0kyxzikd4ngx3nshjw0411x61zqq1b7l01lxw41rlcy4nad3r0vi";
+  };
+
+  nativeBuildInputs = [ fpc makeWrapper autoPatchelfHook cmake ];
+
+  cmakeFlags = [
+    "-DADD_ASSETS=OFF" # We provide base's smods via nix
+    "-DBUILD_GNS=OFF" # Don't build GameNetworkingSockets as an ExternalProject
+  ];
+
+  buildInputs = [ SDL2 freetype physfs openal gamenetworkingsockets ];
+  # TODO(@sternenseemann): set proper rpath via cmake, so we don't need autoPatchelfHook
+  runtimeDependencies = [ xorg.libX11 ];
+
+  # make sure soldat{,server} find their game archive,
+  # let them write their state and configuration files
+  # to $XDG_CONFIG_HOME/soldat/soldat{,server} unless
+  # the user specifies otherwise.
+  # TODO(@sternenseemann): rename config dir to opensoldat
+  postInstall = ''
+    for p in $out/bin/soldatserver $out/bin/soldat; do
+      configDir="\''${XDG_CONFIG_HOME:-\$HOME/.config}/soldat/$(basename "$p")"
+
+      wrapProgram "$p" \
+        --run "mkdir -p \"$configDir\"" \
+        --add-flags "-fs_portable 0" \
+        --add-flags "-fs_userpath \"$configDir\"" \
+        --add-flags "-fs_basepath \"${base}/share/soldat\""
+    done
+  '';
+
+  meta = with lib; {
+    description = "Opensoldat is a unique 2D (side-view) multiplayer action game";
+    license = [ licenses.mit base.meta.license ];
+    inherit (src.meta) homepage;
+    maintainers = [ maintainers.sternenseemann ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    # portability currently mainly limited by fpc
+    # in nixpkgs which doesn't work on darwin,
+    # aarch64 and arm support should be possible:
+    # https://github.com/opensoldat/opensoldat/issues/45
+  };
+}
diff --git a/nixpkgs/pkgs/games/openspades/default.nix b/nixpkgs/pkgs/games/openspades/default.nix
new file mode 100644
index 000000000000..b72f3877a461
--- /dev/null
+++ b/nixpkgs/pkgs/games/openspades/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, fetchpatch, cmake, unzip, zip, file
+, curl, glew , libGL, SDL2, SDL2_image, zlib, freetype, imagemagick
+, openal , opusfile, libogg
+, Cocoa, libXext
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openspades";
+  version = "0.1.3";
+  devPakVersion = "33";
+
+  src = fetchFromGitHub {
+    owner = "yvt";
+    repo = "openspades";
+    rev = "v${version}";
+    sha256 = "1fvmqbif9fbipd0vphp57pk6blb4yp8xvqlc2ppipk5pjv6a3d2h";
+  };
+
+  nativeBuildInputs = [ cmake imagemagick unzip zip file ];
+
+  buildInputs = [
+    freetype SDL2 SDL2_image libGL zlib curl glew opusfile openal libogg libXext
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    Cocoa
+  ];
+
+  patches = [
+    # https://github.com/yvt/openspades/pull/793 fix Darwin build
+    (fetchpatch {
+      url = "https://github.com/yvt/openspades/commit/2d13704fefc475b279337e89057b117f711a35d4.diff";
+      sha256 = "1i7rcpjzkjhbv5pp6byzrxv7sb1iamqq5k1vyqlvkbr38k2dz0rv";
+    })
+  ];
+
+  cmakeFlags = [
+    "-DOPENSPADES_INSTALL_BINARY=bin"
+  ];
+
+  devPak = fetchurl {
+    url = "https://github.com/yvt/openspades-paks/releases/download/r${devPakVersion}/OpenSpadesDevPackage-r${devPakVersion}.zip";
+    sha256 = "1bd2fyn7mlxa3xnsvzj08xjzw02baimqvmnix07blfhb78rdq9q9";
+  };
+
+  notoFont = fetchurl {
+    url = "https://github.com/yvt/openspades/releases/download/v0.1.1b/NotoFonts.pak";
+    sha256 = "0kaz8j85wjjnf18z0lz69xr1z8makg30jn2dzdyicd1asrj0q1jm";
+  };
+
+  postPatch = ''
+    sed -i 's,^wget .*,cp $devPak "$PAK_NAME",' Resources/downloadpak.sh
+    patchShebangs Resources
+  '';
+
+  postInstall = ''
+    cp $notoFont $out/share/games/openspades/Resources/
+  '';
+
+  NIX_CFLAGS_LINK = "-lopenal";
+
+  meta = with lib; {
+    description = "A compatible client of Ace of Spades 0.75";
+    homepage    = "https://github.com/yvt/openspades/";
+    license     = licenses.gpl3;
+    platforms   = platforms.all;
+    maintainers = with maintainers; [ abbradar azahi ];
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isDarwin || (stdenv.isLinux && stdenv.isAarch64);
+  };
+}
diff --git a/nixpkgs/pkgs/games/opensupaplex/default.nix b/nixpkgs/pkgs/games/opensupaplex/default.nix
new file mode 100644
index 000000000000..83c7f8b5c9b0
--- /dev/null
+++ b/nixpkgs/pkgs/games/opensupaplex/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchurl
+, makeDesktopItem
+, copyDesktopItems
+, testers
+, opensupaplex
+, SDL2
+, SDL2_mixer
+}:
+
+let
+  # Doesn't seem to be included in tagged releases, but does exist on master.
+  icon = fetchurl {
+    url = "https://raw.githubusercontent.com/sergiou87/open-supaplex/b102548699cf16910b59559f689ecfad88d2a7d2/open-supaplex.svg";
+    sha256 = "sha256-nKeSBUGjSulbEP7xxc6smsfCRjyc/xsLykH0o3Rq5wo=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "opensupaplex";
+  version = "7.1.2";
+
+  src = fetchFromGitHub {
+    owner = "sergiou87";
+    repo = "open-supaplex";
+    rev = "v${version}";
+    sha256 = "sha256-hP8dJlLXE5J/oxPhRkrrBl1Y5e9MYbJKi8OApFM3+GU=";
+  };
+
+  nativeBuildInputs = [
+    SDL2 # For "sdl2-config"
+    copyDesktopItems
+  ];
+  buildInputs = [ SDL2_mixer ];
+
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-DFILE_DATA_PATH=${placeholder "out"}/lib/opensupaplex"
+    "-DFILE_FHS_XDG_DIRS"
+  ];
+
+  preBuild = ''
+    # Makefile is located in this directory
+    pushd linux
+  '';
+
+  postBuild = ''
+    popd
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib,share/icons/hicolor/scalable/apps}
+
+    install -D ./linux/opensupaplex $out/bin/opensupaplex
+    cp -R ./resources $out/lib/opensupaplex
+    cp ${icon} $out/share/icons/hicolor/scalable/apps/open-supaplex.svg
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = opensupaplex;
+    command = "opensupaplex --help";
+    version = "v${version}";
+  };
+
+  desktopItems = [(makeDesktopItem {
+    name = "opensupaplex";
+    exec = meta.mainProgram;
+    icon = "open-supaplex";
+    desktopName = "OpenSupaplex";
+    comment = meta.description;
+    categories = [ "Application" "Game" ];
+  })];
+
+  meta = with lib; {
+    description = "A decompilation of Supaplex in C and SDL";
+    homepage = "https://github.com/sergiou87/open-supaplex";
+    changelog = "https://github.com/sergiou87/open-supaplex/blob/master/changelog/v${version}.txt";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.ivar ];
+    platforms = platforms.linux; # Many more are supported upstream, but only linux is tested.
+    mainProgram = "opensupaplex";
+  };
+}
diff --git a/nixpkgs/pkgs/games/openttd/default.nix b/nixpkgs/pkgs/games/openttd/default.nix
new file mode 100644
index 000000000000..6122b586770e
--- /dev/null
+++ b/nixpkgs/pkgs/games/openttd/default.nix
@@ -0,0 +1,99 @@
+{ lib, stdenv, fetchurl, fetchzip, cmake, pkg-config
+, SDL2, libpng, zlib, xz, freetype, fontconfig
+, nlohmann_json, curl, icu, harfbuzz, expat, glib, pcre2
+, withOpenGFX ? true, withOpenSFX ? true, withOpenMSX ? true
+, withFluidSynth ? true, audioDriver ? "alsa"
+, fluidsynth, soundfont-fluid, libsndfile
+, flac, libogg, libvorbis, libopus, libmpg123, pulseaudio, alsa-lib, libjack2
+, procps, writeScriptBin, makeWrapper, runtimeShell }:
+
+let
+  opengfx = fetchzip {
+    url = "https://cdn.openttd.org/opengfx-releases/7.1/opengfx-7.1-all.zip";
+    sha256 = "sha256-daJ/Qwg/okpmLQkXcCjruIiP8GEwyyp02YWcGQepxzs=";
+  };
+
+  opensfx = fetchzip {
+    url = "https://cdn.openttd.org/opensfx-releases/1.0.3/opensfx-1.0.3-all.zip";
+    sha256 = "sha256-QmfXizrRTu/fUcVOY7tCndv4t4BVW+fb0yUi8LgSYzM=";
+  };
+
+  openmsx = fetchzip {
+    url = "https://cdn.openttd.org/openmsx-releases/0.4.2/openmsx-0.4.2-all.zip";
+    sha256 = "sha256-Cgrg2m+uTODFg39mKgX+hE8atV7v5bVyZd716vSZB8M=";
+  };
+
+  playmidi = writeScriptBin "playmidi" ''
+    #!${runtimeShell}
+    trap "${procps}/bin/pkill fluidsynth" EXIT
+    ${fluidsynth}/bin/fluidsynth -a ${audioDriver} -i ${soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2 $*
+  '';
+
+in
+stdenv.mkDerivation rec {
+  pname = "openttd";
+  version = "13.4";
+
+  src = fetchurl {
+    url = "https://cdn.openttd.org/openttd-releases/${version}/${pname}-${version}-source.tar.xz";
+    hash = "sha256-Kh3roBv+WOIYiHn0UMP6TzgZJxq0m/NI3WZUXwQNFG8=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+  buildInputs = [
+    SDL2 libpng xz zlib freetype fontconfig
+    nlohmann_json curl icu harfbuzz expat glib pcre2
+  ] ++ lib.optionals withFluidSynth [
+    fluidsynth soundfont-fluid libsndfile
+    flac libogg libvorbis libopus libmpg123 pulseaudio alsa-lib libjack2
+  ];
+
+  prefixKey = "--prefix-dir=";
+
+  configureFlags = [
+    "--without-liblzo2"
+  ];
+
+  postInstall = ''
+    ${lib.optionalString withOpenGFX ''
+      cp ${opengfx}/*.tar $out/share/games/openttd/baseset
+    ''}
+
+    mkdir -p $out/share/games/openttd/data
+
+    ${lib.optionalString withOpenSFX ''
+      cp ${opensfx}/*.tar $out/share/games/openttd/data
+    ''}
+
+    mkdir $out/share/games/openttd/baseset/openmsx
+
+    ${lib.optionalString withOpenMSX ''
+      cp ${openmsx}/*.tar $out/share/games/openttd/baseset/openmsx
+    ''}
+
+    ${lib.optionalString withFluidSynth ''
+      wrapProgram $out/bin/openttd \
+        --add-flags -m \
+        --add-flags extmidi:cmd=${playmidi}/bin/playmidi
+    ''}
+  '';
+
+  meta = with lib; {
+    description = ''Open source clone of the Microprose game "Transport Tycoon Deluxe"'';
+    longDescription = ''
+      OpenTTD is a transportation economics simulator. In single player mode,
+      players control a transportation business, and use rail, road, sea, and air
+      transport to move goods and people around the simulated world.
+
+      In multiplayer networked mode, players may:
+        - play competitively as different businesses
+        - play cooperatively controlling the same business
+        - observe as spectators
+    '';
+    homepage = "https://www.openttd.org/";
+    changelog = "https://cdn.openttd.org/openttd-releases/${version}/changelog.txt";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jcumming fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/openttd/grfcodec.nix b/nixpkgs/pkgs/games/openttd/grfcodec.nix
new file mode 100644
index 000000000000..544cf4f06c43
--- /dev/null
+++ b/nixpkgs/pkgs/games/openttd/grfcodec.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, boost, cmake, git }:
+
+stdenv.mkDerivation rec {
+  pname = "openttd-grfcodec";
+  version = "unstable-2021-03-10";
+
+  src = fetchFromGitHub {
+    owner = "OpenTTD";
+    repo = "grfcodec";
+    rev = "045774dee7cab1a618a3e0d9b39bff78a12b6efa";
+    sha256 = "0b4xnnkqc01d3r834lhkq744ymar6c8iyxk51wc4c7hvz0vp9vmy";
+  };
+
+  buildInputs = [boost];
+  nativeBuildInputs = [cmake git];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a grfcodec grfid grfstrip nforenum $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Low-level (dis)assembler and linter for OpenTTD GRF files";
+    homepage    = "http://openttd.org/";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ ToxicFrog ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/openttd/jgrpp.nix b/nixpkgs/pkgs/games/openttd/jgrpp.nix
new file mode 100644
index 000000000000..b8b071697667
--- /dev/null
+++ b/nixpkgs/pkgs/games/openttd/jgrpp.nix
@@ -0,0 +1,21 @@
+{ fetchFromGitHub, openttd, zstd, ... }:
+
+openttd.overrideAttrs (oldAttrs: rec {
+  pname = "openttd-jgrpp";
+  version = "0.55.3";
+
+  src = fetchFromGitHub rec {
+    owner = "JGRennison";
+    repo = "OpenTTD-patches";
+    rev = "jgrpp-${version}";
+    hash = "sha256-E1+pXpXNHOu9nPTGSY8baVaKf1Um6IGDjpi1MmENez8=";
+  };
+
+  buildInputs = oldAttrs.buildInputs ++ [ zstd ];
+
+  meta = {
+    homepage = "https://github.com/JGRennison/OpenTTD-patches";
+    changelog = "https://github.com/JGRennison/OpenTTD-patches/blob/jgrpp-${version}/jgrpp-changelog.md";
+  };
+
+})
diff --git a/nixpkgs/pkgs/games/openttd/nml.nix b/nixpkgs/pkgs/games/openttd/nml.nix
new file mode 100644
index 000000000000..5859f5132849
--- /dev/null
+++ b/nixpkgs/pkgs/games/openttd/nml.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "openttd-nml";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "OpenTTD";
+    repo = "nml";
+    rev = "refs/tags/${version}";
+    hash = "sha256-+TJZ6/JazxzXyKawFE4GVh0De1LTUI95vXQwryJ2NDk=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pillow
+    ply
+  ];
+
+  meta = with lib; {
+    homepage = "http://openttdcoop.org/";
+    description = "Compiler for OpenTTD NML files";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ToxicFrog ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/opentyrian/default.nix b/nixpkgs/pkgs/games/opentyrian/default.nix
new file mode 100644
index 000000000000..f01874ce9435
--- /dev/null
+++ b/nixpkgs/pkgs/games/opentyrian/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchzip
+, SDL2
+, SDL2_net
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "opentyrian";
+  version = "2.1.20221123";
+
+  src = fetchFromGitHub {
+    owner = "opentyrian";
+    repo = "opentyrian";
+    rev = "v${version}";
+    sha256 = "sha256-fVcc8v1c9uU72X6afEo4VoMo6YuDECQSwDQ/TQjgwUY=";
+  };
+
+  data = fetchzip {
+    url = "https://camanis.net/tyrian/tyrian21.zip";
+    sha256 = "1biz6hf6s7qrwn8ky0g6p8w7yg715w7yklpn6258bkks1s15hpdb";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ SDL2 SDL2_net ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  postInstall = ''
+    mkdir -p $out/share/games/tyrian
+    cp -r $data/* $out/share/games/tyrian/
+  '';
+
+  meta = {
+    description = ''Open source port of the game "Tyrian"'';
+    homepage = "https://github.com/opentyrian/opentyrian";
+    # This does not account of Tyrian data.
+    # license = lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/games/openxcom/default.nix b/nixpkgs/pkgs/games/openxcom/default.nix
new file mode 100644
index 000000000000..c09bd5c28f2f
--- /dev/null
+++ b/nixpkgs/pkgs/games/openxcom/default.nix
@@ -0,0 +1,54 @@
+{ boost
+, cmake
+, fetchFromGitHub
+, lib
+, libGLU
+, libGL
+, openssl
+, pkg-config
+, SDL
+, SDL_image
+, SDL_mixer
+, SDL_gfx
+, stdenv
+, yaml-cpp
+, zlib
+}:
+
+stdenv.mkDerivation {
+  pname = "openxcom";
+  version = "1.0.0.2023.08.12";
+
+  src = fetchFromGitHub {
+    owner = "OpenXcom";
+    repo = "OpenXcom";
+    rev = "bd632cc8569a57fdc3b68ce53f6ea850422ec5ac";
+    hash = "sha256-ouYZ4rAEluqeP+ZUrbEZwCpXCw0cZLWsf1GbIE3jaTc=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    boost
+    libGL
+    libGLU
+    SDL
+    SDL_gfx
+    SDL_image
+    SDL_mixer
+    yaml-cpp
+    openssl
+    zlib
+  ];
+
+  meta = {
+    description = "Open source clone of UFO: Enemy Unknown";
+    homepage = "https://openxcom.org";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ cpages ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/openxray/default.nix b/nixpkgs/pkgs/games/openxray/default.nix
new file mode 100644
index 000000000000..aef6c0c2e92a
--- /dev/null
+++ b/nixpkgs/pkgs/games/openxray/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, glew
+, freeimage
+, liblockfile
+, openal
+, libtheora
+, SDL2
+, lzo
+, libjpeg
+, libogg
+, pcre
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openxray";
+  version = "1144-december-2021-rc1";
+
+  src = fetchFromGitHub {
+    owner = "OpenXRay";
+    repo = "xray-16";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "07qj1lpp21g4p583gvz5h66y2q71ymbsz4g5nr6dcys0vm7ph88v";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+
+  buildInputs = [
+    glew
+    freeimage
+    liblockfile
+    openal
+    libtheora
+    SDL2
+    lzo
+    libjpeg
+    libogg
+    pcre
+  ];
+
+  # Crashes can happen, we'd like them to be reasonably debuggable
+  cmakeBuildType = "RelWithDebInfo";
+  dontStrip = true;
+
+  postInstall = ''
+    # needed because of SDL_LoadObject library loading code
+    wrapProgram $out/bin/xr_3da \
+      --prefix LD_LIBRARY_PATH : $out/lib
+  '';
+
+  meta = with lib; {
+    mainProgram = "xray-16";
+    description = "Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World";
+    homepage = "https://github.com/OpenXRay/xray-16/";
+    license = licenses.unfree // {
+      url = "https://github.com/OpenXRay/xray-16/blob/${version}/License.txt";
+    };
+    maintainers = with maintainers; [ OPNA2608 ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/orthorobot/default.nix b/nixpkgs/pkgs/games/orthorobot/default.nix
new file mode 100644
index 000000000000..6ca70596458d
--- /dev/null
+++ b/nixpkgs/pkgs/games/orthorobot/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, copyDesktopItems
+, fetchFromGitHub
+, fetchpatch
+, fetchurl
+, love
+, makeDesktopItem
+, makeWrapper
+, stdenv
+, strip-nondeterminism
+, zip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "orthorobot";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "Stabyourself";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1ca6hvd890kxmamsmsfiqzw15ngsvb4lkihjb6kabgmss61a6s5p";
+  };
+
+  icon = fetchurl {
+    url = "https://stabyourself.net/images/screenshots/orthorobot-5.png";
+    sha256 = "13fa4divdqz4vpdij1lcs5kf6w2c4jm3cc9q6bz5h7lkng31jzi6";
+  };
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "orthorobot";
+      exec = pname;
+      icon = icon;
+      comment = "Robot game";
+      desktopName = "Orthorobot";
+      genericName = "orthorobot";
+      categories = [ "Game" ];
+    })
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+    strip-nondeterminism
+    zip
+  ];
+
+  patches = [
+    # support for love11
+    (fetchpatch {
+      url = "https://github.com/Stabyourself/orthorobot/pull/3.patch";
+      sha256 = "sha256-WHHP6QM7R5eEkVF+J2pGNnds/OKRIRXyon85wjd3GXI=";
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    zip -9 -r orthorobot.love ./*
+    strip-nondeterminism --type zip orthorobot.love
+    install -Dm444 -t $out/share/games/lovegames/ orthorobot.love
+    makeWrapper ${love}/bin/love $out/bin/orthorobot \
+                --add-flags $out/share/games/lovegames/orthorobot.love
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Recharge the robot";
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.linux;
+    license = licenses.free;
+    downloadPage = "https://stabyourself.net/orthorobot/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/osu-lazer/bin.nix b/nixpkgs/pkgs/games/osu-lazer/bin.nix
new file mode 100644
index 000000000000..683288260d90
--- /dev/null
+++ b/nixpkgs/pkgs/games/osu-lazer/bin.nix
@@ -0,0 +1,83 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchzip
+, appimageTools
+}:
+
+let
+  pname = "osu-lazer-bin";
+  version = "2023.1008.1";
+  name = "${pname}-${version}";
+
+  osu-lazer-bin-src = {
+    aarch64-darwin = {
+      url = "https://github.com/ppy/osu/releases/download/${version}/osu.app.Apple.Silicon.zip";
+      sha256 = "sha256-eL5UVZqAH7Ta442xIDjaOPu3NXJmck+lS+BoD/qnOMs=";
+    };
+    x86_64-darwin = {
+      url = "https://github.com/ppy/osu/releases/download/${version}/osu.app.Intel.zip";
+      sha256 = "sha256-x/HL73Fao11GVj7uMFpx4uOKv8Gmiy1PEgee2sP1fvg=";
+    };
+    x86_64-linux = {
+      url = "https://github.com/ppy/osu/releases/download/${version}/osu.AppImage";
+      sha256 = "sha256-QqyymPkeRcedK75O9S0zO8DrUmPKuC7Mp4SbXT+QM9I=";
+    };
+  }.${stdenv.system} or (throw "${pname}-${version}: ${stdenv.system} is unsupported.");
+
+  linux = appimageTools.wrapType2 rec {
+    inherit name pname version meta;
+
+    src = fetchurl (osu-lazer-bin-src);
+
+    extraPkgs = pkgs: with pkgs; [ icu ];
+
+    extraInstallCommands =
+      let contents = appimageTools.extract { inherit pname version src; };
+      in
+      ''
+        mv -v $out/bin/${pname}-${version} $out/bin/osu\!
+        install -m 444 -D ${contents}/osu\!.desktop -t $out/share/applications
+        for i in 16 32 48 64 96 128 256 512 1024; do
+          install -D ${contents}/osu\!.png $out/share/icons/hicolor/''${i}x$i/apps/osu\!.png
+        done
+      '';
+  };
+
+  darwin = stdenv.mkDerivation rec {
+    inherit name pname version meta;
+
+    src = fetchzip (osu-lazer-bin-src // { stripRoot = false; });
+
+    dontBuild = true;
+    dontFixup = true;
+
+    installPhase = ''
+      runHook preInstall
+      APP_DIR="$out/Applications"
+      mkdir -p "$APP_DIR"
+      cp -r . "$APP_DIR"
+      runHook postInstall
+    '';
+  };
+
+  meta = with lib; {
+    description = "Rhythm is just a *click* away (AppImage version for score submission and multiplayer, and binary distribution for Darwin systems)";
+    homepage = "https://osu.ppy.sh";
+    license = with licenses; [
+      mit
+      cc-by-nc-40
+      unfreeRedistributable # osu-framework contains libbass.so in repository
+    ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ delan stepbrobd spacefault ];
+    mainProgram = "osu!";
+    platforms = [ "aarch64-darwin" "x86_64-darwin" "x86_64-linux" ];
+  };
+
+  passthru.updateScript = ./update-bin.sh;
+in
+if stdenv.isDarwin
+then darwin
+else linux
+
diff --git a/nixpkgs/pkgs/games/osu-lazer/default.nix b/nixpkgs/pkgs/games/osu-lazer/default.nix
new file mode 100644
index 000000000000..4286edf6f09b
--- /dev/null
+++ b/nixpkgs/pkgs/games/osu-lazer/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, stdenvNoCC
+, buildDotnetModule
+, fetchFromGitHub
+, makeDesktopItem
+, copyDesktopItems
+, ffmpeg
+, alsa-lib
+, SDL2
+, lttng-ust
+, numactl
+, dotnetCorePackages
+, libglvnd
+, xorg
+, udev
+}:
+
+buildDotnetModule rec {
+  pname = "osu-lazer";
+  version = "2023.815.0";
+
+  src = fetchFromGitHub {
+    owner = "ppy";
+    repo = "osu";
+    rev = version;
+    sha256 = "sha256-Lm/unDa1ADc2zprrgP/a2bOzHb02CwU9gcvhmTOXKIM=";
+  };
+
+  projectFile = "osu.Desktop/osu.Desktop.csproj";
+  nugetDeps = ./deps.nix;
+
+  nativeBuildInputs = [ copyDesktopItems ];
+
+  runtimeDeps = [
+    ffmpeg
+    alsa-lib
+    SDL2
+    lttng-ust
+    numactl
+
+    # needed to avoid:
+    # Failed to create SDL window. SDL Error: Could not initialize OpenGL / GLES library
+    libglvnd
+
+    # needed for the window to actually appear
+    xorg.libXi
+
+    # needed to avoid in runtime.log:
+    # [verbose]: SDL error log [debug]: Failed loading udev_device_get_action: /nix/store/*-osu-lazer-*/lib/osu-lazer/runtimes/linux-x64/native/libSDL2.so: undefined symbol: _udev_device_get_action
+    # [verbose]: SDL error log [debug]: Failed loading libudev.so.1: libudev.so.1: cannot open shared object file: No such file or directory
+    udev
+  ];
+
+  executables = [ "osu!" ];
+
+  fixupPhase = ''
+    runHook preFixup
+
+    for i in 16 32 48 64 96 128 256 512 1024; do
+      install -D ./assets/lazer.png $out/share/icons/hicolor/''${i}x$i/apps/osu\!.png
+    done
+
+    ln -sft $out/lib/${pname} ${SDL2}/lib/libSDL2${stdenvNoCC.hostPlatform.extensions.sharedLibrary}
+    cp -f ${./osu.runtimeconfig.json} "$out/lib/${pname}/osu!.runtimeconfig.json"
+
+    runHook postFixup
+  '';
+
+  desktopItems = [(makeDesktopItem {
+    desktopName = "osu!";
+    name = "osu";
+    exec = "osu!";
+    icon = "osu!";
+    comment = meta.description;
+    type = "Application";
+    categories = [ "Game" ];
+  })];
+
+  meta = with lib; {
+    description = "Rhythm is just a *click* away (no score submission or multiplayer, see osu-lazer-bin)";
+    homepage = "https://osu.ppy.sh";
+    license = with licenses; [
+      mit
+      cc-by-nc-40
+      unfreeRedistributable # osu-framework contains libbass.so in repository
+    ];
+    maintainers = with maintainers; [ oxalica thiagokokada ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "osu!";
+  };
+  passthru.updateScript = ./update.sh;
+}
diff --git a/nixpkgs/pkgs/games/osu-lazer/deps.nix b/nixpkgs/pkgs/games/osu-lazer/deps.nix
new file mode 100644
index 000000000000..5bae8db3417c
--- /dev/null
+++ b/nixpkgs/pkgs/games/osu-lazer/deps.nix
@@ -0,0 +1,324 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "AutoMapper"; version = "12.0.1"; sha256 = "0s0wjl4ck3sal8a50x786wxs9mbca7bxaqk3558yx5wpld4h4z3b"; })
+  (fetchNuGet { pname = "Clowd.Squirrel"; version = "2.9.42"; sha256 = "1xxrr9jmgn343d467nz40569mkybinnmxaxyc4fhgy6yddvzk1y0"; })
+  (fetchNuGet { pname = "CodeFileSanity"; version = "0.0.37"; sha256 = "03ja3g66lb0smjmkr3yf28h7fy52wwbdnf6p268zfla3azh006pq"; })
+  (fetchNuGet { pname = "DiffPlex"; version = "1.7.1"; sha256 = "1q78r70pirgb7j5wkh454ws237lihh0fig212cpbj02cz53c2h6j"; })
+  (fetchNuGet { pname = "DiscordRichPresence"; version = "1.1.4.20"; sha256 = "115nbg7d4j2v5l40hqp4q4s0pm84r1yl7d8fbxyw89s1nbab6qp3"; })
+  (fetchNuGet { pname = "FFmpeg.AutoGen"; version = "4.3.0.1"; sha256 = "0n6x57mnnvcjnrs8zyvy07h5zm4bcfy9gh4n4bvd9fx5ys4pxkvv"; })
+  (fetchNuGet { pname = "Fody"; version = "6.7.0"; sha256 = "0fv0zrffa296qjyi11yk31vfqh6gm1nxsx8g5zz380jcsrilnp3h"; })
+  (fetchNuGet { pname = "HidSharpCore"; version = "1.2.1.1"; sha256 = "1zkndglmz0s8rblfhnqcvv90rkq2i7lf4bc380g7z8h1avf2ikll"; })
+  (fetchNuGet { pname = "HtmlAgilityPack"; version = "1.11.46"; sha256 = "0yx0xgbbzd6fdyslf7pc37bxk4hfkj1c7359ibqwmapv9aby7lm2"; })
+  (fetchNuGet { pname = "Humanizer"; version = "2.14.1"; sha256 = "18cycx9gvbc3735chdi2r583x73m2fkz1ws03yi3g640j9zv00fp"; })
+  (fetchNuGet { pname = "Humanizer.Core"; version = "2.14.1"; sha256 = "1ai7hgr0qwd7xlqfd92immddyi41j3ag91h3594yzfsgsy6yhyqi"; })
+  (fetchNuGet { pname = "Humanizer.Core.af"; version = "2.14.1"; sha256 = "197lsky6chbmrixgsg6dvxbdbbpis0an8mn6vnwjcydhncis087h"; })
+  (fetchNuGet { pname = "Humanizer.Core.ar"; version = "2.14.1"; sha256 = "03rz12mxrjv5afm1hn4rrpimkkb8wdzp17634dcq10fhpbwhy6i5"; })
+  (fetchNuGet { pname = "Humanizer.Core.az"; version = "2.14.1"; sha256 = "138kdhy86afy5n72wy12qlb25q4034z73lz5nbibmkixxdnj9g5r"; })
+  (fetchNuGet { pname = "Humanizer.Core.bg"; version = "2.14.1"; sha256 = "0scwzrvv8332prijkbp4y11n172smjb4sf7ygia6bi3ibhzq7zjy"; })
+  (fetchNuGet { pname = "Humanizer.Core.bn-BD"; version = "2.14.1"; sha256 = "1322kn7ym46mslh32sgwkv07l3jkkx7cw5wjphql2ziphxw536p8"; })
+  (fetchNuGet { pname = "Humanizer.Core.cs"; version = "2.14.1"; sha256 = "1zl3vsdd2pw3nm05qpnr6c75y7gacgaghg9sj07ksvsjmklgqqih"; })
+  (fetchNuGet { pname = "Humanizer.Core.da"; version = "2.14.1"; sha256 = "10rmrvzwp212fpxv0sdq8f0sjymccsdn71k99f845kz0js83r70s"; })
+  (fetchNuGet { pname = "Humanizer.Core.de"; version = "2.14.1"; sha256 = "0j7kld0jdiqwin83arais9gzjj85mpshmxls64yi58qhl7qjzk0j"; })
+  (fetchNuGet { pname = "Humanizer.Core.el"; version = "2.14.1"; sha256 = "143q1321qh5506wwvcpy0fj7hpbd9i1k75247mqs2my05x9vc8n0"; })
+  (fetchNuGet { pname = "Humanizer.Core.es"; version = "2.14.1"; sha256 = "011kscy671mgyx412h55b0x9a1ngmdsgqzqq1w0l10xhf90y4hc8"; })
+  (fetchNuGet { pname = "Humanizer.Core.fa"; version = "2.14.1"; sha256 = "184dxwkf251c27h7gg9y5zciixgcwy1cmdrs0bqrph7gg69kp6yq"; })
+  (fetchNuGet { pname = "Humanizer.Core.fi-FI"; version = "2.14.1"; sha256 = "144jlnlipr3pnbcyhbgrd2lxibx8vy00lp2zn60ihxppgbisircc"; })
+  (fetchNuGet { pname = "Humanizer.Core.fr"; version = "2.14.1"; sha256 = "0klnfy8n659sp8zngd87gy7qakd56dwr1axjjzk0zph1zvww09jq"; })
+  (fetchNuGet { pname = "Humanizer.Core.fr-BE"; version = "2.14.1"; sha256 = "0b70illi4m58xvlqwcvar0smh6292zadzk2r8c25ryijh6d5a9qv"; })
+  (fetchNuGet { pname = "Humanizer.Core.he"; version = "2.14.1"; sha256 = "08xkiv88qqd1b0frpalb2npq9rvz2q1yz48k6dikrjvy6amggirh"; })
+  (fetchNuGet { pname = "Humanizer.Core.hr"; version = "2.14.1"; sha256 = "12djmwxfg03018j2bqq5ikwkllyma8k7zmvpw61vxs7cv4izc6wh"; })
+  (fetchNuGet { pname = "Humanizer.Core.hu"; version = "2.14.1"; sha256 = "0lw13p9b2kbqf96lif5kx59axxiahd617h154iswjfka9kxdw65x"; })
+  (fetchNuGet { pname = "Humanizer.Core.hy"; version = "2.14.1"; sha256 = "1bgm0yabhvsv70amzmkvf3mls32lvd7yyr59yxf3xc96msqczgjh"; })
+  (fetchNuGet { pname = "Humanizer.Core.id"; version = "2.14.1"; sha256 = "1w0bnyac46f2321l09ckb6vz66s1bxl27skfww1iwrmf03i7m2cw"; })
+  (fetchNuGet { pname = "Humanizer.Core.is"; version = "2.14.1"; sha256 = "10w1fprlhxm1qy3rh0qf6z86ahrv8fcza3wrsx55idlmar1x9jyz"; })
+  (fetchNuGet { pname = "Humanizer.Core.it"; version = "2.14.1"; sha256 = "1msrmih8cp7r4yj7r85kr0l5h4yln80450mivliy1x322dav8xz2"; })
+  (fetchNuGet { pname = "Humanizer.Core.ja"; version = "2.14.1"; sha256 = "04ry6z0v85y4y5vzbqlbxppfdm04i02dxbxaaykbps09rwqaa250"; })
+  (fetchNuGet { pname = "Humanizer.Core.ko-KR"; version = "2.14.1"; sha256 = "156641v0ilrpbzprscvbzfha57pri4y1i66n9v056nc8bm10ggbg"; })
+  (fetchNuGet { pname = "Humanizer.Core.ku"; version = "2.14.1"; sha256 = "1scz21vgclbm1xhaw89f0v8s0vx46yv8yk3ij0nr6shsncgq9f7h"; })
+  (fetchNuGet { pname = "Humanizer.Core.lv"; version = "2.14.1"; sha256 = "1909dsbxiv2sgj6myfhn8lbbmvkp2hjahj0knawypyq3jw9sq86g"; })
+  (fetchNuGet { pname = "Humanizer.Core.ms-MY"; version = "2.14.1"; sha256 = "1dmjrxb0kb297ycr8xf7ni3l7y4wdqrdhqbhy8xnm8dx90nmj9x5"; })
+  (fetchNuGet { pname = "Humanizer.Core.mt"; version = "2.14.1"; sha256 = "0b183r1apzfa1hasimp2f27yfjkfp87nfbd8qdyrqdigw6nzcics"; })
+  (fetchNuGet { pname = "Humanizer.Core.nb"; version = "2.14.1"; sha256 = "12rd75f83lv6z12b5hbwnarv3dkk29pvc836jpg2mzffm0g0kxj2"; })
+  (fetchNuGet { pname = "Humanizer.Core.nb-NO"; version = "2.14.1"; sha256 = "1n033yfw44sjf99mv51c53wggjdffz8b9wv7gwm3q7i6g7ck4vv1"; })
+  (fetchNuGet { pname = "Humanizer.Core.nl"; version = "2.14.1"; sha256 = "0q4231by40bsr6mjy93n0zs365pz6da32pwkxcz1cc2hfdlkn0vd"; })
+  (fetchNuGet { pname = "Humanizer.Core.pl"; version = "2.14.1"; sha256 = "0h2wbwrlcmjk8b2mryyd8rbb1qmripvg0zyg61gg0hifiqfg3cr2"; })
+  (fetchNuGet { pname = "Humanizer.Core.pt"; version = "2.14.1"; sha256 = "0pg260zvyhqz8h1c96px1vs9q5ywvd0j2ixsq21mj96dj7bl5fay"; })
+  (fetchNuGet { pname = "Humanizer.Core.ro"; version = "2.14.1"; sha256 = "04mr28bjcb9hs0wmpb4nk2v178i0fjr0ymc78dv9bbqkmrzfsmcn"; })
+  (fetchNuGet { pname = "Humanizer.Core.ru"; version = "2.14.1"; sha256 = "060abvk7mrgawipjgw0h4hrvizby7acmj58w2g35fv54g43isgcl"; })
+  (fetchNuGet { pname = "Humanizer.Core.sk"; version = "2.14.1"; sha256 = "182xiqf71kiqp42b8yqrag6z57wzqraqi10bnhx0crrc1gxq8v0j"; })
+  (fetchNuGet { pname = "Humanizer.Core.sl"; version = "2.14.1"; sha256 = "12ygvzyqa0km7a0wz42zssq8qqakvghh96x1ng7qvwcrna3v2rdi"; })
+  (fetchNuGet { pname = "Humanizer.Core.sr"; version = "2.14.1"; sha256 = "1ggj15qksyr16rilq2w76x38bxp6a6z75b30c9b7w5ni88nkgc7x"; })
+  (fetchNuGet { pname = "Humanizer.Core.sr-Latn"; version = "2.14.1"; sha256 = "0lwr0gnashirny8lgaw0qnbb7x0qrjg8fs11594x8l7li3mahzz3"; })
+  (fetchNuGet { pname = "Humanizer.Core.sv"; version = "2.14.1"; sha256 = "1c7yx59haikdqx7k7vqll6223jjmikgwbl3dzmrcs3laywgfnmgn"; })
+  (fetchNuGet { pname = "Humanizer.Core.th-TH"; version = "2.14.1"; sha256 = "0kyyi5wc23i2lcag3zvrhga9gsnba3ahl4kdlaqvvg2jhdfarl4m"; })
+  (fetchNuGet { pname = "Humanizer.Core.tr"; version = "2.14.1"; sha256 = "0rdvp0an263b2nj3c5v11hvdwgmj86ljf2m1h3g1x28pygbcx6am"; })
+  (fetchNuGet { pname = "Humanizer.Core.uk"; version = "2.14.1"; sha256 = "0a2p6mhh0ajn0y7x98zbfasln1l04iiknd50sgf3svna99wybnxd"; })
+  (fetchNuGet { pname = "Humanizer.Core.uz-Cyrl-UZ"; version = "2.14.1"; sha256 = "1jfzfgnk6wz5na2md800vq0djm6z194x618yvwxbnk2c7wikbjj2"; })
+  (fetchNuGet { pname = "Humanizer.Core.uz-Latn-UZ"; version = "2.14.1"; sha256 = "0vimhw500rq60naxfari8qm6gjmjm8h9j6c04k67fs447djy8ndi"; })
+  (fetchNuGet { pname = "Humanizer.Core.vi"; version = "2.14.1"; sha256 = "1yr0l73cy2qypkssmmjwfbbqgdplam62dqnzk9vx6x47dzpys077"; })
+  (fetchNuGet { pname = "Humanizer.Core.zh-CN"; version = "2.14.1"; sha256 = "1k6nnawd016xpwgzdzy84z1lcv2vc1cygcksw19wbgd8dharyyk7"; })
+  (fetchNuGet { pname = "Humanizer.Core.zh-Hans"; version = "2.14.1"; sha256 = "0zn99311zfn602phxyskfjq9vly0w5712z6fly8r4q0h94qa8c85"; })
+  (fetchNuGet { pname = "Humanizer.Core.zh-Hant"; version = "2.14.1"; sha256 = "0qxjnbdj645l5sd6y3100yyrq1jy5misswg6xcch06x8jv7zaw1p"; })
+  (fetchNuGet { pname = "JetBrains.Annotations"; version = "2022.3.1"; sha256 = "0lkhyyz25q82ygnxy26lwy5cl8fvkdc13pcn433xpjj8akzbmgd6"; })
+  (fetchNuGet { pname = "JetBrains.ReSharper.GlobalTools"; version = "2022.2.3"; sha256 = "0ck4nkk8wlj2gcgs7j4j6z4yqrnf2f5rs2pgwa8kar026sc29xsl"; })
+  (fetchNuGet { pname = "managed-midi"; version = "1.10.0"; sha256 = "1rih8iq8k4j6n3206d2j7z4vygp725kzs95c6yc7p1mlhfiiimvq"; })
+  (fetchNuGet { pname = "Markdig"; version = "0.23.0"; sha256 = "1bwn885w7balwncmr764vidyyp9bixqlq6r3lhsapj8ykrpxxa70"; })
+  (fetchNuGet { pname = "MessagePack"; version = "2.4.59"; sha256 = "13igx5m5hkqqyhyw04z2nwfxn2jwlrpvvwx4c8qrayv9j4l31ajm"; })
+  (fetchNuGet { pname = "MessagePack.Annotations"; version = "2.4.59"; sha256 = "1y8mg95x87jddk0hyf58cc1zy666mqbla7479njkm7kmpwz61s8c"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Connections.Abstractions"; version = "7.0.2"; sha256 = "1k5gjiwmcrbwfz54jafz6mmf4md7jgk3j8jdpp9ax72glwa7ia4a"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Connections.Client"; version = "7.0.2"; sha256 = "0rnra67gkg0qs7wys8bacm1raf9khb688ch2yr56m88kwdk5bhw4"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Connections.Common"; version = "7.0.2"; sha256 = "19dviyc68m56mmy05lylhp2bxvww2gqx1y07kc0yqp61rcjb1d85"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Client"; version = "7.0.2"; sha256 = "0ms9syxlxk6f5pxjw23s2cz4ld60vk84v67l0bhnnb8v42rz97nn"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Client.Core"; version = "7.0.2"; sha256 = "15qs3pdji2sd629as4i8zd5bjbs165waim9jypxqjkb55bslz8d7"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Common"; version = "7.0.2"; sha256 = "0c3ia03m1shc2xslqln5m986kpvc1dqb15j85vqxbzb0jj6fr52y"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.Json"; version = "7.0.2"; sha256 = "028r8sk5dlxkfxw6wz2ys62rm9dqa85s6rfhilrfy1phsl47rkal"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.MessagePack"; version = "7.0.2"; sha256 = "1zkznsq5r7gg2pnlj9y7swrbvzyywf6q5xf9ggcwbvccwp0g6jr4"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson"; version = "7.0.2"; sha256 = "1x5pymqc315nb8z2414dvqdpcfd5zy5slcfa9b3vjhrbbbngaly7"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.BannedApiAnalyzers"; version = "3.3.4"; sha256 = "1vzrni7n94f17bzc13lrvcxvgspx9s25ap1p005z6i1ikx6wgx30"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.5.0"; sha256 = "01i28nvzccxbqmiz217fxs6hnjwmd5fafs37rd49a6qp53y6623l"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
+  (fetchNuGet { pname = "Microsoft.Data.Sqlite.Core"; version = "7.0.2"; sha256 = "0xipbci6pshj825a1r8nlc19hf26n4ba33sx7dbx727ja5lyjv8m"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.NETCore.Client"; version = "0.2.61701"; sha256 = "1ic1607jj4ln8dbibf1fz5v9svk9x2kqlgvhndc6ijaqnbc4wcr1"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.Runtime"; version = "2.0.161401"; sha256 = "02qcm8nv1ch07g8b0i60ynrjn33b8y5ivyk4rxal3vd9zfi6pvwi"; })
+  (fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "2.0.3"; sha256 = "020214swxm0hip1d9gjskrzmqzjnji7c6l5b3xcch8vp166066m9"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "7.0.0"; sha256 = "1as8cygz0pagg17w22nsf6mb49lr2mcl1x8i3ad1wi8lyzygy1a3"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "6.0.0-rc.1.21451.13"; sha256 = "0r6945jq7c2f1wjifq514zvngicndjqfnsjya6hqw0yzah0jr56c"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "7.0.0"; sha256 = "121zs4jp8iimgbpzm3wsglhjwkc06irg1pxy8c1zcdlsg34cfq1p"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "6.0.0-rc.1.21451.13"; sha256 = "11dg16x6g0gssb143qpghxz1s41himvhr7yhjwxs9hacx4ij2dm1"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "7.0.0"; sha256 = "181d7mp9307fs17lyy42f8cxnjwysddmpsalky4m0pqxcimnr6g7"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "2.0.3"; sha256 = "0dpyjp0hy9kkvk2dd4dclfmb10yq5avsw2a6v8nra9g6ii2p1nla"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Features"; version = "7.0.2"; sha256 = "18ipxpw73wi5gdj7vxhmqgk8rl3l95w6h5ajxbccdfyv5p75v66d"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "7.0.0"; sha256 = "1bqd3pqn5dacgnkq0grc17cgb2i0w8z1raw12nwm3p3zhrfcvgxf"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "7.0.0"; sha256 = "1gn7d18i1wfy13vrwhmdv1rmsb4vrk26kqdld4cgvh77yigj90xs"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.ObjectPool"; version = "5.0.11"; sha256 = "0i7li76gmk6hml12aig4cvyvja9mgl16qr8pkwvx5vm6lc9a3nn4"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "7.0.0"; sha256 = "0b90zkrsk5dw3wr749rbynhpxlg4bgqdnd7d5vdlw2g9c7zlhgx6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "7.0.0"; sha256 = "1b4km9fszid9vp2zb3gya5ni9fn8bq62bzaas2ck2r7gs0sdys80"; })
+  (fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "17.4.0"; sha256 = "1smx30nq22plrn2mw4wb5vfgxk6hyx12b60c4wabmpnr81lq3nzv"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.0.0"; sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.Toolkit.HighPerformance"; version = "7.1.2"; sha256 = "18l950mq0l8s1z771l9p332ni7jryidjh4hi9p37l6p8frcnccxb"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.5.0"; sha256 = "1zapbz161ji8h82xiajgriq6zgzmb1f3ar517p2h63plhsq5gh2q"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "MongoDB.Bson"; version = "2.11.3"; sha256 = "0fn900i51rwgk3ywpcp4dsf7c9v5glch7hia9l9w8aj8s10qjf1r"; })
+  (fetchNuGet { pname = "Mono.Posix.NETStandard"; version = "1.0.0"; sha256 = "0xlja36hwpjm837haq15mjh2prcf68lyrmn72nvgpz8qnf9vappw"; })
+  (fetchNuGet { pname = "NativeLibraryLoader"; version = "1.0.13"; sha256 = "18vi5gpa243jvz8cixyhbbrccj4js5sc8g4gy10ldjy50szrpnqh"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.0"; sha256 = "1bc4ba8ahgk15m8k4nd7x406nhi0kwqzbgjk2dmw52ss553xz7iy"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.3"; sha256 = "0xrwysmrn4midrjal8g2hr1bbg38iyisl0svamb11arqws4w2bw7"; })
+  (fetchNuGet { pname = "NuGet.Common"; version = "5.11.0"; sha256 = "1amf6scr5mcjdvd1fflag6i4qjwmydq5qwp6g3f099n901zq0dr3"; })
+  (fetchNuGet { pname = "NuGet.Configuration"; version = "5.11.0"; sha256 = "1s9pbrh7xy9jz7npz0sahdsj1cw8gfx1fwf3knv0ms1n0c9bk53l"; })
+  (fetchNuGet { pname = "NuGet.DependencyResolver.Core"; version = "5.11.0"; sha256 = "0yllxfv8lx1b7zj114mpxw03186q5ynsdvza6llp3wypxp367inr"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.11.0"; sha256 = "0wv26gq39hfqw9md32amr5771s73f5zn1z9vs4y77cgynxr73s4z"; })
+  (fetchNuGet { pname = "NuGet.LibraryModel"; version = "5.11.0"; sha256 = "18kcxl46d004brvj7xmpskgml5qq001ip7bc7vhg2q92cisqa1by"; })
+  (fetchNuGet { pname = "NuGet.Packaging"; version = "5.11.0"; sha256 = "0rxgnsh8ny37bv6cdn70prqbq3xavncyd3nqhw5yarxkp29i11xv"; })
+  (fetchNuGet { pname = "NuGet.ProjectModel"; version = "5.11.0"; sha256 = "1i0dcak9qdj8s68c5f3zhrjs5sc4rsim92dy1qw4x9cavv5jrp05"; })
+  (fetchNuGet { pname = "NuGet.Protocol"; version = "5.11.0"; sha256 = "041pva6ykc5h6az7bb87mkg32c95cvxlixgspnd34zbdldr4ypdb"; })
+  (fetchNuGet { pname = "NuGet.Versioning"; version = "5.11.0"; sha256 = "041351n1rbyqpfxqyxbvjgfrcbbawymbq96givz5pvdbabvyf5vq"; })
+  (fetchNuGet { pname = "NUnit"; version = "3.13.3"; sha256 = "0wdzfkygqnr73s6lpxg5b1pwaqz9f414fxpvpdmf72bvh4jaqzv6"; })
+  (fetchNuGet { pname = "NVika"; version = "2.2.0"; sha256 = "1lxv5m5nf4hfwfdhcscrl8m0hhjkqxxn555wxwb95x0d5w2czx6x"; })
+  (fetchNuGet { pname = "OpenTabletDriver"; version = "0.6.1"; sha256 = "0ww8ib1la21x80v54w6vf5ddq0s2bv49rlzdhdg35pbw51jx1m95"; })
+  (fetchNuGet { pname = "OpenTabletDriver.Configurations"; version = "0.6.1"; sha256 = "04cj5vp665pnja7y07i3zpw3r1ff9kr9b8iglyqjhq7bz0y2dxvy"; })
+  (fetchNuGet { pname = "OpenTabletDriver.Native"; version = "0.6.1"; sha256 = "0vp3bgspczw76gh4qm61dhrrxkds4nsqarppg5rdicxpvirj66yq"; })
+  (fetchNuGet { pname = "OpenTabletDriver.Plugin"; version = "0.6.1"; sha256 = "1ikdwfk2n9knfps15j1hrx1f02c0sksi70vjk1bml8cvmz6chjg7"; })
+  (fetchNuGet { pname = "PolySharp"; version = "1.10.0"; sha256 = "06qici3hhk6a0jmy0nyvspcnmhbapnic6iin3i28pkdvrii02hnz"; })
+  (fetchNuGet { pname = "ppy.LocalisationAnalyser"; version = "2023.712.0"; sha256 = "064qrrlhhfx18mmrxqhq06d0sdhzzpqxjgc3znpflqh5j1l4j4m1"; })
+  (fetchNuGet { pname = "ppy.LocalisationAnalyser.Tools"; version = "2023.712.0"; sha256 = "1zs9ky53faxqhf6hx1pvnnni79dil8m7f8w4yh9if306bnllnwl4"; })
+  (fetchNuGet { pname = "ppy.ManagedBass"; version = "2022.1216.0"; sha256 = "19nnj1hq2v21mrplnivjr9c4y3wg4hhfnc062sjgzkmiv1cchvf8"; })
+  (fetchNuGet { pname = "ppy.ManagedBass.Fx"; version = "2022.1216.0"; sha256 = "1vw573mkligpx9qiqasw1683cqaa1kgnxhlnbdcj9c4320b1pwjm"; })
+  (fetchNuGet { pname = "ppy.ManagedBass.Mix"; version = "2022.1216.0"; sha256 = "185bpvgbnd8y20r7vxb1an4pd1aal9b7b5wvmv3knz0qg8j0chd9"; })
+  (fetchNuGet { pname = "ppy.osu.Framework"; version = "2023.815.0"; sha256 = "0xda8fd70x6ljbaqliikbjff84arjm3va5ibdv5p9sijn5arhzy8"; })
+  (fetchNuGet { pname = "ppy.osu.Framework.NativeLibs"; version = "2022.525.0"; sha256 = "1zsqj3xng06bb46vg79xx35n2dsh3crqg951r1ga2gxqzgzy4nk0"; })
+  (fetchNuGet { pname = "ppy.osu.Framework.SourceGeneration"; version = "2023.720.0"; sha256 = "001vvxyv483ibid25fdknvij77x0y983mp4psx2lbg3x2al7yxax"; })
+  (fetchNuGet { pname = "ppy.osu.Game.Resources"; version = "2023.719.0"; sha256 = "1isy0jd8xkjw72m4akh85nmlcfp6na1ksghyajs4amiagjgvvn47"; })
+  (fetchNuGet { pname = "ppy.osuTK.NS20"; version = "1.0.211"; sha256 = "0j4a9n39pqm0cgdcps47p5n2mqph3h94r7hmf0bs59imif4jxvjy"; })
+  (fetchNuGet { pname = "ppy.SDL2-CS"; version = "1.0.671-alpha"; sha256 = "1yzakyp0wwayd9k2wmmfklmpvhig0skqk6sn98axpfgnq4hxhllm"; })
+  (fetchNuGet { pname = "ppy.Veldrid"; version = "4.9.3-g9f8aa2931a"; sha256 = "0jzjaakcfy3x85wx8smp4j7hffbynqakgqvwslr3bkbqlfdxxbil"; })
+  (fetchNuGet { pname = "ppy.Veldrid.MetalBindings"; version = "4.9.3-g9f8aa2931a"; sha256 = "120d6zjh5ss79iz44m9fc4bzhj62yyzawp1wd9knvxq322a6i82n"; })
+  (fetchNuGet { pname = "ppy.Veldrid.OpenGLBindings"; version = "4.9.3-g9f8aa2931a"; sha256 = "0xn2cazwv6c6wllas4advsam1dgvqlw1k1vlrp0imswgz6zbvf4f"; })
+  (fetchNuGet { pname = "ppy.Veldrid.SPIRV"; version = "1.0.15-g3e4b9f196a"; sha256 = "0ijainvin0v01pk282985v0mwwa1s2b683wxg23jzk69pbvpyq6g"; })
+  (fetchNuGet { pname = "Realm"; version = "11.1.2"; sha256 = "0kfq7knlw0njvhkqz9hjpgi1qqxsh8i1vj07zbj20jspamqrwdyd"; })
+  (fetchNuGet { pname = "Realm.PlatformHelpers"; version = "11.1.2"; sha256 = "01w9lbzwd0d5gc0v2jahbwlhka1fxpj5lpz0cq7v04r0y6064v23"; })
+  (fetchNuGet { pname = "Remotion.Linq"; version = "2.2.0"; sha256 = "1y46ni0xswmmiryp8sydjgryafwn458dr91f9xn653w73kdyk4xf"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.0.0"; sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "Sentry"; version = "3.28.1"; sha256 = "09xl3bm5clqxnn8wyy36zwmj8ai8zci6ngw64d0r3rzgd95gbf61"; })
+  (fetchNuGet { pname = "SharpCompress"; version = "0.31.0"; sha256 = "01az7amjkxjbya5rdcqwxzrh2d3kybf1gsd3617rsxvvxadyra1r"; })
+  (fetchNuGet { pname = "SharpCompress"; version = "0.32.2"; sha256 = "1p198bl08ia89rf4n6yjpacj3yrz6s574snsfl40l8vlqcdrc1pm"; })
+  (fetchNuGet { pname = "SharpFNT"; version = "2.0.0"; sha256 = "1bgacgh9hbck0qvji6frbb50sdiqfdng2fvvfgfw8b9qaql91mx0"; })
+  (fetchNuGet { pname = "SharpGen.Runtime"; version = "2.0.0-beta.13"; sha256 = "1250z6sa9ghf84czlkzvaysb29c0n229z1f0vh5qls89akrkl7h8"; })
+  (fetchNuGet { pname = "SharpGen.Runtime.COM"; version = "2.0.0-beta.13"; sha256 = "1lmv3jp2g7mgy9j23pd3j0wr3p89qiq8v6c6qxqf688izyni1166"; })
+  (fetchNuGet { pname = "SixLabors.ImageSharp"; version = "2.1.0"; sha256 = "0lmj3qs39v5jcf2rjwav43nqnc7g6sd4l226l2jw85nidzmpvkwr"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.bundle_e_sqlite3"; version = "2.1.4"; sha256 = "0shdspl9cm71wwqg9103s44r0l01r3sgnpxr523y4a0wlgac50g0"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.core"; version = "2.1.2"; sha256 = "19hxv895lairrjmk4gkzd3mcb6b0na45xn4n551h4kckplqadg3d"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.core"; version = "2.1.4"; sha256 = "09akxz92qipr1cj8mk2hw99i0b81wwbwx26gpk21471zh543f8ld"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.lib.e_sqlite3"; version = "2.1.4"; sha256 = "11l85ksv1ck46j8z08fyf0c3l572zmp9ynb7p5chm5iyrh8xwkkn"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.provider.e_sqlite3"; version = "2.1.4"; sha256 = "0b8f51nrjkq0pmfzjaqk5rp7r0cp2lbdm2whynj3xsjklppzmn35"; })
+  (fetchNuGet { pname = "StbiSharp"; version = "1.1.0"; sha256 = "0wbw20m7nyhxj32k153l668sxigamlwig0qpz8l8d0jqz35vizm0"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.1.0"; sha256 = "0fv3cma1jp4vgj7a8hqc9n7hr1f1kjp541s6z0q1r6nazb4iz9mz"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.4.0"; sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.7.1"; sha256 = "1nh4nlxfc7lbnbl86wwk1a3jwl6myz5j6hvgh5sp4krim9901hsq"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Formats.Asn1"; version = "5.0.0"; sha256 = "1axc8z0839yvqi2cb63l73l6d9j6wd20lsbdymwddz9hvrsgfwpn"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.Packaging"; version = "7.0.0"; sha256 = "16fgj2ab5ci217shmfsi6c0rnmkh90h6vyb60503nhpmh7y8di13"; })
+  (fetchNuGet { pname = "System.IO.Pipelines"; version = "7.0.0"; sha256 = "1ila2vgi1w435j7g2y7ykp2pdbh9c5a02vm85vql89az93b7qvav"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Linq.Queryable"; version = "4.0.1"; sha256 = "11jn9k34g245yyf260gr3ldzvaqa9477w2c5nhb1p8vjx4xm3qaw"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.8.1"; sha256 = "17xxl3m99wa4hcpqy42vl8qb1jk2jfq32rj3sfjc1a46hi2si5jj"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.3"; sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0-rc.1.21451.13"; sha256 = "0v5bc80p35jj5b5xdgsn5r1v4w68gqz0sahi214rprrrlr3sl206"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0"; sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "4.5.0"; sha256 = "1wvwanz33fzzbnd2jalar0p0z3x0ba53vzx1kazlskp7pwyhlnq0"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "5.0.0"; sha256 = "06hkx2za8jifpslkh491dfwzm5dxrsyxzj5lsc0achb6yzg4zqlw"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "5.0.0"; sha256 = "0hb2mndac3xrw3786bsjxjfh19bwnr991qib54k6wsqjhjyyvbwj"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "4.4.0"; sha256 = "1q8ljvqhasyynp94a1d7jknk946m20lkwy2c3wa8zw2pc517fbj6"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.5.0"; sha256 = "0rmj89wsl5yzwh0kqjgx45vzf694v9p92r4x4q6yxldk1cv1hi86"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "5.0.0"; sha256 = "1bn2pzaaq4wx9ixirr8151vm5hynn3lmrljcgjx9yghmm4k677k0"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "7.0.0"; sha256 = "1151hbyrcf8kyg1jz8k9awpbic98lwz9x129rg7zk1wrs6vjlpxl"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "7.0.1"; sha256 = "1lqh6nrrkx4sksvn5509y6j9z8zkhcls0yghd0n31zywmmy3pnf2"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "7.0.0"; sha256 = "1qrmqa6hpzswlmyp3yqsbnmia9i5iz1y208xpqc1y88b1f6j1v8a"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "TagLibSharp"; version = "2.3.0"; sha256 = "1z7v9lrkss1f8s42sclsq3az9zjihgmhyxnwhjyf0scgk1amngrw"; })
+  (fetchNuGet { pname = "Vk"; version = "1.0.25"; sha256 = "18kx3g088215803yznnmf6621wgwvgakj8hlmrb726b7zwb3x53l"; })
+  (fetchNuGet { pname = "Vortice.D3DCompiler"; version = "2.4.2"; sha256 = "07wdz77cb4c0f4bzzkd7fzkfl5jx6m6mnddpxgab8a95ryv60xrd"; })
+  (fetchNuGet { pname = "Vortice.Direct3D11"; version = "2.4.2"; sha256 = "18zyx9srbszah9hk8fkc1iws0hb5137gd77xi0qq9gx1nb62lkl5"; })
+  (fetchNuGet { pname = "Vortice.DirectX"; version = "2.4.2"; sha256 = "11yjyvyz922z1ygl8gxmdym3918df12nl7xxry4pdjpl8is33qic"; })
+  (fetchNuGet { pname = "Vortice.DXGI"; version = "2.4.2"; sha256 = "17vsnm9ca6nqk3f1dfpfvd6i6fp8x8v41bn65rchrzwcv1zzi6pz"; })
+  (fetchNuGet { pname = "Vortice.Mathematics"; version = "1.4.25"; sha256 = "0vl6g087disxyzskvkbnwym74s47lkza0ly3nk4y0y88zibcggrj"; })
+]
diff --git a/nixpkgs/pkgs/games/osu-lazer/osu.runtimeconfig.json b/nixpkgs/pkgs/games/osu-lazer/osu.runtimeconfig.json
new file mode 100644
index 000000000000..4148c494fbc7
--- /dev/null
+++ b/nixpkgs/pkgs/games/osu-lazer/osu.runtimeconfig.json
@@ -0,0 +1,9 @@
+{
+  "runtimeOptions": {
+    "tfm": "net6.0",
+    "framework": {
+      "name": "Microsoft.NETCore.App",
+      "version": "6.0.0"
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/games/osu-lazer/update-bin.sh b/nixpkgs/pkgs/games/osu-lazer/update-bin.sh
new file mode 100755
index 000000000000..a2ed671f232c
--- /dev/null
+++ b/nixpkgs/pkgs/games/osu-lazer/update-bin.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../. -i bash -p unzip curl jq common-updater-scripts
+set -eo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+bin_file="$(realpath ./bin.nix)"
+
+new_version="$(curl -s "https://api.github.com/repos/ppy/osu/releases?per_page=1" | jq -r '.[0].name')"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./bin.nix)"
+if [[ "$new_version" == "$old_version" ]]; then
+    echo "Already up to date."
+    exit 0
+fi
+
+cd ../../..
+
+echo "Updating osu-lazer-bin from $old_version to $new_version..."
+sed -Ei.bak '/ *version = "/s/".+"/"'"$new_version"'"/' "$bin_file"
+rm "$bin_file.bak"
+
+for pair in \
+    'aarch64-darwin osu.app.Apple.Silicon.zip' \
+    'x86_64-darwin osu.app.Intel.zip' \
+    'x86_64-linux osu.AppImage'; do
+    set -- $pair
+    echo "Prefetching binary for $1..."
+    prefetch_output=$(nix --extra-experimental-features nix-command store prefetch-file --json --hash-type sha256 "https://github.com/ppy/osu/releases/download/$new_version/$2")
+    if [[ "$1" == *"darwin"* ]]; then
+        store_path=$(jq -r '.storePath' <<<"$prefetch_output")
+        tmpdir=$(mktemp -d)
+        unzip -q "$store_path" -d "$tmpdir"
+        hash=$(nix --extra-experimental-features nix-command hash path "$tmpdir")
+        rm -r "$tmpdir"
+    else
+        hash=$(jq -r '.hash' <<<"$prefetch_output")
+    fi
+    echo "$1 ($2): sha256 = $hash"
+    sed -Ei.bak '/ *'"$1"' = /{N;N; s@("sha256-)[^;"]+@"'"$hash"'@}' "$bin_file"
+    rm "$bin_file.bak"
+done
diff --git a/nixpkgs/pkgs/games/osu-lazer/update.sh b/nixpkgs/pkgs/games/osu-lazer/update.sh
new file mode 100755
index 000000000000..8e9849db1e16
--- /dev/null
+++ b/nixpkgs/pkgs/games/osu-lazer/update.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../. -i bash -p curl jq common-updater-scripts
+set -eo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+new_version="$(curl -s "https://api.github.com/repos/ppy/osu/releases?per_page=1" | jq -r '.[0].name')"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+if [[ "$new_version" == "$old_version" ]]; then
+    echo "Up to date"
+    exit 0
+fi
+
+cd ../../..
+
+if [[ "$1" != "--deps-only" ]]; then
+    update-source-version osu-lazer "$new_version"
+fi
+
+$(nix-build . -A osu-lazer.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/games/otto-matic/default.nix b/nixpkgs/pkgs/games/otto-matic/default.nix
new file mode 100644
index 000000000000..c56db251a1b0
--- /dev/null
+++ b/nixpkgs/pkgs/games/otto-matic/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, SDL2, cmake, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "OttoMatic";
+  version = "4.0.1";
+
+  src = fetchFromGitHub {
+    owner = "jorio";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0mqOAdAmJGxKa6yXktrbmdXkoQIliimq37iy9bCBZYg=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+
+  buildInputs = [
+    SDL2
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/OttoMatic"
+    mv Data ReadMe.txt "$out/share/OttoMatic/"
+    install -Dm755 {.,$out/bin}/OttoMatic
+    wrapProgram $out/bin/OttoMatic --chdir "$out/share/OttoMatic"
+    install -Dm644 $src/packaging/io.jor.ottomatic.desktop $out/share/applications/io.jor.ottomatic.desktop
+    install -Dm644 $src/packaging/io.jor.ottomatic.png $out/share/pixmaps/io.jor.ottomatic.png
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A port of Otto Matic, a 2001 Macintosh game by Pangea Software, for modern operating systems";
+    homepage = "https://github.com/jorio/OttoMatic";
+    license = licenses.cc-by-sa-40;
+    maintainers = with maintainers; [ lux ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/pacvim/default.nix b/nixpkgs/pkgs/games/pacvim/default.nix
new file mode 100644
index 000000000000..a4347550c1d2
--- /dev/null
+++ b/nixpkgs/pkgs/games/pacvim/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ncurses }:
+
+stdenv.mkDerivation {
+  pname = "pacvim";
+  version = "2018-05-16";
+  src = fetchFromGitHub {
+    owner = "jmoon018";
+    repo = "PacVim";
+    rev = "ca7c8833c22c5fe97974ba5247ef1fcc00cedb8e";
+    sha256 = "1kq6j7xmsl5qfl1246lyglkb2rs9mnb2rhsdrp18965dpbj2mhx2";
+  };
+  patches = [
+    # Fix pending upstream inclusion for ncurses-6.3 support:
+    #   https://github.com/jmoon018/PacVim/pull/53
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/jmoon018/PacVim/commit/760682824cdbb328af616ff43bf822ade23924f7.patch";
+      sha256 = "1y3928dc2nkfldqhpiqk0blbx7qj8ar35f1w7fb92qwxrj8p4i6g";
+    })
+  ];
+
+  buildInputs = [ ncurses ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jmoon018/PacVim";
+    description = "A game that teaches you vim commands";
+    maintainers = with maintainers; [ infinisil ];
+    license = licenses.lgpl3;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/papermc/default.nix b/nixpkgs/pkgs/games/papermc/default.nix
new file mode 100644
index 000000000000..20861779185c
--- /dev/null
+++ b/nixpkgs/pkgs/games/papermc/default.nix
@@ -0,0 +1,50 @@
+{
+  lib,
+  stdenvNoCC,
+  fetchurl,
+  jre,
+  makeBinaryWrapper,
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "papermc";
+  version = "1.20.2.234";
+
+  src =
+    let
+      mcVersion = lib.versions.pad 3 finalAttrs.version;
+      buildNum = builtins.elemAt (lib.splitVersion finalAttrs.version) 3;
+    in
+    fetchurl {
+      url = "https://papermc.io/api/v2/projects/paper/versions/${mcVersion}/builds/${buildNum}/downloads/paper-${mcVersion}-${buildNum}.jar";
+      hash = "sha256-fR7Dq09iFGVXodQjrS7Hg4NcrKPJbNg0hexU520JC6c=";
+    };
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D $src $out/share/papermc/papermc.jar
+
+    makeWrapper ${lib.getExe jre} "$out/bin/minecraft-server" \
+      --append-flags "-jar $out/share/papermc/papermc.jar nogui"
+
+    runHook postInstall
+  '';
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  dontUnpack = true;
+  preferLocalBuild = true;
+  allowSubstitutes = false;
+
+  meta = {
+    description = "High-performance Minecraft Server";
+    homepage = "https://papermc.io/";
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.gpl3Only;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ aaronjanse neonfuz ];
+    mainProgram = "minecraft-server";
+  };
+})
diff --git a/nixpkgs/pkgs/games/path-of-building/default.nix b/nixpkgs/pkgs/games/path-of-building/default.nix
new file mode 100644
index 000000000000..1fa07f92ccee
--- /dev/null
+++ b/nixpkgs/pkgs/games/path-of-building/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, lib, fetchFromGitHub, unzip, meson, ninja, pkg-config, qtbase, qttools, wrapQtAppsHook, luajit }:
+let
+  data = stdenv.mkDerivation(finalAttrs: {
+    pname = "path-of-building-data";
+    version = "2.34.1";
+
+    src = fetchFromGitHub {
+      owner = "PathOfBuildingCommunity";
+      repo = "PathOfBuilding";
+      rev = "v${finalAttrs.version}";
+      hash = "sha256-i6OCW5Vc9/LfNuiaEeelmXiqP7+WdIklRNRcgWb7L1w=";
+    };
+
+    nativeBuildInputs = [ unzip ];
+
+    buildCommand = ''
+      # I have absolutely no idea how this file is generated
+      # and I don't think I want to know. The Flatpak also does this.
+      unzip -j -d $out $src/runtime-win32.zip lua/sha1.lua
+
+      # Install the actual data
+      cp -r $src/src $src/runtime/lua/*.lua $src/manifest.xml $out
+
+      # Pretend this is an official build so we don't get the ugly "dev mode" warning
+      substituteInPlace $out/manifest.xml --replace '<Version' '<Version platform="nixos"'
+      touch $out/installed.cfg
+
+      # Completely stub out the update check
+      chmod +w $out/src/UpdateCheck.lua
+      echo 'return "none"' > $out/src/UpdateCheck.lua
+    '';
+  });
+in
+stdenv.mkDerivation {
+  pname = "path-of-building";
+  version = "${data.version}-unstable-2023-04-09";
+
+  src = fetchFromGitHub {
+    owner = "ernstp";
+    repo = "pobfrontend";
+    rev = "9faa19aa362f975737169824c1578d5011487c18";
+    hash = "sha256-zhw2PZ6ZNMgZ2hG+a6AcYBkeg7kbBHNc2eSt4if17Wk=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config qttools wrapQtAppsHook ];
+  buildInputs = [ qtbase luajit luajit.pkgs.lua-curl ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 pobfrontend $out/bin/pobfrontend
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    qtWrapperArgs+=(
+      --set LUA_PATH "$LUA_PATH"
+      --set LUA_CPATH "$LUA_CPATH"
+      --chdir "${data}"
+    )
+  '';
+
+  passthru.data = data;
+
+  meta = {
+    description = "Offline build planner for Path of Exile";
+    homepage = "https://pathofbuilding.community/";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.k900 ];
+    mainProgram = "pobfrontend";
+    broken = stdenv.isDarwin;  # doesn't find uic6 for some reason
+  };
+}
diff --git a/nixpkgs/pkgs/games/pegasus-frontend/default.nix b/nixpkgs/pkgs/games/pegasus-frontend/default.nix
new file mode 100644
index 000000000000..855caa75dff2
--- /dev/null
+++ b/nixpkgs/pkgs/games/pegasus-frontend/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, cmake
+, qtbase
+, qtgraphicaleffects
+, qtmultimedia
+, qtsvg
+, qttools
+, qtx11extras
+, SDL2
+, sqlite
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pegasus-frontend";
+  version = "unstable-2023-05-22";
+
+  src = fetchFromGitHub {
+    owner = "mmatyas";
+    repo = "pegasus-frontend";
+    rev = "6421d7a75d29a82ea06008e4a08ec14e074430d9";
+    fetchSubmodules = true;
+    sha256 = "sha256-mwJm+3zMP4alcis7OFQUcH3eXlRTZhoZYtxKrvCQGc8=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtmultimedia
+    qtsvg
+    qtgraphicaleffects
+    qtx11extras
+    sqlite
+    SDL2
+  ];
+
+  meta = with lib; {
+    description = "A cross platform, customizable graphical frontend for launching emulators and managing your game collection.";
+    homepage = "https://pegasus-frontend.org/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ tengkuizdihar ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/pentobi/default.nix b/nixpkgs/pkgs/games/pentobi/default.nix
new file mode 100644
index 000000000000..e0bd6909fb94
--- /dev/null
+++ b/nixpkgs/pkgs/games/pentobi/default.nix
@@ -0,0 +1,38 @@
+{ lib, mkDerivation, appstream, fetchFromGitHub, cmake, gettext, libxslt, librsvg, itstool
+, qtbase, qtquickcontrols2, qtsvg, qttools, qtwebview, docbook_xsl
+}:
+
+mkDerivation rec {
+  version = "20.0";
+  pname = "pentobi";
+
+  src = fetchFromGitHub {
+    owner = "enz";
+    repo = "pentobi";
+    rev = "v${version}";
+    sha256 = "sha256-DQM3IJ0pRkX4OsrjZGROg50LfKb621UnpvtqSjxchz8=";
+  };
+
+  nativeBuildInputs = [ cmake docbook_xsl qttools ];
+  buildInputs = [ appstream qtbase qtsvg qtquickcontrols2 qtwebview itstool librsvg ];
+
+  patchPhase = ''
+    substituteInPlace pentobi_thumbnailer/CMakeLists.txt --replace "/manpages" "/share/xml/docbook-xsl/manpages/"
+    substituteInPlace pentobi/unix/CMakeLists.txt --replace "/manpages" "/share/xml/docbook-xsl/manpages/"
+    substituteInPlace pentobi/docbook/CMakeLists.txt --replace "/html" "/share/xml/docbook-xsl/html"
+  '';
+
+  cmakeFlags = [
+    "-DCMAKE_VERBOSE_MAKEFILE=1"
+    "-DDOCBOOKXSL_DIR=${docbook_xsl}"
+    "-DMETAINFO_ITS=${appstream}/share/gettext/its/metainfo.its"
+  ];
+
+  meta = with lib; {
+    description = "A computer opponent for the board game Blokus";
+    homepage = "https://pentobi.sourceforge.io";
+    license = licenses.gpl3Plus;
+    maintainers = [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/performous/default.nix b/nixpkgs/pkgs/games/performous/default.nix
new file mode 100644
index 000000000000..c82e1d02afc7
--- /dev/null
+++ b/nixpkgs/pkgs/games/performous/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, aubio
+, boost
+, cmake
+, ffmpeg
+, fmt
+, gettext
+, glew
+, glibmm
+, glm
+, icu
+, libepoxy
+, librsvg
+, libxmlxx
+, nlohmann_json
+, pango
+, pkg-config
+, portaudio
+}:
+
+stdenv.mkDerivation rec {
+  pname = "performous";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "performous";
+    repo = "performous";
+    rev = "refs/tags/${version}";
+    hash = "sha256-y7kxLht15vULN9NxM0wzj9+7Uq4/3D5j9oBEnrTIwQ8=";
+  };
+
+  cedSrc = fetchFromGitHub {
+    owner = "performous";
+    repo = "compact_enc_det";
+    rev = "9ca1351fe0b1e85992a407b0fc54a63e9b3adc6e";
+    hash = "sha256-ztfeblR4YnB5+lb+rwOQJjogl+C9vtPH9IVnYO7oxec=";
+  };
+
+  patches = [
+    ./performous-cmake.patch
+    ./performous-fftw.patch
+  ];
+
+  postPatch = ''
+    mkdir ced-src
+    cp -R ${cedSrc}/* ced-src
+
+    substituteInPlace data/CMakeLists.txt \
+      --replace "/usr" "$out"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    gettext
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    aubio
+    boost
+    ffmpeg
+    fmt
+    glew
+    glibmm
+    glm
+    icu
+    libepoxy
+    librsvg
+    libxmlxx
+    nlohmann_json
+    pango
+    portaudio
+  ];
+
+  meta = with lib; {
+    description = "Karaoke, band and dancing game";
+    homepage = "https://performous.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ wegank ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/performous/performous-cmake.patch b/nixpkgs/pkgs/games/performous/performous-cmake.patch
new file mode 100644
index 000000000000..dae399cd54de
--- /dev/null
+++ b/nixpkgs/pkgs/games/performous/performous-cmake.patch
@@ -0,0 +1,17 @@
+diff --git a/cmake/Modules/FindCed.cmake b/cmake/Modules/FindCed.cmake
+index d6e2aca..3085adb 100644
+--- a/cmake/Modules/FindCed.cmake
++++ b/cmake/Modules/FindCed.cmake
+@@ -1,11 +1 @@
+-include(LibFetchMacros)
+-
+-set(Ced_GIT_VERSION "master")
+-
+-libfetch_git_pkg(Ced
+-	REPOSITORY ${SELF_BUILT_GIT_BASE}/compact_enc_det.git
+-	#https://github.com/google/compact_enc_det.git
+-	REFERENCE  ${Ced_GIT_VERSION}
+-	FIND_PATH  compact_enc_det/compact_enc_det.h
+-)
+-message(STATUS "Found Google CED ${Ced_VERSION}")
++add_subdirectory(../ced-src ced-src)
diff --git a/nixpkgs/pkgs/games/performous/performous-fftw.patch b/nixpkgs/pkgs/games/performous/performous-fftw.patch
new file mode 100644
index 000000000000..f24808ae80d0
--- /dev/null
+++ b/nixpkgs/pkgs/games/performous/performous-fftw.patch
@@ -0,0 +1,15 @@
+diff --git a/game/audio.cc b/game/audio.cc
+index da810488..d7f3d072 100644
+--- a/game/audio.cc
++++ b/game/audio.cc
+@@ -121,8 +121,8 @@ Music::Music(Audio::Files const& files, unsigned int sr, bool preview): srate(sr
+ 	suppressCenterChannel = config["audio/suppress_center_channel"].b();
+ }
+ 
+-unsigned Audio::aubio_win_size = 1536;
+-unsigned Audio::aubio_hop_size = 768;
++unsigned Audio::aubio_win_size = 2048;
++unsigned Audio::aubio_hop_size = 1024;
+ 
+ std::unique_ptr<aubio_tempo_t, void(*)(aubio_tempo_t*)> Audio::aubioTempo =
+ 					std::unique_ptr<aubio_tempo_t, void(*)(aubio_tempo_t*)>(
diff --git a/nixpkgs/pkgs/games/pinball/default.nix b/nixpkgs/pkgs/games/pinball/default.nix
new file mode 100644
index 000000000000..488a3b30a588
--- /dev/null
+++ b/nixpkgs/pkgs/games/pinball/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config
+, libglvnd, SDL, SDL_image, SDL_mixer, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pinball";
+  version = "0.3.20201218";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pinball/pinball-${version}.tar.gz";
+    sha256 = "0vacypp3ksq1hs6hxpypx7nrfkprbl4ksfywcncckwrh4qcir631";
+  };
+
+  postPatch = ''
+    sed -i 's/^AUTOMAKE_OPTIONS = gnu$/AUTOMAKE_OPTIONS = foreign/' Makefile.am
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libglvnd SDL SDL_image SDL_mixer xorg.libSM ];
+  strictDeps = true;
+
+  configureFlags = [
+    "--with-sdl-prefix=${lib.getDev SDL}"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-I${lib.getDev SDL_image}/include/SDL"
+    "-I${lib.getDev SDL_mixer}/include/SDL"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://purl.org/rzr/pinball";
+    description = "Emilia Pinball simulator";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ qyliss ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/games/pingus/default.nix b/nixpkgs/pkgs/games/pingus/default.nix
new file mode 100644
index 000000000000..fd0ebddfc32f
--- /dev/null
+++ b/nixpkgs/pkgs/games/pingus/default.nix
@@ -0,0 +1,22 @@
+{lib, stdenv, fetchgit, cmake, SDL2, SDL2_image, boost, libpng, SDL2_mixer
+, pkg-config, libGLU, libGL, git, jsoncpp }:
+stdenv.mkDerivation rec {
+  pname = "pingus";
+  version = "unstable-0.7.6.0.20191104";
+
+  nativeBuildInputs = [ cmake pkg-config git ];
+  buildInputs = [ SDL2 SDL2_image boost libpng SDL2_mixer libGLU libGL jsoncpp ];
+  src = fetchgit {
+    url = "https://gitlab.com/pingus/pingus/";
+    rev = "709546d9b9c4d6d5f45fc9112b45ac10c7f9417d";
+    sha256 = "11mmzk0766riaw5qyd1r5i7s7vczbbzfccm92bvgrm99iy1sj022";
+    fetchSubmodules = true;
+  };
+
+  meta = {
+    description = "A puzzle game with mechanics similar to Lemmings";
+    platforms = lib.platforms.linux;
+    maintainers = [lib.maintainers.raskin];
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/games/pioneer/default.nix b/nixpkgs/pkgs/games/pioneer/default.nix
new file mode 100644
index 000000000000..b70ef8c3dab6
--- /dev/null
+++ b/nixpkgs/pkgs/games/pioneer/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, assimp
+, curl
+, freetype
+#, glew
+, libGL
+, libGLU
+, libpng
+, libsigcxx
+, libvorbis
+, lua5_2
+, mesa
+, SDL2
+, SDL2_image
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pioneer";
+  version = "20220203";
+
+  src = fetchFromGitHub{
+    owner = "pioneerspacesim";
+    repo = "pioneer";
+    rev = version;
+    hash = "sha256-HNVg8Lq6k6gQDmgOdpnBwJ57WSEnn5XwtqzmkDU1WGI=";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace 'string(TIMESTAMP PROJECT_VERSION "%Y%m%d")' 'set(PROJECT_VERSION ${version})'
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [
+    assimp
+    curl
+    freetype
+    libGL
+    libGLU
+    libpng
+    libsigcxx
+    libvorbis
+    lua5_2
+    mesa
+    SDL2
+    SDL2_image
+  ];
+
+  cmakeFlags = [
+    "-DPIONEER_DATA_DIR:PATH=${placeholder "out"}/share/pioneer/data"
+    "-DUSE_SYSTEM_LIBLUA:BOOL=YES"
+  ];
+
+  makeFlags = [ "all" "build-data" ];
+
+  meta = with lib; {
+    description = "A space adventure game set in the Milky Way galaxy at the turn of the 31st century";
+    homepage = "https://pioneerspacesim.net";
+    license = with licenses; [
+        gpl3Only cc-by-sa-30
+    ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/pioneers/default.nix b/nixpkgs/pkgs/games/pioneers/default.nix
new file mode 100644
index 000000000000..f4122dc6bfb7
--- /dev/null
+++ b/nixpkgs/pkgs/games/pioneers/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, intltool
+, itstool
+, gtk3
+, libxml2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pioneers";
+  version = "15.6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pio/${pname}-${version}.tar.gz";
+    sha256 = "07b3xdd81n8ybsb4fzc5lx0813y9crzp1hj69khncf4faj48sdcs";
+  };
+
+  nativeBuildInputs = [ pkg-config intltool itstool ];
+
+  buildInputs = [ gtk3 libxml2 ];
+
+  meta = with lib; {
+    description = "Addicting game based on The Settlers of Catan";
+    homepage = "https://pio.sourceforge.net/";  # https does not work
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/planetaryannihilation/default.nix b/nixpkgs/pkgs/games/planetaryannihilation/default.nix
new file mode 100644
index 000000000000..73adffab475a
--- /dev/null
+++ b/nixpkgs/pkgs/games/planetaryannihilation/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, config, fetchurl, patchelf, makeWrapper, gtk2, glib, udev, alsa-lib, atk
+, nspr, fontconfig, cairo, pango, nss, freetype, gnome2, gdk-pixbuf, curl, systemd, xorg, requireFile }:
+
+stdenv.mkDerivation rec {
+  pname = "planetary-annihalation";
+  version = "62857";
+
+  src = requireFile {
+    message = "This file has to be downloaded manually via nix-prefetch-url.";
+    name = "PA_Linux_${version}.tar.bz2";
+    sha256 = "0imi3k5144dsn3ka9khx3dj76klkw46ga7m6rddqjk4yslwabh3k";
+  };
+
+  nativeBuildInputs = [ patchelf makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib}
+
+    cp -R * $out/
+    mv $out/*.so $out/lib
+    ln -s $out/PA $out/bin/PA
+
+    ln -s ${systemd}/lib/libudev.so.1 $out/lib/libudev.so.0
+
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$out/PA"
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc.lib xorg.libXdamage xorg.libXfixes gtk2 glib stdenv.cc.libc "$out" xorg.libXext pango udev xorg.libX11 xorg.libXcomposite alsa-lib atk nspr fontconfig cairo pango nss freetype gnome2.GConf gdk-pixbuf xorg.libXrender ]}:{stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64" "$out/host/CoherentUI_Host"
+
+    wrapProgram $out/PA --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc.lib stdenv.cc.libc xorg.libX11 xorg.libXcursor gtk2 glib curl "$out" ]}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64"
+
+    for f in $out/lib/*; do
+      patchelf --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc.lib curl xorg.libX11 stdenv.cc.libc xorg.libXcursor "$out" ]}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64" $f
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.uberent.com/pa/";
+    description = "Next-generation RTS that takes the genre to a planetary scale";
+    license = lib.licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.domenkozar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/pokerth/default.nix b/nixpkgs/pkgs/games/pokerth/default.nix
new file mode 100644
index 000000000000..021fe4100eae
--- /dev/null
+++ b/nixpkgs/pkgs/games/pokerth/default.nix
@@ -0,0 +1,74 @@
+{ lib, mkDerivation, fetchFromGitHub, fetchpatch, qmake, qtbase
+, SDL, SDL_mixer, boost, curl, gsasl, libgcrypt, libircclient, protobuf, sqlite
+, wrapQtAppsHook
+, tinyxml2, target ? "client" }:
+
+mkDerivation rec {
+  pname = "pokerth-${target}";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "pokerth";
+    repo = "pokerth";
+    rev = "v${version}";
+    hash = "sha256-j4E3VMpaPqX7+hE3wYRZZUeRD//F+K2Gp8oPmJqX5FQ=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "pokerth-1.1.2.patch";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/pokerth-1.1.2.patch?h=pokerth&id=7734029cf9c6ef58f42ed873e1b9c3c19eb1df3b";
+      hash = "sha256-we2UOCFF5J/Wlji/rJeCHDu/dNsUU+R+bTw83AmvDxs=";
+    })
+    (fetchpatch {
+      name = "pokerth-1.1.2.patch.2019";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/pokerth-1.1.2.patch.2019?h=pokerth&id=7734029cf9c6ef58f42ed873e1b9c3c19eb1df3b";
+      hash = "sha256-m6uFPmPC3T9kV7EI1p33vQSi0d/w+YCH0dKjviAphMY=";
+    })
+    (fetchpatch {
+      name = "pokerth-1.1.2.patch.2020";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/pokerth-1.1.2.patch.2020?h=pokerth&id=7734029cf9c6ef58f42ed873e1b9c3c19eb1df3b";
+      hash = "sha256-I2qrgLGSMvFDHyUZFWGPGnuecZ914NBf2uGK02X/wOg=";
+    })
+  ];
+
+  postPatch = ''
+    for f in *.pro; do
+      substituteInPlace $f \
+        --replace '$$'{PREFIX}/include/libircclient ${libircclient.dev}/include/libircclient \
+        --replace 'LIB_DIRS =' 'LIB_DIRS = ${boost.out}/lib' \
+        --replace /opt/gsasl ${gsasl}
+    done
+  '';
+
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+    boost
+    curl
+    gsasl
+    libgcrypt
+    libircclient
+    protobuf
+    qtbase
+    sqlite
+    tinyxml2
+  ];
+
+  qmakeFlags = [
+    "CONFIG+=${target}"
+    "pokerth.pro"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${lib.getDev SDL}/include/SDL";
+
+  meta = with lib; {
+    homepage = "https://www.pokerth.net";
+    description = "Poker game ${target}";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ obadz yana ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/pokete/default.nix b/nixpkgs/pkgs/games/pokete/default.nix
new file mode 100644
index 000000000000..73ff661e9d09
--- /dev/null
+++ b/nixpkgs/pkgs/games/pokete/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, python3
+, fetchFromGitHub
+, testers
+, pokete
+, faketty
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pokete";
+  version = "0.9.1";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "lxgr-linux";
+    repo = "pokete";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-T18908Einsgful8hYMVHl0cL4sIYFvhpy0MbLIcVhxs=";
+  };
+
+  pythonPath = with python3.pkgs; [
+    scrap-engine
+    pynput
+  ];
+
+  buildPhase = ''
+    ${python3.interpreter} -O -m compileall .
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/pokete
+    cp -r assets pokete_classes pokete_data mods *.py $out/share/pokete/
+    mkdir -p $out/bin
+    ln -s $out/share/pokete/pokete.py $out/bin/pokete
+  '';
+
+  postFixup = ''
+    wrapPythonProgramsIn $out/share/pokete "$pythonPath"
+  '';
+
+  passthru.tests = {
+    pokete-version = testers.testVersion {
+      package = pokete;
+      command = "${faketty}/bin/faketty pokete --help";
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "A terminal based Pokemon like game";
+    homepage = "https://lxgr-linux.github.io/pokete";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/pong3d/default.nix b/nixpkgs/pkgs/games/pong3d/default.nix
new file mode 100644
index 000000000000..9e965c95482a
--- /dev/null
+++ b/nixpkgs/pkgs/games/pong3d/default.nix
@@ -0,0 +1,24 @@
+{lib, stdenv, fetchurl, libX11}:
+
+stdenv.mkDerivation rec {
+  pname = "3dpong";
+  version = "0.5";
+  src = fetchurl {
+    url = "ftp://ftp.tuxpaint.org/unix/x/3dpong/src/3dpong-${version}.tar.gz";
+    sha256 = "1ibb79sbzlbn4ra3n0qk22gqr6fg7q0jy6cm0wg2qj4z64c7hmdi";
+  };
+
+  buildInputs = [ libX11 ];
+
+  preConfigure = ''
+    sed -i s,/usr/local,$out, Makefile
+    mkdir -p $out/bin
+  '';
+
+  meta = {
+    homepage = "http://www.newbreedsoftware.com/3dpong/";
+    description = "One or two player 3d sports game based on Pong from Atari";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/portmod/default.nix b/nixpkgs/pkgs/games/portmod/default.nix
new file mode 100644
index 000000000000..f9631c6d764f
--- /dev/null
+++ b/nixpkgs/pkgs/games/portmod/default.nix
@@ -0,0 +1,127 @@
+{ lib
+, bubblewrap
+, cacert
+, fetchFromGitLab
+, git
+, imagemagick
+, openmw
+, python3Packages
+, rustPlatform
+, tes3cmd
+, tr-patcher
+}:
+
+let
+  version = "2.6.2";
+
+  src = fetchFromGitLab {
+    owner = "portmod";
+    repo = "Portmod";
+    rev = "v${version}";
+    hash = "sha256-ufr2guaPdCvI5JOicL/lTrT3t6UlaY1hEB2xbwzhw6A=";
+  };
+
+  portmod-rust = rustPlatform.buildRustPackage rec {
+    inherit src version;
+    pname = "portmod-rust";
+
+    cargoHash = "sha256-sAjgGVVjgXaWbmN/eGEvatYjkHeFTZNX1GXFcJqs3GI=";
+
+    nativeBuildInputs = [
+      python3Packages.python
+    ];
+
+    doCheck = false;
+  };
+
+  bin-programs = [
+    bubblewrap
+    git
+    python3Packages.virtualenv
+    tr-patcher
+    tes3cmd
+    imagemagick
+    openmw
+  ];
+
+in
+python3Packages.buildPythonApplication rec {
+  inherit src version;
+
+  pname = "portmod";
+  format = "pyproject";
+
+  env.SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  # build the rust library independantly
+  prePatch = ''
+    substituteInPlace setup.py \
+      --replace "from setuptools_rust import Binding, RustExtension, Strip" "" \
+      --replace "RustExtension(\"portmodlib.portmod\", binding=Binding.PyO3, strip=Strip.Debug)" ""
+
+    substituteInPlace pyproject.toml \
+      --replace '"setuptools-rust"' ""
+  '';
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools
+    wheel
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    setuptools-scm
+    setuptools
+    requests
+    chardet
+    colorama
+    deprecated
+    restrictedpython
+    appdirs
+    gitpython
+    progressbar2
+    python-sat
+    redbaron
+    patool
+    packaging
+    fasteners
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+  ] ++ bin-programs;
+
+  preCheck = ''
+    cp ${portmod-rust}/lib/libportmod.so portmodlib/portmod.so
+    export HOME=$(mktemp -d)
+  '';
+
+  # some test require network access
+  disabledTests = [
+    "test_masters_esp"
+    "test_logging"
+    "test_execute_network_permissions"
+    "test_execute_permissions_bleed"
+    "test_git"
+    "test_sync"
+    "test_manifest"
+    "test_add_repo"
+    "test_init_prefix_interactive"
+    "test_scan_sources"
+    "test_unpack"
+  ];
+
+  # for some reason, installPhase doesn't copy the compiled binary
+  postInstall = ''
+    cp ${portmod-rust}/lib/libportmod.so $out/${python3Packages.python.sitePackages}/portmodlib/portmod.so
+
+    makeWrapperArgs+=("--prefix" "GIT_SSL_CAINFO" ":" "${cacert}/etc/ssl/certs/ca-bundle.crt" \
+      "--prefix" "PATH" ":" "${lib.makeBinPath bin-programs }")
+  '';
+
+  meta = with lib; {
+    description = "mod manager for openMW based on portage";
+    homepage = "https://gitlab.com/portmod/portmod";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ marius851000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/powermanga/default.nix b/nixpkgs/pkgs/games/powermanga/default.nix
new file mode 100644
index 000000000000..25a1df5211a3
--- /dev/null
+++ b/nixpkgs/pkgs/games/powermanga/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchurl
+, autoconf
+, automake
+, SDL
+, SDL_mixer
+, libpng
+}:
+
+stdenv.mkDerivation rec {
+  pname = "powermanga";
+  version = "0.93.1";
+
+  src = fetchurl {
+    url = "https://linux.tlk.fr/games/Powermanga/download/powermanga-${version}.tgz";
+    sha256 = "sha256-2nU/zoOQWm2z/Y6mXHDFfWYjYshsQp1saVRBcUT5Q+g=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+  ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+    libpng
+  ];
+
+  preConfigure = ''
+    ./bootstrap
+  '';
+
+  installFlags = [
+    # Default is $(out)/games
+    "gamesdir=$(out)/bin"
+    # We set the scoredir to $TMPDIR.
+    # Otherwise it will try to write in /var/games at install time
+    "scoredir=$(TMPDIR)"
+  ];
+
+  meta = with lib; {
+    homepage = "https://linux.tlk.fr/games/Powermanga/";
+    downloadPage = "https://linux.tlk.fr/games/Powermanga/download/";
+    description = "An arcade 2D shoot-em-up game";
+    longDescription = ''
+      Powermanga is an arcade 2D shoot-em-up game with 41 levels and more than
+      200 sprites. It runs in 320x200 or 640x400 pixels, with Window mode or
+      full screen and support for 8, 15, 16, 24, and 32 bpp. As you go through
+      the levels, you will destroy enemy spaceships and bosses, collect gems to
+      power up your ship and get special powers, helpers and weapons.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/principia/default.nix b/nixpkgs/pkgs/games/principia/default.nix
new file mode 100644
index 000000000000..3cf98dada027
--- /dev/null
+++ b/nixpkgs/pkgs/games/principia/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+
+, curl
+, freetype
+, glew
+, gtk2
+, libGL
+, libjpeg
+, libpng
+, SDL2
+, SDL2_gfx
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+}:
+
+stdenv.mkDerivation {
+  pname = "principia";
+  version = "unstable-2023-03-21";
+
+  src = fetchFromGitHub {
+    owner = "Bithack";
+    repo = "principia";
+    rev = "af2cfda21b6ce4c0725700e2a01b0597a97dbeff";
+    hash = "sha256-jBWdXzbPpk23elHcs5sWkxXfkekj+aa24VvEHzid8KE=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    freetype
+    glew
+    gtk2
+    libGL
+    libjpeg
+    libpng
+    SDL2
+    SDL2_gfx
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+  ];
+
+  preAutoreconf = ''
+    cd build-linux
+  '';
+
+  # Since we bypass the "build-linux/go" wrapper script so we can use nixpkgs'
+  # autotools/make integration, set the release flags manually.
+  # https://github.com/Bithack/principia/issues/98
+  preBuild = ''
+    RELEASE_SHARED="-ffast-math -DNDEBUG=1 -s -fomit-frame-pointer -fvisibility=hidden -fdata-sections -ffunction-sections"
+    makeFlagsArray+=(
+      CFLAGS="$RELEASE_SHARED -O1"
+      CXXFLAGS="$RELEASE_SHARED -O2 -fvisibility-inlines-hidden -fno-rtti"
+      LDFLAGS="-Wl,-O,-s,--gc-sections"
+    )
+  '';
+
+  # `make install` only installs the binary, and the binary looks for data
+  # files in its same directory, so we override installPhase, install the
+  # binary in $out/share, and link to it from $out/bin
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/share/principia
+    install -Dm755 principia $out/share/principia/principia
+    ln -s $out/share/principia/principia $out/bin/principia
+
+    cp -r --dereference data-pc data-shared $out/share/principia/
+    install -Dm644 principia.desktop $out/share/applications/principia.desktop
+    install -Dm644 principia-url-handler.desktop $out/share/applications/principia-url-handler.desktop
+    install -Dm644 principia.png $out/share/pixmaps/principia.png
+
+    runHook postInstall
+  '';
+
+  # The actual binary is here, see comment above installPhase
+  stripDebugList = [ "share/principia" ];
+
+  meta = with lib; {
+    description = "Physics-based sandbox game";
+    homepage = "https://principia-web.se/";
+    downloadPage = "https://principia-web.se/download";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.fgaz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/prismlauncher/0001-launcher-translations-explicitly-convert-QVector-ite.patch b/nixpkgs/pkgs/games/prismlauncher/0001-launcher-translations-explicitly-convert-QVector-ite.patch
new file mode 100644
index 000000000000..c1e4731d0148
--- /dev/null
+++ b/nixpkgs/pkgs/games/prismlauncher/0001-launcher-translations-explicitly-convert-QVector-ite.patch
@@ -0,0 +1,36 @@
+From c39637720109dd5d97750907c51e9c0fb8f43f0b Mon Sep 17 00:00:00 2001
+From: Nick Cao <nickcao@nichi.co>
+Date: Wed, 11 Oct 2023 22:51:23 -0400
+Subject: [PATCH] launcher/translations: explicitly convert QVector iterators
+ to pointers
+
+---
+ launcher/translations/TranslationsModel.cpp | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/launcher/translations/TranslationsModel.cpp b/launcher/translations/TranslationsModel.cpp
+index 2763cca2..64c21dbd 100644
+--- a/launcher/translations/TranslationsModel.cpp
++++ b/launcher/translations/TranslationsModel.cpp
+@@ -524,7 +524,7 @@ Language * TranslationsModel::findLanguage(const QString& key)
+     }
+     else
+     {
+-        return found;
++        return &(*found);
+     }
+ }
+ 
+@@ -655,8 +655,7 @@ QModelIndex TranslationsModel::selectedIndex()
+     auto found = findLanguage(d->m_selectedLanguage);
+     if(found)
+     {
+-        // QVector iterator freely converts to pointer to contained type
+-        return index(found - d->m_languages.begin(), 0, QModelIndex());
++        return index(found - &(*d->m_languages.begin()), 0, QModelIndex());
+     }
+     return QModelIndex();
+ }
+-- 
+2.42.0
+
diff --git a/nixpkgs/pkgs/games/prismlauncher/default.nix b/nixpkgs/pkgs/games/prismlauncher/default.nix
new file mode 100644
index 000000000000..2347c8b53ee7
--- /dev/null
+++ b/nixpkgs/pkgs/games/prismlauncher/default.nix
@@ -0,0 +1,116 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, canonicalize-jars-hook
+, cmake
+, cmark
+, Cocoa
+, ninja
+, jdk17
+, zlib
+, qtbase
+, quazip
+, extra-cmake-modules
+, tomlplusplus
+, ghc_filesystem
+, gamemode
+, msaClientID ? null
+, gamemodeSupport ? stdenv.isLinux
+,
+}:
+let
+  libnbtplusplus = fetchFromGitHub {
+    owner = "PrismLauncher";
+    repo = "libnbtplusplus";
+    rev = "2203af7eeb48c45398139b583615134efd8d407f";
+    sha256 = "sha256-TvVOjkUobYJD9itQYueELJX3wmecvEdCbJ0FinW2mL4=";
+  };
+in
+
+assert lib.assertMsg (stdenv.isLinux || !gamemodeSupport) "gamemodeSupport is only available on Linux";
+
+stdenv.mkDerivation
+rec {
+  pname = "prismlauncher-unwrapped";
+  version = "7.2";
+
+  src = fetchFromGitHub {
+    owner = "PrismLauncher";
+    repo = "PrismLauncher";
+    rev = version;
+    sha256 = "sha256-RArg60S91YKp1Mt97a5JNfBEOf2cmuX4pK3VAx2WfqM=";
+  };
+
+  patches = [
+    ./0001-launcher-translations-explicitly-convert-QVector-ite.patch
+  ] ++ lib.optionals stdenv.isDarwin [
+    # https://github.com/PrismLauncher/PrismLauncher/pull/1452
+    # These patches allow us to disable the Sparkle updater and cmake bundling
+    # TODO: remove these when updating to 8.0
+    (fetchpatch {
+      name = "disable-sparkle-when-url-is-empty.patch";
+      url = "https://github.com/PrismLauncher/PrismLauncher/commit/48e50401968a72846350c6fbd76cc957b64a6b5a.patch";
+      hash = "sha256-IFxp6Sj87ogQcMooV4Ql5/4B+C7oTzEk+4tlMud2OLo=";
+    })
+    (fetchpatch {
+      name = "make-install_bundle-cached.patch";
+      url = "https://github.com/PrismLauncher/PrismLauncher/commit/a8498b0dab94d0ab6c9e5cf395e5003db541b749.patch";
+      hash = "sha256-ji5GGUnzVut9xFXkynqf9aVR9FO/zsqIbt3P9dexJ2I=";
+    })
+    (fetchpatch {
+      name = "dont-include-sparkle-when-not-enabled.patch";
+      url = "https://github.com/PrismLauncher/PrismLauncher/commit/51bfda937d47837ed426150ed6f43a60b4ca0ce1.patch";
+      hash = "sha256-7hMgANOg4zRIf3F2AfLXGR3dAEBqVmKm/J5SH0G5oCk=";
+    })
+    (fetchpatch {
+      name = "introduce-internal-updater-variable.patch";
+      url = "https://github.com/PrismLauncher/PrismLauncher/commit/b1aa9e584624a0732dd55fc6c459524a8abfe6ba.patch";
+      hash = "sha256-mm++EfnBxz7NVtKLMb889mMq8F/OdQmzob8OmlvNlRA=";
+    })
+  ];
+
+  nativeBuildInputs = [ extra-cmake-modules cmake jdk17 ninja canonicalize-jars-hook ];
+  buildInputs =
+    [
+      qtbase
+      zlib
+      quazip
+      ghc_filesystem
+      tomlplusplus
+      cmark
+    ]
+    ++ lib.optional gamemodeSupport gamemode
+    ++ lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  hardeningEnable = lib.optionals stdenv.isLinux [ "pie" ];
+
+  cmakeFlags = [
+    # downstream branding
+    "-DLauncher_BUILD_PLATFORM=nixpkgs"
+  ] ++ lib.optionals (msaClientID != null) [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ]
+  ++ lib.optionals (lib.versionOlder qtbase.version "6") [ "-DLauncher_QT_VERSION_MAJOR=5" ]
+  ++ lib.optionals stdenv.isDarwin [ "-DINSTALL_BUNDLE=nodeps" "-DMACOSX_SPARKLE_UPDATE_FEED_URL=''" ];
+
+  postUnpack = ''
+    rm -rf source/libraries/libnbtplusplus
+    ln -s ${libnbtplusplus} source/libraries/libnbtplusplus
+  '';
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    mainProgram = "prismlauncher";
+    homepage = "https://prismlauncher.org/";
+    description = "A free, open source launcher for Minecraft";
+    longDescription = ''
+      Allows you to have multiple, separate instances of Minecraft (each with
+      their own mods, texture packs, saves, etc) and helps you manage them and
+      their associated options with a simple interface.
+    '';
+    platforms = with platforms; linux ++ darwin;
+    changelog = "https://github.com/PrismLauncher/PrismLauncher/releases/tag/${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ minion3665 Scrumplex getchoo ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/prismlauncher/wrapper.nix b/nixpkgs/pkgs/games/prismlauncher/wrapper.nix
new file mode 100644
index 000000000000..4b0aa418fb6a
--- /dev/null
+++ b/nixpkgs/pkgs/games/prismlauncher/wrapper.nix
@@ -0,0 +1,95 @@
+{ lib
+, stdenv
+, symlinkJoin
+, prismlauncher-unwrapped
+, wrapQtAppsHook
+, addOpenGLRunpath
+, qtbase  # needed for wrapQtAppsHook
+, qtsvg
+, qtwayland
+, xorg
+, libpulseaudio
+, libGL
+, glfw
+, openal
+, jdk8
+, jdk17
+, gamemode
+, flite
+, mesa-demos
+, udev
+, libusb1
+
+, msaClientID ? null
+, gamemodeSupport ? stdenv.isLinux
+, textToSpeechSupport ? stdenv.isLinux
+, controllerSupport ? stdenv.isLinux
+, jdks ? [ jdk17 jdk8 ]
+, additionalLibs ? [ ]
+, additionalPrograms ? [ ]
+}:
+let
+  prismlauncherFinal = prismlauncher-unwrapped.override {
+    inherit msaClientID gamemodeSupport;
+  };
+in
+symlinkJoin {
+  name = "prismlauncher-${prismlauncherFinal.version}";
+
+  paths = [ prismlauncherFinal ];
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtsvg
+  ]
+  ++ lib.optional (lib.versionAtLeast qtbase.version "6" && stdenv.isLinux) qtwayland;
+
+  postBuild = ''
+    wrapQtAppsHook
+  '';
+
+  qtWrapperArgs =
+    let
+      runtimeLibs = (with xorg; [
+        libX11
+        libXext
+        libXcursor
+        libXrandr
+        libXxf86vm
+      ])
+      ++ [
+        # lwjgl
+        libpulseaudio
+        libGL
+        glfw
+        openal
+        stdenv.cc.cc.lib
+
+        # oshi
+        udev
+      ]
+      ++ lib.optional gamemodeSupport gamemode.lib
+      ++ lib.optional textToSpeechSupport flite
+      ++ lib.optional controllerSupport libusb1
+      ++ additionalLibs;
+
+      runtimePrograms = [
+        xorg.xrandr
+        mesa-demos # need glxinfo
+      ]
+      ++ additionalPrograms;
+
+    in
+    [ "--prefix PRISMLAUNCHER_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks}" ]
+    ++ lib.optionals stdenv.isLinux [
+      "--set LD_LIBRARY_PATH ${addOpenGLRunpath.driverLink}/lib:${lib.makeLibraryPath runtimeLibs}"
+      # xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128
+      "--prefix PATH : ${lib.makeBinPath runtimePrograms}"
+    ];
+
+  inherit (prismlauncherFinal) meta;
+}
diff --git a/nixpkgs/pkgs/games/pro-office-calculator/default.nix b/nixpkgs/pkgs/games/pro-office-calculator/default.nix
new file mode 100644
index 000000000000..381a6e8742b0
--- /dev/null
+++ b/nixpkgs/pkgs/games/pro-office-calculator/default.nix
@@ -0,0 +1,24 @@
+{ mkDerivation, lib, fetchFromGitHub, tinyxml-2, cmake, qtbase, qtmultimedia }:
+mkDerivation rec {
+  version = "1.0.13";
+  pname = "pro-office-calculator";
+
+  src = fetchFromGitHub {
+    owner  = "RobJinman";
+    repo   = "pro_office_calc";
+    rev    = "v${version}";
+    sha256 = "1v75cysargmp4fk7px5zgib1p6h5ya4w39rndbzk614fcnv0iipd";
+  };
+
+  buildInputs = [ qtbase qtmultimedia tinyxml-2 ];
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "A completely normal office calculator";
+    homepage = "https://proofficecalculator.com/";
+    maintainers = [ maintainers.pmiddend ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/games/purpur/default.nix b/nixpkgs/pkgs/games/purpur/default.nix
new file mode 100644
index 000000000000..33ec936dc63d
--- /dev/null
+++ b/nixpkgs/pkgs/games/purpur/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, nixosTests, jre_headless, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "purpur";
+  version = "1.19.2r1763";
+
+  src = fetchurl {
+    url = "https://api.purpurmc.org/v2/purpur/${builtins.replaceStrings [ "r" ] [ "/" ] version}/download";
+    sha256 = "sha256-6wcCwVIGV32YQlgB57qthy6uWtuXGN4G8S7uAAgVyDE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  preferLocalBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib/minecraft
+    cp -v $src $out/lib/minecraft/server.jar
+
+    makeWrapper ${jre_headless}/bin/java $out/bin/minecraft-server \
+      --add-flags "-jar $out/lib/minecraft/server.jar nogui"
+  '';
+
+  dontUnpack = true;
+
+  passthru = {
+    tests = { inherit (nixosTests) minecraft-server; };
+  };
+
+  meta = with lib; {
+    description = "A drop-in replacement for Minecraft Paper servers";
+    longDescription = ''
+      Purpur is a drop-in replacement for Minecraft Paper servers designed for configurability, new fun and exciting
+      gameplay features, and performance built on top of Airplane.
+    '';
+    homepage = "https://purpurmc.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ joelkoen ];
+    mainProgram = "minecraft-server";
+  };
+}
diff --git a/nixpkgs/pkgs/games/pysolfc/default.nix b/nixpkgs/pkgs/games/pysolfc/default.nix
new file mode 100644
index 000000000000..c543434b610d
--- /dev/null
+++ b/nixpkgs/pkgs/games/pysolfc/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, fetchzip
+, buildPythonApplication
+, python3Packages
+, desktop-file-utils
+, freecell-solver
+}:
+
+buildPythonApplication rec {
+  pname = "PySolFC";
+  version = "2.20.1";
+
+  src = fetchzip {
+    url = "https://versaweb.dl.sourceforge.net/project/pysolfc/PySolFC/PySolFC-${version}/PySolFC-${version}.tar.xz";
+    hash = "sha256-mEnsq8Su0ses+nqoSFC+Wr0MHY7aTDMbtDV8toYVNPY=";
+  };
+
+  cardsets = fetchzip {
+    url = "https://versaweb.dl.sourceforge.net/project/pysolfc/PySolFC-Cardsets/PySolFC-Cardsets-2.2/PySolFC-Cardsets-2.2.tar.bz2";
+    hash = "sha256-mWJ0l9rvn9KeZ9rCWy7VjngJzJtSQSmG8zGcYFE4yM0=";
+  };
+
+  music = fetchzip {
+    url = "https://versaweb.dl.sourceforge.net/project/pysolfc/PySol-Music/PySol-Music-4.50/pysol-music-4.50.tar.xz";
+    hash = "sha256-sOl5U98aIorrQHJRy34s0HHaSW8hMUE7q84FMQAj5Yg=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    tkinter
+    six
+    random2
+    configobj
+    pysol-cards
+    attrs
+    pycotap
+    # optional :
+    pygame
+    freecell-solver
+    pillow
+  ];
+
+  patches = [
+    ./pysolfc-datadir.patch
+  ];
+
+  nativeBuildInputs = [ desktop-file-utils ];
+  postPatch = ''
+    desktop-file-edit --set-key Icon --set-value ${placeholder "out"}/share/icons/pysol01.png data/pysol.desktop
+    desktop-file-edit --set-key Comment --set-value "${meta.description}" data/pysol.desktop
+  '';
+
+  postInstall = ''
+    mkdir $out/share/PySolFC/cardsets
+    cp -r $cardsets/* $out/share/PySolFC/cardsets
+    cp -r $music/data/music $out/share/PySolFC
+  '';
+
+  # No tests in archive
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A collection of more than 1000 solitaire card games";
+    homepage = "https://pysolfc.sourceforge.io";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ kierdavis ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/pysolfc/pysolfc-datadir.patch b/nixpkgs/pkgs/games/pysolfc/pysolfc-datadir.patch
new file mode 100644
index 000000000000..d9f1cf4e09f5
--- /dev/null
+++ b/nixpkgs/pkgs/games/pysolfc/pysolfc-datadir.patch
@@ -0,0 +1,19 @@
+diff --git a/pysollib/util.py b/pysollib/util.py
+index 8de3f00..26f4bc7 100644
+--- a/pysollib/util.py
++++ b/pysollib/util.py
+@@ -110,13 +110,7 @@ class DataLoader:
+         head, tail = os.path.split(argv0)
+         if not head:
+             head = os.curdir
+-        # dir where placed startup script
+-        path.append(head)
+-        path.append(os.path.join(head, "data"))
+-        path.append(os.path.join(head, os.pardir, "data"))
+-        # dir where placed pysol package
+-        path.append(os.path.join(sys.path[0], "data"))
+-        path.append(os.path.join(sys.path[0], "pysollib", "data"))
++        path.append(os.path.join(head, "..", "share", "PySolFC"))
+         # from settings.py
+         path.extend(DATA_DIRS)
+         # check path for valid directories
diff --git a/nixpkgs/pkgs/games/qgo/default.nix b/nixpkgs/pkgs/games/qgo/default.nix
new file mode 100644
index 000000000000..ec7986c6a36b
--- /dev/null
+++ b/nixpkgs/pkgs/games/qgo/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, qmake
+, qtbase
+, qtmultimedia
+, qttools
+}:
+
+mkDerivation {
+  pname = "qgo";
+  version = "unstable-2017-12-18";
+
+  meta = with lib; {
+    description = "A Go client based on Qt5";
+    longDescription = ''
+      qGo is a Go Client based on Qt 5. It supports playing online at
+      IGS-compatible servers (including some special tweaks for WING and LGS,
+      also NNGS was reported to work) and locally against gnugo (or other
+      GTP-compliant engines). It also has rudimentary support for editing SGF
+      files and parital support for CyberORO/WBaduk, Tygem, Tom, and eWeiqi
+      (developers of these backends are currently inactive, everybody is welcome
+      to take them over).
+
+      Go is an ancient Chinese board game. It's called "åœæ£‹(Wei Qi)" in
+      Chinese, "囲ç¢(Yi Go)" in Japanese, "바둑(Baduk)" in Korean.
+    '';
+    homepage = "https://github.com/pzorin/qgo";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ zalakain ];
+  };
+
+  src = fetchFromGitHub {
+    owner = "pzorin";
+    repo = "qgo";
+    rev = "bef526dda4c79686edd95c88cc68de24f716703c";
+    sha256 = "1xzkayclmhsi07p9mnbf8185jw8n5ikxp2mik3x8qz1i6rmrfl5b";
+  };
+
+  patches = [ ./fix-paths.patch ];
+  postPatch = ''
+    sed -i 's|@out@|'"''${out}"'|g' src/src.pro src/defines.h
+  '';
+  nativeBuildInputs = [ qmake qttools ];
+  buildInputs = [ qtbase qtmultimedia ];
+}
diff --git a/nixpkgs/pkgs/games/qgo/fix-paths.patch b/nixpkgs/pkgs/games/qgo/fix-paths.patch
new file mode 100644
index 000000000000..c1d1e399ec1a
--- /dev/null
+++ b/nixpkgs/pkgs/games/qgo/fix-paths.patch
@@ -0,0 +1,50 @@
+diff --git a/src/defines.h b/src/defines.h
+index 5d40955..82d0627 100644
+--- a/src/defines.h
++++ b/src/defines.h
+@@ -48,7 +48,7 @@
+ * GNUgo default level
+ */
+ #define DEFAULT_ENGINE "gnugo"
+-#define DEFAULT_ENGINE_PATH "/usr/games/"
++#define DEFAULT_ENGINE_PATH ""
+ #define DEFAULT_ENGINE_OPTIONS "--mode gtp --quiet --level 10"
+ 
+ 
+@@ -220,8 +220,8 @@ extern QString applicationPath;
+ 	#define SOUND_PATH_PREFIX			"qGo.app/Contents/Resources/Sounds/"
+     #define TRANSLATIONS_PATH		"qGo.app/Contents/Resources/Translations/"
+ #else
+-    #define SOUND_PATH_PREFIX		"/usr/share/qgo/sounds/"
+-    #define TRANSLATIONS_PATH		"/usr/share/qgo/languages"
++    #define SOUND_PATH_PREFIX		"/@out@/share/qgo/sounds/"
++    #define TRANSLATIONS_PATH		"/@out@/share/qgo/languages"
+ #endif
+ 
+ #endif
+diff --git a/src/src.pro b/src/src.pro
+index f989ce7..b7d691f 100644
+--- a/src/src.pro
++++ b/src/src.pro
+@@ -165,17 +165,17 @@ SOURCES += displayboard.cpp \
+     newgamedialog.cpp
+ 
+ unix*:!macx-* {
+-    QGO_INSTALL_PATH = /usr/share/qgo
+-    QGO_INSTALL_BIN_PATH = /usr/bin
++    QGO_INSTALL_PATH = @out@/share/qgo
++    QGO_INSTALL_BIN_PATH = /@out@/bin
+ 
+-    icon.path = /usr/share/pixmaps
++    icon.path = @out@/share/pixmaps
+     icon.files = resources/pics/qgo.png
+     icon.files += resources/pics/qgo_16x16.xpm
+     icon.files += resources/pics/qgo_32x32.xpm
+     icon.files += resources/pics/qgo_48x48.png
+     icon.files += resources/pics/qgo_48x48.xpm
+     INSTALLS += icon
+-    desktopfile.path = /usr/share/applications
++    desktopfile.path = @out@/share/applications
+     desktopfile.files = qgo.desktop
+     INSTALLS += desktopfile
+ }
diff --git a/nixpkgs/pkgs/games/qqwing/default.nix b/nixpkgs/pkgs/games/qqwing/default.nix
new file mode 100644
index 000000000000..81a10b9ea2af
--- /dev/null
+++ b/nixpkgs/pkgs/games/qqwing/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, perl, autoconf, automake, libtool }:
+
+stdenv.mkDerivation rec {
+  pname = "qqwing";
+  version = "1.3.4";
+
+  src = fetchFromGitHub {
+    owner = "stephenostermiller";
+    repo = "qqwing";
+    rev = "v${version}";
+    sha256 = "1qq0vi4ch4y3a5fb1ncr0yzkj3mbvdiwa3d51qpabq94sh0cz09i";
+  };
+
+  postPatch = ''
+    for file in "src-first-comment.pl" "src_neaten.pl"; do
+      substituteInPlace "build/$file" \
+        --replace "#!/usr/bin/perl" "#!${perl}/bin/perl"
+    done
+
+    substituteInPlace "build/cpp_install.sh" \
+      --replace "sudo " ""
+  '';
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ perl libtool ];
+
+  makeFlags = [ "prefix=$(out)" "tgz" ];
+
+  meta = with lib; {
+    homepage = "https://qqwing.com";
+    description = "Sudoku generating and solving software";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/qtads/default.nix b/nixpkgs/pkgs/games/qtads/default.nix
new file mode 100644
index 000000000000..79a548a7134e
--- /dev/null
+++ b/nixpkgs/pkgs/games/qtads/default.nix
@@ -0,0 +1,27 @@
+{ lib, mkDerivation, fetchFromGitHub, fetchpatch, pkg-config, qmake
+, SDL2, fluidsynth, libsndfile, libvorbis, mpg123, qtbase
+}:
+
+mkDerivation rec {
+  pname = "qtads";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "realnc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-KIqufpvl7zeUtDBXUOAZxBIbfv+s51DoSaZr3jol+bw=";
+  };
+
+  nativeBuildInputs = [ pkg-config qmake ];
+
+  buildInputs = [ SDL2 fluidsynth libsndfile libvorbis mpg123 qtbase ];
+
+  meta = with lib; {
+    homepage = "https://realnc.github.io/qtads/";
+    description = "Multimedia interpreter for TADS games";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/quake2/yquake2/default.nix b/nixpkgs/pkgs/games/quake2/yquake2/default.nix
new file mode 100644
index 000000000000..522a8e39fd88
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake2/yquake2/default.nix
@@ -0,0 +1,90 @@
+{ stdenv, lib, fetchFromGitHub, buildEnv, makeWrapper
+, SDL2, libGL, curl
+, openalSupport ? true, openal
+, Cocoa, OpenAL
+}:
+
+let
+  mkFlag = b: if b then "yes" else "no";
+
+  games = import ./games.nix { inherit stdenv lib fetchFromGitHub; };
+
+  wrapper = import ./wrapper.nix { inherit stdenv lib buildEnv makeWrapper yquake2; };
+
+  yquake2 = stdenv.mkDerivation rec {
+    pname = "yquake2";
+    version = "8.20";
+
+    src = fetchFromGitHub {
+      owner = "yquake2";
+      repo = "yquake2";
+      rev = "QUAKE2_${builtins.replaceStrings ["."] ["_"] version}";
+      sha256 = "sha256-x1mk6qo03b438ZBS16/f7pzMCfugtQvaRcV+hg7Zc/w=";
+    };
+
+    postPatch = ''
+      substituteInPlace src/client/curl/qcurl.c \
+        --replace "\"libcurl.so.3\", \"libcurl.so.4\"" "\"${curl.out}/lib/libcurl.so\", \"libcurl.so.3\", \"libcurl.so.4\""
+    '' + lib.optionalString (openalSupport && !stdenv.isDarwin) ''
+      substituteInPlace Makefile \
+        --replace "\"libopenal.so.1\"" "\"${openal}/lib/libopenal.so.1\""
+    '';
+
+    buildInputs = [ SDL2 libGL curl ]
+      ++ lib.optionals stdenv.isDarwin [ Cocoa OpenAL ]
+      ++ lib.optional openalSupport openal;
+
+    makeFlags = [
+      "WITH_OPENAL=${mkFlag openalSupport}"
+      "WITH_SYSTEMWIDE=yes"
+      "WITH_SYSTEMDIR=$\{out}/share/games/quake2"
+    ];
+
+    enableParallelBuilding = true;
+
+    installPhase = ''
+      # Yamagi Quake II expects all binaries (executables and libs) to be in the
+      # same directory.
+      mkdir -p $out/bin $out/lib/yquake2 $out/share/games/quake2/baseq2
+      cp -r release/* $out/lib/yquake2
+      ln -s $out/lib/yquake2/quake2 $out/bin/yquake2
+      ln -s $out/lib/yquake2/q2ded $out/bin/yq2ded
+      cp $src/stuff/yq2.cfg $out/share/games/quake2/baseq2
+    '';
+
+    meta = with lib; {
+      description = "Yamagi Quake II client";
+      homepage = "https://www.yamagi.org/quake2/";
+      license = licenses.gpl2;
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ tadfisher ];
+    };
+  };
+
+in {
+  inherit yquake2;
+
+  yquake2-ctf = wrapper {
+    games = [ games.ctf ];
+    name = "yquake2-ctf";
+    inherit (games.ctf) description;
+  };
+
+  yquake2-ground-zero = wrapper {
+    games = [ games.ground-zero ];
+    name = "yquake2-ground-zero";
+    inherit (games.ground-zero) description;
+  };
+
+  yquake2-the-reckoning = wrapper {
+    games = [ games.the-reckoning ];
+    name = "yquake2-the-reckoning";
+    inherit (games.the-reckoning) description;
+  };
+
+  yquake2-all-games = wrapper {
+    games = lib.attrValues games;
+    name = "yquake2-all-games";
+    description = "Yamagi Quake II with all add-on games";
+  };
+}
diff --git a/nixpkgs/pkgs/games/quake2/yquake2/games.nix b/nixpkgs/pkgs/games/quake2/yquake2/games.nix
new file mode 100644
index 000000000000..c78689971a63
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake2/yquake2/games.nix
@@ -0,0 +1,55 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+let
+  games = {
+    ctf = {
+      id = "ctf";
+      version = "1.07";
+      description = "'Capture The Flag' for Yamagi Quake II";
+      sha256 = "0i9bwhjvq6yhalrsbzjambh27fdzrzgswqz3jgfn9qw6k1kjvlin";
+    };
+
+    ground-zero = {
+      id = "rogue";
+      version = "2.07";
+      description = "'Ground Zero' for Yamagi Quake II";
+      sha256 = "1m2r4vgfdxpsi0lkf32liwf1433mdhhmjxiicjwzqjlkncjyfcb1";
+    };
+
+    the-reckoning = {
+      id = "xatrix";
+      version = "2.08";
+      description = "'The Reckoning' for Yamagi Quake II";
+      sha256 = "1wp9fg1q8nly2r9hh4394r1h4dxyni3lvdy7g419cz5s8hhn5msr";
+    };
+  };
+
+  toDrv = title: data: stdenv.mkDerivation rec {
+    inherit (data) id version description sha256;
+    inherit title;
+
+    pname = "yquake2-${title}";
+
+    src = fetchFromGitHub {
+      inherit sha256;
+      owner = "yquake2";
+      repo = data.id;
+      rev = "${lib.toUpper id}_${builtins.replaceStrings ["."] ["_"] version}";
+    };
+
+    installPhase = ''
+      mkdir -p $out/lib/yquake2/${id}
+      cp release/* $out/lib/yquake2/${id}
+    '';
+
+    meta = with lib; {
+      inherit (data) description;
+      homepage = "https://www.yamagi.org/quake2/";
+      license = licenses.unfree;
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ tadfisher ];
+    };
+  };
+
+in
+  lib.mapAttrs toDrv games
diff --git a/nixpkgs/pkgs/games/quake2/yquake2/wrapper.nix b/nixpkgs/pkgs/games/quake2/yquake2/wrapper.nix
new file mode 100644
index 000000000000..4850dff99dcd
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake2/yquake2/wrapper.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, buildEnv, makeWrapper, yquake2 }:
+
+{ games
+, name
+, description
+}:
+
+let
+  env = buildEnv {
+    name = "${name}-env";
+    paths = [ yquake2 ] ++ games;
+  };
+
+in stdenv.mkDerivation {
+  name = "${name}-${lib.getVersion yquake2}";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+  '' + lib.concatMapStringsSep "\n" (game: ''
+    makeWrapper ${env}/bin/yquake2 $out/bin/yquake2-${game.title} \
+      --add-flags "+set game ${game.id}"
+    makeWrapper ${env}/bin/yq2ded $out/bin/yq2ded-${game.title} \
+      --add-flags "+set game ${game.id}"
+  '') games;
+
+  meta = {
+    inherit description;
+  };
+}
diff --git a/nixpkgs/pkgs/games/quake3/content/demo.nix b/nixpkgs/pkgs/games/quake3/content/demo.nix
new file mode 100644
index 000000000000..36d0396ec796
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake3/content/demo.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+let
+  version = "1.11-6";
+in stdenv.mkDerivation {
+  pname = "quake3-demodata";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://ftp.gwdg.de/pub/misc/ftp.idsoftware.com/idstuff/quake3/linux/linuxq3ademo-${version}.x86.gz.sh";
+    sha256 = "1v54a1hx1bczk9hgn9qhx8vixsy7xn7wj2pylhfjsybfkgvf7pk4";
+  };
+
+  buildCommand = ''
+    tail -n +165 $src | tar xfz -
+
+    mkdir -p $out/baseq3
+    cp demoq3/*.pk3 $out/baseq3
+  '';
+
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    description = "Quake 3 Arena demo content";
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/quake3/content/hires.nix b/nixpkgs/pkgs/games/quake3/content/hires.nix
new file mode 100644
index 000000000000..7314028d5405
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake3/content/hires.nix
@@ -0,0 +1,26 @@
+{ stdenv, lib, fetchzip }:
+
+stdenv.mkDerivation {
+  pname = "quake3hires";
+  version = "2020-01-20"; # Unknown version, used the date of web.archive.org capture.
+
+  src = fetchzip {
+    url = "https://web.archive.org/web/20200120024216/http://ioquake3.org/files/xcsv_hires.zip";
+    sha256 = "09vhrray8mh1ic2qgcwv0zlmsnz789y32dkkvrz1vdki4yqkf717";
+    stripRoot = false;
+  };
+
+  buildCommand = ''
+    mkdir -p $out/baseq3
+    install -Dm444 $src/xcsv_bq3hi-res.pk3 $out/baseq3/xcsv_bq3hi-res.pk3
+  '';
+
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    description = "Quake 3 high-resolution textures";
+    license = licenses.cc0;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rvolosatovs ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/quake3/content/pointrelease.nix b/nixpkgs/pkgs/games/quake3/content/pointrelease.nix
new file mode 100644
index 000000000000..d9c9a55ddce9
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake3/content/pointrelease.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+let
+  version = "1.32b-3";
+in stdenv.mkDerivation {
+  pname = "quake3-pointrelease";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://ftp.gwdg.de/pub/misc/ftp.idsoftware.com/idstuff/quake3/linux/linuxq3apoint-${version}.x86.run";
+    sha256 = "11piyksfqyxwl9mpgbc71w9sacsh4d3cdsgia0cy0dbbap2k4qf3";
+  };
+
+  buildCommand = ''
+    sh $src --tar xf
+
+    mkdir -p $out/baseq3
+    cp baseq3/*.pk3 $out/baseq3
+  '';
+
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    description = "Quake 3 Arena point release";
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/quake3/ioquake/Makefile.local b/nixpkgs/pkgs/games/quake3/ioquake/Makefile.local
new file mode 100644
index 000000000000..9f487970eabc
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake3/ioquake/Makefile.local
@@ -0,0 +1,6 @@
+USE_CURL = 1
+USE_CURL_DLOPEN = 0
+USE_FREETYPE = 1
+USE_INTERNAL_LIBS = 0
+USE_OPENAL = 1
+USE_OPENAL_DLOPEN = 0
diff --git a/nixpkgs/pkgs/games/quake3/ioquake/default.nix b/nixpkgs/pkgs/games/quake3/ioquake/default.nix
new file mode 100644
index 000000000000..437b99ae3439
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake3/ioquake/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, which
+, copyDesktopItems
+, makeBinaryWrapper
+, SDL2
+, libGL
+, openal
+, curl
+, speex
+, opusfile
+, libogg
+, libvorbis
+, libjpeg
+, makeDesktopItem
+, freetype
+, mumble
+}:
+
+stdenv.mkDerivation {
+  pname = "ioquake3";
+  version = "unstable-2023-08-13";
+
+  src = fetchFromGitHub {
+    owner = "ioquake";
+    repo = "ioq3";
+    rev = "ee950eb7b0e41437cc23a9943254c958da8a61ab";
+    sha256 = "sha256-NfhInwrtw85i2mnv7EtBrrpNaslaQaVhLNlK0I9aYto=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeBinaryWrapper
+    pkg-config
+    which
+  ];
+
+  buildInputs = [
+    SDL2
+    libGL
+    openal
+    curl
+    speex
+    opusfile
+    libogg
+    libvorbis
+    libjpeg
+    freetype
+    mumble
+  ];
+
+  enableParallelBuilding = true;
+
+  preConfigure = ''
+    cp ${./Makefile.local} ./Makefile.local
+  '';
+
+  installTargets = [ "copyfiles" ];
+
+  installFlags = [ "COPYDIR=$(out)/share/ioquake3" ];
+
+  postInstall = ''
+    install -Dm644 misc/quake3.svg $out/share/icons/hicolor/scalable/apps/ioquake3.svg
+
+    makeWrapper $out/share/ioquake3/ioquake3.* $out/bin/ioquake3
+    makeWrapper $out/share/ioquake3/ioq3ded.* $out/bin/ioq3ded
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "IOQuake3";
+      exec = "ioquake3";
+      icon = "ioquake3";
+      comment = "A fast-paced 3D first-person shooter, a community effort to continue supporting/developing id's Quake III Arena";
+      desktopName = "ioquake3";
+      categories = [ "Game" "ActionGame" ];
+    })
+  ];
+
+  meta = {
+    homepage = "https://ioquake3.org/";
+    description = "A fast-paced 3D first-person shooter, a community effort to continue supporting/developing id's Quake III Arena";
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "ioquake3";
+    maintainers = with lib.maintainers; [ abbradar drupol eelco rvolosatovs ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/quake3/quake3e/default.nix b/nixpkgs/pkgs/games/quake3/quake3e/default.nix
new file mode 100644
index 000000000000..a98772d241d0
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake3/quake3e/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, curl, libGL, libX11, libXxf86dga, alsa-lib, libXrandr, libXxf86vm, libXext, SDL2, glibc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "Quake3e";
+  version = "2022-04-01-dev";
+
+  src = fetchFromGitHub {
+    owner = "ec-";
+    repo = pname;
+    rev = "c6cec00b858aa5955eb1d6eb65b9bfd41fd869cb";
+    sha256 = "0qd13fndbhgkkmhxbprpzmj2l2v9ihacxagpdqi9sg9nrzvahr9h";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ curl libGL libX11 libXxf86dga alsa-lib libXrandr libXxf86vm libXext SDL2 glibc ];
+  env.NIX_CFLAGS_COMPILE = "-I${SDL2.dev}/include/SDL2";
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    sed -i -e 's#OpenGLLib = dlopen( dllname#OpenGLLib = dlopen( "${libGL}/lib/libGL.so"#' code/unix/linux_qgl.c
+    sed -i -e 's#Sys_LoadLibrary( "libpthread.so.0" )#Sys_LoadLibrary( "${glibc}/lib/libpthread.so.0" )#' code/unix/linux_snd.c
+    sed -i -e 's#Sys_LoadLibrary( "libasound.so.2" )#Sys_LoadLibrary( "${alsa-lib}/lib/libasound.so.2" )#' code/unix/linux_snd.c
+    sed -i -e 's#Sys_LoadLibrary( "libXxf86dga.so.1" )#Sys_LoadLibrary( "${libXxf86dga}/lib/libXxf86dga.so.1" )#' code/unix/x11_dga.c
+    sed -i -e 's#Sys_LoadLibrary( "libXrandr.so.2" )#Sys_LoadLibrary( "${libXrandr}/lib/libXrandr.so.2" )#' code/unix/x11_randr.c
+    sed -i -e 's#Sys_LoadLibrary( "libXxf86vm.so.1" )#Sys_LoadLibrary( "${libXxf86vm}/lib/libXxf86vm.so.1" )#' code/unix/x11_randr.c
+    sed -i -e 's#Sys_LoadLibrary( "libXxf86vm.so.1" )#Sys_LoadLibrary( "${libXxf86vm}/lib/libXxf86vm.so.1" )#' code/unix/x11_vidmode.c
+    sed -i -e 's#"libcurl.so.4"#"${curl.out}/lib/libcurl.so.4"#' code/client/cl_curl.h
+  '';
+
+  # Default value for `USE_SDL` changed (from 0 to 1) in 5f8ce6d (2020-12-26)
+  # Setting `USE_SDL=0` in `makeFlags` doesn't work
+  preConfigure = ''
+    sed -i 's/USE_SDL *= 1/USE_SDL = 0/' Makefile
+  '';
+
+  installPhase = ''
+    make install DESTDIR=$out/lib
+    makeWrapper $out/lib/quake3e.x64 $out/bin/quake3e
+    makeWrapper $out/lib/quake3e.ded.x64 $out/bin/quake3e.ded
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ec-/Quake3e";
+    description = "Improved Quake III Arena engine";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pmiddend ];
+    badPlatforms = platforms.aarch64;
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/games/quake3/wrapper/default.nix b/nixpkgs/pkgs/games/quake3/wrapper/default.nix
new file mode 100644
index 000000000000..3c777c5b27fb
--- /dev/null
+++ b/nixpkgs/pkgs/games/quake3/wrapper/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, buildEnv, lib, libGL, ioquake3, makeWrapper }:
+
+{ paks, name ? (lib.head paks).name, description ? "" }:
+
+let
+  libPath = lib.makeLibraryPath [ libGL stdenv.cc.cc ];
+  env = buildEnv {
+    name = "quake3-env";
+    paths = [ ioquake3 ] ++ paks;
+  };
+
+in stdenv.mkDerivation {
+  name = "${name}-${ioquake3.name}";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+
+    # We add Mesa to the end of $LD_LIBRARY_PATH to provide fallback
+    # software rendering. GCC is needed so that libgcc_s.so can be found
+    # when Mesa is used.
+    makeWrapper ${env}/bin/ioquake3.* $out/bin/quake3 \
+      --suffix-each LD_LIBRARY_PATH ':' "${libPath}" \
+      --add-flags "+set fs_basepath ${env} +set r_allowSoftwareGL 1"
+
+    makeWrapper ${env}/bin/ioq3ded.* $out/bin/quake3-server \
+      --add-flags "+set fs_basepath ${env}"
+  '';
+
+  meta = {
+    inherit description;
+  };
+}
diff --git a/nixpkgs/pkgs/games/quakespasm/default.nix b/nixpkgs/pkgs/games/quakespasm/default.nix
new file mode 100644
index 000000000000..b9541d1b274e
--- /dev/null
+++ b/nixpkgs/pkgs/games/quakespasm/default.nix
@@ -0,0 +1,105 @@
+{ lib, stdenv, SDL, SDL2, fetchurl, gzip, libvorbis, libmad, flac, libopus, opusfile, libogg, libxmp
+, Cocoa, CoreAudio, CoreFoundation, IOKit, OpenGL
+, copyDesktopItems, makeDesktopItem, pkg-config
+, useSDL2 ? stdenv.isDarwin # TODO: CoreAudio fails to initialize with SDL 1.x for some reason.
+}:
+
+stdenv.mkDerivation rec {
+  pname = "quakespasm";
+  version = "0.96.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/quakespasm/quakespasm-${version}.tar.gz";
+    sha256 = "sha256-Sa4lLALB3xpMGVjpKnzGl1OBEJcLOHDcFGEFsO0wwOw=";
+  };
+
+  sourceRoot = "${pname}-${version}/Quake";
+
+  patches = lib.optionals stdenv.isDarwin [
+    # Makes Darwin Makefile use system libraries instead of ones from app bundle
+    ./quakespasm-darwin-makefile-improvements.patch
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    pkg-config
+  ];
+
+  buildInputs = [
+    gzip libvorbis libmad flac libopus opusfile libogg libxmp
+    (if useSDL2 then SDL2 else SDL)
+  ] ++ lib.optionals stdenv.isDarwin [
+    Cocoa CoreAudio IOKit OpenGL
+  ] ++ lib.optionals (stdenv.isDarwin && useSDL2) [
+    CoreFoundation
+  ];
+
+  buildFlags = [
+    "DO_USERDIRS=1"
+    # Makefile defaults, set here to enforce consistency on Darwin build
+    "USE_CODEC_WAVE=1"
+    "USE_CODEC_MP3=1"
+    "USE_CODEC_VORBIS=1"
+    "USE_CODEC_FLAC=1"
+    "USE_CODEC_OPUS=1"
+    "USE_CODEC_MIKMOD=0"
+    "USE_CODEC_UMX=0"
+    "USE_CODEC_XMP=1"
+    "MP3LIB=mad"
+    "VORBISLIB=vorbis"
+  ] ++ lib.optionals useSDL2 [
+    "SDL_CONFIG=sdl2-config"
+    "USE_SDL2=1"
+  ];
+
+  makefile = if (stdenv.isDarwin) then "Makefile.darwin" else "Makefile";
+
+  preInstall = ''
+    mkdir -p "$out/bin"
+    substituteInPlace Makefile --replace "/usr/local/games" "$out/bin"
+    substituteInPlace Makefile.darwin --replace "/usr/local/games" "$out/bin"
+  '';
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    # Let's build app bundle
+    mkdir -p $out/Applications/Quake.app/Contents/MacOS
+    mkdir -p $out/Applications/Quake.app/Contents/Resources
+    cp ../MacOSX/Info.plist $out/Applications/Quake.app/Contents/
+    cp ../MacOSX/QuakeSpasm.icns $out/Applications/Quake.app/Contents/Resources/
+    cp -r ../MacOSX/English.lproj $out/Applications/Quake.app/Contents/Resources/
+    ln -sf $out/bin/quake $out/Applications/Quake.app/Contents/MacOS/quake
+
+    substituteInPlace $out/Applications/Quake.app/Contents/Info.plist \
+      --replace '>''${EXECUTABLE_NAME}' '>quake'
+    substituteInPlace $out/Applications/Quake.app/Contents/Info.plist \
+      --replace '>''${PRODUCT_NAME}' '>QuakeSpasm'
+  '';
+
+  enableParallelBuilding = true;
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "quakespasm";
+      exec = "quake";
+      desktopName = "Quakespasm";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "An engine for iD software's Quake";
+    homepage = "https://quakespasm.sourceforge.net/";
+    longDescription = ''
+      QuakeSpasm is a modern, cross-platform Quake 1 engine based on FitzQuake.
+      It includes support for 64 bit CPUs and custom music playback, a new sound driver,
+      some graphical niceities, and numerous bug-fixes and other improvements.
+      Quakespasm utilizes either the SDL or SDL2 frameworks, so choose which one
+      works best for you. SDL is probably less buggy, but SDL2 has nicer features
+      and smoother mouse input - though no CD support.
+    '';
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mikroskeem ];
+    mainProgram = "quake";
+  };
+}
diff --git a/nixpkgs/pkgs/games/quakespasm/quakespasm-darwin-makefile-improvements.patch b/nixpkgs/pkgs/games/quakespasm/quakespasm-darwin-makefile-improvements.patch
new file mode 100644
index 000000000000..c3098fa23d63
--- /dev/null
+++ b/nixpkgs/pkgs/games/quakespasm/quakespasm-darwin-makefile-improvements.patch
@@ -0,0 +1,111 @@
+diff --git a/Quake/Makefile.darwin b/Quake/Makefile.darwin
+index 6a08e6d..4e320cd 100644
+--- a/Makefile.darwin
++++ b/Makefile.darwin
+@@ -50,6 +50,7 @@ LINKER = $(CC)
+ LIPO ?= lipo
+ 
+ STRIP ?= strip -S
++PKG_CONFIG ?= pkg-config
+ 
+ CPUFLAGS=
+ LDFLAGS =
+@@ -86,9 +87,6 @@ USE_RPATH=1
+ endif
+ CFLAGS += $(call check_gcc,-std=gnu11,)
+ CFLAGS += $(CPUFLAGS)
+-ifeq ($(USE_RPATH),1)
+-LDFLAGS+=-Wl,-rpath,@executable_path/../Frameworks
+-endif
+ ifneq ($(DEBUG),0)
+ DFLAGS += -DDEBUG
+ CFLAGS += -g
+@@ -117,19 +115,14 @@ CFLAGS += -DGL_SILENCE_DEPRECATION=1
+ # not relying on sdl-config command and assuming
+ # /Library/Frameworks/SDL.framework is available
+ SDL_CFLAGS =-D_GNU_SOURCE=1 -D_THREAD_SAFE
+-SDL_CFLAGS+=-DSDL_FRAMEWORK -DNO_SDL_CONFIG
+ ifeq ($(USE_SDL2),1)
+-SDL_FRAMEWORK_NAME = SDL2
++SDL_CONFIG ?= sdl2-config
+ else
+-SDL_FRAMEWORK_NAME = SDL
+-endif
+-# default to our local SDL[2].framework for build
+-SDL_FRAMEWORK_PATH ?=../MacOSX
+-ifneq ($(SDL_FRAMEWORK_PATH),)
+-SDL_LIBS  +=-F$(SDL_FRAMEWORK_PATH)
+-SDL_CFLAGS+=-F$(SDL_FRAMEWORK_PATH)
++SDL_CONFIG ?= sdl-config
+ endif
+-SDL_LIBS  +=-Wl,-framework,$(SDL_FRAMEWORK_NAME) -Wl,-framework,Cocoa
++SDL_CFLAGS := $(shell $(SDL_CONFIG) --cflags)
++SDL_LIBS   := $(shell $(SDL_CONFIG) --libs)
++SDL_LIBS   += -Wl,-framework,Cocoa
+ 
+ NET_LIBS   :=
+ 
+@@ -165,45 +158,31 @@ ifeq ($(USE_CODEC_WAVE),1)
+ CFLAGS+= -DUSE_CODEC_WAVE
+ endif
+ ifeq ($(USE_CODEC_FLAC),1)
+-CFLAGS+= -DUSE_CODEC_FLAC
+-CODEC_INC = -I../MacOSX/codecs/include
+-CODEC_LINK= -L../MacOSX/codecs/lib
+-CODECLIBS+= -lFLAC
++CFLAGS+= -DUSE_CODEC_FLAC $(shell $(PKG_CONFIG) --cflags flac)
++CODECLIBS+= $(shell $(PKG_CONFIG) --libs flac)
+ endif
+ ifeq ($(USE_CODEC_OPUS),1)
+-CFLAGS+= -DUSE_CODEC_OPUS
+-CODEC_INC = -I../MacOSX/codecs/include
+-CODEC_LINK= -L../MacOSX/codecs/lib
+-CODECLIBS+= -lopusfile -lopus -logg
++CFLAGS+= -DUSE_CODEC_OPUS $(shell $(PKG_CONFIG) --cflags ogg opus opusfile)
++CODECLIBS+= $(shell $(PKG_CONFIG) --libs ogg opus opusfile)
+ endif
+ ifeq ($(USE_CODEC_VORBIS),1)
+-CFLAGS+= -DUSE_CODEC_VORBIS $(cpp_vorbisdec)
+-CODEC_INC = -I../MacOSX/codecs/include
+-CODEC_LINK= -L../MacOSX/codecs/lib
+-CODECLIBS+= $(lib_vorbisdec)
++CFLAGS+= -DUSE_CODEC_VORBIS $(shell $(PKG_CONFIG) --cflags ogg vorbis vorbisfile)
++CODECLIBS+= $(shell $(PKG_CONFIG) --libs ogg vorbis vorbisfile)
+ endif
+ ifeq ($(USE_CODEC_MP3),1)
+-CFLAGS+= -DUSE_CODEC_MP3
+-CODEC_INC = -I../MacOSX/codecs/include
+-CODEC_LINK= -L../MacOSX/codecs/lib
+-CODECLIBS+= $(lib_mp3dec)
++CFLAGS+= -DUSE_CODEC_MP3 $(shell $(PKG_CONFIG) --cflags $(MP3LIB))
++CODECLIBS+= $(shell $(PKG_CONFIG) --libs $(MP3LIB))
+ endif
+ ifeq ($(USE_CODEC_MIKMOD),1)
+ CFLAGS+= -DUSE_CODEC_MIKMOD
+-CODEC_INC = -I../MacOSX/codecs/include
+-CODEC_LINK= -L../MacOSX/codecs/lib
+ CODECLIBS+= -lmikmod
+ endif
+ ifeq ($(USE_CODEC_XMP),1)
+-CFLAGS+= -DUSE_CODEC_XMP
+-CODEC_INC = -I../MacOSX/codecs/include
+-CODEC_LINK= -L../MacOSX/codecs/lib
+-CODECLIBS+= -lxmp
++CFLAGS+= -DUSE_CODEC_XMP $(shell $(PKG_CONFIG) --cflags libxmp)
++CODECLIBS+= $(shell $(PKG_CONFIG) --libs libxmp)
+ endif
+ ifeq ($(USE_CODEC_MODPLUG),1)
+ CFLAGS+= -DUSE_CODEC_MODPLUG
+-CODEC_INC = -I../MacOSX/codecs/include
+-CODEC_LINK= -L../MacOSX/codecs/lib
+ CODECLIBS+= -lmodplug
+ endif
+ ifeq ($(USE_CODEC_UMX),1)
+@@ -333,4 +312,7 @@ debug:
+ clean:
+ 	$(RM) *.o *.d $(DEFAULT_TARGET)
+ 
++install: quakespasm
++	install -D -m 755 quakespasm /usr/local/games/quake
++
+ sinclude $(OBJS:.o=.d)
diff --git a/nixpkgs/pkgs/games/quakespasm/vulkan.nix b/nixpkgs/pkgs/games/quakespasm/vulkan.nix
new file mode 100644
index 000000000000..50862be46bd3
--- /dev/null
+++ b/nixpkgs/pkgs/games/quakespasm/vulkan.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, SDL2, gzip, libvorbis, libmad, vulkan-headers, vulkan-loader, moltenvk
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vkquake";
+  version = "1.22.3";
+
+  src = fetchFromGitHub {
+    owner = "Novum";
+    repo = "vkQuake";
+    rev = version;
+    sha256 = "sha256-+8DU1QT3Lgqf1AIReVnXQ2Lq6R6eBb8VjdkJfAn/Rtc=";
+  };
+
+  sourceRoot = "${src.name}/Quake";
+
+  nativeBuildInputs = [
+    makeWrapper
+    vulkan-headers
+  ];
+
+  buildInputs = [
+    gzip
+    SDL2
+    libvorbis
+    libmad
+    vulkan-loader
+  ] ++ lib.optional stdenv.isDarwin moltenvk;
+
+  buildFlags = [ "DO_USERDIRS=1" ];
+
+  preInstall = ''
+    mkdir -p "$out/bin"
+  '';
+
+  makeFlags = [ "prefix=$(out) bindir=$(out)/bin" ];
+
+  postFixup = ''
+    wrapProgram $out/bin/vkquake \
+      --prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Vulkan Quake port based on QuakeSpasm";
+    homepage = src.meta.homepage;
+    longDescription = ''
+      vkQuake is a Quake 1 port using Vulkan instead of OpenGL for rendering.
+      It is based on the popular QuakeSpasm port and runs all mods compatible with it
+      like Arcane Dimensions or In The Shadows. vkQuake also serves as a Vulkan demo
+      application that shows basic usage of the API. For example it demonstrates render
+      passes & sub passes, pipeline barriers & synchronization, compute shaders, push &
+      specialization constants, CPU/GPU parallelism and memory pooling.
+    '';
+
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ ylh ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/quantumminigolf/default.nix b/nixpkgs/pkgs/games/quantumminigolf/default.nix
new file mode 100644
index 000000000000..7ecafa5eab65
--- /dev/null
+++ b/nixpkgs/pkgs/games/quantumminigolf/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, fftwSinglePrec, freetype, SDL, SDL_ttf }:
+
+stdenv.mkDerivation rec {
+  pname = "quantumminigolf";
+  version = "1.1.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/quantumminigolf/quantumminigolf/${version}/quantumminigolf-${version}.src.tar.gz";
+    sha256 = "sha256-Y3LUGk6pAuNGVOYkc0WYDbgJFtwJJn+aLRHmCKY7W5k=";
+  };
+
+  buildInputs = [
+    fftwSinglePrec
+    freetype
+    SDL
+    SDL_ttf
+  ];
+
+  preBuild = ''
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${lib.getDev SDL}/include/SDL -I${SDL_ttf}/include/SDL"
+
+    sed -re 's@"(gfx|fonts|tracks)/@"'"$out"'/share/quantumminigolf/\1/@g' -i *.cpp
+  '';
+
+  installPhase = ''
+    mkdir -p "$out"/{share/doc,share/quantumminigolf,bin}
+    cp README THANKS LICENSE "$out/share/doc"
+    cp -r fonts gfx tracks "$out/share/quantumminigolf"
+    cp quantumminigolf "$out/bin"
+  '';
+
+  meta = with lib; {
+    description = "Quantum mechanics-based minigolf-like game";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/games/qzdl/default.nix b/nixpkgs/pkgs/games/qzdl/default.nix
new file mode 100644
index 000000000000..0b44328fb8e4
--- /dev/null
+++ b/nixpkgs/pkgs/games/qzdl/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, inih
+, ninja
+, pkg-config
+, qtbase
+, wrapQtAppsHook
+, makeDesktopItem
+, copyDesktopItems
+}:
+
+stdenv.mkDerivation rec {
+  pname = "qzdl";
+  version = "unstable-2023-04-04";
+
+  src = fetchFromGitHub {
+    owner = "qbasicer";
+    repo = "qzdl";
+    rev = "44aaec0182e781a3cef373e5c795c9dbd9cd61bb";
+    hash = "sha256-K/mJQb7uO2H94krWJIJtFRYd6BAe2TX1xBt6fGBb1tA=";
+  };
+
+  patches = [
+    ./non-bundled-inih.patch
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    copyDesktopItems
+    ninja
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    inih
+    qtbase
+  ];
+
+  postInstall = ''
+    install -Dm644 $src/res/zdl3.svg $out/share/icons/hicolor/scalable/apps/zdl3.svg
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "zdl3";
+      exec = "zdl %U";
+      icon = "zdl3";
+      desktopName = "ZDL";
+      genericName = "A ZDoom WAD Launcher";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "A ZDoom WAD Launcher";
+    homepage = "https://zdl.vectec.net";
+    license = licenses.gpl3Only;
+    inherit (qtbase.meta) platforms;
+    maintainers = with maintainers; [ azahi ];
+    mainProgram = "zdl";
+  };
+}
diff --git a/nixpkgs/pkgs/games/qzdl/non-bundled-inih.patch b/nixpkgs/pkgs/games/qzdl/non-bundled-inih.patch
new file mode 100644
index 000000000000..7e47dd8c2017
--- /dev/null
+++ b/nixpkgs/pkgs/games/qzdl/non-bundled-inih.patch
@@ -0,0 +1,36 @@
+diff --git i/CMakeLists.txt w/CMakeLists.txt
+index 10a8fb6..dcab540 100644
+--- i/CMakeLists.txt
++++ w/CMakeLists.txt
+@@ -6,16 +6,8 @@ set(CMAKE_AUTOMOC ON)
+ project(qzdl LANGUAGES C CXX)
+ find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
+ 
+-include(FetchContent)
+-FetchContent_Declare(
+-	inih
+-	GIT_REPOSITORY https://github.com/benhoyt/inih.git
+-	GIT_TAG r44
+-)
+-FetchContent_GetProperties(inih)
+-if (NOT inih_POPULATED)
+-	FetchContent_Populate(inih)
+-endif()
++find_package(PkgConfig)
++pkg_check_modules(INIH inih)
+ 
+ add_executable(
+ 	zdl
+@@ -45,9 +37,8 @@ add_executable(
+ 	libwad.cpp
+ 	qzdl.cpp
+ 	${PROJECT_SOURCE_DIR}/zdlconf/zdlconf.cpp
+-	${inih_SOURCE_DIR}/ini.c
+ )
+ 
+-target_include_directories(zdl PRIVATE ${PROJECT_SOURCE_DIR}/zdlconf)
+-target_include_directories(zdl PRIVATE ${inih_SOURCE_DIR})
+-target_link_libraries(zdl Qt5::Core Qt5::Widgets)
++target_include_directories(zdl PRIVATE ${PROJECT_SOURCE_DIR}/zdlconf ${INIH_INCLUDEDIR})
++target_link_libraries(zdl Qt5::Core Qt5::Widgets ${INIH_LDFLAGS})
++install(TARGETS zdl RUNTIME DESTINATION "bin")
diff --git a/nixpkgs/pkgs/games/r2mod_cli/default.nix b/nixpkgs/pkgs/games/r2mod_cli/default.nix
new file mode 100644
index 000000000000..3ea7432550fc
--- /dev/null
+++ b/nixpkgs/pkgs/games/r2mod_cli/default.nix
@@ -0,0 +1,38 @@
+{ fetchFromGitHub
+, bashInteractive
+, jq
+, makeWrapper
+, p7zip
+, lib, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "r2mod_cli";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "Foldex";
+    repo = "r2mod_cli";
+    rev = "v${version}";
+    sha256 = "sha256-VtJtAyojFOkMLBfpQ6N+8fDDkcJtVCflWjwsdq8OD0w=";
+  };
+
+  buildInputs = [ bashInteractive ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "DESTDIR=" "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/r2mod --prefix PATH : "${lib.makeBinPath [ jq p7zip ]}";
+  '';
+
+  meta = with lib; {
+    description = "A Risk of Rain 2 Mod Manager in Bash";
+    homepage = "https://github.com/foldex/r2mod_cli";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.reedrw ];
+    mainProgram = "r2mod";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/r2modman/default.nix b/nixpkgs/pkgs/games/r2modman/default.nix
new file mode 100644
index 000000000000..e48ce9e49fff
--- /dev/null
+++ b/nixpkgs/pkgs/games/r2modman/default.nix
@@ -0,0 +1,118 @@
+{ lib
+, stdenv
+, yarn
+, fetchYarnDeps
+, fixup_yarn_lock
+, nodejs
+, electron
+, fetchFromGitHub
+, gitUpdater
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+}:
+
+stdenv.mkDerivation rec {
+  pname = "r2modman";
+  version = "3.1.44";
+
+  src = fetchFromGitHub {
+    owner = "ebkr";
+    repo = "r2modmanPlus";
+    rev = "v${version}";
+    hash = "sha256-jiYrJtdM2LPwYDAgoGa0hGJcYNRiAKIuDuKZmSZ7OR4=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-CXitb/b2tvTfrkFrFv4KP4WdmMg+1sDtC/s2u5ezDfI=";
+  };
+
+  patches = [
+    # Make it possible to launch Steam games from r2modman.
+    ./steam-launch-fix.patch
+  ];
+
+  nativeBuildInputs = [
+    yarn
+    fixup_yarn_lock
+    nodejs
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    # Workaround for webpack bug
+    # https://github.com/webpack/webpack/issues/14532
+    export NODE_OPTIONS="--openssl-legacy-provider"
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    fixup_yarn_lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules/
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn --offline quasar build --mode electron --skip-pkg
+
+    # Remove dev dependencies.
+    yarn install --production --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/r2modman
+    cp -r dist/electron/UnPackaged/. node_modules $out/share/r2modman
+
+    (
+      cd public/icons
+      for img in *png; do
+        dimensions=''${img#favicon-}
+        dimensions=''${dimensions%.png}
+        mkdir -p $out/share/icons/hicolor/$dimensions/apps
+        cp $img $out/share/icons/hicolor/$dimensions/apps/${pname}.png
+      done
+    )
+
+    makeWrapper '${electron}/bin/electron' "$out/bin/r2modman" \
+      --inherit-argv0 \
+      --add-flags "$out/share/r2modman" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = pname;
+      icon = pname;
+      desktopName = pname;
+      comment = meta.description;
+      categories = [ "Game" ];
+      keywords = [ "launcher" "mod manager" "thunderstore" ];
+    })
+  ];
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    description = "Unofficial Thunderstore mod manager";
+    homepage = "https://github.com/ebkr/r2modmanPlus";
+    changelog = "https://github.com/ebkr/r2modmanPlus/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aidalgol huantian ];
+    inherit (electron.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/games/r2modman/steam-launch-fix.patch b/nixpkgs/pkgs/games/r2modman/steam-launch-fix.patch
new file mode 100644
index 000000000000..4a52c8fdb359
--- /dev/null
+++ b/nixpkgs/pkgs/games/r2modman/steam-launch-fix.patch
@@ -0,0 +1,21 @@
+diff --git a/src/r2mm/launching/runners/linux/SteamGameRunner_Linux.ts b/src/r2mm/launching/runners/linux/SteamGameRunner_Linux.ts
+index ddee0e9..fc9ffca 100644
+--- a/src/r2mm/launching/runners/linux/SteamGameRunner_Linux.ts
++++ b/src/r2mm/launching/runners/linux/SteamGameRunner_Linux.ts
+@@ -61,15 +61,9 @@ export default class SteamGameRunner_Linux extends GameRunnerProvider {
+     async start(game: Game, args: string): Promise<void | R2Error> {
+ 
+         const settings = await ManagerSettings.getSingleton(game);
+-        const steamDir = await GameDirectoryResolverProvider.instance.getSteamDirectory();
+-        if(steamDir instanceof R2Error) {
+-            return steamDir;
+-        }
+-
+-        LoggerProvider.instance.Log(LogSeverity.INFO, `Steam directory is: ${steamDir}`);
+ 
+         try {
+-            const cmd = `"${steamDir}/steam.sh" -applaunch ${game.activePlatform.storeIdentifier} ${args} ${settings.getContext().gameSpecific.launchParameters}`;
++            const cmd = `steam -applaunch ${game.activePlatform.storeIdentifier} ${args} ${settings.getContext().gameSpecific.launchParameters}`;
+             LoggerProvider.instance.Log(LogSeverity.INFO, `Running command: ${cmd}`);
+             await exec(cmd);
+         } catch(err) {
diff --git a/nixpkgs/pkgs/games/racer/default.nix b/nixpkgs/pkgs/games/racer/default.nix
new file mode 100644
index 000000000000..bdb56c85dbff
--- /dev/null
+++ b/nixpkgs/pkgs/games/racer/default.nix
@@ -0,0 +1,32 @@
+{ fetchurl, lib, stdenv, allegro, libjpeg, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "racer";
+  version = "1.1";
+
+  src = if stdenv.hostPlatform.system == "i686-linux" then fetchurl {
+    url = "http://hippo.nipax.cz/src/racer-${version}.tar.gz";
+    sha256 = "0fll1qkqfcjq87k0jzsilcw701z92lfxn2y5ga1n038772lymxl9";
+  } else if stdenv.hostPlatform.system == "x86_64-linux" then fetchurl {
+    url = "https://hippo.nipax.cz/src/racer-${version}.64.tar.gz";
+    sha256 = "0rjy3gmlhwfkb9zs58j0mc0dar0livwpbc19r6zw5r2k6r7xdan0";
+  } else
+    throw "System not supported";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ allegro libjpeg ];
+
+  prePatch = ''
+    sed -i s,/usr/local,$out, Makefile src/HGFX.cpp src/STDH.cpp
+    sed -i s,/usr/share,$out/share, src/HGFX.cpp src/STDH.cpp
+  '';
+
+  patches = [ ./mkdir.patch ];
+
+  meta = {
+    description = "Car racing game";
+    homepage = "http://hippo.nipax.cz/download.en.php";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/racer/mkdir.patch b/nixpkgs/pkgs/games/racer/mkdir.patch
new file mode 100644
index 000000000000..910eaf390f4c
--- /dev/null
+++ b/nixpkgs/pkgs/games/racer/mkdir.patch
@@ -0,0 +1,13 @@
+diff --git a/src/STDH.cpp b/src/STDH.cpp
+index 5f78473..47c3f8b 100644
+--- a/src/STDH.cpp
++++ b/src/STDH.cpp
+@@ -5,6 +5,8 @@
+ #include "player.h"

+ #include "drivers.h"

+ #include "cup.h"

++#include <sys/stat.h>
++#include <sys/types.h>
+ 

+ HScreen hscreen;

+ 

diff --git a/nixpkgs/pkgs/games/randtype/default.nix b/nixpkgs/pkgs/games/randtype/default.nix
new file mode 100644
index 000000000000..97993a5ffdac
--- /dev/null
+++ b/nixpkgs/pkgs/games/randtype/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchzip, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "randtype";
+  version = "1.13";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/randtype/${pname}-${version}.tar.gz";
+    sha256 = "055xs02qwpgbkn2l57bwghbsrsysg1zhm2asp0byvjpz4sc4w1rd";
+  };
+
+  buildInputs = [ zlib ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/man/man1 $out/bin
+    install -cp randtype.1.gz $out/share/man/man1
+    install -cps randtype $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "semi-random text typer";
+    homepage = "https://benkibbey.wordpress.com/randtype/";
+    maintainers = with maintainers; [ dandellion ];
+    license = licenses.gpl2Only;
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/randtype.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/games/rare/default.nix b/nixpkgs/pkgs/games/rare/default.nix
new file mode 100644
index 000000000000..5253d78be575
--- /dev/null
+++ b/nixpkgs/pkgs/games/rare/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, fetchFromGitHub
+, buildPythonApplication
+, qt5
+, legendary-gl
+, pypresence
+, pyqt5
+, python
+, qtawesome
+, requests
+, typing-extensions
+}:
+
+buildPythonApplication rec {
+  pname = "rare";
+  version = "1.10.3";
+
+  src = fetchFromGitHub {
+    owner = "Dummerle";
+    repo = "Rare";
+    rev = "refs/tags/${version}";
+    hash = "sha256-7KER9gCpqjEKikQTVHsvwX6efCb9L0ut6OBjjLBW2tI=";
+  };
+
+  nativeBuildInputs = [
+    qt5.wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    legendary-gl
+    pypresence
+    pyqt5
+    qtawesome
+    requests
+    typing-extensions
+  ];
+
+  patches = [
+    # Not able to run pythonRelaxDepsHook because of https://github.com/NixOS/nixpkgs/issues/198342
+    ./legendary-gl-version.patch
+  ];
+
+  dontWrapQtApps = true;
+
+  postInstall = ''
+    install -Dm644 misc/rare.desktop -t $out/share/applications/
+    install -Dm644 $out/${python.sitePackages}/rare/resources/images/Rare.png $out/share/pixmaps/rare.png
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "GUI for Legendary, an Epic Games Launcher open source alternative";
+    homepage = "https://github.com/Dummerle/Rare";
+    maintainers = with maintainers; [ wolfangaukang ];
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/rare/legendary-gl-version.patch b/nixpkgs/pkgs/games/rare/legendary-gl-version.patch
new file mode 100644
index 000000000000..1ed9659d2b25
--- /dev/null
+++ b/nixpkgs/pkgs/games/rare/legendary-gl-version.patch
@@ -0,0 +1,13 @@
+diff --git a/setup.py b/setup.py
+index 2416360..08de818 100644
+--- a/setup.py
++++ b/setup.py
+@@ -7,7 +7,7 @@ with open("README.md", "r") as fh:
+ 
+ requirements = [
+     "requests<3.0",
+-    "legendary-gl==0.20.32",
++    "legendary-gl~=0.20.32",
+     "setuptools",
+     "wheel",
+     "PyQt5",
diff --git a/nixpkgs/pkgs/games/raylib-games/default.nix b/nixpkgs/pkgs/games/raylib-games/default.nix
new file mode 100644
index 000000000000..6cb2b540f4ab
--- /dev/null
+++ b/nixpkgs/pkgs/games/raylib-games/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchFromGitHub, raylib }:
+
+stdenv.mkDerivation rec {
+  pname = "raylib-games";
+  version = "2022-10-24";
+
+  src = fetchFromGitHub {
+    owner = "raysan5";
+    repo = pname;
+    rev = "e00d77cf96ba63472e8316ae95a23c624045dcbe";
+    hash = "sha256-N9ip8yFUqXmNMKcvQuOyxDI4yF/w1YaoIh0prvS4Xr4=";
+  };
+
+  buildInputs = [ raylib ];
+
+  configurePhase = ''
+    runHook preConfigure
+    for d in *; do
+      if [ -d $d/src/resources ]; then
+        for f in $d/src/*.c $d/src/*.h; do
+          sed "s|\"resources/|\"$out/resources/$d/|g" -i $f
+        done
+      fi
+    done
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    for d in *; do
+      if [ -f $d/src/Makefile ]; then
+        make -C $d/src
+      fi
+    done
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preBuild
+    mkdir -p $out/bin $out/resources
+    find . -type f -executable -exec cp {} $out/bin \;
+    for d in *; do
+      if [ -d "$d/src/resources" ]; then
+        cp -ar "$d/src/resources" "$out/resources/$d"
+      fi
+    done
+    runHook postBuild
+  '';
+
+  meta = with lib; {
+    description = "A collection of games made with raylib ";
+    homepage = "https://www.raylib.com/games.html";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ ehmry ];
+    inherit (raylib.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/games/redeclipse/default.nix b/nixpkgs/pkgs/games/redeclipse/default.nix
new file mode 100644
index 000000000000..07c2b9e33adf
--- /dev/null
+++ b/nixpkgs/pkgs/games/redeclipse/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, fetchpatch
+, curl, ed, pkg-config, freetype, zlib, libX11
+, SDL2, SDL2_image, SDL2_mixer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "redeclipse";
+  version = "2.0.0";
+
+  src = fetchurl {
+    url = "https://github.com/redeclipse/base/releases/download/v${version}/redeclipse_${version}_nix.tar.bz2";
+    sha256 = "143i713ggbk607qr4n39pi0pn8d93x9x6fcbh8rc51jb9qhi8p5i";
+  };
+
+  buildInputs = [
+    libX11 freetype zlib
+    SDL2 SDL2_image SDL2_mixer
+  ];
+
+  nativeBuildInputs = [
+    curl ed pkg-config
+  ];
+
+  makeFlags = [ "-C" "src/" "prefix=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  installTargets = [ "system-install" ];
+
+  postInstall = ''
+      cp -R -t $out/share/redeclipse/data/ data/*
+  '';
+
+  meta = with lib; {
+    description = "A first person arena shooter, featuring parkour, impulse boosts, and more";
+    longDescription = ''
+      Red Eclipse is a fun-filled new take on the first person arena shooter,
+      featuring parkour, impulse boosts, and more. The development is geared
+      toward balanced gameplay, with a general theme of agility in a variety of
+      environments.
+    '';
+    homepage = "https://www.redeclipse.net";
+    license = with licenses; [ licenses.zlib cc-by-sa-30 ];
+    maintainers = with maintainers; [ lambda-11235 ];
+    platforms = platforms.linux;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/rftg/default.nix b/nixpkgs/pkgs/games/rftg/default.nix
new file mode 100644
index 000000000000..1dfeaf3c3a89
--- /dev/null
+++ b/nixpkgs/pkgs/games/rftg/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, gtk2, pkg-config }:
+
+stdenv.mkDerivation rec {
+
+  pname = "rftg";
+  version = "0.9.4";
+
+  src = fetchurl {
+    url = "http://keldon.net/rftg/rftg-${version}.tar.bz2";
+    sha256 = "0j2y6ggpwdlvyqhirp010aix2g6aacj3kvggvpwzxhig30x9vgq8";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2.dev ];
+
+  meta = {
+    homepage = "http://keldon.net/rftg/";
+    description = "Implementation of the card game Race for the Galaxy, including an AI";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.falsifian ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/rigsofrods-bin/default.nix b/nixpkgs/pkgs/games/rigsofrods-bin/default.nix
new file mode 100644
index 000000000000..fa9edfe72f45
--- /dev/null
+++ b/nixpkgs/pkgs/games/rigsofrods-bin/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, makeWrapper
+, unzip
+, libGL
+, libICE
+, libSM
+, libX11
+, libXrandr
+, zlib
+, alsa-lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rigsofrods-bin";
+  version = "2022.12";
+
+  src = fetchurl {
+    url = "https://update.rigsofrods.org/rigs-of-rods-linux-2022-12.zip";
+    hash = "sha256-jj152fd4YHlU6YCVCnN6DKRfmi5+ORpMQVDacy/TPeE=";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeWrapper
+    unzip
+  ];
+
+  buildInputs = [
+    libGL
+    libICE
+    libSM
+    libX11
+    libXrandr
+    stdenv.cc.cc
+    zlib
+  ];
+
+  runtimeDependencies = [
+    alsa-lib
+  ];
+
+  noDumpEnvVars = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/rigsofrods
+    cp -a . $out/share/rigsofrods
+    for f in RoR RunRoR; do
+      makeWrapper $out/share/rigsofrods/$f $out/bin/$f \
+        --chdir $out/share/rigsofrods
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A free/libre soft-body physics simulator mainly targeted at simulating vehicle physics";
+    homepage = "https://www.rigsofrods.org";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ raskin wegank ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/riko4/default.nix b/nixpkgs/pkgs/games/riko4/default.nix
new file mode 100644
index 000000000000..7014bf9ca21b
--- /dev/null
+++ b/nixpkgs/pkgs/games/riko4/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchFromGitHub, cmake, SDL2, libGLU, luajit, curl, curlpp }:
+
+let
+  # Newer versions of sdl-gpu don't work with Riko4 (corrupted graphics),
+  # and this library does not have a proper release version, so let the
+  # derivation for this stay next to the Riko4 derivation for now.
+  sdl-gpu = stdenv.mkDerivation {
+    pname = "sdl-gpu";
+    version = "2018-11-01";
+    src = fetchFromGitHub {
+      owner = "grimfang4";
+      repo = "sdl-gpu";
+      rev = "a4ff1ab02410f154b004c29ec46e07b22890fa1f";
+      sha256 = "1wdwg331s7r4dhq1l8w4dvlqf4iywskpdrscgbwrz9j0c6nqqi3v";
+    };
+    buildInputs = [ SDL2 libGLU ];
+    nativeBuildInputs = [ cmake ];
+
+    meta = with lib; {
+      homepage = "https://github.com/grimfang4/sdl-gpu";
+      description = "A library for high-performance, modern 2D graphics with SDL written in C";
+      license = licenses.mit;
+      maintainers = with maintainers; [ CrazedProgrammer ];
+    };
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "riko4";
+  version = "0.1.0";
+  src = fetchFromGitHub {
+    owner = "incinirate";
+    repo = "Riko4";
+    rev = "v${version}";
+    sha256 = "008i9991sn616dji96jfwq6gszrspbx4x7cynxb1cjw66phyy5zp";
+  };
+
+  buildInputs = [ SDL2 luajit sdl-gpu curl curlpp ];
+  nativeBuildInputs = [ cmake ];
+
+  hardeningDisable = [ "fortify" ];
+  cmakeFlags = [ "-DSDL2_gpu_INCLUDE_DIR=\"${sdl-gpu}/include\"" ];
+
+  # Riko4 needs the data/ and scripts/ directories to be in its PWD.
+  installPhase = ''
+    install -Dm0755 riko4 $out/bin/.riko4-unwrapped
+    mkdir -p $out/lib/riko4
+    cp -r ../data $out/lib/riko4
+    cp -r ../scripts $out/lib/riko4
+    cat > $out/bin/riko4 <<EOF
+    #!/bin/sh
+    pushd $out/lib/riko4 > /dev/null
+    exec $out/bin/.riko4-unwrapped "\$@"
+    popd > /dev/null
+    EOF
+    chmod +x $out/bin/riko4
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/incinirate/Riko4";
+    description = "Fantasy console for pixel art game development";
+    license = licenses.mit;
+    maintainers = with maintainers; [ CrazedProgrammer ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/rili/default.nix b/nixpkgs/pkgs/games/rili/default.nix
new file mode 100644
index 000000000000..7c47166eab56
--- /dev/null
+++ b/nixpkgs/pkgs/games/rili/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, fetchpatch, SDL_mixer, SDL, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "ri_li";
+  version = "2.0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ri-li/Ri-li-${version}.tar.bz2";
+    sha256 = "f71ccc20c37c601358d963e087ac0d524de8c68e96df09c3aac1ae65edd38dbd";
+  };
+
+  patches = [
+    ./moderinze_cpp.patch
+
+    # Build fix for gcc-11 pending upstream inclusion:
+    #  https://sourceforge.net/p/ri-li/bugs/2/
+    (fetchpatch {
+      name = "gcc-11.patch";
+      url = "https://sourceforge.net/p/ri-li/bugs/2/attachment/0001-Fix-build-on-gcc-11.patch";
+      sha256 = "01il9lm3amwp3b435ka9q63p0jwlzajwnbshyazx6n9vcnrr17yw";
+    })
+  ];
+
+  CPPFLAGS = "-I${lib.getDev SDL}/include -I${lib.getDev SDL}/include/SDL -I${SDL_mixer}/include";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ SDL SDL_mixer ];
+
+  meta = {
+    homepage = "https://ri-li.sourceforge.net";
+    license = lib.licenses.gpl2Plus;
+    description = "A children's train game";
+    longDescription = ''
+     Ri-li is an arcade game licensed under the GPL (General Public License).
+You drive a toy wood engine in many levels and you must collect all the coaches
+to win.
+    '';
+    maintainers = with lib.maintainers; [ jcumming ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/rili/moderinze_cpp.patch b/nixpkgs/pkgs/games/rili/moderinze_cpp.patch
new file mode 100644
index 000000000000..3d076afb39e3
--- /dev/null
+++ b/nixpkgs/pkgs/games/rili/moderinze_cpp.patch
@@ -0,0 +1,391 @@
+diff -r -u Ri-li-2.0.1.orig/src/audio.cc Ri-li-2.0.1/src/audio.cc
+--- Ri-li-2.0.1.orig/src/audio.cc	2012-01-22 00:40:56.928609371 -0800
++++ Ri-li-2.0.1/src/audio.cc	2012-01-22 00:28:33.360636539 -0800
+@@ -22,8 +22,8 @@
+ //    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ 
+ #include <stdlib.h>
+-#include <iostream.h>
+-#include <string.h>
++#include <iostream>
++#include <string>
+ 
+ #include "audio.h"
+ #include "utils.h"
+@@ -57,7 +57,7 @@
+   char PathFile[512];
+ 
+   if(Mix_OpenAudio(22050,AUDIO_S16,1,1024)) {
+-    cerr <<"Enable to init Sound card ! "<<SDL_GetError()<<endl;
++    std::cerr <<"Enable to init Sound card ! "<<SDL_GetError()<<std::endl;
+     return false;
+   }
+   
+diff -r -u Ri-li-2.0.1.orig/src/ecran.cc Ri-li-2.0.1/src/ecran.cc
+--- Ri-li-2.0.1.orig/src/ecran.cc	2007-11-02 04:48:16.000000000 -0700
++++ Ri-li-2.0.1/src/ecran.cc	2012-01-22 00:13:54.422798653 -0800
+@@ -21,7 +21,7 @@
+ //    with this program; if not, write to the Free Software Foundation, Inc.,
+ //    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ 
+-#include <iostream.h>
++#include <iostream>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <math.h>
+diff -r -u Ri-li-2.0.1.orig/src/editeur.cc Ri-li-2.0.1/src/editeur.cc
+--- Ri-li-2.0.1.orig/src/editeur.cc	2007-11-02 04:48:17.000000000 -0700
++++ Ri-li-2.0.1/src/editeur.cc	2012-01-22 00:28:59.632635579 -0800
+@@ -25,10 +25,10 @@
+ #include <windows.h>
+ #endif
+ 
+-#include <iostream.h>
++#include <iostream>
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <string.h>
++#include <string>
+ #include <math.h>
+ #include <SDL/SDL.h>
+ 
+@@ -374,7 +374,7 @@
+     
+     // Sauve le niveau
+     if(Niveau.Save()==false) {
+-      cerr <<"ERREUR Saving levels!"<<endl;
++      std::cerr <<"ERREUR Saving levels!"<<std::endl;
+       exit(-1);
+     }
+     
+diff -r -u Ri-li-2.0.1.orig/src/jeux.cc Ri-li-2.0.1/src/jeux.cc
+--- Ri-li-2.0.1.orig/src/jeux.cc	2007-11-02 04:48:17.000000000 -0700
++++ Ri-li-2.0.1/src/jeux.cc	2012-01-22 00:14:08.422798143 -0800
+@@ -25,10 +25,10 @@
+ #include <windows.h>
+ #endif
+ 
+-#include <iostream.h>
++#include <iostream>
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <string.h>
++#include <string>
+ #include <math.h>
+ #include <SDL/SDL.h>
+ 
+diff -r -u Ri-li-2.0.1.orig/src/loco.cc Ri-li-2.0.1/src/loco.cc
+--- Ri-li-2.0.1.orig/src/loco.cc	2007-11-02 04:48:18.000000000 -0700
++++ Ri-li-2.0.1/src/loco.cc	2012-01-22 00:14:17.878797797 -0800
+@@ -21,10 +21,10 @@
+ //    with this program; if not, write to the Free Software Foundation, Inc.,
+ //    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ 
+-#include <iostream.h>
++#include <iostream>
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <string.h>
++#include <string>
+ #include <math.h>
+ #include "preference.h"
+ #include "loco.h"
+diff -r -u Ri-li-2.0.1.orig/src/main.cc Ri-li-2.0.1/src/main.cc
+--- Ri-li-2.0.1.orig/src/main.cc	2007-11-02 04:48:19.000000000 -0700
++++ Ri-li-2.0.1/src/main.cc	2012-01-22 00:29:40.080634136 -0800
+@@ -23,8 +23,8 @@
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <iostream.h>
+-#include <string.h>
++#include <iostream>
++#include <string>
+ #include <SDL/SDL.h>
+ #include <SDL/SDL_mixer.h>
+ 
+@@ -115,7 +115,7 @@
+  
+   // Initilise SDL
+   if( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_AUDIO|SDL_INIT_NOPARACHUTE) < 0 ) {
+-    cerr <<"Impossible d'initialiser SDL:"<<SDL_GetError()<<endl;
++    std::cerr <<"Impossible d'initialiser SDL:"<<SDL_GetError()<<std::endl;
+     exit(-1);
+   }
+   // Ferme le programme correctement quant quit
+@@ -125,7 +125,7 @@
+   sdlVideoInfo=(SDL_VideoInfo*)SDL_GetVideoInfo();
+ 
+   if(sdlVideoInfo->vfmt->BitsPerPixel==8) {
+-    cerr <<"Impossible d'utiliser 8bits pour la vidéo !"<<endl;
++    std::cerr <<"Impossible d'utiliser 8bits pour la vidéo !"<<std::endl;
+     exit(-1);
+   }
+   
+@@ -145,7 +145,7 @@
+   sdlVideo=SDL_SetVideoMode(800,600,sdlVideoInfo->vfmt->BitsPerPixel,vOption);
+ 
+   if(sdlVideo==NULL) {
+-    cerr <<"Impossible de passer dans le mode vidéo 800x600 !"<<endl;
++    std::cerr <<"Impossible de passer dans le mode vidéo 800x600 !"<<std::endl;
+     exit(-1);
+   }
+   // Change le nom de la fenetre
+diff -r -u Ri-li-2.0.1.orig/src/menu.cc Ri-li-2.0.1/src/menu.cc
+--- Ri-li-2.0.1.orig/src/menu.cc	2007-11-02 04:48:19.000000000 -0700
++++ Ri-li-2.0.1/src/menu.cc	2012-01-22 00:30:04.752633198 -0800
+@@ -21,10 +21,10 @@
+ //    with this program; if not, write to the Free Software Foundation, Inc.,
+ //    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ 
+-#include <iostream.h>
++#include <iostream>
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <string.h>
++#include <string>
+ #include "preference.h"
+ #include "menu.h"
+ #include "sprite.h"
+@@ -92,7 +92,7 @@
+   // Teste la resolution video
+   sdlVideoInfo=(SDL_VideoInfo*)SDL_GetVideoInfo();
+   if(sdlVideoInfo->vfmt->BitsPerPixel==8) {
+-    cerr <<"Impossible d'utiliser 8bits pour la vidéo !"<<endl;
++    std::cerr <<"Impossible d'utiliser 8bits pour la vidéo !"<<std::endl;
+     exit(-1);
+   }
+   
+@@ -112,7 +112,7 @@
+   if(Pref.FullScreen) vOption|=SDL_FULLSCREEN;
+   sdlVideo=SDL_SetVideoMode(800,600,sdlVideoInfo->vfmt->BitsPerPixel,vOption);
+   if(sdlVideo==NULL) {
+-    cerr <<"Impossible de passer dans le mode vidéo 800x600 !"<<endl;
++    std::cerr <<"Impossible de passer dans le mode vidéo 800x600 !"<<std::endl;
+     exit(-1);
+   }
+   
+diff -r -u Ri-li-2.0.1.orig/src/mouse.cc Ri-li-2.0.1/src/mouse.cc
+--- Ri-li-2.0.1.orig/src/mouse.cc	2007-11-02 04:48:20.000000000 -0700
++++ Ri-li-2.0.1/src/mouse.cc	2012-01-22 00:14:36.438797120 -0800
+@@ -21,7 +21,7 @@
+ //    with this program; if not, write to the Free Software Foundation, Inc.,
+ //    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ 
+-#include <iostream.h>
++#include <iostream>
+ #include <stdio.h>
+ #include "mouse.h"
+ #include "preference.h"
+diff -r -u Ri-li-2.0.1.orig/src/sprite.cc Ri-li-2.0.1/src/sprite.cc
+--- Ri-li-2.0.1.orig/src/sprite.cc	2007-11-02 04:48:20.000000000 -0700
++++ Ri-li-2.0.1/src/sprite.cc	2012-01-22 00:30:43.640631779 -0800
+@@ -21,10 +21,10 @@
+ //    with this program; if not, write to the Free Software Foundation, Inc.,
+ //    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ 
+-#include <iostream.h>
++#include <iostream>
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <string.h>
++#include <string>
+ #include <math.h>
+ #include "sprite.h"
+ #include "preference.h"
+@@ -84,7 +84,7 @@
+   strcpy(PathFile,Langue[Pref.Langue]);
+   GetPath(PathFile);
+   if(FileExiste(PathFile)==false) {
+-    cerr <<"Impossible de trouver "<<Langue[Pref.Langue]<<endl;
++    std::cerr <<"Impossible de trouver "<<Langue[Pref.Langue]<<std::endl;
+     return false;
+   }
+   L=ChargeFichier(PathFile,Buf);
+@@ -128,7 +128,7 @@
+   // *** Charge le fichier des langues ***
+   // *************************************
+   if(FileExiste(PathFile)==false) {
+-    cerr <<"Impossible de trouver 'language.dat'"<<endl;
++    std::cerr <<"Impossible de trouver 'language.dat'"<<std::endl;
+     return false;
+   }
+   L=ChargeFichier(PathFile,Buf);
+@@ -163,7 +163,7 @@
+   strcpy(PathFile,"sprites.dat");
+   GetPath(PathFile);
+   if(FileExiste(PathFile)==false) {
+-    cerr <<"Impossible de trouver 'sprites.dat'"<<endl;
++    std::cerr <<"Impossible de trouver 'sprites.dat'"<<std::endl;
+     return false;
+   }
+   L=ChargeFichier(PathFile,Buf);
+@@ -352,7 +352,7 @@
+     Image[i]=SDL_CreateRGBSurface((Dim[i].bpp-3)*SDL_SRCALPHA,Dim[i].L,Dim[i].H,Dim[i].bpp*8,
+ 				  0xff,0xff00,0xff0000,0xff000000*(Dim[i].bpp-3));
+     if(Image[i]<=NULL) {
+-      cerr <<"Impossible de créer une Surface SDL!"<<endl;
++      std::cerr <<"Impossible de créer une Surface SDL!"<<std::endl;
+       return false;
+     }
+     
+@@ -486,7 +486,7 @@
+   Image[0]=SDL_CreateRGBSurface((Dim[0].bpp-3)*SDL_SRCALPHA,Dim[0].L,Dim[0].H,Dim[0].bpp*8,
+ 				0xff,0xff00,0xff0000,0xff000000*(Dim[0].bpp-3));
+   if(Image[0]<=NULL) {
+-    cerr <<"Impossible de créer une Surface SDL!"<<endl;
++    std::cerr <<"Impossible de créer une Surface SDL!"<<std::endl;
+     return false;
+   }
+   return true;
+diff -r -u Ri-li-2.0.1.orig/src/tableau.cc Ri-li-2.0.1/src/tableau.cc
+--- Ri-li-2.0.1.orig/src/tableau.cc	2007-11-02 04:48:21.000000000 -0700
++++ Ri-li-2.0.1/src/tableau.cc	2012-01-22 00:14:50.710796598 -0800
+@@ -21,7 +21,7 @@
+ //    with this program; if not, write to the Free Software Foundation, Inc.,
+ //    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ 
+-#include <iostream.h>
++#include <iostream>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include "preference.h"
+diff -r -u Ri-li-2.0.1.orig/src/utils.cc Ri-li-2.0.1/src/utils.cc
+--- Ri-li-2.0.1.orig/src/utils.cc	2007-11-02 04:48:22.000000000 -0700
++++ Ri-li-2.0.1/src/utils.cc	2012-01-22 00:31:30.944630051 -0800
+@@ -21,10 +21,10 @@
+ //    with this program; if not, write to the Free Software Foundation, Inc.,
+ //    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ 
+-#include <iostream.h>
++#include <iostream>
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <string.h>
++#include <string>
+ 
+ #ifdef WINDOWS
+ #include <windows.h>
+@@ -77,7 +77,7 @@
+ 
+   file=fopen(Path,"r");
+   if(!file) {
+-    cerr <<"ERREUR: Impossible d'ouvrir '"<<Path<<"'"<<endl;
++    std::cerr <<"ERREUR: Impossible d'ouvrir '"<<Path<<"'"<<std::endl;
+     perror("fopen");
+     return -1;
+   }
+@@ -93,7 +93,7 @@
+ 
+   Buf=new unsigned char [L+1];
+   if(Buf==NULL) {
+-    cerr <<"ERREUR: Memoire insuffisante!"<<endl;
++    std::cerr <<"ERREUR: Memoire insuffisante!"<<std::endl;
+     fclose(file);
+     return -1;
+   }
+@@ -104,7 +104,7 @@
+   while(Compt>1024) {
+     AfficheChargeur();
+     if( fread(Po,1,1024,file) != 1024 ) {
+-      cerr <<"ERREUR de lecture du fichier '"<<Path<<"'"<<endl;
++      std::cerr <<"ERREUR de lecture du fichier '"<<Path<<"'"<<std::endl;
+       perror("fread");
+       fclose(file);
+       delete [] Buf;
+@@ -131,13 +131,13 @@
+ 
+   file=_lopen(Path,OF_READ);
+   if(file==-1) {
+-    cerr <<"Impossible d'ouvrir "<<Path<<endl;
++    std::cerr <<"Impossible d'ouvrir "<<Path<<std::endl;
+     exit(-1);
+   }
+   
+   long L=(long)_llseek(file,0,SEEK_END);
+   if(L==-1) {
+-    cerr <<"Impossible de trouver la longueur du fichier"<<endl;
++    std::cerr <<"Impossible de trouver la longueur du fichier"<<std::endl;
+     perror("lseek");
+     _lclose(file);
+     return -1;
+@@ -146,7 +146,7 @@
+   
+   Buf=new unsigned char [L+1];
+   if(Buf==NULL) {
+-    cerr <<"ERREUR: Memoire insuffisante!"<<endl;
++    std::cerr <<"ERREUR: Memoire insuffisante!"<<std::endl;
+     _lclose(file);
+     return -1;
+   }
+@@ -169,14 +169,14 @@
+   
+   file=fopen(Path,"w");
+   if(!file) {
+-    cerr <<"ERREUR: Impossible d'ouvrir '"<<Path<<"'"<<endl;
++    std::cerr <<"ERREUR: Impossible d'ouvrir '"<<Path<<"'"<<std::endl;
+     perror("fopen");
+     return false;
+   }
+   
+   while(L>512) {
+     if( fwrite(Buf,1,512,file) != 512 ) {
+-      cerr <<"ERREUR d'ecriture du fichier '"<<Path<<"'"<<endl;
++      std::cerr <<"ERREUR d'ecriture du fichier '"<<Path<<"'"<<std::endl;
+       perror("fwrite");
+       fclose(file);
+       return false;
+@@ -187,7 +187,7 @@
+ 
+   if(L>0) {
+     if( fwrite(Buf,1,(size_t)L,file) != (size_t)L ) {
+-      cerr <<"ERREUR d'ecriture du fichier '"<<Path<<"'"<<endl;
++      std::cerr <<"ERREUR d'ecriture du fichier '"<<Path<<"'"<<std::endl;
+       perror("fwrite");
+       fclose(file);
+       return false;
+@@ -208,7 +208,7 @@
+ 
+   file=_lcreat(Path,0);
+   if(!file) {
+-    cerr <<"ERREUR: Impossible de créer le fichier '"<<Path<<"'"<<endl;
++    std::cerr <<"ERREUR: Impossible de créer le fichier '"<<Path<<"'"<<std::endl;
+     return false;
+   }
+   
+@@ -216,7 +216,7 @@
+   _lclose(file);
+ 
+   if(Lec!=L) {
+-    cerr <<"Problème d'ecriture du fichier '"<<Path<<"' ecris="<<Lec<<" au lieux de ="<<L<<endl;
++    std::cerr <<"Problème d'ecriture du fichier '"<<Path<<"' ecris="<<Lec<<" au lieux de ="<<L<<std::endl;
+     return false;
+   }
+ 
+@@ -250,7 +250,7 @@
+   sprintf(Path,"/usr/share/games/Ri-li/%s",Provi);
+   if(FileExiste(Path)) return;
+   
+-  cerr <<"Impossible de trouver le fichier '"<<Provi<<endl;
++  std::cerr <<"Impossible de trouver le fichier '"<<Provi<<std::endl;
+   exit(-1);
+ }
+ #endif
+@@ -266,7 +266,7 @@
+   sprintf(Path,"PROGDIR:%s",Provi);
+   if(FileExiste(Path)) return;
+   
+-  cerr <<"Impossible de trouver le fichier '"<<Path<<endl;
++  std::cerr <<"Impossible de trouver le fichier '"<<Path<<std::endl;
+   exit(-1);
+ }
+ #endif
+@@ -282,7 +282,7 @@
+   sprintf(Path,"Ri-li.app/Contents/Resources/%s",Provi);
+   if(FileExiste(Path)) return;
+   
+-  cerr <<"Impossible de trouver le fichier '"<<Path<<endl;
++  std::cerr <<"Impossible de trouver le fichier '"<<Path<<std::endl;
+   exit(-1);
+ }
+ #endif
diff --git a/nixpkgs/pkgs/games/rocksndiamonds/default.nix b/nixpkgs/pkgs/games/rocksndiamonds/default.nix
new file mode 100644
index 000000000000..39df9615154c
--- /dev/null
+++ b/nixpkgs/pkgs/games/rocksndiamonds/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchurl, fetchpatch, makeDesktopItem, SDL2, SDL2_image, SDL2_mixer, SDL2_net }:
+
+stdenv.mkDerivation rec {
+  pname = "rocksndiamonds";
+  version = "4.1.1.0";
+
+  src = fetchurl {
+    url = "https://www.artsoft.org/RELEASES/unix/${pname}/rocksndiamonds-${version}.tar.gz";
+    sha256 = "1k0m6l5g886d9mwwh6q0gw75qsb85mpf8i0rglh047app56nsk72";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common toolchain.
+    (fetchpatch {
+      name = "fno-common-p1.patch";
+      url = "https://git.artsoft.org/?p=rocksndiamonds.git;a=patch;h=b4271393b10b7c664a58f3db7349a3875c1676fe";
+      sha256 = "0bdy4d2ril917radmm0c2yh2gqfyh7q1c8kahig5xknn2rkf2iac";
+    })
+    (fetchpatch {
+      name = "fno-common-p2.patch";
+      url = "https://git.artsoft.org/?p=rocksndiamonds.git;a=patch;h=81dbde8a570a94dd2e938eff2f52dc5a3ecced21";
+      sha256 = "1mk5yb8pxrpxvvsxw3pjcbgx2c658baq9vmqqipbj5byhkkw7v2l";
+    })
+  ];
+
+  desktopItem = makeDesktopItem {
+    name = "rocksndiamonds";
+    exec = "rocksndiamonds";
+    icon = "rocksndiamonds";
+    comment = meta.description;
+    desktopName = "Rocks'n'Diamonds";
+    genericName = "Tile-based puzzle";
+    categories = [ "Game" "LogicGame" ];
+  };
+
+  buildInputs = [ SDL2 SDL2_image SDL2_mixer SDL2_net ];
+
+  preBuild = ''
+    dataDir="$out/share/rocksndiamonds"
+    makeFlags+="RO_GAME_DIR=$dataDir"
+  '';
+
+  installPhase = ''
+    appDir=$out/share/applications
+    iconDir=$out/share/icons/hicolor/32x32/apps
+    mkdir -p $out/bin $appDir $iconDir $dataDir
+    cp rocksndiamonds $out/bin/
+    ln -s ${desktopItem}/share/applications/* $appDir/
+    ln -s $dataDir/graphics/gfx_classic/RocksIcon32x32.png $iconDir/rocksndiamonds.png
+    cp -r docs graphics levels music sounds $dataDir
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Scrolling tile-based arcade style puzzle game";
+    homepage = "https://www.artsoft.org/rocksndiamonds/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/rogue/default.nix b/nixpkgs/pkgs/games/rogue/default.nix
new file mode 100644
index 000000000000..4865b85bbe38
--- /dev/null
+++ b/nixpkgs/pkgs/games/rogue/default.nix
@@ -0,0 +1,25 @@
+{lib, stdenv, fetchurl, ncurses}:
+
+stdenv.mkDerivation rec {
+  pname = "rogue";
+  version = "5.4.4";
+
+  src = fetchurl {
+    urls = [
+      "https://src.fedoraproject.org/repo/pkgs/rogue/rogue${version}-src.tar.gz/033288f46444b06814c81ea69d96e075/rogue${version}-src.tar.gz"
+      "http://ftp.vim.org/ftp/pub/ftp/os/Linux/distr/slitaz/sources/packages-cooking/r/rogue${version}-src.tar.gz"
+      "http://rogue.rogueforge.net/files/rogue${lib.versions.majorMinor version}/rogue${version}-src.tar.gz"
+    ];
+    sha256 = "18g81274d0f7sr04p7h7irz0d53j6kd9j1y3zbka1gcqq0gscdvx";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    homepage = "http://rogue.rogueforge.net/rogue-5-4/";
+    description = "The final version of the original Rogue game developed for the UNIX operating system";
+    platforms = platforms.all;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.eelco ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/rott/default.nix b/nixpkgs/pkgs/games/rott/default.nix
new file mode 100644
index 000000000000..591275631fa9
--- /dev/null
+++ b/nixpkgs/pkgs/games/rott/default.nix
@@ -0,0 +1,75 @@
+{ stdenv
+, lib
+, fetchurl
+, writeShellScript
+, SDL
+, SDL_mixer
+, makeDesktopItem
+, copyDesktopItems
+, runtimeShell
+, buildShareware ? false
+}:
+
+let
+  # Allow the game to be launched from a user's PATH and load the game data from the user's home directory.
+  launcher = writeShellScript "rott" ''
+    set -eEuo pipefail
+    dir=$HOME/.rott/data
+    test -e $dir || mkdir -p $dir
+    cd $dir
+    exec @out@/libexec/rott "$@"
+  '';
+
+in
+stdenv.mkDerivation rec {
+  pname = "rott";
+  version = "1.1.2";
+
+  src = fetchurl {
+    url = "https://icculus.org/rott/releases/${pname}-${version}.tar.gz";
+    sha256 = "1zr7v5dv2iqx40gzxbg8mhac7fxz3kqf28y6ysxv1xhjqgl1c98h";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems ];
+
+  buildInputs = [ SDL SDL_mixer ];
+
+  sourceRoot = "rott-${version}/rott";
+
+  makeFlags = [
+    "SHAREWARE=${if buildShareware then "1" else "0"}"
+  ];
+
+  # when using SDL_compat instead of SDL_classic, SDL_mixer isn't correctly
+  # detected, but there is no harm just specifying it
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-I${lib.getDev SDL_mixer}/include/SDL"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/libexec rott
+    install -Dm555 ${launcher} $out/bin/${launcher.name}
+    substituteInPlace $out/bin/rott --subst-var out
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "rott";
+      exec = "rott";
+      desktopName = "Rise of the Triad: ${if buildShareware then "The HUNT Begins" else "Dark War"}";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "SDL port of Rise of the Triad";
+    homepage = "https://icculus.org/rott/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ sander ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/rpg-cli/default.nix b/nixpkgs/pkgs/games/rpg-cli/default.nix
new file mode 100644
index 000000000000..cad3b539d9ad
--- /dev/null
+++ b/nixpkgs/pkgs/games/rpg-cli/default.nix
@@ -0,0 +1,25 @@
+{ rustPlatform, fetchFromGitHub, lib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rpg-cli";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "facundoolano";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-rhG/EK68PWvQYoZdjhk0w7oNmh/QiTaAt4/WgEkgxEA=";
+  };
+
+  cargoSha256 = "sha256-YXQohmDmkClziaLkL2N4cGURZ0tewyt7BuNY4hS+a4w=";
+
+  # tests assume the authors macbook, and thus fail
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Your filesystem as a dungeon";
+    homepage = "https://github.com/facundoolano/rpg-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lom ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/rrootage/default.nix b/nixpkgs/pkgs/games/rrootage/default.nix
new file mode 100644
index 000000000000..a5b656a4044a
--- /dev/null
+++ b/nixpkgs/pkgs/games/rrootage/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchpatch, fetchurl, SDL, SDL_mixer, bulletml }:
+
+let
+  version = "0.23a";
+  debianRevision = "12";
+  debianPatch = patchname: hash: fetchpatch {
+    name = "${patchname}.patch";
+    url = "https://sources.debian.org/data/main/r/rrootage/${version}-${debianRevision}/debian/patches/${patchname}.patch";
+    sha256 = hash;
+  };
+
+in stdenv.mkDerivation {
+  pname = "rrootage";
+  inherit version;
+  src = fetchurl {
+    url = "http://downloads.sourceforge.net/rrootage/rRootage-${version}.tar.gz";
+    sha256 = "01zzg4ih3kmbhsn1p9zr7g8srv1d2dhrp8cdd86y9qq233idnkln";
+  };
+
+  patches = [
+    (debianPatch
+      "01_makefile"
+      "0wgplznx9kgb82skwqplpydbpallgrby3w662h52wky5zl0pyijj")
+    (debianPatch
+      "02_data_dir"
+      "12vw60s94by3f6k8pk45k555h4y7gzlqfds0a96nrrryammpgnq3")
+    (debianPatch
+      "03_texture_filename"
+      "1qxkxy6821xvanacf25mi43wj8nf40c1qiyavhc8av798xprpkjh")
+    (debianPatch
+      "04_home"
+      "0s15b0liv40jzjd9l4zsq688ky1yp9b1gmb1xhi3bih4y7q9awdz")
+    (debianPatch
+      "05_gcc"
+      "06ihgbfrklabs7cb6216w1jjb9sglv86iagzhhmyydwyph4fb782")
+    (debianPatch
+      "06_rrootage_highres"
+      "0ifjmh236yiv3g896nfwwydgcnq3njdb8ldah7s3jxp3xkpvwcga")
+    (debianPatch
+      "07_use_system_bulletml"
+      "1sxsl1yzx3msvz8mf0jk1vnahqb1ahq9drm391idgh0afy77l6j7")
+    (debianPatch
+      "08_windowed_mode"
+      "0knx4g445ngilsz4dvdkq69f5f8i2xv2fnmdmq037xd5rhfg0b23")
+    (debianPatch
+      "09_rootage_make_highres_default"
+      "1zqz8s54rl8jmqmvdi9c3ayfcma6qkbfkx5vw0fzyn268wcs022p")
+    (debianPatch
+      "10_deg_out_of_range"
+      "1wr76az4rlv1gaj9xdknzqcjazw6h8myqw6y3753q259hxbq4cah")
+  ];
+  postPatch = ''
+    substituteInPlace "src/screen.c" --replace "/usr/share/games/rrootage" "$out/share/games/rrootage"
+    substituteInPlace "src/soundmanager.c" --replace "/usr/share/games/rrootage" "$out/share/games/rrootage"
+    substituteInPlace "src/barragemanager.cc" --replace "/usr/share/games/rrootage" "$out/share/games/rrootage"
+  '';
+
+  buildInputs = [ SDL SDL_mixer bulletml ];
+  makeFlags = [ "-C src" "-f makefile.lin" ];
+  hardeningDisable = [ "stackprotector" "fortify" ]; # buffer overflow without this
+
+  installPhase = ''
+    install -d "$out"/share/games
+    cp -r rr_share "$out"/share/games/rrootage
+    install -D src/rrootage "$out"/bin/rrootage
+
+    install -D -m 644 readme.txt "$out"/share/licenses/rrootage/README.jp
+    install -m 644 readme_e.txt "$out"/share/licenses/rrootage/README.en
+
+    install -D -m 644 readme.txt "$out"/share/doc/rrootage/README.jp
+    install -m 644 readme_e.txt "$out"/share/doc/rrootage/README.en
+    install -m 644 readme_linux "$out"/share/doc/rrootage/README
+  '';
+
+  meta = with lib; {
+    description = "Abstract shooter created by Kenta Cho";
+    homepage = "https://rrootage.sourceforge.net/";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/runelite/default.nix b/nixpkgs/pkgs/games/runelite/default.nix
new file mode 100644
index 000000000000..0f71164f62fd
--- /dev/null
+++ b/nixpkgs/pkgs/games/runelite/default.nix
@@ -0,0 +1,69 @@
+{ pkgs, lib, stdenv, makeDesktopItem, fetchurl, unzip, makeWrapper, xorg, jre, }:
+
+stdenv.mkDerivation rec {
+  pname = "runelite";
+  version = "2.5.0";
+
+  jar = fetchurl {
+    url = "https://github.com/runelite/launcher/releases/download/${version}/RuneLite.jar";
+    hash = "sha512-uEvlxXtnq7pgt8H5/hYIMu/kl32/dNojcHrPW6n2/RD/nzywreDw4kZ3G1kx0gGBY71x0RIEseEbm4BM+fhJlQ==";
+  };
+
+  icon = fetchurl {
+    url = "https://github.com/runelite/launcher/raw/${version}/appimage/runelite.png";
+    hash = "sha512-Yh8mpc6z9xd6ePe3f1f+KzrpE9r3fsdtQ0pfAvOhK/0hrCo/17eQA6v73yFXZcPQogVwm9CmJlrx4CkfzB25RQ==";
+  };
+
+  # The `.so` files provided by these two jars aren't detected by RuneLite for some reason, so we have to provide them manually
+  jogl = fetchurl {
+    url = "https://repo.runelite.net/net/runelite/jogl/jogl-all/2.4.0-rc-20200429/jogl-all-2.4.0-rc-20200429-natives-linux-amd64.jar";
+    hash = "sha512-OmJIbk5pKtvf1n1I5UHu6iaOKNrPgmaJTPhqC8yMjaRh/Hso1vV/+Eu+zKu7d5UiVggVUzJxqDKatmEnqFrzbg==";
+  };
+  gluegen = fetchurl {
+    url = "https://repo.runelite.net/net/runelite/gluegen/gluegen-rt/2.4.0-rc-20220318/gluegen-rt-2.4.0-rc-20220318-natives-linux-amd64.jar";
+    hash = "sha512-kF+RdDzYEhBuZOJ6ZwMhaEVcjYLxiwR8tYAm08FXDML45iP4HBEfmqHOLJpIakK06aQFj99/296vx810eDFX5A==";
+  };
+  dontUnpack = true;
+
+  desktop = makeDesktopItem {
+    name = "RuneLite";
+    type = "Application";
+    exec = "runelite";
+    icon = icon;
+    comment = "Open source Old School RuneScape client";
+    desktopName = "RuneLite";
+    genericName = "Oldschool Runescape";
+    categories = [ "Game" ];
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+  installPhase = ''
+    mkdir -p $out/share/runelite
+    mkdir -p $out/share/applications
+    mkdir -p $out/natives
+
+    unzip ${jogl}    'natives/*' -d $out
+    unzip ${gluegen} 'natives/*' -d $out
+
+    ln -s ${jar} $out/share/runelite/RuneLite.jar
+    ln -s ${desktop}/share/applications/RuneLite.desktop $out/share/applications/RuneLite.desktop
+
+    # RuneLite looks for `.so` files in $PWD/natives, so ensure that we set the PWD to the right place
+    makeWrapper ${jre}/bin/java $out/bin/runelite \
+      --chdir "$out" \
+      --prefix LD_LIBRARY_PATH : "${xorg.libXxf86vm}/lib" \
+      --add-flags "-jar $out/share/runelite/RuneLite.jar"
+  '';
+
+  meta = with lib; {
+    description = "Open source Old School RuneScape client";
+    homepage = "https://runelite.net/";
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ kmeakin ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/runescape-launcher/default.nix b/nixpkgs/pkgs/games/runescape-launcher/default.nix
new file mode 100644
index 000000000000..062a194c83dc
--- /dev/null
+++ b/nixpkgs/pkgs/games/runescape-launcher/default.nix
@@ -0,0 +1,155 @@
+{ stdenv
+, lib
+, autoPatchelfHook
+, buildFHSEnv
+, cairo
+, dpkg
+, fetchurl
+, gcc-unwrapped
+, glib
+, glibc
+, gnome2
+, gtk2-x11
+, libGL
+, libpulseaudio
+, libSM
+, libXxf86vm
+, libX11
+, openssl_1_1
+, pango
+, SDL2
+, wrapGAppsHook
+, xdg-utils
+, xorg
+, xorg_sys_opengl
+, zlib
+}:
+let
+
+  runescape = stdenv.mkDerivation rec {
+    pname = "runescape-launcher";
+    version = "2.2.10";
+
+    # Packages: https://content.runescape.com/downloads/ubuntu/dists/trusty/non-free/binary-amd64/Packages
+    # upstream is https://content.runescape.com/downloads/ubuntu/pool/non-free/r/${pname}/${pname}_${version}_amd64.deb
+    src = fetchurl {
+      url = "https://archive.org/download/${pname}_${version}_amd64/${pname}_${version}_amd64.deb";
+      sha256 = "1v96vjiblphhbqhpp3m7wbvdvcnp76ncdlf4pdcr2z1dz8nh6shg";
+    };
+
+    nativeBuildInputs = [
+      autoPatchelfHook
+      dpkg
+      wrapGAppsHook
+    ];
+
+    buildInputs = [
+      cairo
+      gcc-unwrapped
+      glib
+      glibc
+      gtk2-x11
+      libSM
+      libXxf86vm
+      libX11
+      openssl_1_1
+      pango
+      zlib
+    ];
+
+    runtimeDependencies = [
+      libGL
+      libpulseaudio
+      SDL2
+      openssl_1_1
+      xdg-utils # The launcher uses `xdg-open` to open HTTP URLs in the user's browser
+      xorg_sys_opengl
+      zlib
+    ];
+
+    dontUnpack = true;
+
+    preBuild = ''
+      export DH_VERBOSE=1
+    '';
+
+    envVarsWithXmodifiers = ''
+      export MESA_GLSL_CACHE_DIR=~/Jagex
+      export GDK_SCALE=2
+      unset XMODIFIERS
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin $out/share
+      dpkg -x $src $out
+
+      patchShebangs $out/usr/bin/runescape-launcher
+      substituteInPlace $out/usr/bin/runescape-launcher \
+        --replace "unset XMODIFIERS" "$envVarsWithXmodifiers" \
+        --replace "/usr/share/games/runescape-launcher/runescape" "$out/share/games/runescape-launcher/runescape"
+
+      cp -r $out/usr/bin $out/
+      cp -r $out/usr/share $out/
+
+      rm -r $out/usr
+    '';
+
+
+    meta = with lib; {
+      description = "Launcher for RuneScape 3, the current main RuneScape";
+      homepage = "https://www.runescape.com/";
+      sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+      license = licenses.unfree;
+      maintainers = with maintainers; [ grburst ];
+      platforms = [ "x86_64-linux" ];
+    };
+  };
+
+in
+
+  /*
+  * We can patch the runescape launcher, but it downloads a client at runtime and checks it for changes.
+  * For that we need use a buildFHSEnv.
+  * FHS simulates a classic linux shell
+  */
+  buildFHSEnv {
+    name = "RuneScape";
+    targetPkgs = pkgs: [
+      runescape
+      cairo
+      dpkg
+      gcc-unwrapped
+      glib
+      glibc
+      gtk2-x11
+      libGL
+      libpulseaudio
+      libSM
+      libXxf86vm
+      libX11
+      openssl_1_1
+      pango
+      SDL2
+      xdg-utils
+      xorg.libX11
+      xorg_sys_opengl
+      zlib
+    ];
+    multiPkgs = pkgs: [ libGL ];
+    runScript = "runescape-launcher";
+    extraInstallCommands = ''
+      mkdir -p "$out/share/applications"
+      cp ${runescape}/share/applications/runescape-launcher.desktop "$out/share/applications"
+      cp -r ${runescape}/share/icons "$out/share/icons"
+      substituteInPlace "$out/share/applications/runescape-launcher.desktop" \
+        --replace "/usr/bin/runescape-launcher" "RuneScape"
+    '';
+
+    meta = with lib; {
+      description = "RuneScape Game Client (NXT) - Launcher for RuneScape 3";
+      homepage = "https://www.runescape.com/";
+      license = licenses.unfree;
+      maintainers = with maintainers; [ grburst ];
+      platforms = [ "x86_64-linux" ];
+    };
+  }
diff --git a/nixpkgs/pkgs/games/sauerbraten/default.nix b/nixpkgs/pkgs/games/sauerbraten/default.nix
new file mode 100644
index 000000000000..0e9a782403c6
--- /dev/null
+++ b/nixpkgs/pkgs/games/sauerbraten/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, fetchzip
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, zlib
+, makeWrapper
+, copyDesktopItems
+, makeDesktopItem
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sauerbraten";
+  version = "2020-12-27";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/sauerbraten/sauerbraten_${builtins.replaceStrings [ "-" ] [ "_" ] version}_linux.tar.bz2";
+    sha256 = "0llknzj23vx6f3y452by9c7wlhzclyq4bqi22qd52m3l916z2mn5";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_mixer
+    SDL2_image
+    zlib
+  ];
+
+  sourceRoot = "${src.name}/src";
+
+  enableParallelBuilding = true;
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "sauerbraten";
+      exec = "sauerbraten_client %u";
+      icon = "sauerbraten";
+      desktopName = "Sauerbraten";
+      comment = "FPS that uses an improved version of the Cube engine";
+      categories = [ "Application" "Game" "ActionGame" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/icon/ $out/share/sauerbraten $out/share/doc/sauerbraten
+    cp -r "../docs/"* $out/share/doc/sauerbraten/
+    cp sauer_client sauer_server $out/share/sauerbraten/
+    cp -r ../packages ../data $out/share/sauerbraten/
+    ln -s $out/share/sauerbraten/cube.png $out/share/icon/sauerbraten.png
+
+    makeWrapper $out/share/sauerbraten/sauer_server $out/bin/sauerbraten_server \
+      --chdir "$out/share/sauerbraten"
+    makeWrapper $out/share/sauerbraten/sauer_client $out/bin/sauerbraten_client \
+      --chdir "$out/share/sauerbraten" \
+      --add-flags "-q\''${HOME}/.config/sauerbraten"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A free multiplayer & singleplayer first person shooter, the successor of the Cube FPS";
+    maintainers = with maintainers; [ raskin ajs124 ];
+    mainProgram = "sauerbraten_client";
+    hydraPlatforms =
+      # raskin: tested amd64-linux;
+      # not setting platforms because it is 0.5+ GiB of game data
+      [ ];
+    license = "freeware"; # as an aggregate - data files have different licenses code is under zlib license
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/scid-vs-pc/default.nix b/nixpkgs/pkgs/games/scid-vs-pc/default.nix
new file mode 100644
index 000000000000..dc76a6149c9d
--- /dev/null
+++ b/nixpkgs/pkgs/games/scid-vs-pc/default.nix
@@ -0,0 +1,50 @@
+{ lib, fetchurl, tcl, tk, libX11, zlib, makeWrapper, which, makeDesktopItem }:
+
+tcl.mkTclDerivation rec {
+  pname = "scid-vs-pc";
+  version = "4.24";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/scidvspc/scid_vs_pc-${version}.tgz";
+    hash = "sha256-x4Ljn1vaXrue16kUofWAH2sDNYC8h3NvzFjffRo0EhA=";
+  };
+
+  postPatch = ''
+    substituteInPlace configure Makefile.conf \
+      --replace "~/.fonts" "$out/share/fonts/truetype/Scid" \
+      --replace "which fc-cache" "false"
+  '';
+
+  nativeBuildInputs = [ makeWrapper which ];
+  buildInputs = [ tk libX11 zlib ];
+
+  configureFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "SHAREDIR=${placeholder "out"}/share"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/applications
+    cp $desktopItem/share/applications/* $out/share/applications/
+
+    install -D icons/scid.png "$out"/share/icons/hicolor/128x128/apps/scid.png
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "scid-vs-pc";
+    desktopName = "Scid vs. PC";
+    genericName = "Chess Database";
+    comment = meta.description;
+    icon = "scid";
+    exec = "scid";
+    categories = [ "Game" "BoardGame" ];
+  };
+
+  meta = with lib; {
+    description = "Chess database with play and training functionality";
+    homepage = "https://scidvspc.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    maintainers = [ maintainers.paraseba ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/scid/default.nix b/nixpkgs/pkgs/games/scid/default.nix
new file mode 100644
index 000000000000..576e6dc36772
--- /dev/null
+++ b/nixpkgs/pkgs/games/scid/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, tcl
+, tk
+, libX11
+, zlib
+}:
+
+tcl.mkTclDerivation rec {
+  pname = "scid";
+  version = "5.0.2";
+
+  src = fetchFromGitHub {
+    owner = "benini";
+    repo = "scid";
+    rev = "v${version}";
+    hash = "sha256-5WGZm7EwhZAMKJKxj/OOIFOJIgPBcc6/Bh4xVAlia4Y=";
+  };
+
+  postPatch = ''
+    substituteInPlace configure \
+      --replace "set var(INSTALL) {install_mac}" ""
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    tk
+    libX11
+    zlib
+  ];
+
+  configureFlags = [
+    "BINDIR=$(out)/bin"
+    "SHAREDIR=$(out)/share"
+  ];
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Chess database with play and training functionality";
+    maintainers = with lib.maintainers; [ agbrooks ];
+    homepage = "https://scid.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/scorched3d/default.nix b/nixpkgs/pkgs/games/scorched3d/default.nix
new file mode 100644
index 000000000000..fa8b7bcc8dd4
--- /dev/null
+++ b/nixpkgs/pkgs/games/scorched3d/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, libGLU, libGL, glew, pkg-config, openalSoft, freealut, wxGTK32, libogg
+, freetype, libvorbis, fftwSinglePrec, SDL, SDL_net, expat, libjpeg, libpng }:
+
+stdenv.mkDerivation rec {
+  version = "44";
+  pname = "scorched3d";
+  src = fetchurl {
+    url = "mirror://sourceforge/scorched3d/Scorched3D-${version}-src.tar.gz";
+    sha256 = "1fldi9pn7cz6hc9h70pacgb7sbykzcac44yp3pkhn0qh4axj10qw";
+  };
+
+  buildInputs =
+    [ libGLU libGL glew openalSoft freealut wxGTK32 libogg freetype libvorbis
+      SDL SDL_net expat libjpeg libpng fftwSinglePrec
+    ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  patches = [
+    ./file-existence.patch
+    (fetchurl {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/games-strategy/scorched3d/files/scorched3d-44-fix-c++14.patch?id=1bbcfc9ae3dfdfcbdd35151cb7b6050776215e4d";
+      sha256 = "1farmjxbc2wm4scsdbdnvh29fipnb6mp6z85hxz4bx6n9kbc8y7n";
+    })
+    (fetchurl {
+      url = "https://sources.debian.org/data/main/s/scorched3d/44%2Bdfsg-7/debian/patches/wx3.0-compat.patch";
+      sha256 = "sha256-Y5U5yYNT5iMqhdRaDMFtZ4K7aD+pugFZP0jLh7rdDp8=";
+    })
+  ];
+
+  sourceRoot = "scorched";
+
+  configureFlags = [ "--with-fftw=${fftwSinglePrec.dev}" ];
+
+  NIX_LDFLAGS = "-lopenal";
+
+  meta = with lib; {
+    homepage = "http://scorched3d.co.uk/";
+    description = "3D Clone of the classic Scorched Earth";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux; # maybe more
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/scorched3d/file-existence.patch b/nixpkgs/pkgs/games/scorched3d/file-existence.patch
new file mode 100644
index 000000000000..35eb63d07022
--- /dev/null
+++ b/nixpkgs/pkgs/games/scorched3d/file-existence.patch
@@ -0,0 +1,37 @@
+diff --git a/src/common/common/DefinesFile.cpp b/src/common/common/DefinesFile.cpp
+index 6ad803d..022797a 100644
+--- a/src/common/common/DefinesFile.cpp
++++ b/src/common/common/DefinesFile.cpp
+@@ -36,6 +36,17 @@
+ #include <unistd.h>

+ #endif

+ 

++namespace {

++    bool fileCanBeStated(const std::string &file)

++    {

++        struct stat buf;

++        memset(&buf, 0, sizeof(buf));

++        int result = stat(file.c_str(), &buf );

++

++        return result == 0;

++    }

++}

++

+ std::string S3D::getHomeDir()

+ {

+ #ifdef _WIN32

+@@ -74,12 +85,12 @@ bool S3D::dirMake(const std::string &file)
+ 

+ bool S3D::fileExists(const std::string &file)

+ {

+-	return (S3D::fileModTime(file) != 0);

++	return fileCanBeStated(file);

+ }

+ 

+ bool S3D::dirExists(const std::string &file)

+ {

+-	return (S3D::fileModTime(file) != 0);

++	return fileCanBeStated(file);

+ }

+ 

+ time_t S3D::fileModTime(const std::string &file)

diff --git a/nixpkgs/pkgs/games/scrolls/default.nix b/nixpkgs/pkgs/games/scrolls/default.nix
new file mode 100644
index 000000000000..fad783571c5d
--- /dev/null
+++ b/nixpkgs/pkgs/games/scrolls/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, gcc
+, libGLU, libX11, libXext, libXcursor, libpulseaudio
+}:
+stdenv.mkDerivation {
+  pname = "scrolls";
+  version = "2015-10-13";
+
+  meta = {
+    description = "A strategy collectible card game";
+    homepage = "https://scrolls.com/";
+    # http://www.reddit.com/r/Scrolls/comments/2j3pxw/linux_client_experimental/
+
+    platforms = [ "x86_64-linux" ];
+
+    license = lib.licenses.unfree;
+  };
+
+  src = fetchurl {
+    url = "https://download.scrolls.com/client/linux.tar.gz";
+    sha256 = "ead1fd14988aa07041fedfa7f845c756cd5077a5a402d85bfb749cb669ececec";
+  };
+
+  libPath = lib.makeLibraryPath [
+    gcc
+    libGLU
+    libX11
+    libXext
+    libXcursor
+    libpulseaudio
+  ];
+
+  installPhase = ''
+    mkdir -p "$out/opt/Scrolls"
+    cp -r ../Scrolls "$out/opt/Scrolls/"
+    cp -r ../Scrolls_Data "$out/opt/Scrolls/"
+    chmod +x "$out/opt/Scrolls/Scrolls"
+
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      --set-rpath "$libPath" "$out/opt/Scrolls/Scrolls"
+
+    mkdir "$out/bin"
+    ln -s "$out/opt/Scrolls/Scrolls" "$out/bin/Scrolls"
+  '';
+
+}
diff --git a/nixpkgs/pkgs/games/scummvm/default.nix b/nixpkgs/pkgs/games/scummvm/default.nix
new file mode 100644
index 000000000000..85ef0766b8e8
--- /dev/null
+++ b/nixpkgs/pkgs/games/scummvm/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchFromGitHub, nasm
+, alsa-lib, curl, flac, fluidsynth, freetype, libjpeg, libmad, libmpeg2, libogg, libtheora, libvorbis, libGLU, libGL, SDL2, zlib
+, Cocoa, AudioToolbox, Carbon, CoreMIDI, AudioUnit, cctools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "scummvm";
+  version = "2.7.1";
+
+  src = fetchFromGitHub {
+    owner = "scummvm";
+    repo = "scummvm";
+    rev = "v${version}";
+    hash = "sha256-GVsvLAjb7pECd7uvPT9ubDFMIkiPWdU5owOafxk5iy0=";
+  };
+
+  nativeBuildInputs = [ nasm ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    alsa-lib
+  ] ++ lib.optionals stdenv.isDarwin [
+    Cocoa AudioToolbox Carbon CoreMIDI AudioUnit
+  ] ++ [
+    curl freetype flac fluidsynth libjpeg libmad libmpeg2 libogg libtheora libvorbis libGLU libGL SDL2 zlib
+  ];
+
+  dontDisableStatic = true;
+
+  enableParallelBuilding = true;
+
+  configurePlatforms = [ "host" ];
+  configureFlags = [
+    "--enable-release"
+  ];
+
+  # They use 'install -s', that calls the native strip instead of the cross
+  postConfigure = ''
+    sed -i "s/-c -s/-c -s --strip-program=''${STRIP@Q}/" ports.mk
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace config.mk \
+      --replace x86_64-apple-darwin-ranlib ${cctools}/bin/ranlib \
+      --replace aarch64-apple-darwin-ranlib ${cctools}/bin/ranlib
+  '';
+
+  meta = with lib; {
+    description = "Program to run certain classic graphical point-and-click adventure games (such as Monkey Island)";
+    homepage = "https://www.scummvm.org/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/scummvm/games.nix b/nixpkgs/pkgs/games/scummvm/games.nix
new file mode 100644
index 000000000000..b146bf1bc49d
--- /dev/null
+++ b/nixpkgs/pkgs/games/scummvm/games.nix
@@ -0,0 +1,155 @@
+{ stdenv, lib, fetchurl, makeDesktopItem, unzip, writeText
+, scummvm, runtimeShell }:
+
+let
+  desktopItem = name: short: long: description: makeDesktopItem {
+    categories  = [ "Game" "AdventureGame" ];
+    comment     = description;
+    desktopName = long;
+    exec        = "@out@/bin/${short}";
+    genericName = description;
+    icon        = "scummvm";
+    name        = name;
+  };
+
+  run = name: short: code: writeText "${short}.sh" ''
+    #!${runtimeShell} -eu
+
+    exec ${scummvm}/bin/scummvm \
+      --path=@out@/share/${name} \
+      --fullscreen \
+      ${code}
+  '';
+
+  generic = { plong, pshort, pcode, description, version, files, docs ? [ "readme.txt" ], ... } @attrs:
+    let
+      attrs' = builtins.removeAttrs attrs [ "plong" "pshort" "pcode" "description" "docs" "files" "version" ];
+      pname = lib.replaceStrings [ " " ":" ] [ "-" "" ] (lib.toLower plong);
+    in stdenv.mkDerivation ({
+      name = "${pname}-${version}";
+
+      nativeBuildInputs = [ unzip ];
+
+      dontBuild = true;
+      dontFixup = true;
+
+      installPhase = ''
+        runHook preInstall
+
+        mkdir -p $out/bin $out/share/{applications,${pname},doc/${pname}}
+
+        ${lib.concatStringsSep "\n" (map (f: "mv ${f} $out/share/doc/${pname}") docs)}
+        ${lib.concatStringsSep "\n" (map (f: "mv ${f} $out/share/${pname}") files)}
+
+        substitute ${run pname pshort pcode} $out/bin/${pshort} \
+          --subst-var out
+        substitute ${desktopItem pname pshort plong description}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop \
+          --subst-var out
+
+        chmod 0755 $out/bin/${pshort}
+
+        runHook postInstall
+      '';
+
+      meta = with lib; {
+        homepage = "https://www.scummvm.org";
+        license = licenses.free; # refer to the readme for exact wording
+        maintainers = with maintainers; [ peterhoeg ];
+        inherit description;
+        inherit (scummvm.meta) platforms;
+      };
+    } // attrs');
+
+in {
+  beneath-a-steel-sky = generic rec {
+    plong = "Beneath a Steel Sky";
+    pshort = "bass";
+    pcode = "sky";
+    description = "2D point-and-click science fiction thriller set in a bleak vision of the future";
+    version = "1.2";
+    src = fetchurl {
+      url = "mirror://sourceforge/scummvm/${pshort}-cd-${version}.zip";
+      sha256 = "14s5jz67kavm8l15gfm5xb7pbpn8azrv460mlxzzvdpa02a9n82k";
+    };
+    files = [ "sky.*" ];
+  };
+
+  broken-sword-25 = generic rec {
+    plong = "Broken Sword 2.5";
+    pshort = "sword25";
+    pcode = "sword25";
+    description = "A fan game of the Broken Sword series";
+    version = "1.0";
+    src = fetchurl {
+      url = "mirror://sourceforge/scummvm/${pshort}-v${version}.zip";
+      sha256 = "0ivj1vflfpih5bs5a902mab88s4d77fwm3ya3fk7pammzc8gjqzz";
+    };
+    sourceRoot = ".";
+    docs = [ "README" "license-original.txt" ];
+    files = [ "data.b25c" ];
+  };
+
+  drascula-the-vampire-strikes-back = generic rec {
+    plong = "Drascula: The Vampire Strikes Back";
+    pshort = "drascula";
+    pcode = "drascula";
+    description = "Spanish 2D classic point & click style adventure with tons of humor and an easy interface";
+    version = "1.0";
+    # srcs = {
+      src = fetchurl {
+        url = "mirror://sourceforge/scummvm/${pshort}-${version}.zip";
+        sha256 = "1pj29rpb754sn6a56f8brfv6f2m1p5qgaqik7d68pfi2bb5zccdp";
+      };
+      # audio = fetchurl {
+        # url = "mirror://sourceforge/scummvm/${pshort}-audio-flac-2.0.zip";
+        # sha256 = "1zmqhrby8f5sj1qy6xjdgkvk9wyhr3nw8ljrrl58fmxb83x1rryw";
+      # };
+    # };
+    sourceRoot = ".";
+    docs = [ "readme.txt" "drascula.doc" ];
+    files = [ "Packet.001" ];
+  };
+
+  dreamweb = generic rec {
+    plong = "Dreamweb";
+    pshort = "dreamweb";
+    pcode = "dreamweb";
+    description = "2D point-and-click cyberpunk top-down adventure game";
+    version = "1.1";
+    src = fetchurl {
+      url = "mirror://sourceforge/scummvm/${pshort}-cd-uk-${version}.zip";
+      sha256 = "0hh1p3rd7s0ckvri14lc6wdry9vv0vn4h4744v2n4zg63j8i6vsa";
+    };
+    sourceRoot = ".";
+    docs = [ "license.txt" ];
+    files = [ "DREAMWEB.*" "SPEECH" "track01.flac" ];
+  };
+
+  flight-of-the-amazon-queen = generic rec {
+    plong = "Flight of the Amazon Queen";
+    pshort = "fotaq";
+    pcode = "queen";
+    description = "2D point-and-click adventure game set in the 1940s";
+    version = "1.1";
+    src = fetchurl {
+      url = "mirror://sourceforge/scummvm/FOTAQ_Talkie-${version}.zip";
+      sha256 = "1a6q71q1dl9vvw2qqsxk5h1sv0gaqy6236zr5905w2is01gdsp52";
+    };
+    sourceRoot = ".";
+    files = [ "*.1c" ];
+  };
+
+  lure-of-the-temptress = generic rec {
+    plong = "Lure of the Temptress";
+    pshort = "lott";
+    pcode = "lure";
+    description = "2D point-and-click adventure game with a fantasy theme";
+    version = "1.1";
+    src = fetchurl {
+      url = "mirror://sourceforge/scummvm/lure-${version}.zip";
+      sha256 = "0201i70qcs1m797kvxjx3ygkhg6kcl5yf49sihba2ga8l52q45zk";
+    };
+    docs = [ "README" "*.txt" "*.pdf" "*.PDF" ];
+    files = [ "*.vga" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/sdlpop/default.nix b/nixpkgs/pkgs/games/sdlpop/default.nix
new file mode 100644
index 000000000000..5defb942e7e9
--- /dev/null
+++ b/nixpkgs/pkgs/games/sdlpop/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv
+, makeWrapper
+, makeDesktopItem, copyDesktopItems
+, fetchFromGitHub
+, pkg-config
+, SDL2, SDL2_image
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sdlpop";
+  version = "1.23";
+
+  src = fetchFromGitHub {
+    owner = "NagyD";
+    repo = "SDLPoP";
+    rev = "v${version}";
+    sha256 = "sha256-UI7NfOC/+druRYL5g2AhIjTPEq4ta1qEThcxgyrFjHY=";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper copyDesktopItems ];
+
+  buildInputs = [ SDL2 SDL2_image ];
+
+  makeFlags = [ "-C" "src" ];
+
+  preBuild = ''
+    substituteInPlace src/Makefile \
+      --replace "CC = gcc" "CC = ${stdenv.cc.targetPrefix}cc" \
+      --replace "CFLAGS += -I/opt/local/include" "CFLAGS += -I${SDL2.dev}/include/SDL2 -I${SDL2_image}/include/SDL2"
+  '';
+
+  # The prince binary expects two things of the working directory it is called from:
+  # (1) There is a subdirectory "data" containing the level data.
+  # (2) The working directory is writable, so save and quicksave files can be created.
+  # Our solution is to ensure that ~/.local/share/sdlpop is the working
+  # directory, symlinking the data files into it. This is the task of the
+  # prince.sh wrapper.
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 prince $out/bin/.prince-bin
+    substituteAll ${./prince.sh} $out/bin/prince
+    chmod +x $out/bin/prince
+
+    mkdir -p $out/share/sdlpop
+    cp -r data doc mods SDLPoP.ini $out/share/sdlpop
+
+    install -Dm755 data/icon.png $out/share/icons/hicolor/32x32/apps/sdlpop.png
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ (makeDesktopItem {
+    name = "sdlpop";
+    icon = "sdlpop";
+    exec = "prince";
+    desktopName = "SDLPoP";
+    comment = "An open-source port of Prince of Persia";
+    categories = [ "Game" "AdventureGame" ];
+  }) ];
+
+  meta = with lib; {
+    description = "Open-source port of Prince of Persia";
+    homepage = "https://github.com/NagyD/SDLPoP";
+    changelog = "https://github.com/NagyD/SDLPoP/blob/v${version}/doc/ChangeLog.txt";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ iblech ];
+    platforms = platforms.unix;
+    mainProgram = "prince";
+  };
+}
diff --git a/nixpkgs/pkgs/games/sdlpop/prince.sh b/nixpkgs/pkgs/games/sdlpop/prince.sh
new file mode 100644
index 000000000000..698c347272a4
--- /dev/null
+++ b/nixpkgs/pkgs/games/sdlpop/prince.sh
@@ -0,0 +1,16 @@
+#! @shell@
+
+set -euo pipefail
+
+mkdir -p ~/.local/share/sdlpop
+cd ~/.local/share/sdlpop
+
+for i in SDLPoP.ini mods; do
+  [ -e $i ] || cp -r @out@/share/sdlpop/$i .
+done
+
+# Create the data symlink or update it (in case it is a symlink, else the user
+# has probably tinkered with it and does not want it to be recreated).
+[ ! -e data -o -L data ] && ln -sf @out@/share/sdlpop/data .
+
+exec -a "prince" @out@/bin/.prince-bin "$@"
diff --git a/nixpkgs/pkgs/games/sfrotz/default.nix b/nixpkgs/pkgs/games/sfrotz/default.nix
new file mode 100644
index 000000000000..e90f1639e170
--- /dev/null
+++ b/nixpkgs/pkgs/games/sfrotz/default.nix
@@ -0,0 +1,69 @@
+{ fetchFromGitLab
+, freetype
+, libao
+, libjpeg
+, libmodplug
+, libpng
+, libsamplerate
+, libsndfile
+, libvorbis
+, pkg-config
+, SDL2
+, SDL2_mixer
+, lib, stdenv
+, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "sfrotz";
+  version = "2.54";
+
+  src = fetchFromGitLab  {
+    domain = "gitlab.com";
+    owner = "DavidGriffith";
+    repo = "frotz";
+    rev = version;
+    sha256 = "sha256-GvGxojD8d5GVy/d8h3q6K7KJroz2lsKbfE0F0acjBl8=";
+  };
+
+  buildInputs = [
+    freetype
+    libao
+    libjpeg
+    libmodplug
+    libpng
+    libsamplerate
+    libsndfile
+    libvorbis
+    SDL2
+    SDL2_mixer
+    zlib
+  ];
+  nativeBuildInputs = [ pkg-config ];
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+  buildPhase = "make sdl";
+  installTargets = [ "install_sfrotz" ];
+
+  meta = with lib; {
+    description =
+      "Interpreter for Infocom and other Z-Machine games (SDL interface)";
+    longDescription = ''
+      Frotz is a Z-Machine interpreter. The Z-machine is a virtual machine
+      designed by Infocom to run all of their text adventures. It went through
+      multiple revisions during the lifetime of the company, and two further
+      revisions (V7 and V8) were created by Graham Nelson after the company's
+      demise. The specification is now quite well documented; this version of
+      Frotz supports version 1.0.
+
+      This version of Frotz fully supports all these versions of the Z-Machine
+      including the graphical version 6. Graphics and sound are created through
+      the use of the SDL libraries. AIFF sound effects and music in MOD and OGG
+      formats are supported when packaged in Blorb container files or optionally
+      from individual files.
+    '';
+    homepage = "https://davidgriffith.gitlab.io/frotz/";
+    changelog = "https://gitlab.com/DavidGriffith/frotz/-/raw/${version}/NEWS";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ddelabru ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/sgt-puzzles/default.nix b/nixpkgs/pkgs/games/sgt-puzzles/default.nix
new file mode 100644
index 000000000000..8173fb5fe1d2
--- /dev/null
+++ b/nixpkgs/pkgs/games/sgt-puzzles/default.nix
@@ -0,0 +1,82 @@
+{ lib, stdenv, fetchurl, desktop-file-utils
+, gtk3, libX11, cmake, imagemagick
+, pkg-config, perl, wrapGAppsHook, nixosTests, writeScript
+, isMobile ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sgt-puzzles";
+  version = "20230918.2d9e414";
+
+  src = fetchurl {
+    url = "http://www.chiark.greenend.org.uk/~sgtatham/puzzles/puzzles-${version}.tar.gz";
+    hash = "sha256-YsvJ/5DTevRb+sCxWc/KcD2X5IXwAXvWGVfokr06nUM=";
+  };
+
+  sgt-puzzles-menu = fetchurl {
+    url = "https://raw.githubusercontent.com/gentoo/gentoo/720e614d0107e86fc1e520bac17726578186843d/games-puzzle/sgt-puzzles/files/sgt-puzzles.menu";
+    sha256 = "088w0x9g3j8pn725ix8ny8knhdsfgjr3hpswsh9fvfkz5vlg2xkm";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    desktop-file-utils
+    imagemagick
+    perl
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString isMobile "-DSTYLUS_BASED";
+
+  buildInputs = [ gtk3 libX11 ];
+
+  postInstall = ''
+    for i in  $(basename -s $out/bin/*); do
+
+      ln -s $out/bin/$i $out/bin/sgt-puzzle-$i
+      install -Dm644 icons/$i-96d24.png -t $out/share/icons/hicolor/96x96/apps/
+
+      # Generate/validate/install .desktop files.
+      echo "[Desktop Entry]" > $i.desktop
+      desktop-file-install --dir $out/share/applications \
+        --set-key Type --set-value Application \
+        --set-key Exec --set-value $i \
+        --set-key Name --set-value $i \
+        --set-key Comment --set-value "${meta.description}" \
+        --set-key Categories --set-value "Game;LogicGame;X-sgt-puzzles;" \
+        --set-key Icon --set-value $out/share/icons/hicolor/96x96/apps/$i-96d24.png \
+        $i.desktop
+    done
+
+    echo "[Desktop Entry]" > sgt-puzzles.directory
+    desktop-file-install --dir $out/share/desktop-directories \
+      --set-key Type --set-value Directory \
+      --set-key Name --set-value Puzzles \
+      --set-key Icon --set-value $out/share/icons/hicolor/48x48/apps/sgt-puzzles_map \
+      sgt-puzzles.directory
+
+    install -Dm644 ${sgt-puzzles-menu} -t $out/etc/xdg/menus/applications-merged/
+  '';
+
+  passthru = {
+    tests.sgt-puzzles = nixosTests.sgt-puzzles;
+    updateScript = writeScript "update-sgt-puzzles" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      version="$(curl -sI 'https://www.chiark.greenend.org.uk/~sgtatham/puzzles/puzzles.tar.gz' | grep -Fi Location: | pcregrep -o1 'puzzles-([0-9a-f.]*).tar.gz')"
+      update-source-version sgt-puzzles "$version"
+    '';
+  };
+
+  meta = with lib; {
+    description = "Simon Tatham's portable puzzle collection";
+    license = licenses.mit;
+    maintainers = with maintainers; [ raskin tomfitzhenry ];
+    platforms = platforms.linux;
+    homepage = "https://www.chiark.greenend.org.uk/~sgtatham/puzzles/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/shattered-pixel-dungeon/default.nix b/nixpkgs/pkgs/games/shattered-pixel-dungeon/default.nix
new file mode 100644
index 000000000000..e74887799e1f
--- /dev/null
+++ b/nixpkgs/pkgs/games/shattered-pixel-dungeon/default.nix
@@ -0,0 +1,123 @@
+{ lib, stdenv
+, makeWrapper
+, fetchFromGitHub
+, nixosTests
+, gradle
+, perl
+, jre
+, libpulseaudio
+, makeDesktopItem
+, copyDesktopItems
+}:
+
+let
+  pname = "shattered-pixel-dungeon";
+  version = "2.1.4";
+
+  src = fetchFromGitHub {
+    owner = "00-Evan";
+    repo = "shattered-pixel-dungeon";
+    rev = "v${version}";
+    hash = "sha256-WbRvsHxTYYlhJavYVGMGK25fXEfSfnIztJ6KuCgBjF8=";
+  };
+
+  patches = [
+    ./disable-beryx.patch
+  ];
+
+  postPatch = ''
+    # 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|robovm)/ ... /^}/" build.gradle
+    # Remove unbuildable Android/iOS stuff
+    rm android/build.gradle ios/build.gradle
+  '';
+
+  # fake build to pre-download deps into fixed-output derivation
+  deps = stdenv.mkDerivation {
+    pname = "${pname}-deps";
+    inherit version src patches postPatch;
+    nativeBuildInputs = [ gradle perl ];
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d)
+      # https://github.com/gradle/gradle/issues/4426
+      ${lib.optionalString stdenv.isDarwin "export TERM=dumb"}
+      gradle --no-daemon desktop:release
+    '';
+    # 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
+    '';
+    outputHashMode = "recursive";
+    outputHash = "sha256-i4k5tdo07E1NJwywroaGvRjZ+/xrDp6ra+GTYwTB7uk=";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "shattered-pixel-dungeon";
+    desktopName = "Shattered Pixel Dungeon";
+    comment = "An open-source traditional roguelike dungeon crawler";
+    icon = "shattered-pixel-dungeon";
+    exec = "shattered-pixel-dungeon";
+    terminal = false;
+    categories = [ "Game" "AdventureGame" ];
+    keywords = [ "roguelike" "dungeon" "crawler" ];
+  };
+
+in stdenv.mkDerivation rec {
+  inherit pname version src patches postPatch;
+
+  nativeBuildInputs = [ gradle perl makeWrapper copyDesktopItems ];
+
+  desktopItems = [ desktopItem ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    export GRADLE_USER_HOME=$(mktemp -d)
+    # https://github.com/gradle/gradle/issues/4426
+    ${lib.optionalString stdenv.isDarwin "export TERM=dumb"}
+    # point to offline repo
+    sed -ie "s#repositories {#repositories { maven { url '${deps}' };#g" build.gradle
+    gradle --offline --no-daemon desktop:release
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 desktop/build/libs/desktop-${version}.jar $out/share/shattered-pixel-dungeon.jar
+    mkdir $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/shattered-pixel-dungeon \
+      --prefix LD_LIBRARY_PATH : ${libpulseaudio}/lib \
+      --add-flags "-jar $out/share/shattered-pixel-dungeon.jar"
+
+    for s in 16 32 48 64 128 256; do
+      install -Dm644 desktop/src/main/assets/icons/icon_$s.png \
+        $out/share/icons/hicolor/''${s}x$s/apps/shattered-pixel-dungeon.png
+    done
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    shattered-pixel-dungeon-starts = nixosTests.shattered-pixel-dungeon;
+  };
+
+  meta = with lib; {
+    homepage = "https://shatteredpixel.com/";
+    downloadPage = "https://github.com/00-Evan/shattered-pixel-dungeon/releases";
+    description = "Traditional roguelike game with pixel-art graphics and simple interface";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+    # https://github.com/NixOS/nixpkgs/pull/99885#issuecomment-740065005
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/shattered-pixel-dungeon/disable-beryx.patch b/nixpkgs/pkgs/games/shattered-pixel-dungeon/disable-beryx.patch
new file mode 100644
index 000000000000..5bd6e5bcf16c
--- /dev/null
+++ b/nixpkgs/pkgs/games/shattered-pixel-dungeon/disable-beryx.patch
@@ -0,0 +1,47 @@
+diff --git a/desktop/build.gradle b/desktop/build.gradle
+index 97f35f7..afd5116 100644
+--- a/desktop/build.gradle
++++ b/desktop/build.gradle
+@@ -1,6 +1,7 @@
+-plugins {
+-    id 'org.beryx.runtime' version '1.12.7'
+-}
++//plugins {
++//    id 'org.beryx.runtime' version '1.12.7'
++//}
++apply plugin: "java"
+ 
+ [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
+ sourceCompatibility = targetCompatibility = appJavaCompatibility
+@@ -43,11 +44,11 @@ task release(type: Jar) {
+         attributes 'Implementation-Version': appVersionCode
+     }
+ }
+-installDist.dependsOn release
+-startScripts.dependsOn release
+-jpackageImage.dependsOn release
++//installDist.dependsOn release
++//startScripts.dependsOn release
++//jpackageImage.dependsOn release
+ 
+-runtime {
++/*runtime {
+     modules = ['java.base',
+                'java.desktop',
+                'jdk.unsupported',
+@@ -102,7 +103,7 @@ runtime {
+         }
+     }
+ 
+-}
++}*/
+ 
+ dependencies {
+     implementation project(':core')
+@@ -123,4 +124,4 @@ dependencies {
+ 
+     implementation project(':services:updates:githubUpdates')
+     implementation project(':services:news:shatteredNews')
+-}
+\ No newline at end of file
++}
diff --git a/nixpkgs/pkgs/games/shipwright/default.nix b/nixpkgs/pkgs/games/shipwright/default.nix
new file mode 100644
index 000000000000..182e2cf654ae
--- /dev/null
+++ b/nixpkgs/pkgs/games/shipwright/default.nix
@@ -0,0 +1,222 @@
+{ stdenv
+, cmake
+, lsb-release
+, ninja
+, lib
+, fetchFromGitHub
+, fetchurl
+, makeDesktopItem
+, python3
+, libX11
+, libXrandr
+, libXinerama
+, libXcursor
+, libXi
+, libXext
+, glew
+, boost
+, SDL2
+, SDL2_net
+, pkg-config
+, libpulseaudio
+, libpng
+, imagemagick
+, requireFile
+
+, oot ? rec {
+    enable = true;
+    variant = "debug";
+
+    rom = requireFile {
+      name = "oot-${variant}.z64";
+      message = ''
+        This nix expression requires that oot-${variant}.z64 is already part of the store.
+        To get this file you can dump your Ocarina of Time's cartridge to a file,
+        and add it to the nix store with nix-store --add-fixed sha1 <FILE>, or override the package:
+          shipwright.override { oot = { enable = true; variant = "debug"; rom = path/to/oot-debug-mq.z64; } }
+
+        The supported variants are:
+         - debug: Ocarina of Time Debug PAL GC (not Master Quest)
+         - pal-gc: Ocarina of Time PAL GameCube (may lead to crashes and instability)
+
+        This is optional if you have imported an Ocarina of Time Master Quest ROM.
+        If so, please set oot.enable to false and ootMq.enable to true.
+        If both are enabled, Ship of Harkinian will be built with both ROMs.
+      '';
+
+      # From upstream: https://github.com/HarbourMasters/Shipwright/blob/e46c60a7a1396374e23f7a1f7122ddf9efcadff7/README.md#1-check-your-sha1
+      sha1 = {
+        debug = "cee6bc3c2a634b41728f2af8da54d9bf8cc14099";
+        pal-gc = "0227d7c0074f2d0ac935631990da8ec5914597b4";
+      }.${variant} or (throw "Unsupported romVariant ${variant}. Valid options are 'debug' and 'pal-gc'.");
+    };
+  }
+
+, ootMq ? rec {
+    enable = false;
+    variant = "debug-mq";
+
+    rom = requireFile {
+      name = "oot-${variant}.z64";
+      message = ''
+        This nix expression requires that oot-${variant}.z64 is already part of the store.
+        To get this file you can dump your Ocarina of Time Master Quest's cartridge to a file,
+        and add it to the nix store with nix-store --add-fixed sha1 <FILE>, or override the package:
+          shipwright.override { ootMq = { enable = true; variant = "debug-mq"; rom = path/to/oot-debug-mq.z64; } }
+
+        The supported variants are:
+         - debug-mq: Ocarina of Time Debug PAL GC MQ (Dungeons will be Master Quest)
+         - debug-mq-alt: Alternate ROM, not produced by decompilation.
+
+        This is optional if you have imported an Ocarina of Time ROM.
+        If so, please set oot.enable to true and ootMq.enable to false.
+        If both are enabled, Ship of Harkinian will be built with both ROMs.
+      '';
+
+      # From upstream: https://github.com/HarbourMasters/Shipwright/blob/e46c60a7a1396374e23f7a1f7122ddf9efcadff7/README.md#1-check-your-sha1
+      sha1 = {
+        debug-mq = "079b855b943d6ad8bd1eb026c0ed169ecbdac7da";
+        debug-mq-alt = "50bebedad9e0f10746a52b07239e47fa6c284d03";
+      }.${variant} or (throw "Unsupported mqRomVariant ${variant}. Valid options are 'debug-mq' and 'debug-mq-alt'.");
+    };
+  }
+}:
+
+let
+  checkAttrs = attrs:
+    let
+      validAttrs = [ "enable" "rom" "variant" ];
+    in
+    lib.all (name: lib.elem name validAttrs) (lib.attrNames attrs);
+in
+assert (lib.assertMsg (checkAttrs oot) "oot must have the attributes 'enable' and 'rom', and none other");
+assert (lib.assertMsg (checkAttrs ootMq) "ootMq must have the attributes 'enable' and 'rom', and none other");
+assert (lib.assertMsg (oot.enable || ootMq.enable) "At least one of 'oot.enable' and 'ootMq.enable' must be true");
+
+stdenv.mkDerivation rec {
+  pname = "shipwright";
+  version = "7.0.2";
+
+  src = fetchFromGitHub {
+    owner = "harbourmasters";
+    repo = "shipwright";
+    rev = version;
+    hash = "sha256-2VCcczGWSvp6hk8FTA1/T1E1KkrrvWyOdkEw8eiYYnY=";
+    fetchSubmodules = true;
+  };
+
+  # This would get fetched at build time otherwise, see:
+  # https://github.com/HarbourMasters/Shipwright/blob/e46c60a7a1396374e23f7a1f7122ddf9efcadff7/soh/CMakeLists.txt#L736
+  gamecontrollerdb = fetchurl {
+    name = "gamecontrollerdb.txt";
+    url = "https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/c5b4df0e1061175cb11e3ebbf8045178339864a5/gamecontrollerdb.txt";
+    hash = "sha256-2VFCsaalXoe+JYWCH6IbgjnLXNKxe0UqSyJNGZMn5Ko=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    pkg-config
+    lsb-release
+    python3
+    imagemagick
+  ];
+
+  buildInputs = [
+    boost
+    libX11
+    libXrandr
+    libXinerama
+    libXcursor
+    libXi
+    libXext
+    glew
+    SDL2
+    SDL2_net
+    libpulseaudio
+    libpng
+  ];
+
+  patches = [
+    # These patches make soh look inside the nix store for data files (the controller database and the OTRs)
+    ./lus-install-paths.patch
+    ./soh-misc-otr-patches.patch
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}/lib"
+  ];
+
+  dontAddPrefix = true;
+
+  # Linking fails without this
+  hardeningDisable = [ "format" ];
+
+  postBuild = ''
+    cp ${gamecontrollerdb} ${gamecontrollerdb.name}
+
+    pushd ../OTRExporter
+    ${lib.optionalString oot.enable "python3 ./extract_assets.py -z ../build/ZAPD/ZAPD.out ${oot.rom}"}
+    ${lib.optionalString ootMq.enable "python3 ./extract_assets.py -z ../build/ZAPD/ZAPD.out ${ootMq.rom}"}
+    popd
+  '';
+
+  preInstall = ''
+    # Cmake likes it here for its install paths
+    cp ../OTRExporter/soh.otr ..
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+
+    # Copy the extracted assets, required to be in the same directory as the executable
+    ${lib.optionalString oot.enable "cp ../OTRExporter/oot.otr $out/lib"}
+    ${lib.optionalString ootMq.enable "cp ../OTRExporter/oot-mq.otr $out/lib"}
+
+    ln -s $out/lib/soh.elf $out/bin/soh
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "soh";
+      icon = "soh";
+      exec = "soh";
+      genericName = "Ship of Harkinian";
+      desktopName = "soh";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/HarbourMasters/Shipwright";
+    description = "A PC port of Ocarina of Time with modern controls, widescreen, high-resolution, and more";
+    longDescription = ''
+      An PC port of Ocarina of Time with modern controls, widescreen, high-resolution and more, based off of decompilation.
+      Note that you must supply an OoT rom yourself to use this package because propietary assets are extracted from it.
+
+      You can change the game variant like this:
+        shipwright.override { oot.enable = false; ootMq.enable = true }
+
+      The default ROM variants for Oot and OotMq are debug and debug-mq respectively.
+      If you have a pal-gc rom, you should override like this:
+        shipwright.override { oot = { enable = true; variant = "pal-gc"; rom = path/to/oot-pal-gc.z64; } }
+
+      The supported Oot variants are:
+       - debug: Ocarina of Time Debug PAL GC (not Master Quest)
+       - pal-gc: Ocarina of Time PAL GameCube (may lead to crashes and instability)
+
+      The supported OotMq variants are:
+       - debug-mq: Ocarina of Time Debug PAL GC MQ (Dungeons will be Master Quest)
+       - debug-mq-alt: Alternate ROM, not produced by decompilation.
+    '';
+    mainProgram = "soh";
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ ivar j0lol ];
+    license = with licenses; [
+      # OTRExporter, OTRGui, ZAPDTR, libultraship
+      mit
+      # Ship of Harkinian itself
+      unfree
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/shipwright/lus-install-paths.patch b/nixpkgs/pkgs/games/shipwright/lus-install-paths.patch
new file mode 100644
index 000000000000..c14ecccfed0f
--- /dev/null
+++ b/nixpkgs/pkgs/games/shipwright/lus-install-paths.patch
@@ -0,0 +1,146 @@
+Submodule libultraship contains modified content
+diff --git a/libultraship/src/CMakeLists.txt b/libultraship/src/CMakeLists.txt
+index f95c3c9..5b967b9 100644
+--- a/libultraship/src/CMakeLists.txt
++++ b/libultraship/src/CMakeLists.txt
+@@ -74,7 +74,10 @@ target_sources(libultraship PRIVATE ${Source_Files__Controller})
+ 
+ #=================== Core ===================
+ 
++configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/install_config.h.in ${CMAKE_BINARY_DIR}/install_config.h @ONLY)
++
+ set(Source_Files__Core
++    ${CMAKE_BINARY_DIR}/install_config.h
+     ${CMAKE_CURRENT_SOURCE_DIR}/core/Window.h
+     ${CMAKE_CURRENT_SOURCE_DIR}/core/Window.cpp
+     ${CMAKE_CURRENT_SOURCE_DIR}/core/ConsoleVariable.h
+@@ -329,7 +332,7 @@ endif()
+ #=================== Packages & Includes ===================
+ 
+ target_include_directories(libultraship
+-    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../extern
++    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../extern ${CMAKE_BINARY_DIR}
+     PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../extern/spdlog/include ${CMAKE_CURRENT_SOURCE_DIR}/../extern/stb
+ )
+ 
+diff --git a/libultraship/src/core/Context.cpp b/libultraship/src/core/Context.cpp
+index 776333e..fa546e6 100644
+--- a/libultraship/src/core/Context.cpp
++++ b/libultraship/src/core/Context.cpp
+@@ -14,6 +14,7 @@
+ #elif defined(__WIIU__)
+ #include "port/wiiu/WiiUImpl.h"
+ #endif
++#include "install_config.h"
+ 
+ namespace LUS {
+ std::weak_ptr<Context> Context::mContext;
+@@ -281,6 +282,18 @@ std::string Context::GetShortName() {
+ }
+ 
+ std::string Context::GetAppBundlePath() {
++#ifdef CMAKE_INSTALL_PREFIX
++    static const std::string fpath = CMAKE_INSTALL_PREFIX;
++    static int exists = -1;
++
++    if (exists == -1) {
++        exists = fpath.size() > 0 && std::filesystem::is_directory(fpath);
++    }
++
++    if (exists) {
++        return fpath;
++    }
++#else
+ #ifdef __APPLE__
+     FolderManager folderManager;
+     return folderManager.getMainBundlePath();
+@@ -291,6 +304,7 @@ std::string Context::GetAppBundlePath() {
+     if (fpath != NULL) {
+         return std::string(fpath);
+     }
++#endif
+ #endif
+ 
+     return ".";
+@@ -304,6 +318,13 @@ std::string Context::GetAppDirectoryPath() {
+     }
+ #endif
+ 
++    char *prefpath = SDL_GetPrefPath(NULL, "soh");
++    if (prefpath != NULL) {
++        std::string ret(prefpath);
++        SDL_free(prefpath);
++        return ret;
++    }
++
+     return ".";
+ }
+ 
+@@ -315,7 +336,24 @@ std::string Context::GetPathRelativeToAppDirectory(const char* path) {
+     return GetAppDirectoryPath() + "/" + path;
+ }
+ 
++std::string Context::FindFileFromAllAppDirectories(const char* path) {
++    std::string fpath;
++
++    // app configuration dir (eg. ~/.local/share)
++    fpath = GetPathRelativeToAppDirectory(path);
++    if (std::filesystem::exists(fpath)) {
++        return fpath;
++    }
++    // app install dir (eg. /usr/)
++    fpath = GetPathRelativeToAppBundle(path);
++    if (std::filesystem::exists(fpath)) {
++        return fpath;
++    }
++    // current dir
++    return "./" + std::string(path);
++}
++
+ bool Context::DoesOtrFileExist() {
+     return mOtrFileExists;
+ }
+-} // namespace LUS
+\ No newline at end of file
++} // namespace LUS
+diff --git a/libultraship/src/core/Context.h b/libultraship/src/core/Context.h
+index c32f4dd..a9f1639 100644
+--- a/libultraship/src/core/Context.h
++++ b/libultraship/src/core/Context.h
+@@ -26,6 +26,7 @@ class Context {
+     static std::string GetAppDirectoryPath();
+     static std::string GetPathRelativeToAppDirectory(const char* path);
+     static std::string GetPathRelativeToAppBundle(const char* path);
++    static std::string FindFileFromAllAppDirectories(const char* path);
+ 
+     Context(std::string name, std::string shortName);
+ 
+diff --git a/libultraship/src/core/libultra/os.cpp b/libultraship/src/core/libultra/os.cpp
+index 9058fe1..7d9387e 100644
+--- a/libultraship/src/core/libultra/os.cpp
++++ b/libultraship/src/core/libultra/os.cpp
+@@ -21,8 +21,8 @@ int32_t osContInit(OSMesgQueue* mq, uint8_t* controllerBits, OSContStatus* statu
+     }
+ 
+ #ifndef __SWITCH__
+-    const char* controllerDb = "gamecontrollerdb.txt";
+-    int mappingsAdded = SDL_GameControllerAddMappingsFromFile(controllerDb);
++    std::string controllerDb = LUS::Context::GetPathRelativeToAppBundle("gamecontrollerdb.txt");
++    int mappingsAdded = SDL_GameControllerAddMappingsFromFile(controllerDb.c_str());
+     if (mappingsAdded >= 0) {
+         SPDLOG_INFO("Added SDL game controllers from \"{}\" ({})", controllerDb, mappingsAdded);
+     } else {
+@@ -90,4 +90,4 @@ int32_t osRecvMesg(OSMesgQueue* mq, OSMesg* msg, int32_t flag) {
+     mq->validCount--;
+     return 0;
+ }
+-}
+\ No newline at end of file
++}
+diff --git a/libultraship/src/install_config.h.in b/libultraship/src/install_config.h.in
+new file mode 100644
+index 0000000..029753c
+--- /dev/null
++++ b/libultraship/src/install_config.h.in
+@@ -0,0 +1 @@
++#cmakedefine CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@"
diff --git a/nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch b/nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch
new file mode 100644
index 000000000000..2be31092e285
--- /dev/null
+++ b/nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch
@@ -0,0 +1,119 @@
+diff --git a/soh/soh/Extractor/Extract.cpp b/soh/soh/Extractor/Extract.cpp
+index a9ddc4f4..f6d45fe2 100644
+--- a/soh/soh/Extractor/Extract.cpp
++++ b/soh/soh/Extractor/Extract.cpp
+@@ -490,28 +490,27 @@ const char* Extractor::GetZapdVerStr() const {
+ 
+ extern "C" int zapd_main(int argc, char** argv);
+ 
+-bool Extractor::CallZapd() {
++bool Extractor::CallZapd(std::string &assetPath) {
+     constexpr int argc = 16;
+-    char xmlPath[100];
+-    char confPath[100];
+     std::array<const char*, argc> argv;
+     const char* version = GetZapdVerStr();
+ 
+-    snprintf(xmlPath, 100, "assets/extractor/xmls/%s", version);
+-    snprintf(confPath, 100, "assets/extractor/Config_%s.xml", version);
++    std::string xmlPath = assetPath + "/assets/extractor/xmls/" + version;
++    std::string confPath = assetPath + "/assets/extractor/Config_" + version + ".xml";
++    std::string fileListsPath = assetPath + "/assets/extractor/filelists";
+ 
+     argv[0] = "ZAPD";
+     argv[1] = "ed";
+     argv[2] = "-i";
+-    argv[3] = xmlPath;
++    argv[3] = xmlPath.c_str();
+     argv[4] = "-b";
+     argv[5] = mCurrentRomPath.c_str();
+     argv[6] = "-fl";
+-    argv[7] = "assets/extractor/filelists";
++    argv[7] = fileListsPath.c_str();
+     argv[8] = "-gsf";
+-    argv[9] = "1";
++    argv[9] = "0";
+     argv[10] = "-rconf";
+-    argv[11] = confPath;
++    argv[11] = confPath.c_str();
+     argv[12] = "-se";
+     argv[13] = "OTR";
+     argv[14] = "--otrfile";
+diff --git a/soh/soh/Extractor/Extract.h b/soh/soh/Extractor/Extract.h
+index e4eb2e5b..3c95b025 100644
+--- a/soh/soh/Extractor/Extract.h
++++ b/soh/soh/Extractor/Extract.h
+@@ -57,7 +57,7 @@ class Extractor {
+     bool IsMasterQuest() const;
+ 
+     bool Run(RomSearchMode searchMode = RomSearchMode::Both);
+-    bool CallZapd();
++    bool CallZapd(std::string& assetPath);
+     const char* GetZapdStr();
+ };
+ #endif
+diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp
+index d192de6a..cc516085 100644
+--- a/soh/soh/OTRGlobals.cpp
++++ b/soh/soh/OTRGlobals.cpp
+@@ -201,11 +201,11 @@ const char* constCameraStrings[] = {
+ 
+ OTRGlobals::OTRGlobals() {
+     std::vector<std::string> OTRFiles;
+-    std::string mqPath = LUS::Context::GetPathRelativeToAppDirectory("oot-mq.otr");
++    std::string mqPath = LUS::Context::FindFileFromAllAppDirectories("oot-mq.otr");
+     if (std::filesystem::exists(mqPath)) { 
+         OTRFiles.push_back(mqPath);
+     } 
+-    std::string ootPath = LUS::Context::GetPathRelativeToAppDirectory("oot.otr");
++    std::string ootPath = LUS::Context::FindFileFromAllAppDirectories("oot.otr");
+     if (std::filesystem::exists(ootPath)) {
+         OTRFiles.push_back(ootPath);
+     }
+@@ -213,7 +213,7 @@ OTRGlobals::OTRGlobals() {
+     if (std::filesystem::exists(sohOtrPath)) {
+         OTRFiles.push_back(sohOtrPath);
+     }
+-    std::string patchesPath = LUS::Context::GetPathRelativeToAppDirectory("mods");
++    std::string patchesPath = LUS::Context::FindFileFromAllAppDirectories("mods");
+     if (patchesPath.length() > 0 && std::filesystem::exists(patchesPath)) {
+         if (std::filesystem::is_directory(patchesPath)) {
+             for (const auto& p : std::filesystem::recursive_directory_iterator(patchesPath)) {
+@@ -709,8 +709,10 @@ extern "C" void OTRExtScanner() {
+ 
+ extern "C" void InitOTR() {
+ #if not defined (__SWITCH__) && not defined(__WIIU__)
+-    if (!std::filesystem::exists(LUS::Context::GetPathRelativeToAppDirectory("oot-mq.otr")) &&
+-        !std::filesystem::exists(LUS::Context::GetPathRelativeToAppDirectory("oot.otr"))){
++    if (!std::filesystem::exists(LUS::Context::FindFileFromAllAppDirectories("oot-mq.otr")) &&
++        !std::filesystem::exists(LUS::Context::FindFileFromAllAppDirectories("oot.otr"))){
++        std::string exporterAssetPath = LUS::Context::GetAppBundlePath();
++
+         bool generatedOtrIsMQ = false;
+         if (Extractor::ShowYesNoBox("No OTR Files", "No OTR files found. Generate one now?") == IDYES) {
+             Extractor extract;
+@@ -718,7 +720,7 @@ extern "C" void InitOTR() {
+                 Extractor::ShowErrorBox("Error", "An error occured, no OTR file was generated. Exiting...");
+                 exit(1);
+             }
+-            extract.CallZapd();
++            extract.CallZapd(exporterAssetPath);
+             generatedOtrIsMQ = extract.IsMasterQuest();
+         } else {
+             exit(1);
+@@ -728,7 +730,7 @@ extern "C" void InitOTR() {
+             if (!extract.Run(generatedOtrIsMQ ? RomSearchMode::Vanilla : RomSearchMode::MQ)) {
+                 Extractor::ShowErrorBox("Error", "An error occured, an OTR file may have been generated by a different step. Continuing...");
+             } else {
+-                extract.CallZapd();
++                extract.CallZapd(exporterAssetPath);
+             }
+         }
+     }
+@@ -2018,4 +2020,4 @@ extern "C" void Gfx_RegisterBlendedTexture(const char* name, u8* mask, u8* repla
+ 
+ extern "C" void SaveManager_ThreadPoolWait() {
+     SaveManager::Instance->ThreadPoolWait();
+-}
+\ No newline at end of file
++}
diff --git a/nixpkgs/pkgs/games/shticker-book-unwritten/default.nix b/nixpkgs/pkgs/games/shticker-book-unwritten/default.nix
new file mode 100644
index 000000000000..f19fe258f70b
--- /dev/null
+++ b/nixpkgs/pkgs/games/shticker-book-unwritten/default.nix
@@ -0,0 +1,26 @@
+{ buildFHSEnv, callPackage, lib }:
+let
+
+  shticker-book-unwritten-unwrapped = callPackage ./unwrapped.nix { };
+
+in buildFHSEnv {
+  name = "shticker_book_unwritten";
+  targetPkgs = pkgs: with pkgs; [
+      alsa-lib
+      libglvnd
+      libpulseaudio
+      shticker-book-unwritten-unwrapped
+      xorg.libX11
+      xorg.libXcursor
+      xorg.libXext
+  ];
+  runScript = "shticker_book_unwritten";
+
+  meta = with lib; {
+    description = "Minimal CLI launcher for the Toontown Rewritten MMORPG";
+    homepage = "https://github.com/JonathanHelianthicusDoe/shticker_book_unwritten";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.reedrw ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/shticker-book-unwritten/unwrapped.nix b/nixpkgs/pkgs/games/shticker-book-unwritten/unwrapped.nix
new file mode 100644
index 000000000000..1d49a220235f
--- /dev/null
+++ b/nixpkgs/pkgs/games/shticker-book-unwritten/unwrapped.nix
@@ -0,0 +1,18 @@
+{ lib, rustPlatform, fetchCrate, pkg-config, openssl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shticker-book-unwritten";
+  version = "1.2.0";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "shticker_book_unwritten";
+    sha256 = "sha256-jI2uL8tMUmjZ5jPkCV2jb98qtKwi9Ti4NVCPfuO3iB4=";
+  };
+
+  cargoSha256 = "sha256-Tney9SG9MZh7AUIT1h/dlgJyRrSPX7mUhfsKD1Rfsfc=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ];
+}
diff --git a/nixpkgs/pkgs/games/sienna/default.nix b/nixpkgs/pkgs/games/sienna/default.nix
new file mode 100644
index 000000000000..c6f8db0ea9e7
--- /dev/null
+++ b/nixpkgs/pkgs/games/sienna/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, love, makeWrapper, makeDesktopItem, copyDesktopItems }:
+
+stdenv.mkDerivation rec {
+  pname = "sienna";
+  version = "1.0d";
+
+  src = fetchurl {
+    url = "https://github.com/SimonLarsen/${pname}/releases/download/v${version}/${pname}-${version}.love";
+    sha256 = "sha256-1bFjhN7jL/PMYMJH1ete6uyHTYsTGgoP60sf/sJTLlU=";
+  };
+
+  icon = fetchurl {
+    url = "http://tangramgames.dk/img/thumb/sienna.png";
+    sha256 = "12q2rhk39dmb6ir50zafn8dylaad5gns8z3y21mfjabc5l5g02nn";
+  };
+
+  desktopItems = [ (makeDesktopItem {
+    name = "sienna";
+    exec = pname;
+    icon = icon;
+    comment = "Fast-paced one button platformer";
+    desktopName = "Sienna";
+    genericName = "sienna";
+    categories = [ "Game" ];
+  }) ];
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    mkdir -p $out/share/games/lovegames
+
+    cp -v $src $out/share/games/lovegames/${pname}.love
+
+    makeWrapper ${love}/bin/love $out/bin/${pname} --add-flags $out/share/games/lovegames/${pname}.love
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Fast-paced one button platformer";
+    homepage = "https://tangramgames.dk/games/sienna";
+    maintainers = with maintainers; [ leenaars ];
+    platforms = platforms.linux;
+    license = licenses.free;
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/sil-q/default.nix b/nixpkgs/pkgs/games/sil-q/default.nix
new file mode 100644
index 000000000000..9127d4e9afc0
--- /dev/null
+++ b/nixpkgs/pkgs/games/sil-q/default.nix
@@ -0,0 +1,73 @@
+{ pkgs, lib, stdenv, fetchFromGitHub, writeScript, makeWrapper, ncurses, libX11 }:
+
+let
+  setup = writeScript "setup" ''
+    mkdir -p "$ANGBAND_PATH"
+    # copy all the data files into place
+    cp -ar $1/* "$ANGBAND_PATH"
+    # the copied files need to be writable
+    chmod +w -R "$ANGBAND_PATH"
+  '';
+in stdenv.mkDerivation rec {
+  pname = "sil-q";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "sil-quirk";
+    repo = "sil-q";
+    rev = "v${version}";
+    sha256 = "sha256-v/sWhPWF9cCKD8N0RHpwzChMM1t9G2yrMDmi1cZxdOs=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ ncurses libX11 ];
+
+  # Makefile(s) and config are not top-level
+  sourceRoot = "${src.name}/src";
+
+  postPatch = ''
+    # allow usage of ANGBAND_PATH
+    substituteInPlace config.h --replace "#define FIXED_PATHS" ""
+
+    # change Makefile.std for ncurses according to its own comment
+    substituteInPlace Makefile.std --replace "-lcurses" "-lncurses"
+  '';
+
+  makefile = "Makefile.std";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp sil $out/bin/sil-q
+    wrapProgram $out/bin/sil-q \
+      --run "export ANGBAND_PATH=\$HOME/.sil-q" \
+      --run "${setup} ${src}/lib"
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    saveDirCreation = pkgs.runCommand "save-dir-creation" {} ''
+      HOME=$(pwd) ${lib.getExe pkgs.sil-q} --help
+      test -d .sil-q && touch $out
+    '';
+  };
+
+  meta = {
+    description = "A roguelike game set in the First Age of Middle-earth";
+    longDescription = ''
+      A game of adventure set in the First Age of Middle-earth, when the world still
+      rang with Elven song and gleamed with Dwarven mail.
+
+      Walk the dark halls of Angband.  Slay creatures black and fell.  Wrest a shining
+      Silmaril from Morgoth’s iron crown.
+
+      A fork of Sil that's still actively developed.
+    '';
+    homepage = "https://github.com/sil-quirk/sil-q";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.kenran ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/sil/default.nix b/nixpkgs/pkgs/games/sil/default.nix
new file mode 100644
index 000000000000..0c6a11f47981
--- /dev/null
+++ b/nixpkgs/pkgs/games/sil/default.nix
@@ -0,0 +1,84 @@
+{ pkgs, lib, stdenv, fetchzip, ncurses, libX11, libXaw, libXt, libXext, libXmu
+, makeWrapper, writeScript }:
+
+let
+  setup = writeScript "setup" ''
+    mkdir -p "$ANGBAND_PATH"
+    # Copy all the data files into place
+    cp -ar $1/* "$ANGBAND_PATH"
+    # The copied files are not writable, make them so
+    chmod +w -R "$ANGBAND_PATH"
+  '';
+in
+stdenv.mkDerivation rec {
+  pname = "Sil";
+  version = "1.3.0";
+
+  src = fetchzip {
+    url = "https://www.amirrorclear.net/flowers/game/sil/Sil-130-src.zip";
+    sha256 = "1amp2mr3fxascra0k76sdsvikjh8g76nqh46kka9379zd35lfq8w";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ ncurses libX11 libXaw libXt libXext libXmu ];
+
+  sourceRoot = "${src.name}/Sil/src";
+
+  makefile = "Makefile.std";
+
+  postPatch = ''
+    # Allow usage of ANGBAND_PATH
+    substituteInPlace config.h --replace "#define FIXED_PATHS" ""
+  '';
+
+  preConfigure = ''
+    buildFlagsArray+=("LIBS=-lXaw -lXext -lSM -lICE -lXmu -lXt -lX11 -lncurses")
+  '';
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: main.o:/build/source/Sil/src/externs.h:57: multiple definition of
+  #     `mini_screenshot_char'; variable.o:/build/source/Sil/src/externs.h:57: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installPhase = ''
+    runHook preInstall
+
+    # the makefile doesn't have a sensible install target, so we have to do it ourselves
+    mkdir -p $out/bin
+    cp sil $out/bin/sil
+
+    # Wrap the program to set a user-local ANGBAND_PATH, and run the setup script to copy files into place.
+    # We could just use the options for a user-local save and scores dir, but it tried to write to the
+    # lib directory anyway, so we might as well give everyone a copy
+    wrapProgram $out/bin/sil \
+      --run "export ANGBAND_PATH=\$HOME/.sil" \
+      --run "${setup} ${src}/Sil/lib"
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    saveDirCreation = pkgs.runCommand "save-dir-creation" {} ''
+      HOME=$(pwd) ${lib.getExe pkgs.sil} --help
+      test -d .sil && touch $out
+    '';
+  };
+
+  meta = {
+    description = "A rogue-like game set in the First Age of Middle-earth";
+    longDescription = ''
+      A game of adventure set in the First Age of Middle-earth, when the world still
+      rang with Elven song and gleamed with Dwarven mail.
+
+      Walk the dark halls of Angband.  Slay creatures black and fell.  Wrest a shining
+      Silmaril from Morgoth’s iron crown.
+    '';
+    homepage = "http://www.amirrorclear.net/flowers/game/sil/index.html";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ michaelpj kenran ];
+    platforms = lib.platforms.linux;
+    mainProgram = "sil";
+  };
+}
diff --git a/nixpkgs/pkgs/games/simutrans/default.nix b/nixpkgs/pkgs/games/simutrans/default.nix
new file mode 100644
index 000000000000..cc8b864c1f3e
--- /dev/null
+++ b/nixpkgs/pkgs/games/simutrans/default.nix
@@ -0,0 +1,171 @@
+{ lib, stdenv, fetchurl, pkg-config, unzip, zlib, libpng, bzip2, SDL, SDL_mixer
+, buildEnv, config, runtimeShell
+}:
+
+let
+  # Choose your "paksets" of objects, images, text, music, etc.
+  paksets = config.simutrans.paksets or "pak64 pak64.japan pak128 pak128.britain pak128.german";
+
+  result = with lib; withPaks (
+    if paksets == "*" then attrValues pakSpec # taking all
+      else map (name: pakSpec.${name}) (splitString " " paksets)
+  );
+
+  ver1 = "121";
+  ver2 = "0";
+  ver3 = "";
+  version  = "${ver1}.${ver2}${lib.optionalString (ver3 != "") ".${ver3}"}";
+  ver_dash = "${ver1}-${ver2}${lib.optionalString (ver3 != "") "-${ver3}"}";
+
+  binary_src = fetchurl {
+    url = "mirror://sourceforge/simutrans/simutrans/${ver_dash}/simutrans-src-${ver_dash}.zip";
+    sha256 = "1f463r6kr5ig0zd3mncc74k93xbjywsq3d06j5r17831jyc9bzb9";
+  };
+
+
+  # As of 2021/07, many of these paksets have not been updated for years, so are on old versions.
+  pakSpec = lib.mapAttrs
+    (pakName: attrs: mkPak (attrs // {inherit pakName;}))
+  {
+    pak64 = {
+      srcPath = "${ver_dash}/simupak64-${ver_dash}";
+      sha256 = "1k335kh8dhm1hdn5iwn3sdgnrlpk0rqxmmgqgqcwsi09cmw45m5c";
+    };
+    "pak64.japan" = {
+      # No release for 121.0 yet!
+      srcPath = "120-0/simupak64.japan-120-0-1";
+      sha256 = "14swy3h4ij74bgaw7scyvmivfb5fmp21nixmhlpk3mav3wr3167i";
+    };
+
+    pak128 = {
+      srcPath = "pak128%20for%20ST%20120.4.1%20%282.8.1%2C%20priority%20signals%20%2B%20bugfix%29/pak128";
+      sha256 = "0z01y7r0rz7q79vr17bbnkgcbjjrimphy1dwb1pgbiv4klz7j5xw";
+    };
+    "pak128.britain" = {
+      srcPath = "pak128.Britain%20for%20120-1/pak128.Britain.1.18-120-3";
+      sha256 = "1kyb0s54kysvdr0zdln9106yx75d71j4lbw3v87k3i440cj3r1d3";
+    };
+    "pak128.cs" = { # note: it needs pak128 to work
+      url = "mirror://sourceforge/simutrans/Pak128.CS/pak128.cz_v.0.2.1.zip";
+      sha256 = "008d8x1s0vxsq78rkczlnf57pv1n5hi1v5nbd1l5w3yls7lk11sc";
+    };
+    "pak128.german" = {
+      url = "mirror://sourceforge/simutrans/PAK128.german/"
+        + "pak128.german_1.2_for_ST_121.0/PAK128.german_1.2_for_ST_121-0.zip";
+      sha256 = "1cv1rzl1a3i5dvk476zq094wawk9hhdh2f0y4xrdny5gn17mb2xi";
+    };
+
+    /* This release contains accented filenames that prevent unzipping.
+    "pak192.comic" = {
+      srcPath = "pak192comic%20for%20${ver2_dash}/pak192comic-0.4-${ver2_dash}up";
+      sha256 = throw "";
+    };
+    */
+  };
+
+
+  mkPak = {
+    sha256, pakName, srcPath ? null
+    , url ? "mirror://sourceforge/simutrans/${pakName}/${srcPath}.zip"
+  }:
+    stdenv.mkDerivation {
+      name = "simutrans-${pakName}";
+      dontUnpack = true;
+      preferLocalBuild = true;
+      installPhase = let src = fetchurl { inherit url sha256; };
+      in ''
+        mkdir -p "$out/share/simutrans/${pakName}"
+        cd "$out/share/simutrans/${pakName}"
+        "${unzip}/bin/unzip" "${src}"
+        chmod -R +w . # some zipfiles need that
+
+        set +o pipefail # no idea why it's needed
+        toStrip=`find . -iname '*.pak' | head -n 1 | sed 's|\./\(.*\)/[^/]*$|\1|'`
+        echo "Detected path '$toStrip' to strip"
+        mv ./"$toStrip"/* .
+        rm -f "$toStrip/.directory" #pak128.german had this
+        rmdir -p "$toStrip"
+      '';
+    };
+
+  /* The binaries need all data in one directory; the default is directory
+      of the executable, and another option is the current directory :-/ */
+  withPaks = paks: buildEnv {
+    inherit (binaries) name;
+    paths = [binaries] ++ paks;
+    postBuild = ''
+      rm "$out/bin" && mkdir "$out/bin"
+      cat > "$out/bin/simutrans" <<EOF
+      #!${runtimeShell}
+      cd "$out"/share/simutrans
+      exec "${binaries}/bin/simutrans" -use_workdir "\$@"
+      EOF
+      chmod +x "$out/bin/simutrans"
+    '';
+
+    passthru.meta = binaries.meta // { hydraPlatforms = []; };
+    passthru.binaries = binaries;
+  };
+
+  binaries = stdenv.mkDerivation {
+    pname = "simutrans";
+    inherit version;
+
+    src = binary_src;
+
+    sourceRoot = ".";
+
+    nativeBuildInputs = [ pkg-config unzip ];
+    buildInputs = [ zlib libpng bzip2 SDL SDL_mixer ];
+
+    configurePhase = let
+      # Configuration as per the readme.txt and config.template
+      platform =
+        if stdenv.isLinux then "linux" else
+        if stdenv.isDarwin then "mac" else throw "add your platform";
+      config = ''
+        BACKEND = mixer_sdl
+        COLOUR_DEPTH = 16
+        OSTYPE = ${platform}
+        VERBOSE = 1
+      '';
+      #TODO: MULTI_THREAD = 1 is "highly recommended",
+      # but it's roughly doubling CPU usage for me
+    in ''
+      echo "${config}" > config.default
+
+      # Use ~/.simutrans instead of ~/simutrans
+      substituteInPlace simsys.cc --replace '%s/simutrans' '%s/.simutrans'
+
+      # use -O2 optimization (defaults are -O or -O3)
+      sed -i -e '/CFLAGS += -O/d' Makefile
+      export CFLAGS+=-O2
+    '';
+
+    enableParallelBuilding = true;
+
+    installPhase = ''
+      mkdir -p $out/share/
+      mv simutrans $out/share/
+
+      mkdir -p $out/bin/
+      mv build/default/sim $out/bin/simutrans
+    '';
+
+    meta = with lib; {
+      description = "A simulation game in which the player strives to run a successful transport system";
+      longDescription = ''
+        Simutrans is a cross-platform simulation game in which the
+        player strives to run a successful transport system by
+        transporting goods, passengers, and mail between
+        places. Simutrans is an open source remake of Transport Tycoon.
+      '';
+
+      homepage = "http://www.simutrans.com/";
+      license = with licenses; [ artistic1 gpl1Plus ];
+      maintainers = with maintainers; [ ];
+      platforms = with platforms; linux; # TODO: ++ darwin;
+    };
+  };
+
+in result
diff --git a/nixpkgs/pkgs/games/sm64ex/coop.nix b/nixpkgs/pkgs/games/sm64ex/coop.nix
new file mode 100644
index 000000000000..742f41cea361
--- /dev/null
+++ b/nixpkgs/pkgs/games/sm64ex/coop.nix
@@ -0,0 +1,41 @@
+{ callPackage
+, fetchFromGitHub
+, autoPatchelfHook
+, zlib
+, stdenvNoCC
+}:
+
+callPackage ./generic.nix {
+  pname = "sm64ex-coop";
+  version = "unstable-2023-02-22";
+
+  src = fetchFromGitHub {
+    owner = "djoslin0";
+    repo = "sm64ex-coop";
+    rev = "8746a503086793c87860daadfaeaaf0a31b2d6cf";
+    sha256 = "sha256-iwJsq0FN9npxveIoMiB7zL5j1V72IExtEpzGj6lwLXQ=";
+  };
+
+  extraNativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  extraBuildInputs = [
+    zlib
+  ];
+
+  postInstall =
+    let
+      sharedLib = stdenvNoCC.hostPlatform.extensions.sharedLibrary;
+    in
+    ''
+      mkdir -p $out/lib
+      cp $src/lib/bass/libbass{,_fx}${sharedLib} $out/lib
+      cp $src/lib/discordsdk/libdiscord_game_sdk${sharedLib} $out/lib
+    '';
+
+  extraMeta = {
+    homepage = "https://github.com/djoslin0/sm64ex-coop";
+    description = "Super Mario 64 online co-op mod, forked from sm64ex";
+  };
+}
diff --git a/nixpkgs/pkgs/games/sm64ex/default.nix b/nixpkgs/pkgs/games/sm64ex/default.nix
new file mode 100644
index 000000000000..17fcfdd131ac
--- /dev/null
+++ b/nixpkgs/pkgs/games/sm64ex/default.nix
@@ -0,0 +1,9 @@
+{ callPackage
+, branch
+}:
+
+{
+  sm64ex = callPackage ./sm64ex.nix { };
+
+  sm64ex-coop = callPackage ./coop.nix { };
+}.${branch}
diff --git a/nixpkgs/pkgs/games/sm64ex/generic.nix b/nixpkgs/pkgs/games/sm64ex/generic.nix
new file mode 100644
index 000000000000..95ba3be4a569
--- /dev/null
+++ b/nixpkgs/pkgs/games/sm64ex/generic.nix
@@ -0,0 +1,84 @@
+{ pname
+, version
+, src
+, extraNativeBuildInputs ? [ ]
+, extraBuildInputs ? [ ]
+, extraMeta ? { }
+, compileFlags ? [ ]
+, postInstall ? ""
+, region ? "us"
+
+, lib
+, stdenv
+, fetchFromGitHub
+, python3
+, pkg-config
+, audiofile
+, SDL2
+, hexdump
+, requireFile
+, baseRom ? requireFile {
+    name = "baserom.${region}.z64";
+    message = ''
+      This nix expression requires that baserom.${region}.z64 is
+      already part of the store. To get this file you can dump your Super Mario 64 cartridge's contents
+      and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
+      Note that if you are not using a US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
+    '';
+    sha256 = {
+      "us" = "17ce077343c6133f8c9f2d6d6d9a4ab62c8cd2aa57c40aea1f490b4c8bb21d91";
+      "eu" = "c792e5ebcba34c8d98c0c44cf29747c8ee67e7b907fcc77887f9ff2523f80572";
+      "jp" = "9cf7a80db321b07a8d461fe536c02c87b7412433953891cdec9191bfad2db317";
+    }.${region};
+  }
+}:
+
+stdenv.mkDerivation rec {
+  inherit pname version src postInstall;
+
+  nativeBuildInputs = [
+    python3
+    pkg-config
+    hexdump
+  ] ++ extraNativeBuildInputs;
+
+  buildInputs = [
+    audiofile
+    SDL2
+  ] ++ extraBuildInputs;
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "VERSION=${region}"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "OSX_BUILD=1"
+  ] ++ compileFlags;
+
+  preBuild = ''
+    patchShebangs extract_assets.py
+    ln -s ${baseRom} ./baserom.${region}.z64
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp build/${region}_pc/sm64.${region}.f3dex2e $out/bin/sm64ex
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    longDescription =
+      extraMeta.description or "Super Mario 64 port based off of decompilation" + "\n" + ''
+        Note that you must supply a baserom yourself to extract assets from.
+        If you are not using an US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
+        If you would like to use patches sm64ex distributes as makeflags, add them to the "compileFlags" attribute.
+      '';
+    mainProgram = "sm64ex";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ ivar ];
+    platforms = platforms.unix;
+  } // extraMeta;
+}
diff --git a/nixpkgs/pkgs/games/sm64ex/sm64ex.nix b/nixpkgs/pkgs/games/sm64ex/sm64ex.nix
new file mode 100644
index 000000000000..ddac79697c6f
--- /dev/null
+++ b/nixpkgs/pkgs/games/sm64ex/sm64ex.nix
@@ -0,0 +1,21 @@
+{ callPackage
+, fetchFromGitHub
+}:
+
+callPackage ./generic.nix {
+  pname = "sm64ex";
+  version = "unstable-2022-12-19";
+
+  src = fetchFromGitHub {
+    owner = "sm64pc";
+    repo = "sm64ex";
+    rev = "afc7e8da695bdf1aea5400a0d5c8b188d16a2088";
+    sha256 = "sha256-TbA9yGPtP2uGsxN3eFaQwFeNjAjZ5hSk8Qmx1pRQxf8=";
+  };
+
+  extraMeta = {
+    homepage = "https://github.com/sm64pc/sm64ex";
+    description = "Super Mario 64 port based off of decompilation";
+  };
+}
+
diff --git a/nixpkgs/pkgs/games/snake4/default.nix b/nixpkgs/pkgs/games/snake4/default.nix
new file mode 100644
index 000000000000..aee8b9e0810c
--- /dev/null
+++ b/nixpkgs/pkgs/games/snake4/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, shhmsg, shhopt, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "snake4";
+  version = "1.0.14";
+
+  src = fetchurl {
+    url = "https://shh.thathost.com/pub-unix/files/snake4-${version}.tar.gz";
+    sha256 = "14cng9l857np42zixp440mbc8y5675frb6lhsds53j1cws9cncw9";
+  };
+
+  buildInputs = with xorg; [ shhmsg shhopt libX11 libXt libXpm libXaw libXext ];
+
+  preInstall = ''
+    substituteInPlace Makefile \
+      --replace "-o \$(OWNER) -g \$(GROUP)" "" \
+      --replace "4755" "755"
+  '';
+
+  installFlags = [ "INSTLIBDIR=$(out)/lib"
+                   "INSTBINDIR=$(out)/bin"
+                   "INSTMANDIR=$(out)/man" ];
+
+  meta = with lib; {
+    description = "A game starring a fruit-eating snake";
+    homepage = "https://shh.thathost.com/pub-unix/html/snake4.html";
+    license = licenses.artistic1;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/snekim/default.nix b/nixpkgs/pkgs/games/snekim/default.nix
new file mode 100644
index 000000000000..524f03252250
--- /dev/null
+++ b/nixpkgs/pkgs/games/snekim/default.nix
@@ -0,0 +1,34 @@
+{ lib, nimPackages, fetchFromGitea, raylib }:
+
+nimPackages.buildNimPackage rec {
+  pname = "snekim";
+  version = "1.2.0";
+
+  nimBinOnly = true;
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = "snekim";
+    rev = "v${version}";
+    sha256 = "sha256-Qgvq4CkGvNppYFpITCCifOHtVQYRQJPEK3rTJXQkTvI=";
+  };
+
+  strictDeps = true;
+
+  buildInputs = [ nimPackages.nimraylib-now raylib ];
+
+  nimFlags = [ "-d:nimraylib_now_shared" ];
+
+  postInstall = ''
+    install -D snekim.desktop -t $out/share/applications
+    install -D icons/hicolor/48x48/snekim.svg -t $out/share/icons/hicolor/48x48/apps
+  '';
+
+  meta = with lib; {
+    homepage = "https://codeberg.org/annaaurora/snekim";
+    description = "A simple implementation of the classic snake game";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/snipes/default.nix b/nixpkgs/pkgs/games/snipes/default.nix
new file mode 100644
index 000000000000..01b24ee434c3
--- /dev/null
+++ b/nixpkgs/pkgs/games/snipes/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, SDL2, SDL2_ttf }:
+
+let
+  font = fetchurl {
+    url    = "http://kingbird.myphotos.cc/ee22d44076adb8a34d8e20df4be3730a/SnipesConsole.ttf";
+    sha256 = "06n8gq18js0bv4svx84ljzhs9zmi81wy0zqcqj3b4g0rsrkr20a7";
+  };
+
+in stdenv.mkDerivation {
+  pname = "snipes";
+  version = "20180930";
+
+  src = fetchFromGitHub {
+    owner  = "Davidebyzero";
+    repo   = "Snipes";
+    rev    = "594af45108e07aa4159c3babc9b5e53609c3fd6e";
+    sha256 = "0gmh38swm74jmljy0bq27ipqzb4h8y9rzwc1j6harbd9qqz5knac";
+  };
+
+  postPatch = ''
+    substitute config-sample.h config.h \
+      --replace SnipesConsole.ttf $out/share/snipes/SnipesConsole.ttf
+    substituteInPlace GNUmakefile \
+      --replace 'CFLAGS=-Werror -Wall' 'CFLAGS=-Wall'
+  '';
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ SDL2 SDL2_ttf ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin snipes
+    install -Dm644 -t $out/share/doc/snipes *.md
+    install -Dm644 ${font} $out/share/snipes/SnipesConsole.ttf
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Modern port of the classic 1982 text-mode game Snipes";
+    homepage    = "https://www.vogons.org/viewtopic.php?f=7&t=49073";
+    license     = licenses.free; # This reverse-engineered source code is released with the original authors' permission.
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/snis/default.nix b/nixpkgs/pkgs/games/snis/default.nix
new file mode 100644
index 000000000000..b74fef451820
--- /dev/null
+++ b/nixpkgs/pkgs/games/snis/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, coreutils
+, portaudio
+, libbsd
+, libpng
+, libvorbis
+, SDL2
+, makeWrapper
+, lua5_2
+, glew
+, openssl
+, picotts
+, alsa-utils
+, espeak-classic
+, sox
+, libopus
+, openscad
+, libxcrypt
+}:
+
+stdenv.mkDerivation {
+  pname = "snis_launcher";
+  version = "unstable-2021-10-17";
+
+  src = fetchFromGitHub {
+    owner = "smcameron";
+    repo = "space-nerds-in-space";
+    rev = "e70d3c63e33c940feb53c8d818ce2d8ea2aadf00";
+    sha256 = "sha256-HVCb1iFn7GWNpedtFCgLyd0It8s4PEmUwDfb8ap1TDc=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "OPUSARCHIVE=libopus.a" "OPUSARCHIVE=" \
+      --replace "-I./opus-1.3.1/include" "-I${libopus.dev}/include/opus"
+    substituteInPlace snis_launcher \
+      --replace "PREFIX=." "PREFIX=$out"
+    substituteInPlace snis_text_to_speech.sh \
+      --replace "pico2wave" "${sox}/bin/pico2wave" \
+      --replace "espeak" "${espeak-classic}/bin/espeak" \
+      --replace "play" "${sox}/bin/play" \
+      --replace "aplay" "${alsa-utils}/bin/aplay" \
+      --replace "/bin/rm" "${coreutils}/bin/rm"
+  '';
+
+  nativeBuildInputs = [ pkg-config openscad makeWrapper ];
+  buildInputs = [ coreutils portaudio libbsd libpng libvorbis SDL2 lua5_2 glew openssl picotts sox alsa-utils libopus libxcrypt ];
+
+  postBuild = ''
+    make models -j$NIX_BUILD_CORES
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out
+    cp -R share $out/share
+    cp -R bin $out/bin
+    cp snis_launcher $out/bin/
+    # without this, snis_client crashes on Wayland
+    wrapProgram $out/bin/snis_client --set SDL_VIDEODRIVER x11
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Space Nerds In Space, a multi-player spaceship bridge simulator";
+    homepage = "https://smcameron.github.io/space-nerds-in-space/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ alyaeanyx ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/soi/default.nix b/nixpkgs/pkgs/games/soi/default.nix
new file mode 100644
index 000000000000..eb214752df84
--- /dev/null
+++ b/nixpkgs/pkgs/games/soi/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, cmake
+, boost, eigen2, lua, luabind, libGLU, libGL, SDL }:
+
+stdenv.mkDerivation rec {
+  pname = "soi";
+  version = "0.1.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/soi/Spheres%20of%20Influence-${version}-Source.tar.bz2";
+    name = "${pname}-${version}.tar.bz2";
+    sha256 = "03c3wnvhd42qh8mi68lybf8nv6wzlm1nx16d6pdcn2jzgx1j2lzd";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost lua luabind libGLU libGL SDL ];
+
+  cmakeFlags = [
+    "-DEIGEN_INCLUDE_DIR=${eigen2}/include/eigen2"
+    "-DLUABIND_LIBRARY=${luabind}/lib/libluabind09.a"
+  ];
+
+  meta = with lib; {
+    description = "A physics-based puzzle game";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = licenses.free;
+    downloadPage = "https://sourceforge.net/projects/soi/files/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/solarus/default.nix b/nixpkgs/pkgs/games/solarus/default.nix
new file mode 100644
index 000000000000..0e95a77a7cd4
--- /dev/null
+++ b/nixpkgs/pkgs/games/solarus/default.nix
@@ -0,0 +1,42 @@
+{ lib, mkDerivation, fetchFromGitLab, cmake, luajit
+,  SDL2, SDL2_image, SDL2_ttf, physfs, glm
+, openal, libmodplug, libvorbis
+, qtbase, qttools }:
+
+mkDerivation rec {
+  pname = "solarus";
+  version = "1.6.4";
+
+  src = fetchFromGitLab {
+    owner = "solarus-games";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sbdlf+R9OskDQ5U5rqUX2gF8l/fj0sDJv6BL7H1I1Ng=";
+  };
+
+  outputs = [ "out" "lib" "dev" ];
+
+  nativeBuildInputs = [ cmake qttools ];
+  buildInputs = [ luajit SDL2
+    SDL2_image SDL2_ttf physfs
+    openal libmodplug libvorbis
+    qtbase glm ];
+
+  preFixup = ''
+    mkdir $lib/
+    mv $out/lib $lib
+  '';
+
+  meta = with lib; {
+    description = "A Zelda-like ARPG game engine";
+    longDescription = ''
+      Solarus is a game engine for Zelda-like ARPG games written in lua.
+      Many full-fledged games have been writen for the engine.
+    '';
+    homepage = "https://www.solarus-games.org";
+    license = licenses.gpl3;
+    maintainers = [ ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/solicurses/default.nix b/nixpkgs/pkgs/games/solicurses/default.nix
new file mode 100644
index 000000000000..3b0a60cb1e81
--- /dev/null
+++ b/nixpkgs/pkgs/games/solicurses/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, ncurses
+}:
+
+stdenv.mkDerivation {
+  pname = "solicurses";
+  version = "unstable-2020-02-13";
+
+  src = fetchFromGitHub {
+    owner = "KaylaPP";
+    repo = "SoliCurses";
+    rev = "dc89ca00fc1711dc449d0a594a4727af22fc35a0";
+    sha256 = "sha256-zWYXpvEnViT/8gsdMU9Ymi4Hw+nwkG6FT/3h5sNMCE4=";
+  };
+
+  buildInputs = [
+    ncurses
+  ];
+
+  preBuild = ''
+    cd build
+  '';
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}c++"
+  ];
+
+  installPhase = ''
+    install -D SoliCurses.out $out/bin/solicurses
+  '';
+
+  meta = with lib; {
+    description = "A version of Solitaire written in C++ using the ncurses library";
+    homepage = "https://github.com/KaylaPP/SoliCurses";
+    maintainers = with maintainers; [ laalsaas ];
+    license = licenses.gpl3Only;
+    inherit (ncurses.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/games/space-cadet-pinball/default.nix b/nixpkgs/pkgs/games/space-cadet-pinball/default.nix
new file mode 100644
index 000000000000..3957bf4fc1bc
--- /dev/null
+++ b/nixpkgs/pkgs/games/space-cadet-pinball/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv, fetchFromGitHub, fetchzip
+, cmake, SDL2, SDL2_mixer, Cocoa
+, unrar-wrapper, makeWrapper
+, fetchpatch
+}:
+
+let
+  assets = (fetchzip {
+    url = "https://archive.org/download/SpaceCadet_Plus95/Space_Cadet.rar";
+    sha256 = "sha256-fC+zsR8BY6vXpUkVd6i1jF0IZZxVKVvNi6VWCKT+pA4=";
+    stripRoot = false;
+  }).overrideAttrs (old: {
+    nativeBuildInputs = old.nativeBuildInputs ++ [ unrar-wrapper ];
+  });
+in
+stdenv.mkDerivation rec {
+  pname = "SpaceCadetPinball";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "k4zmu2a";
+    repo = pname;
+    rev = "Release_${version}";
+    sha256 = "sha256-LmYplJr1Mg4yNg9eP02FXf9mL1FnzNBhpted3GpmlQ0=";
+  };
+
+  patches = [
+    # remove when updating past 2.0.1
+    (fetchpatch {
+      name = "fix-install-directories";
+      url = "https://github.com/k4zmu2a/SpaceCadetPinball/commit/d8ee1b9bfeee21d3981a40e735411393392bc1f6.patch";
+      sha256 = "sha256-BtCDJ+a9AFaOM8nyId0eU9GN/gUQT2kFCO4RIVTzZlE=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+  buildInputs = [
+    SDL2
+    SDL2_mixer
+  ] ++ lib.optional stdenv.isDarwin Cocoa;
+
+  # Darwin needs a custom installphase since it is excluded from the cmake install
+  # https://github.com/k4zmu2a/SpaceCadetPinball/blob/0f88e43ba261bc21fa5c3ef9d44969a2a079d0de/CMakeLists.txt#L221
+  installPhase = lib.optionalString stdenv.isDarwin ''
+    runHook preInstall
+    mkdir -p $out/bin
+    install ../bin/SpaceCadetPinball $out/bin
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    mkdir -p $out/lib/SpaceCadetPinball
+    install ${assets}/*.{DAT,DOC,MID,BMP,INF} ${assets}/Sounds/*.WAV $out/lib/SpaceCadetPinball
+
+    # Assets are loaded from the directory of the program is stored in
+    # https://github.com/k4zmu2a/SpaceCadetPinball/blob/de13d4e326b2dfa8e6dfb59815c0a8b9657f942d/SpaceCadetPinball/winmain.cpp#L119
+    mv $out/bin/SpaceCadetPinball $out/lib/SpaceCadetPinball
+    makeWrapper $out/lib/SpaceCadetPinball/SpaceCadetPinball $out/bin/SpaceCadetPinball
+  '';
+
+  meta = with lib; {
+    description = "Reverse engineering of 3D Pinball for Windows – Space Cadet, a game bundled with Windows";
+    homepage = "https://github.com/k4zmu2a/SpaceCadetPinball";
+    # The assets are unfree while the code is labeled as MIT
+    license = with licenses; [ unfree mit ];
+    maintainers = [ maintainers.hqurve ];
+    platforms = platforms.all;
+    mainProgram = "SpaceCadetPinball";
+  };
+}
diff --git a/nixpkgs/pkgs/games/space-orbit/default.nix b/nixpkgs/pkgs/games/space-orbit/default.nix
new file mode 100644
index 000000000000..7e51d7a4b290
--- /dev/null
+++ b/nixpkgs/pkgs/games/space-orbit/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl
+, libGLU, libGL, libXi, libXt, libXext, libX11, libXmu, freeglut
+}:
+
+stdenv.mkDerivation rec {
+  pname = "space-orbit";
+  version = "1.01";
+  patchversion = "9";
+
+  buildInputs = [ libGLU libGL libXi libXt libXext libX11 libXmu freeglut ];
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/s/space-orbit/space-orbit_${version}.orig.tar.gz";
+    sha256 = "1kx69f9jqnfzwjh47cl1df8p8hn3bnp6bznxnb6c4wx32ijn5gri";
+  };
+
+  patches = [
+    (fetchurl {
+       url = "mirror://debian/pool/main/s/space-orbit/space-orbit_${version}-${patchversion}.diff.gz";
+       sha256 = "1v3s97day6fhv08l2rn81waiprhi1lfyjjsj55axfh6n6zqfn1w2";
+     })
+  ];
+
+  preBuild = ''
+    cd src
+    sed -e 's@/usr/share/games/orbit/@'$out'/dump/@g' -i *.c
+    sed -e '/DIR=/d; s/-lesd//; s/-DESD//;' -i Makefile
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r .. $out/dump
+    cat >$out/bin/space-orbit <<EOF
+#! ${stdenv.shell}
+exec $out/dump/orbit "\$@"
+EOF
+    chmod a+x $out/bin/space-orbit
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A space combat simulator";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/space-station-14-launcher/default.nix b/nixpkgs/pkgs/games/space-station-14-launcher/default.nix
new file mode 100644
index 000000000000..606f0659c788
--- /dev/null
+++ b/nixpkgs/pkgs/games/space-station-14-launcher/default.nix
@@ -0,0 +1,40 @@
+{ soundfont-fluid
+, buildFHSEnv
+, runCommand
+, callPackage
+}:
+
+let
+  space-station-14-launcher = callPackage ./space-station-14-launcher.nix { };
+
+  # Workaround for hardcoded soundfont paths in downloaded engine assemblies.
+  soundfont-fluid-fixed = runCommand "soundfont-fluid-fixed" { } ''
+    mkdir -p "$out/share/soundfonts"
+    ln -sf ${soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2 $out/share/soundfonts/FluidR3_GM.sf2
+  '';
+in
+buildFHSEnv rec {
+  name = "space-station-14-launcher-wrapped";
+
+  targetPkgs = pkgs: [
+    space-station-14-launcher
+    soundfont-fluid-fixed
+  ];
+
+  runScript = "SS14.Launcher";
+
+  extraInstallCommands = ''
+    mkdir -p $out/share/applications
+    ln -s ${space-station-14-launcher}/share/icons $out/share
+    cp ${space-station-14-launcher}/share/applications/space-station-14-launcher.desktop "$out/share/applications"
+    substituteInPlace "$out/share/applications/space-station-14-launcher.desktop" \
+        --replace ${space-station-14-launcher.meta.mainProgram} ${meta.mainProgram}
+  '';
+
+  passthru = space-station-14-launcher.passthru // {
+    unwrapped = space-station-14-launcher;
+  };
+  meta = space-station-14-launcher.meta // {
+    mainProgram = name;
+  };
+}
diff --git a/nixpkgs/pkgs/games/space-station-14-launcher/deps.nix b/nixpkgs/pkgs/games/space-station-14-launcher/deps.nix
new file mode 100644
index 000000000000..5e3fdfec2bc2
--- /dev/null
+++ b/nixpkgs/pkgs/games/space-station-14-launcher/deps.nix
@@ -0,0 +1,143 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Avalonia"; version = "0.10.19"; sha256 = "1yzrbp0b6kv9h9d4kl96ldr6ln40xj1j2yvbvpm0pgv7ajwr7qhc"; })
+  (fetchNuGet { pname = "Avalonia.Angle.Windows.Natives"; version = "2.1.0.2020091801"; sha256 = "04jm83cz7vkhhr6n2c9hya2k8i2462xbf6np4bidk55as0jdq43a"; })
+  (fetchNuGet { pname = "Avalonia.Controls.DataGrid"; version = "0.10.19"; sha256 = "0wlmr4dlz8x3madm7xwhmsf0kgdnwcy6n7zvfd9x6h0bllii1lbn"; })
+  (fetchNuGet { pname = "Avalonia.Desktop"; version = "0.10.19"; sha256 = "0vghwp1wx6l1z0dlvd9aqdaikz6k34q0i9yzaphqlzjp6ms2g2ny"; })
+  (fetchNuGet { pname = "Avalonia.Diagnostics"; version = "0.10.19"; sha256 = "1zlcp8mwn2nscrdsvxlspny22m054gsva9az27pvk7s2s5mrqgfk"; })
+  (fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "0.10.19"; sha256 = "01fin1w9nwa3c9kpvbri26x1r4g59hmayx9r5hxwbhq7s7vm5ghr"; })
+  (fetchNuGet { pname = "Avalonia.Native"; version = "0.10.19"; sha256 = "0c9rw2wckyx9h5yfhm0af5zbs53n9bnhv0mlshl7mn0p92v1wfl3"; })
+  (fetchNuGet { pname = "Avalonia.ReactiveUI"; version = "0.10.19"; sha256 = "0kx4qka2rdmlp54qyn04hh79qc5w796gv3ryv24n82hpplzksqi9"; })
+  (fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "0.10.19"; sha256 = "0klk9hqas0h3d3lmr0di175nw2kwq5br1xpprkb4y4m83r5lfy0s"; })
+  (fetchNuGet { pname = "Avalonia.Skia"; version = "0.10.19"; sha256 = "16cl9ssmyif2a25fq9kvxs2vr83j589yns53zkfr3wmggl9n6lf2"; })
+  (fetchNuGet { pname = "Avalonia.Win32"; version = "0.10.19"; sha256 = "1pd3jmrdc738j7b4d8rzaj7fxrfq1m2pl3i62z2ym3h0sxl51xy2"; })
+  (fetchNuGet { pname = "Avalonia.X11"; version = "0.10.19"; sha256 = "1h71w73r7r9ci059qwsjqnhp60l8sfd3i3xsw37qfnbhslcna6hh"; })
+  (fetchNuGet { pname = "CodeHollow.FeedReader"; version = "1.2.6"; sha256 = "1ac98diww07cfs3cv142nlwzi9w3n2s5w7m60mkc0rpzg0vpq3mv"; })
+  (fetchNuGet { pname = "Dapper"; version = "2.0.123"; sha256 = "15hxrchfgiqnmgf8fqhrf4pb4c8l9igg5qnkw9yk3rkagcqfkk91"; })
+  (fetchNuGet { pname = "DynamicData"; version = "7.13.1"; sha256 = "0hy2ba2nkhgp23glkinhfx3v892fkkf4cr9m41daaahnl2r2l8y1"; })
+  (fetchNuGet { pname = "Fody"; version = "6.6.4"; sha256 = "1hhdwj0ska7dvak9hki8cnyfmmw5r8yw8w24gzsdwhqx68dnrvsx"; })
+  (fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2.1-preview.108"; sha256 = "0xs4px4fy5b6glc77rqswzpi5ddhxvbar1md6q9wla7hckabnq0z"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Linux"; version = "2.8.2.1-preview.108"; sha256 = "16wvgvyra2g1b38rxxgkk85wbz89hspixs54zfcm4racgmj1mrj4"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2.1-preview.108"; sha256 = "16v7lrwwif2f5zfkx08n6y6w3m56mh4hy757biv0w9yffaf200js"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "2.8.2.1-preview.108"; sha256 = "15kqb353snwpavz3jja63mq8xjqsrw1f902scm8wxmsqrm5q6x55"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2.1-preview.108"; sha256 = "0n6ymn9jqms3mk5hg0ar4y9jmh96myl6q0jimn7ahb1a8viq55k1"; })
+  (fetchNuGet { pname = "JetBrains.Annotations"; version = "10.3.0"; sha256 = "1grdx28ga9fp4hwwpwv354rizm8anfq4lp045q4ss41gvhggr3z8"; })
+  (fetchNuGet { pname = "libsodium"; version = "1.0.18.2"; sha256 = "02xd4phd6wfixhdq48ma92c166absqw41vdq5kvjch8p0vc9cdl2"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "2.9.6"; sha256 = "18mr1f0wpq0fir8vjnq0a8pz50zpnblr7sabff0yqx37c975934a"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.4.0"; sha256 = "12rn6gl4viycwk3pz5hp5df63g66zvba4hnkwr3f0876jj5ivmsw"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.4.0"; sha256 = "0rhylcwa95bxawcgixk64knv7p7xrykdjcabmx3gknk8hvj1ai9y"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "3.4.0"; sha256 = "1h2f0z9xnw987x8bydka1sd42ijqjx973md6v1gvpy1qc6ad244g"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "3.4.0"; sha256 = "195gqnpwqkg2wlvk8x6yzm7byrxfq9bki20xmhf6lzfsdw3z4mf2"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb"; })
+  (fetchNuGet { pname = "Microsoft.Data.Sqlite"; version = "7.0.4"; sha256 = "0lsbzwqiwqv2qq6858aphq7rsp6fs3i0di132w7c0r2r081szql9"; })
+  (fetchNuGet { pname = "Microsoft.Data.Sqlite.Core"; version = "7.0.4"; sha256 = "0mhfj8bj8dlc01y20ihq6j9r59f67cry6yd6qi6rg9zh93m43jpv"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.0.0"; sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.Toolkit.Mvvm"; version = "7.1.2"; sha256 = "0hrlgjr41hlpp3hb697i0513x2cm4ysbl0wj4bj67md604cmkv14"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "4.5.0"; sha256 = "0fnkv3ky12227zqg4zshx4kw2mvysq2ppxjibfw02cc3iprv4njq"; })
+  (fetchNuGet { pname = "Mono.Posix.NETStandard"; version = "1.0.0"; sha256 = "0xlja36hwpjm837haq15mjh2prcf68lyrmn72nvgpz8qnf9vappw"; })
+  (fetchNuGet { pname = "NSec.Cryptography"; version = "22.4.0"; sha256 = "0v89wyvl58ia8r74wn3shajs1ia0rgx1p60nlr87g7ys6lq7ql2d"; })
+  (fetchNuGet { pname = "ReactiveUI"; version = "18.4.26"; sha256 = "0xhj4vk64smjfw7sr2gqxvradqbgky6jgfryq8q85h1hz10r7xaa"; })
+  (fetchNuGet { pname = "ReactiveUI.Fody"; version = "18.4.26"; sha256 = "0i79ajjmibg10cardpq9qh5wy1b4ngvb2v33fr4c5pf1y65xzhmr"; })
+  (fetchNuGet { pname = "Robust.Natives"; version = "0.1.1"; sha256 = "1spfaxk8nsx368zncdcj0b3kg7gj7h14mjji19xrraf8ij0dnczw"; })
+  (fetchNuGet { pname = "Robust.Natives.Angle"; version = "0.1.1-chromium4758"; sha256 = "0awydljd6psr0w661p9q73pg2aa29lfb4i0arkpszl0ra33mhrah"; })
+  (fetchNuGet { pname = "Robust.Natives.Fluidsynth"; version = "0.1.0"; sha256 = "00nkww5sjixs1dmn979niq0hrhplcpabrp18bmpm240wl53ay72x"; })
+  (fetchNuGet { pname = "Robust.Natives.Freetype"; version = "0.1.0"; sha256 = "0skrj5bj5vlxvmp8wg8ar8n393w1vv1bs64hwas7svxf2adwgrw2"; })
+  (fetchNuGet { pname = "Robust.Natives.Glfw"; version = "0.1.0"; sha256 = "0xfak1d76jmr4ajfzclarna0x1c19xf4c3zfzhjn4vqmkk1znck0"; })
+  (fetchNuGet { pname = "Robust.Natives.OpenAL"; version = "0.1.0"; sha256 = "06waksj5rmc50xas4a2nmlj8v01kpwh5k367pcq2yjn0ld22klnx"; })
+  (fetchNuGet { pname = "Robust.Natives.Swnfd"; version = "0.1.0"; sha256 = "1ssnl6zasf2cdaffib4pzyfd1w962y1zmcsivyalgpsh6p4g9as1"; })
+  (fetchNuGet { pname = "Robust.Shared.AuthLib"; version = "0.1.2"; sha256 = "1vn19d81n8jdyy75ryrlajyxr0kp7pwjdlbyqcn8gcid5plrzmh0"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "Serilog"; version = "2.12.0"; sha256 = "0lqxpc96qcjkv9pr1rln7mi4y7n7jdi4vb36c2fv3845w1vswgr4"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "4.1.0"; sha256 = "1rpkphmqfh3bv3m7v1zwz88wz4sirj4xqyff9ga0c6bqhblj6wii"; })
+  (fetchNuGet { pname = "Serilog.Sinks.File"; version = "5.0.0"; sha256 = "097rngmgcrdfy7jy8j7dq3xaq2qky8ijwg0ws6bfv5lx0f3vvb0q"; })
+  (fetchNuGet { pname = "SharpZstd.Interop"; version = "1.5.2-beta2"; sha256 = "1145jlprsgll8ixwib0i8phc6jsv6nm4yki4wi1bkxx2bgf9yjay"; })
+  (fetchNuGet { pname = "SkiaSharp"; version = "2.88.1-preview.108"; sha256 = "01sm36hdgmcgkai9m09xn2qfz8v7xhh803n8fng8rlxwnw60rgg6"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.1-preview.108"; sha256 = "19jf2jcq2spwbpx3cfdi2a95jf4y8205rh56lmkh8zsxd2k7fjyp"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.1-preview.108"; sha256 = "1vcpqd7slh2b9gsacpd7mk1266r1xfnkm6230k8chl3ng19qlf15"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.1-preview.108"; sha256 = "0a89gqjw8k97arr0kyd0fm3f46k1qamksbnyns9xdlgydjg557dd"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.1-preview.108"; sha256 = "05g9blprq5msw3wshrgsk19y0fvhjlqiybs1vdyhfmww330jlypn"; })
+  (fetchNuGet { pname = "SpaceWizards.Sodium"; version = "0.2.1"; sha256 = "059slmfg8diivd7hv53cp24vvrzfviqp6fyg8135azynyxk787fp"; })
+  (fetchNuGet { pname = "SpaceWizards.Sodium.Interop"; version = "1.0.18-beta4"; sha256 = "1w59i27z2xdvdflfbnq2braas5f4gpkq9m1xcmc1961hm97z1wvn"; })
+  (fetchNuGet { pname = "Splat"; version = "14.6.8"; sha256 = "1nj0bsqcr93n8jdyb1all8l35gydlgih67kr7cs1bc12l18fwx2w"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.bundle_e_sqlite3"; version = "2.1.4"; sha256 = "0shdspl9cm71wwqg9103s44r0l01r3sgnpxr523y4a0wlgac50g0"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.core"; version = "2.1.4"; sha256 = "09akxz92qipr1cj8mk2hw99i0b81wwbwx26gpk21471zh543f8ld"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.lib.e_sqlite3"; version = "2.1.4"; sha256 = "11l85ksv1ck46j8z08fyf0c3l572zmp9ynb7p5chm5iyrh8xwkkn"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.provider.e_sqlite3"; version = "2.1.4"; sha256 = "0b8f51nrjkq0pmfzjaqk5rp7r0cp2lbdm2whynj3xsjklppzmn35"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.5.0"; sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "4.5.0"; sha256 = "0knqa0zsm91nfr34br8gx5kjqq4v81zdhqkacvs2hzc8nqk0ddhc"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.6.0"; sha256 = "0xmzi2gpbmgyfr75p24rqqsba3cmrqgmcv45lsqp5amgrdwd0f0m"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.7.0"; sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.3"; sha256 = "0g7r6hm572ax8v28axrdxz1gnsblg6kszq17g51pj14a5rn2af7i"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; })
+  (fetchNuGet { pname = "TerraFX.Interop.Windows"; version = "10.0.22621.1"; sha256 = "0qbiaczssgd28f1kb1zz1g0fqsizv36qr2lbjmdrd1lfsyp2a2nj"; })
+  (fetchNuGet { pname = "Tmds.DBus"; version = "0.9.0"; sha256 = "0vvx6sg8lxm23g5jvm5wh2gfs95mv85vd52lkq7d1b89bdczczf3"; })
+  (fetchNuGet { pname = "XamlNameReferenceGenerator"; version = "1.6.1"; sha256 = "0348gj9g5rl0pj2frx4vscj6602gfyn9ba3i1rmfcrxh9jwwa09m"; })
+  (fetchNuGet { pname = "YamlDotNet"; version = "13.0.2"; sha256 = "031pvc6idvjyrn1bfdn8zaljrndp5ch7fkcn82f06332gqs3n8k8"; })
+]
diff --git a/nixpkgs/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix b/nixpkgs/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix
new file mode 100644
index 000000000000..9d598798defe
--- /dev/null
+++ b/nixpkgs/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix
@@ -0,0 +1,143 @@
+{ lib
+, buildDotnetModule
+, dotnetCorePackages
+, fetchFromGitHub
+, wrapGAppsHook
+, iconConvTools
+, copyDesktopItems
+, makeDesktopItem
+, libX11
+, libICE
+, libSM
+, libXi
+, libXcursor
+, libXext
+, libXrandr
+, fontconfig
+, glew
+, SDL2
+, glfw
+, glibc
+, libGL
+, freetype
+, openal
+, fluidsynth
+, gtk3
+, pango
+, atk
+, cairo
+, zlib
+, glib
+, gdk-pixbuf
+}:
+let
+  version = "0.22.1";
+  pname = "space-station-14-launcher";
+in
+buildDotnetModule rec {
+  inherit pname;
+
+  # Workaround to prevent buildDotnetModule from overriding assembly versions.
+  name = "${pname}-${version}";
+
+  src = fetchFromGitHub {
+    owner = "space-wizards";
+    repo = "SS14.Launcher";
+    rev = "v${version}";
+    hash = "sha256-I+Kj8amgFxT6yEXI5s1y0n1rgfzIrLtMOkYjguu6wpo=";
+    fetchSubmodules = true;
+  };
+
+  buildType = "Release";
+  selfContainedBuild = false;
+
+  projectFile = [
+    "SS14.Loader/SS14.Loader.csproj"
+    "SS14.Launcher/SS14.Launcher.csproj"
+  ];
+
+  nugetDeps = ./deps.nix;
+
+  passthru = {
+    inherit version; # Workaround so update script works.
+    updateScript = ./update.sh;
+  };
+
+  dotnet-sdk = with dotnetCorePackages; combinePackages [ sdk_7_0 sdk_6_0 ];
+  dotnet-runtime = dotnetCorePackages.runtime_7_0;
+
+  dotnetFlags = [
+    "-p:FullRelease=true"
+    "-p:RobustILLink=true"
+    "-nologo"
+  ];
+
+  nativeBuildInputs = [ wrapGAppsHook iconConvTools copyDesktopItems ];
+
+  runtimeDeps = [
+    # Required by the game.
+    glfw
+    SDL2
+    glibc
+    libGL
+    openal
+    freetype
+    fluidsynth
+
+    # Needed for file dialogs.
+    gtk3
+    pango
+    cairo
+    atk
+    zlib
+    glib
+    gdk-pixbuf
+
+    # Avalonia UI dependencies.
+    libX11
+    libICE
+    libSM
+    libXi
+    libXcursor
+    libXext
+    libXrandr
+    fontconfig
+    glew
+  ];
+
+  executables = [ "SS14.Launcher" ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = meta.mainProgram;
+      icon = pname;
+      desktopName = "Space Station 14 Launcher";
+      comment = meta.description;
+      categories = [ "Game" ];
+      startupWMClass = meta.mainProgram;
+    })
+  ];
+
+  postInstall = ''
+    mkdir -p $out/lib/space-station-14-launcher/loader
+    cp -r SS14.Loader/bin/${buildType}/*/*/* $out/lib/space-station-14-launcher/loader/
+
+    icoFileToHiColorTheme SS14.Launcher/Assets/icon.ico space-station-14-launcher $out
+  '';
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Launcher for Space Station 14, a multiplayer game about paranoia and disaster";
+    homepage = "https://spacestation14.io";
+    license = licenses.mit;
+    maintainers = [ maintainers.zumorica ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "SS14.Launcher";
+  };
+}
diff --git a/nixpkgs/pkgs/games/space-station-14-launcher/update.sh b/nixpkgs/pkgs/games/space-station-14-launcher/update.sh
new file mode 100755
index 000000000000..6e8b337d3842
--- /dev/null
+++ b/nixpkgs/pkgs/games/space-station-14-launcher/update.sh
@@ -0,0 +1,16 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -I nixpkgs=./. -i bash -p curl jq common-updater-scripts
+set -eo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+new_version="$(curl -s "https://api.github.com/repos/space-wizards/SS14.Launcher/releases?per_page=1" | jq -r '.[0].tag_name' | sed 's/v//')"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./space-station-14-launcher.nix)"
+
+if [[ "$new_version" == "$old_version" ]]; then
+  echo "Already up to date!"
+  exit 0
+fi
+
+cd ../../..
+update-source-version space-station-14-launcher.unwrapped "$new_version"
+$(nix-build -A space-station-14-launcher.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/games/speed-dreams/default.nix b/nixpkgs/pkgs/games/speed-dreams/default.nix
new file mode 100644
index 000000000000..a44c3d670558
--- /dev/null
+++ b/nixpkgs/pkgs/games/speed-dreams/default.nix
@@ -0,0 +1,76 @@
+{ fetchurl, lib, stdenv, libGLU, libGL, freeglut, libX11, plib, openal, freealut, libXrandr, xorgproto,
+libXext, libSM, libICE, libXi, libXt, libXrender, libXxf86vm, openscenegraph, expat,
+libpng, zlib, bash, SDL2, enet, libjpeg, cmake, pkg-config, libvorbis, runtimeShell, curl }:
+
+let
+  version = "2.2.3-r7616";
+  shortVersion = builtins.substring 0 5 version;
+in
+stdenv.mkDerivation rec {
+  inherit version;
+  pname = "speed-dreams";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/speed-dreams/${shortVersion}/speed-dreams-src-base-${version}.tar.xz";
+    sha256 = "sha256-GvB8SDZB9UivJSsQfMMon9N5MURdxTOwsaN4F0XQUCE=";
+  };
+
+  cars-and-tracks = fetchurl {
+    url = "mirror://sourceforge/speed-dreams/${shortVersion}/speed-dreams-src-hq-cars-and-tracks-${version}.tar.xz";
+    sha256 = "sha256-BuryCUvBD7rKmApCNsTkRN0UJ1q6P3sdYrSzpTqdTHc=";
+  };
+
+  more-cars-and-tracks = fetchurl {
+    url = "mirror://sourceforge/speed-dreams/${shortVersion}/speed-dreams-src-more-hq-cars-and-tracks-${version}.tar.xz";
+    sha256 = "sha256-GSCHYbJS352yAMczzss7tYSQXwLQV68rv/XkyGy+GoY=";
+  };
+
+  wip-cars-and-tracks = fetchurl {
+    url = "mirror://sourceforge/speed-dreams/${shortVersion}/speed-dreams-src-wip-cars-and-tracks-${version}.tar.xz";
+    sha256 = "sha256-r/IOSf+UZg2e+WIHn2QNDO6qQUhpIJvh7EF2jQ7lyyA=";
+  };
+
+  sourceRoot = ".";
+
+  postUnpack = ''
+    echo Unpacking data
+    tar -xf ${cars-and-tracks}
+    tar -xf ${more-cars-and-tracks}
+    tar -xf ${wip-cars-and-tracks}
+  '';
+
+  preBuild = ''
+    make -C src/libs/portability
+    make -C src/libs/portability portability.o
+    ar -rv "$(echo lib*/games/speed-dreams*/lib)"/libportability_static.a src/libs/portability/CMakeFiles/portability.dir/portability.cpp.o
+    export NIX_LDFLAGS="$NIX_LDFLAGS -L$(echo $PWD/lib*/games/speed-dreams*/lib) -lexpat"
+    echo "libportability_static.a built"
+  '';
+
+  postInstall = ''
+    mkdir "$out/bin"
+    for i in "$out"/games/*; do
+      echo '#!${runtimeShell}' >> "$out/bin/$(basename "$i")"
+      echo "$i"' "$@"' >> "$out/bin/$(basename "$i")"
+      chmod a+x "$out/bin/$(basename "$i")"
+    done
+  '';
+
+  # RPATH of binary /nix/store/.../lib64/games/speed-dreams-2/drivers/shadow_sc/shadow_sc.so contains a forbidden reference to /build/
+  cmakeFlags = [ "-DCMAKE_SKIP_BUILD_RPATH=ON" ];
+
+  nativeBuildInputs = [ pkg-config cmake ];
+
+  buildInputs = [ libpng libGLU libGL freeglut libX11 plib openal freealut libXrandr xorgproto
+    libXext libSM libICE libXi libXt libXrender libXxf86vm zlib bash expat
+    SDL2 enet libjpeg openscenegraph libvorbis curl ];
+
+  meta = {
+    description = "Car racing game - TORCS fork with more experimental approach";
+    homepage = "https://speed-dreams.sourceforge.net/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [raskin];
+    platforms = lib.platforms.linux;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/spring/default.nix b/nixpkgs/pkgs/games/spring/default.nix
new file mode 100644
index 000000000000..0a2eb6cfc911
--- /dev/null
+++ b/nixpkgs/pkgs/games/spring/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, stdenv
+, asciidoc
+, boost
+, cmake
+, curl
+, docbook_xsl
+, docbook_xsl_ns
+, fetchurl
+, freetype
+, glew
+, jdk
+, libdevil
+, libGL
+, libGLU
+, libunwind
+, libvorbis
+, makeWrapper
+, minizip
+, openal
+, p7zip
+, python3
+, SDL2
+, xorg
+, xz
+, zlib
+, withAI ? true # support for AI Interfaces and Skirmish AIs
+}:
+
+stdenv.mkDerivation rec {
+  pname = "spring";
+  version = "106.0";
+
+  src = fetchurl {
+    url = "https://springrts.com/dl/buildbot/default/master/${version}/source/spring_${version}_src.tar.gz";
+    sha256 = "sha256-mSA4ioIv68NMEB72lYnwDb1QOuWr1VHwu4+grAoHlV0=";
+  };
+
+  postPatch = ''
+    patchShebangs .
+
+    substituteInPlace ./rts/build/cmake/FindAsciiDoc.cmake \
+      --replace "PATHS /usr /usr/share /usr/local /usr/local/share" "PATHS ${docbook_xsl}"\
+      --replace "xsl/docbook/manpages" "share/xml/docbook-xsl/manpages"
+
+    # The cmake included module correcly finds nix's glew, however
+    # it has to be the bundled FindGLEW for headless or dedicated builds
+    rm rts/build/cmake/FindGLEW.cmake
+  '';
+
+  cmakeFlags = [
+    "-DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON"
+    "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=ON"
+    "-DPREFER_STATIC_LIBS:BOOL=OFF"
+  ];
+
+  nativeBuildInputs = [ cmake makeWrapper docbook_xsl docbook_xsl_ns asciidoc ];
+  buildInputs = [
+    boost
+    curl
+    freetype
+    glew
+    libdevil
+    libGL
+    libGLU
+    libunwind
+    libvorbis
+    minizip
+    openal
+    p7zip
+    SDL2
+    xorg.libX11
+    xorg.libXcursor
+    xz
+    zlib
+  ]
+  ++ lib.optionals withAI [ python3 jdk ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/spring" \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://springrts.com/";
+    description = "A powerful real-time strategy (RTS) game engine";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ qknight domenkozar sorki ];
+    platforms = [ "x86_64-linux" ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/games/spring/fix-certs.patch b/nixpkgs/pkgs/games/spring/fix-certs.patch
new file mode 100644
index 000000000000..b31160a05cc6
--- /dev/null
+++ b/nixpkgs/pkgs/games/spring/fix-certs.patch
@@ -0,0 +1,11 @@
+--- a/src/downloader/lib/src/Downloader/CurlWrapper.cpp
++++ b/src/downloader/lib/src/Downloader/CurlWrapper.cpp
+@@ -108,7 +108,6 @@
+ 		if (res != CURLE_OK) {
+ 			LOG_WARN("Error setting CURLOPT_CAPATH: %d", res);
+ 		}
+-		return;
+ 	}
+ 
+ 	const std::string cafile = GetCAFilePath();
+
diff --git a/nixpkgs/pkgs/games/spring/revert_58b423e.patch b/nixpkgs/pkgs/games/spring/revert_58b423e.patch
new file mode 100644
index 000000000000..79a42cefa5a6
--- /dev/null
+++ b/nixpkgs/pkgs/games/spring/revert_58b423e.patch
@@ -0,0 +1,16 @@
+--- a/src/utils/slpaths.cpp
++++ b/src/utils/slpaths.cpp
+@@ -165,13 +165,10 @@
+ 			usync_paths.push_back(bundle);
+ 		}
+ 		if (!SlPaths::IsPortableMode()) {
+-			/*
+-//FIXME: reenable when #707 is fixed / spring 102.0 is "established"
+ 			LSL::SpringBundle systembundle;
+ 			if (LSL::SpringBundle::LocateSystemInstalledSpring(systembundle)) {
+ 				usync_paths.push_back(systembundle);
+ 			}
+-*/
+ 
+ 			std::vector<std::string> paths;
+ 			PossibleEnginePaths(paths);
diff --git a/nixpkgs/pkgs/games/spring/springlobby.nix b/nixpkgs/pkgs/games/spring/springlobby.nix
new file mode 100644
index 000000000000..ab792cf41a49
--- /dev/null
+++ b/nixpkgs/pkgs/games/spring/springlobby.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, wxGTK32
+, openal
+, pkg-config
+, curl
+, libtorrent-rasterbar
+, libpng
+, libX11
+, gettext
+, boost
+, libnotify
+, gtk3
+, doxygen
+, spring
+, makeWrapper
+, glib
+, minizip
+, alure
+, pcre
+, jsoncpp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "springlobby";
+  version = "0.273";
+
+  src = fetchurl {
+    url = "https://springlobby.springrts.com/dl/stable/springlobby-${version}.tar.bz2";
+    sha256 = "sha256-XkU6i6ABCgw3H9vJu0xjHRO1BglueYM1LyJxcZdOrDk=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config gettext doxygen makeWrapper ];
+  buildInputs = [
+    wxGTK32
+    openal
+    curl
+    libtorrent-rasterbar
+    pcre
+    jsoncpp
+    boost
+    libpng
+    libX11
+    libnotify
+    gtk3
+    glib
+    minizip
+    alure
+  ];
+
+  patches = [
+    ./revert_58b423e.patch # Allows springLobby to continue using system installed spring until #707 is fixed
+    ./fix-certs.patch
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/springlobby \
+      --prefix PATH : "${spring}/bin" \
+      --set SPRING_BUNDLE_DIR "${spring}/lib"
+  '';
+
+  meta = with lib; {
+    homepage = "https://springlobby.springrts.com";
+    description = "Cross-platform lobby client for the Spring RTS project";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ qknight domenkozar ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/srb2/cmake.patch b/nixpkgs/pkgs/games/srb2/cmake.patch
new file mode 100644
index 000000000000..91af532e86fb
--- /dev/null
+++ b/nixpkgs/pkgs/games/srb2/cmake.patch
@@ -0,0 +1,61 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 80a3bdcd6..380a1573a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -61,7 +61,7 @@ option(
+ 	"Link dependencies using CMake's find_package and do not use internal builds"
+ 	${SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT}
+ )
+-option(SRB2_CONFIG_ENABLE_TESTS "Build the test suite" ON)
++option(SRB2_CONFIG_ENABLE_TESTS "Build the test suite" OFF)
+ # This option isn't recommended for distribution builds and probably won't work (yet).
+ cmake_dependent_option(
+ 	SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES
+@@ -80,25 +80,6 @@ option(SRB2_CONFIG_ZDEBUG "Compile with ZDEBUG defined." OFF)
+ option(SRB2_CONFIG_PROFILEMODE "Compile for profiling (GCC only)." OFF)
+ set(SRB2_CONFIG_ASSET_DIRECTORY "" CACHE PATH "Path to directory that contains all asset files for the installer. If set, assets will be part of installation and cpack.")
+ 
+-if(SRB2_CONFIG_ENABLE_TESTS)
+-	# https://github.com/catchorg/Catch2
+-	CPMAddPackage(
+-		NAME Catch2
+-		VERSION 3.4.0
+-		GITHUB_REPOSITORY catchorg/Catch2
+-		OPTIONS
+-			"CATCH_INSTALL_DOCS OFF"
+-	)
+-	list(APPEND CMAKE_MODULE_PATH "${Catch2_SOURCE_DIR}/extras")
+-	include(CTest)
+-	include(Catch)
+-	add_executable(srb2tests)
+-	# To add tests, use target_sources to add individual test files to the target in subdirs.
+-	target_link_libraries(srb2tests PRIVATE Catch2::Catch2 Catch2::Catch2WithMain)
+-	target_compile_features(srb2tests PRIVATE c_std_11 cxx_std_17)
+-	catch_discover_tests(srb2tests)
+-endif()
+-
+ # Enable CCache
+ # (Set USE_CCACHE=ON to use, CCACHE_OPTIONS for options)
+ if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows)
+@@ -113,12 +94,6 @@ if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows)
+ 			message(WARNING "USE_CCACHE was set but ccache is not found (set CCACHE_TOOL_PATH)")
+ 		endif()
+ 	endif()
+-else()
+-	CPMAddPackage(
+-		NAME Ccache.cmake
+-		GITHUB_REPOSITORY TheLartians/Ccache.cmake
+-		VERSION 1.2
+-	)
+ endif()
+ 
+ # Dependencies
+@@ -179,7 +154,7 @@ include(GitUtilities)
+ if("${SRB2_SDL2_EXE_NAME}" STREQUAL "")
+ 	# cause a reconfigure if the branch changes
+ 	get_git_dir(SRB2_GIT_DIR)
+-	configure_file("${SRB2_GIT_DIR}/HEAD" HEAD COPYONLY)
++	#configure_file("${SRB2_GIT_DIR}/HEAD" HEAD COPYONLY)
+ 
+ 	git_current_branch(SRB2_GIT_REVISION)
+ 
diff --git a/nixpkgs/pkgs/games/srb2/default.nix b/nixpkgs/pkgs/games/srb2/default.nix
new file mode 100644
index 000000000000..fdb374a91751
--- /dev/null
+++ b/nixpkgs/pkgs/games/srb2/default.nix
@@ -0,0 +1,118 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, cmake
+, curl
+, nasm
+, libopenmpt
+, p7zip
+, game-music-emu
+, libpng
+, SDL2
+, SDL2_mixer
+, zlib
+, unzip
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "srb2";
+  version = "2.2.13";
+
+  src = fetchFromGitHub {
+    owner = "STJr";
+    repo = "SRB2";
+    rev = "SRB2_release_${finalAttrs.version}";
+    hash = "sha256-OSkkjCz7ZW5+0vh6l7+TpnHLzXmd/5QvTidRQSHJYX8=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    nasm
+    p7zip
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    curl
+    game-music-emu
+    libpng
+    libopenmpt
+    SDL2
+    SDL2_mixer
+    zlib
+  ];
+
+  assets = stdenv.mkDerivation {
+    pname = "srb2-data";
+    version = finalAttrs.version;
+
+    nativeBuildInputs = [
+      unzip
+    ];
+
+    src = fetchurl {
+      url = "https://github.com/STJr/SRB2/releases/download/SRB2_release_${finalAttrs.version}/SRB2-v${lib.replaceStrings ["."] [""] finalAttrs.version}-Full.zip";
+      hash = "sha256-g7kaNRE1tjcF5J2v+kTnrDzz4zs5f1b/NH67ce2ifUo=";
+    };
+
+    sourceRoot = ".";
+
+    installPhase = ''
+      mkdir -p $out/share/srb2
+      cp -r *pk3 *dta *dat models/ $out/share/srb2/
+    '';
+  };
+
+  cmakeFlags = [
+    "-DSRB2_ASSET_DIRECTORY=${finalAttrs.assets}/share/srb2"
+    "-DGME_INCLUDE_DIR=${game-music-emu}/include"
+    "-DOPENMPT_INCLUDE_DIR=${libopenmpt.dev}/include"
+    "-DSDL2_MIXER_INCLUDE_DIR=${lib.getDev SDL2_mixer}/include/SDL2"
+    "-DSDL2_INCLUDE_DIR=${lib.getDev SDL2.dev}/include/SDL2"
+  ];
+
+  patches = [
+    # Make the build work without internet connectivity
+    # See: https://build.opensuse.org/request/show/1109889
+    ./cmake.patch
+    ./thirdparty.patch
+  ];
+
+  desktopItems = [
+    (makeDesktopItem rec {
+      name = "Sonic Robo Blast 2";
+      exec = finalAttrs.pname;
+      icon = finalAttrs.pname;
+      comment = finalAttrs.meta.description;
+      desktopName = name;
+      genericName = name;
+      categories = [ "Game" ];
+    })
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/applications $out/share/pixmaps $out/share/icons
+
+    copyDesktopItems
+
+    cp ../srb2.png $out/share/pixmaps/.
+    cp ../srb2.png $out/share/icons/.
+
+    cp bin/lsdlsrb2 $out/bin/srb2
+    wrapProgram $out/bin/srb2 --set SRB2WADDIR "${finalAttrs.assets}/share/srb2"
+  '';
+
+  meta = with lib; {
+    description = "Sonic Robo Blast 2 is a 3D Sonic the Hedgehog fangame based on a modified version of Doom Legacy";
+    homepage = "https://www.srb2.org/";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ zeratax donovanglover ];
+    mainProgram = "srb2";
+  };
+})
diff --git a/nixpkgs/pkgs/games/srb2/thirdparty.patch b/nixpkgs/pkgs/games/srb2/thirdparty.patch
new file mode 100644
index 000000000000..bb550290d85d
--- /dev/null
+++ b/nixpkgs/pkgs/games/srb2/thirdparty.patch
@@ -0,0 +1,12 @@
+diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt
+index f33b3bf3f..1214f179c 100644
+--- a/thirdparty/CMakeLists.txt
++++ b/thirdparty/CMakeLists.txt
+@@ -16,6 +16,5 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
+ 	include("cpm-png.cmake")
+ 	include("cpm-curl.cmake")
+ 	include("cpm-openmpt.cmake")
++	include("cpm-libgme.cmake")
+ endif()
+-
+-include("cpm-libgme.cmake")
diff --git a/nixpkgs/pkgs/games/srb2kart/default.nix b/nixpkgs/pkgs/games/srb2kart/default.nix
new file mode 100644
index 000000000000..441ffd284a0d
--- /dev/null
+++ b/nixpkgs/pkgs/games/srb2kart/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, substituteAll
+, cmake
+, curl
+, nasm
+, unzip
+, game-music-emu
+, libpng
+, SDL2
+, SDL2_mixer
+, zlib
+}:
+
+let
+
+  release_tag = "v1.6";
+
+  assets = fetchurl {
+    url = "https://github.com/STJr/Kart-Public/releases/download/${release_tag}/AssetsLinuxOnly.zip";
+    sha256 = "sha256-ejhPuZ1C8M9B0S4+2HN1T5pbormT1eVL3nlivqOszdE=";
+  };
+
+in stdenv.mkDerivation {
+  pname = "srb2kart";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "STJr";
+    repo = "Kart-Public";
+    rev = release_tag;
+    sha256 = "sha256-5sIHdeenWZjczyYM2q+F8Y1SyLqL+y77yxYDUM3dVA0=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    nasm
+    unzip
+  ];
+
+  buildInputs = [
+    curl
+    game-music-emu
+    libpng
+    SDL2
+    SDL2_mixer
+    zlib
+  ];
+
+  cmakeFlags = [
+    "-DGME_INCLUDE_DIR=${game-music-emu}/include"
+    "-DSDL2_MIXER_INCLUDE_DIR=${lib.getDev SDL2_mixer}/include/SDL2"
+    "-DSDL2_INCLUDE_DIR=${lib.getDev SDL2}/include/SDL2"
+  ];
+
+  patches = [
+    ./wadlocation.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace src/sdl/i_system.c \
+        --replace '@wadlocation@' $out
+  '';
+
+  preConfigure = ''
+    mkdir assets/installer
+    pushd assets/installer
+    unzip ${assets} "*.kart" srb2.srb
+    popd
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin $out/share/games/SRB2Kart
+    mv $out/srb2kart* $out/bin/
+    mv $out/*.kart $out/share/games/SRB2Kart
+  '';
+
+  meta = with lib; {
+    description = "SRB2Kart is a classic styled kart racer";
+    homepage = "https://mb.srb2.org/threads/srb2kart.25868/";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ viric ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/srb2kart/wadlocation.patch b/nixpkgs/pkgs/games/srb2kart/wadlocation.patch
new file mode 100644
index 000000000000..1923cda041d2
--- /dev/null
+++ b/nixpkgs/pkgs/games/srb2kart/wadlocation.patch
@@ -0,0 +1,61 @@
+diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c
+index 51f708d0..c4d971f7 100644
+--- a/src/sdl/i_system.c
++++ b/src/sdl/i_system.c
+@@ -139,7 +139,7 @@ typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T);
+ 
+ // Locations for searching the srb2.srb
+ #if defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON)
+-#define DEFAULTWADLOCATION1 "/usr/local/share/games/SRB2Kart"
++#define DEFAULTWADLOCATION1 "@wadlocation@"
+ #define DEFAULTWADLOCATION2 "/usr/local/games/SRB2Kart"
+ #define DEFAULTWADLOCATION3 "/usr/share/games/SRB2Kart"
+ #define DEFAULTWADLOCATION4 "/usr/games/SRB2Kart"
+@@ -3646,47 +3646,6 @@ static const char *locateWad(void)
+ 	if (((envstr = I_GetEnv("SRB2WADDIR")) != NULL) && isWadPathOk(envstr))
+ 		return envstr;
+ 
+-#ifndef NOCWD
+-	I_OutputMsg(",.");
+-	// examine current dir
+-	strcpy(returnWadPath, ".");
+-	if (isWadPathOk(returnWadPath))
+-		return NULL;
+-#endif
+-
+-
+-#ifdef DEFAULTDIR
+-	I_OutputMsg(",HOME/" DEFAULTDIR);
+-	// examine user jart directory
+-	if ((envstr = I_GetEnv("HOME")) != NULL)
+-	{
+-		sprintf(returnWadPath, "%s" PATHSEP DEFAULTDIR, envstr);
+-		if (isWadPathOk(returnWadPath))
+-			return returnWadPath;
+-	}
+-#endif
+-
+-
+-#ifdef CMAKECONFIG
+-#ifndef NDEBUG
+-	I_OutputMsg(","CMAKE_ASSETS_DIR);
+-	strcpy(returnWadPath, CMAKE_ASSETS_DIR);
+-	if (isWadPathOk(returnWadPath))
+-	{
+-		return returnWadPath;
+-	}
+-#endif
+-#endif
+-
+-#ifdef __APPLE__
+-	OSX_GetResourcesPath(returnWadPath);
+-	I_OutputMsg(",%s", returnWadPath);
+-	if (isWadPathOk(returnWadPath))
+-	{
+-		return returnWadPath;
+-	}
+-#endif
+-
+ 	// examine default dirs
+ #ifdef DEFAULTWADLOCATION1
+ 	I_OutputMsg(","DEFAULTWADLOCATION1);
diff --git a/nixpkgs/pkgs/games/stardust/default.nix b/nixpkgs/pkgs/games/stardust/default.nix
new file mode 100644
index 000000000000..2555950506ab
--- /dev/null
+++ b/nixpkgs/pkgs/games/stardust/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, zlib, libtiff, libxml2, SDL, xorgproto, libX11
+, libXi, libXmu, libXext, libGLU, libGL }:
+
+stdenv.mkDerivation rec {
+  pname = "stardust";
+  version = "0.1.13";
+
+  src = fetchurl {
+    url = "http://iwar.free.fr/IMG/gz/${pname}-${version}.tar.gz";
+    sha256 = "19rs9lz5y5g2yiq1cw0j05b11digw40gar6rw8iqc7bk3s8355xp";
+  };
+
+  buildInputs = [
+    zlib libtiff libxml2 SDL xorgproto libX11 libXi
+    libXmu libXext libGLU libGL
+  ];
+
+  installFlags = [ "bindir=\${out}/bin" ];
+
+  hardeningDisable = [ "format" ];
+
+  postConfigure = ''
+    substituteInPlace config.h \
+      --replace '#define PACKAGE ""' '#define PACKAGE "stardust"'
+  '';
+
+  meta = with lib; {
+    description = "Space flight simulator";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/starsector/default.nix b/nixpkgs/pkgs/games/starsector/default.nix
new file mode 100644
index 000000000000..e1bc4a8dbbcf
--- /dev/null
+++ b/nixpkgs/pkgs/games/starsector/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, fetchzip
+, libXxf86vm
+, makeWrapper
+, openal
+, openjdk
+, stdenv
+, xorg
+, copyDesktopItems
+, makeDesktopItem
+, writeScript
+}:
+
+stdenv.mkDerivation rec {
+  pname = "starsector";
+  version = "0.96a-RC10";
+
+  src = fetchzip {
+    url = "https://f005.backblazeb2.com/file/fractalsoftworks/release/starsector_linux-${version}.zip";
+    sha256 = "sha256-RBSnms+QlKgTOhm3t2hDfv7OcMrQCk1rfkz9GaM74WM=";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+  buildInputs = [ xorg.libXxf86vm openal ];
+
+  dontBuild = true;
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "starsector";
+      exec = "starsector";
+      icon = "starsector";
+      comment = meta.description;
+      genericName = "starsector";
+      desktopName = "Starsector";
+      categories = [ "Game" ];
+    })
+  ];
+
+  # need to cd into $out in order for classpath to pick up correct jar files
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/starsector
+    rm -r jre_linux # remove bundled jre7
+    rm starfarer.api.zip
+    cp -r ./* $out/share/starsector
+
+    mkdir -p $out/share/icons/hicolor/64x64/apps
+    ln -s $out/graphics/ui/s_icon64.png $out/share/icons/hicolor/64x64/apps/starsector.png
+
+    wrapProgram $out/share/starsector/starsector.sh \
+      --prefix PATH : ${lib.makeBinPath [ openjdk ]} \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath buildInputs} \
+      --run 'mkdir -p ''${XDG_DATA_HOME:-~/.local/share}/starsector' \
+      --chdir "$out/share/starsector"
+    ln -s $out/share/starsector/starsector.sh $out/bin/starsector
+
+    runHook postInstall
+  '';
+
+  # it tries to run everything with relative paths, which makes it CWD dependent
+  # also point mod, screenshot, and save directory to $XDG_DATA_HOME
+  # additionally, add some GC options to improve performance of the game
+  postPatch = ''
+    substituteInPlace starsector.sh \
+      --replace "./jre_linux/bin/java" "${openjdk}/bin/java" \
+      --replace "./native/linux" "$out/share/starsector/native/linux" \
+      --replace "=." "=\''${XDG_DATA_HOME:-\$HOME/.local/share}/starsector" \
+      --replace "-XX:+CompilerThreadHintNoPreempt" "-XX:+UnlockDiagnosticVMOptions -XX:-BytecodeVerificationRemote -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSConcurrentMTEnabled -XX:+DisableExplicitGC"
+  '';
+
+  meta = with lib; {
+    description = "Open-world single-player space-combat, roleplaying, exploration, and economic game";
+    homepage = "https://fractalsoftworks.com";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ bbigras ];
+  };
+
+  passthru.updateScript = writeScript "starsector-update-script" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl gnugrep common-updater-scripts
+    set -eou pipefail;
+    version=$(curl -s https://fractalsoftworks.com/preorder/ | grep -oP "https://f005.backblazeb2.com/file/fractalsoftworks/release/starsector_linux-\K.*?(?=\.zip)" | head -1)
+    update-source-version ${pname} "$version" --file=./pkgs/games/starsector/default.nix
+  '';
+}
diff --git a/nixpkgs/pkgs/games/steam-tui/default.nix b/nixpkgs/pkgs/games/steam-tui/default.nix
new file mode 100644
index 000000000000..63deb3b969ce
--- /dev/null
+++ b/nixpkgs/pkgs/games/steam-tui/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, rustPlatform
+, steamcmd
+, fetchFromGitHub
+, steam-run
+, runtimeShell
+, withWine ? false
+, wine
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "steam-tui";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "dmadisetti";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-UTXYlPecv0MVonr9zZwfwopfC/Fdch/ZSCxqgUsem40=";
+  };
+
+  cargoSha256 = "sha256-VYBzwDLSV4N4qt2dNgIS399T2HIbPTdQ2rDIeheLlfo=";
+
+  buildInputs = [ steamcmd ]
+    ++ lib.optional withWine wine;
+
+  preFixup = ''
+    mv $out/bin/steam-tui $out/bin/.steam-tui-unwrapped
+    cat > $out/bin/steam-tui <<EOF
+    #!${runtimeShell}
+    export PATH=${steamcmd}/bin:\$PATH
+    exec ${steam-run}/bin/steam-run $out/bin/.steam-tui-unwrapped '\$@'
+    EOF
+    chmod +x $out/bin/steam-tui
+  '';
+
+  meta = with lib; {
+    description = "Rust TUI client for steamcmd";
+    homepage = "https://github.com/dmadisetti/steam-tui";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lom ];
+    # steam only supports that platform
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/steam/build-wrapped.sh b/nixpkgs/pkgs/games/steam/build-wrapped.sh
new file mode 100644
index 000000000000..ddf974671a03
--- /dev/null
+++ b/nixpkgs/pkgs/games/steam/build-wrapped.sh
@@ -0,0 +1,47 @@
+source $stdenv/setup
+
+outp=$out/lib/steam-runtime
+
+buildDir() {
+  paths="$1"
+  pkgs="$2"
+
+  for pkg in $pkgs; do
+    echo "adding package $pkg"
+    for path in $paths; do
+      if [ -d $pkg/$path ]; then
+        cd $pkg/$path
+        for file in *; do
+          found=""
+          for i in $paths; do
+            if [ -e "$outp/$i/$file" ]; then
+              found=1
+              break
+            fi
+          done
+          if [ -z "$found" ]; then
+            mkdir -p $outp/$path
+            ln -s "$pkg/$path/$file" $outp/$path
+            sovers=$(echo $file | perl -ne 'print if s/.*?\.so\.(.*)/\1/')
+            if [ ! -z "$sovers" ]; then
+              fname=''${file%.''${sovers}}
+              for ver in ''${sovers//./ }; do
+                found=""
+                for i in $paths; do
+                  if [ -e "$outp/$i/$fname" ]; then
+                    found=1
+                    break
+                  fi
+                done
+                [ -n "$found" ] || ln -s "$pkg/$path/$file" "$outp/$path/$fname"
+                fname="$fname.$ver"
+              done
+            fi
+          fi
+        done
+      fi
+    done
+  done
+}
+
+eval "$installPhase"
diff --git a/nixpkgs/pkgs/games/steam/default.nix b/nixpkgs/pkgs/games/steam/default.nix
new file mode 100644
index 000000000000..651c20491844
--- /dev/null
+++ b/nixpkgs/pkgs/games/steam/default.nix
@@ -0,0 +1,38 @@
+{ makeScopeWithSplicing', generateSplicesForMkScope
+, stdenv, buildFHSEnv, pkgsi686Linux, glxinfo
+}:
+
+let
+  steamPackagesFun = self: let
+    inherit (self) callPackage;
+  in rec {
+    steamArch = if stdenv.hostPlatform.system == "x86_64-linux" then "amd64"
+                else if stdenv.hostPlatform.system == "i686-linux" then "i386"
+                else throw "Unsupported platform: ${stdenv.hostPlatform.system}";
+
+    steam-runtime = callPackage ./runtime.nix { };
+    steam-runtime-wrapped = callPackage ./runtime-wrapped.nix { };
+    steam = callPackage ./steam.nix { };
+    steam-fhsenv = callPackage ./fhsenv.nix {
+      glxinfo-i686 =
+        if self.steamArch == "amd64"
+        then pkgsi686Linux.glxinfo
+        else glxinfo;
+      steam-runtime-wrapped-i686 =
+        if self.steamArch == "amd64"
+        then pkgsi686Linux.steamPackages.steam-runtime-wrapped
+        else null;
+      inherit buildFHSEnv;
+    };
+    steam-fhsenv-small = steam-fhsenv.override { withGameSpecificLibraries = false; };
+
+    # This has to exist so Hydra tries to build all of Steam's dependencies.
+    # FIXME: Maybe we should expose it as something more generic?
+    steam-fhsenv-without-steam = steam-fhsenv.override { steam = null; };
+
+    steamcmd = callPackage ./steamcmd.nix { };
+  };
+in makeScopeWithSplicing' {
+  otherSplices = generateSplicesForMkScope "steamPackages";
+  f = steamPackagesFun;
+}
diff --git a/nixpkgs/pkgs/games/steam/fhsenv.nix b/nixpkgs/pkgs/games/steam/fhsenv.nix
new file mode 100644
index 000000000000..78c669614c07
--- /dev/null
+++ b/nixpkgs/pkgs/games/steam/fhsenv.nix
@@ -0,0 +1,320 @@
+{ lib, stdenv, writeShellScript, buildFHSEnv, steam, glxinfo-i686
+, steam-runtime-wrapped, steam-runtime-wrapped-i686 ? null
+, extraPkgs ? pkgs: [ ] # extra packages to add to targetPkgs
+, extraLibraries ? pkgs: [ ] # extra packages to add to multiPkgs
+, extraProfile ? "" # string to append to profile
+, extraBwrapArgs ? [ ] # extra arguments to pass to bubblewrap
+, extraArgs ? "" # arguments to always pass to steam
+, extraEnv ? { } # Environment variables to pass to Steam
+, withGameSpecificLibraries ? true # include game specific libraries
+}:
+
+let
+  commonTargetPkgs = pkgs: with pkgs; [
+    # Needed for operating system detection until
+    # https://github.com/ValveSoftware/steam-for-linux/issues/5909 is resolved
+    lsb-release
+    # Errors in output without those
+    pciutils
+    # Games' dependencies
+    xorg.xrandr
+    which
+    # Needed by gdialog, including in the steam-runtime
+    perl
+    # Open URLs
+    xdg-utils
+    iana-etc
+    # Steam Play / Proton
+    python3
+    # Steam VR
+    procps
+    usbutils
+
+    # It tries to execute xdg-user-dir and spams the log with command not founds
+    xdg-user-dirs
+
+    # electron based launchers need newer versions of these libraries than what runtime provides
+    mesa
+    sqlite
+  ] ++ extraPkgs pkgs;
+
+  ldPath = lib.optionals stdenv.is64bit [ "/lib64" ]
+  ++ [ "/lib32" ]
+  ++ map (x: "/steamrt/${steam-runtime-wrapped.arch}/" + x) steam-runtime-wrapped.libs
+  ++ lib.optionals (steam-runtime-wrapped-i686 != null) (map (x: "/steamrt/${steam-runtime-wrapped-i686.arch}/" + x) steam-runtime-wrapped-i686.libs);
+
+  # Zachtronics and a few other studios expect STEAM_LD_LIBRARY_PATH to be present
+  exportLDPath = ''
+    export LD_LIBRARY_PATH=${lib.concatStringsSep ":" ldPath}''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH
+    export STEAM_LD_LIBRARY_PATH="$STEAM_LD_LIBRARY_PATH''${STEAM_LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
+  '';
+
+  # bootstrap.tar.xz has 444 permissions, which means that simple deletes fail
+  # and steam will not be able to start
+  fixBootstrap = ''
+    if [ -r $HOME/.local/share/Steam/bootstrap.tar.xz ]; then
+      chmod +w $HOME/.local/share/Steam/bootstrap.tar.xz
+    fi
+  '';
+
+  envScript = lib.toShellVars extraEnv;
+
+in buildFHSEnv rec {
+  name = "steam";
+
+  # Steam still needs 32bit and various native games do too
+  multiArch = true;
+
+  targetPkgs = pkgs: with pkgs; [
+    steam
+    # License agreement
+    gnome.zenity
+  ] ++ commonTargetPkgs pkgs;
+
+  multiPkgs = pkgs: with pkgs; [
+    # These are required by steam with proper errors
+    xorg.libXcomposite
+    xorg.libXtst
+    xorg.libXrandr
+    xorg.libXext
+    xorg.libX11
+    xorg.libXfixes
+    libGL
+    libva
+    pipewire.lib
+
+    # steamwebhelper
+    harfbuzz
+    libthai
+    pango
+
+    lsof # friends options won't display "Launch Game" without it
+    file # called by steam's setup.sh
+
+    # dependencies for mesa drivers, needed inside pressure-vessel
+    mesa.llvmPackages.llvm.lib
+    vulkan-loader
+    expat
+    wayland
+    xorg.libxcb
+    xorg.libXdamage
+    xorg.libxshmfence
+    xorg.libXxf86vm
+    libelf
+    (lib.getLib elfutils)
+
+    # Without these it silently fails
+    xorg.libXinerama
+    xorg.libXcursor
+    xorg.libXrender
+    xorg.libXScrnSaver
+    xorg.libXi
+    xorg.libSM
+    xorg.libICE
+    gnome2.GConf
+    curlWithGnuTls
+    nspr
+    nss
+    cups
+    libcap
+    SDL2
+    libusb1
+    dbus-glib
+    gsettings-desktop-schemas
+    ffmpeg
+    libudev0-shim
+
+    # Verified games requirements
+    fontconfig
+    freetype
+    xorg.libXt
+    xorg.libXmu
+    libogg
+    libvorbis
+    SDL
+    SDL2_image
+    glew110
+    libdrm
+    libidn
+    tbb
+    zlib
+
+    # SteamVR
+    udev
+    dbus
+
+    # Other things from runtime
+    glib
+    gtk2
+    bzip2
+    flac
+    freeglut
+    libjpeg
+    libpng
+    libpng12
+    libsamplerate
+    libmikmod
+    libtheora
+    libtiff
+    pixman
+    speex
+    SDL_image
+    SDL_ttf
+    SDL_mixer
+    SDL2_ttf
+    SDL2_mixer
+    libappindicator-gtk2
+    libdbusmenu-gtk2
+    libindicator-gtk2
+    libcaca
+    libcanberra
+    libgcrypt
+    libvpx
+    librsvg
+    xorg.libXft
+    libvdpau
+
+    # required by coreutils stuff to run correctly
+    # Steam ends up with LD_LIBRARY_PATH=<bunch of runtime stuff>:/usr/lib:<etc>
+    # which overrides DT_RUNPATH in our binaries, so it tries to dynload the
+    # very old versions of stuff from the runtime.
+    # FIXME: how do we even fix this correctly
+    attr
+  ] ++ lib.optionals withGameSpecificLibraries [
+    # Not formally in runtime but needed by some games
+    at-spi2-atk
+    at-spi2-core   # CrossCode
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-ugly
+    gst_all_1.gst-plugins-base
+    json-glib # paradox launcher (Stellaris)
+    libdrm
+    libxkbcommon # paradox launcher
+    libvorbis # Dead Cells
+    libxcrypt # Alien Isolation, XCOM 2, Company of Heroes 2
+    mono
+    ncurses # Crusader Kings III
+    openssl
+    xorg.xkeyboardconfig
+    xorg.libpciaccess
+    xorg.libXScrnSaver # Dead Cells
+    icu # dotnet runtime, e.g. Stardew Valley
+
+    # screeps dependencies
+    gtk3
+    zlib
+    atk
+    cairo
+    freetype
+    gdk-pixbuf
+    fontconfig
+
+    # Prison Architect
+    libGLU
+    libuuid
+    libbsd
+    alsa-lib
+
+    # Loop Hero
+    # FIXME: Also requires openssl_1_1, which is EOL. Either find an alternative solution, or remove these dependencies (if not needed by other games)
+    libidn2
+    libpsl
+    nghttp2.lib
+    rtmpdump
+  ]
+  # This needs to come from pkgs as the passed-in steam-runtime-wrapped may not be the same architecture
+  ++ pkgs.steamPackages.steam-runtime-wrapped.overridePkgs
+  ++ extraLibraries pkgs;
+
+  extraInstallCommands = lib.optionalString (steam != null) ''
+    mkdir -p $out/share/applications
+    ln -s ${steam}/share/icons $out/share
+    ln -s ${steam}/share/pixmaps $out/share
+    ln -s ${steam}/share/applications/steam.desktop $out/share/applications/steam.desktop
+  '';
+
+  profile = ''
+    # Workaround for issue #44254 (Steam cannot connect to friends network)
+    # https://github.com/NixOS/nixpkgs/issues/44254
+    if [ -z ''${TZ+x} ]; then
+      new_TZ="$(readlink -f /etc/localtime | grep -P -o '(?<=/zoneinfo/).*$')"
+      if [ $? -eq 0 ]; then
+        export TZ="$new_TZ"
+      fi
+    fi
+
+    # udev event notifications don't work reliably inside containers.
+    # SDL2 already tries to automatically detect flatpak and pressure-vessel
+    # and falls back to inotify-based discovery [1]. We make SDL2 do the
+    # same by telling it explicitly.
+    #
+    # [1] <https://github.com/libsdl-org/SDL/commit/8e2746cfb6e1f1a1da5088241a1440fd2535e321>
+    export SDL_JOYSTICK_DISABLE_UDEV=1
+  '' + extraProfile;
+
+  runScript = writeShellScript "steam-wrapper.sh" ''
+    if [ -f /host/etc/NIXOS ]; then   # Check only useful on NixOS
+      ${glxinfo-i686}/bin/glxinfo >/dev/null 2>&1
+      # If there was an error running glxinfo, we know something is wrong with the configuration
+      if [ $? -ne 0 ]; then
+        cat <<EOF > /dev/stderr
+    **
+    WARNING: Steam is not set up. Add the following options to /etc/nixos/configuration.nix
+    and then run \`sudo nixos-rebuild switch\`:
+    {
+      hardware.opengl.driSupport32Bit = true;
+      hardware.pulseaudio.support32Bit = true;
+    }
+    **
+    EOF
+      fi
+    fi
+
+    ${exportLDPath}
+    ${fixBootstrap}
+
+    set -o allexport # Export the following env vars
+    ${envScript}
+    exec steam ${extraArgs} "$@"
+  '';
+
+  inherit extraBwrapArgs;
+
+  meta =
+    if steam != null
+    then
+      steam.meta // lib.optionalAttrs (!withGameSpecificLibraries) {
+        description = steam.meta.description + " (without game specific libraries)";
+      }
+    else {
+      description = "Steam dependencies (dummy package, do not use)";
+    };
+
+  passthru.run = buildFHSEnv {
+    name = "steam-run";
+
+    targetPkgs = commonTargetPkgs;
+    inherit multiArch multiPkgs profile extraInstallCommands extraBwrapArgs;
+
+    runScript = writeShellScript "steam-run" ''
+      run="$1"
+      if [ "$run" = "" ]; then
+        echo "Usage: steam-run command-to-run args..." >&2
+        exit 1
+      fi
+      shift
+
+      ${exportLDPath}
+      ${fixBootstrap}
+
+      set -o allexport # Export the following env vars
+      ${envScript}
+      exec -- "$run" "$@"
+    '';
+
+    meta = (steam.meta or {}) // {
+      description = "Run commands in the same FHS environment that is used for Steam";
+      name = "steam-run";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/games/steam/runtime-wrapped.nix b/nixpkgs/pkgs/games/steam/runtime-wrapped.nix
new file mode 100644
index 000000000000..3b6cfcd6ee12
--- /dev/null
+++ b/nixpkgs/pkgs/games/steam/runtime-wrapped.nix
@@ -0,0 +1,45 @@
+{ stdenv, steamArch, lib, perl, pkgs, steam-runtime
+, runtimeOnly ? false
+}:
+
+let
+  overridePkgs = lib.optionals (!runtimeOnly) (with pkgs; [
+    libgpg-error
+    libpulseaudio
+    alsa-lib
+    openalSoft
+    libva1
+    libvdpau
+    vulkan-loader
+    gcc.cc.lib
+    nss
+    nspr
+    xorg.libxcb
+  ]);
+
+  allPkgs = overridePkgs ++ [ steam-runtime ];
+
+  gnuArch = if steamArch == "amd64" then "x86_64-linux-gnu"
+            else if steamArch == "i386" then "i386-linux-gnu"
+            else abort "Unsupported architecture";
+
+  libs = [ "lib/${gnuArch}" "lib" "usr/lib/${gnuArch}" "usr/lib" ];
+  bins = [ "bin" "usr/bin" ];
+
+in stdenv.mkDerivation {
+  name = "steam-runtime-wrapped";
+
+  nativeBuildInputs = [ perl ];
+
+  builder = ./build-wrapped.sh;
+
+  passthru = {
+    inherit gnuArch libs bins overridePkgs;
+    arch = steamArch;
+  };
+
+  installPhase = ''
+    buildDir "${toString libs}" "${toString (map lib.getLib allPkgs)}"
+    buildDir "${toString bins}" "${toString (map lib.getBin allPkgs)}"
+  '';
+}
diff --git a/nixpkgs/pkgs/games/steam/runtime.nix b/nixpkgs/pkgs/games/steam/runtime.nix
new file mode 100644
index 000000000000..c8c67e94b4a4
--- /dev/null
+++ b/nixpkgs/pkgs/games/steam/runtime.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl
+
+# for update script
+, writeShellScript, curl, nix-update
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "steam-runtime";
+  # from https://repo.steampowered.com/steamrt-images-scout/snapshots/latest-steam-client-general-availability/VERSION.txt
+  version = "0.20220601.1";
+
+  src = fetchurl {
+    url = "https://repo.steampowered.com/steamrt-images-scout/snapshots/${version}/steam-runtime.tar.xz";
+    sha256 = "sha256-uYauNtbUlvrnATGks7hWy1zt4Y7AEeADrCr1eVylPbY=";
+    name = "scout-runtime-${version}.tar.gz";
+  };
+
+  buildCommand = ''
+    mkdir -p $out
+    tar -C $out --strip=1 -x -f $src
+  '';
+
+  passthru = {
+    updateScript = writeShellScript "update.sh" ''
+      version=$(${curl}/bin/curl https://repo.steampowered.com/steamrt-images-scout/snapshots/latest-steam-client-general-availability/VERSION.txt)
+      ${nix-update}/bin/nix-update --version "$version" steamPackages.steam-runtime
+    '';
+  };
+
+  meta = with lib; {
+    description = "The official runtime used by Steam";
+    homepage = "https://github.com/ValveSoftware/steam-runtime";
+    license = licenses.unfreeRedistributable; # Includes NVIDIA CG toolkit
+    maintainers = with maintainers; [ hrdinka abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/steam/steam.nix b/nixpkgs/pkgs/games/steam/steam.nix
new file mode 100644
index 000000000000..2687ee7febdd
--- /dev/null
+++ b/nixpkgs/pkgs/games/steam/steam.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, runtimeShell, traceDeps ? false, bash }:
+
+let
+  traceLog = "/tmp/steam-trace-dependencies.log";
+  version = "1.0.0.74";
+
+in stdenv.mkDerivation {
+  pname = "steam-original";
+  inherit version;
+
+  src = fetchurl {
+    # use archive url so the tarball doesn't 404 on a new release
+    url = "https://repo.steampowered.com/steam/archive/stable/steam_${version}.tar.gz";
+    sha256 = "sha256-sO07g3j1Qejato2LWJ2FrW3AzfMCcBz46HEw7aKxojQ=";
+  };
+
+  makeFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
+
+  postInstall = ''
+    rm $out/bin/steamdeps
+    ${lib.optionalString traceDeps ''
+      cat > $out/bin/steamdeps <<EOF
+      #!${runtimeShell}
+      echo \$1 >> ${traceLog}
+      cat \$1 >> ${traceLog}
+      echo >> ${traceLog}
+      EOF
+      chmod +x $out/bin/steamdeps
+    ''}
+
+    # install udev rules
+    mkdir -p $out/etc/udev/rules.d/
+    cp ./subprojects/steam-devices/*.rules $out/etc/udev/rules.d/
+    substituteInPlace $out/etc/udev/rules.d/60-steam-input.rules \
+      --replace "/bin/sh" "${bash}/bin/bash"
+
+    # this just installs a link, "steam.desktop -> /lib/steam/steam.desktop"
+    rm $out/share/applications/steam.desktop
+    sed -e 's,/usr/bin/steam,steam,g' steam.desktop > $out/share/applications/steam.desktop
+  '';
+
+  meta = with lib; {
+    description = "A digital distribution platform";
+    longDescription = ''
+      Steam is a video game digital distribution service and storefront from Valve.
+
+      To install on NixOS, please use the option `programs.steam.enable = true`.
+    '';
+    homepage = "https://store.steampowered.com/";
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ jagajaga jonringer ];
+    mainProgram = "steam";
+  };
+}
diff --git a/nixpkgs/pkgs/games/steam/steamcmd.nix b/nixpkgs/pkgs/games/steam/steamcmd.nix
new file mode 100644
index 000000000000..1c834f1c2ea6
--- /dev/null
+++ b/nixpkgs/pkgs/games/steam/steamcmd.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, steam-run, bash, coreutils
+, steamRoot ? "~/.local/share/Steam"
+}:
+
+stdenv.mkDerivation {
+  pname = "steamcmd";
+  version = "20180104"; # According to steamcmd_linux.tar.gz mtime
+
+  src = fetchurl {
+    url = "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz";
+    sha256 = "0z0y0zqvhydmfc9y9vg5am0vz7m3gbj4l2dwlrfz936hpx301gyf";
+  };
+
+  # The source tarball does not have a single top-level directory.
+  preUnpack = ''
+    mkdir $name
+    cd $name
+    sourceRoot=.
+  '';
+
+  buildInputs = [ bash steam-run ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/steamcmd/linux32
+    install -Dm755 steamcmd.sh $out/share/steamcmd/steamcmd.sh
+    install -Dm755 linux32/* $out/share/steamcmd/linux32
+
+    mkdir -p $out/bin
+    substitute ${./steamcmd.sh} $out/bin/steamcmd \
+      --subst-var out \
+      --subst-var-by coreutils ${coreutils} \
+      --subst-var-by steamRoot "${steamRoot}" \
+      --subst-var-by steamRun ${steam-run}
+    chmod 0755 $out/bin/steamcmd
+  '';
+
+  meta = with lib; {
+    description = "Steam command-line tools";
+    homepage = "https://developer.valvesoftware.com/wiki/SteamCMD";
+    platforms = platforms.linux;
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ tadfisher ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/steam/steamcmd.sh b/nixpkgs/pkgs/games/steam/steamcmd.sh
new file mode 100644
index 000000000000..588badb41a1a
--- /dev/null
+++ b/nixpkgs/pkgs/games/steam/steamcmd.sh
@@ -0,0 +1,27 @@
+#!@bash@/bin/bash -e
+
+# Always run steamcmd in the user's Steam root.
+STEAMROOT=@steamRoot@
+
+# Add coreutils to PATH for mkdir, ln and cp used below
+PATH=$PATH${PATH:+:}@coreutils@/bin
+
+# Create a facsimile Steam root if it doesn't exist.
+if [ ! -e "$STEAMROOT" ]; then
+  mkdir -p "$STEAMROOT"/{appcache,config,logs,Steamapps/common}
+  mkdir -p ~/.steam
+  ln -sf "$STEAMROOT" ~/.steam/root
+  ln -sf "$STEAMROOT" ~/.steam/steam
+fi
+
+# Copy the system steamcmd install to the Steam root. If we don't do
+# this, steamcmd assumes the path to `steamcmd` is the Steam root.
+# Note that symlinks don't work here.
+if [ ! -e "$STEAMROOT/steamcmd.sh" ]; then
+  mkdir -p "$STEAMROOT/linux32"
+  # steamcmd.sh will replace these on first use
+  cp @out@/share/steamcmd/steamcmd.sh "$STEAMROOT/."
+  cp @out@/share/steamcmd/linux32/* "$STEAMROOT/linux32/."
+fi
+
+@steamRun@/bin/steam-run "$STEAMROOT/steamcmd.sh" "$@"
diff --git a/nixpkgs/pkgs/games/stepmania/0001-fix-build-with-ffmpeg-4.patch b/nixpkgs/pkgs/games/stepmania/0001-fix-build-with-ffmpeg-4.patch
new file mode 100644
index 000000000000..65686f5546c4
--- /dev/null
+++ b/nixpkgs/pkgs/games/stepmania/0001-fix-build-with-ffmpeg-4.patch
@@ -0,0 +1,136 @@
+From 33d928c54f4b35f8877cacd1e2c77b68b4dddc06 Mon Sep 17 00:00:00 2001
+From: Zane van Iperen <zane@zanevaniperen.com>
+Date: Sun, 7 Nov 2021 15:46:37 +1000
+Subject: [PATCH] fix build with ffmpeg 4
+
+---
+ src/arch/MovieTexture/MovieTexture_FFMpeg.cpp |  5 +----
+ src/arch/MovieTexture/MovieTexture_FFMpeg.h   | 22 +++++++++----------
+ 2 files changed, 12 insertions(+), 15 deletions(-)
+
+diff --git a/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp b/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp
+index bdf2356..f79fea2 100644
+--- a/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp
++++ b/src/arch/MovieTexture/MovieTexture_FFMpeg.cpp
+@@ -445,7 +445,7 @@ RString MovieDecoder_FFMpeg::Open( RString sFile )
+ 		return "Couldn't find any video streams";
+ 	m_pStream = m_fctx->streams[stream_idx];
+ 
+-	if( m_pStream->codec->codec_id == avcodec::CODEC_ID_NONE )
++	if( m_pStream->codec->codec_id == avcodec::AV_CODEC_ID_NONE )
+ 		return ssprintf( "Unsupported codec %08x", m_pStream->codec->codec_tag );
+ 
+ 	RString sError = OpenCodec();
+@@ -474,9 +474,6 @@ RString MovieDecoder_FFMpeg::OpenCodec()
+ 	m_pStream->codec->idct_algo         = FF_IDCT_AUTO;
+ 	m_pStream->codec->error_concealment = 3;
+ 
+-	if( pCodec->capabilities & CODEC_CAP_DR1 )
+-		m_pStream->codec->flags |= CODEC_FLAG_EMU_EDGE;
+-
+ 	LOG->Trace("Opening codec %s", pCodec->name );
+ 
+ 	int ret = avcodec::avcodec_open2( m_pStream->codec, pCodec, NULL );
+diff --git a/src/arch/MovieTexture/MovieTexture_FFMpeg.h b/src/arch/MovieTexture/MovieTexture_FFMpeg.h
+index f4d25ef..32564e5 100644
+--- a/src/arch/MovieTexture/MovieTexture_FFMpeg.h
++++ b/src/arch/MovieTexture/MovieTexture_FFMpeg.h
+@@ -64,7 +64,7 @@ private:
+ 
+ 	avcodec::AVStream *m_pStream;
+ 	avcodec::AVFrame *m_Frame;
+-	avcodec::PixelFormat m_AVTexfmt; /* PixelFormat of output surface */
++	avcodec::AVPixelFormat m_AVTexfmt; /* PixelFormat of output surface */
+ 	avcodec::SwsContext *m_swsctx;
+ 
+ 	avcodec::AVFormatContext *m_fctx;
+@@ -90,7 +90,7 @@ static struct AVPixelFormat_t
+ {
+ 	int bpp;
+ 	uint32_t masks[4];
+-	avcodec::PixelFormat pf;
++	avcodec::AVPixelFormat pf;
+ 	bool bHighColor;
+ 	bool bByteSwapOnLittleEndian;
+ 	MovieDecoderPixelFormatYCbCr YUV;
+@@ -101,7 +101,7 @@ static struct AVPixelFormat_t
+ 		  0x00FF0000,
+ 		  0x0000FF00,
+ 		  0x000000FF },
+-		avcodec::PIX_FMT_YUYV422,
++		avcodec::AV_PIX_FMT_YUYV422,
+ 		false, /* N/A */
+ 		true,
+ 		PixelFormatYCbCr_YUYV422,
+@@ -112,7 +112,7 @@ static struct AVPixelFormat_t
+ 		  0x00FF0000,
+ 		  0xFF000000,
+ 		  0x000000FF },
+-		avcodec::PIX_FMT_BGRA,
++		avcodec::AV_PIX_FMT_BGRA,
+ 		true,
+ 		true,
+ 		PixelFormatYCbCr_Invalid,
+@@ -123,7 +123,7 @@ static struct AVPixelFormat_t
+ 		  0x0000FF00,
+ 		  0x000000FF,
+ 		  0xFF000000 },
+-		avcodec::PIX_FMT_ARGB,
++		avcodec::AV_PIX_FMT_ARGB,
+ 		true,
+ 		true,
+ 		PixelFormatYCbCr_Invalid,
+@@ -135,7 +135,7 @@ static struct AVPixelFormat_t
+ 		  0x0000FF00,
+ 		  0x00FF0000,
+ 		  0xFF000000 },
+-		avcodec::PIX_FMT_ABGR,
++		avcodec::AV_PIX_FMT_ABGR,
+ 		true,
+ 		true,
+ 		PixelFormatYCbCr_Invalid,
+@@ -146,7 +146,7 @@ static struct AVPixelFormat_t
+ 		  0x00FF0000,
+ 		  0x0000FF00,
+ 		  0x000000FF },
+-		avcodec::PIX_FMT_RGBA,
++		avcodec::AV_PIX_FMT_RGBA,
+ 		true,
+ 		true,
+ 		PixelFormatYCbCr_Invalid,
+@@ -157,7 +157,7 @@ static struct AVPixelFormat_t
+ 		  0x00FF00,
+ 		  0x0000FF,
+ 		  0x000000 },
+-		avcodec::PIX_FMT_RGB24,
++		avcodec::AV_PIX_FMT_RGB24,
+ 		true,
+ 		true,
+ 		PixelFormatYCbCr_Invalid,
+@@ -168,7 +168,7 @@ static struct AVPixelFormat_t
+ 		  0x00FF00,
+ 		  0xFF0000,
+ 		  0x000000 },
+-		avcodec::PIX_FMT_BGR24,
++		avcodec::AV_PIX_FMT_BGR24,
+ 		true,
+ 		true,
+ 		PixelFormatYCbCr_Invalid,
+@@ -179,12 +179,12 @@ static struct AVPixelFormat_t
+ 		  0x03E0,
+ 		  0x001F,
+ 		  0x0000 },
+-		avcodec::PIX_FMT_RGB555,
++		avcodec::AV_PIX_FMT_RGB555,
+ 		false,
+ 		false,
+ 		PixelFormatYCbCr_Invalid,
+ 	},
+-	{ 0, { 0,0,0,0 }, avcodec::PIX_FMT_NB, true, false, PixelFormatYCbCr_Invalid }
++	{ 0, { 0,0,0,0 }, avcodec::AV_PIX_FMT_NB, true, false, PixelFormatYCbCr_Invalid }
+ };
+ 
+ #endif
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/games/stepmania/default.nix b/nixpkgs/pkgs/games/stepmania/default.nix
new file mode 100644
index 000000000000..3ba39fde9c6c
--- /dev/null
+++ b/nixpkgs/pkgs/games/stepmania/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, fetchFromGitHub, cmake, nasm
+, gtk2, glib, ffmpeg_4, alsa-lib, libmad, libogg, libvorbis
+, glew, libpulseaudio, udev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stepmania";
+  version = "5.1.0-b2";
+
+  src = fetchFromGitHub {
+    owner = "stepmania";
+    repo  = "stepmania";
+    rev   = "v${version}";
+    sha256 = "0a7y9l7xm510vgnpmj1is7p9m6d6yd0fcaxrjcickz295k5w3rdn";
+  };
+
+  patches = [
+    ./0001-fix-build-with-ffmpeg-4.patch
+  ];
+
+  postPatch = ''
+    sed '1i#include <ctime>' -i src/arch/ArchHooks/ArchHooks.h # gcc12
+  '';
+
+  nativeBuildInputs = [ cmake nasm ];
+
+  buildInputs = [
+    gtk2 glib ffmpeg_4 alsa-lib libmad libogg libvorbis
+    glew libpulseaudio udev
+  ];
+
+  cmakeFlags = [
+    "-DWITH_SYSTEM_FFMPEG=1"
+    "-DGTK2_GDKCONFIG_INCLUDE_DIR=${gtk2.out}/lib/gtk-2.0/include"
+    "-DGTK2_GLIBCONFIG_INCLUDE_DIR=${glib.out}/lib/glib-2.0/include"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -s $out/stepmania-5.1/stepmania $out/bin/stepmania
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.stepmania.com/";
+    description = "Free dance and rhythm game for Windows, Mac, and Linux";
+    platforms = platforms.linux;
+    license = licenses.mit; # expat version
+    maintainers = [ ];
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/games/stockfish/default.nix b/nixpkgs/pkgs/games/stockfish/default.nix
new file mode 100644
index 000000000000..bd42da9c7028
--- /dev/null
+++ b/nixpkgs/pkgs/games/stockfish/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub }:
+
+let
+    # The x86-64-modern may need to be refined further in the future
+    # but stdenv.hostPlatform CPU flags do not currently work on Darwin
+    # https://discourse.nixos.org/t/darwin-system-and-stdenv-hostplatform-features/9745
+    archDarwin = if stdenv.isx86_64 then "x86-64-modern" else "x86-64";
+    arch = if stdenv.isDarwin then archDarwin else
+           if stdenv.isx86_64 then "x86-64" else
+           if stdenv.isi686 then "x86-32" else
+           if stdenv.isAarch64 then "armv8" else
+           "unknown";
+
+    nnueFile = "nn-5af11540bbfe.nnue";
+    nnue = fetchurl {
+      name = nnueFile;
+      url = "https://tests.stockfishchess.org/api/nn/${nnueFile}";
+      sha256 = "sha256-WvEVQLv+/LVOOMXdAAyrS0ad+nWZodVb5dJyLCCokps=";
+    };
+in
+
+stdenv.mkDerivation rec {
+  pname = "stockfish";
+  version = "16";
+
+  src = fetchFromGitHub {
+    owner = "official-stockfish";
+    repo = "Stockfish";
+    rev = "sf_${version}";
+    sha256 = "sha256-ASy2vIP94lnSKgxixK1GoC84yAysaJpxeyuggV4MrP4=";
+  };
+
+  # This addresses a linker issue with Darwin
+  # https://github.com/NixOS/nixpkgs/issues/19098
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    sed -i.orig '/^\#\#\# 3.*Link Time Optimization/,/^\#\#\# 3/d' Makefile
+  '';
+
+  postUnpack = ''
+    sourceRoot+=/src
+    echo ${nnue}
+    cp "${nnue}" "$sourceRoot/${nnueFile}"
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" "ARCH=${arch}" "CXX=${stdenv.cc.targetPrefix}c++" ];
+  buildFlags = [ "build" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://stockfishchess.org/";
+    description = "Strong open source chess engine";
+    longDescription = ''
+      Stockfish is one of the strongest chess engines in the world. It is also
+      much stronger than the best human chess grandmasters.
+      '';
+    maintainers = with maintainers; [ luispedro siraben ];
+    platforms = ["x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux"];
+    license = licenses.gpl3Only;
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/stone-kingdoms/default.nix b/nixpkgs/pkgs/games/stone-kingdoms/default.nix
new file mode 100644
index 000000000000..e49db727b9e8
--- /dev/null
+++ b/nixpkgs/pkgs/games/stone-kingdoms/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitLab
+, copyDesktopItems
+, love
+, makeDesktopItem
+, makeWrapper
+, strip-nondeterminism
+, zip
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "stone-kingdoms";
+  version = "0.5.0";
+
+  src = fetchFromGitLab {
+    owner = "stone-kingdoms";
+    repo = pname;
+    rev = version;
+    hash = "sha256-FQrg/1/nfFC/irCWSLbnb9GYSUv//ovvcjzvIg94oEI=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+    strip-nondeterminism
+    zip
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = pname;
+      icon = pname;
+      comment = "A real-time strategy game made with LÖVE based on the original Stronghold by Firefly studios";
+      desktopName = "Stone Kingdoms";
+      genericName = pname;
+      categories = [ "Game" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    zip -9 -r stone-kingdoms.love ./*
+    strip-nondeterminism --type zip stone-kingdoms.love
+    install -Dm755 -t $out/share/games/lovegames/ stone-kingdoms.love
+    install -Dm644 assets/other/icon.png $out/share/icons/hicolor/256x256/apps/stone-kingdoms.png
+    makeWrapper ${love}/bin/love $out/bin/stone-kingdoms \
+      --add-flags $out/share/games/lovegames/stone-kingdoms.love
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A real-time strategy game made with LÖVE based on the original Stronghold by Firefly studios";
+    homepage = "https://gitlab.com/stone-kingdoms/stone-kingdoms";
+    platforms = platforms.linux;
+    license = with licenses; [
+      asl20 # engine
+      unfree # game assets
+    ];
+    maintainers = with maintainers; [ hulr ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/stuntrally/default.nix b/nixpkgs/pkgs/games/stuntrally/default.nix
new file mode 100644
index 000000000000..b4b2268c33e9
--- /dev/null
+++ b/nixpkgs/pkgs/games/stuntrally/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, cmake
+, boost
+, ogre_13
+, mygui
+, ois
+, SDL2
+, libvorbis
+, pkg-config
+, makeWrapper
+, enet
+, libXcursor
+, bullet
+, openal
+, tinyxml
+, tinyxml-2
+}:
+
+let
+  stuntrally_ogre = ogre_13.overrideAttrs (old: {
+    cmakeFlags = old.cmakeFlags ++ [
+      "-DOGRE_NODELESS_POSITIONING=ON"
+      "-DOGRE_RESOURCEMANAGER_STRICT=0"
+    ];
+  });
+  stuntrally_mygui = mygui.override {
+    withOgre = true;
+    ogre = stuntrally_ogre;
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "stuntrally";
+  version = "2.7";
+
+  src = fetchFromGitHub {
+    owner = "stuntrally";
+    repo = "stuntrally";
+    rev = version;
+    hash = "sha256-0Eh9ilIHSh/Uz8TuPnXxLQfy7KF7qqNXUgBXQUCz9ys=";
+  };
+  tracks = fetchFromGitHub {
+    owner = "stuntrally";
+    repo = "tracks";
+    rev = version;
+    hash = "sha256-fglm1FetFGHM/qGTtpxDb8+k2iAREn5DQR5GPujuLms=";
+  };
+
+  preConfigure = ''
+    rmdir data/tracks
+    ln -s ${tracks}/ data/tracks
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+  buildInputs = [
+    boost
+    stuntrally_ogre
+    stuntrally_mygui
+    ois
+    SDL2
+    libvorbis
+    enet
+    libXcursor
+    bullet
+    openal
+    tinyxml
+    tinyxml-2
+  ];
+
+  meta = with lib; {
+    description = "Stunt Rally game with Track Editor, based on VDrift and OGRE";
+    homepage = "http://stuntrally.tuxfamily.org/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/super-tux-kart/default.nix b/nixpkgs/pkgs/games/super-tux-kart/default.nix
new file mode 100644
index 000000000000..d92f01cad37a
--- /dev/null
+++ b/nixpkgs/pkgs/games/super-tux-kart/default.nix
@@ -0,0 +1,152 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchsvn
+, cmake
+, pkg-config
+, makeWrapper
+, SDL2
+, glew
+, openal
+, OpenAL
+, libvorbis
+, libogg
+, curl
+, freetype
+, libjpeg
+, libpng
+, harfbuzz
+, mcpp
+, wiiuse
+, angelscript
+, libopenglrecorder
+, sqlite
+, Cocoa
+, IOKit
+, IOBluetooth
+, libsamplerate
+, shaderc
+}:
+let
+  assets = fetchsvn {
+    url = "https://svn.code.sf.net/p/supertuxkart/code/stk-assets";
+    rev = "18464";
+    sha256 = "1a84j3psl4cxzkn5ynakpjill7i2f9ki2p729bpmbrvg8fki95aa";
+    name = "stk-assets";
+  };
+
+  # List of bundled libraries in stk-code/lib to keep
+  # Those are the libraries that cannot be replaced
+  # with system packages.
+  bundledLibraries = [
+    # Bullet 2.87 is incompatible (bullet 2.79 needed whereas 2.87 is packaged)
+    # The api changed in a lot of classes, too much work to adapt
+    "bullet"
+    # Upstream Libenet doesn't yet support IPv6,
+    # So we will use the bundled libenet which
+    # has been fixed to support it.
+    "enet"
+    # Internal library of STK, nothing to do about it
+    "graphics_engine"
+    # Internal library of STK, nothing to do about it
+    "graphics_utils"
+    # Internal library.
+    "simd_wrapper"
+    # This irrlicht is bundled with cmake
+    # whereas upstream irrlicht still uses
+    # archaic Makefiles, too complicated to switch to.
+    "irrlicht"
+    # Not packaged to this date
+    "libsquish"
+    # Not packaged to this date
+    "sheenbidi"
+    # Not packaged to this date
+    "tinygettext"
+    # Not packaged to this date (needed on Darwin)
+    "mojoal"
+  ];
+in
+stdenv.mkDerivation rec {
+
+  pname = "supertuxkart";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "supertuxkart";
+    repo = "stk-code";
+    rev = version;
+    hash = "sha256-gqdaVvgNfCN40ZO/9y8+vTeIJPSq6udKxYZ/MAi4ZMM=";
+  };
+
+  postPatch = ''
+    # Deletes all bundled libs in stk-code/lib except those
+    # That couldn't be replaced with system packages
+    find lib -maxdepth 1 -type d | egrep -v "^lib$|${(lib.concatStringsSep "|" bundledLibraries)}" | xargs -n1 -L1 -r -I{} rm -rf {}
+
+    # Allow building with system-installed wiiuse on Darwin
+    substituteInPlace CMakeLists.txt \
+      --replace 'NOT (APPLE OR HAIKU)) AND USE_SYSTEM_WIIUSE' 'NOT (HAIKU)) AND USE_SYSTEM_WIIUSE'
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    shaderc
+    SDL2
+    glew
+    libvorbis
+    libogg
+    freetype
+    curl
+    libjpeg
+    libpng
+    harfbuzz
+    mcpp
+    wiiuse
+    angelscript
+    sqlite
+  ]
+  ++ lib.optional (stdenv.hostPlatform.isWindows || stdenv.hostPlatform.isLinux) libopenglrecorder
+  ++ lib.optional stdenv.hostPlatform.isLinux openal
+  ++ lib.optionals stdenv.hostPlatform.isDarwin [ OpenAL IOKit Cocoa IOBluetooth libsamplerate ];
+
+  cmakeFlags = [
+    "-DBUILD_RECORDER=${if (stdenv.hostPlatform.isWindows || stdenv.hostPlatform.isLinux) then "ON" else "OFF"}"
+    "-DUSE_SYSTEM_ANGELSCRIPT=ON"
+    "-DCHECK_ASSETS=OFF"
+    "-DUSE_SYSTEM_WIIUSE=ON"
+    "-DOpenGL_GL_PREFERENCE=GLVND"
+  ];
+
+  # Extract binary from built app bundle
+  postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
+    mkdir $out/bin
+    mv $out/{supertuxkart.app/Contents/MacOS,bin}/supertuxkart
+    rm -rf $out/supertuxkart.app
+  '';
+
+  # Obtain the assets directly from the fetched store path, to avoid duplicating assets across multiple engine builds
+  preFixup = ''
+    wrapProgram $out/bin/supertuxkart \
+      --set-default SUPERTUXKART_ASSETS_DIR "${assets}" \
+      --set-default SUPERTUXKART_DATADIR "$out/share/supertuxkart" \
+  '';
+
+  meta = with lib; {
+    description = "A Free 3D kart racing game";
+    longDescription = ''
+      SuperTuxKart is a Free 3D kart racing game, with many tracks,
+      characters and items for you to try, similar in spirit to Mario
+      Kart.
+    '';
+    homepage = "https://supertuxkart.net/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pyrolagus peterhoeg ];
+    platforms = with platforms; unix;
+    changelog = "https://github.com/supertuxkart/stk-code/blob/${version}/CHANGELOG.md";
+  };
+}
diff --git a/nixpkgs/pkgs/games/supertux/default.nix b/nixpkgs/pkgs/games/supertux/default.nix
new file mode 100644
index 000000000000..857617bc4bfa
--- /dev/null
+++ b/nixpkgs/pkgs/games/supertux/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, pkg-config
+, boost
+, curl
+, SDL2
+, SDL2_image
+, libSM
+, libXext
+, libpng
+, freetype
+, libGLU
+, libGL
+, glew
+, glm
+, openal
+, libogg
+, libvorbis
+}:
+
+stdenv.mkDerivation rec {
+  pname = "supertux";
+  version = "0.6.3";
+
+  src = fetchurl {
+    url = "https://github.com/SuperTux/supertux/releases/download/v${version}/SuperTux-v${version}-Source.tar.gz";
+    sha256 = "1xkr3ka2sxp5s0spp84iv294i29s1vxqzazb6kmjc0n415h0x57p";
+  };
+
+  postPatch = ''
+    sed '1i#include <memory>' -i external/partio_zip/zip_manager.hpp # gcc12
+  '';
+
+  nativeBuildInputs = [ pkg-config cmake ];
+
+  buildInputs = [
+    boost
+    curl
+    SDL2
+    SDL2_image
+    libSM
+    libXext
+    libpng
+    freetype
+    libGL
+    libGLU
+    glew
+    glm
+    openal
+    libogg
+    libvorbis
+  ];
+
+  cmakeFlags = [ "-DENABLE_BOOST_STATIC_LIBS=OFF" ];
+
+  postInstall = ''
+    mkdir $out/bin
+    ln -s $out/games/supertux2 $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Classic 2D jump'n run sidescroller game";
+    homepage = "https://supertux.github.io/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; linux;
+    mainProgram = "supertux2";
+  };
+}
diff --git a/nixpkgs/pkgs/games/system-syzygy/Cargo.lock b/nixpkgs/pkgs/games/system-syzygy/Cargo.lock
new file mode 100644
index 000000000000..9c08a1c193dc
--- /dev/null
+++ b/nixpkgs/pkgs/games/system-syzygy/Cargo.lock
@@ -0,0 +1,325 @@
+[[package]]
+name = "adler32"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "ahi"
+version = "0.1.0"
+source = "git+https://github.com/mdsteele/ahi?tag=v0.1.0#8dfd2b39ba35d77a3260d95d53369c149e875ecf"
+
+[[package]]
+name = "app_dirs"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "shell32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bitflags"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bitflags"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "byteorder"
+version = "1.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "deflate"
+version = "0.7.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.2.6 (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.0.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 = "gcc"
+version = "0.3.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "getopts"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "glob"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "ico"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "png 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "inflate"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "itersynth"
+version = "0.1.0"
+source = "git+https://github.com/mdsteele/itersynth?tag=v0.1.0#bc1e3ffe726c80e3a931bf9e58f4a98f213c2bf5"
+
+[[package]]
+name = "lazy_static"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "libc"
+version = "0.2.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "num"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-iter 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "ole32-sys"
+version = "0.2.0"
+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 = "png"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "deflate 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "inflate 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-iter 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "sdl2"
+version = "0.31.0"
+source = "git+https://github.com/mdsteele/rust-sdl2?branch=hash#f277981d55f68be33a64c33871b23c4c405e0763"
+dependencies = [
+ "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sdl2-sys 0.31.0 (git+https://github.com/mdsteele/rust-sdl2?branch=hash)",
+]
+
+[[package]]
+name = "sdl2-sys"
+version = "0.31.0"
+source = "git+https://github.com/mdsteele/rust-sdl2?branch=hash#f277981d55f68be33a64c33871b23c4c405e0763"
+dependencies = [
+ "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "shell32-sys"
+version = "0.1.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 = "syzygy"
+version = "1.0.1"
+dependencies = [
+ "ahi 0.1.0 (git+https://github.com/mdsteele/ahi?tag=v0.1.0)",
+ "app_dirs 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ico 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itersynth 0.1.0 (git+https://github.com/mdsteele/itersynth?tag=v0.1.0)",
+ "num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sdl2 0.31.0 (git+https://github.com/mdsteele/rust-sdl2?branch=hash)",
+ "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winres 0.1.6 (git+https://github.com/mdsteele/winres?branch=escape)",
+]
+
+[[package]]
+name = "toml"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "serde 1.0.36 (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.4"
+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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winres"
+version = "0.1.6"
+source = "git+https://github.com/mdsteele/winres?branch=escape#d88139c3e1c2592bf14d1a4323c18103a21fe190"
+dependencies = [
+ "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "xdg"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c"
+"checksum ahi 0.1.0 (git+https://github.com/mdsteele/ahi?tag=v0.1.0)" = "<none>"
+"checksum app_dirs 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e73a24bad9bd6a94d6395382a6c69fe071708ae4409f763c5475e14ee896313d"
+"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"
+"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf"
+"checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781"
+"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
+"checksum deflate 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)" = "8a6abb26e16e8d419b5c78662aa9f82857c2386a073da266840e474d5055ec86"
+"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 gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb"
+"checksum getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)" = "b900c08c1939860ce8b54dc6a89e26e00c04c380fd0e09796799bd7f12861e05"
+"checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
+"checksum ico 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6a4b3331534254a9b64095ae60d3dc2a8225a7a70229cd5888be127cdc1f6804"
+"checksum inflate 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f5f9f47468e9a76a6452271efadc88fe865a82be91fe75e6c0c57b87ccea59d4"
+"checksum itersynth 0.1.0 (git+https://github.com/mdsteele/itersynth?tag=v0.1.0)" = "<none>"
+"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
+"checksum libc 0.2.40 (registry+https://github.com/rust-lang/crates.io-index)" = "6fd41f331ac7c5b8ac259b8bf82c75c0fb2e469bbf37d2becbba9a6a2221965b"
+"checksum num 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
+"checksum num-integer 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f8d26da319fb45674985c78f1d1caf99aa4941f785d384a2ae36d0740bc3e2fe"
+"checksum num-iter 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "4b226df12c5a59b63569dd57fafb926d91b385dfce33d8074a412411b689d593"
+"checksum num-traits 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dee092fcdf725aee04dd7da1d21debff559237d49ef1cb3e69bcb8ece44c7364"
+"checksum ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c"
+"checksum png 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925"
+"checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1"
+"checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5"
+"checksum sdl2 0.31.0 (git+https://github.com/mdsteele/rust-sdl2?branch=hash)" = "<none>"
+"checksum sdl2-sys 0.31.0 (git+https://github.com/mdsteele/rust-sdl2?branch=hash)" = "<none>"
+"checksum serde 1.0.36 (registry+https://github.com/rust-lang/crates.io-index)" = "c70142ae874a42c70e03c63c6a49abe2ea0079b090bf6e136e99252fc1974bd6"
+"checksum shell32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ee04b46101f57121c9da2b151988283b6beb79b34f5bb29a58ee48cb695122c"
+"checksum toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3"
+"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-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+"checksum winres 0.1.6 (git+https://github.com/mdsteele/winres?branch=escape)" = "<none>"
+"checksum xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a66b7c2281ebde13cf4391d70d4c7e5946c3c25e72a7b859ca8f677dcd0b0c61"
diff --git a/nixpkgs/pkgs/games/system-syzygy/default.nix b/nixpkgs/pkgs/games/system-syzygy/default.nix
new file mode 100644
index 000000000000..c6591749a69b
--- /dev/null
+++ b/nixpkgs/pkgs/games/system-syzygy/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, fetchurl, SDL2, makeWrapper, makeDesktopItem}:
+
+let
+  desktopFile = makeDesktopItem {
+    name = "system-syzygy";
+    exec = "@out@/bin/syzygy";
+    comment = "A puzzle game";
+    desktopName = "System Syzygy";
+    categories = [ "Game" ];
+  };
+in
+rustPlatform.buildRustPackage rec {
+  pname = "system-syzygy";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "mdsteele";
+    repo = "syzygy";
+    rev = "5ba148fed7aae14bf35108d7303e4194e8ffe5e8";
+    sha256 = "07mzwx8ql33q865snnw4gm3dgf0mnm60lnq1f5fgas2yjy9g9vwa";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ SDL2 ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "ahi-0.1.0" = "sha256-EliAObznLP1wkk8r3c3hhB300HYnEd9N6CJW+xG6bxE=";
+      "itersynth-0.1.0" = "sha256-dXQ+uBFchcnOjKF/CcS+AwhzFzejk2JCvvKMfS64RRQ=";
+      "sdl2-0.31.0" = "sha256-wTam0hwiajdw/ub2yM6q7+50Y3AueStcK5HLa65Y2XQ=";
+      "winres-0.1.6" = "sha256-7jYrgc3BV2UmzfACc/xyYsTkaXBPfn+bLmwdrcBe1O0=";
+    };
+  };
+
+  postInstall = ''
+    mkdir -p $out/share/syzygy/
+    cp -r ${src}/data/* $out/share/syzygy/
+    wrapProgram $out/bin/syzygy --set SYZYGY_DATA_DIR $out/share/syzygy
+    mkdir -p $out/share/applications
+    substituteAll ${desktopFile}/share/applications/system-syzygy.desktop $out/share/applications/system-syzygy.desktop
+  '';
+
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A story and a puzzle game, where you solve a variety of puzzle";
+    homepage = "https://mdsteele.games/syzygy";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.marius851000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/t4kcommon/default.nix b/nixpkgs/pkgs/games/t4kcommon/default.nix
new file mode 100644
index 000000000000..b9f9635321b8
--- /dev/null
+++ b/nixpkgs/pkgs/games/t4kcommon/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, cmake, pkg-config, SDL, SDL_image, SDL_mixer, SDL_net, SDL_ttf, libpng, librsvg, libxml2 }:
+
+stdenv.mkDerivation rec {
+  version = "0.1.1";
+  pname = "t4kcommon";
+
+  src = fetchFromGitHub {
+    owner = "tux4kids";
+    repo = "t4kcommon";
+    rev = "upstream/${version}";
+    sha256 = "13q02xpmps9qg8zrzzy2gzv4a6afgi28lxk4z242j780v0gphchp";
+  };
+
+  patches = [
+    # patch from debian to support libpng16 instead of libpng12
+    (fetchurl {
+      url = "https://salsa.debian.org/tux4kids-pkg-team/t4kcommon/raw/f7073fa384f5a725139f54844e59b57338b69dc7/debian/patches/libpng16.patch";
+      sha256 = "1lcpkdy5gvxgljg1vkrxych74amq0gramb1snj2831dam48is054";
+    })
+  ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: CMakeFiles/t4k_common.dir/t4k_throttle.c.o:(.bss+0x0): multiple definition of
+  #     `wrapped_lines'; CMakeFiles/t4k_common.dir/t4k_audio.c.o:(.bss+0x0): first defined here
+  # TODO: revisit https://github.com/tux4kids/t4kcommon/pull/10 when merged.
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ SDL SDL_image SDL_mixer SDL_net SDL_ttf libpng librsvg libxml2 ];
+
+  meta = with lib; {
+    description = "A library of code shared between tuxmath and tuxtype";
+    homepage = "https://github.com/tux4kids/t4kcommon";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.aanderse ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/taisei/0001-lto-fix.patch b/nixpkgs/pkgs/games/taisei/0001-lto-fix.patch
new file mode 100644
index 000000000000..eed7b845f53c
--- /dev/null
+++ b/nixpkgs/pkgs/games/taisei/0001-lto-fix.patch
@@ -0,0 +1,13 @@
+diff --git a/meson.build b/meson.build
+index 80aa58d..c7e9d0a 100644
+--- a/meson.build
++++ b/meson.build
+@@ -17,7 +17,7 @@ project('taisei', 'c',
+         # You may want to change these for a debug build dir
+         'buildtype=release',
+         'strip=true',
+-        'b_lto=true',
++        'b_lto=false',
+         'b_ndebug=if-release',
+     ]
+ )
diff --git a/nixpkgs/pkgs/games/taisei/default.nix b/nixpkgs/pkgs/games/taisei/default.nix
new file mode 100644
index 000000000000..886768786c10
--- /dev/null
+++ b/nixpkgs/pkgs/games/taisei/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl
+# Build depends
+, docutils, meson, ninja, pkg-config, python3
+# Runtime depends
+, glfw, SDL2, SDL2_mixer
+, cglm, freetype, libpng, libwebp, libzip, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "taisei";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "https://github.com/taisei-project/${pname}/releases/download/v${version}/${pname}-v${version}.tar.xz";
+    sha256 = "1g53fcyrlzmvlsb40pw90gaglysv6n1w42hk263iv61ibhdmzh6v";
+  };
+
+  nativeBuildInputs = [
+    docutils meson ninja pkg-config python3
+  ];
+
+  buildInputs = [
+    glfw SDL2 SDL2_mixer
+    cglm freetype libpng libwebp libzip zlib
+  ];
+
+  patches = [ ./0001-lto-fix.patch ];
+
+  preConfigure = ''
+    patchShebangs .
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A free and open-source Touhou Project clone and fangame";
+    longDescription = ''
+      Taisei is an open clone of the TÅhÅ Project series. TÅhÅ is a one-man
+      project of shoot-em-up games set in an isolated world full of Japanese
+      folklore.
+    '';
+    homepage = "https://taisei-project.org/";
+    license = [ licenses.mit licenses.cc-by-40 ];
+    maintainers = [ maintainers.lambda-11235 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tcl2048/default.nix b/nixpkgs/pkgs/games/tcl2048/default.nix
new file mode 100644
index 000000000000..b74d3630e0e6
--- /dev/null
+++ b/nixpkgs/pkgs/games/tcl2048/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, tcl, tcllib, runtimeShell }:
+
+tcl.mkTclDerivation rec {
+  pname = "tcl2048";
+  version = "0.4.0";
+
+  src = fetchurl {
+    url = "https://raw.githubusercontent.com/dbohdan/2048.tcl/v${version}/2048.tcl";
+    sha256 = "53f5503efd7f029b2614b0f9b1e3aac6c0342735a3c9b811d74a5135fee3e89e";
+  };
+
+  buildInputs = [ tcllib ];
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -pv $out/bin
+    install -m 755 $src $out/bin/2048
+  '';
+
+  meta = {
+    homepage = "https://github.com/dbohdan/2048.tcl";
+    description = "The game of 2048 implemented in Tcl";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dbohdan ];
+    mainProgram = "2048";
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tecnoballz/default.nix b/nixpkgs/pkgs/games/tecnoballz/default.nix
new file mode 100644
index 000000000000..6366e0ab06a5
--- /dev/null
+++ b/nixpkgs/pkgs/games/tecnoballz/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchurl
+, autoconf
+, automake
+, SDL
+, SDL_mixer
+, SDL_image
+, libmikmod
+, tinyxml
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tecnoballz";
+  version = "0.93.1";
+
+  src = fetchurl {
+    url = "https://linux.tlk.fr/games/TecnoballZ/download/tecnoballz-${version}.tgz";
+    sha256 = "sha256-WRW76e+/eXE/KwuyOjzTPFQnKwNznbIrUrz14fnvgug=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+  ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+    SDL_image
+    libmikmod
+    tinyxml
+  ];
+
+  # Newer compilers introduced warnings
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace "-Werror" ""
+  '';
+
+  preConfigure = ''
+    ./bootstrap
+  '';
+
+  installFlags = [
+    # Default is $(out)/games
+    "gamesdir=$(out)/bin"
+    # We set the scoredir to $TMPDIR at install time.
+    # Otherwise it will try to write in /var/games at install time
+    "scoredir=$(TMPDIR)"
+  ];
+
+  meta = with lib; {
+    homepage = "https://linux.tlk.fr/games/TecnoballZ/";
+    downloadPage = "https://linux.tlk.fr/games/TecnoballZ/download/";
+    description = "A brick breaker game with a sophisticated system of weapons and bonuses";
+    longDescription = ''
+      A exciting Brick Breaker with 50 levels of game and 11 special levels,
+      distributed on the 2 modes of game to give the player a sophisticated
+      system of attack weapons with an enormous power of fire that can be build
+      by gaining bonuses. Numerous decors, musics and sounds complete this great
+      game. This game was ported from the Commodore Amiga.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/teetertorture/default.nix b/nixpkgs/pkgs/games/teetertorture/default.nix
new file mode 100644
index 000000000000..6e18dbae07b2
--- /dev/null
+++ b/nixpkgs/pkgs/games/teetertorture/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, SDL, SDL_image, SDL_mixer }:
+
+stdenv.mkDerivation rec {
+  pname = "teeter-torture";
+  version = "2005-10-18";
+  src = fetchurl {
+    url = "ftp://ftp.tuxpaint.org/unix/x/teetertorture/source/teetertorture-${version}.tar.gz";
+    sha256 = "175gdbkx3m82icyzvwpyzs4v2fd69c695k5n8ca0lnjv81wnw2hr";
+  };
+
+  buildInputs = [ SDL SDL_image SDL_mixer];
+
+  configurePhase = ''
+    sed -i s,data/,$out/share/teetertorture/, src/teetertorture.c
+  '';
+
+  patchPhase = ''
+    sed -i '/free(home)/d' src/teetertorture.c
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/teetertorture
+    cp teetertorture $out/bin
+    cp -R data/* $out/share/teetertorture
+  '';
+
+  meta = {
+    homepage = "http://www.newbreedsoftware.com/teetertorture/";
+    description = "Simple shooting game with your cannon is sitting atop a teeter totter";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/teeworlds/default.nix b/nixpkgs/pkgs/games/teeworlds/default.nix
new file mode 100644
index 000000000000..e12c19f6cb6a
--- /dev/null
+++ b/nixpkgs/pkgs/games/teeworlds/default.nix
@@ -0,0 +1,90 @@
+{ fetchFromGitHub, lib, stdenv, cmake, pkg-config, python3, alsa-lib
+, libX11, libGLU, SDL2, lua5_3, zlib, freetype, wavpack, icoutils
+, nixosTests
+, Carbon
+, Cocoa
+}:
+
+stdenv.mkDerivation rec {
+  pname = "teeworlds";
+  version = "0.7.5";
+
+  src = fetchFromGitHub {
+    owner = "teeworlds";
+    repo = "teeworlds";
+    rev = version;
+    sha256 = "1l19ksmimg6b8zzjy0skyhh7z11ql7n5gvilkv7ay5x2b9ndbqwz";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # Can't use fetchpatch or fetchpatch2 because of https://github.com/NixOS/nixpkgs/issues/32084
+    # Using fetchurl instead is also not a good idea, see https://github.com/NixOS/nixpkgs/issues/32084#issuecomment-727223713
+    ./rename-VERSION-to-VERSION.txt.patch
+  ];
+
+  postPatch = ''
+    # set compiled-in DATA_DIR so resources can be found
+    substituteInPlace src/engine/shared/storage.cpp \
+      --replace '#define DATA_DIR "data"' \
+                '#define DATA_DIR "${placeholder "out"}/share/teeworlds/data"'
+
+    # Quote nonsense is a workaround for https://github.com/NixOS/nix/issues/661
+    substituteInPlace 'other/bundle/client/Info.plist.in' \
+      --replace ${"'"}''${TARGET_CLIENT}' 'teeworlds' \
+      --replace ${"'"}''${PROJECT_VERSION}' '${version}'
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ] ++ lib.optionals stdenv.isLinux [
+    icoutils
+  ];
+
+  buildInputs = [
+    python3 libGLU SDL2 lua5_3 zlib freetype wavpack
+  ] ++ lib.optionals stdenv.isLinux [
+    alsa-lib
+    libX11
+  ] ++ lib.optionals stdenv.isDarwin [
+    Carbon
+    Cocoa
+  ];
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    # Convert and install desktop icon
+    mkdir -p $out/share/pixmaps
+    icotool --extract --index 1 --output $out/share/pixmaps/teeworlds.png $src/other/icons/teeworlds.ico
+
+    # Install menu item
+    install -D $src/other/teeworlds.desktop $out/share/applications/teeworlds.desktop
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir -p "$out/Applications/teeworlds.app/Contents/MacOS"
+    mkdir -p "$out/Applications/teeworlds.app/Contents/Resources"
+
+    cp '../other/icons/teeworlds.icns' "$out/Applications/teeworlds.app/Contents/Resources/"
+    cp '../other/bundle/client/Info.plist.in' "$out/Applications/teeworlds.app/Contents/Info.plist"
+    cp '../other/bundle/client/PkgInfo' "$out/Applications/teeworlds.app/Contents/"
+    ln -s "$out/bin/teeworlds" "$out/Applications/teeworlds.app/Contents/MacOS/"
+    ln -s "$out/share/teeworlds/data" "$out/Applications/teeworlds.app/Contents/Resources/data"
+  '';
+
+  passthru.tests.teeworlds = nixosTests.teeworlds;
+
+  meta = {
+    description = "Retro multiplayer shooter game";
+
+    longDescription = ''
+      Teeworlds is a free online multiplayer game, available for all
+      major operating systems.  Battle with up to 12 players in a
+      variety of game modes, including Team Deathmatch and Capture The
+      Flag.  You can even design your own maps!
+    '';
+
+    homepage = "https://teeworlds.com/";
+    license = "BSD-style, see `license.txt'";
+    maintainers = with lib.maintainers; [ astsmtl Luflosi ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/teeworlds/rename-VERSION-to-VERSION.txt.patch b/nixpkgs/pkgs/games/teeworlds/rename-VERSION-to-VERSION.txt.patch
new file mode 100644
index 000000000000..4d56286cb40a
--- /dev/null
+++ b/nixpkgs/pkgs/games/teeworlds/rename-VERSION-to-VERSION.txt.patch
@@ -0,0 +1,33 @@
+From 86d6687ef07f7f05457a7f67537b650656b13820 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Robert=20M=C3=BCller?= <robert.mueller@uni-siegen.de>
+Date: Fri, 15 Oct 2021 23:45:50 +0200
+Subject: [PATCH] rename VERSION to VERSION.txt:
+
+Fixes compilation on systems with case insensitive file names where the standard library includes the version file source code.
+---
+ src/engine/external/json-parser/{VERSION => VERSION.txt} | 0
+ src/engine/external/pnglite/{VERSION => VERSION.txt}     | 0
+ src/engine/external/wavpack/{VERSION => VERSION.txt}     | 0
+ src/engine/external/zlib/{VERSION => VERSION.txt}        | 0
+ 4 files changed, 0 insertions(+), 0 deletions(-)
+ rename src/engine/external/json-parser/{VERSION => VERSION.txt} (100%)
+ rename src/engine/external/pnglite/{VERSION => VERSION.txt} (100%)
+ rename src/engine/external/wavpack/{VERSION => VERSION.txt} (100%)
+ rename src/engine/external/zlib/{VERSION => VERSION.txt} (100%)
+
+diff --git a/src/engine/external/json-parser/VERSION b/src/engine/external/json-parser/VERSION.txt
+similarity index 100%
+rename from src/engine/external/json-parser/VERSION
+rename to src/engine/external/json-parser/VERSION.txt
+diff --git a/src/engine/external/pnglite/VERSION b/src/engine/external/pnglite/VERSION.txt
+similarity index 100%
+rename from src/engine/external/pnglite/VERSION
+rename to src/engine/external/pnglite/VERSION.txt
+diff --git a/src/engine/external/wavpack/VERSION b/src/engine/external/wavpack/VERSION.txt
+similarity index 100%
+rename from src/engine/external/wavpack/VERSION
+rename to src/engine/external/wavpack/VERSION.txt
+diff --git a/src/engine/external/zlib/VERSION b/src/engine/external/zlib/VERSION.txt
+similarity index 100%
+rename from src/engine/external/zlib/VERSION
+rename to src/engine/external/zlib/VERSION.txt
diff --git a/nixpkgs/pkgs/games/tennix/default.nix b/nixpkgs/pkgs/games/tennix/default.nix
new file mode 100644
index 000000000000..e5b2b358f329
--- /dev/null
+++ b/nixpkgs/pkgs/games/tennix/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchgit, which, SDL, SDL_mixer, SDL_image, SDL_ttf, SDL_net, python3 } :
+
+stdenv.mkDerivation rec {
+  pname = "tennix";
+  version = "1.3.1";
+
+  src = fetchgit {
+    url = "git://repo.or.cz/tennix.git";
+    rev = "refs/tags/tennix-${version}";
+    sha256 = "sha256-U5+S1jEeg+7gdM1++dln6ePTqxZu2Zt0oUrH3DIlkgk=";
+  };
+
+  nativeBuildInputs = [ which ];
+
+  buildInputs = [ python3 SDL SDL_mixer SDL_image SDL_ttf SDL_net ];
+
+  configurePhase = ''
+    ./configure --prefix $out
+  '';
+
+  meta = with lib; {
+    homepage = "http://icculus.org/tennix/";
+    description = "Classic Championship Tour 2011";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/tennix/fix_FTBFS.patch b/nixpkgs/pkgs/games/tennix/fix_FTBFS.patch
new file mode 100644
index 000000000000..d58aa3a8129f
--- /dev/null
+++ b/nixpkgs/pkgs/games/tennix/fix_FTBFS.patch
@@ -0,0 +1,288 @@
+From: Thomas Perl <m@thp.io>
+Description: Fix FTBFS 
+Origin: upstream, https://repo.or.cz/w/tennix.git/commitdiff/6144cb7626dfdc0820a0036af83a531e8e68bae6
+Bug-Debian:  https://bugs.debian.org/664907
+
+--- tennix-1.1.orig/archivetool.cc
++++ tennix-1.1/archivetool.cc
+@@ -24,6 +24,7 @@
+ #include <assert.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <libgen.h>
+ #include <sys/stat.h>
+ 
+ #include "archive.hh"
+--- tennix-1.1.orig/game.c
++++ tennix-1.1/game.c
+@@ -388,6 +388,9 @@ void step(GameState* s) {
+                         s->ball.move_x = 4.0 + 3.0*PLAYER(s, p).power/PLAYER_POWER_MAX;
+                         s->ball.move_z = 1.1*PLAYER(s, p).power/PLAYER_POWER_MAX;
+                         break;
++                    default:
++                        assert(false);
++                        break;
+                 }
+                 s->ball.move_y = get_move_y( s, p);
+                 s->sound_events ^= SOUND_EVENT_RACKET;
+--- tennix-1.1.orig/network.h
++++ tennix-1.1/network.h
+@@ -103,19 +103,19 @@ void
+ net_serialize_ball(const Ball* src, NetworkBall* dest);
+ 
+ void
+-net_unserialize_ball(const NetworkBall* src, Ball* dest);
++net_unserialize_ball(NetworkBall* src, Ball* dest);
+ 
+ void
+ net_serialize_player(const Player* src, NetworkPlayer* dest);
+ 
+ void
+-net_unserialize_player(const NetworkPlayer* src, Player* dest);
++net_unserialize_player(NetworkPlayer* src, Player* dest);
+ 
+ void
+ net_serialize_gamestate(const GameState* src, NetworkGameState* dest);
+ 
+ void
+-net_unserialize_gamestate(const NetworkGameState* src, GameState* dest);
++net_unserialize_gamestate(NetworkGameState* src, GameState* dest);
+ 
+ #endif
+ 
+--- tennix-1.1.orig/locations.h
++++ tennix-1.1/locations.h
+@@ -155,7 +155,7 @@ static Location locations[] = {
+ #endif
+ 
+     /* End marker */
+-    { NULL, NULL, NULL, 0, 0, NULL, 0, 0, 0, 0, false }
++    { NULL, NULL, NULL, 0, 0, NULL, 0, 0, 0, 0, false, false, 0, 0 }
+ };
+ 
+ unsigned int location_count()
+--- tennix-1.1.orig/tennix.cc
++++ tennix-1.1/tennix.cc
+@@ -461,7 +461,7 @@ int main( int argc, char** argv) {
+                 start_fade();
+                 gameloop(current_game, connection);
+                 SDL_Delay(150);
+-                while(SDL_PollEvent(&e));
++                while (SDL_PollEvent(&e)) {};
+ #ifdef ENABLE_FPS_LIMIT
+                 frames = 0;
+                 ft = SDL_GetTicks();
+--- tennix-1.1.orig/SDL_rotozoom.c
++++ tennix-1.1/SDL_rotozoom.c
+@@ -365,6 +365,9 @@ int zoomSurfaceRGBA(SDL_Surface * src, S
+ 

+ int zoomSurfaceY(SDL_Surface * src, SDL_Surface * dst, int flipx, int flipy)

+ {

++    (void)flipx;

++    (void)flipy;

++

+     Uint32 x, y, sx, sy, *sax, *say, *csax, *csay, csx, csy;

+     Uint8 *sp, *dp, *csp;

+     int dgap;

+@@ -393,7 +396,7 @@ int zoomSurfaceY(SDL_Surface * src, SDL_
+      */

+     csx = 0;

+     csax = sax;

+-    for (x = 0; x < dst->w; x++) {

++    for (x = 0; x < (Uint32)dst->w; x++) {

+ 	csx += sx;

+ 	*csax = (csx >> 16);

+ 	csx &= 0xffff;

+@@ -401,7 +404,7 @@ int zoomSurfaceY(SDL_Surface * src, SDL_
+     }

+     csy = 0;

+     csay = say;

+-    for (y = 0; y < dst->h; y++) {

++    for (y = 0; y < (Uint32)dst->h; y++) {

+ 	csy += sy;

+ 	*csay = (csy >> 16);

+ 	csy &= 0xffff;

+@@ -410,13 +413,13 @@ int zoomSurfaceY(SDL_Surface * src, SDL_
+ 

+     csx = 0;

+     csax = sax;

+-    for (x = 0; x < dst->w; x++) {

++    for (x = 0; x < (Uint32)dst->w; x++) {

+ 	csx += (*csax);

+ 	csax++;

+     }

+     csy = 0;

+     csay = say;

+-    for (y = 0; y < dst->h; y++) {

++    for (y = 0; y < (Uint32)dst->h; y++) {

+ 	csy += (*csay);

+ 	csay++;

+     }

+@@ -432,10 +435,10 @@ int zoomSurfaceY(SDL_Surface * src, SDL_
+      * Draw 

+      */

+     csay = say;

+-    for (y = 0; y < dst->h; y++) {

++    for (y = 0; y < (Uint32)dst->h; y++) {

+ 	csax = sax;

+ 	sp = csp;

+-	for (x = 0; x < dst->w; x++) {

++	for (x = 0; x < (Uint32)dst->w; x++) {

+ 	    /*

+ 	     * Draw 

+ 	     */

+@@ -801,6 +804,8 @@ SDL_Surface* rotateSurface90Degrees(SDL_
+ void rotozoomSurfaceSizeTrig(int width, int height, double angle, double zoomx, double zoomy, int *dstwidth, int *dstheight, 

+ 			     double *canglezoom, double *sanglezoom)

+ {

++    (void)zoomy;

++

+     double x, y, cx, cy, sx, sy;

+     double radangle;

+     int dstwidthhalf, dstheighthalf;

+--- tennix-1.1.orig/network.c
++++ tennix-1.1/network.c
+@@ -183,7 +183,7 @@ net_serialize_ball(const Ball* src, Netw
+ }
+ 
+ void
+-net_unserialize_ball(const NetworkBall* src, Ball* dest)
++net_unserialize_ball(NetworkBall* src, Ball* dest)
+ {
+     assert(src != NULL && dest != NULL);
+     dest->x = unpack_float(SDLNet_Read32(&(src->x)), -WIDTH, WIDTH*2);
+@@ -213,7 +213,7 @@ net_serialize_player(const Player* src,
+ }
+ 
+ void
+-net_unserialize_player(const NetworkPlayer* src, Player* dest)
++net_unserialize_player(NetworkPlayer* src, Player* dest)
+ {
+     assert(src != NULL && dest != NULL);
+     dest->x = unpack_float(SDLNet_Read32(&(src->x)), 0, WIDTH*1.2);
+@@ -221,7 +221,7 @@ net_unserialize_player(const NetworkPlay
+     dest->power = unpack_float(SDLNet_Read32(&(src->power)), 0, 110);
+     dest->use_power = src->use_power;
+     dest->score = src->score;
+-    dest->desire = src->desire;
++    dest->desire = (PlayerDesire)src->desire;
+     dest->game = src->game;
+     memcpy(dest->sets, src->sets, sizeof(unsigned char)*(SETS_TO_WIN*2));
+     dest->accelerate = unpack_float(SDLNet_Read32(&(src->accelerate)), 0, 200);
+@@ -250,7 +250,7 @@ net_serialize_gamestate(const GameState*
+ }
+ 
+ void
+-net_unserialize_gamestate(const NetworkGameState* src, GameState* dest)
++net_unserialize_gamestate(NetworkGameState* src, GameState* dest)
+ {
+     int p;
+ 
+--- tennix-1.1.orig/makefile
++++ tennix-1.1/makefile
+@@ -27,24 +27,23 @@ ifeq ($(MKCALLGRAPH),1)
+   LD        =  nccld
+ endif
+ 
+-RELEASE   =  1.1
+-
+-UNAME = $(shell uname)
++RELEASE = 1.1.1
+ 
+ PREFIX ?= /usr/local
+ BINDIR ?= $(PREFIX)/bin
+ DATAROOTDIR ?= $(PREFIX)/share
+ DATADIR ?= $(DATAROOTDIR)/games
+ 
+-LIBS =
+-CFLAGS += -W -Wall -ansi -pedantic -Wcast-qual -Wwrite-strings -DVERSION=\"$(RELEASE)\" -O2 -DPREFIX=\"$(PREFIX)\" -g
++CFLAGS += -W -Wall -DVERSION=\"$(RELEASE)\" -O2 -DPREFIX=\"$(PREFIX)\"
+ CXXFLAGS += $(CFLAGS)
+ 
+ USE_PYTHON ?= 1
+ 
+ ifeq ($(USE_PYTHON),1)
+-  CFLAGS += `python-config --includes` -DTENNIX_PYTHON
+-  LIBS += `python-config --libs`
++  PYTHON_INCLUDES := $(shell python-config --includes)
++  PYTHON_LIBS := $(shell python-config --libs)
++  CFLAGS += $(PYTHON_INCLUDES) -DTENNIX_PYTHON
++  LIBS += $(PYTHON_LIBS)
+ endif
+ 
+ ifeq ($(NONFREE_LOCATIONS),1)
+@@ -67,17 +66,14 @@ ifeq ($(MAEMO),1)
+   CFLAGS += -DMAEMO
+ endif
+ 
+-ifeq ($(UNAME),Darwin)
+-  SDLLIBS=$$(sdl-config --prefix)/lib
+-  LIBS += $$(sdl-config --static-libs) $(SDLLIBS)/libSDL_mixer.a $(SDLLIBS)/libSDL_image.a $(SDLLIBS)/libSDL_ttf.a $(SDLLIBS)/libSDL_net.a $$(freetype-config --prefix)/lib/libfreetype.a
+-  CFLAGS += $$(sdl-config --cflags) -lz
+-else
+-  LIBS += $$(sdl-config --libs) -lSDL_mixer -lSDL_image -lSDL_ttf -lSDL_net
+-  CFLAGS += $$(sdl-config --cflags)
+-endif
++SDL_LIBS := $(shell sdl-config --libs)
++SDL_CFLAGS := $(shell sdl-config --cflags)
++
++LIBS += $(SDL_LIBS) -lSDL_mixer -lSDL_image -lSDL_ttf -lSDL_net
++CFLAGS += $(SDL_CFLAGS)
+ 
+-SRC = tennix.cc game.c graphics.cc input.c util.c sound.cc animation.c network.c
+ OBJ = tennix.o game.o graphics.o input.o util.o sound.o animation.o archive.o SDL_rotozoom.o network.o
++
+ ifeq ($(MSYSTEM),MINGW32)
+   OBJ += tennixres.o
+ endif
+--- tennix-1.1.orig/game.h
++++ tennix-1.1/game.h
+@@ -98,6 +98,13 @@ typedef struct {
+     bool inhibit_gravity;
+ } Ball;
+ 
++enum PlayerDesire {
++    DESIRE_NORMAL,
++    DESIRE_TOPSPIN,
++    DESIRE_SMASH,
++    DESIRE_MAX
++};
++
+ typedef struct {
+     InputDevice* input;
+     char input_device_index;
+@@ -106,9 +113,9 @@ typedef struct {
+     float power;
+     bool use_power;
+     unsigned char score;
+-    unsigned char desire;
++    PlayerDesire desire;
+     bool type; /* is this player ai-controlled or human? */
+-    char game; /* score for the current game */
++    int game; /* score for the current game */
+     unsigned char sets[SETS_TO_WIN*2]; /* score for each set */
+     float accelerate; /* a value [0..1] how fast the user accelerates */
+ } Player;
+@@ -118,13 +125,6 @@ enum {
+     PLAYER_TYPE_AI
+ };
+ 
+-enum {
+-    DESIRE_NORMAL,
+-    DESIRE_TOPSPIN,
+-    DESIRE_SMASH,
+-    DESIRE_MAX
+-};
+-
+ /* wait 2 seconds before we score the game */
+ #define SCORING_DELAY 1000
+ 
+@@ -161,7 +161,7 @@ enum {
+ 
+ typedef struct {
+     const Location* location;
+-    char current_location; /* index of loc. in global location table */
++    int current_location; /* index of loc. in global location table */
+     Ball ball;
+     Player players[MAXPLAYERS];
+     unsigned char serving_player;
diff --git a/nixpkgs/pkgs/games/terraria-server/default.nix b/nixpkgs/pkgs/games/terraria-server/default.nix
new file mode 100644
index 000000000000..c1e48f259d79
--- /dev/null
+++ b/nixpkgs/pkgs/games/terraria-server/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchurl
+
+, autoPatchelfHook
+, unzip
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "terraria-server";
+  version = "1.4.4.9";
+  urlVersion = lib.replaceStrings [ "." ] [ "" ] version;
+
+  src = fetchurl {
+    url = "https://terraria.org/api/download/pc-dedicated-server/terraria-server-${urlVersion}.zip";
+    sha256 = "sha256-Mk+5s9OlkyTLXZYVT0+8Qcjy2Sb5uy2hcC8CML0biNY=";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook unzip ];
+  buildInputs = [ stdenv.cc.cc.libgcc zlib ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r Linux $out/
+    chmod +x "$out/Linux/TerrariaServer.bin.x86_64"
+    ln -s "$out/Linux/TerrariaServer.bin.x86_64" $out/bin/TerrariaServer
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://terraria.org";
+    description = "Dedicated server for Terraria, a 2D action-adventure sandbox";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.unfree;
+    mainProgram = "TerrariaServer";
+    maintainers = with maintainers; [ ncfavier tomasajt ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/tes3cmd/default.nix b/nixpkgs/pkgs/games/tes3cmd/default.nix
new file mode 100644
index 000000000000..3778aadda9c5
--- /dev/null
+++ b/nixpkgs/pkgs/games/tes3cmd/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, perlPackages, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "tes3cmd";
+  version = "0.40-pre-release-2";
+
+  src = fetchFromGitHub {
+    owner = "john-moonsugar";
+    repo = pname;
+    rev = "f72e9ed9dd18e8545dd0dc2a4056c250cf505790";
+    sha256 = "01zqplp8yb0xnl54963n0zkz66rf3hn2x3i255jlhdhx1c43jba7";
+  };
+
+  buildInputs = [ perlPackages.perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tes3cmd $out/bin/tes3cmd
+  '';
+
+  meta = with lib; {
+    description = "A command line tool for examining and modifying plugins for the Elder Scrolls game Morrowind by Bethesda Softworks";
+    homepage = "https://github.com/john-moonsugar/tes3cmd";
+    license = licenses.mit;
+    maintainers = [ maintainers.marius851000 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tetrio-desktop/default.nix b/nixpkgs/pkgs/games/tetrio-desktop/default.nix
new file mode 100644
index 000000000000..a48f2b22138a
--- /dev/null
+++ b/nixpkgs/pkgs/games/tetrio-desktop/default.nix
@@ -0,0 +1,95 @@
+{ stdenv
+, lib
+, fetchurl
+, dpkg
+, autoPatchelfHook
+, wrapGAppsHook
+, alsa-lib
+, cups
+, libX11
+, libXScrnSaver
+, libXtst
+, mesa
+, nss
+, gtk3
+, libpulseaudio
+, systemd
+, callPackage
+, withTetrioPlus ? false
+, tetrio-plus ? callPackage ./tetrio-plus.nix { }
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tetrio-desktop";
+  version = "8.0.0";
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20211228025517if_/https://tetr.io/about/desktop/builds/TETR.IO%20Setup.deb";
+    name = "tetrio-desktop.deb";
+    sha256 = "1nlblfhrph4cw8rpic9icrs78mzrxyskl7ggyy2i8bk9i07i21xf";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    autoPatchelfHook
+    wrapGAppsHook
+  ];
+
+  dontWrapGApps = true;
+
+  buildInputs = [
+    alsa-lib
+    cups
+    libX11
+    libXScrnSaver
+    libXtst
+    mesa
+    nss
+    gtk3
+  ];
+
+  libPath = lib.makeLibraryPath [
+    libpulseaudio
+    systemd
+  ];
+
+  unpackCmd = "dpkg -x $curSrc src";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp -r opt/ usr/share/ $out
+
+    mkdir $out/bin
+    ln -s $out/opt/TETR.IO/tetrio-desktop $out/bin/
+
+    substituteInPlace $out/share/applications/tetrio-desktop.desktop \
+      --replace "Exec=\"/opt/TETR.IO/tetrio-desktop\"" "Exec=\"$out/opt/TETR.IO/tetrio-desktop\""
+
+    runHook postInstall
+  '';
+
+  postInstall = lib.strings.optionalString withTetrioPlus ''
+    cp ${tetrio-plus} $out/opt/TETR.IO/resources/app.asar
+  '';
+
+  postFixup = ''
+    wrapProgram $out/opt/TETR.IO/tetrio-desktop \
+      --prefix LD_LIBRARY_PATH : ${libPath}:$out/opt/TETR.IO \
+      ''${gappsWrapperArgs[@]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://tetr.io";
+    downloadPage = "https://tetr.io/about/desktop/";
+    description = "TETR.IO desktop client";
+    longDescription = ''
+      TETR.IO is a modern yet familiar online stacker.
+      Play against friends and foes all over the world, or claim a spot on the leaderboards - the stacker future is yours!
+    '';
+    platforms = [ "x86_64-linux" ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ wackbyte ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/tetrio-desktop/tetrio-plus.nix b/nixpkgs/pkgs/games/tetrio-desktop/tetrio-plus.nix
new file mode 100644
index 000000000000..64f5dd5d85cc
--- /dev/null
+++ b/nixpkgs/pkgs/games/tetrio-desktop/tetrio-plus.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "tetrio-plus";
+  version = "0.25.3";
+
+  src = fetchzip {
+    url = "https://gitlab.com/UniQMG/tetrio-plus/uploads/684477053451cd0819e2c84e145966eb/tetrio-plus_0.25.3_app.asar.zip";
+    sha256 = "sha256-GQgt4GZNeKx/uzmVsuKppW2zg8AAiGqsk2JYJIkqfVE=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    install app.asar $out
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "TETR.IO customization toolkit";
+    homepage = "https://gitlab.com/UniQMG/tetrio-plus";
+    license = licenses.mit;
+    maintainers = with maintainers; [ huantian ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/the-butterfly-effect/default.nix b/nixpkgs/pkgs/games/the-butterfly-effect/default.nix
new file mode 100644
index 000000000000..021dedc17bd9
--- /dev/null
+++ b/nixpkgs/pkgs/games/the-butterfly-effect/default.nix
@@ -0,0 +1,39 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, qttools, wrapQtAppsHook, qtbase, qtsvg }:
+
+mkDerivation rec {
+  pname = "tbe";
+  version = "0.9.3.1";
+
+  src = fetchFromGitHub {
+    owner = "kaa-ching";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "1ag2cp346f9bz9qy6za6q54id44d2ypvkyhvnjha14qzzapwaysj";
+  };
+
+  postPatch = ''
+    sed '1i#include <vector>' -i src/model/World.h
+
+    # fix translations not building: https://gitlab.kitware.com/cmake/cmake/-/issues/21931
+    substituteInPlace i18n/CMakeLists.txt --replace qt5_create_translation qt_add_translation
+  '';
+
+  nativeBuildInputs = [ cmake qttools wrapQtAppsHook ];
+  buildInputs = [ qtbase qtsvg ];
+  strictDeps = true;
+
+  installPhase = ''
+    make DESTDIR=.. install
+    mkdir -p $out/bin
+    cp ../usr/games/tbe $out/bin
+    cp -r ../usr/share $out/
+  '';
+
+  meta = with lib; {
+    description = "A physics-based game vaguely similar to Incredible Machine";
+    homepage = "http://the-butterfly-effect.org/";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/games/the-powder-toy/default.nix b/nixpkgs/pkgs/games/the-powder-toy/default.nix
new file mode 100644
index 000000000000..2901f42e095e
--- /dev/null
+++ b/nixpkgs/pkgs/games/the-powder-toy/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, python3
+, SDL2
+, bzip2
+, curl
+, fftwFloat
+, lua
+, luajit
+, zlib
+, Cocoa }:
+
+stdenv.mkDerivation rec {
+  pname = "the-powder-toy";
+  version = "unstable-2022-08-30";
+
+  src = fetchFromGitHub {
+    owner = "The-Powder-Toy";
+    repo = "The-Powder-Toy";
+    rev = "9e712eba080e194fc162b475f58aaed8f4ea008e";
+    sha256 = "sha256-44xUfif1E+T9jzixWgnBxOWmzPPuVZy7rf62ig/CczA=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config python3 ];
+
+  buildInputs = [ SDL2 bzip2 curl fftwFloat lua luajit zlib ]
+  ++ lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  installPhase = ''
+    install -Dm 755 powder $out/bin/powder
+
+    mkdir -p $out/share/applications
+    mv ../resources/powder.desktop $out/share/applications
+    mv ../resources $out/share
+  '';
+
+  meta = with lib; {
+    description = "A free 2D physics sandbox game";
+    homepage = "https://powdertoy.co.uk/";
+    platforms = platforms.unix;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ abbradar siraben ];
+    mainProgram = "powder";
+  };
+}
diff --git a/nixpkgs/pkgs/games/theforceengine/default.nix b/nixpkgs/pkgs/games/theforceengine/default.nix
new file mode 100644
index 000000000000..788fdc30794f
--- /dev/null
+++ b/nixpkgs/pkgs/games/theforceengine/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, SDL2_image
+, rtaudio
+, rtmidi
+, glew
+, alsa-lib
+, cmake
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "theforceengine";
+  version = "1.09.540";
+
+  src = fetchFromGitHub {
+    owner = "luciusDXL";
+    repo = "TheForceEngine";
+    rev = "v${version}";
+    sha256 = "sha256-s54X6LZdk7daIlQPHyRBxc8MLS6bzkkypi4m1m+xK80=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    rtaudio
+    rtmidi
+    glew
+    alsa-lib
+  ];
+
+  prePatch = ''
+    # use nix store path instead of hardcoded /usr/share for support data
+    substituteInPlace TheForceEngine/TFE_FileSystem/paths-posix.cpp \
+      --replace "/usr/share" "$out/share"
+  '';
+
+  meta = with lib; {
+    description = "Modern \"Jedi Engine\" replacement supporting Dark Forces, mods, and in the future Outlaws.";
+    homepage = "https://theforceengine.github.io";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ devusb ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/tibia/default.nix b/nixpkgs/pkgs/games/tibia/default.nix
new file mode 100644
index 000000000000..0fee9ce6c6cb
--- /dev/null
+++ b/nixpkgs/pkgs/games/tibia/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl, glibc, libX11, runtimeShell, libGLU, libGL }:
+
+stdenv.mkDerivation rec {
+  pname = "tibia";
+  version = "10.90";
+
+  src = fetchurl {
+    url = "http://static.tibia.com/download/tibia${lib.replaceStrings ["."] [""] version}.tgz";
+    sha256 = "11mkh2dynmbpay51yfaxm5dmcys3rnpk579s9ypfkhblsrchbkhx";
+  };
+
+  shell = stdenv.shell;
+
+  # These binaries come stripped already and trying to strip after the
+  # files are in $out/res and after patchelf just breaks them.
+  # Strangely it works if the files are in $out but then nix doesn't
+  # put them in our PATH. We set all the files to $out/res because
+  # we'll be using a wrapper to start the program which will go into
+  # $out/bin.
+  dontStrip = true;
+
+  installPhase = ''
+    mkdir -pv $out/res
+    cp -r * $out/res
+
+    patchelf --set-interpreter ${glibc.out}/lib/ld-linux.so.2 \
+             --set-rpath ${lib.makeLibraryPath [ stdenv.cc.cc libX11 libGLU libGL ]} \
+             "$out/res/Tibia"
+
+    # We've patchelf'd the files. The main ‘Tibia’ binary is a bit
+    # dumb so it looks for ‘./Tibia.dat’. This requires us to be in
+    # the same directory as the file itself but that's very tedious,
+    # especially with nix which changes store hashes. Here we generate
+    # a simple wrapper that we put in $out/bin which will do the
+    # directory changing for us.
+
+    mkdir -pv $out/bin
+
+    # The wrapper script itself. We use $LD_LIBRARY_PATH for libGL.
+    cat << EOF > "$out/bin/Tibia"
+    #!${runtimeShell}
+    cd $out/res
+    ${glibc.out}/lib/ld-linux.so.2 --library-path \$LD_LIBRARY_PATH ./Tibia "\$@"
+    EOF
+
+    chmod +x $out/bin/Tibia
+
+  '';
+
+  meta = {
+    description = "Top-down MMORPG set in a fantasy world";
+    homepage = "http://tibia.com";
+    license = lib.licenses.unfree;
+    platforms = ["i686-linux"];
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/tintin/default.nix b/nixpkgs/pkgs/games/tintin/default.nix
new file mode 100644
index 000000000000..7a3996abdcf9
--- /dev/null
+++ b/nixpkgs/pkgs/games/tintin/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, lib, zlib, pcre
+, memorymappingHook, memstreamHook
+, gnutls
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tintin";
+  version = "2.02.31";
+
+  src = fetchFromGitHub {
+    owner = "scandum";
+    repo = "tintin";
+    rev = version;
+    hash = "sha256-emCxA5+YB4S7QXxRqkDKN1xeWttR857VfGzFQ1cGbYg=";
+  };
+
+  buildInputs = [ zlib pcre gnutls ]
+    ++ lib.optionals (stdenv.system == "x86_64-darwin") [ memorymappingHook memstreamHook ];
+
+  preConfigure = ''
+    cd src
+  '';
+
+  meta = with lib; {
+    description = "A free MUD client for macOS, Linux and Windows";
+    homepage    = "https://tintin.mudhalla.net/index.php";
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ abathur ];
+    mainProgram = "tt++";
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tinyfugue/default.nix b/nixpkgs/pkgs/games/tinyfugue/default.nix
new file mode 100644
index 000000000000..a787d0b25bff
--- /dev/null
+++ b/nixpkgs/pkgs/games/tinyfugue/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, ncurses, zlib
+, openssl ? null
+, sslSupport ? true
+}:
+
+with lib;
+
+assert sslSupport -> openssl != null;
+
+stdenv.mkDerivation rec {
+  pname = "tinyfugue";
+  version = "50b8";
+  verUrl = "5.0%20beta%208";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/tinyfugue/tinyfugue/${verUrl}/tf-${version}.tar.gz";
+    sha256 = "12fra2fdwqj6ilv9wdkc33rkj343rdcf5jyff4yiwywlrwaa2l1p";
+  };
+
+  configureFlags = optional (!sslSupport) "--disable-ssl";
+
+  buildInputs =
+    [ ncurses zlib ]
+    ++ optional sslSupport openssl;
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: world.o:/build/tf-50b8/src/socket.h:24: multiple definition of
+  #     `world_decl'; command.o:/build/tf-50b8/src/socket.h:24: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  meta = {
+    homepage = "https://tinyfugue.sourceforge.net/";
+    description = "A terminal UI, screen-oriented MUD client";
+    longDescription = ''
+      TinyFugue, aka "tf", is a flexible, screen-oriented MUD client, for use
+      with any type of text MUD.
+    '';
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.KibaFox ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/titanion/default.nix b/nixpkgs/pkgs/games/titanion/default.nix
new file mode 100644
index 000000000000..47db68aa483e
--- /dev/null
+++ b/nixpkgs/pkgs/games/titanion/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchurl
+, unzip
+, gdc
+, SDL
+, SDL_mixer
+, bulletml
+}:
+
+let
+debianPatch = patchname: hash: fetchpatch {
+  name = "${patchname}.patch";
+  url = "https://sources.debian.org/data/main/t/titanion/0.3.dfsg1-7/debian/patches/${patchname}";
+  sha256 = hash;
+};
+
+in stdenv.mkDerivation rec {
+  pname = "titanion";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "http://abagames.sakura.ne.jp/windows/ttn${lib.replaceStrings ["."] ["_"] version}.zip";
+    sha256 = "sha256-fR0cufi6dU898wP8KGl/vxbfQJzMmMxlYZ3QNGLajfM=";
+  };
+
+  patches = [
+    (debianPatch
+      "imports.patch"
+      "sha256-kSXpaTpYq6w9e0yLES2QGNQ8+vFIiOpw2P9MA8gZr8s=")
+    (debianPatch
+      "fix.diff"
+      "sha256-0WkkfuhJaAMY46VVyc3ldMQwgOVoQJDw/8zbm6H2sHU=")
+    (debianPatch
+      "directories.patch"
+      "sha256-fhQJuy2+r0YOQNwMqG85Gr7fJehmf00Scran+NPYQrw=")
+    (debianPatch
+      "windowed.patch"
+      "sha256-xouXIuIKfKFGsoOEJqL9jdsdnkX4nqwPGcoB+32Wvgo=")
+    (debianPatch
+      "dotfile.patch"
+      "sha256-sAml53Hh0ltbqN8xZDZuUJcaPfjK56jf4ymFXYD38v0=")
+    (debianPatch
+      "window-resize.patch"
+      "sha256-WwAi1aU4CmaX+O8fw0TfLhNSXFaObExrn7nuhesVkKM=")
+    (debianPatch
+      "makefile.patch"
+      "sha256-g0jDPmc0SWXkTLhiczeTse/WGCtgMUsbyPNZzwK3U+o=")
+    (debianPatch
+      "dlang_v2.patch"
+      "sha256-tfTAAKlPFSjbfAK1EjeB3unj9tbMlNaajJ+VVSMMiYw=")
+    (debianPatch
+      "gdc-8.patch"
+      "sha256-BxkPfSEymq7TDA+yjJHaYsjtGr0Tuu1/sWLwRBAMga4=")
+  ];
+
+  postPatch = ''
+    rm *.dll ttn.exe
+    rm -r lib
+    for f in src/abagames/ttn/screen.d src/abagames/util/sdl/sound.d src/abagames/util/sdl/texture.d; do
+      substituteInPlace $f \
+        --replace "/usr/" "$out/"
+    done
+  '';
+
+  nativeBuildInputs = [
+    unzip
+    gdc
+  ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+    bulletml
+  ];
+
+  installPhase = ''
+    install -Dm755 titanion $out/bin/titanion
+    mkdir -p $out/share/games/titanion
+    cp -r sounds images $out/share/games/titanion/
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.asahi-net.or.jp/~cs8k-cyu/windows/ttn_e.html";
+    description = "Strike down super high-velocity swooping insects";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tome2/default.nix b/nixpkgs/pkgs/games/tome2/default.nix
new file mode 100644
index 000000000000..3440e183515c
--- /dev/null
+++ b/nixpkgs/pkgs/games/tome2/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, makeDesktopItem, ncurses, libX11, boost, cmake }:
+
+let
+  pname = "tome2";
+  description = "A dungeon crawler similar to Angband, based on the works of Tolkien";
+
+  desktopItem = makeDesktopItem {
+    desktopName = pname;
+    name = pname;
+    exec = "${pname}-x11";
+    icon = pname;
+    comment = description;
+    type = "Application";
+    categories = [ "Game" "RolePlaying" ];
+    genericName = pname;
+  };
+
+in stdenv.mkDerivation {
+  inherit pname;
+  version = "2.4";
+
+  src = fetchFromGitHub {
+    owner = "tome2";
+    repo = "tome2";
+    rev = "4e6a906c80ff07b75a6acf4ff585b47303805e46";
+    sha256 = "06bddj55y673d7bnzblk8n01z32l6k2rad3bpzr8dmw464hx4wwf";
+  };
+
+  buildInputs = [ ncurses libX11 boost ];
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [
+    "-DSYSTEM_INSTALL=ON"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/applications
+    cp ${desktopItem}/share/applications/*.desktop $out/share/applications
+  '';
+
+  meta = with lib; {
+    inherit description;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ cizra ];
+    platforms = platforms.all;
+    homepage = "https://github.com/tome2/tome2";
+  };
+}
diff --git a/nixpkgs/pkgs/games/tome4/default.nix b/nixpkgs/pkgs/games/tome4/default.nix
new file mode 100644
index 000000000000..c05fd006aaac
--- /dev/null
+++ b/nixpkgs/pkgs/games/tome4/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchurl, makeDesktopItem, makeWrapper, premake4, unzip
+, openal, libpng, libvorbis, libGLU, SDL2, SDL2_image, SDL2_ttf }:
+
+stdenv.mkDerivation rec {
+  pname = "tome4";
+  version = "1.7.6";
+
+  src = fetchurl {
+    url = "https://te4.org/dl/t-engine/t-engine4-src-${version}.tar.bz2";
+    sha256 = "sha256-mJ3qAIA/jNyt4CT0ZH1IC7GsDUN8JUKSwHVJwnKkaAw=";
+  };
+
+  desktop = makeDesktopItem {
+    desktopName = pname;
+    name = pname;
+    exec = "@out@/bin/${pname}";
+    icon = pname;
+    comment = "An open-source, single-player, role-playing roguelike game set in the world of Eyal.";
+    type = "Application";
+    categories = [ "Game" "RolePlaying" ];
+    genericName = pname;
+  };
+
+  prePatch = ''
+    # http://forums.te4.org/viewtopic.php?f=42&t=49478&view=next#p234354
+    sed -i 's|#include <GL/glext.h>||' src/tgl.h
+  '';
+
+  nativeBuildInputs = [ makeWrapper unzip premake4 ];
+
+  # tome4 vendors quite a few libraries so someone might want to look
+  # into avoiding that...
+  buildInputs = [
+    libGLU openal libpng libvorbis SDL2 SDL2_ttf SDL2_image
+  ];
+
+  # disable parallel building as it caused sporadic build failures
+  enableParallelBuilding = false;
+
+  env.NIX_CFLAGS_COMPILE = "-I${SDL2.dev}/include/SDL2 -I${SDL2_image}/include/SDL2 -I${SDL2_ttf}/include/SDL2";
+
+  makeFlags = [ "config=release" ];
+
+  # The wrapper needs to cd into the correct directory as tome4's detection of
+  # the game asset root directory is faulty.
+
+  installPhase = ''
+    runHook preInstall
+
+    dir=$out/share/${pname}
+
+    install -Dm755 t-engine $dir/t-engine
+    cp -r bootstrap game $dir
+    makeWrapper $dir/t-engine $out/bin/${pname} \
+      --chdir "$dir"
+
+    install -Dm755 ${desktop}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --subst-var out
+
+    unzip -oj -qq game/engines/te4-${version}.teae data/gfx/te4-icon.png
+    install -Dm644 te4-icon.png $out/share/icons/hicolor/64x64/${pname}.png
+
+    install -Dm644 -t $out/share/doc/${pname} CONTRIBUTING COPYING COPYING-MEDIA CREDITS
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tales of Maj'eyal (rogue-like game)";
+    homepage = "https://te4.org/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/toppler/default.nix b/nixpkgs/pkgs/games/toppler/default.nix
new file mode 100644
index 000000000000..890e13498747
--- /dev/null
+++ b/nixpkgs/pkgs/games/toppler/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+
+, pkg-config
+, gettext
+, povray
+, imagemagick
+, gimp
+
+, SDL2
+, SDL2_mixer
+, SDL2_image
+, libpng
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "toppler";
+  version = "1.3";
+
+  src = fetchFromGitLab {
+    owner = "roever";
+    repo = "toppler";
+    rev = "v${version}";
+    sha256 = "sha256-ecEaELu52Nmov/BD9VzcUw6wyWeHJcsKQkEzTnaW330=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    gettext
+    povray
+    imagemagick
+    gimp
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_mixer
+    SDL2_image
+    libpng
+    zlib
+  ];
+
+  # GIMP needs a writable home
+  preBuild = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "Jump and run game, reimplementation of Tower Toppler/Nebulus";
+    homepage = "https://gitlab.com/roever/toppler";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/torcs/default.nix b/nixpkgs/pkgs/games/torcs/default.nix
new file mode 100644
index 000000000000..4764db4413ed
--- /dev/null
+++ b/nixpkgs/pkgs/games/torcs/default.nix
@@ -0,0 +1,51 @@
+{ fetchpatch, fetchurl, lib, stdenv, libGLU, freeglut, libX11, plib, openal, freealut, libXrandr, xorgproto,
+libXext, libSM, libICE, libXi, libXt, libXrender, libXxf86vm, libvorbis,
+libpng, zlib, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "torcs";
+  version = "1.3.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/torcs/torcs-${version}.tar.bz2";
+    sha256 = "0kdq0sc7dsfzlr0ggbxggcbkivc6yp30nqwjwcaxg9295s3b06wa";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://salsa.debian.org/games-team/torcs/raw/fb0711c171b38c4648dc7c048249ec20f79eb8e2/debian/patches/gcc6-isnan.patch";
+      sha256 = "16scmq30vwb8429ah9d4ws0v1w6ai59lvn7hcgnvfzyap42ry876";
+    })
+    (fetchpatch {
+      url = "https://salsa.debian.org/games-team/torcs/raw/fb0711c171b38c4648dc7c048249ec20f79eb8e2/debian/patches/format-argument.patch";
+      sha256 = "04advcx88yh23ww767iysydzhp370x7cqp2wf9hk2y1qvw7mxsja";
+    })
+    (fetchpatch {
+      url = "https://salsa.debian.org/games-team/torcs/raw/fb0711c171b38c4648dc7c048249ec20f79eb8e2/debian/patches/glibc-default-source.patch";
+      sha256 = "0k4hgpddnhv68mdc9ics7ah8q54j60g394d7zmcmzg6l3bjd9pyp";
+    })
+    (fetchpatch {
+      url = "https://salsa.debian.org/games-team/torcs/raw/32bbe77c68b4de07b28c34497f3c0ad666ee618d/debian/patches/gcc7.patch";
+      sha256 = "09iilnvdv8h7b4nb1372arszkbz9hbzsck4rimzz1xjdh9ydniw9";
+    })
+  ];
+
+  postPatch = ''
+    sed -i -e s,/bin/bash,`type -P bash`, src/linux/torcs.in
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libGLU freeglut libX11 plib openal freealut libXrandr xorgproto
+    libXext libSM libICE libXi libXt libXrender libXxf86vm libpng zlib libvorbis ];
+
+  installTargets = "install datainstall";
+
+  meta = {
+    description = "Car racing game";
+    homepage = "https://torcs.sourceforge.net/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = lib.platforms.linux;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/torus-trooper/default.nix b/nixpkgs/pkgs/games/torus-trooper/default.nix
new file mode 100644
index 000000000000..645abc76c807
--- /dev/null
+++ b/nixpkgs/pkgs/games/torus-trooper/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchurl
+, unzip
+, gdc
+, SDL
+, SDL_mixer
+, bulletml
+}:
+
+let
+debianPatch = patchname: hash: fetchpatch {
+  name = "${patchname}.patch";
+  url = "https://sources.debian.org/data/main/t/torus-trooper/0.22.dfsg1-12/debian/patches/${patchname}.patch";
+  sha256 = hash;
+};
+
+in stdenv.mkDerivation rec {
+  pname = "torus-trooper";
+  version = "0.22";
+
+  src = fetchurl {
+    url = "http://abagames.sakura.ne.jp/windows/tt${lib.replaceStrings ["."] ["_"] version}.zip";
+    sha256 = "1yhki1fdp3fi4y2iq12vca69f6k38dqjaw9z4lwcxky5kbgb7jvg";
+  };
+
+  patches = [
+    (debianPatch
+      "imports"
+      "0mifw0mj66zljpq6iqnh0rhkgs2sky8rz0p32k98vxfnsb39ibsf")
+    (debianPatch
+      "fixes"
+      "05f93zq2v14lymq748c9g646ckbh9mqpr5rrahb63s90x8hlcqil")
+    (debianPatch
+      "directories"
+      "0y5xvf26v9fk0rx6ncrxx4czckhjbi891hp3pixlmv568pg9cihd")
+    (debianPatch
+      "windowed"
+      "1d8ghj4shvpb0s8l16kscz4l7rz1fxmfdpddy1ikz3678pw1sc8p")
+    (debianPatch
+      "dotfile"
+      "17yirmnjhbd1clzhmdd2mfdhbxkyinaahd6v3yz5kzbcylvjz2r2")
+    (debianPatch
+      "window-resizing"
+      "1n64gbhabl6vis7s294wxlj2k8s3ypxljpdg71icwz1m9jjx59df")
+    (debianPatch
+      "save-score-444372"
+      "1skny6s3hjxkh8w4fq86vp51j7z40fvn80b8myl4i1zzlwag3x17")
+    (debianPatch
+      "level-select-444948"
+      "008248s55188plggg2kg01nimjgc7w0sqd3c22sl6lzd1fjsflv8")
+    (debianPatch
+      "avoid-segfault-when-sdl-fails"
+      "1yp758gi4i15gqk6wiqp815rqcmlyqx62ir1sw20hn6zb3j97bmc")
+    (debianPatch
+      "dlang_v2"
+      "1lxsbckhvl8a8j43pw2dyl5nlavvdbgxb5zlb2450a0vml55nswd")
+    (debianPatch
+      "lowest-level-position-602808"
+      "19r48wirc9zssjmv57drn2fd0f56dcgyqqaz3j49cvv6yd74qf20")
+    (debianPatch
+      "libbulletml0v5-segfault"
+      "0pad2daz60hswkhkdpssxaqc9p9ca0sw1nraqzr453x0zdwwq0hn")
+    (debianPatch
+      "std.math.fabs"
+      "18xnnqlj20bxv2h9fa8dn4rmxwi3k6y3g50kwvh8i8p3b4hgag3r")
+    (debianPatch
+      "gdc-8"
+      "10z702y75c48hjcnvv8m7f3ka52cj3r3jqafdbby85nb0p2lbssx")
+  ];
+
+  postPatch = ''
+    for f in src/abagames/tt/barrage.d src/abagames/util/sdl/sound.d src/abagames/util/sdl/texture.d; do
+      substituteInPlace $f \
+        --replace "/usr/" "$out/"
+    done
+  '';
+
+  nativeBuildInputs = [
+    unzip
+    gdc
+  ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+    bulletml
+  ];
+
+  installPhase = ''
+    install -Dm755 torus-trooper $out/bin/torus-trooper
+    mkdir -p $out/share/games/torus-trooper
+    cp -r barrage sounds images $out/share/games/torus-trooper/
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.asahi-net.or.jp/~cs8k-cyu/windows/tt_e.html";
+    description = "Fast-paced abstract scrolling shooter game";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tr-patcher/default.nix b/nixpkgs/pkgs/games/tr-patcher/default.nix
new file mode 100644
index 000000000000..0336ed1ac02f
--- /dev/null
+++ b/nixpkgs/pkgs/games/tr-patcher/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchurl, fetchzip, jre, makeWrapper }:
+
+let
+translation-file = fetchurl {
+  url = "https://gitlab.com/bmwinger/tr-patcher/-/raw/master/lib/Translation.txt?inline=false";
+  sha256 = "136zd2s73b4n1w2n34wxi656bm448748nn3y7a64fd89ysg9n7n8";
+};
+in
+stdenv.mkDerivation rec {
+  pname = "tr-patcher";
+  version = "1.0.5";
+
+  # use the pre compiled source, as compilation is a bit complex
+  src = fetchzip {
+    url = "https://gitlab.com/bmwinger/tr-patcher/uploads/b57899980b2351c136393f02977c4fab/tr-patcher-shadow.zip";
+    sha256 = "0va7nbmlgf3p2nc0z2b9n1285y4q5rpyjr4w93rdnx38wrhinxnw";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm644 lib/tr-patcher-all.jar $out/lib/tr-patcher.jar
+    install -Dm644 ${translation-file} $out/lib/Translation.txt
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/tr-patcher \
+    --add-flags "-jar $out/lib/tr-patcher.jar"
+  '';
+
+  meta = with lib; {
+    description = "Allow to update dependancies of the Tamriel-Data mod for morrowind";
+    homepage = "https://gitlab.com/bmwinger/tr-patcher";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3;
+    maintainers = [ maintainers.marius851000 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/trackballs/default.nix b/nixpkgs/pkgs/games/trackballs/default.nix
new file mode 100644
index 000000000000..9ce9ad3ffc5e
--- /dev/null
+++ b/nixpkgs/pkgs/games/trackballs/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake, SDL2, SDL2_ttf, gettext, zlib, SDL2_mixer, SDL2_image, guile, libGLU, libGL }:
+
+stdenv.mkDerivation rec {
+  pname = "trackballs";
+  version = "1.3.4";
+
+  src = fetchFromGitHub {
+    owner = "trackballs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JKSiNe5mu8rRztUhduGFY6IsSMx6VyBqKcGO5EssI+8=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ zlib SDL2 SDL2_ttf SDL2_mixer SDL2_image guile gettext libGLU libGL ];
+
+  meta = with lib; {
+    homepage = "https://trackballs.github.io/";
+    description = "3D Marble Madness clone";
+    platforms = platforms.linux;
+    # Music is licensed under Ethymonics Free Music License.
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/trigger/default.nix b/nixpkgs/pkgs/games/trigger/default.nix
new file mode 100644
index 000000000000..cb3227f24e3e
--- /dev/null
+++ b/nixpkgs/pkgs/games/trigger/default.nix
@@ -0,0 +1,54 @@
+{ lib, fetchurl, stdenv, runtimeShell, SDL2, freealut, SDL2_image, openal, physfs
+, zlib, libGLU, libGL, glew, tinyxml-2 }:
+
+stdenv.mkDerivation rec {
+  pname = "trigger-rally";
+  version = "0.6.6.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/trigger-rally/${pname}-${version}.tar.gz";
+    sha256 = "016bc2hczqscfmngacim870hjcsmwl8r3aq8x03vpf22s49nw23z";
+  };
+
+  buildInputs = [
+    SDL2
+    freealut
+    SDL2_image
+    openal
+    physfs
+    zlib
+    libGLU
+    libGL
+    glew
+    tinyxml-2
+  ];
+
+  preConfigure = ''
+    sed s,/usr/local,$out, -i bin/*defs
+
+    cd src
+
+    sed s,lSDL2main,lSDL2, -i GNUmakefile
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${SDL2.dev}/include/SDL2"
+    export makeFlags="$makeFlags prefix=$out"
+  '';
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mkdir -p $out/bin
+    cat <<EOF > $out/bin/trigger-rally
+    #!${runtimeShell}
+    exec $out/games/trigger-rally "$@"
+    EOF
+    chmod +x $out/bin/trigger-rally
+  '';
+
+  meta = {
+    description = "A fast-paced single-player racing game";
+    homepage = "http://trigger-rally.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tumiki-fighters/default.nix b/nixpkgs/pkgs/games/tumiki-fighters/default.nix
new file mode 100644
index 000000000000..b4becea65756
--- /dev/null
+++ b/nixpkgs/pkgs/games/tumiki-fighters/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchurl
+, unzip
+, gdc
+, SDL
+, SDL_mixer
+, bulletml
+}:
+
+let
+debianPatch = patchname: hash: fetchpatch {
+  name = "${patchname}.patch";
+  url = "https://sources.debian.org/data/main/t/tumiki-fighters/0.2.dfsg1-9/debian/patches/${patchname}.patch";
+  sha256 = hash;
+};
+
+in stdenv.mkDerivation rec {
+  pname = "tumiki-fighters";
+  version = "0.21";
+
+  src = fetchurl {
+    url = "http://abagames.sakura.ne.jp/windows/tf${lib.replaceStrings ["."] ["_"] version}.zip";
+    sha256 = "0djykfc1r8ysapklm621h89ana1c4qzc1m5nr9bqw4iccnmvwk3p";
+  };
+
+  patches = [
+    (debianPatch
+      "imports"
+      "1l3kc67b43gdi139cpz5cka1nkn0pjp9mrgrrxlmr0liwx2aryhn")
+    (debianPatch
+      "fixes"
+      "1iy1a5vii6yz9zdlk2bcj6gkj4y25hn9y2fczz15jpqd9r2zm603")
+    (debianPatch
+      "directories"
+      "0kmv0s7jgr693fzrkjsmz4dnicc4w7njanxm2la3cf4vmgdyipmm")
+    (debianPatch
+      "windowed"
+      "1wp74l0bi8wq85pcxnmkwrlfmlf09im95n27pxgz082lhwf2ksy1")
+    (debianPatch
+      "dotfile"
+      "0d8x519bclh41j992qn6ijzfcrgacb79px6zjd1awypkwyc0j2p6")
+    (debianPatch
+      "makefile"
+      "11xf2b31kjyps53jfryv82dv0g6q0smc9xgp8imrbr93mzi51vf0")
+    (debianPatch
+      "window-resizing"
+      "1dm79d0yisa8zs5fr89y3wq2kzd3khcaxs0la8lhncvkqbd4smx8")
+    (debianPatch
+      "dlang_v2"
+      "1isnvbl3bjnpyphji8k3fl0yd1z4869h0lai143vpwgj6518lpg4")
+    (debianPatch
+      "gdc-8"
+      "1md0zwmv50jnak5g9d93bglv9v4z41blinjii6kv3vmgjnajapzj")
+  ];
+
+  postPatch = ''
+    for f in \
+      src/abagames/tf/barragemanager.d \
+      src/abagames/util/sdl/sound.d \
+      src/abagames/util/sdl/texture.d \
+      src/abagames/tf/enemyspec.d \
+      src/abagames/tf/field.d \
+      src/abagames/tf/stagemanager.d \
+      src/abagames/tf/tumikiset.d
+    do
+      substituteInPlace $f \
+        --replace "/usr/" "$out/"
+    done
+  '';
+
+  nativeBuildInputs = [
+    unzip
+    gdc
+  ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+    bulletml
+  ];
+
+  installPhase = ''
+    install -Dm755 tumiki-fighters $out/bin/tumiki-fighters
+    mkdir -p $out/share/games/tumiki-fighters
+    cp -r barrage sounds enemy field stage tumiki $out/share/games/tumiki-fighters/
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.asahi-net.or.jp/~cs8k-cyu/windows/tf_e.html";
+    description = "Sticky 2D shooter";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tuxpaint/default.nix b/nixpkgs/pkgs/games/tuxpaint/default.nix
new file mode 100644
index 000000000000..e03079bf60dd
--- /dev/null
+++ b/nixpkgs/pkgs/games/tuxpaint/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, SDL, SDL_gfx, SDL_image, SDL_ttf, SDL_mixer, libpng
+, libimagequant, cairo, librsvg, gettext, libpaper, fribidi, pkg-config, gperf
+, imagemagick
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.9.28";
+  pname = "tuxpaint";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/tuxpaint/${version}/${pname}-${version}-sdl1.tar.gz";
+    sha256 = "sha256-b4Ru9GqyGf2jMmM24szGXO2vbSxCwvPmA6tgEUWhhos=";
+  };
+
+  nativeBuildInputs = [
+    SDL SDL_gfx SDL_image SDL_ttf SDL_mixer libpng cairo libimagequant librsvg
+    gettext libpaper fribidi pkg-config gperf imagemagick
+  ];
+  hardeningDisable = [ "format" ];
+  makeFlags = [ "GPERF=${gperf}/bin/gperf"
+                "PREFIX=$$out"
+                "COMPLETIONDIR=$$out/share/bash-completion/completions"
+              ];
+
+  patches = [ ./tuxpaint-completion.diff ];
+  postPatch = ''
+    grep -Zlr include.*SDL . | xargs -0 sed -i -e 's,"SDL,"SDL/SDL,'
+  '';
+
+  # stamps
+  stamps = fetchurl {
+    url = "mirror://sourceforge/project/tuxpaint/tuxpaint-stamps/2022-06-04/tuxpaint-stamps-2022.06.04.tar.gz";
+    sha256 = "sha256-hCBlV2+uVUNY4A5R1xpJJhamSQsStZIigGdHfCh6C/g=";
+  };
+
+  postInstall = ''
+    # Install desktop file
+    mkdir -p $out/share/applications
+    cp hildon/tuxpaint.xpm $out/share/pixmaps
+    sed -e "s+Exec=tuxpaint+Exec=$out/bin/tuxpaint+" < src/tuxpaint.desktop > $out/share/applications/tuxpaint.desktop
+
+    # Install stamps
+    tar xzf $stamps
+    cd tuxpaint-stamps-*
+    make install-all PREFIX=$out
+    rm -rf $out/share/tuxpaint/stamps/military
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Open Source Drawing Software for Children";
+    homepage = "http://www.tuxpaint.org/";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ woffs ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tuxpaint/tuxpaint-completion.diff b/nixpkgs/pkgs/games/tuxpaint/tuxpaint-completion.diff
new file mode 100644
index 000000000000..0824b2becf49
--- /dev/null
+++ b/nixpkgs/pkgs/games/tuxpaint/tuxpaint-completion.diff
@@ -0,0 +1,16 @@
+--- tuxpaint-0.9.22/src/tuxpaint-completion.bash~	1970-01-01 01:00:01.000000000 +0100
++++ tuxpaint-0.9.22/src/tuxpaint-completion.bash	2018-03-06 10:54:03.437560921 +0100
+@@ -8,7 +8,6 @@
+ # FIXME: See http://www.debian-administration.org/articles/316 for an intro
+ # to how we should be doing this... -bjk 2009.09.09
+ 
+-have tuxpaint &&
+ _tuxpaint()
+ {
+         local cur
+@@ -96,4 +95,4 @@
+         fi
+ 
+ }
+-[ "${have:-}" ] && complete -F _tuxpaint $filenames tuxpaint
++complete -F _tuxpaint $filenames tuxpaint
diff --git a/nixpkgs/pkgs/games/tuxtype/default.nix b/nixpkgs/pkgs/games/tuxtype/default.nix
new file mode 100644
index 000000000000..0e32ebfbab97
--- /dev/null
+++ b/nixpkgs/pkgs/games/tuxtype/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, librsvg, libxml2, SDL, SDL_image, SDL_mixer, SDL_net, SDL_ttf, t4kcommon }:
+
+stdenv.mkDerivation rec {
+  version = "1.8.3";
+  pname = "tuxtype";
+
+  src = fetchFromGitHub {
+    owner = "tux4kids";
+    repo = "tuxtype";
+    rev = "upstream/${version}";
+    sha256 = "1i33rhi9gpzfml4hd73s18h6p2s8zcr26va2vwf2pqqd9fhdwpsg";
+  };
+
+  postPatch = ''
+    patchShebangs data/scripts/sed-linux.sh
+    patchShebangs data/themes/asturian/scripts/sed-linux.sh
+    patchShebangs data/themes/greek/scripts/sed-linux.sh
+    patchShebangs data/themes/hungarian/scripts/sed-linux.sh
+
+    substituteInPlace Makefile.am \
+      --replace "\$(MKDIR_P) -m 2755 " "\$(MKDIR_P) -m 755 " \
+      --replace "chown root:games \$(DESTDIR)\$(pkglocalstatedir)/words" " "
+
+    # required until the following has been merged:
+    # https://salsa.debian.org/tux4kids-pkg-team/tuxtype/merge_requests/1
+    substituteInPlace configure.ac \
+      --replace 'CFLAGS="$CFLAGS $SDL_IMAGE"' 'CFLAGS="$CFLAGS $SDL_IMAGE_CFLAGS"' \
+      --replace 'PKG_CHECK_MODULES([SDL_ttf],' 'PKG_CHECK_MODULES([SDL_TTF],'
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ librsvg libxml2 SDL SDL_image SDL_mixer SDL_net SDL_ttf t4kcommon ];
+
+  configureFlags = [ "--without-sdlpango" ];
+
+  meta = with lib; {
+    description = "An Educational Typing Tutor Game Starring Tux, the Linux Penguin";
+    homepage = "https://github.com/tux4kids/tuxtype";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.aanderse ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/typespeed/default.nix b/nixpkgs/pkgs/games/typespeed/default.nix
new file mode 100644
index 000000000000..92d8768e4ffd
--- /dev/null
+++ b/nixpkgs/pkgs/games/typespeed/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "typespeed";
+  version = "0.6.5";
+  buildInputs = [ ncurses ];
+  src = fetchurl {
+    url = "https://typespeed.sourceforge.net/typespeed-${version}.tar.gz";
+    sha256 = "5c860385ceed8a60f13217cc0192c4c2b4705c3e80f9866f7d72ff306eb72961";
+  };
+
+  patches = [ ./typespeed-config-in-home.patch ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: typespeed-typespeed.o:/build/typespeed-0.6.5/src/typespeed.h:69: multiple definition of
+  #     `opt'; typespeed-file.o:/build/typespeed-0.6.5/src/typespeed.h:69: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  configureFlags = [ "--datadir=\${out}/share/" ];
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = with lib; {
+    description = "A curses based typing game";
+    homepage = "https://typespeed.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.auntie ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/typespeed/typespeed-config-in-home.patch b/nixpkgs/pkgs/games/typespeed/typespeed-config-in-home.patch
new file mode 100644
index 000000000000..fe313a4392ed
--- /dev/null
+++ b/nixpkgs/pkgs/games/typespeed/typespeed-config-in-home.patch
@@ -0,0 +1,148 @@
+diff --git a/src/file.c b/src/file.c
+index d1d1982..1655f6f 100644
+--- a/src/file.c
++++ b/src/file.c
+@@ -125,6 +125,8 @@ int			 hcompar(const void *, const void *);
+ int			 loadscores(char *);
+ static int		 parseline(char *, char **, char **);
+ void			 readconfig(void);
++void			 mkconfig(char *filename);
++void			 mkscore(char *filename);
+ static void		 readfile(char *, int);
+ static void		 setoptions(char *, char *, int);
+ 
+@@ -1125,7 +1127,7 @@ void
+ readconfig(void)
+ {
+ 	char *envhome;
+-	char userhigh[MAXPATHLEN], userconf[MAXPATHLEN];
++	char userhigh[MAXPATHLEN], userconf[MAXPATHLEN], confdir[MAXPATHLEN];
+ 	struct stat sb;
+ 
+ 	if (xsnprintf(ruledir, sizeof(ruledir), "%s", RULEDIR)) {
+@@ -1140,18 +1142,33 @@ readconfig(void)
+ 	readfile(CONFIGFILE, 1);
+ 
+ 	if ((envhome = getenv("HOME")) == NULL)
+-		return;
++		xerr(1, "readconfig: environment variable HOME not set");
+ 
+ 	if (xsnprintf(userconf, sizeof(userconf), "%s/.typespeed/config",
+-	    envhome))
+-		return;
++				envhome))
++		xerr(1, "readconfig: string error");
++	if (xsnprintf(userhigh, sizeof(userhigh), "%s/.typespeed/score",
++				envhome))
++		xerr(1, "readconfig: string error");
+ 
+ 	if (stat(userconf, &sb) || (sb.st_mode & S_IFMT) != S_IFREG)
+-		return;
+-
+-	if (xsnprintf(userhigh, sizeof(userhigh), "%s/.typespeed/score",
+-	    envhome))
+-		return;
++	{
++		if (xsnprintf(confdir, sizeof(confdir), "%s/.typespeed",
++					envhome))
++			xerr(1, "readconfig: string error");
++		if(stat(confdir, &sb) == -1)
++			if(mkdir(confdir, S_IRWXU | S_IRWXG | S_IRWXO))
++				xerr(1, "readconfig: could not create config directory %s",
++					confdir);
++		/* create the user configuration with default values */
++		mkconfig(userconf);
++	}
++  /* check for the high score file */
++	if (stat(userhigh, &sb) || (sb.st_mode & S_IFMT) != S_IFREG)
++	{
++		/* create a blank high score file */
++		mkscore(userhigh);
++	}
+ 
+ 	/*
+ 	 * Open a user writable high score.
+@@ -1159,14 +1176,48 @@ readconfig(void)
+ 	 * file. Protect system-wide high score file with group
+ 	 * write permissions: privileged gid already dropped.
+ 	 */
+-	if (close(hfd) == -1)
+-		xerr(1, "readconfig: close");
+-	if ((hfd = open(userhigh, O_RDWR, 0)) == -1)
++	if ((hfd = open(userhigh, O_RDWR)) == -1)
+ 		xerr(1, "readconfig: open: %s", userhigh);
+ 
+ 	readfile(userconf, 1);
+ }
+ 
++#define DEFAULT_CONFIG	"cheat = no\n" \
++			"highorder = score cps tcps\n" \
++			"ruledir = " RULEDIR "\n" \
++			"worddir = " WORDDIR "\n"
++
++/*
++ * Create the user configuration, with default values, at the given path.
++ */
++void
++mkconfig(char *filename)
++{
++	int cfd;
++
++	if((cfd = open(filename, O_WRONLY | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO)) == -1)
++		xerr(1, "mkconfig: open: %s", filename);
++	if(write(cfd, DEFAULT_CONFIG, sizeof(DEFAULT_CONFIG)/sizeof(DEFAULT_CONFIG[0]) - 1) == -1)
++		xerr(1, "mkconfig: write: %s", filename);
++	if(close(cfd) == -1)
++		xerr(1, "mkconfig: close: %s", filename);
++}
++
++/*
++ * Create the user high score file, which is just a blank file.
++ */
++void
++mkscore(char *filename)
++{
++	int sfd;
++	if((sfd = open(filename, O_WRONLY | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO)) == -1)
++		xerr(1, "mkscore: open: %s", filename);
++	if(write(sfd, "", 0) == -1)
++		xerr(1, "mkconfig: write: %s", filename);
++	if(close(sfd) == -1)
++		xerr(1, "mkconfig: close: %s", filename);
++}
++
+ /*
+  * Function used to open configuration and game rule files and to
+  * set options with function setoptions.
+diff --git a/src/typespeed.c b/src/typespeed.c
+index 7ac5ee2..77e9acb 100644
+--- a/src/typespeed.c
++++ b/src/typespeed.c
+@@ -319,8 +319,13 @@ main(int argc, char **argv)
+ 		progname++;
+ 
+ 	/* just open high score file while being setgid games */
+-	if ((hfd = open(HIGHFILE, O_RDWR, 0)) == -1)
+-		xerr(1, "main: open: %s", HIGHFILE);
++  /*
++   * For NixOS, a global high score file doesn't make sense, so we just comment
++   * this out. A high score file in the user's home directory will be opened
++   * later in readconfig().
++   */
++/*	if ((hfd = open(HIGHFILE, O_RDWR, 0)) == -1)
++		xerr(1, "main: open: %s", HIGHFILE);  */
+ 
+ #ifndef WIN32
+ 	/* drop privileges */
+@@ -348,9 +353,9 @@ main(int argc, char **argv)
+ #endif /* WIN32 */
+ 
+ 	/* check file descriptors for consistency */
+-	if (hfd == STDIN_FILENO || hfd == STDOUT_FILENO ||
++/*	if (hfd == STDIN_FILENO || hfd == STDOUT_FILENO ||
+ 	    hfd == STDERR_FILENO)
+-		exit(1);
++		exit(1);  */
+ 	if (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO) ||
+ 	    !isatty(STDERR_FILENO))
+ 		xerrx(1, "not fully connected to a terminal");
diff --git a/nixpkgs/pkgs/games/uchess/default.nix b/nixpkgs/pkgs/games/uchess/default.nix
new file mode 100644
index 000000000000..8cb49bf1e3fc
--- /dev/null
+++ b/nixpkgs/pkgs/games/uchess/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, makeWrapper, stockfish }:
+
+buildGoModule rec {
+  pname = "uchess";
+  version = "0.2.1";
+
+  subPackages = [ "cmd/uchess" ];
+
+  src = fetchFromGitHub {
+    owner = "tmountain";
+    repo = "uchess";
+    rev = "v${version}";
+    sha256 = "1njl3f41gshdpj431zkvpv2b7zmh4m2m5q6xsijb0c0058dk46mz";
+  };
+
+  vendorHash = "sha256-4yEE1AsSChayCBxaMXPsbls7xGmFeWRhfOMHyAAReDY=";
+
+  # package does not contain any tests as of v0.2.1
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper ];
+  postInstall = ''
+    wrapProgram $out/bin/uchess --suffix PATH : ${stockfish}/bin
+  '';
+
+  meta = with lib; {
+    description = "Play chess against UCI engines in your terminal.";
+    homepage = "https://tmountain.github.io/uchess/";
+    maintainers = with maintainers; [ tmountain ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ue4/cdn-deps.nix b/nixpkgs/pkgs/games/ue4/cdn-deps.nix
new file mode 100644
index 000000000000..4b7fa8765ca9
--- /dev/null
+++ b/nixpkgs/pkgs/games/ue4/cdn-deps.nix
@@ -0,0 +1,7028 @@
+{ fetchurl }:
+
+{
+  "0049fd8a61e04257b6dcb37217d4d603cd74cc6b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/0049fd8a61e04257b6dcb37217d4d603cd74cc6b";
+    sha256 = "1dcyxixgqsw4lcwg9066q39yghhppfp85yyi4r4drq5j5rg3dgb1";
+  };
+  "0055e020f7505cf021eb66b73e3a8fa3cc308b05" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/0055e020f7505cf021eb66b73e3a8fa3cc308b05";
+    sha256 = "1i2ff0hzrs2kdqv860wjnddyp80asanx5zzispsbzm95iljfby70";
+  };
+  "007491dae0c56c74ca78a46639d8e41243bde83f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/007491dae0c56c74ca78a46639d8e41243bde83f";
+    sha256 = "14q664k5dgyc4f30mc6f2537w9mxw9407nba3023xss9vfijldgv";
+  };
+  "00927d42baa3e7f8fb204e62ea43ff39384f8679" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/00927d42baa3e7f8fb204e62ea43ff39384f8679";
+    sha256 = "1jpzh24r1xkn8vifqyqljfbb9jbmcl7syigaq2lkjjxfl9nzwqqv";
+  };
+  "0092dbc71c6b4bd985a697ac3d1f1597c0bc82f6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/0092dbc71c6b4bd985a697ac3d1f1597c0bc82f6";
+    sha256 = "17cdmr5p4vyq04m0njv4b82l6gnp0dpxs22y5466ksnksckh9xwz";
+  };
+  "009f9921fd444183569a1057648f0c3573688f98" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/009f9921fd444183569a1057648f0c3573688f98";
+    sha256 = "0pc107dgkg8v51gy4083myp01lby8xfvlkx5xplsq55lxifkxcqy";
+  };
+  "00ab55311f402e65385f797ea5e1c4ab4663553e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/00ab55311f402e65385f797ea5e1c4ab4663553e";
+    sha256 = "1d2hwgd2zk4alxb6fb4fzkxcpkl3gp95v39jd0g77frj5ajnf5yc";
+  };
+  "00add27414f59890b092ab4b03bbbc585cedb847" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/00add27414f59890b092ab4b03bbbc585cedb847";
+    sha256 = "0jmbay34rl6srpkylamsy409a2rpqb9jwhyxfph34bazsp3jv04k";
+  };
+  "00b98d4aec7a1f350c0fdd8186841aa96c0cce53" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/00b98d4aec7a1f350c0fdd8186841aa96c0cce53";
+    sha256 = "0lh9rdgg9nr2mxvgx0rdg0zk4q5gsza4yacxp933bm41vvdwr3kq";
+  };
+  "00c4eb5dc59035a15405197341b6b925473708db" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/00c4eb5dc59035a15405197341b6b925473708db";
+    sha256 = "00xl95hd2qcnzylvqc77pv758frws8z8anf4kb5vhz3lcv8c1n9n";
+  };
+  "00f460c11eef99d9e125c11687a40d39f7b74873" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/00f460c11eef99d9e125c11687a40d39f7b74873";
+    sha256 = "1zp0qrc4nrv2cy7mc0z7chm75pa6ffzzz7yr32lw9ijzv5rbcjml";
+  };
+  "0104416c142ca7b3174660267c22f049db573bdb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/0104416c142ca7b3174660267c22f049db573bdb";
+    sha256 = "0lzg75w1cnbm9yll32la7gcq5wv7wr8ckx3kxv4adhkkaz53bail";
+  };
+  "01687bd36252e9a263022192524ca8835ae9552b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/01687bd36252e9a263022192524ca8835ae9552b";
+    sha256 = "0cdql0x9nppg7lh4rlnc1k4cj4pv404881z02miqlr99a05rwzpv";
+  };
+  "01a1b60633d0e13df7952058973ca4979a5389e2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/01a1b60633d0e13df7952058973ca4979a5389e2";
+    sha256 = "127llh0ybq7f6fnsmh1hrh4xh46ap0x3za9xxqfmj0qhfbz5nanr";
+  };
+  "01b5b6310231646e87a0bfefaebfee7f0c9e1929" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/01b5b6310231646e87a0bfefaebfee7f0c9e1929";
+    sha256 = "0agyb9fy1vpnc06073c8j1k3d9n475pznf5chaxpcqpppcqi8j55";
+  };
+  "01d26cddb178f064c3cd74a09430970bf6cc12b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/01d26cddb178f064c3cd74a09430970bf6cc12b7";
+    sha256 = "1lxb8g2hd2jdswinzgnr4dqknh1c6nm6xh3fwbkvniglglrr7w9z";
+  };
+  "01e6c01a96b3cbe860204f191d1b9153509a9dee" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/01e6c01a96b3cbe860204f191d1b9153509a9dee";
+    sha256 = "1ll3kahg1bvrw1djm855fan0yhfv385qaqbvsx11h4f7nsk1y8l1";
+  };
+  "0255260ee4d81de161e877cdcc3af4d7fcf8d0e3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/0255260ee4d81de161e877cdcc3af4d7fcf8d0e3";
+    sha256 = "1b35v17pkpxjak9nslgmqik0779yqpfmrqhxih85fw38cx883y9k";
+  };
+  "0287d808513bc8ab41d3a122437451b3505e5a06" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/0287d808513bc8ab41d3a122437451b3505e5a06";
+    sha256 = "0kjqvqs537kjji645wj9c7g0vm49saz7844gmsvaxbxa7j6qpv8r";
+  };
+  "0294cec564dabb2b74767382fed8bf1d85c3dd6a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/0294cec564dabb2b74767382fed8bf1d85c3dd6a";
+    sha256 = "1bc87j7aqh55c08r95iqhjy7yqyvjfrhnl5p9nvd9rmsywlcdpy6";
+  };
+  "02b79c9e934ba5d5df21ca904400f6921b0e919c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/02b79c9e934ba5d5df21ca904400f6921b0e919c";
+    sha256 = "0ky6wm47c5nly14jj171nvr1hyx9qn027jpxzhffmdj1zd0ab1n2";
+  };
+  "02db54285fbdc7bcbc5072716c06102dadbe73a3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/02db54285fbdc7bcbc5072716c06102dadbe73a3";
+    sha256 = "08j35dhpj1wpsjck57w6sncy9vciqmhpnzsmrb8a698alb4nq4la";
+  };
+  "02e23f8b72f230a371e141cf422d6339edc7f136" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/02e23f8b72f230a371e141cf422d6339edc7f136";
+    sha256 = "0lgfl91hyy4isy03jp1lprlr6p6vq95vs408rr620xrrx8v9g1xj";
+  };
+  "02e31aefb786970a757120d82ef7e57d99598e2a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/02e31aefb786970a757120d82ef7e57d99598e2a";
+    sha256 = "0kzp6hvpclqgm6ik46ifsb7q8cnyc1jpmn9hablz3bbcgz1ja1v6";
+  };
+  "02e3996085d4a6eadcc0403adb002e453626ad38" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/02e3996085d4a6eadcc0403adb002e453626ad38";
+    sha256 = "1av0m7l2yb9k74482i60gbshpbiay25j6272p78vzzky55gfvvkq";
+  };
+  "02f911003167be7b08c3fbf9bdababa124958f48" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2489400-f6cf8f7e3aa44b46b137c223b0724bd6/02f911003167be7b08c3fbf9bdababa124958f48";
+    sha256 = "1a63d9d3ca0fhzniqwksxfs1q9fzxa8wz8mmcavnhmh2hcdf8l7s";
+  };
+  "037becd787cf315691a800ac53fc1ace30efc22f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/037becd787cf315691a800ac53fc1ace30efc22f";
+    sha256 = "19jwdg0gi8axng2jc52i39bahzyhsksmza8ich6xbga7vzmcslic";
+  };
+  "038a65feb0c32e0a8997e4798012f90e380a5fa4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/038a65feb0c32e0a8997e4798012f90e380a5fa4";
+    sha256 = "11c1sk31f1wv2by7fvmwjlw0bf2khjh1gn7sx5iib6bx10mfk6zg";
+  };
+  "03bb65f1dc5e3bf35f5d6d5d6068a10aed0cf4a8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/03bb65f1dc5e3bf35f5d6d5d6068a10aed0cf4a8";
+    sha256 = "1akwa8n1h491r45w8z4396bpg53szq42ac081ra087a92x699h59";
+  };
+  "03eac14bed108c28a0a4450fa4f534d145c12179" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/03eac14bed108c28a0a4450fa4f534d145c12179";
+    sha256 = "1y2gwhynvyr499kj3l4w5wj55q938n6swb8wbzily46r24g8d6g6";
+  };
+  "0419d8143ae34750eb7de7c51c4d3cd231bbce51" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/0419d8143ae34750eb7de7c51c4d3cd231bbce51";
+    sha256 = "1nr22bs71msfzp0ndi5hm7y4blv51039dpcv05a0xv4s939y16bl";
+  };
+  "041d9b9407ae8d58c7c3a7110af093916fee573e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/041d9b9407ae8d58c7c3a7110af093916fee573e";
+    sha256 = "14syxk0bgc8khzabliibvm82asc692pyxa8m78f3jii47gy6vwcn";
+  };
+  "042de486169ab637609e1b035138f64893e04ad5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/042de486169ab637609e1b035138f64893e04ad5";
+    sha256 = "0j5p0bid72xs8r63nbkyx77w89fy6d1kbx6axph5w6nnkr2flvy6";
+  };
+  "049aaeab9a2e4405e946d0097d1a3e824c128df6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/049aaeab9a2e4405e946d0097d1a3e824c128df6";
+    sha256 = "0d56izrz5cbgib0mxzd5zj6yzvfln4rglpvxi1h05l5xrd9rcc9s";
+  };
+  "04b9a9091bba671b960e607283c6434625072697" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/04b9a9091bba671b960e607283c6434625072697";
+    sha256 = "1sbhvy7dyir4gk6ignmbssmmhjkqm34rpzri9jv50k59lhdzrmz4";
+  };
+  "04e55b081d4e6680ca0da096eab39443e53aeb2a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621793-1958bfdd4e3b49f3a0ca6a4c08a60a0a/04e55b081d4e6680ca0da096eab39443e53aeb2a";
+    sha256 = "1f4mypy8nv0m4xzljlj9d5h13670r78lmp1nrzkyj6pkjaiz9l1h";
+  };
+  "04ec121ce824aec5caca1ddb70eaa21e0191a5b4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/04ec121ce824aec5caca1ddb70eaa21e0191a5b4";
+    sha256 = "0a32ss082pizm8qybmpsl91mc60290wj192rlgbp7q7rvn85j5yi";
+  };
+  "04f2ae9278db23034ee3cb0bbbe67db49b5881fc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/04f2ae9278db23034ee3cb0bbbe67db49b5881fc";
+    sha256 = "1d0l0kjscdgwm5sb454hd7n5vn0x61v78b7zklhjrfzmfsqxxijz";
+  };
+  "052ad62516b7d63eaf4c6410cd2dca0264734665" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/052ad62516b7d63eaf4c6410cd2dca0264734665";
+    sha256 = "1a70f5mk7z053i0xl949gngkysdg3kc810mm88mirzn501xc6rq3";
+  };
+  "05be3410a78afea71327d64933707b9f7550d2f6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/05be3410a78afea71327d64933707b9f7550d2f6";
+    sha256 = "1vb8vsjx7h1k9vdikm02lzwjpyfm409kh8q8bv94d0plh9cpg03l";
+  };
+  "061b4fb485e75b96f3266aff9a762a28b2d77616" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/061b4fb485e75b96f3266aff9a762a28b2d77616";
+    sha256 = "0f4nbrgdpb6dy6z0brk7fidx97svxljqcwng4skqg0rww9275hh2";
+  };
+  "0625d1c6055de9cf9025b2e61299912a56f88ccb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/0625d1c6055de9cf9025b2e61299912a56f88ccb";
+    sha256 = "150c0n1n1fa6f89pxv3rp8yxfcvkca3ygp7fwia0s8zcakn02ail";
+  };
+  "0668d99201136f1b598c5795fa3e58050020e8b1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/0668d99201136f1b598c5795fa3e58050020e8b1";
+    sha256 = "0cmd3ix5b39bakyrra0p9847lq14kb7jkvcl3hw30v8kww4m056w";
+  };
+  "067baa5f7a564bf867b5b337369950ad00e13e99" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/067baa5f7a564bf867b5b337369950ad00e13e99";
+    sha256 = "1jmdc1hpl7hgn22ws8357lg0v98a51d3qa1fqhq3bbvhcssgls62";
+  };
+  "06ebb79f97706bad4850ce9077a9e7e90185e324" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605188-b2b13e5f7b3d453eb5d6b0cde31b638c/06ebb79f97706bad4850ce9077a9e7e90185e324";
+    sha256 = "18ykxqm31gd1ij30a9vf8saygjk162k2jqmpybx00vqawqwbbcx5";
+  };
+  "06f561a38764b8e9c4087a97ed512c995363927c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/06f561a38764b8e9c4087a97ed512c995363927c";
+    sha256 = "1wassg3y5yd5i5jqsd528ddb8j9f65r4k5g981z6l70spk5l0v34";
+  };
+  "0702299294e21ac823c34d43de2a89140288143d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/0702299294e21ac823c34d43de2a89140288143d";
+    sha256 = "08wjf4zk7pba5ac5s2d26zlrq7ld12bd7l35xn2pz9lsd1j4qwry";
+  };
+  "070b80d72403fb102b91c2c7c1eababab6aec2f7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/070b80d72403fb102b91c2c7c1eababab6aec2f7";
+    sha256 = "0jv0j6qp1k1zwww3qvrckisa5cdj39xq9aw3ljsvdfsp10x4i4a3";
+  };
+  "07a88f4f32dff82062e33545b17b0011c4f3242b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/07a88f4f32dff82062e33545b17b0011c4f3242b";
+    sha256 = "139xl7bzcab78s1ma42vl2yqxflxrpgl8qglnwbfdlq1nxbj8yiq";
+  };
+  "07bac5d4a23c9a7bc1695e030017c8694d72a735" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/07bac5d4a23c9a7bc1695e030017c8694d72a735";
+    sha256 = "0f6pjix0slzd06yqgd7vfsdssc3qkqi3av6kvfmjcn22xryq2qn6";
+  };
+  "0818124e55b7ae14e580ada76b6fca5656c05836" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/0818124e55b7ae14e580ada76b6fca5656c05836";
+    sha256 = "0a3frk5viy0pv4ac7jv50j74d985hgq2dnjq6vgkrdcrir7zbz0m";
+  };
+  "084e5de210ff35e876901668dd00537a3a019ac5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/084e5de210ff35e876901668dd00537a3a019ac5";
+    sha256 = "08v9q7796r1nab02ghyvbdsip8bmw07cab6w079vvrqwkrg2ajcm";
+  };
+  "0898f76e0b61476b01184a79f59737933332711f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/0898f76e0b61476b01184a79f59737933332711f";
+    sha256 = "1qrz8ld9a5lv5pxs34icsic6c8fy1ydjx79zf35hvzdaqkds22jc";
+  };
+  "08aafc6b5bf5f6834032ea41a414bf57378e9d6e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/08aafc6b5bf5f6834032ea41a414bf57378e9d6e";
+    sha256 = "10v3b2bsx240fa9xvarh5r4klz2gnqg9ljf2h34j8pqs1fq6dvc2";
+  };
+  "09007b1cd8b9f90a5ab85549323903759f18b852" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/09007b1cd8b9f90a5ab85549323903759f18b852";
+    sha256 = "0vx3k63svxh9iyzy69vwkm6i9kays9jdkc8fzyd71k9wspq4ynvr";
+  };
+  "09510670263d739c9271c8d43047c1e427873509" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2702576-55d4c00170ec40c8a92540c9aee72a96/09510670263d739c9271c8d43047c1e427873509";
+    sha256 = "1wzb6gsxrvc3l1yhlaj533k1ha8c6s5bpnivs0jcqflnc3lfcza7";
+  };
+  "095aae7dd171f8fa10295657651b0889b387ad68" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/095aae7dd171f8fa10295657651b0889b387ad68";
+    sha256 = "0fig4i1afa9y27hhq3dkc5j36hwi5m1h2yviwv2kv60g9k01rsil";
+  };
+  "09601c1491f5d27c2533b4e7c9fb26a2e5eaa4d3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/09601c1491f5d27c2533b4e7c9fb26a2e5eaa4d3";
+    sha256 = "1b99ms4v6shf8ld7faxlckgmz8c8ii5avkhk88809ry6v4mhm2qx";
+  };
+  "09732d6bf762ba4d866616248b46adff0e12d76b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/09732d6bf762ba4d866616248b46adff0e12d76b";
+    sha256 = "0g096y34r6a3f270n7gkh96ybrjl4afgscpzwbk860dik4xkzvnj";
+  };
+  "09b220dceaa8205e3a32a877c58c678dfdb8555f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/09b220dceaa8205e3a32a877c58c678dfdb8555f";
+    sha256 = "1a108nfspg6v2mfgj7g310cxvgq1b3b9i8l0sll8p7dcwdqk5077";
+  };
+  "0a17d50561c9bf1d85e82416f97726243726fe8e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/0a17d50561c9bf1d85e82416f97726243726fe8e";
+    sha256 = "1ibf6hr9zkrvj7x4mlmmvi552is75p60rgbcrr2bxjnk5vd5kixn";
+  };
+  "0a85e36f224c350b058936fdb88cb656864411c4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/0a85e36f224c350b058936fdb88cb656864411c4";
+    sha256 = "1wdrvm3s4asra41zgr309y5rwlw0nng1m4cd8p4gcch8q8vybl1z";
+  };
+  "0adcf8b7399354848f3b1659ae1bdfebe7c5fb54" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/0adcf8b7399354848f3b1659ae1bdfebe7c5fb54";
+    sha256 = "0f3zipklkp21qmsi5y9bm5539pgjn9h85w3r7qxhsa7arq4bfv9y";
+  };
+  "0ae58afa6b821d9172b327831297925b165ba540" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/0ae58afa6b821d9172b327831297925b165ba540";
+    sha256 = "0xi644mlx97vyfzcp4zg2xy4d7xl6bpsqbyrja8vc02ddcqrz8ws";
+  };
+  "0b0c49fd66d2a1e20b9c3dfbaf57920646259399" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/0b0c49fd66d2a1e20b9c3dfbaf57920646259399";
+    sha256 = "1862n366gcqqkf5apc19qg6w6vmyap3hz5f91lskhd3i28zmzcr6";
+  };
+  "0b19af7719665b5651dfb183e0f462030575539c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/0b19af7719665b5651dfb183e0f462030575539c";
+    sha256 = "02015jsy2mzf4hkir3f11xxg2z21vrz5qnwyias322jr3g3k4x8n";
+  };
+  "0b2364f6696f39626a964e4370380b3fc8768b43" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/0b2364f6696f39626a964e4370380b3fc8768b43";
+    sha256 = "0nfz5g0wp7l4kbdjg3qvl0p2nzcravivw0bhbwb7zppmmrsz08b9";
+  };
+  "0b2cd11ad11c170163c7958e24f339bf66609001" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2620227-83084f9091244f6c9bba34d6d2a0fc20/0b2cd11ad11c170163c7958e24f339bf66609001";
+    sha256 = "0qhsp71xk2pj9dq3al2pghnh5w1zsvfwgg4ykm2czn8dqpr6v2fm";
+  };
+  "0b41a5fe69764ca460a102d4569d5cf0a96262dc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/0b41a5fe69764ca460a102d4569d5cf0a96262dc";
+    sha256 = "1w56h4m41178dyi9swrqjbl6jk6hz36i1ax27gmbvlmn71bd25sr";
+  };
+  "0b650b20c8c8aba9b4ffbfff4555352296b8026d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/0b650b20c8c8aba9b4ffbfff4555352296b8026d";
+    sha256 = "0z46pi0np99l1dd63b8c7wlpzn9aqgfs8m90i8shkb8rr83yvqrd";
+  };
+  "0b65847315b6c2c97cf1cb6e6d159e22233c8251" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/0b65847315b6c2c97cf1cb6e6d159e22233c8251";
+    sha256 = "14pcxkamnwscpdq1gw0jdmpxsvilq8wdgpzlgsifdmwhrbzq9dhw";
+  };
+  "0b6608a97e2540ea5f17c2efa77ffe1ee1b3c533" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/0b6608a97e2540ea5f17c2efa77ffe1ee1b3c533";
+    sha256 = "03j28mjv9qhw3inkj2sq9ri7vbajkfg4yq4fydqgas8zxiy7p5sa";
+  };
+  "0bbfc90e364f03102506acd5ad039a28e02cadf7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2618399-180c811b4d074c95af323aa82cdccb34/0bbfc90e364f03102506acd5ad039a28e02cadf7";
+    sha256 = "1p276i1gcj0hm4y3n46mz7inc0dh5naz2kj85aa07dy734qmnayf";
+  };
+  "0bcc47e413bef8dae40e79c9757941b0db15f97a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/0bcc47e413bef8dae40e79c9757941b0db15f97a";
+    sha256 = "0h6qjxy1p9x7yfyawygb44bhlmdli96riclq9jbw9dypgpywmff3";
+  };
+  "0be87d25f74713be10bd98e1e966d795cfe4e5dc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/0be87d25f74713be10bd98e1e966d795cfe4e5dc";
+    sha256 = "0pd540vl2hs57fsbjrxj0vzsilr8mqx5ad47kmcpsk3nckrq6p1w";
+  };
+  "0c8fc2ef1a59d232fd4f22a022e20d492f6e2a84" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2706207-4f57365c766141c988cbd0106cf38f5c/0c8fc2ef1a59d232fd4f22a022e20d492f6e2a84";
+    sha256 = "0knhyb5y0fmbjds7qjhgxq5cvicv925qbp5pkdsa4bqab8vgzjaq";
+  };
+  "0c95d970796b73f6699b10dc55a5f23caeb0e7b6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/0c95d970796b73f6699b10dc55a5f23caeb0e7b6";
+    sha256 = "157klpl089j437v12ngyfy20jipwdb252khg84dhz54dnmsl30l7";
+  };
+  "0cad2c40463fe8795e6ba38765dd8c775689eca4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/0cad2c40463fe8795e6ba38765dd8c775689eca4";
+    sha256 = "1h85ix8ilw61jqiihm4xgkhknsqwfmkhw6zmyc1b3h5iczwa56m4";
+  };
+  "0cb75afcdc3e2acc810f4eaab1c4d0e47b71e66e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/0cb75afcdc3e2acc810f4eaab1c4d0e47b71e66e";
+    sha256 = "1w1h8gj1sln0h4vsbqljnbdwmvfii0iykf9p8pfi616pi1rk0zrz";
+  };
+  "0cec09dea442a96d2db56d5f25830c204faf9c73" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/0cec09dea442a96d2db56d5f25830c204faf9c73";
+    sha256 = "1lik501r5m0jgnrlkimbwanwdd9j5j81xlwcksiyfaf4mx4jfd5q";
+  };
+  "0d1962bd98cbfd172126e306fff8cf75b8796bc7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/0d1962bd98cbfd172126e306fff8cf75b8796bc7";
+    sha256 = "1vjgl25j9v7qnv9829jprsgdlgagsh9rzv22fpq9yyiclxavhza2";
+  };
+  "0d5caa5b5d94abc659bf759feee88b37f4cf4618" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/0d5caa5b5d94abc659bf759feee88b37f4cf4618";
+    sha256 = "0660nyachjcvccrdkrarqwwalp5whg7ja998la6vqbpfq3m4x9dx";
+  };
+  "0dcd2138b0d77e84dd01b019736eefc97445f806" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/0dcd2138b0d77e84dd01b019736eefc97445f806";
+    sha256 = "0a5693qjs5ap9m3idqiadaym0k6j4saan6jd7mi1db9y66r4czsk";
+  };
+  "0e1315e453e0b243c9c0afc4965bc9042f5eadfa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/0e1315e453e0b243c9c0afc4965bc9042f5eadfa";
+    sha256 = "1gjk3jjcnns9pcab7q7b8i46k8lsn5sjmp9vh0cswkl23v3qqwwg";
+  };
+  "0e1a08f56c646fa8ce394a0e41b8cab5a658268d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2608258-d12288bf79ea446a9353c7f9d223b24e/0e1a08f56c646fa8ce394a0e41b8cab5a658268d";
+    sha256 = "1905j12lxpla20xiv6f2cjmnp100mzzp8076n8j295fdn7vbrb9v";
+  };
+  "0e26168a7254c7ba26bf4c06b28033e8387c689c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/0e26168a7254c7ba26bf4c06b28033e8387c689c";
+    sha256 = "026w09ixxqzfgp0kbf60h7qwixd2gnx4v13kb9l3nn0g9p73slzk";
+  };
+  "0e4c8e5cf7fcfddf545be976ecd6d676331d54c9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613635-9840736c5f9647ffa600ff7b7e36f4ea/0e4c8e5cf7fcfddf545be976ecd6d676331d54c9";
+    sha256 = "0r42n43jnwi8w8z0z08p6pzha973qxy3km94w3n0ywn7f1b20wbp";
+  };
+  "0e6c43d516af17c6766c4b204af1a1358451d364" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2748421-cc8960341ac147a18a63389f5fd32945/0e6c43d516af17c6766c4b204af1a1358451d364";
+    sha256 = "1n4n643zzh11k77vwvcsqsz10s8pks5729qbh9wq9ccrs2b5k2kd";
+  };
+  "0e934ae8f346ea8f7834da572917c93731ee3e71" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/0e934ae8f346ea8f7834da572917c93731ee3e71";
+    sha256 = "0n6czxwf531phc7l9d1daymylsvlhspfa6byx73nj2piifrnzcm3";
+  };
+  "0ed7e089f52f2e816998664ec165b776a056ee6e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/0ed7e089f52f2e816998664ec165b776a056ee6e";
+    sha256 = "0nl7j84np4v6109dnvslal6p6w8ycx8ai9nnagkg8bcsq9a4ramz";
+  };
+  "0ee5f371d8dffa94c5df7c2c1337d8a7029c022c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/0ee5f371d8dffa94c5df7c2c1337d8a7029c022c";
+    sha256 = "0jh51nbdqcd7bz5sqj112q4y3iqr47lnp725f32s5ad9ywa2jrpv";
+  };
+  "0ef3349a6ee43e03e0390d117749207582bd62fb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/0ef3349a6ee43e03e0390d117749207582bd62fb";
+    sha256 = "14qi1p9fxb0mgvhnriqf1qx716ap18vfsjp7kdcmn295fqzkxl8x";
+  };
+  "0f5530749f1eb9cd579c611a2c19eb675d225841" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/0f5530749f1eb9cd579c611a2c19eb675d225841";
+    sha256 = "1i3ngjajjhv2yamk2hcza399iylja42ygjbp7kwqx6qxvc2vh02p";
+  };
+  "0f74ff9d91cbb2b2061d50909d5d7f093b845a72" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/0f74ff9d91cbb2b2061d50909d5d7f093b845a72";
+    sha256 = "06a5r840iksqmzch0l6hkngd2rv2s7dbwlp7dw1gwfd1ql9vm3c1";
+  };
+  "1015366202732d5b428dc71ad9ec5fa99ca1b874" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/1015366202732d5b428dc71ad9ec5fa99ca1b874";
+    sha256 = "1s4q8bzbxypj650pwrbb6mqr9yqskavdrcj8kw03hj5fz29d9szy";
+  };
+  "1016254965add7631ca2982903c6d0169b0d45b2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1016254965add7631ca2982903c6d0169b0d45b2";
+    sha256 = "17rp6pixbs3qi9xyzh0w7kq1hcywckayd1q2db77m48rg36gvg6s";
+  };
+  "1028eaded56f0e46a92e7188a0e4dae970bc77c8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1028eaded56f0e46a92e7188a0e4dae970bc77c8";
+    sha256 = "0867qswbqmmlam1l1a2d2ynzb1p5fwwp92mfb19n1ippgy6d128g";
+  };
+  "104b55382829a7351cea26478445bfa8e601d755" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/104b55382829a7351cea26478445bfa8e601d755";
+    sha256 = "0sr5c506zphmxclrzbq9b23jc8bcvwx58hpqzqg07d94qw9p4rsb";
+  };
+  "104eb620cbaf2629b13d4f5dc9edc9a888ff2e33" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/104eb620cbaf2629b13d4f5dc9edc9a888ff2e33";
+    sha256 = "01z335z3ddkvsx4z96m9w96hbksg29miqyn6wmvgpbsvgbp1wmgp";
+  };
+  "106f60f7c4e09a6444df98f226b3b925941480d8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2467022-c410c14385ba462bb86b4995040cdcb9/106f60f7c4e09a6444df98f226b3b925941480d8";
+    sha256 = "18xzn1iphddc7hyniyhrlsv36cijij7724psb9nq2dz5dpclg3db";
+  };
+  "10723922ccc14914c163a9546c40f01779891869" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/10723922ccc14914c163a9546c40f01779891869";
+    sha256 = "0pi4s4r7pk6adb8v5f1g9bs3jb028yqsg4d82nd7p99qw4q4q20x";
+  };
+  "1077e9c2c6e2f36520c08a148ce3709a6e10a8ab" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1077e9c2c6e2f36520c08a148ce3709a6e10a8ab";
+    sha256 = "1ms7r8pkbrsrb7brbcralbmxl20lhb8a77zhiad3b9xbwyil4p67";
+  };
+  "109ac2799187c1e94076a2db14922c275e94adbb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/109ac2799187c1e94076a2db14922c275e94adbb";
+    sha256 = "1viw9fa3gd8sc4qdfxh5x5b9pz8712xa15sfgjr16h6mb9h5y4yy";
+  };
+  "10bc8f77ff0fe6245b5ecf2b32ffcee97d4d42d4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/10bc8f77ff0fe6245b5ecf2b32ffcee97d4d42d4";
+    sha256 = "0f7i36149z2g7i4j8z7d5d3xnw476d3raiij87y0siixw0fl0js1";
+  };
+  "10d7ee1bc39b827fc0238870cf1aebbee7ed2b0b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/10d7ee1bc39b827fc0238870cf1aebbee7ed2b0b";
+    sha256 = "1088hkj96l5kxx3mww39nmkv2mzvc97syx2a9w6yys89n5y166qg";
+  };
+  "1142cb9f18f922166ae87d131c1fd09dce63f6d9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1142cb9f18f922166ae87d131c1fd09dce63f6d9";
+    sha256 = "1frmz1rbhzfinz06lg14pcz7mbr1sddl6v9n53p2dq64lkrpcsw6";
+  };
+  "11485b16ed1b0a1f37aef0aec2e8a7afbf490e75" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/11485b16ed1b0a1f37aef0aec2e8a7afbf490e75";
+    sha256 = "1i1619cvimdj4a6786prdr1c76ga37blckyx6zzqkarq4idl3k9y";
+  };
+  "11beb714095ff4a699b6f0a3543c8c2b82cf1a0d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/11beb714095ff4a699b6f0a3543c8c2b82cf1a0d";
+    sha256 = "1iyb0g8rbhhjs87z8iadjddk254z3jn6g9c80v93i6vgw8k9bcbf";
+  };
+  "11fad551f44760406d524cb0e1892580b9be77bc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/11fad551f44760406d524cb0e1892580b9be77bc";
+    sha256 = "00bj5pkychks7kaipf1dqkw7bhf0597g4qlh6rbm8qn4zd5f2747";
+  };
+  "12468bf1be869d88d9a8104ffde7c4887839843d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2608258-d12288bf79ea446a9353c7f9d223b24e/12468bf1be869d88d9a8104ffde7c4887839843d";
+    sha256 = "0h5a4gfvj1hjxv4lj0m4bzavfh8akwbz6wg027q0mjnr143k0pr9";
+  };
+  "12d1a73c1c063a416ba2a70fa0cb25ebee04cedf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/12d1a73c1c063a416ba2a70fa0cb25ebee04cedf";
+    sha256 = "0wkrw8jwjwhk3zvrs883xhrwcrppg8j3plnvxb109d67k7c1pd1h";
+  };
+  "12d213957fbfe643a97d5072b1f6ae30aeebcbb7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/12d213957fbfe643a97d5072b1f6ae30aeebcbb7";
+    sha256 = "0p4pzcn3fmqnkz93wk023zzs1f12c1xpsx7fkz2hv8i4jm8mrkb4";
+  };
+  "12eb0444499ce41f101b1b5f9dd6b87894949511" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/12eb0444499ce41f101b1b5f9dd6b87894949511";
+    sha256 = "19nggqdvkq6rap0sqnpkyrwsc882dzy1cg2lbsbd88s2nn6lrc3q";
+  };
+  "131d64c4948a0370d99897b2ad5a968b160e4300" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/131d64c4948a0370d99897b2ad5a968b160e4300";
+    sha256 = "1g0wf836rpmy7g291wyf0xwyr8g196cb0val8lzg5pa5qxivpr1g";
+  };
+  "132e734bba8f24cfaecbe6e03b85b76158a57d1f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/132e734bba8f24cfaecbe6e03b85b76158a57d1f";
+    sha256 = "0g7qw0y8006hmmfpmrz80628l35380960j54iqrp88jbqlqsd1p9";
+  };
+  "139f335e517878be52106907638e80140951abaa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/139f335e517878be52106907638e80140951abaa";
+    sha256 = "1xdwmml0i40dvdi148fzk7xp0wcpx4vfp488159xl09p88ad9zk3";
+  };
+  "13b3c6250566821e05b35dd3296b5686aae3f325" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/13b3c6250566821e05b35dd3296b5686aae3f325";
+    sha256 = "0dcis8x0fpq6k33bxfhnh0j0bywr084l8nla6jkx6pfvwirq06cy";
+  };
+  "13c7b27a977c4bf9c4e07a19ffb106c1128995bd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/13c7b27a977c4bf9c4e07a19ffb106c1128995bd";
+    sha256 = "1387mczy66xavzg995734s7vg45nn895pm3pp8n2yrgzhd1qfzjz";
+  };
+  "13f0a72b4826430335caa709e76f92079ca53b13" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/13f0a72b4826430335caa709e76f92079ca53b13";
+    sha256 = "1w7wbwifr9896ndbmpxmx85md5hb1v8amd8paryn8jb573hjl28d";
+  };
+  "1411432bb3fedd8dc4b429d4f6929746ef0e0a2e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622402-86d1483fa60742b6be9fd5a0b0b946e0/1411432bb3fedd8dc4b429d4f6929746ef0e0a2e";
+    sha256 = "07586dvm3qmccm5i0894lwcc8zfjx95c8vvdp619vip6xg825g5x";
+  };
+  "142674e220c8509ae1f8b001af30a95d6b08951c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/142674e220c8509ae1f8b001af30a95d6b08951c";
+    sha256 = "0bzlrpir8fw10360kzi422zbhaal8sqdpl77qx3fk3gxhvj26r2h";
+  };
+  "145ca8052bc6fccd7bf7af21f36664fc217f2f70" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/145ca8052bc6fccd7bf7af21f36664fc217f2f70";
+    sha256 = "1ip6wspykfvmxidbwfhflfzbcnqzfmmmhgax5nxg5pla2yn71kdk";
+  };
+  "1463ec95f086a9205c1ab27df290f232964381a3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/1463ec95f086a9205c1ab27df290f232964381a3";
+    sha256 = "186vk4bdmrd6ggyxz2db5713i3zkqzph0lyr3aivgj0a4ha8gfkn";
+  };
+  "1467cb6b7644671f3127567be26cf07d20b6da7e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/1467cb6b7644671f3127567be26cf07d20b6da7e";
+    sha256 = "0laxdgvsskc4gzbfnbal80ab7pd81v31qg8rcp9pjw1np5zpb63j";
+  };
+  "146b3768fb0d7880b8c751140d38a1177906de0f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/146b3768fb0d7880b8c751140d38a1177906de0f";
+    sha256 = "15v9nwb7m1746zrwfrgfgf8va5x88by8chsa3ivgraa5j6if1px4";
+  };
+  "1471837617ec5898ca2e49cf20ad5e0795687b7b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/1471837617ec5898ca2e49cf20ad5e0795687b7b";
+    sha256 = "0gycs7mhhq9y3c5dd014ggbbg3609kds5vzj3v45kkydkylqm0l2";
+  };
+  "148131344e6fe6a2249ce840916527aca52dbc35" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/148131344e6fe6a2249ce840916527aca52dbc35";
+    sha256 = "0y5h5v8vlr8jr8yyy529yrjg5rw75jpxz4fa7jmbpr6syai2bdwx";
+  };
+  "149605f77f4487d4f238f2439c46df83708b08f8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/149605f77f4487d4f238f2439c46df83708b08f8";
+    sha256 = "04rqssi1ndhgps7wsq1zxd2sk5p6michbfn1hi9g072gc0qp5c8a";
+  };
+  "14b7da233b40c5199352d0ad87f5c2ef529fbfc2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/14b7da233b40c5199352d0ad87f5c2ef529fbfc2";
+    sha256 = "1akz1k4wh5hz1w8zd6hvkmvc6w6hadw2psrr4rwpvdnkvhmnh3yh";
+  };
+  "14d50f80e32417f2f524ef471610a343fd6eb8b3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/14d50f80e32417f2f524ef471610a343fd6eb8b3";
+    sha256 = "18db45x0zfwxd9v0x1jmid7lklp3ib565d98sqjzbyzfvmq8q6f3";
+  };
+  "15299d434cd85410167be0405f54ccdeeaa3f831" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/15299d434cd85410167be0405f54ccdeeaa3f831";
+    sha256 = "0ivkh9ysa6nx4dw5bgqb00nynjzbn9gb1ihj43nccxskj0rynz7a";
+  };
+  "154306df1d2a4877cbc22db8224277c856f1b6b2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/154306df1d2a4877cbc22db8224277c856f1b6b2";
+    sha256 = "0jys95p7vg6gjxsphg1widz471ap8hw3y4vz1msw85clkgxh9szl";
+  };
+  "1567a031ece4d70d2c360767b32f084b40eeef63" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/1567a031ece4d70d2c360767b32f084b40eeef63";
+    sha256 = "04gzs1apaimrmkgsc76qlccqh4z7y7d221fxfaszdlvjaz9k7njs";
+  };
+  "157c6388b0a3c7a95bc29c5ae0f8e920a39dd7dc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/157c6388b0a3c7a95bc29c5ae0f8e920a39dd7dc";
+    sha256 = "10sx2ac6w30jbf40l8gixwv8zx4rkdpi5n8a0nfgbpay72rymi2k";
+  };
+  "15a502cd7ed28b9a7f8bb3e95ed15009b0e9a29e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468936-39e1c39556f84e60be8d850c452aed67/15a502cd7ed28b9a7f8bb3e95ed15009b0e9a29e";
+    sha256 = "14zkdf9f592y3ivk49by1dpydv9rrpzggwm5997ykxz7ws04i1lp";
+  };
+  "15a50c3fc6a68c2b5fc5d130da66af83529e7ed2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2709658-e5f367f730d84b618e9cbc16aceb91ca/15a50c3fc6a68c2b5fc5d130da66af83529e7ed2";
+    sha256 = "00021z0mfhlx9pkfn04cv07k4xlzywj4nd19mydqppm9r0vw5fwy";
+  };
+  "15eddf9d2c822c3f5a608ff772c24ca1c2928c60" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/15eddf9d2c822c3f5a608ff772c24ca1c2928c60";
+    sha256 = "0jnslw7j2msim71pgjv2w8jd2xq48ipjw0iryw9i8vibgb30ri90";
+  };
+  "160a1829963e541ea0fc69e090047543f0c547a2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/160a1829963e541ea0fc69e090047543f0c547a2";
+    sha256 = "0lshw7xhf4z4jzanbrr6q8hmq8xir8w9syl6akfbpjdc25yab0jy";
+  };
+  "1623d3a181ce7eddf10a90c3c235075fe55bca69" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/1623d3a181ce7eddf10a90c3c235075fe55bca69";
+    sha256 = "0r8plai0830ywnqpmrikzr7y1hw34qbfgiigagrr04z97g775l4k";
+  };
+  "1627ab02a99a1389c8f3330ff31a92d4994ef631" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/1627ab02a99a1389c8f3330ff31a92d4994ef631";
+    sha256 = "042si54d7qxziwy6d23fqkcdifqjpqf8j1gs9s5w2csaqy1bjyvl";
+  };
+  "162be3e52c290eda8052be126f9b1b9f19a5e182" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/162be3e52c290eda8052be126f9b1b9f19a5e182";
+    sha256 = "01g1bj3sld338a22ian9f0mnim418l6j3n7zy23sk6a5qip4h726";
+  };
+  "16311b83711df9620e3ea0adad878eb4547e2dc8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/16311b83711df9620e3ea0adad878eb4547e2dc8";
+    sha256 = "084iaizc503s24cmximifd4gadlksslras2dv4l46ngik7mmwkzw";
+  };
+  "163784cb855cf579aa85c8d84241ac308c31d9c6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/163784cb855cf579aa85c8d84241ac308c31d9c6";
+    sha256 = "185fjh744ynh1s45z7ikyhw0mml2vwfa2db4byv8zv122x10844h";
+  };
+  "1679ff7ab2527671a6c79835501cd4447f769d26" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1679ff7ab2527671a6c79835501cd4447f769d26";
+    sha256 = "1rdlg3y9ihvhi2lf1isabj58y6f8lj24x6yb4xh9jqm8fgdjbn5x";
+  };
+  "167a3b509221baa789dd8c568b74ddcaf7c4a7c5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/167a3b509221baa789dd8c568b74ddcaf7c4a7c5";
+    sha256 = "143g5h823i5pcbqb30419i1k6mq2s3mhmcgcfn8v0jm83lwar4i9";
+  };
+  "16e421c9204b08586edd8de93b93b19fb10644ea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/16e421c9204b08586edd8de93b93b19fb10644ea";
+    sha256 = "0b9ki8rj1xmy9zaa52d3zbq7jk95mjv8b17qyb0zrpirl51g46gg";
+  };
+  "16ff1b3c00e3fef8b809b49a5b63be510b23dc97" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/16ff1b3c00e3fef8b809b49a5b63be510b23dc97";
+    sha256 = "1fa3b7wri025cgjkd4f4v7pmi13qkza4i1f9zpmcpwfiwvvi8dgx";
+  };
+  "17a98e6cd0892c88290f9dd9e9cb3fde84e8798f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/17a98e6cd0892c88290f9dd9e9cb3fde84e8798f";
+    sha256 = "0yhrwdwjn7fszj38ihq9cac1gk44xinnrh506rglmcw81iwz4j39";
+  };
+  "17b2ed6bd21c462973aa928a668bafd1f8ebcfbb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/17b2ed6bd21c462973aa928a668bafd1f8ebcfbb";
+    sha256 = "1pw6irhilhicr1xkxf5pvv1ylkckxr8180nvsdnfigrzyk5732sc";
+  };
+  "17f24542b619ed66aa29fe28eb716b4dd4c33d84" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/17f24542b619ed66aa29fe28eb716b4dd4c33d84";
+    sha256 = "15ssnahf78zv5is9n69cd4hyn55iij0zcdqzg446bzpslpd2y1vr";
+  };
+  "1802e0cd4e93677f9da0d094475296d070a0a167" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/1802e0cd4e93677f9da0d094475296d070a0a167";
+    sha256 = "195dqkx2pwmymd6agn5k72rs6plp6nvap7gk7h5wk9yip51lkmh4";
+  };
+  "1819e4a555e0b22457eb52ec088f2d106697434b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1819e4a555e0b22457eb52ec088f2d106697434b";
+    sha256 = "1pmz470s77fsl1d2sqf2kdspb8k08xw6hw3f3y1wk9w3w10mcqfd";
+  };
+  "184edcd2f9fc791ab8f0ecbb980e124e1622311d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/184edcd2f9fc791ab8f0ecbb980e124e1622311d";
+    sha256 = "0zcc4qhgzg56hayaiqxjp63bxa0jkf8ws95kfm9x3b4va4qzg907";
+  };
+  "185535353a9576cb4f9e4a7fa3c1fe649d00f26b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/185535353a9576cb4f9e4a7fa3c1fe649d00f26b";
+    sha256 = "0llsp8z8av08d6dp442abpp4pwvc7l5flh9nd29q7l156dxz5nq9";
+  };
+  "185908a865ebe7f6ee31701211aad217de343c7f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/185908a865ebe7f6ee31701211aad217de343c7f";
+    sha256 = "1xmi888fc5hwcvgyw73g6f7gwwhwpybi8sl41dbrj5pjcvrj2clg";
+  };
+  "187cc49caa5b9c37b965dc6d5ae486c963873c47" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/187cc49caa5b9c37b965dc6d5ae486c963873c47";
+    sha256 = "1ghn25c2pxibw2wnr5c7wyk8hfdvchm27bqncnxi0vby0bwdis6n";
+  };
+  "18943d114a03b9994e64f86843cbfbea2c18fc60" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/18943d114a03b9994e64f86843cbfbea2c18fc60";
+    sha256 = "00dgywg4p8502rm5b8ykm5xqfb8i98nqip3z96vpbwqlqllxz2fq";
+  };
+  "18d1e1adb711eb56d874c79f49ae68b3e26fb044" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/18d1e1adb711eb56d874c79f49ae68b3e26fb044";
+    sha256 = "1zmdhkcbb8bsciycigj8x7ijc7wxcg5hj21588jimfl4i48zqw78";
+  };
+  "1916cbea932d8ec4cbe73743294b2456b6f82f4d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/1916cbea932d8ec4cbe73743294b2456b6f82f4d";
+    sha256 = "1a0dqqqmk6aj2j90qgf6qz91i37azisqjbrr9srxs42x8q8mhx2s";
+  };
+  "1919f737357402ffd6035ef99089bf4492ef39ce" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/1919f737357402ffd6035ef99089bf4492ef39ce";
+    sha256 = "1qnry1aa0hhi4cr279293y35ywl57llrkdgrmhpwi6cvamyfpyrb";
+  };
+  "196a7cd92cd85833aa987ab46cc84abad637e671" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/196a7cd92cd85833aa987ab46cc84abad637e671";
+    sha256 = "1xfbv83r1920v5lv4fpklmv21mmhfykkrfar0cm0yky3nyl93wi3";
+  };
+  "19bf552b5636cd53f93b288b3393447e0a9fa015" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/19bf552b5636cd53f93b288b3393447e0a9fa015";
+    sha256 = "02cxv7wmy2frhl6kc93y8r98ccpq9cdjji5pdyxniwmwjvnbd152";
+  };
+  "19c8ede828d4e84d3023a8cad20c4118e92c51f6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/19c8ede828d4e84d3023a8cad20c4118e92c51f6";
+    sha256 = "1br3pqv9fwrfcrxmxai88qa0wbi56ik5v66x4pzwp2k20ihahmny";
+  };
+  "19eb01d07ed61f10eba97cb487040edf44235d88" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/19eb01d07ed61f10eba97cb487040edf44235d88";
+    sha256 = "13pyc8jpln5a5d3nxbbgjkqrl8v3vngg0lzsgkjaf0ddk6jr0vjv";
+  };
+  "1a2a4f3777f219966c172ba8de9cb16dc214645a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1a2a4f3777f219966c172ba8de9cb16dc214645a";
+    sha256 = "0ghw873w98wx4xv0qwfqa0yshfyf6l58yymf64yw5gignay2jzf1";
+  };
+  "1a42be4a1a8f42a72c27e99abb9741fb826a99e9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1a42be4a1a8f42a72c27e99abb9741fb826a99e9";
+    sha256 = "15ph4vwd1r4gcv25ib0y93jvcxd4nihs32c5j1f5jvr8xgrgrn7f";
+  };
+  "1a546bb1c6ba2765dbc10b34126650d033464bf8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1a546bb1c6ba2765dbc10b34126650d033464bf8";
+    sha256 = "089h0npcbvxh3nisns5p4ld9pfyk18f16gm9zf90jjcq4r528dqh";
+  };
+  "1a5ecbad3eddb57b522f4873840b8a716d98b2b9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/1a5ecbad3eddb57b522f4873840b8a716d98b2b9";
+    sha256 = "04yfwjcj5w7iwyghhzbqfj4vymy9lfvc9ncxk9z0ll75f2sf0kil";
+  };
+  "1a81e6c5fd4cc760a6589fa20070d26a9cb6e53a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/1a81e6c5fd4cc760a6589fa20070d26a9cb6e53a";
+    sha256 = "0gyx0sq7k9cilcbcl2z49icf5jbknc1qcix2156nar2f8v5mqxmz";
+  };
+  "1aad9a745382e917c890acd98a988a1536087fe2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/1aad9a745382e917c890acd98a988a1536087fe2";
+    sha256 = "1hjxm0jz4bwllb08ix354i6cy78dy9vwklw9rpspdxqqkis8jxs9";
+  };
+  "1acfcb65de4dc96785b1705ca6c0029e5e4cea95" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/1acfcb65de4dc96785b1705ca6c0029e5e4cea95";
+    sha256 = "169xwg1jrwclx20qyci8az8rffmfn22z1x2zvib9dsmi3451mk3i";
+  };
+  "1af0a9938323c32bfd00373e1eeec3f0eb7267f4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/1af0a9938323c32bfd00373e1eeec3f0eb7267f4";
+    sha256 = "1a70ajr3s1msvsmyjmyg6vq8jh8ba5xc1f0k2afjycj3vzjrlgmr";
+  };
+  "1af8c3dcef0a363b208600f3db2ab066d1c407b0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738476-1eae05647f894f068d67ed64f86505f8/1af8c3dcef0a363b208600f3db2ab066d1c407b0";
+    sha256 = "13q98b90nhzqm9mz24nhdahz1i1gvja5gkab5p5mxsqbkm15r6vn";
+  };
+  "1b6ac4ad1dd42a8d52a6cb4a24b64cd86c92cc83" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/1b6ac4ad1dd42a8d52a6cb4a24b64cd86c92cc83";
+    sha256 = "03nfc20m6av56gqsg20h2jzc28crmvxs8ychxg0k7cmx7bzz1r23";
+  };
+  "1b6e2211b6ef64b74fd226f74bb7fdf14f384868" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/1b6e2211b6ef64b74fd226f74bb7fdf14f384868";
+    sha256 = "0fnzj5qxrmgc1mly6my307g9if6mr3pq8mnsdhz7sdpglvqx9745";
+  };
+  "1b929d889ec58a690a9fb4fe5c7e74eb60c339a5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1b929d889ec58a690a9fb4fe5c7e74eb60c339a5";
+    sha256 = "1mrvhvp5r3mhq490w4ymjdf4f7ymp56ic8waxdd6ms8xgkrq9cpa";
+  };
+  "1bc440e5f448e7dec6f97dbb519814d6c4b17b0e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1bc440e5f448e7dec6f97dbb519814d6c4b17b0e";
+    sha256 = "1vriwq47ck2inw22jl3vy4hn82sphlkdp22jzsxl9wg1bjkp7phf";
+  };
+  "1be30bac2f567e402ae48b89e8355a4b4e609b8a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621166-706a1811c2684ac5bae65fafa17839c2/1be30bac2f567e402ae48b89e8355a4b4e609b8a";
+    sha256 = "145nr5766qs6nhakskrh03b13m650n499q3q1pcj2yzb8qcmr8ml";
+  };
+  "1bfd97f204592ed48706e423bb6ab7a6128cad7d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/1bfd97f204592ed48706e423bb6ab7a6128cad7d";
+    sha256 = "1702mbcd7a2y4hsqmqy7cdr23h628f31spyj6wyajrixqb0xgr24";
+  };
+  "1c70d51c5e2d2a9ebdb87dc176b3cbe48c275309" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621163-719903f8599f48949652ccefc2a2d5be/1c70d51c5e2d2a9ebdb87dc176b3cbe48c275309";
+    sha256 = "0rzwsxpr3bwsgfpwci3mmy9wvwjkf1p6jam19rnnqz1h88w7ijxx";
+  };
+  "1c803eb30ed3570e150cffbce8729d1cc54e8fc3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/1c803eb30ed3570e150cffbce8729d1cc54e8fc3";
+    sha256 = "0p9iyll322a8cfdy0h1briv01hxw0iafbq43w5k7sy8kysv5ffl0";
+  };
+  "1c8d955be9265f85641ccaa5c0c9abacc66115f7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1c8d955be9265f85641ccaa5c0c9abacc66115f7";
+    sha256 = "0x7f04mypvy01v78xqjf2q9psw5f0fhhyyf2q4hww70s23xl3j2s";
+  };
+  "1cbf6a11e17024243825f5ea454051bf5b1e7d3f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/1cbf6a11e17024243825f5ea454051bf5b1e7d3f";
+    sha256 = "0xhgb9grcd2nca9yn495n5d0c0higjqcglhc2ra5kp57fsqmf9vx";
+  };
+  "1ce933b4731d07d18548a668fca861035354bbf2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1ce933b4731d07d18548a668fca861035354bbf2";
+    sha256 = "1bww5rid4w5zjn40701x1509qgn44wfhp9mz723axmdykp5ak6kc";
+  };
+  "1cf61777b0744f76064a8cb5a1d0bc1bb2d3165b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/1cf61777b0744f76064a8cb5a1d0bc1bb2d3165b";
+    sha256 = "1x3jww0rzkrx2ybx85ncq0d4zwa60x6h05sjm4r0gps8vmjalnl9";
+  };
+  "1d09bb4f8ba502cef13de6d570839e6790bf3542" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1d09bb4f8ba502cef13de6d570839e6790bf3542";
+    sha256 = "1xfdfyf3pkazb1583qjgv6planywm5ajhqpjndhwn0wkim6lakmb";
+  };
+  "1d5c9571ce51f244f1e0158e0cd49bd36f16bfc5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/1d5c9571ce51f244f1e0158e0cd49bd36f16bfc5";
+    sha256 = "040f2qb2g7jf9hzc48xkszy5adbwnbxy22jmp8v6q9h9qkfvm7w4";
+  };
+  "1d81bb3fd4494d2d93359f0cbecd2e9e20e67a09" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2532063-ce5a2c068f9844c8bb5d0e603da092af/1d81bb3fd4494d2d93359f0cbecd2e9e20e67a09";
+    sha256 = "16xman4991dvi5m50rmplp18xb89181261g5rczkjznkf7q2973a";
+  };
+  "1d82f1e693e8f317ca408dc5159b1a6afd317016" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/1d82f1e693e8f317ca408dc5159b1a6afd317016";
+    sha256 = "1ng1h62id2a1h3kd9mhakbfr568wkm2whbn2lv2x4l1q3ahrw9ix";
+  };
+  "1dc7018f35ab6ebe2908608910fbaf9214506ecd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2616691-982be94b99b442419e99de37630ca843/1dc7018f35ab6ebe2908608910fbaf9214506ecd";
+    sha256 = "118xrnwqmjfqndg3shn1iw90jnjvxbmr6y9ws0zrn4bas0bsn9bj";
+  };
+  "1e0c495e2e2fc0f9ab567761cfeec0d8659f6572" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1e0c495e2e2fc0f9ab567761cfeec0d8659f6572";
+    sha256 = "0423h6jq38k03zcfrnh1kkz3dsplpyij4ysrqqyyagni3l0wpwad";
+  };
+  "1e8e90fc8fbee70866085a1fbd7ee5585941dc31" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/1e8e90fc8fbee70866085a1fbd7ee5585941dc31";
+    sha256 = "1qdm6qkkmxxcml9bi121dvg36j55qzzzy7hslzg5ap8c65vcd00x";
+  };
+  "1ef5c21107774059ed6c5010dd2d5f3373c81445" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/1ef5c21107774059ed6c5010dd2d5f3373c81445";
+    sha256 = "14lmgyagsk3sszh04w9r4gnyi99vhqkccy9408fypxs33l3g2n3a";
+  };
+  "1f10b8e0a3d6f6fdfe5b451508626eda10e3e771" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1f10b8e0a3d6f6fdfe5b451508626eda10e3e771";
+    sha256 = "1plprfagzg8izyrr3dy5wnmlp0sm76kg0w36001j105accnqkn7l";
+  };
+  "1f3815ccc8afbd78900f57993ac9ee538ad3a776" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716370-1fe4be93d0274863a43a7797419557e3/1f3815ccc8afbd78900f57993ac9ee538ad3a776";
+    sha256 = "11i9z6hzviapkp8llkn96m5nb9xmlkbxiv8196zkmqxp759a2917";
+  };
+  "1f8e075fc05cbc97e7fd21ab40e0ceeb595c741a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/1f8e075fc05cbc97e7fd21ab40e0ceeb595c741a";
+    sha256 = "11g2rvmdj5dv5r2kfrw5ccmgl8cbkkhjmbaqpdmhiw306fd9fq5a";
+  };
+  "1fe2947f6b39cef244fd00698c7cb7adcee1d927" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/1fe2947f6b39cef244fd00698c7cb7adcee1d927";
+    sha256 = "0kviyyjr9hqnibzk36fxnbk7ad8fb2a7gf3hdmlb88jq3ymd4bm2";
+  };
+  "1ff18f725dd963421e618df72bf8a01bbb35d02b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/1ff18f725dd963421e618df72bf8a01bbb35d02b";
+    sha256 = "1ki17xws01fvhk796f1qf7yshwgv1a9xnmg25iq2ikm47gjjx9bi";
+  };
+  "2061aaa6e57d72cbc697076a3bfff9ede7a0a405" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/2061aaa6e57d72cbc697076a3bfff9ede7a0a405";
+    sha256 = "1siplly88g11327ync8771kzpbdc9g75645fai37rvawip526cln";
+  };
+  "2099a8b27bb01df580dca27c74682abb819d7424" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/2099a8b27bb01df580dca27c74682abb819d7424";
+    sha256 = "1jjcpc1nqk10xhk5y53qv0xwzh34wjcvn2cykjxn5g10n1vs5iqx";
+  };
+  "20b2c00511aaf3fb29dfe2ad61683427686bdb7e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/20b2c00511aaf3fb29dfe2ad61683427686bdb7e";
+    sha256 = "1dkbivkv0vz5rdwaanjzvc47k1yczdgjb9w0qllxwrdgixacnbv4";
+  };
+  "20ce1ae8d2c0f8a6cc946c302b619dfa82a8d0be" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/20ce1ae8d2c0f8a6cc946c302b619dfa82a8d0be";
+    sha256 = "0jba3b03d4gb62a7zj758j856mgw5l16zw99xdcgp8qd17nwlksp";
+  };
+  "20f22f8b8176717ac951ccdc7e6f5f56806df59d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/20f22f8b8176717ac951ccdc7e6f5f56806df59d";
+    sha256 = "1fndrfy6azyh1ckzmq4261cs1mpq393abl1mc2k3cxgn67s4ymcn";
+  };
+  "211fe5f3ea5194f89c18a81f99259151734b4118" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/211fe5f3ea5194f89c18a81f99259151734b4118";
+    sha256 = "121q1z4mj75vmcvbvyzb6i05xl8s7nkn700fd156z65g7ywn1dfd";
+  };
+  "2130d3a7a6cb4b7985001c43cece413b95605a04" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2130d3a7a6cb4b7985001c43cece413b95605a04";
+    sha256 = "0bx84arn6w9iic3q5xwd9v20qlpgashanm12qwrxy9dpvixb6z0l";
+  };
+  "215f16be383b3e37f6ab866a94263c078729c9ef" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/215f16be383b3e37f6ab866a94263c078729c9ef";
+    sha256 = "1k9dqr8ll66yp75mv2rx7if4zknrb02yb927xkwb2vvf8smy84x3";
+  };
+  "218b41b249f8b8cc60c48cdfe5f9f3139acec694" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605020-6cb4e3cef2f14bbc9f4e8bd763c3120d/218b41b249f8b8cc60c48cdfe5f9f3139acec694";
+    sha256 = "09iqnxhngdhsysdvlr05nvz261x7y320b66pgl3m5q5nm1b4vxc4";
+  };
+  "21907541d849646ca7b37552024a6bcbab11cce0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/21907541d849646ca7b37552024a6bcbab11cce0";
+    sha256 = "1dscgs1k5p0nsxkfhmwiw29vik2zs317gks9hb6hlkcl62852snl";
+  };
+  "219229e93fb1bf7a335603340498ba0d7dded08a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/219229e93fb1bf7a335603340498ba0d7dded08a";
+    sha256 = "19wwpdx566x9bj3ygiyni23z7q2qdj9nxvzl9wb5nym3nfk75zq5";
+  };
+  "21fa784bbf679195e305e3c41f0638cd402f6834" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/21fa784bbf679195e305e3c41f0638cd402f6834";
+    sha256 = "0iga4d8n471pvk1jfzkg0mvz37lp3b3908dmqfls0lvrqivyi68b";
+  };
+  "220e020f8e3d2a2de2da4e1a95e72d0a2efe26bd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/220e020f8e3d2a2de2da4e1a95e72d0a2efe26bd";
+    sha256 = "0jiva87bjrriz0jyx153p6ddisckqam6wl7vzxlxwg9bhc9yadww";
+  };
+  "22118798b30814806475890a25dbd3082cf56d24" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/22118798b30814806475890a25dbd3082cf56d24";
+    sha256 = "1sdlqrj1k5adb1z19mjikbm8cdg12h2kvaprnh6pc4bhs9l8210b";
+  };
+  "222160b66bde04349f00f790676a49a8bd3f2aac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/222160b66bde04349f00f790676a49a8bd3f2aac";
+    sha256 = "0nyd9x389a3bk22kpgmispq6a62y8p5gbjbzdchcznvfjvbg8mdk";
+  };
+  "2265f48eeeda05a6393f1268fedaea74e5d989d4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/2265f48eeeda05a6393f1268fedaea74e5d989d4";
+    sha256 = "11wk6krf02vqza7mxxdfm22bl19dfsdb79fd23m56yq3i154z65b";
+  };
+  "22b3cc937fab3025d3abf8d725b2cb3b1d12ef3c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/22b3cc937fab3025d3abf8d725b2cb3b1d12ef3c";
+    sha256 = "17blrcaa86q8my9b4c1gnp804w7csbrxw92pa5jcag1h68vb2dir";
+  };
+  "22c962e9607d75b5917d731e9a66bd74fd15f2a2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2458551-07195e4b171247cfbc0f6645046eda02/22c962e9607d75b5917d731e9a66bd74fd15f2a2";
+    sha256 = "1vzg92pqixpi093rjb8mvnmxd94dplhwpwwm2wkip9asis0wamcb";
+  };
+  "22f8914859f73cc332699e1c40e17cd44d700b87" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2597566-6e859699948f4adda2592656e3924b32/22f8914859f73cc332699e1c40e17cd44d700b87";
+    sha256 = "019zcs7safk4pldr47v9qn710q4d5cw20v8i26frwwqimnjdgjka";
+  };
+  "232d603ed060bcff36c5d452ec42caf19d74ec9e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/232d603ed060bcff36c5d452ec42caf19d74ec9e";
+    sha256 = "0y9jplgh3dcf6p3n6vsrs7shz60jj8kx8ccz8yldm9wy7sjqhkzj";
+  };
+  "232eab324de501a6a4db9e0af2922875e7b6303f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2597177-394deee1ae174b2db1462326aa83252a/232eab324de501a6a4db9e0af2922875e7b6303f";
+    sha256 = "0dvnfwqnf1hwnbg3y0az2hc0zib18fizdska9w64xjni6zq3fy2y";
+  };
+  "2339c1d3bfb2db1621ef01225df981c1bcc32f49" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2339c1d3bfb2db1621ef01225df981c1bcc32f49";
+    sha256 = "17wks3c6nz4qxlz6qwgnbp14v4wda2ss5b8mhdiisc6zhsn2sn4f";
+  };
+  "23563ae9b7815c9196c9ea7c27b2c1b78c2e3b77" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/23563ae9b7815c9196c9ea7c27b2c1b78c2e3b77";
+    sha256 = "0v1pafnd21lss6pf6af5r3h5n3minzl45ckmxa1v4rmx3c3j8xnb";
+  };
+  "235cc68a11ea8011ea5ca0d1326a488fd48ee713" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/235cc68a11ea8011ea5ca0d1326a488fd48ee713";
+    sha256 = "0xcpafbrys5hkxqd76fx12cxjbf7i80b9206iz69hfprh0hsa2h6";
+  };
+  "236633a6e0745c5413ea190b0e07deb9e9b9d409" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/236633a6e0745c5413ea190b0e07deb9e9b9d409";
+    sha256 = "0ffj6q65nwwpr67pah2h3nzkp7m549zzb47pkbxsk54d06b9q1lq";
+  };
+  "23b01ee08bbe595a4dcb1a72014151b82e5e76ff" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/23b01ee08bbe595a4dcb1a72014151b82e5e76ff";
+    sha256 = "00fml6x864bvh4prq3bkpqn3q6ca4zwif7zxhnsx3ksia8kj9845";
+  };
+  "23cc3f11d38de5312fd5798024de0d232bbf2e68" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/23cc3f11d38de5312fd5798024de0d232bbf2e68";
+    sha256 = "1w0nr2hvcl0h8fkivrxval1l2vw4546rh9vpkwhybfwjh2g06q1y";
+  };
+  "2408381821f1ad904404880379feec1a2eeb2ad4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2547993-1fb84b9e293242c988e586c599eeeb56/2408381821f1ad904404880379feec1a2eeb2ad4";
+    sha256 = "159g6gb74b6nrmi7rln4mpk1yj3kzsf6bppx53i2sa9wcp0vzqyv";
+  };
+  "249d8cdb69fcbdd5f0dfef3a752eb2b7daaf01f4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/249d8cdb69fcbdd5f0dfef3a752eb2b7daaf01f4";
+    sha256 = "1jgr54z0ic0gaby8zml5kj7iyx60v1spf4a1wqiqq61frbkm4qgr";
+  };
+  "24f19b36203cb12aa6892d2d4399df0a679189f7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/24f19b36203cb12aa6892d2d4399df0a679189f7";
+    sha256 = "0drx0nv2249nfdbmlhc24isigf0bxv2n0vyjr62hpddb6xjqikq2";
+  };
+  "252915e59bf956eba7b4eb84256f1eb9c08c16e6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/252915e59bf956eba7b4eb84256f1eb9c08c16e6";
+    sha256 = "0qkvmqhirgdq9wlv0zkkqqa1gl45bw3i19711vfv487n37d2acmf";
+  };
+  "254bdc731ce0a3bef83fa6dd6c76771cadefeab5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/254bdc731ce0a3bef83fa6dd6c76771cadefeab5";
+    sha256 = "0pr4zh0kf2j52msqfwaailrgm5i091msf7s72nk9j5p4zjmcy4qw";
+  };
+  "2573361ce50bbcbed674e108ea4cbb055cd0f2ec" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2573361ce50bbcbed674e108ea4cbb055cd0f2ec";
+    sha256 = "1ms3v0avlbwf3p8g2zw9w5d90hmyf7ba5d3ya7w4mv9sc3a8h5v2";
+  };
+  "25a0a89eda2d7c97ae3a37ba14f151b4682617e9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/25a0a89eda2d7c97ae3a37ba14f151b4682617e9";
+    sha256 = "1656qa6wxbw19kcihb0rl0ssyhrr7pklhflrbwz7f9nsanw6zjmf";
+  };
+  "25a1ae1b60746c8e36e21531648e67b4c330d30d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/25a1ae1b60746c8e36e21531648e67b4c330d30d";
+    sha256 = "04wb1hkil0khgk7qsndar970wgky73f93ng3kgp4c9sgck46gkqz";
+  };
+  "25b04d770d7a50481f9276487a5ed9834119dabd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2602350-38e0d307a57a47baa00ee5f892c9ced6/25b04d770d7a50481f9276487a5ed9834119dabd";
+    sha256 = "1pxvxdxjidk0qsxr0j04jsmjxbjz8havi7ngqfx9dfl6w9nxc0vn";
+  };
+  "25d67f4de95951cb969435a84594979cd05c4091" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/25d67f4de95951cb969435a84594979cd05c4091";
+    sha256 = "0rjmj5395cbcg275yd47gmd8gjgq1nip77k8vy8nn4k2cqpn2rlh";
+  };
+  "260381a0277c560f8c2006d8bfd4f7069cd5640d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/260381a0277c560f8c2006d8bfd4f7069cd5640d";
+    sha256 = "03v2nzwhbb0f728qyd60l68w2nvpadfz8sppzr3y1zbz75rd2k3r";
+  };
+  "2616e3cfebab7a82dd81c3bfee37a62f3317e357" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/2616e3cfebab7a82dd81c3bfee37a62f3317e357";
+    sha256 = "1m01ldgxq49rpr4bvrqppkfk9l8ajrw0401704hgnz06xs3sczql";
+  };
+  "26407337ede0c844ad2b9b9e4eec2286431b0fc9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/26407337ede0c844ad2b9b9e4eec2286431b0fc9";
+    sha256 = "0kwhdyyg2wqy9z0x9v4rprvy84a1l65777fp9nlq5kqmkhl5qhaa";
+  };
+  "267f7ab24d96a8949db4cbc89f50cb9aa755e5e7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/267f7ab24d96a8949db4cbc89f50cb9aa755e5e7";
+    sha256 = "1m26i9cxxy8dbfgnmcpar7a19jr7kz57nxqnim3vbkycvfj0i75q";
+  };
+  "269c797991f91dddf54acd99a214152e8f155f8f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/269c797991f91dddf54acd99a214152e8f155f8f";
+    sha256 = "0k61nipciisz9q6riyd08n7zi78nnm5b454zg4rnpv4fxkxwrmkh";
+  };
+  "27098f36979ec3e79f5f7d7145dae3cfedf9b0a9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/27098f36979ec3e79f5f7d7145dae3cfedf9b0a9";
+    sha256 = "0ygswmzmb89m4mpl2zansjppn1r83dkwxg5r68ssk4isrr8dha8m";
+  };
+  "279afe349fb3fbd2a845d8f650df0bf1dbb73c45" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/279afe349fb3fbd2a845d8f650df0bf1dbb73c45";
+    sha256 = "1rcww7wpbygq82zlpnh6gh79yw9w7rb7zjlx9dpdkys3v81rkzr0";
+  };
+  "27ab355d7817d1ffb8eb77e96879aab84b9ad7de" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2599004-dd46a4b56e3e4811a26bcf6c9cddf877/27ab355d7817d1ffb8eb77e96879aab84b9ad7de";
+    sha256 = "104zskbv7ii90incdrl8gwqx60bgfghyl8si1rmnvch2ppnb9cmx";
+  };
+  "27e4175b9bbb4b175f9daaa9a824638a178a6d76" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2393838-48fca459a31f4f83a05d71c733f01d7a/27e4175b9bbb4b175f9daaa9a824638a178a6d76";
+    sha256 = "0845rjmqick7mmymkprd4bjpszldxrqcgg56kndy4x0qrmdmh5lc";
+  };
+  "2827f79a76e04e6ba05b6cd3cc73e4dfce1ca961" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468936-39e1c39556f84e60be8d850c452aed67/2827f79a76e04e6ba05b6cd3cc73e4dfce1ca961";
+    sha256 = "18y83fxfr8r6fya771s8wn3fpwd0f0kpdd3bvnr5f0dqqqa84g1d";
+  };
+  "28438bc19c11df6c698e30491b3413fed60b2f0e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/28438bc19c11df6c698e30491b3413fed60b2f0e";
+    sha256 = "0vp18h36h5wdy17a31mwl2mf049kk2mkg09ldjidn25qfd4cdjm4";
+  };
+  "28783f63ac21ccc8c6ba68949502795e3a63f569" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/28783f63ac21ccc8c6ba68949502795e3a63f569";
+    sha256 = "19cd3p7gsd9ka8gmpzrabcya7pzmsmmjr3djmvj5nmraf4qxprd1";
+  };
+  "288cc5ec4da8903ba6077e259a8d9f1a0e5360c5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/288cc5ec4da8903ba6077e259a8d9f1a0e5360c5";
+    sha256 = "0ypv6mj46hibaa5hbi1i8a44gjmbp1y7qlvk4xywrqsj9fiadjyj";
+  };
+  "288d0122b6bf19ad09a81fb7a631a19113ae96f1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/288d0122b6bf19ad09a81fb7a631a19113ae96f1";
+    sha256 = "0araqg4vmbmpfbda1m1pj7b62rh1nd8pqs3smha0jpmfx1gj75xb";
+  };
+  "28926b6102371746bf5dd7c493c2353392ba76f7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/28926b6102371746bf5dd7c493c2353392ba76f7";
+    sha256 = "0b24j3l4ln2rjkc6bfczdyzpgzmc0kbai26di8afz2lsklsmpjdn";
+  };
+  "289a1b921105ce48ba09d95a245cd2daa77b05bb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/289a1b921105ce48ba09d95a245cd2daa77b05bb";
+    sha256 = "0p903d63x9zxqlfs23c48v52gmvja3p71z8bcc2qbryrcv7w50bl";
+  };
+  "289c460fd7eac93f2aa4548c3c805ce6f69f32ce" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/289c460fd7eac93f2aa4548c3c805ce6f69f32ce";
+    sha256 = "123pwgcmmyv03b1i9i6q6ks457hsipwbkvap8jfjvn2rppy4cr1b";
+  };
+  "28a656853baebf8714c795ebceb8ac04f687f67f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/28a656853baebf8714c795ebceb8ac04f687f67f";
+    sha256 = "0g4w1nkwi27mbh523511qwsdpjzi5lz9awcaha94031krjayfn69";
+  };
+  "28f2170447e86afc17f7c14affde7f2dd410c256" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/28f2170447e86afc17f7c14affde7f2dd410c256";
+    sha256 = "07y161rsf1j7s6pna2nsjm9jvzr9ai8i5hxwxd2q64labz0403z5";
+  };
+  "28f89206861167b3d68bb1c6d131985c152b757d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/28f89206861167b3d68bb1c6d131985c152b757d";
+    sha256 = "0rfkf21snlq5rsq39sfz9ala1qf4d85ns9qfy9k8sf274sr0z1sh";
+  };
+  "2914f32cdeac7870819661e0fe54b4833a9962c0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2914f32cdeac7870819661e0fe54b4833a9962c0";
+    sha256 = "1rkl3b1j864x9j1rbw7h7hhnhdb9m4r7b17py9kqvy6mfhacjanr";
+  };
+  "292a8fbb5a1aff92533e52ded470f85af5ffd6c4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/292a8fbb5a1aff92533e52ded470f85af5ffd6c4";
+    sha256 = "0flbsvx3d2x5qlxfj5fk9nsd6b2x9nn8mx65dqlwws2pvkw6ah8s";
+  };
+  "2944a0052b881a644f04844186daa4ae54aad523" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2944a0052b881a644f04844186daa4ae54aad523";
+    sha256 = "1fzmcs75y6q3fmlldrp6yk10bfw7vxmlg2swz995i9ry1avmjmq1";
+  };
+  "295f41723355e152d24716ed3125507d5155eccc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/295f41723355e152d24716ed3125507d5155eccc";
+    sha256 = "1gzxs53jhaskdwkiqw5kxvhfh02b9vcyql1v1kzii23f3vv1kvx3";
+  };
+  "29681ec614276ed188ccfff2342d818c3503f114" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/29681ec614276ed188ccfff2342d818c3503f114";
+    sha256 = "1f10r2iv2xq3zcl4bpcapzab9rkfscpxm83g23hszbp8yjs2bvi8";
+  };
+  "29ba225936b8addec463e591b235407a300ecaca" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2467022-c410c14385ba462bb86b4995040cdcb9/29ba225936b8addec463e591b235407a300ecaca";
+    sha256 = "1rvhh8hxxy6dv23m8qhn1bvy409szfxj7yz73dv6bzj4kf8xhm05";
+  };
+  "29eae01c452b3ae340b64ad4266ea1152b4e6729" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/29eae01c452b3ae340b64ad4266ea1152b4e6729";
+    sha256 = "1y4cmksxajljfgr8vmh7rvn7dlf43z2rw4hxfnxhri3bl55y5cg8";
+  };
+  "2a26f841843dd2551c447764a346353954884612" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2791326-4a233957ffc54c94b38c9ceaf84d58de/2a26f841843dd2551c447764a346353954884612";
+    sha256 = "0zn93s7bwy5z1cscs79bd27qxyjgdj6ry9j1nwkcvd9irw2ca14k";
+  };
+  "2aa18a35f72b72172e9b2c30c8ef7dbe2031303c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2aa18a35f72b72172e9b2c30c8ef7dbe2031303c";
+    sha256 = "0jj1cjhj4y50hjbsslxhrjc8byjngvcg4fllc6fysd01hdbzx267";
+  };
+  "2acb20ce30a8d1a5aa3f7506c94c9f8a93297c8d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/2acb20ce30a8d1a5aa3f7506c94c9f8a93297c8d";
+    sha256 = "07pr5hm5pv8s1qw3lmgasg8ppsga50h6dhpbm7z5lcnc70nd5fkm";
+  };
+  "2b1ea22d749ba6df5bafa9119fe8a0c0d4ba68c1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/2b1ea22d749ba6df5bafa9119fe8a0c0d4ba68c1";
+    sha256 = "1i5cvjjm2sjx77qahmk4p26gm30rri50fdm1jfypp45y0hqa34wn";
+  };
+  "2b2f6a55cc19d94c0130e833f2e70c29e8bfa2e4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/2b2f6a55cc19d94c0130e833f2e70c29e8bfa2e4";
+    sha256 = "0z3vk2yn1afbkx5lni2pwii3v9by37rixz1brws112h79a2mnbd4";
+  };
+  "2b83155ddf092ccd8d8baeb9898fe084b587e82d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2488287-03e6f1d9f826475c81f3125cbcc669d9/2b83155ddf092ccd8d8baeb9898fe084b587e82d";
+    sha256 = "1jg06zvfzbz1s34wfnvcnkpjhad8kmlcf0byf61dyfacjw0rpfr0";
+  };
+  "2bac5c303baf3d4800852e359ebe06398d185cd9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/2bac5c303baf3d4800852e359ebe06398d185cd9";
+    sha256 = "1wg72mlyh82ah0p7fxkj83wkllx6r8ya0x9adizvlaf8mw7ymhvj";
+  };
+  "2bc488cec0bae3f273fcf9d172b61b9a12489423" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622232-9cbce5f5f69743598cf4bcb212040bd6/2bc488cec0bae3f273fcf9d172b61b9a12489423";
+    sha256 = "10bqvkyzynfi9k4s697i6qzpfc3p5dyw77k3wqsdm686kaaa035x";
+  };
+  "2c391f34048aae95fed7d9649088e50dc62d614a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/2c391f34048aae95fed7d9649088e50dc62d614a";
+    sha256 = "0k6vzh8kkfvgb8km5jd6qn3fw84snm9xz0fmx3jffc7g5n1jywsz";
+  };
+  "2c42aecf4d302508d97a42889f9c616197b1bd9d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2c42aecf4d302508d97a42889f9c616197b1bd9d";
+    sha256 = "0f7h2w6pppdi7gp8h50528xf25d382fkf1mckckzfilvs3xvsqrn";
+  };
+  "2c6a334523bb0b39b337ae9f3754d787d930b6ce" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/2c6a334523bb0b39b337ae9f3754d787d930b6ce";
+    sha256 = "1537cbvm3byiz5yifw43236yv2ffr1h9xn5kn1m3x031q1lkrvj7";
+  };
+  "2c8420f6e48f529d116aafee46759cdf99e8a724" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2748148-aeba26080cd64d52aecc49d22cba05f4/2c8420f6e48f529d116aafee46759cdf99e8a724";
+    sha256 = "01bc98a4q8h02f3iclrd99sg215jpznqr5dviakrhakvyg2qifm5";
+  };
+  "2ccd26d6297607f50e2fd8c1b54cde1f6e6509a5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/2ccd26d6297607f50e2fd8c1b54cde1f6e6509a5";
+    sha256 = "12w39ljrf6nrvixky4dzx8q4izwba17a8bc65f561wp49305rq8j";
+  };
+  "2cd1739a082210f13445cb6acb076e89cb209759" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/2cd1739a082210f13445cb6acb076e89cb209759";
+    sha256 = "1g8miwfg84c0z6hxm2j7lqk7khbvk80jkzavb0fwygyml9xlwgfv";
+  };
+  "2cf7b40136915c48e206e1052021eb226c0050ca" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2495503-7390cc25898b4ab0a4f9f846f2fd7754/2cf7b40136915c48e206e1052021eb226c0050ca";
+    sha256 = "0gs5ylym2j8sk1jg4b6217nchv10d9bigl1nd94amzss2d4aq86j";
+  };
+  "2d54103141e313b63ef5cf774325a15054e9ff39" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/2d54103141e313b63ef5cf774325a15054e9ff39";
+    sha256 = "109gvy1i6g2bk3cj0q833gc2rc2mg5w34q6j4jx6ff956dvl9drb";
+  };
+  "2d883815049fa9361c8c5c425fbea36dcd903c7a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/2d883815049fa9361c8c5c425fbea36dcd903c7a";
+    sha256 = "0g2ld1zbwck746j2i2gl61xplp4rg54vw7yk9rc81w60889z7zbh";
+  };
+  "2dc37c85bc4dd351cd3d177f7e6f986d186bd1f2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/2dc37c85bc4dd351cd3d177f7e6f986d186bd1f2";
+    sha256 = "1nf42p4lzwz88g91wc9i4vcawsdnskjf4s93sha70mx38xbk82fd";
+  };
+  "2de8f1186afad5e4c4f23315078e4d2bf6df4264" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2653899-1a26143a64884f27a8bfc418cb1e75f0/2de8f1186afad5e4c4f23315078e4d2bf6df4264";
+    sha256 = "1hcpcss34rv1q9cw8g3lnqfxhmd4gqb52zll1g44biid1ybhjyqj";
+  };
+  "2e01332dbabb9d7f2325d7f297f41fcd48933c46" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/2e01332dbabb9d7f2325d7f297f41fcd48933c46";
+    sha256 = "07j0r50lbva8dzkpp1cym72995p9lsbc3hxkczhdydaff2cxkbpp";
+  };
+  "2e09a8e7ade5fdf179f0918bc2abac9c18e85901" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/2e09a8e7ade5fdf179f0918bc2abac9c18e85901";
+    sha256 = "1sh9srrwzs9fzy1ds452h8dzangi8q2kvnn9sq39b8cpgffjy1qc";
+  };
+  "2e601894255189d2db25a10b7d612d09c725aba7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2e601894255189d2db25a10b7d612d09c725aba7";
+    sha256 = "1y0pfngnbfzc7zlwalf7w1f97fx6aclrkhzl91axjdgnkwcnnp2f";
+  };
+  "2e6729373c277fcfd3a59532e1e7738523370fb8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/2e6729373c277fcfd3a59532e1e7738523370fb8";
+    sha256 = "12farscg3s037w3mylb5s7xnv4gzriqpbgadg7jxpl4znpdafdy2";
+  };
+  "2e6b877018994d97122a9b698eba651b59cbe02d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2e6b877018994d97122a9b698eba651b59cbe02d";
+    sha256 = "1pgfa4bx7sy8x7dq1zy0jifkaj2jmw12v0fnd4wdcnkraw9wh25y";
+  };
+  "2e8c5279ef8b2e93ab8c738c3e9b8689fc63b839" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/2e8c5279ef8b2e93ab8c738c3e9b8689fc63b839";
+    sha256 = "10hff6yk8q7kwn3557s4fbx7gbhwxsk44j7h8xqn26qzm6xbwd34";
+  };
+  "2ecfd27e7e8beaa971269c4d29040f148b7fdf07" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2ecfd27e7e8beaa971269c4d29040f148b7fdf07";
+    sha256 = "128y3l95zg1qxz9bwf3wzjb8hr89d3v74dix0c4qiv4srk300d1c";
+  };
+  "2eddeeafbb16203bad1207fe3c70aaf2e165ebea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/2eddeeafbb16203bad1207fe3c70aaf2e165ebea";
+    sha256 = "1gr063b3z1q7d7q9ygvyj7qh1z922r8c2mh5aw2wq0s15sxjqq7p";
+  };
+  "2eebb65cf7012650afcab43c7f2f559c86b2f3a3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2eebb65cf7012650afcab43c7f2f559c86b2f3a3";
+    sha256 = "1v1kwg15r7fns0gash84zff9r25amphma6jfpzl2yr2qcydyqkdn";
+  };
+  "2efd964b62d457693b93d311acd7d54dc4e7f177" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/2efd964b62d457693b93d311acd7d54dc4e7f177";
+    sha256 = "1kd99v2l23ming81m799zz666pyk7pvzlykd9iqd9a1b8xi8q80l";
+  };
+  "2f143d8520d94bbf2cb250b35a8f79e3d3e8572c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2f143d8520d94bbf2cb250b35a8f79e3d3e8572c";
+    sha256 = "1wrzkwv1vl3r7hczgmyxw4gv2nlwjivds8x1myicrb3wqz85b2wr";
+  };
+  "2f3b66c8bc4bc7ba4a38982c19f7aea56a40fa44" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/2f3b66c8bc4bc7ba4a38982c19f7aea56a40fa44";
+    sha256 = "1bz12dwy7yyg4niq822jqv7vi5g7mmfiscsdbay08184niw1a2fc";
+  };
+  "2f4b14734a09e63c0347c348f77cd0da3c72b561" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/2f4b14734a09e63c0347c348f77cd0da3c72b561";
+    sha256 = "0ypvfnnsl2q15qmqkq9qs1mfmyk63jjxhr2w54v7xcxv40l2d0ah";
+  };
+  "2f8b4043d609acb0eee65a86210c9881d1e4a9b5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/2f8b4043d609acb0eee65a86210c9881d1e4a9b5";
+    sha256 = "0yqildrca6fx0gvhb08s3m4dwfkrzbyq877nkcykzid687q6f2h6";
+  };
+  "2fb0ce94e7960b83e88bc4d2687ba07c94e9d96f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/2fb0ce94e7960b83e88bc4d2687ba07c94e9d96f";
+    sha256 = "0jlakpvdmqscxgdwlgyrx69bdpfpx9bxinz56hwrfdqlsl13d6zp";
+  };
+  "2fbbb90552e28dbaf47f41fa63652c11c7b99c78" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/2fbbb90552e28dbaf47f41fa63652c11c7b99c78";
+    sha256 = "1w8zvb659f0xd5fa0bhclmrkavb82nj8xwwcan1rwys38vvghl6h";
+  };
+  "2fda5ea89a82d953d04583ab86b387b1b3f3dd6f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/2fda5ea89a82d953d04583ab86b387b1b3f3dd6f";
+    sha256 = "1l8slfjrais377xrpj9lm0058y2r4qb24yvh30fpxmw3alvw5wg2";
+  };
+  "2fdbf124501fb7d04dae2e4dea0e796f8a098f36" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2fdbf124501fb7d04dae2e4dea0e796f8a098f36";
+    sha256 = "1b4id5wcrfjl6b0qp5c1y1dq62g8sn7ln8j1idvi5ffwwrmsx8j3";
+  };
+  "2fe1fb9f98af4a68ceb9adee909fe7b67917ea81" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621991-64978bb873e64559b7c143597fba3856/2fe1fb9f98af4a68ceb9adee909fe7b67917ea81";
+    sha256 = "0n35g4sb7wymb0k22n0frapdhw6zz1aiiv5xynjk8c99pivdnism";
+  };
+  "2ff8709ada5b8bbfe994f55ce697983225440813" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/2ff8709ada5b8bbfe994f55ce697983225440813";
+    sha256 = "1h57h9z44acyrw5klcslbg9g7zxgxaz26d3ab18q2mp17mrw3wk3";
+  };
+  "3012eb0c18cf3faab0fd1a8290905b902456192c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/3012eb0c18cf3faab0fd1a8290905b902456192c";
+    sha256 = "1halwqjmiprn659fqcdfw5g3ffanx34j0ri8n00xmbwv4hhkvsvh";
+  };
+  "307b166459a0b56cda3d5d3235e3c39b37b2e2e7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/307b166459a0b56cda3d5d3235e3c39b37b2e2e7";
+    sha256 = "0hmc67ngk3s4by9k2kcl5kqi8vmkrqp0vaphd0v88z162vax44pk";
+  };
+  "30bf523aff5cc60cdbb2da5ca9b51226e6aefc9b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/30bf523aff5cc60cdbb2da5ca9b51226e6aefc9b";
+    sha256 = "0cvfn3vv6jhhpimc8s9q37k041c3qc8rrh1fkab89y1d1g430mil";
+  };
+  "30e4e0e87aa3c6ed5b9d99e89c3e3986727405b4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/30e4e0e87aa3c6ed5b9d99e89c3e3986727405b4";
+    sha256 = "0gpvcs6q6cprbirwndirz8a75d5xrsxdzplh9j2zknqkybwbdsyg";
+  };
+  "31513973d4d5ca51b8bb4b0b965dd53bed0284bf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/31513973d4d5ca51b8bb4b0b965dd53bed0284bf";
+    sha256 = "1y1lnwvzs2v6yibnxb5lxcc74gn2pgarqdqhs26501hf35cw400m";
+  };
+  "31a9943db56acc38a4a6083517d5981accfd7b0f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/31a9943db56acc38a4a6083517d5981accfd7b0f";
+    sha256 = "0i6n6hhcjg2ccqxmajmb3nhwbfx2bkfszxycs1k4ip34yhb7fbcd";
+  };
+  "31b00e20c26ba53e1e4071f88ae88e478dddc667" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/31b00e20c26ba53e1e4071f88ae88e478dddc667";
+    sha256 = "0n9fwvmp1r5h3z9sbqx1ywr1azm0ckrgk4j2557n06l4f539bah5";
+  };
+  "31d76d0dbcad8d9f1b4242247389a533fb8e3ca1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/31d76d0dbcad8d9f1b4242247389a533fb8e3ca1";
+    sha256 = "1iwqppypjqvq32csylhbrq7kjcm1533fdaq4m6pdnb8cf3q0haa3";
+  };
+  "31dc2af99e1bb1eecb4ddcb3b2983a0563cde9f6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/31dc2af99e1bb1eecb4ddcb3b2983a0563cde9f6";
+    sha256 = "03awckc4gh0ypdkglzhy4fg79fik904nczmwpf4vwrd83xin7dp7";
+  };
+  "3227bc9c7feb2325ecd2c4144ae0feae8ddc8b90" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/3227bc9c7feb2325ecd2c4144ae0feae8ddc8b90";
+    sha256 = "1k11sd1jsbbcgr71jn67vq4zjwxa96y8qknl4b9p3333skixvhmy";
+  };
+  "32860f0809372d37c40310daf0184877322fc636" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/32860f0809372d37c40310daf0184877322fc636";
+    sha256 = "0dg7hjwhpbfbqxwn4dgclpfrbbrjn5l8xbdpx9n3fvsrr861zdxg";
+  };
+  "32bb97834c48d10d8115a0167b8372bca6b8b179" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/32bb97834c48d10d8115a0167b8372bca6b8b179";
+    sha256 = "04z8ppim2mh792m2fqw2xws7j1m6xrd1jp1pcn7lgfaiz98yxvr1";
+  };
+  "32d809d2943a46adfb06d390602d4be87fa510ba" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/32d809d2943a46adfb06d390602d4be87fa510ba";
+    sha256 = "04fn639135gmvmrq4i7jq0s6k8rfd3jj4a11740avbpbynw9gr25";
+  };
+  "32f81135ef65d05728ba2f1c5b5f3935a52334d7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2467022-c410c14385ba462bb86b4995040cdcb9/32f81135ef65d05728ba2f1c5b5f3935a52334d7";
+    sha256 = "0sczgfd4kksl69gw3zazx7r046vb3dxgbpb6njzv52yj5q13ha4f";
+  };
+  "330afd81b039c963aa95ebf7fcb5e01b8ce9ee3f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2620227-83084f9091244f6c9bba34d6d2a0fc20/330afd81b039c963aa95ebf7fcb5e01b8ce9ee3f";
+    sha256 = "0fv2jyajl8p8v9vini5iqmj6gnzzccjvmgzk121vmnhnm4090p1m";
+  };
+  "330e7d22693575d7c1e3bc8598676d1ad936a018" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/330e7d22693575d7c1e3bc8598676d1ad936a018";
+    sha256 = "08s5fpxn14xppyif4yx6w1sgrxb74q2aw4ar126b9pc1ihlw2c0h";
+  };
+  "33450e05fddd79d7692866accaff42adf9cb9a97" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2706207-4f57365c766141c988cbd0106cf38f5c/33450e05fddd79d7692866accaff42adf9cb9a97";
+    sha256 = "0yg8i2hg1mrx6mppwm1xs3hwpdv9m20l5881vbncyvgpy9a37kgb";
+  };
+  "3347d72ae38994059c896549688eac5a145b35fe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/3347d72ae38994059c896549688eac5a145b35fe";
+    sha256 = "1pxfsdbmrhal911bb5pjmkk0j70nik0m5kc1b9i675v4h4ysfk3x";
+  };
+  "33870814a45b700847bc8d18c59c18d1daa72623" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/33870814a45b700847bc8d18c59c18d1daa72623";
+    sha256 = "015v4x2gkkcpnz7jf35gbq0z1x3b0drcyp21ignx3xz7w6cxz97m";
+  };
+  "33902cc01c7eda10161025651275a129da5ead6e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/33902cc01c7eda10161025651275a129da5ead6e";
+    sha256 = "1g3i1zx14zg5dmbs6pcrrg0xw1rpsqavvbrxd79m5r09c90y6kbh";
+  };
+  "33d0a2949662b327b35a881192e85107ecafc8ac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/33d0a2949662b327b35a881192e85107ecafc8ac";
+    sha256 = "1x60d939njwsak5r3mga01bkv2c2ggvq28hvqnx6s0z7icch7vib";
+  };
+  "342f323d0582f6c4897956e82b4549bbf9c47973" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/342f323d0582f6c4897956e82b4549bbf9c47973";
+    sha256 = "1l6wr3rbkg5hs0wda43c1dk2gfg2a9r53rki2yls0i9xirhfmkd7";
+  };
+  "345fb7a468fc7c5315a11b86b2c600ac91955213" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/345fb7a468fc7c5315a11b86b2c600ac91955213";
+    sha256 = "1jw46pcrndls655pyx57acdj44v4kr3jg7b04ibmxc31j0mn1955";
+  };
+  "34901ceb8b3afa22d4a75f06c3c465a3292592d3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/34901ceb8b3afa22d4a75f06c3c465a3292592d3";
+    sha256 = "1lmnfbi5l6fk6p4iaa30dpali392xm8r1fz1nd0jil0zr7d3kcll";
+  };
+  "349fb1419c99f4b260e3bb7b3a7cb5273c5b88dc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/349fb1419c99f4b260e3bb7b3a7cb5273c5b88dc";
+    sha256 = "0xdrf7zqci1ffn6w0pw8hq4ijbppbka72fb2lgrqjiawzmhh1i5h";
+  };
+  "34a9c86849d93a7f932667ae0e2d9fc3f4aceeb7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/34a9c86849d93a7f932667ae0e2d9fc3f4aceeb7";
+    sha256 = "0fvrksn1668yxx9fbpchawvnah6n4zpicc865djhfqq1h5vfndfv";
+  };
+  "34b38730a025a0c75cff4caa03512a0054d0695c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/34b38730a025a0c75cff4caa03512a0054d0695c";
+    sha256 = "03m8rvh9hrz1rp0004vav5gdkj2c79j2h3adhjlbgcx8llr3z3p4";
+  };
+  "34da962d8bda23fc14978d82c2c5fb761acc5815" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/34da962d8bda23fc14978d82c2c5fb761acc5815";
+    sha256 = "13xv0nb13z4f57xf9rvnnd73ssf8cx26mvagjmikzsi7chvbpbwn";
+  };
+  "34f9df3c5cbc087be9cf8b8b2084287fb9f3b2e2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/34f9df3c5cbc087be9cf8b8b2084287fb9f3b2e2";
+    sha256 = "0dywks9jrd72xlmxzvcgd5blphf89r98g5h6k76grmc9k2mswwv3";
+  };
+  "351da091078402bf85cff8964a50e1ecaf81e7ce" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/351da091078402bf85cff8964a50e1ecaf81e7ce";
+    sha256 = "1qx85bsc094gzng5x426d6gcbhfjnqhahly3s0dq3g3vw915jl2s";
+  };
+  "353076c56a6ecfb890a7ab5f30c881a73e09d508" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/353076c56a6ecfb890a7ab5f30c881a73e09d508";
+    sha256 = "17lbpk2zkm36l67lfbrmf0wc8x47ywkji127592q707wc4zgh397";
+  };
+  "3579a812b187dc0ebafb13d5914b27deab2c4367" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3579a812b187dc0ebafb13d5914b27deab2c4367";
+    sha256 = "0pnppnyx0nk9grvn2sqha2wmfky42f92mvnxs7scavg913zxi3sg";
+  };
+  "357fc4cd09e4eea77faa70a271346bfd5d0b8417" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/357fc4cd09e4eea77faa70a271346bfd5d0b8417";
+    sha256 = "05xfhmc9y3q31nrjsfnifx709l5yrss0qkilbw19da4lhxqknb6i";
+  };
+  "35b0e5ed5cbf20a0b47af4bb9ca6ffef4d3e5d8e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2602350-38e0d307a57a47baa00ee5f892c9ced6/35b0e5ed5cbf20a0b47af4bb9ca6ffef4d3e5d8e";
+    sha256 = "1i88krwy1kxphjcl4l5bxfp4z8dyl4lgj9nrw09dvj8k7azzjvlx";
+  };
+  "35e0d2f1b5d56bea19aa9443dd5c41b4ef095b4e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2638350-39632eb9e5f94ba4ab8e97fa2d5a3251/35e0d2f1b5d56bea19aa9443dd5c41b4ef095b4e";
+    sha256 = "16k5gkkwmwldbaf29yfshhawqxxq5ccpwylw8wklc56705ib3x96";
+  };
+  "35f95404a8393dcd6374b594b1c2bb5acce427ed" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/35f95404a8393dcd6374b594b1c2bb5acce427ed";
+    sha256 = "0qvh62961qhp0j46p18iiyv3fw783lrcljlxzr3vv3zszpvnqyhv";
+  };
+  "3639943c4bf99c8f284de9f812bf2cd6eff5d49b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2456855-d820875aa14148d6807c08cda631b764/3639943c4bf99c8f284de9f812bf2cd6eff5d49b";
+    sha256 = "00rdh4lcfb7mwlkqxzrpqd9g88znfajm1cbcd83zxdyc2jkipi18";
+  };
+  "363bd76bc4fa81ad344802f2fb8610153a5ca75f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/363bd76bc4fa81ad344802f2fb8610153a5ca75f";
+    sha256 = "0sllg3pgm9jqq73i89l1smrl2y35cgd8667q05v1x9ilhlxpb2zs";
+  };
+  "36922d450606299836b10b930c0c66af1f780347" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/36922d450606299836b10b930c0c66af1f780347";
+    sha256 = "0ribsanhwk7m3qvqydpkhvhi00js7n9wabi3c3l0jib6knndphsh";
+  };
+  "36923d3780cea992eb61b86d48b1a61297b44536" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/36923d3780cea992eb61b86d48b1a61297b44536";
+    sha256 = "0i4av37slygbl1xynai7h6cb7dsg773zgafdmy10jmc2bb8dp4ky";
+  };
+  "36af7f5290dd60c07f83b8a398eb9721c24a6154" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/36af7f5290dd60c07f83b8a398eb9721c24a6154";
+    sha256 = "0rwi5y9sra4pnxdw5l8ykf6s26dg5clflr76f66vdppvipd38rf0";
+  };
+  "372698b3d3b17da23c0c53958fefda69c1198f54" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/372698b3d3b17da23c0c53958fefda69c1198f54";
+    sha256 = "1824igxlj2yc3b2li4gapwlgzgx9gd3kw2gnlkcxdsw1m2h79npd";
+  };
+  "374b33734d17be020f3eec73cf16a100e905a8c5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/374b33734d17be020f3eec73cf16a100e905a8c5";
+    sha256 = "0d3ax4shw2y8bivqajmfgzmf3bg1syz6i91pk8jbl38i1007h4l1";
+  };
+  "376fa7bdb1a776f7100bfaa29f24a9b81bb5a97a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2701146-722550daa90f4e4996a6cdd478880969/376fa7bdb1a776f7100bfaa29f24a9b81bb5a97a";
+    sha256 = "1znfn4asyx1spinx8jpc5r479a30n5cnbb4pvlas6sb3hy8q68hd";
+  };
+  "3779adbbb84b7918fcaa4bc8df4b64a45e50aa88" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/3779adbbb84b7918fcaa4bc8df4b64a45e50aa88";
+    sha256 = "0g3gww1rq1z7lrnxw6gw3i33h799fbmh717qm599w47pq73xmffl";
+  };
+  "37a47bf076c47063d031b82f827412bf05a5f500" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2550873-dbd5ea4331fc461794c4770d56863ff2/37a47bf076c47063d031b82f827412bf05a5f500";
+    sha256 = "0v71m3c03xv44f17rznw6jbn5k7vac2g3547wsvin7y1vr7jhy11";
+  };
+  "37d805efe0d2358727b0deeb9f5c56b3b68a8478" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2653899-1a26143a64884f27a8bfc418cb1e75f0/37d805efe0d2358727b0deeb9f5c56b3b68a8478";
+    sha256 = "0chznyg2xnyx3zz2q9q6i9cdk26m6chcp6pjzm8lnvc4k7p2mbls";
+  };
+  "37f1c844684794da07d9c537b175855f8266fdbb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/37f1c844684794da07d9c537b175855f8266fdbb";
+    sha256 = "07ypy820rrps4d4icdv0bklaa6kyn50gyyaq5yspmwkn07rp5hbv";
+  };
+  "37ff9ca732f3611a92185cfbfd25e6eb7d3d2fde" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/37ff9ca732f3611a92185cfbfd25e6eb7d3d2fde";
+    sha256 = "0lj5ajjx53k7d7m770hdm0mfanfi0kj7vhnfi7x5h75gpzihi6g6";
+  };
+  "3811b277d1080f2314e9ffd524da841aefd84ce0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2547993-1fb84b9e293242c988e586c599eeeb56/3811b277d1080f2314e9ffd524da841aefd84ce0";
+    sha256 = "1m9hjjiskwc6xnfkyzbg52mx2alxl8qh19cawykr1dnd1qs2ngz6";
+  };
+  "38c9a6c68be0ce7a36d83391a637010447ad3301" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/38c9a6c68be0ce7a36d83391a637010447ad3301";
+    sha256 = "08j52b49p3ps6i78v9h04gwxzcbibg41i5dcxqi47vq9ihhb1nsa";
+  };
+  "38e0e2e02bc165327038c973058790e3962d6079" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2686985-76325fadec474557a67995f00383ea6d/38e0e2e02bc165327038c973058790e3962d6079";
+    sha256 = "0yb69a7b63sjcjha8lh1l86jlfxln1gz5y7gplqbj0m0c4qrg72v";
+  };
+  "38e6833dfb6b74f5acf23d984bb9ad01086e1f39" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/38e6833dfb6b74f5acf23d984bb9ad01086e1f39";
+    sha256 = "10ln9haj9317g49zmi5jc4dq56qs0b4qr8g1g6rypiw8ndlm00rq";
+  };
+  "38e79fc7612d6ebd7278e23e7d0a9df3b95155d5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2739939-d1b07735d39c4b8c8427e05b6d9e3571/38e79fc7612d6ebd7278e23e7d0a9df3b95155d5";
+    sha256 = "0w1lwm9dfrprxa3dcaln774c3l5b4ai2sssww81f8adjafbvzr7l";
+  };
+  "392d5e0536abeb83ccfc28ba9fb96e9d1d6507f3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/392d5e0536abeb83ccfc28ba9fb96e9d1d6507f3";
+    sha256 = "1b9a86drlml4cflilwa188i5ay69ydhpc3q477947vs5gbgc7ln7";
+  };
+  "3965204d2b18ccd0b4d2191500d373ac064180df" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/3965204d2b18ccd0b4d2191500d373ac064180df";
+    sha256 = "0k801x11n4zmfshdmb6sby0k29bjcd83hzcbwp0hg7vnnxqsmfm9";
+  };
+  "39935e746b413e3c60c9a519e893cd19db5425ed" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/39935e746b413e3c60c9a519e893cd19db5425ed";
+    sha256 = "1cr5666m83v6xkpwr2j51sf1c3a0q5kahh3j8ygrd74alm9v4wqd";
+  };
+  "3994a8a3195661395d89f209755bbab5ce1861c1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3994a8a3195661395d89f209755bbab5ce1861c1";
+    sha256 = "1jybg0wg5n99rsmzd4i3a1bs1p78gngzar0qan131scdywcv8384";
+  };
+  "39e7e3f8feb9564c8b90f2f6d630bb8ba96f2eb9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/39e7e3f8feb9564c8b90f2f6d630bb8ba96f2eb9";
+    sha256 = "098vn5ps7qv0qjs6fvrzyx9qiq9qw7pslnhy4djm4xzamxs0n49n";
+  };
+  "3a6db69d4f8128addbe24660128ecd2ed9fd6dd0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/3a6db69d4f8128addbe24660128ecd2ed9fd6dd0";
+    sha256 = "04kx57syka9vpvgh5mjlmc1gg8d2ng5snrv36vmw4gq3pm0dpfi5";
+  };
+  "3a7f7a47aca5ad86176f1ceafd77139a06b89e11" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/3a7f7a47aca5ad86176f1ceafd77139a06b89e11";
+    sha256 = "06vrb7nwi09vdkv8b143g2wz0wvn1qbp0l3l95g9frp4xkd6j8cf";
+  };
+  "3ab17699ce95c427b0c0f3466b4226e2e30b92d0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3ab17699ce95c427b0c0f3466b4226e2e30b92d0";
+    sha256 = "0vl7np8bpwcylsgdlvy8hmkzapj1a8pqywy0n01vk7q0fi0wxmc8";
+  };
+  "3b07d6bb5a24bb96557c48982e8b3389df33cfef" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/3b07d6bb5a24bb96557c48982e8b3389df33cfef";
+    sha256 = "1fgkqm5f66x937nlmbsz2qx2lnd276f7rjhcyf073prv9hwhi2vh";
+  };
+  "3b14a44c8ac4cda934824f4a48fdf11ae6dc27fc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/3b14a44c8ac4cda934824f4a48fdf11ae6dc27fc";
+    sha256 = "16y6n3nlpkccpafcbavp8qhcc9adyjfyw75wjafkaw5ixd7c89ag";
+  };
+  "3b1f533104a3f316e188203a3b20770df4580018" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/3b1f533104a3f316e188203a3b20770df4580018";
+    sha256 = "1wmryvw8i7zvkcb2z2ajafsngnj66cls3918n91d2lqihsjp5x6c";
+  };
+  "3b5ec1d1c8209489d78b2eabab46ec59ea1f65b2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3b5ec1d1c8209489d78b2eabab46ec59ea1f65b2";
+    sha256 = "1qvjpm5sy6544wfvnlgd5qa2sw9q0nd3dvxqdqsvbjfzf1da6min";
+  };
+  "3b5feab7a5f46b3129c78ca6512692588d73eb8a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3b5feab7a5f46b3129c78ca6512692588d73eb8a";
+    sha256 = "1q0is2ciaxcan8fzlf57pbwj096d1lhnym8653ifxbxii9jm7ng3";
+  };
+  "3b8d4ffa1666bbdbcc426ba6232275bc853755ea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/3b8d4ffa1666bbdbcc426ba6232275bc853755ea";
+    sha256 = "0mws36ydilcpavzhc32jzxllwgkxsk7d5yhrfa51j1b894wn60qp";
+  };
+  "3b9f2ea7dea75e5b70ff3776eb46e114725fed92" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3b9f2ea7dea75e5b70ff3776eb46e114725fed92";
+    sha256 = "054gxl8l03zzib7awcq2va0gh0xisl7yzz2x4rdpiv97zm0hlzx7";
+  };
+  "3ba6f94d6907237623e86c589cc6e9a1399e5a2e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/3ba6f94d6907237623e86c589cc6e9a1399e5a2e";
+    sha256 = "022lj7l1w267kw44flfjpbsq9qj99xinw5qqxk352h8py2nddm2a";
+  };
+  "3bbd878e5357ee3dc1e752b07819ba87b7230ef4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/3bbd878e5357ee3dc1e752b07819ba87b7230ef4";
+    sha256 = "146g6zzaiwj2lcfazn6ap8ldqxs16cfdm6larc93g3yys16c87y9";
+  };
+  "3bc0fb4bdfdd1b6c1c684583efe02591afadb98e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/3bc0fb4bdfdd1b6c1c684583efe02591afadb98e";
+    sha256 = "1diniwvlf76vcfxb3cqxx2xdkwsvd486qwkdgfvwyx3np2kypk8b";
+  };
+  "3c01d8c58f5ec428fdb8057af5387b8bca2816eb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/3c01d8c58f5ec428fdb8057af5387b8bca2816eb";
+    sha256 = "0mrfagcmk325vzrhw1zb96ka5b0a37xm7g1k2b4s62xcl641qk55";
+  };
+  "3c048c63475cdefe078376d2fc1ab8294de64e58" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/3c048c63475cdefe078376d2fc1ab8294de64e58";
+    sha256 = "1gkh00i117krs57p2xwpi4s3vwby5na98nni0n5xf3aglqwa9anz";
+  };
+  "3c262ad594e83bd32b0d3a0f794b737101eb2874" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3c262ad594e83bd32b0d3a0f794b737101eb2874";
+    sha256 = "065r44gb0jsfz4m6zfvlj3w6wgh4fdmr52f353r5z1gxqqzqszr2";
+  };
+  "3c3769be5270bdf2ff4215c9f2f6c15d0ae05b7e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/3c3769be5270bdf2ff4215c9f2f6c15d0ae05b7e";
+    sha256 = "0ia41s3fvywhfgb2riqxq9mhhzy477yjix2v1bzq034g19bp4s1i";
+  };
+  "3c3a62993361bbb928b7f5c0407be6bee08da734" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/3c3a62993361bbb928b7f5c0407be6bee08da734";
+    sha256 = "0qn8mkxlll5rg4vr22xlwr6dmbsmvvyniry3jv7d3cj3bajqgavp";
+  };
+  "3c477e2e63d3533e62d654e63f012e59da5a3edc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2638350-39632eb9e5f94ba4ab8e97fa2d5a3251/3c477e2e63d3533e62d654e63f012e59da5a3edc";
+    sha256 = "1f625rs8277bqv7wb6cpxpv1ry7zcy4an9q5gq5iz0f56qs3hyxc";
+  };
+  "3c65149be3cd5e4689b4eda6bf5569d16b149f6e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/3c65149be3cd5e4689b4eda6bf5569d16b149f6e";
+    sha256 = "1zs20c26z86jwjx18zsppkra3d147vynyigibx0klrp0g2lfkpdr";
+  };
+  "3c6fd2f94e3497924851a5d8254666518d47a633" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3c6fd2f94e3497924851a5d8254666518d47a633";
+    sha256 = "00rh0skjjx7b8pd8mmnd2v35vhmsly1f0pnrvwyr9d5pfzsnxb6j";
+  };
+  "3c70f43afffaaed52bb87c78f1ecf8de846ce76d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/3c70f43afffaaed52bb87c78f1ecf8de846ce76d";
+    sha256 = "106bj18q36wr5f1k2fjfish63q6phzwavcl5fh6sq1vzlh6gggz4";
+  };
+  "3c8149ddaa7dec626f08fd4fc2d852a4536ddabc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621991-64978bb873e64559b7c143597fba3856/3c8149ddaa7dec626f08fd4fc2d852a4536ddabc";
+    sha256 = "1zl5kv0d37dhvkrhzzs9xn5qx1zpfa5nzy3cc4dvmfhsp74bgf7y";
+  };
+  "3c9ccdfb5da6f595a26f2e1f746cfc9f639e57dd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2625762-5759dd47f697403cb15f8e48090b1010/3c9ccdfb5da6f595a26f2e1f746cfc9f639e57dd";
+    sha256 = "17wp0p9miy3yll9wyl5kggdg8x1rlbjwpw1w8gyinbvlp87y41md";
+  };
+  "3cc84281c7db62939c39b08c06b3174dc52ae63f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3cc84281c7db62939c39b08c06b3174dc52ae63f";
+    sha256 = "06da44vi1v0gcrq4q3aanrqbpywqjrcm12w6i38kkwa8w2m7fq9d";
+  };
+  "3cd0df317d9f5715cd35c147537107dc3a588008" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/3cd0df317d9f5715cd35c147537107dc3a588008";
+    sha256 = "0ic2xh8327zzgrpgrcggdq10cx906sidv55ys6bn37yqcm86ihyr";
+  };
+  "3ce154ee1488f62d7804205c87d8e37504733e7a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3ce154ee1488f62d7804205c87d8e37504733e7a";
+    sha256 = "1gn1lmmnz00cbrm054q8wf3hxb2i7dhi7vb38dmgy4zwk67qdf3y";
+  };
+  "3ce4d40ab5c9c0141c6b805ed0eaa638cacc0e8f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/3ce4d40ab5c9c0141c6b805ed0eaa638cacc0e8f";
+    sha256 = "1zv992b5bndxizgvcmxwdl1mrahg0xpn356s8y4xnbvf4ysimpiv";
+  };
+  "3d0b21a35355415e71e8fb7ea0012b306e2a037e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/3d0b21a35355415e71e8fb7ea0012b306e2a037e";
+    sha256 = "1zwykg73i0rnga0y6cal2x4jlz69n3c6iq3g7c1c7d7a4hsgpy76";
+  };
+  "3d2991e772cfa979508e25de5935a89210973591" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/3d2991e772cfa979508e25de5935a89210973591";
+    sha256 = "1cacv6pd0p5wmxmfxfp56v4qd3chz6r27c6kbax3p325b6cjf9kz";
+  };
+  "3d3ffa0f6b5db075797d9657c491f1cec7434474" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3d3ffa0f6b5db075797d9657c491f1cec7434474";
+    sha256 = "0gzfpaw0v6xxbwrj14k1hl6dzn3g532war2h0mbpk5x2zgf05ppw";
+  };
+  "3dae84206c49a13a781a04f072560fdaae772628" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2542875-37bf4143b09d4d7a88bd89c6cbba110c/3dae84206c49a13a781a04f072560fdaae772628";
+    sha256 = "027xmslcmb490svay10k7xhj8rsjlmqv13igafnrqw082fz2crvi";
+  };
+  "3e2b9f360e17b90289d6aa8e07f64f8bec445375" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/3e2b9f360e17b90289d6aa8e07f64f8bec445375";
+    sha256 = "0hpm43hbn6wj8gv2hr47cnbfky2732pbqpmhjd33lgd5zjm17ki5";
+  };
+  "3edebf50b702f5e5d08876bdea65dbffa3d1e98f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/3edebf50b702f5e5d08876bdea65dbffa3d1e98f";
+    sha256 = "196mmj2w2dzp9d9gyllpivnmik2kg54kk1qini5c7va9v0iifh7l";
+  };
+  "3eeb2f03152b2114d56a8804fb8d634405321569" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3eeb2f03152b2114d56a8804fb8d634405321569";
+    sha256 = "1mr55cjp8l7jmql2lj146lw2rqgyxb7wff71nm2i8b5mp6w7fa5i";
+  };
+  "3ef09650cc8541a72fb0c287cf9008a6ed209a58" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/3ef09650cc8541a72fb0c287cf9008a6ed209a58";
+    sha256 = "0wmf0hxsyxqzbzj8r1d7f2pfrqjqwa56wj4i2nnp6cccb7z8vdh1";
+  };
+  "3f4cbf00af0438c956f74f514929e02e3e8d43bc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2616691-982be94b99b442419e99de37630ca843/3f4cbf00af0438c956f74f514929e02e3e8d43bc";
+    sha256 = "0294prdqycf6w77hb88jxirl7jgm00sjgc4nzwkznpf6q32jc1if";
+  };
+  "3f75f49ccfcf87ae2a3bcc2a68cf49fb510ada09" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/3f75f49ccfcf87ae2a3bcc2a68cf49fb510ada09";
+    sha256 = "1yq7yamysw27k0znsji1p850gk56vq07lbhxs837x0j9mp2qbfml";
+  };
+  "3f77d7050ec7beb565e4f6d6ad5f1291b2a066e4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/3f77d7050ec7beb565e4f6d6ad5f1291b2a066e4";
+    sha256 = "1ibs8qdbh8vp9ba04qs3bziwss5hbqknylqsydafqzmsvg0qgm5k";
+  };
+  "3fb53e132dfce0a5c72b3b10fb63fd6b5b89b16d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/3fb53e132dfce0a5c72b3b10fb63fd6b5b89b16d";
+    sha256 = "0lrs4n23klz5jqvchpzpflk3hyva9rr335qx3psd34q64hnkxs89";
+  };
+  "401dde870b0593ea8eb48a00e180d088dd331d41" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/401dde870b0593ea8eb48a00e180d088dd331d41";
+    sha256 = "0ijdkqiymih4nm75gky9h6yycd496hjg60kimjnz73bdadanq4g5";
+  };
+  "4022d82d143e72ccce04e7825d3328a7b02fc901" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4022d82d143e72ccce04e7825d3328a7b02fc901";
+    sha256 = "0f69a35zcjw4l68gd1qv21xnxhlwgx5fxi2msxfa5blg9i45vkvv";
+  };
+  "402bb37cf56e4ae0f047b4de8eed748f259c6a15" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/402bb37cf56e4ae0f047b4de8eed748f259c6a15";
+    sha256 = "0l3sgilafh4ri0mjz6jlx59bz82qbd6q119alb9wjpvlwgk19s9d";
+  };
+  "402bd33734002ac97efc2300bb3bcf9d2cad7bac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2514362-4164223ab78d4e529a0f07d941c2c537/402bd33734002ac97efc2300bb3bcf9d2cad7bac";
+    sha256 = "18p16j0jpavsdyv2mgif0s7xcqhw9574vfi95qs7q4pb4lpd89pq";
+  };
+  "402fa9c093561a043e89a83d3b0553126fdf2bb7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/402fa9c093561a043e89a83d3b0553126fdf2bb7";
+    sha256 = "1ga2xj4v20a28fj6n8byq7082psawipfr00f54mx33wr2flb6c7n";
+  };
+  "403c4174a81ed034269a740a7bb9739dd07b91da" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/403c4174a81ed034269a740a7bb9739dd07b91da";
+    sha256 = "157xba3mjgw37m6i29chdk2l4jg4jmlp4fkmfsanl9g66z7aw4hg";
+  };
+  "4041329918332581cd573d410c6a163dcf7b7495" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/4041329918332581cd573d410c6a163dcf7b7495";
+    sha256 = "1gvjy14zqhnyx4nnlcbj6649d2aw3vwaxhrls3ngrkw5jw74ckxj";
+  };
+  "409e09bd60df0765b85577118bd3da12988d97d9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613445-f4cf430b68ba4dbf80d97361d7c5dd6e/409e09bd60df0765b85577118bd3da12988d97d9";
+    sha256 = "0lq5lril4ylw3xg46djxzlkbvv109lpa4l0l7ag0q555yzhfcnp8";
+  };
+  "40b467567f62e9c6d0bf5cba7d2ff43cb9a687b3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2599079-89300969452d4a5eaefe1ab4af976839/40b467567f62e9c6d0bf5cba7d2ff43cb9a687b3";
+    sha256 = "02qslivwbnycygypvqicgv8syrsrdw9cv7bmz4zxp9ghbkmasx5g";
+  };
+  "40ddad780beeb95a141365c9ee5c50502ecf9a3f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/40ddad780beeb95a141365c9ee5c50502ecf9a3f";
+    sha256 = "0bd531adivbi47mb1nqmwm23plhsh6hbj54wrpnkyzbkciq24jd8";
+  };
+  "40f7222800bd5c3a14980a0f6e706ce2b8a6dc8a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/40f7222800bd5c3a14980a0f6e706ce2b8a6dc8a";
+    sha256 = "13rzkw224mz4qfsz7f3pywdl2nkly5k28jvrzqqhksrrddf4y78g";
+  };
+  "410e46447d67d73c00b681403bff72bd1c8db3e1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/410e46447d67d73c00b681403bff72bd1c8db3e1";
+    sha256 = "0dahfv97qdxza2yjp60mkflmf541s99c8j0m119vigv5795nrp2l";
+  };
+  "4138035f335e8ef4c9bd7d4700011e8ce6bc06dc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/4138035f335e8ef4c9bd7d4700011e8ce6bc06dc";
+    sha256 = "1fn99hdnba0zza6w416xkqj6vajgk57s5qphqbn2jsrf024kaal4";
+  };
+  "41478e3ee1bd4eb5b22ccbef4265d78586e0a9d3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/41478e3ee1bd4eb5b22ccbef4265d78586e0a9d3";
+    sha256 = "0k259kbgvw1zm8dcs0mp21lh88zvkxzy1v2zyj8yb8hp94gdwp1r";
+  };
+  "416a2ef9e1d85c9801e1c11b5b75e6647f40b196" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/416a2ef9e1d85c9801e1c11b5b75e6647f40b196";
+    sha256 = "1zxg97c2211hspph0d9jzaqlvrfd8cx49d40k5halnz3h682cl2d";
+  };
+  "416d80d6a7cfb22bb899d4a75a80c78ddd81ffbf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/416d80d6a7cfb22bb899d4a75a80c78ddd81ffbf";
+    sha256 = "16xfnicsjfvhzcnzpf1rpbb9q42dq67kbxi84mb4gvdrqigkvmg5";
+  };
+  "4179740ad0fac203ef6afbed2ade36619667a9f2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/4179740ad0fac203ef6afbed2ade36619667a9f2";
+    sha256 = "02kg5bp115via7359bkr3vgbk1nvylhzjc9szzqjbff3mb2fxgdn";
+  };
+  "418d45c49afe937049dd1f731516162b1f716dda" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2608258-d12288bf79ea446a9353c7f9d223b24e/418d45c49afe937049dd1f731516162b1f716dda";
+    sha256 = "05fqszk0lv9ynzpf6lr44jddhm5lr476naxiiqsvwj4g62i8nv6i";
+  };
+  "41b5b5efc87e1d57447016f701ab6688ba9bed94" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/41b5b5efc87e1d57447016f701ab6688ba9bed94";
+    sha256 = "0gcfhbzh8hqhv5xzyfz20j01haxgyirilv8nphg74ky961y2sj2g";
+  };
+  "41d5dc73ef01e6cc21c028fba64a655a4f2d3d52" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2467022-c410c14385ba462bb86b4995040cdcb9/41d5dc73ef01e6cc21c028fba64a655a4f2d3d52";
+    sha256 = "13sdr479wysfckxv8lx7p3kh0mc9ajdyknkvzgklaxcxpl591y67";
+  };
+  "41e03d2c0ea9b66441ae01c7aa831107fba3ffed" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2612065-7518df1e66b64067baa9f5dbe835628e/41e03d2c0ea9b66441ae01c7aa831107fba3ffed";
+    sha256 = "0zfmpa24cl54f7zlpcmc6ki6kqh0qnv6g5kfi9jv51m9l2cg0x5g";
+  };
+  "41e5224b15d09a7227b36b443d5ad87d74e45b50" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/41e5224b15d09a7227b36b443d5ad87d74e45b50";
+    sha256 = "1mpq5lifwddv3mg2lxh3973nz3k3j9bs6r0ma3zknc9pjzvhr6z4";
+  };
+  "41fd3f7a3fb916297e3f478f49ee73a7ef8b0eea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/41fd3f7a3fb916297e3f478f49ee73a7ef8b0eea";
+    sha256 = "1m0san717x975926nnbinwbq8wchxbrj8w9pddq72s9k3h57a51q";
+  };
+  "41fddcc984061641cb8c27aba4b296bd158bb7b6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622402-86d1483fa60742b6be9fd5a0b0b946e0/41fddcc984061641cb8c27aba4b296bd158bb7b6";
+    sha256 = "0pq8gl1n7anxky03fy135mwcp76y6270i5jjq7il985mhqa9n3xs";
+  };
+  "42325aa5f02bc9fc9310d7edd42e4e731ef6896a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/42325aa5f02bc9fc9310d7edd42e4e731ef6896a";
+    sha256 = "1r6fhxi4341408ibhgq92yw8hih2nq7m9klax7hsfmdr4di537hg";
+  };
+  "4245e1d2e7ad643f66f744a3ed38052789489640" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4245e1d2e7ad643f66f744a3ed38052789489640";
+    sha256 = "08fnw7apzsdwx44q2bc66r6gb24z5df5573zsf0fibnflz457zj0";
+  };
+  "427e2d72759a41c12424a8f41db8c46c533e7aad" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/427e2d72759a41c12424a8f41db8c46c533e7aad";
+    sha256 = "1anhhx1xifzqa7lifb63jgrfdx0j5j3ngr7pd9acbwhf1fnz1xan";
+  };
+  "4287f776bff018fbd5847a483885c62661d3e8b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/4287f776bff018fbd5847a483885c62661d3e8b7";
+    sha256 = "0ka3mm4icsf0rvlq84s0zc2pyyymwfl7vidvhp6gphi9wb0gg0si";
+  };
+  "429bcf5d037539b13d24742b82d8b2e4dfc310a2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/429bcf5d037539b13d24742b82d8b2e4dfc310a2";
+    sha256 = "15609z8zkg3xf0374ccr3qw4c0y4l6via1c8vpn1g3n3aclgrcvr";
+  };
+  "42a2da181f0e0c22a37f4fd84ebb8992f5801a40" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/42a2da181f0e0c22a37f4fd84ebb8992f5801a40";
+    sha256 = "134cik312f2mc2cm6syz3khm11j4z5mki1ajis11plp9yc4awlrb";
+  };
+  "42a53ede1b023f8c062f8cdda02e206b50d9b706" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/42a53ede1b023f8c062f8cdda02e206b50d9b706";
+    sha256 = "0bf6waiwj827d6q4jlk84iz194gkrwyq62iqbh5k7via2xwq8j1w";
+  };
+  "42d3f4d56675451d30b582bc5dbd45fd3782d471" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/42d3f4d56675451d30b582bc5dbd45fd3782d471";
+    sha256 = "1k865pqjyn2i29kypga3m3g705pclw082zcr50yx4pzb4gyx81ss";
+  };
+  "43024ccccfd7e2f51ab71730d53234756da7f75e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/43024ccccfd7e2f51ab71730d53234756da7f75e";
+    sha256 = "0qiafmz9hg9g936y32jfi81whv6ijsbxi3wq2vjygwvw12z3pp7k";
+  };
+  "4325240311aaa4a187fdea78519062e5a4d7269b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4325240311aaa4a187fdea78519062e5a4d7269b";
+    sha256 = "13im2y96y8wlfq6i85dw6rpbrzqypvzhbb5f6272zi8mg0vl68c4";
+  };
+  "434d698cf6b167859c6903ad11759566d8f57b0e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/434d698cf6b167859c6903ad11759566d8f57b0e";
+    sha256 = "1p1mx0lffkz0lb4ryrjv8nbvmb3vzr1yhd6bar6mgn9j26x68nhd";
+  };
+  "4358d2bea62c66562030e8970bcc999a9f049cd9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2565979-eaaf2006b54843b69b5280979c12ed6d/4358d2bea62c66562030e8970bcc999a9f049cd9";
+    sha256 = "10g40dfpwcmwid6x2zj4jsr8wlfaj19wncimrj64ma84x9asid6l";
+  };
+  "439b6b4397b03135c193062962f4e04f7efb2f97" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/439b6b4397b03135c193062962f4e04f7efb2f97";
+    sha256 = "0fxgi0m96lz8vsig99mi43bmkxj4zqhdrmcin3s15qgqv5fnpp0i";
+  };
+  "43af1512f9c03f740a4b1e5e5d430bc184358f2c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2482391-24fb529bc09847ca8c3576d69ba36285/43af1512f9c03f740a4b1e5e5d430bc184358f2c";
+    sha256 = "0rllprr8x2wylsymvmwjbfxm5wc81q6hxz9xqz7ps99wnaa376vj";
+  };
+  "43ce938e9264c991f07b4ab978d5801d8b385c7f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/43ce938e9264c991f07b4ab978d5801d8b385c7f";
+    sha256 = "1xlk578ab6r0jia0ipsznr8kb0r95ljzqxhlxbp2gizyad80rbvw";
+  };
+  "43d2fd6b8e568774d422003e4f1d8cbd90c8ad09" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/43d2fd6b8e568774d422003e4f1d8cbd90c8ad09";
+    sha256 = "1gz46rhfy3w67945dwrbj5364z3r5vfkq7kcsdvlam8sn31mban6";
+  };
+  "43d5b1f0c816ddc1a75dc7c9eba7e3861bfac93b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/43d5b1f0c816ddc1a75dc7c9eba7e3861bfac93b";
+    sha256 = "05x9b14mm65v3kg0w3vknv0las5669dxqi863pj283gykai5y5j8";
+  };
+  "44550fffb2c3c4bd3e389a62349314f917149551" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/44550fffb2c3c4bd3e389a62349314f917149551";
+    sha256 = "0gwbyp4cz93dhp4lvlzb16ylkdkl1861q5sc9x8lzcfhrdlzbbqx";
+  };
+  "44988d061edf9fe35e6423243372b984f7bbc8ce" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/44988d061edf9fe35e6423243372b984f7bbc8ce";
+    sha256 = "1ijy29lal9bg8kwbjgzvzjc57f1vls2g073hvlgvha84a32qhd5f";
+  };
+  "44aea7fc4f0d356841e342fce80616815268e97c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/44aea7fc4f0d356841e342fce80616815268e97c";
+    sha256 = "1xspkr7cq8whhk66z695yvgf0z1z4w6rck41n9jxr9c2xkycafvs";
+  };
+  "44bfee33fde62aa26954c1ac4481489a0997550f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/44bfee33fde62aa26954c1ac4481489a0997550f";
+    sha256 = "1r6zdd24m7m0rykn7qbl1bkbxmiwh2jmkkqva5nw0zyc33rhy6dz";
+  };
+  "44e185cd6baca3dd0931a5b2c536c61efdb62652" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/44e185cd6baca3dd0931a5b2c536c61efdb62652";
+    sha256 = "10ji73zvb3wjsr9283r2may7kwjwrch0zdkw5qi845q1xdsy03qn";
+  };
+  "44f209fa07e3956ffbde948b34a35bca08039bf4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/44f209fa07e3956ffbde948b34a35bca08039bf4";
+    sha256 = "19h5cpf1n828wxy77sa7ajfiy3pfg2hjnaprml3wl7g607zsb2wi";
+  };
+  "450752e8befdc19f8af240d074de7cfdff240ff6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/450752e8befdc19f8af240d074de7cfdff240ff6";
+    sha256 = "03f7fvkqvbxi8xfqc5x6zzwa141rzjrvxfn4npcqifzv543zlwfl";
+  };
+  "451249045a83162ab51a602006391035d937b4fe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/451249045a83162ab51a602006391035d937b4fe";
+    sha256 = "1f594dpxyb2vln0bjj10yzxmxim88d27asaxb05b7msj8s4if4qz";
+  };
+  "457e4cce8cc3af1d0237efdf32e01dd8149d1366" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/457e4cce8cc3af1d0237efdf32e01dd8149d1366";
+    sha256 = "0ipki4pq2irfhy10sapsah9frp3nx6j33sjdi5a82sz5hc00czvy";
+  };
+  "458ce5eadcec7db6c79cc7c4785864957159d82d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2649176-0ea78bc522e047c6b5b5e477faaaf0eb/458ce5eadcec7db6c79cc7c4785864957159d82d";
+    sha256 = "0xlz9ag4xxqza8c1bbx4aj73nphngqnqmb2g2kx4wzrsf60balqk";
+  };
+  "45b816b4d0f405c95179b48d4aef89b863be886b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/45b816b4d0f405c95179b48d4aef89b863be886b";
+    sha256 = "1b6n8l0xwxfpxysljvqgh2pccqxsv7hhsgvigk7bc7bfvm4f2bc5";
+  };
+  "45b8181ade7c5f9416382db55ebb9ff006a860ae" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/45b8181ade7c5f9416382db55ebb9ff006a860ae";
+    sha256 = "0mns61vw4kv3v6pjmkqzad95x9sqlvkazr2qcxlp2pjl41h349jw";
+  };
+  "45b97a83e7de5add19253c91c6f9c3fca6133a0b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2515854-a6b06d306d9743a78268eae33a3084ae/45b97a83e7de5add19253c91c6f9c3fca6133a0b";
+    sha256 = "0bymag4rf1gnyc3yfn4xjmi1n22zkfqzqdpg09wbnrmghld92rhx";
+  };
+  "45c2f6d67121c2498bd3723b899243959da6e017" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/45c2f6d67121c2498bd3723b899243959da6e017";
+    sha256 = "1z8ks07y1q8ifi8mbb2n1igfa6a6dpmmzscn14mr860a8lh9lp1v";
+  };
+  "4653f71982a36f99d16331bbaebded3036eff50f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4653f71982a36f99d16331bbaebded3036eff50f";
+    sha256 = "05n5s7vhiiisamy7n1c31s68yy7iplfsr8q7qkjwijp6svpz3w4r";
+  };
+  "46cacf33335ca2ec60df0c71cc36af0602ca8bfb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2608258-d12288bf79ea446a9353c7f9d223b24e/46cacf33335ca2ec60df0c71cc36af0602ca8bfb";
+    sha256 = "117j7ps781wbi14cc9r5v0n64xsl7p8yr2ism8i4n8ij3i106cf7";
+  };
+  "46cea2f0ed5abe44ea23ba16c356889ae16636e3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/46cea2f0ed5abe44ea23ba16c356889ae16636e3";
+    sha256 = "1rsy2lac1ck6flh60jh5b640kns104f40qr5ffsf7mxj3zzc9h3w";
+  };
+  "46e1d0fc2b1da401fb554e93a9e7f69ba5b9857e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/46e1d0fc2b1da401fb554e93a9e7f69ba5b9857e";
+    sha256 = "18vcpjb9qvy9xswrk2zna7g2xmj0dycpsnnpddydlby8mrda1vd0";
+  };
+  "47057afb3b675c9635a3a671c05a32525083c8c4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/47057afb3b675c9635a3a671c05a32525083c8c4";
+    sha256 = "120gd17dy4m36r4y36ivjkmn9vvfgycfw0jna7vx85qys7f2qslx";
+  };
+  "471521a96267727393067d510fa208a9f090ee56" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/471521a96267727393067d510fa208a9f090ee56";
+    sha256 = "043gl3chcbcyh3na9wcv26kag7hixk31yh8synihybml4bf30am1";
+  };
+  "4733ca75068a23a29a578352ecc8dddc16d714e6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4733ca75068a23a29a578352ecc8dddc16d714e6";
+    sha256 = "11g301j3gim04xisk1pzdsxv5ygj6mf39rkxw9hfrbzky4y5zfb5";
+  };
+  "476436af18523fd743894ca8676ceb74f5d392f4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/476436af18523fd743894ca8676ceb74f5d392f4";
+    sha256 = "1qld1qqnmmn6bcw8gxs8fi0227w5d2pwyk9hxqqwfvqazmbmrdra";
+  };
+  "4782725e3bb079fa03e2bc6e6d6ca44c9352c9ce" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/4782725e3bb079fa03e2bc6e6d6ca44c9352c9ce";
+    sha256 = "002qq97afjmvpwa5vhpzyknywxfg4f6hm8f9z6vhcbc487j24dfx";
+  };
+  "47c3dd6d524f1923aa08644c2e4083ced4d481a0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/47c3dd6d524f1923aa08644c2e4083ced4d481a0";
+    sha256 = "093zcfgvnr9x6b50zi4dcvp0qp6dsp4y9z438gzf8cz41ilmk2mq";
+  };
+  "47cb5394541c26f3bab3e60fab36b8acba1d8907" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/47cb5394541c26f3bab3e60fab36b8acba1d8907";
+    sha256 = "0aqwpc5krlqi81g2wcbq2591kbnnv01cgiq4qdyd9jlkfpk79ra3";
+  };
+  "485fd4e8653da37ae3302212c1ff6c808f2e1e7a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/485fd4e8653da37ae3302212c1ff6c808f2e1e7a";
+    sha256 = "10k9s21042a9gi2k03d9r5lg8h2gx07sa39wx8zrfs697g0g9082";
+  };
+  "486e59fe184e878bc399bc95f1f81b94c3e84237" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/486e59fe184e878bc399bc95f1f81b94c3e84237";
+    sha256 = "19ck4wmlzfj43w9b1l54na3ql62n0jx0h7ffb0ghizswnb36nvcv";
+  };
+  "487d06c15e88caec9f131b002ba4ced31ca8ea46" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/487d06c15e88caec9f131b002ba4ced31ca8ea46";
+    sha256 = "1mfvbd2p8508f07dhh1dfqaq1a9n7c4l5dsfajzhcdndlzawrbbc";
+  };
+  "488efa1da7ed78314cdd0c95ad874f812853fcd7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/488efa1da7ed78314cdd0c95ad874f812853fcd7";
+    sha256 = "09jjzzvszqv7f7a70i8gib9x04h6967by6cs8dfqfb8ysfrx426n";
+  };
+  "489e5e0492743ad3dbfd8599a5d00f284d4b13d3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/489e5e0492743ad3dbfd8599a5d00f284d4b13d3";
+    sha256 = "1szgnqakysr4r59zqi8i1sjqbpykjb7flvmw8p00mx0zqpw2qi6y";
+  };
+  "48a51059aeb73ec544e6c1ace7303ebc6143b782" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/48a51059aeb73ec544e6c1ace7303ebc6143b782";
+    sha256 = "0w212ajaypf69mx8hc94kz61l1f64dvh99rpmzrycwllxk17il1w";
+  };
+  "48becdab8fce5451f3de26a98ad8c4b41c51c09e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/48becdab8fce5451f3de26a98ad8c4b41c51c09e";
+    sha256 = "1pb09gl5ji1c71nhg2bv6i3wknx11vnxcjjyfvlzgpfsw7mi9c99";
+  };
+  "48e9d691a3bd11810596fcf32aef9faa872a8fc3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/48e9d691a3bd11810596fcf32aef9faa872a8fc3";
+    sha256 = "0anv20icv51j79f4vzzh7q1a9jwpk65zzs0brsylyfkylskd9wz7";
+  };
+  "4905bf362dac5be04631d1ce552b8184a6f9eb7f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4905bf362dac5be04631d1ce552b8184a6f9eb7f";
+    sha256 = "0yf7x9wc9zwdpdpqh6x8kcrphmc63ij9xcb6ggfbihjhhfkq9m2y";
+  };
+  "493b6e580a2441b91435c406da869b799e031da2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/493b6e580a2441b91435c406da869b799e031da2";
+    sha256 = "0ic4h663s8yyckvzrkbbhg8ih888igvcswsnnh66zwrl3h5wjshd";
+  };
+  "497e1a2128ecd56307d393c59ed4962de200412c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621802-1efd555e661e4948aa22f3883712aa6c/497e1a2128ecd56307d393c59ed4962de200412c";
+    sha256 = "0860mkkg6k4c2fjzq573xpf13cvcmn276z45hi146y0llsb9hpwf";
+  };
+  "49d7eaf76b4f243057c59f3fda3310c655144a0e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/49d7eaf76b4f243057c59f3fda3310c655144a0e";
+    sha256 = "07sn2y8bzh0flhrkkw12x7rc9p78mmsx0dphsm0mxb9nkkznygq0";
+  };
+  "49e02b1078a769deaf14989f1731daeb927f2192" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2787088-b587684669f0414288401564922cf5d8/49e02b1078a769deaf14989f1731daeb927f2192";
+    sha256 = "180yvr32wnhgivkz5i00l88wkw4l5v9d5vgmdxhjvndzv52ij00p";
+  };
+  "49ffdfd5801c4c8c2b51be4b2e51108595a340f7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/49ffdfd5801c4c8c2b51be4b2e51108595a340f7";
+    sha256 = "0m0qv1wyslkdg75ymbba0ppp35ir9wmm51jqsaac3wxjacgwp85f";
+  };
+  "4a3c35cce04ee67dd38baa7ef7703dbd6fa6b14f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/4a3c35cce04ee67dd38baa7ef7703dbd6fa6b14f";
+    sha256 = "02kqv01gjhj6402i18cq5ihp9nbcl4ij7hanb2l6k3mw2f3h9202";
+  };
+  "4a6de8866429da8f1baf5ddaf3973c381e507f9f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/4a6de8866429da8f1baf5ddaf3973c381e507f9f";
+    sha256 = "113qadrkv6calsid2bbb0lswimr3qasf0mzyvbxcg888q934dirp";
+  };
+  "4a996ed0676c92d061e923599186c0d592b8c180" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/4a996ed0676c92d061e923599186c0d592b8c180";
+    sha256 = "0gfmg2si5wmv99d0f3z82qdpcnkb377hvd9mjn29npvmzcxdk8xl";
+  };
+  "4aac38fbf89541859c14c7fbf320b1f9deb410f4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/4aac38fbf89541859c14c7fbf320b1f9deb410f4";
+    sha256 = "1snz21gw73zi27bha2jq2099j4hgk03xrn382rgc9l0j6zx1hcld";
+  };
+  "4ac1a3a1641db0a7d533dc58b147c50ee5e61f2d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2495503-7390cc25898b4ab0a4f9f846f2fd7754/4ac1a3a1641db0a7d533dc58b147c50ee5e61f2d";
+    sha256 = "1b0wz0gz103l9vvg2g9xbds3nc65x3bv7nb4rw8k1lafnpypxvx4";
+  };
+  "4ac1a96d979c84bea010254903c746d8f0192931" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/4ac1a96d979c84bea010254903c746d8f0192931";
+    sha256 = "0p4zjrik6jbp25vsahv7g8jkpvydkh19winqiswiz91xfjzi7wfl";
+  };
+  "4adb6983f2858294dd67959dbb107cb141c93c74" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/4adb6983f2858294dd67959dbb107cb141c93c74";
+    sha256 = "07fbgdm1d6ymv6m046pmjh0af4syin13f3g36kyh19gbsf81gn51";
+  };
+  "4b0a3157b647ecf945962c64e6c1f2a4b0841404" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/4b0a3157b647ecf945962c64e6c1f2a4b0841404";
+    sha256 = "0qh7irvdj2ak0ixbq8mvgnyak9l378463ffgvh8a76rvajlmfw01";
+  };
+  "4b6a1631906e490aad98097955aaed303b835e4c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/4b6a1631906e490aad98097955aaed303b835e4c";
+    sha256 = "1c8mzirs8qbk2532ai7sj6gx98lhzl2r8c5w78p2zhxc44qds6cy";
+  };
+  "4b6f876e200503f43b0378c2bff4e3371dede19d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/4b6f876e200503f43b0378c2bff4e3371dede19d";
+    sha256 = "1wxz4zscc57j0h8jrdxiy7qjx5gyz5wv552hkx9swzl8zv1c4vxi";
+  };
+  "4ba7bd51b92bbbea7f47cede7dccb18ed74c4da9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4ba7bd51b92bbbea7f47cede7dccb18ed74c4da9";
+    sha256 = "10mgd6mhyp147v70vrjs2pni99f10wvjzzxgv4s1yb0kb1f3rx7m";
+  };
+  "4ba9e150400597410bcc2038b890c5ebfab59f97" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/4ba9e150400597410bcc2038b890c5ebfab59f97";
+    sha256 = "11gnqjjjdjjlxnzsx2p2j08xjjpr28zy5g0y5ba2q9fzz1pmi0xd";
+  };
+  "4bb876b638318dcb891581ef5c5b60ab49f84a14" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/4bb876b638318dcb891581ef5c5b60ab49f84a14";
+    sha256 = "0kabkyrgb8jbp90hbmksmh03r5bbfk9rk61rix4krk2dlcb0dazi";
+  };
+  "4bc5d5526880f85cc76aa4910df1d4cb262afea4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/4bc5d5526880f85cc76aa4910df1d4cb262afea4";
+    sha256 = "18g5sk5ck5yv7bm84c3hm4q1b05kwm4vv5dq5l54a0pkgp59grqv";
+  };
+  "4bdc7380f8fb8cd1f70702e4b5dd2f4ea262d125" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/4bdc7380f8fb8cd1f70702e4b5dd2f4ea262d125";
+    sha256 = "0j924pcmddwqap395nsygs3jzcsfp3f225waypzjzwzf0dqdwvdm";
+  };
+  "4be9c06ad3f3ec9e3ab2f093677c38c9a57609fd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/4be9c06ad3f3ec9e3ab2f093677c38c9a57609fd";
+    sha256 = "0inyckyvag3cjbjw7yir3ga8qx6kly82xhi4ibrqs5anmlbvg6wn";
+  };
+  "4bf3ad76dabf85f8e9a2caef2ec4cc44035c1748" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2557508-14de7cde62764f07a29f3058b3db36e8/4bf3ad76dabf85f8e9a2caef2ec4cc44035c1748";
+    sha256 = "0d9igj7ncm9bgx4z8sybfw5qa0vsslfp155wgycj77sqbk4vxw6f";
+  };
+  "4ca619b184d0aecc977846b5cb89a7789844736d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/4ca619b184d0aecc977846b5cb89a7789844736d";
+    sha256 = "0x6km34gk5wmd1p3i2b9a8bhv32337dxmilaq2x9zg12g5j0ab76";
+  };
+  "4ca7aeb41838db40fce0bd1181781152f3273c85" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4ca7aeb41838db40fce0bd1181781152f3273c85";
+    sha256 = "1c47j2as7c67aa4y21gkli9qxzik75aq0abdvjln2mw2yidd9f6q";
+  };
+  "4cdfababde3088412ac7195d034c19f4f7e873cc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/4cdfababde3088412ac7195d034c19f4f7e873cc";
+    sha256 = "0mqq1vbh9ikcrplnr5sa0lz73p45kl8wc1py3ylmycifymjcb7jk";
+  };
+  "4cf428f5e7b38cea3b24dce0380c776e1a06ecaf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2787088-b587684669f0414288401564922cf5d8/4cf428f5e7b38cea3b24dce0380c776e1a06ecaf";
+    sha256 = "078yzqnwidsx5xqa5p9jvl4qqvhdmx5i2rv31azjc1s9bbyihnyg";
+  };
+  "4d0630a1e99d1c060c8dd45b809b2e6c5e6bde7a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/4d0630a1e99d1c060c8dd45b809b2e6c5e6bde7a";
+    sha256 = "0hrpqrb934z5qjxmvp2hpjqkbr80xwqrd8bxj63pdcz11axnk1c1";
+  };
+  "4d1f805d1ce7a7c6f0eb46295359f5ef01297c17" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/4d1f805d1ce7a7c6f0eb46295359f5ef01297c17";
+    sha256 = "1fh46cz761wk4cy6xskjs07a58sb2im6n56gk20mmslw2iv8y1z2";
+  };
+  "4d65a777c9a440e869ef25b04b71a9d9a6ff7190" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2593226-b511ed7dda124055acab1a4474628222/4d65a777c9a440e869ef25b04b71a9d9a6ff7190";
+    sha256 = "0jv2bpb77dshi3kj0wlgzl0y7f5b1g0jr0h47fyraxk2mg10ry5q";
+  };
+  "4d6f9c6d7a261e35898225b1fade32da175cb530" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4d6f9c6d7a261e35898225b1fade32da175cb530";
+    sha256 = "1kn5zg25rwl37vskaggw7hlb2yxxambk0lhaa4i0mlgj8050m2n6";
+  };
+  "4db41bf84756d686fc71e275d2c94c5c2299de97" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/4db41bf84756d686fc71e275d2c94c5c2299de97";
+    sha256 = "17rijjf8k5fa827szbj2adz8ix8z6h607xpa0mg69hrl9jxbi7jp";
+  };
+  "4dbf88901817044507142dfafe605a1b527a5733" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2416381-a1125fd46e044645898de0a3f7870b3d/4dbf88901817044507142dfafe605a1b527a5733";
+    sha256 = "0bsykmshh4677rlkgd7qx2j0alcskw8krkvfzardcq481zkv3i7n";
+  };
+  "4de19ef682be73fd5616348eafabda7e5b5c2614" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/4de19ef682be73fd5616348eafabda7e5b5c2614";
+    sha256 = "0m3phx8581x615y7dg98kg0bdkka07897pjcd759dxjfbvvy2fyl";
+  };
+  "4e0bab5bde5138bbeb03c118ed5450afb6087c8f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/4e0bab5bde5138bbeb03c118ed5450afb6087c8f";
+    sha256 = "1afci1zkw3skyih5ij2ld2z75xp3vf2q4ssdb39xgjw84hagxybl";
+  };
+  "4e10a129d42108f8b10039ca6b879fd30bfeb431" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/4e10a129d42108f8b10039ca6b879fd30bfeb431";
+    sha256 = "0qyadw0q43aj15c699minvb2xbd6hlarwjy7gfsym9vbrv55fhjh";
+  };
+  "4e6e5e7b59b428c37f77a90e081f121a450cb039" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/4e6e5e7b59b428c37f77a90e081f121a450cb039";
+    sha256 = "0vpr0k1mf4zg5k90jkx8jxm11dl0ky8jlyq17zcdl4v0ricadw57";
+  };
+  "4e7e810806daa53af602a84d64ae8277b20e8884" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/4e7e810806daa53af602a84d64ae8277b20e8884";
+    sha256 = "1j4ms2b2g34d3hr2cwbimwlljpm9a08vwv6d644ryib170kiv8z2";
+  };
+  "4e98b65102ae8ae6833a82df09b1c4926070f680" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/4e98b65102ae8ae6833a82df09b1c4926070f680";
+    sha256 = "12np9i6rrfb72pzb53wqs9i2pi54gfd95sq5g1b5appj3qqvl5cw";
+  };
+  "4eacf8ae62800ea91a75533032d4a4abad00c1dc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/4eacf8ae62800ea91a75533032d4a4abad00c1dc";
+    sha256 = "1i23518c07q9q9npwrbmxl1dxx0sxyviv4l9892s8kjj2gamf4kn";
+  };
+  "4ee7da06ece4e65e4b1f6c4f3f60b4f183a6b0cc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/4ee7da06ece4e65e4b1f6c4f3f60b4f183a6b0cc";
+    sha256 = "1pliz4710qi465vhy2z90w9br02jx6k3r192izn96njsnd02mm4x";
+  };
+  "4efa7b4c022fb3147eafad578190d50881927acd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/4efa7b4c022fb3147eafad578190d50881927acd";
+    sha256 = "1pic400nbygcarkrkzcdvhb00pq25iipn3bwlgcng38ihfay7wjm";
+  };
+  "4f65d69acee548a54f8329d2457356d425bee4a7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/4f65d69acee548a54f8329d2457356d425bee4a7";
+    sha256 = "1bl8arab79mh10qclam0gmf0bf7rqj4zbas3bsz2jq6mnw7hz7py";
+  };
+  "4f6a87f4bf05f150a09c25735784bc3739871dfb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/4f6a87f4bf05f150a09c25735784bc3739871dfb";
+    sha256 = "0kal7sz290wjq3p8v76kyhj9l783h8br06cfyd8vr93xnrmxj18s";
+  };
+  "4f81cd7206cb477f1b15d71433f87035b8ef4b61" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/4f81cd7206cb477f1b15d71433f87035b8ef4b61";
+    sha256 = "0dkad05vjbxqvdhx3594j7vx7qjjckpzcsnbwmlb6jvlp7ki4qal";
+  };
+  "4f9629d19fa7928aaae10e4bb7c79195fb4f2436" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/4f9629d19fa7928aaae10e4bb7c79195fb4f2436";
+    sha256 = "0w26dm0npmlbdg73j89rmbxpkr64i80wdm4zzgsafrh3vmaqs38n";
+  };
+  "4fb2c8f58c15b33818735ef8f75ba170a1b1f65d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/4fb2c8f58c15b33818735ef8f75ba170a1b1f65d";
+    sha256 = "111hbfbikwl85iscj37k3wn35s47cd6qzpcsir1ylaxcb9q350j7";
+  };
+  "4fbda194b6083d60ec1a9e281eb6caad5716cf1e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2489751-c4626d8ec02a40d3817d364f1bc426a5/4fbda194b6083d60ec1a9e281eb6caad5716cf1e";
+    sha256 = "0nfihbl3pwni0gpfrpcdi4xggdkr0m9d4lq788w9hfb4phfppkjh";
+  };
+  "4fe88f539e62bf77da44db73cb91ffe913569e34" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/4fe88f539e62bf77da44db73cb91ffe913569e34";
+    sha256 = "0vl7g23l199imd5n0ll78bf6bk5spx33r1sdzwbwyf439xd53zn5";
+  };
+  "4fecd0bf8aca3391671cf59243a551e7b58f745f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2787088-b587684669f0414288401564922cf5d8/4fecd0bf8aca3391671cf59243a551e7b58f745f";
+    sha256 = "0yzh9i84lm4gh8wsljsa66bg9g6p0xbff3vq5rk1nha0zwg0i7x1";
+  };
+  "502e3c3b4dcae339b71743fc346f2398f2d7a218" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/502e3c3b4dcae339b71743fc346f2398f2d7a218";
+    sha256 = "1qirpjwv6cmx2g74dlswhd5haaqff9km47xv79m6rd3c4q5xn0xs";
+  };
+  "50606bde1b8f7f906c86dad14730c53cab06b477" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/50606bde1b8f7f906c86dad14730c53cab06b477";
+    sha256 = "1kfvwbxhl69f08ryfh39105xda14vz06r6zhvi18d3cy50znamw4";
+  };
+  "508797aad17ea00c10d3c50bebc98d3981dd7bb9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/508797aad17ea00c10d3c50bebc98d3981dd7bb9";
+    sha256 = "1r9csvlr703whm8dk759xnn89glrp1gbdxs60ahspls48yxj1syg";
+  };
+  "5098f795311987869f91ed638f4c0a395312211a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/5098f795311987869f91ed638f4c0a395312211a";
+    sha256 = "1j3k1vixg49ilcmvd9k82dq7lj0dlmf8iaz8zvsgzgril9azd3nw";
+  };
+  "50eea30641c70b731a2069bd514ef5f1709825de" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/50eea30641c70b731a2069bd514ef5f1709825de";
+    sha256 = "0p9k5jhmhv26i18c7axi9yvr29d4wzq4zr08875m1hcwhij3wyxg";
+  };
+  "51298934386bbe2da528af9262277810d6653396" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/51298934386bbe2da528af9262277810d6653396";
+    sha256 = "1yygwd8i6cp67rgz59g192x1klh3rxgsyzpmxcinj4b0iwihglvc";
+  };
+  "512f28040301a00935d7f1ded68e709b048d7f1d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/512f28040301a00935d7f1ded68e709b048d7f1d";
+    sha256 = "075szic2vp5f6c3kmy432xn8r81pb6c82dwhpigmyvjl0hjqqcf5";
+  };
+  "51413e0814803560ea68a0cdfa59ae901551ad14" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/51413e0814803560ea68a0cdfa59ae901551ad14";
+    sha256 = "1cbb5a1drx313zi7llrbwsj7yqshinxs3i1q86y63vrjh9yimsb6";
+  };
+  "514684d898b2ab6135a63ae87054e6af91cac2ae" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/514684d898b2ab6135a63ae87054e6af91cac2ae";
+    sha256 = "0xha9la702szpf8nqrm9kril6qdfl3vxpl18npm8d3rxgsbrrj1p";
+  };
+  "5147927b8b7ebed2923c8d3ae6b0e1f716b5fb61" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610954-bd0fcbe6f0c748508fe9438073c40b27/5147927b8b7ebed2923c8d3ae6b0e1f716b5fb61";
+    sha256 = "18p404kg10mqfh5d2rcwalxrgr5ihw0lp14rm5xf1aiw303mlf61";
+  };
+  "5152492459f57a1bb4d120be68d29ed666c87c33" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5152492459f57a1bb4d120be68d29ed666c87c33";
+    sha256 = "17nfafsnk349q31cyrppz4w50z8c5n0ff2v6n5s3z8vzx4pj1zhg";
+  };
+  "519dd66ccb831a904959a155fd43639be5a97863" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2686985-76325fadec474557a67995f00383ea6d/519dd66ccb831a904959a155fd43639be5a97863";
+    sha256 = "01rd9jvys40vi6xqpyf2r1dqj4r3gg61w58madq8wq7q0x4wvvcg";
+  };
+  "519e03a04b64bc3d14eefb416e21ae15c6f0121e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/519e03a04b64bc3d14eefb416e21ae15c6f0121e";
+    sha256 = "15gfg5klklnhbfbsx0jqy33zamc32l0aiji064mjbkliwv1hm51b";
+  };
+  "51f74fd271b725c13ee25b2dae5d9b5250116180" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/51f74fd271b725c13ee25b2dae5d9b5250116180";
+    sha256 = "1zn2lm64icq0bjnayczrl7a6d66jyxbv46cgnixlnvpa0dq1bx5m";
+  };
+  "51fd67fd01d7f93ebe372aa67ec66496e9ccf3b1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/51fd67fd01d7f93ebe372aa67ec66496e9ccf3b1";
+    sha256 = "0xzjsdcfbzl41lwbblq00hy4w3kmjsbl8ai85xa5qdkzc8d8krsk";
+  };
+  "525da4df29fa810fe46aef9432572bbb5743b36f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/525da4df29fa810fe46aef9432572bbb5743b36f";
+    sha256 = "0y445vx9i0572y6cj5jbzl9gkcxgs8kn1qpc3zjzhn61ckdijc4s";
+  };
+  "5270c6b547cfda7e26cad076321fd7be0e5a061d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2602350-38e0d307a57a47baa00ee5f892c9ced6/5270c6b547cfda7e26cad076321fd7be0e5a061d";
+    sha256 = "14r1vw9hw6nlndj1iplwk0qfnr2y8b880g6fgnzwd31p0dbcim8s";
+  };
+  "52ad7360b0e7a95cc19aa7de2f2433ca955eac9b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/52ad7360b0e7a95cc19aa7de2f2433ca955eac9b";
+    sha256 = "0z164smiksv7hka7cj4d68cj5nmy4marwipq48nan3365g9j0r37";
+  };
+  "530b33d367b237887fd7f3666822b40a696806f3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/530b33d367b237887fd7f3666822b40a696806f3";
+    sha256 = "0vj4bax08c5iq035kqihrpksprrkh0nj6hyfswx5qqsca0znh4br";
+  };
+  "53190479c1e53af3a2670f6eeb1f4bda0ebd5a80" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/53190479c1e53af3a2670f6eeb1f4bda0ebd5a80";
+    sha256 = "0gncl86d1j8228hcrfckn6ap632ljkxfbkya8wpqq8cspr5xbb0k";
+  };
+  "536b4cf746322581a3abe99533df6307e7a9c2c7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/536b4cf746322581a3abe99533df6307e7a9c2c7";
+    sha256 = "08d2hxd3v469b39ra57cb13shkzv4dxk44ksy92dw3m5wnwpq6w8";
+  };
+  "53738d12a38995c76f4de6f5f064a567f0ff3ac8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/53738d12a38995c76f4de6f5f064a567f0ff3ac8";
+    sha256 = "1ba1ygd5xwwgciy93pvl8ibd79glh8h7z8mxd32c301n1g7zyh42";
+  };
+  "541bb03057456219ae8a2ab97be5603923921739" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/541bb03057456219ae8a2ab97be5603923921739";
+    sha256 = "0fc4a7yw1psd4qlbc95gkanynyl5jmwdg3ddz3w93i02cd4l3y42";
+  };
+  "541d949e247ee005e6e55562dc29055d6159fb64" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/541d949e247ee005e6e55562dc29055d6159fb64";
+    sha256 = "11bws26a0j9wa8amwmpq632glrwmcwkfc5pzapwrhkd3s4snc5x8";
+  };
+  "5435cf07dad1155ea3ddbd5178f3dd6013a507d8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2615502-35e684f430004977ab5aaed43a0fab81/5435cf07dad1155ea3ddbd5178f3dd6013a507d8";
+    sha256 = "1mkhn4q4rrf7pdi49fd1968hrikham7s4wx6ch22psfinn5ysda6";
+  };
+  "543ebe1dfdaff4a1590fbd156175d836ae2beb0f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/543ebe1dfdaff4a1590fbd156175d836ae2beb0f";
+    sha256 = "1mdp47id04fc4gb247k0g40byv4nidrjnmyavpgq977yljfpzwip";
+  };
+  "544dffe0e2da98dba3a519141a740f849c5ca7ee" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/544dffe0e2da98dba3a519141a740f849c5ca7ee";
+    sha256 = "1kain6a7p6y533wl1075adfzh8733sdac87iq886hjqr89k5jdyx";
+  };
+  "5495c21514ee03fd9e7736742077960a79934c74" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/5495c21514ee03fd9e7736742077960a79934c74";
+    sha256 = "0n9cg673wa58r1xzspyxb4h3qa73jpw4sk9gc8d4dgl6z3q6lsji";
+  };
+  "54be461a1c72b36e4f01f2db78849473477d73dd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/54be461a1c72b36e4f01f2db78849473477d73dd";
+    sha256 = "0zlp7nhdl0b9yhlbclx3d3r2g4cymppwaa5w168chd4gym8qnv44";
+  };
+  "551654d82bdacbe12dfe0a27ff7948b6ad1894b5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/551654d82bdacbe12dfe0a27ff7948b6ad1894b5";
+    sha256 = "1d1bxj880nyrap1vrxfp9fn1b3pz5dbz6f50ccw6bvfwjg4fwkv1";
+  };
+  "5525223a6059a69ca58ad0617598cac64d8659b8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2620872-38314c216e7741359375cb68452fb2b2/5525223a6059a69ca58ad0617598cac64d8659b8";
+    sha256 = "1rvg2sgkbcnymrvp38847rw828ijr3mxl1zsa5706ndly6gysygb";
+  };
+  "553aa77e78f9ac7693e56c9b2ae642c4141aed66" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/553aa77e78f9ac7693e56c9b2ae642c4141aed66";
+    sha256 = "0nr6gsba11kk96l0r1hk08bbn2iy5z41hah14f85dcidcdfn8q3j";
+  };
+  "55575c3f7cb2cd14356f9dd1836e4beeb057941b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/55575c3f7cb2cd14356f9dd1836e4beeb057941b";
+    sha256 = "0g2x108hmsnfp3cgzxcdj91ikz3x3x4br6rl9vlry03dfvhzwvf3";
+  };
+  "5559dc18c6a3a435b34446daa5b51264cf9971fc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/5559dc18c6a3a435b34446daa5b51264cf9971fc";
+    sha256 = "10dvc0spvjp7r6lsvhr0f9r6nxm29053pr4q712akak7jnqh6nrd";
+  };
+  "55d527b168c8ad85340fae2fb9b238e7a568f338" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/55d527b168c8ad85340fae2fb9b238e7a568f338";
+    sha256 = "1dcjnifabnbk2v3pwkmk1hn07svavjqsck694dh8ybqcxbkf4sbq";
+  };
+  "561af5c6ee4445a0c380bce19a7f5ee82b3fe756" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/561af5c6ee4445a0c380bce19a7f5ee82b3fe756";
+    sha256 = "0r5p7rb865yrjag2wn1p8ps76ap6pa83c0lbq7fmsn4xr2m9aq8c";
+  };
+  "562c6d13b647a43c555b040ce69507c475089c24" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/562c6d13b647a43c555b040ce69507c475089c24";
+    sha256 = "1lq7cl1rbh2xyg52p6260gbqd2l6n58cm0g1ny0fwgkaskbsbvwx";
+  };
+  "567807ac295099a07a6c59a7bff568f21dd14860" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2534734-323cf099317f457e9467fda2d086db9a/567807ac295099a07a6c59a7bff568f21dd14860";
+    sha256 = "1cimyysd3z3miz0zwvnmqc60s2cc5ymb2dj4dy88iw3zw1a75hsk";
+  };
+  "568dc16559220cee02d71db824805edd0d74a3d4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621991-64978bb873e64559b7c143597fba3856/568dc16559220cee02d71db824805edd0d74a3d4";
+    sha256 = "1gmfb8106wb12757plw73g6znwqazya41dygzlpmc6zfc5sfd9kw";
+  };
+  "56b3ac7ff0cfd2d96ea21ec3d48bce76e2720807" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/56b3ac7ff0cfd2d96ea21ec3d48bce76e2720807";
+    sha256 = "0vf7hh0cav351qrpkvf897pwdlwnzwjhgfwr8dly6pjf0pqm4c3f";
+  };
+  "56d72a0ee05d644fc991dfc250a1534fdacb5b3e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/56d72a0ee05d644fc991dfc250a1534fdacb5b3e";
+    sha256 = "0r2kc6cnijar4z50xbsdf6ma4zfjqs9mzklbdamjy3niyzjy5s32";
+  };
+  "5725149f4c8e211494463fc9280b6c10907ea321" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/5725149f4c8e211494463fc9280b6c10907ea321";
+    sha256 = "0ifxhhl3rrcaqcxy1izy0abpmii9jzgs55kd537ifmnspi02674i";
+  };
+  "57518e7a38c99e38c3bb12baa69c5124f3780152" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/57518e7a38c99e38c3bb12baa69c5124f3780152";
+    sha256 = "1fya8iyfyjnqs0vgqsh3zkdb85z8s9snc188qnwypmyfpy8mpwp5";
+  };
+  "57a803d869d2db9788911933ffa0282320e75170" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/57a803d869d2db9788911933ffa0282320e75170";
+    sha256 = "1gy1dyjmpr6qap6irs2mzfpzmkjhkrci2r4ak1855ggycvy98d12";
+  };
+  "57be8202d1bdd44a6b6686351edba4e653af9f01" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/57be8202d1bdd44a6b6686351edba4e653af9f01";
+    sha256 = "167dndrfslwss276i0m1dwavg8kk27rhhalj200wk5ywb7dm6xg5";
+  };
+  "57d629f9fb09a65be5be7697a5d33a20c2b557a4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/57d629f9fb09a65be5be7697a5d33a20c2b557a4";
+    sha256 = "0xq600178i6hih6ap7aydgp0xpmmgz56ix21acrawikj89ykv5aq";
+  };
+  "57ffba4219a312d7e7daab46237a0f61ddb3ad28" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/57ffba4219a312d7e7daab46237a0f61ddb3ad28";
+    sha256 = "1qnw6qn7ywd96pv9bi9g006lnib6c60p312dlhyclphsykbn0lzf";
+  };
+  "58031ce6c4634d8b348854a1ad4bc1c74d022c7b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/58031ce6c4634d8b348854a1ad4bc1c74d022c7b";
+    sha256 = "0lz5wd4qzy64c2sr841ky129z46ha3mxx2xx0l9icxmcxczgaxq7";
+  };
+  "5828edda3a662171a3c8e304b857dc7a745b85e4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/5828edda3a662171a3c8e304b857dc7a745b85e4";
+    sha256 = "0m3p8iz4n03nw97v6iia6cdgniqp5f9zqr0mqxziwss5hhvwhaf6";
+  };
+  "5890d07428ec2ee9086c9f8d07792db118a1b57b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/5890d07428ec2ee9086c9f8d07792db118a1b57b";
+    sha256 = "1x5bqq655j50zfn31kxbrl0zbvf3zjvfgkgsp2w816lg01bkbr97";
+  };
+  "58b4bdbc8f5686d4ece9cb4a18f6367d8222f073" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/58b4bdbc8f5686d4ece9cb4a18f6367d8222f073";
+    sha256 = "0cw0gw0ky6gal0zjlxqbivhsxb1ys7whjfgjbcph9wfmws0n9cnv";
+  };
+  "58c296582abb3dba4bc073aa6708c81bc8798ff7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/58c296582abb3dba4bc073aa6708c81bc8798ff7";
+    sha256 = "1197ridzhpvih14rs5gxhvpnbpaz1l52x3cpxnfs5hd80qk212l6";
+  };
+  "58c56183f54227469e3aba4fe40c8fc227c66e55" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/58c56183f54227469e3aba4fe40c8fc227c66e55";
+    sha256 = "1nz8qyfhd6a7chs3a44aa8da1y0p7ikgd45y9w09k1wlmjgzby5i";
+  };
+  "58cf115d701dba2092d2e4a3f0ed075cc6fe3069" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/58cf115d701dba2092d2e4a3f0ed075cc6fe3069";
+    sha256 = "17h20ivmf3ks276vd96xc0z1ashyk3prk7f0p1w8z5vj7kv1y6wa";
+  };
+  "58db59892f8758da63e7b9c465b5615f6318634b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/58db59892f8758da63e7b9c465b5615f6318634b";
+    sha256 = "151qdvx1kk3r2hisn32g63jpcz5ji5n65ql000wxmav75m25dl9s";
+  };
+  "58e46f1625d6b6603897665bac292c5a3566d565" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/58e46f1625d6b6603897665bac292c5a3566d565";
+    sha256 = "0hh2kg1qz3xvcp0gmfky73gm8v2in7593hm59rqcwzk18q9pzwcs";
+  };
+  "58e4e03689103981844fc3f19413c5d3eebe2489" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/58e4e03689103981844fc3f19413c5d3eebe2489";
+    sha256 = "0h7qlwy4agc9130wb8j5a51pdy2ndvm6lbz1p55a3rjzxpmi7idf";
+  };
+  "58f1a93515f38b967b50196a9be74684efbca7b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/58f1a93515f38b967b50196a9be74684efbca7b7";
+    sha256 = "1bwlqqs4pp20vzxvhs0cqpj3108bxbqk505q93rbgyvlif0kyidy";
+  };
+  "58f5f621564cce6f1eb3c9099a1645a0369ece56" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/58f5f621564cce6f1eb3c9099a1645a0369ece56";
+    sha256 = "04finlmybwqzb146rkqmgyfrq34ql2ih5gmxhalfwn2lvlzkykgd";
+  };
+  "58f7288e0fe3a5997003f6a117a30579d15f5973" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/58f7288e0fe3a5997003f6a117a30579d15f5973";
+    sha256 = "00a351ajzmfjpc6pbj80dbm677mqrdnx1b7dsjhx91gcarxq8q26";
+  };
+  "5906155140815aedc94241abd916f56c6ab4564b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5906155140815aedc94241abd916f56c6ab4564b";
+    sha256 = "12ywwixraayk1hvfq4i2hr5dgykv693sxv6vk6nigxq8kbg0rnqk";
+  };
+  "5925a9b0f257cc9517f224bec3dee7ecf883aa08" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/5925a9b0f257cc9517f224bec3dee7ecf883aa08";
+    sha256 = "0vglai3jkbls46qvss4l28h4b21ph5x79271hln3ypd2j4chswlx";
+  };
+  "59717f7d7697f047103bbfbca63b68088e7172bd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/59717f7d7697f047103bbfbca63b68088e7172bd";
+    sha256 = "1gfm6b9cypdsvndc4id9idainvddjb0zrsa601acy62h97b9gjpm";
+  };
+  "5977705c2272d0c3385b70ffc3e5f0a2983e986c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/5977705c2272d0c3385b70ffc3e5f0a2983e986c";
+    sha256 = "08zlxija7h63j10nhchjnh7mclsfqny6lr6ay8rwcxcgfqz3kr0z";
+  };
+  "5983c069abdec3469db5b5874ac27c17341e3f27" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5983c069abdec3469db5b5874ac27c17341e3f27";
+    sha256 = "0f8y8vikn7a6f1rkqkp9y1vyvnx5g8y4pmc0gyvw5lj6hi0ph83w";
+  };
+  "598492be84474143365fa6267a0e73936ce8a248" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/598492be84474143365fa6267a0e73936ce8a248";
+    sha256 = "1s6cvk6p6m8j0w1g45gg2hdnjiwa1sf8zsaf8xvlr10jcwlnc802";
+  };
+  "59c4bec5e2957d30ef37c5198c4b90381f3ba20f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/59c4bec5e2957d30ef37c5198c4b90381f3ba20f";
+    sha256 = "1pxdkbji2wqh6dp648ikn4367zzxfxa8g0lbvdrvbq0a6s5px02r";
+  };
+  "59d5809fb3d0b096e7104e798b12b06dc68c750e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/59d5809fb3d0b096e7104e798b12b06dc68c750e";
+    sha256 = "1i9mqv3jngvibkby1bfxqjrhib4a1w63sjp4y68cc52gqkv02c22";
+  };
+  "5a001646d2ea8b208174c4b954cf99309889bac0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/5a001646d2ea8b208174c4b954cf99309889bac0";
+    sha256 = "01gxymd2h4bm1b76yn6jpjpxnyw2ixax3rccmn7f36j8zjbnmcm0";
+  };
+  "5a2a13ad5533dc3b2172eb552b404c7c458983ac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5a2a13ad5533dc3b2172eb552b404c7c458983ac";
+    sha256 = "1k2kjhx4y1zgz5sfnjsfdrqvjbr8vdqzg9q425ncd6zr198p5pl1";
+  };
+  "5a4c5b85fb81b291e8fb6f7c37c0b152f8aeb1bb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/5a4c5b85fb81b291e8fb6f7c37c0b152f8aeb1bb";
+    sha256 = "1s2nlmd81bnk6a884hpmpkgbznnwvilmbbkmx74r8wxwnsnsq3fc";
+  };
+  "5a668ab8aef15368ff281ed35e8f730cc8ec5c7f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/5a668ab8aef15368ff281ed35e8f730cc8ec5c7f";
+    sha256 = "0ha9h8ghv84byrxy7f0jqqq6gzw777vk73sh9n9kxk994a7r2dc2";
+  };
+  "5ab07520be55c428c36c959bcc9d4738bcc55daf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2791326-4a233957ffc54c94b38c9ceaf84d58de/5ab07520be55c428c36c959bcc9d4738bcc55daf";
+    sha256 = "029p4hajh92z6qf433kr6a4ahprqjj4cgbfqabf636q2d3cjwmxy";
+  };
+  "5b00e89032246f6937f2093a0f6510beb7eab715" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5b00e89032246f6937f2093a0f6510beb7eab715";
+    sha256 = "1svvf9jmhhjr36dwlw2lq6y1kl09vnhwcj2m2i8z5fbs2pa724bq";
+  };
+  "5b0c314a325c53eec5d98afdb50067ad99c6e99a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/5b0c314a325c53eec5d98afdb50067ad99c6e99a";
+    sha256 = "0g7yxicms3pkn4y90r14rf7m076fnf2vwq8rbb3wldqjl1yxmjik";
+  };
+  "5b37da6b06afe4b358305eda6827bea44e782b44" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/5b37da6b06afe4b358305eda6827bea44e782b44";
+    sha256 = "0d4k8ramsgvir0689dqxj79flqa1vls9lnjidhkwl8k7an5jf9p8";
+  };
+  "5b81c9f201693bb927130d9d31a3768f7143dfde" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/5b81c9f201693bb927130d9d31a3768f7143dfde";
+    sha256 = "1nk5jan996kb09v2cr1invjq8x3zlh4zmli57hik378x282isszz";
+  };
+  "5bbeebcd7d784670bb16f73b0bf59374d12e300d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5bbeebcd7d784670bb16f73b0bf59374d12e300d";
+    sha256 = "1i4xck1p3269fqa1p69pr7j5r5ssi4hf8p1iq988hhi10wnb74mn";
+  };
+  "5bd038cfe2a2f12f6753e85dee691c08d4fcb6e3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/5bd038cfe2a2f12f6753e85dee691c08d4fcb6e3";
+    sha256 = "184pccfp59sq2sg5wk7i20l2qxswv524nym06dpabm1fv9hi8v0m";
+  };
+  "5c42920f6f44c053dcf7e87f29ccef27b326822c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5c42920f6f44c053dcf7e87f29ccef27b326822c";
+    sha256 = "1z5ii5hslidbijzjqbx66f8h087vn7aidw02m1840pas9dqj9mwc";
+  };
+  "5c4dd9ea4a964b483b1e90c4c6a70cedc63ac70b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/5c4dd9ea4a964b483b1e90c4c6a70cedc63ac70b";
+    sha256 = "08d1f17f7prkw4c64xalywss6r0f3ab0q46hpamj5cb6xs4igccz";
+  };
+  "5c517712601cff542ae326efa6bdc3a7734755c9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5c517712601cff542ae326efa6bdc3a7734755c9";
+    sha256 = "0szgq7q7pf5chr81b1a021r6p2rlb30cyhyjazgq4snprx3f0ih2";
+  };
+  "5c53d41540d89216421c6738a2b0b389ab94ea8a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/5c53d41540d89216421c6738a2b0b389ab94ea8a";
+    sha256 = "0hcz2dj3aansxbyqcrhygsvksa3xlc156c4692rqgcfdawyz1yz2";
+  };
+  "5c65fc01f0d8703654412f609c5e78a363870079" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468936-39e1c39556f84e60be8d850c452aed67/5c65fc01f0d8703654412f609c5e78a363870079";
+    sha256 = "1v6vgkp5vvjb4zfipyy7a5y5fqafpckb2636fx0bcfqd2ggbqwqd";
+  };
+  "5c8363a3b4c54cf612de94a0521b30e565085fc8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5c8363a3b4c54cf612de94a0521b30e565085fc8";
+    sha256 = "19fq6zfwiazkgra4dvpawh0fsk0c9278kl3jzanjlyxms9isncsf";
+  };
+  "5c9dc79aa298468ccc506369dd777f36e980e71e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/5c9dc79aa298468ccc506369dd777f36e980e71e";
+    sha256 = "0wxn9pw1h2ailgsvkpykrrjdffjdrhswhvznny0l49g7jy39asa2";
+  };
+  "5ca8bb4804169df408781649b3ef8a3d6dd2f414" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/5ca8bb4804169df408781649b3ef8a3d6dd2f414";
+    sha256 = "1nimfzwxc0nfyrp0avf0nhi7n8z21pgsr9321sk21rfv3ln74bab";
+  };
+  "5cf160a27902278f941572aa592a11cf80ac6972" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/5cf160a27902278f941572aa592a11cf80ac6972";
+    sha256 = "0x9ljwsb5jy434kpf0gkk6v1grsmksk691gv9ypn98r20rj1yix3";
+  };
+  "5d09c96c7e23adaab207052fa2fe12dea14e6a44" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5d09c96c7e23adaab207052fa2fe12dea14e6a44";
+    sha256 = "052z4i5naspmnvqlrnz13rvsgfm0qx6yiwq0w3lxwgp09ix612av";
+  };
+  "5d2198866f1b1047bb8a047bbeb38cc0622a4cfb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/5d2198866f1b1047bb8a047bbeb38cc0622a4cfb";
+    sha256 = "1qw4i3v9hfs04r9ys85074j0rdxadzmmjaf3fl6pvrqfprxl0x0x";
+  };
+  "5d8e7a77ae12035781174084d8cb9a4e1bcbfb0b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5d8e7a77ae12035781174084d8cb9a4e1bcbfb0b";
+    sha256 = "0xwnanfz1rxb8jkh27sirf7iv6dkb99i51q7my15amv5a6r9svrh";
+  };
+  "5dbebfe34ab5c28eca7d7b6c57ff41cda029cf64" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2489162-8b935a4b34ed4b3586d7fe3f6ce28b34/5dbebfe34ab5c28eca7d7b6c57ff41cda029cf64";
+    sha256 = "0kl73ymnq3w0wi630i3kdm2b0j60i708i5938qipq340cwjw4m7c";
+  };
+  "5e2314065445393471dbf0e9d3f2755a491d1bba" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/5e2314065445393471dbf0e9d3f2755a491d1bba";
+    sha256 = "1i9v4q0r13jd9x4n4inkin8p2936qzlx9bkm6wl0ab9fy0bzl0lm";
+  };
+  "5e58fbb85b49d5886aa35ed06da2fc6788db1320" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2596395-e8e15c40b8f2449b881e17834a75d9f8/5e58fbb85b49d5886aa35ed06da2fc6788db1320";
+    sha256 = "05051mjf0ywp7h94g4sxcxdplm3vfq5nc2l52y08gyz4348s66a5";
+  };
+  "5e7d96af5e5b1cafa670bd77ae918457a118f7a5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5e7d96af5e5b1cafa670bd77ae918457a118f7a5";
+    sha256 = "1p9phbl68bq2q7h0afa2q429pbyb0m2wprym4v1ydlz7c50mpkp9";
+  };
+  "5e9b459db24eeba207710184e58445974e211543" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/5e9b459db24eeba207710184e58445974e211543";
+    sha256 = "0r3vxr2hi86v8fhpcr3n4hacaisqn92a9ayh84fym4y964zg5c2d";
+  };
+  "5ec11a04eda7f0d96f115e200ac8029b95d4115d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5ec11a04eda7f0d96f115e200ac8029b95d4115d";
+    sha256 = "06jfn17h59jc4d0f81s09yfjl2a12r7d9b5p4pn08h50zjkwwhac";
+  };
+  "5ef88b8b3029a7aa2ddaaaf702ab09e6f18a9ab1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/5ef88b8b3029a7aa2ddaaaf702ab09e6f18a9ab1";
+    sha256 = "18zs81swncyyff3a26dlc9c87gvq75b9c0sscwhqak2m18jz1xqs";
+  };
+  "5f026e163284ef4d1dd49f3e7ab1ddb74e2e8dbf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/5f026e163284ef4d1dd49f3e7ab1ddb74e2e8dbf";
+    sha256 = "0rnhwgizkbxn5xdf63kbacsf9s54hzxl3zz6m72jzmlr0i3z17hh";
+  };
+  "5f116087ea09d4cd18e565462f0cb21da53cad86" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2407513-a097e3fe93574082b279540eec49fa58/5f116087ea09d4cd18e565462f0cb21da53cad86";
+    sha256 = "10blnrsjd5f90bkd48k4bqbz69xa0dd41yvkf4v21ffl4sdj184b";
+  };
+  "5f239795752cebffb0bd14bc3d14db541d74b95f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/5f239795752cebffb0bd14bc3d14db541d74b95f";
+    sha256 = "17wnf2ps8abp04i6mkqz9wmfm58vwjy355pqqs216ap3bq7l7iw7";
+  };
+  "5f29467ca4107002987a75eafe3c02d49c0d3fc8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/5f29467ca4107002987a75eafe3c02d49c0d3fc8";
+    sha256 = "1irzs3c6qwh0xl7dhpyk24iwbdxyrmpn9qdly7zshgqqzgz26caj";
+  };
+  "5fa26a7a3b2978df4bee466d4c76c7b95497e4a4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/5fa26a7a3b2978df4bee466d4c76c7b95497e4a4";
+    sha256 = "03d8366sam4f1xjf7jg2awir5hd3h7hgggif3nisbpvg91nip0vb";
+  };
+  "5fe5595a5a46eab069dcd2d6813c1b68cd9ade4f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/5fe5595a5a46eab069dcd2d6813c1b68cd9ade4f";
+    sha256 = "0s3a3w3xd7w1c7x19nljmkp68xq2b1m2klx60i739y5lb2g7x0lv";
+  };
+  "6028c6247770e169982f50ed839356448f3d93f5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/6028c6247770e169982f50ed839356448f3d93f5";
+    sha256 = "0fcg2pm4l5cg2vah26s2p0p5ljy3hk0vssc0f1f18pvw5zicv3g9";
+  };
+  "604e9fc9dd1c1b397add8f900213a87a9964ee51" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/604e9fc9dd1c1b397add8f900213a87a9964ee51";
+    sha256 = "0xsns5k5165s37f4q2qy12958zz112487313n6mlgny6zrp1azf9";
+  };
+  "607c94b25b7e4fd2ad13dfdf210e43eca3abf392" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/607c94b25b7e4fd2ad13dfdf210e43eca3abf392";
+    sha256 = "169603qzhzfnpmik6vaz14zggkvad57s3d46xlnc63hcq7ambj4a";
+  };
+  "60864e331c9e60034c81b9544ca30a14688574a3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/60864e331c9e60034c81b9544ca30a14688574a3";
+    sha256 = "1hqyxcf0nfwx83qb94534y5idxb0a3554nncbrxx9s4vigm4pdb7";
+  };
+  "6093beca3b21ddf0d2d599e6a841ea070ac01fae" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/6093beca3b21ddf0d2d599e6a841ea070ac01fae";
+    sha256 = "1hxgib9wc4d9s8n0b4y8vaisxqpbhxa699ls5358nz4gdw8zr0q8";
+  };
+  "60c5bb5120f6c73b23af87c97dd5179f0ade011f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/60c5bb5120f6c73b23af87c97dd5179f0ade011f";
+    sha256 = "0lcnjvklsxhfzcda286wkwjqdczyb7w0k8v9yybl0cj3ls1ikgnb";
+  };
+  "60d58acfdcf8d83f8a76a00017b7b2e18671b5a9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716370-1fe4be93d0274863a43a7797419557e3/60d58acfdcf8d83f8a76a00017b7b2e18671b5a9";
+    sha256 = "1gfl59bmrkvg038xw90xi2g1vmz6wzh84wmsk5g6mm8klpd57aw9";
+  };
+  "60f481b9e0149933c045fafa2e119c902e698d0e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/60f481b9e0149933c045fafa2e119c902e698d0e";
+    sha256 = "0l9rq8fh7mmkj363gzl673rknaacjv32276y0b52vxxg0m8fylfc";
+  };
+  "6110e8d90324f6bac6bd3173bc69f6c58d459d08" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/6110e8d90324f6bac6bd3173bc69f6c58d459d08";
+    sha256 = "15rqyi5w0nklw3v2r7fagaa0v6am1p1rgvq7fpk0x98axp7nvx71";
+  };
+  "61402aec078bfe9e6535f5a6ae537710fa5e79b0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/61402aec078bfe9e6535f5a6ae537710fa5e79b0";
+    sha256 = "0f9yjkz2myf9qnnk21n2alsb4ibznl96hh9i57d1y9w425jg4a2x";
+  };
+  "61588d85e249c225350c50ef50608fa8b9f4941a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/61588d85e249c225350c50ef50608fa8b9f4941a";
+    sha256 = "0daalrsynapmicj8bbv2cvg4kijm3x0c8zkayjjzixw5qy8sada9";
+  };
+  "618449250b93c28bb8f15751ff6bb653143e5ff0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/618449250b93c28bb8f15751ff6bb653143e5ff0";
+    sha256 = "0zkpxgpqcmkfd1a8rsivfrw5qxkqlcw9apa2jkf46417m1k5w2k1";
+  };
+  "61a4313e93aab82bab5da58a1b601aad41ecbd60" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/61a4313e93aab82bab5da58a1b601aad41ecbd60";
+    sha256 = "1gf7d5hxdl8hyfs30b2y9f1h6d3b17jfb65jlrx8fbcg70brad42";
+  };
+  "61edd2f04c73c5c3eca0bfae13c92213516504e3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/61edd2f04c73c5c3eca0bfae13c92213516504e3";
+    sha256 = "1aslzizrnnibzn5ynspirz9zz7667mzpz4gfvqb8k0x6zk46j5xz";
+  };
+  "61ff058a4cd1eab2481a48a115063c62660b78ca" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/61ff058a4cd1eab2481a48a115063c62660b78ca";
+    sha256 = "08m4b9c2dyld2hr7c8mxpfgvxxdaxj7svaspdfsg91ghq42mscdd";
+  };
+  "622d9c355d2344266a6a9065ae16e911791d9ac2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/622d9c355d2344266a6a9065ae16e911791d9ac2";
+    sha256 = "1i51r1bwfx7fsrykfbj5ylm1yjcp2q9a305vx070rig8m33qygla";
+  };
+  "6253baddbb265d8bcab9334e1bb48fee69c0a14c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6253baddbb265d8bcab9334e1bb48fee69c0a14c";
+    sha256 = "0xfz545zngq5jnji3zxr8wlwjf8y7c8wd6bmmwkkjf1a2pipywiy";
+  };
+  "62cfaf0ed5a8437e74ef0b7331f28a86942cc8c8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605188-b2b13e5f7b3d453eb5d6b0cde31b638c/62cfaf0ed5a8437e74ef0b7331f28a86942cc8c8";
+    sha256 = "1asb6h92cnh2xmwnggn6kk9qly4pzw43aax3v07zhs69d3jbhg2x";
+  };
+  "62d297add5bd88f5ea16b2ba6b97664dd888eef8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/62d297add5bd88f5ea16b2ba6b97664dd888eef8";
+    sha256 = "1ajrnfsz53imm4hcsnjznbq087yvbj87s30v948x2vxy7ja17hi2";
+  };
+  "62e18e2b34d9ca5872cacacfd6eb9e94afd0eb2e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/62e18e2b34d9ca5872cacacfd6eb9e94afd0eb2e";
+    sha256 = "0jirs3ij917vqznqffqh5bisx4bvqfhbhr56fmlfyykckqwmq7i8";
+  };
+  "62e5d1e864e96e11f84e99dcab8cd16345641f43" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/62e5d1e864e96e11f84e99dcab8cd16345641f43";
+    sha256 = "1s7k9h8vpg5j5jq9mc4mgnrb1lyp3y3lvgc7n7l76djm61amqchz";
+  };
+  "63574e974c45ae3f0e8fbfcc9d896c53798dd161" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/63574e974c45ae3f0e8fbfcc9d896c53798dd161";
+    sha256 = "181s6b5j1zqv1hf905paxxgl4j4k20s7ypnv1h7f05qp4sq6wia2";
+  };
+  "6359e2376de35d2b27246726788d28d678796a20" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/6359e2376de35d2b27246726788d28d678796a20";
+    sha256 = "006mdqfgkxgppxcx8fdfza7z9f80rq27gjncnqpgk3wawb9033r6";
+  };
+  "6372acc1b0c4c85801bbd2b0fc9bd17a043c1b67" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/6372acc1b0c4c85801bbd2b0fc9bd17a043c1b67";
+    sha256 = "0c8fgaqy17nvsqx4lsiy4fd9z563rbf69sac18bkwyvw0wb4w1s6";
+  };
+  "637e6e050e0e294f4e7191f12ad96c9be75aa747" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/637e6e050e0e294f4e7191f12ad96c9be75aa747";
+    sha256 = "1s1vx86pp7c7kabvi0jpvqqykjb5127qwf6ljz8r6awmx9k32yly";
+  };
+  "6393b6f72772149473aacbdd6425bc77b7146697" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/6393b6f72772149473aacbdd6425bc77b7146697";
+    sha256 = "0jpjsh7r1m4isbhmmijlysv7jmnf01f3rj9q8z3v6fdmbi6v0d68";
+  };
+  "6393ed28494cd0c7bbfc3d90ee14a3c4fb5ffe2e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/6393ed28494cd0c7bbfc3d90ee14a3c4fb5ffe2e";
+    sha256 = "0972073k9di5s980ypdn4dww5y0drc1fsn7q5bk71ylz6pdx7ijh";
+  };
+  "639844a81c2400a43810b5674c144824ce23f3db" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2653253-b6a14aed15124b4891aa1fe8706033fb/639844a81c2400a43810b5674c144824ce23f3db";
+    sha256 = "0rflhgn3nxl5msfd7f8xmz56msgkqhadyh5n7b120lk34wa7bvw3";
+  };
+  "63b510d13c94072e9005674901d2b32ec9853167" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/63b510d13c94072e9005674901d2b32ec9853167";
+    sha256 = "1j10rlxqrdy1zv5fpx0zk4hy73fbi93zk7qsq59cfgpbgsd9n79g";
+  };
+  "63ceab8331229d4e03c85aa9b5f4671eda2643f1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/63ceab8331229d4e03c85aa9b5f4671eda2643f1";
+    sha256 = "05jv83mc7abw5zyad8wccnnh7q8f5ba82hq10w7d589gasdbj9s8";
+  };
+  "63fb6b15f90b5647d4e46169447beceac52a5dff" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/63fb6b15f90b5647d4e46169447beceac52a5dff";
+    sha256 = "1bhljn5pai17hw9znr22kv87p0fl01sx8h231v4mb96f8d1037q3";
+  };
+  "645a1e3bcfcb7345c6416a0ed520fae63329b8b3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622232-9cbce5f5f69743598cf4bcb212040bd6/645a1e3bcfcb7345c6416a0ed520fae63329b8b3";
+    sha256 = "1mdx70n7hv42j7ychalbn2rwq8irm1nl1s0i5rgnbvsxb0z445pn";
+  };
+  "64e87def5324af1f8687a977b1aeca68f9ecf0a6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/64e87def5324af1f8687a977b1aeca68f9ecf0a6";
+    sha256 = "1alslkmk8i0vmg4v5bd8lizm1b51bp1mcy5bmwy03dfnpv9hd8yk";
+  };
+  "64f0b7d72766b49356b5948a55695a43f845be22" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/64f0b7d72766b49356b5948a55695a43f845be22";
+    sha256 = "0x7rh3sw20czicj5pb9p0z4xdhd7vc32562wlcwf5c9k0vdyddri";
+  };
+  "6522f3b24668a2691bee084b8ee44262dc6cc644" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6522f3b24668a2691bee084b8ee44262dc6cc644";
+    sha256 = "0brl515h4axh92dypzyrcx5gjf3lzakmn48nn2aapk25l8lzw7fm";
+  };
+  "65578de12deaee566474c4d151d51dfbd4c073c9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/65578de12deaee566474c4d151d51dfbd4c073c9";
+    sha256 = "0n1rhn916zqr83fxzb6slwd3sj7xbxyi4j5371pndfq1ah8yynkr";
+  };
+  "6580420e45c35e3175f7714b91aa918b46c45984" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6580420e45c35e3175f7714b91aa918b46c45984";
+    sha256 = "1xsyvsp7gr58v19k3b5d33ayhz38amckz6kcabv2jaj22d1m4zwv";
+  };
+  "658fa72e61b1133bc866dc68b7317dda0c190d51" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372492-7eda6cf2d68f471699ac1d302230bcd3/658fa72e61b1133bc866dc68b7317dda0c190d51";
+    sha256 = "0am1lpxk2jxhf015siabscd3b8i2p43xgg8p5bp0r0sxrcbxwy2j";
+  };
+  "65a719d77d9dbaa46e24a210a17ef22399982d13" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/65a719d77d9dbaa46e24a210a17ef22399982d13";
+    sha256 = "15wh8wv0fj30xy5lhz1vhw5a7d6fqk8pjpcivzmlc9qp48jaa9jr";
+  };
+  "65b78b6ca4fcbc234e459578f687f0a5f21ff467" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/65b78b6ca4fcbc234e459578f687f0a5f21ff467";
+    sha256 = "1xpkj42dfkpqa0bq1fvwwy8n4286h2xlwz0fm2m4yk3p7qs2yyn5";
+  };
+  "65c815431a222281ca4027a3409714aca969c404" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/65c815431a222281ca4027a3409714aca969c404";
+    sha256 = "11n5ra9mwj06zlilmn58xwhqr081ml58f8jd57sz994f3ci78kf4";
+  };
+  "65f992d64db107757f6c8186765571a2f85d60d1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/65f992d64db107757f6c8186765571a2f85d60d1";
+    sha256 = "1jfrsagmfvvjxji32w4p7qq6b2vyqfmn52d1xinxn11v575cmrxw";
+  };
+  "663723ac5cff1d4ea06e07da58676eda31ded8b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/663723ac5cff1d4ea06e07da58676eda31ded8b7";
+    sha256 = "0yc5wmplmj4nqfzlydrf3gcphnym0vdy5l8xsb6l6gjm1rzn3w61";
+  };
+  "66b5c49c095c24e8ff5576638e6f43f40b60e398" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2467022-c410c14385ba462bb86b4995040cdcb9/66b5c49c095c24e8ff5576638e6f43f40b60e398";
+    sha256 = "1r4cq5hz5ciak42xy5h6jk8r55cy4a2am2x7nsm8n40pn1m86xg3";
+  };
+  "66e6d819829e7f036392ae108ecdedd0068b3fed" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/66e6d819829e7f036392ae108ecdedd0068b3fed";
+    sha256 = "00h32jp49052x7fms634savpk88976q973s1ixnkcl4q10y3ygc3";
+  };
+  "675414213a5992bda8f4bf33aa2feac7508eadb9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/675414213a5992bda8f4bf33aa2feac7508eadb9";
+    sha256 = "0b20idjyc0m9dqrnpzxxdshw29l7nlj1g7fi5zhf9y0hh77v1ji3";
+  };
+  "6758891f27f3f1b33f508442151c2d1d4244cacf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/6758891f27f3f1b33f508442151c2d1d4244cacf";
+    sha256 = "0ixakp9gxjjn5c19mir7qxjh7ywx6n2pncqiv37mbhj5c9z5r7mb";
+  };
+  "676f25261064cf478cd211dd584b7a391376f599" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/676f25261064cf478cd211dd584b7a391376f599";
+    sha256 = "0f0ix6vbx89pa9bpvnf87kwhbnf7q34mxf8ycw6md4brrjps21js";
+  };
+  "677b668be4a2ec5fa834fa988bf502390ca975d1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2703853-c90e6f22156c41b6b1968b2a029d291e/677b668be4a2ec5fa834fa988bf502390ca975d1";
+    sha256 = "16ppk310afb40np5slr1b7qy6ksq16d0pl2zavd4wrxr626c0yjb";
+  };
+  "67ebcec99338fbc806e98fe5ddcc80abd7cfe885" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/67ebcec99338fbc806e98fe5ddcc80abd7cfe885";
+    sha256 = "1rhm5ziiax99nlnyz1y3gqai9wkkvi0lwmsjn64xsqhp2cm93sag";
+  };
+  "67f9a57842391bca1072e56b907d2adde02d2d34" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2609785-e83ceb61e76a4e4bb9b4dc17c52d07b1/67f9a57842391bca1072e56b907d2adde02d2d34";
+    sha256 = "1i8aa40i83zlzydfdbf3k023329mlvlh32kwln6q9pg9998k5hr0";
+  };
+  "68290cfc4aa5f88785b355b66e5efa7ae2451f3f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/68290cfc4aa5f88785b355b66e5efa7ae2451f3f";
+    sha256 = "1s6m4qakr8bzyhak2v7d6b7h3g75iy4wfxplbz0r1bk79mlzh8ch";
+  };
+  "682beb667137b4be322732642ec6bd7a7fb77a67" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2474673-cc4b4abcf8d5453d9c14a5ad304063e3/682beb667137b4be322732642ec6bd7a7fb77a67";
+    sha256 = "1sap6ri29l2cd8yw5g5g8axy9nz8gy4lhrkvp1fnnf5c68cqqhm4";
+  };
+  "684a26e9ee9814c8e55834710a5e5395db2acbf6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/684a26e9ee9814c8e55834710a5e5395db2acbf6";
+    sha256 = "1g8alym478k5mla106h38zmspr1gvgbyckhc0hbjk950kffwg537";
+  };
+  "69435a1a9c544a85003dac3e715da698388e8cfe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/69435a1a9c544a85003dac3e715da698388e8cfe";
+    sha256 = "1wb8slsppm2cz2g5qlccjgjayv3q8bl0p5hybz3gpicnjyhla1c0";
+  };
+  "694d6d6d33e802bd013aa60c6ceef225f1769a21" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/694d6d6d33e802bd013aa60c6ceef225f1769a21";
+    sha256 = "100b3c46qf5nhw3758203khsqjk5jq9hi3s7hsjsjrrz03p2fclp";
+  };
+  "696aa11a029bfeebe1885750c0a1219698f45667" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/696aa11a029bfeebe1885750c0a1219698f45667";
+    sha256 = "0nbr429yjr1xi2zlqz0k33p62d4mq4pcc49xshkdjbqm8j76yg9r";
+  };
+  "69fc2b97ab8ad300bd86bdb295b868f7e2bce67e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/69fc2b97ab8ad300bd86bdb295b868f7e2bce67e";
+    sha256 = "0538b6klq4k379vp6miha7y73sz3lbgj093hxhzl4jb7fqnrwpdr";
+  };
+  "6a0ea024e2030b5079a2b9e20aa262fcb1a4a4b3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/6a0ea024e2030b5079a2b9e20aa262fcb1a4a4b3";
+    sha256 = "1i6rijsnpwq58ngwdak1kx0kv53w2bqgl0jfwww2mpm9nwr34dgk";
+  };
+  "6a12e8d5c57226c69cfd4eea779767ef39cc7040" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/6a12e8d5c57226c69cfd4eea779767ef39cc7040";
+    sha256 = "0fpbgjzi79f8y2k8dmj596kndbjrpkaqvld1mpfd8mfxjg435psd";
+  };
+  "6a471e2c9660b457b6c96bac1a80ff31694ca135" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2602350-38e0d307a57a47baa00ee5f892c9ced6/6a471e2c9660b457b6c96bac1a80ff31694ca135";
+    sha256 = "0ifvzqzrjf1ich2m8r75czl46kyr0y2aagsb6h5mqnxmqbznwkq0";
+  };
+  "6a50182277880d3cdd4488457883c08e6765df35" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2587672-91bd78b10f504d6789cdb334ed27eda0/6a50182277880d3cdd4488457883c08e6765df35";
+    sha256 = "1pr0sfpya1izpppfdpypkpyqsalr02v0azcxyn2p8jibnzkg4qqa";
+  };
+  "6a67f7a815e887377e17dc82a86617bcbfd74f12" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/6a67f7a815e887377e17dc82a86617bcbfd74f12";
+    sha256 = "1wqf8h7wlwzwiv2syrs3c69lbiqr7505kkbfckrscj8ym2rgmqxl";
+  };
+  "6a6962c3f79f9f08e1b48bdf76659d8d0ac02e20" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/6a6962c3f79f9f08e1b48bdf76659d8d0ac02e20";
+    sha256 = "01dlplk4r00san6hbw5mclppb0kapx51w4mv2piihx6vcdq2dv2w";
+  };
+  "6a8708499175f48f9ac6e36dcde1684f5908e594" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/6a8708499175f48f9ac6e36dcde1684f5908e594";
+    sha256 = "0v67h7q7wz0xa66l8m8kk7adrf7mr9arns5w5rdv3m6dq9730cz1";
+  };
+  "6a9c5875310b65c3a8a12766aa12d23c75256911" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605188-b2b13e5f7b3d453eb5d6b0cde31b638c/6a9c5875310b65c3a8a12766aa12d23c75256911";
+    sha256 = "1x5q67kq3jrxhcvnc4xj2ic28ssmiyld4yp3y612vl71z02rsaji";
+  };
+  "6b3a9a128f40523d7b4663b4aff1259e204dc2fa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2638350-39632eb9e5f94ba4ab8e97fa2d5a3251/6b3a9a128f40523d7b4663b4aff1259e204dc2fa";
+    sha256 = "1nhpvs47s221k07ix1i5sp4ba8mia36zmqfz66dz2x9yx87xm3gj";
+  };
+  "6b44b6d36ae3887d630357d09ac1f4655e43ca7b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6b44b6d36ae3887d630357d09ac1f4655e43ca7b";
+    sha256 = "0rmj38k1zz4q2ckwngs38jn6z5w9kaxrghckqv60ajjpn47dk008";
+  };
+  "6b67c4b93edd66dc6876acdfaf991559f2387756" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2615502-35e684f430004977ab5aaed43a0fab81/6b67c4b93edd66dc6876acdfaf991559f2387756";
+    sha256 = "0mq7wi48fck0c8i1f08mkya5fjr5a2sip3g9lzzi4my3k6g0jdlc";
+  };
+  "6b6ea1539e3e10b995b117a201cd14188d7361cf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2528357-44d3814edbb84d09a5279fe4fd30ba86/6b6ea1539e3e10b995b117a201cd14188d7361cf";
+    sha256 = "1y7r4z90rp10b9pqp54awmnxqibx8pr2924l52z2abm3hza7h6da";
+  };
+  "6b990f3e47bfc2ed0ca6a8c68c9188a6788110bd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/6b990f3e47bfc2ed0ca6a8c68c9188a6788110bd";
+    sha256 = "1mwmkci1q5lk8vrqgcrng5p8vdg2y2k18g5x5csgfa0j0harwr20";
+  };
+  "6ba54736caaad91cbe96699871e5e369c615d477" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2528371-50b896349a4f4b48b4cce5ef240b0c45/6ba54736caaad91cbe96699871e5e369c615d477";
+    sha256 = "093pf4kdkisr2k3xkz7qx88503mr70y3crx4170lblax8mji89ib";
+  };
+  "6be690bb0e769b3f7e8d0ea9dc261b06f0496249" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6be690bb0e769b3f7e8d0ea9dc261b06f0496249";
+    sha256 = "18cidvs8cv9air0l9g65s0010a677qpj3rjdx1z1p19mcr7w9ddz";
+  };
+  "6c0977b3790d44b85c497cbd724ffa4f744bd6b6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/6c0977b3790d44b85c497cbd724ffa4f744bd6b6";
+    sha256 = "0wcypa2p4wx0si460677y544hjp38vf81im61z5kq4scr5l4kwxs";
+  };
+  "6c431edb06befc6eec62ca59cc72f45697da876b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6c431edb06befc6eec62ca59cc72f45697da876b";
+    sha256 = "0bm4r49wzm0bx5wa0xdpmld8y0cv6jin9wl3djlp7kwg0nix2fv8";
+  };
+  "6cac0ce67fc25ab9057de053ed68e469376a951a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/6cac0ce67fc25ab9057de053ed68e469376a951a";
+    sha256 = "04kbpf0pwsc1a5kz2yhg1azp0ng2zc4ff8dyhc58n543nyla68v2";
+  };
+  "6cb6768eacda17fd4b9089b3667e49c91b543347" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6cb6768eacda17fd4b9089b3667e49c91b543347";
+    sha256 = "1wj29bzdnf3s0w5vymnj599jq926m5whdrllfx6869z32q8xasms";
+  };
+  "6d0a3530ef64aa77b0e3b1121ab3e5148367b843" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/6d0a3530ef64aa77b0e3b1121ab3e5148367b843";
+    sha256 = "16brrbwwhh9ddjs22ijqkaxrz56n4bmzfbkshipmc74p6ildw05n";
+  };
+  "6d10bf18bc8be763d3e8f14a5f604b8bbc8ba92b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/6d10bf18bc8be763d3e8f14a5f604b8bbc8ba92b";
+    sha256 = "12mw32xsaa1j0lcj5nbir2m7m3bp9sgvjf2022l5rxzs196kncdy";
+  };
+  "6d17b68e3ef2ba04421c03ad37c21c1871a7291b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468685-6ced80b1c43d4f92b6c325ead32ec577/6d17b68e3ef2ba04421c03ad37c21c1871a7291b";
+    sha256 = "0lb1q5wp4px4kh5lkfbva078jk0jj2nli6nqf6501yq1gbq80q5v";
+  };
+  "6d2192770af113f0d25717171721654f92522bc7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6d2192770af113f0d25717171721654f92522bc7";
+    sha256 = "0x9ayw21alzjqp5xwlj291klnxdkhqqgbz1wvppklmnw3yrqbha2";
+  };
+  "6d263531086a2ac8abcd381816ca4bbebeb2bb89" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/6d263531086a2ac8abcd381816ca4bbebeb2bb89";
+    sha256 = "10wihlpfq2ilg2a3rj6hdj2109rwsvsnjfs4x9l8pmr0imn6w4pz";
+  };
+  "6d2b2990842e4e124fa1767f5e6fb10dc1c8f0bd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2467022-c410c14385ba462bb86b4995040cdcb9/6d2b2990842e4e124fa1767f5e6fb10dc1c8f0bd";
+    sha256 = "1jvcscijpcpl4g17wl8h39p6jwngh8qys423najf9hxqxvx9l9w1";
+  };
+  "6d7357dd4987e9a687f666583450e9650b6bec3b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/6d7357dd4987e9a687f666583450e9650b6bec3b";
+    sha256 = "0xzzdsb63zb9771lxm845390d23hihgax7ksyrlhjmvj30kxxkhk";
+  };
+  "6d8bf7bc3f485cc58257d2f301a88e430fe47518" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/6d8bf7bc3f485cc58257d2f301a88e430fe47518";
+    sha256 = "1pvs3fl5qschq6gk12ig84wd4568sgmv4gv05kdvda44pnz3fbnd";
+  };
+  "6d9e988311499cbfde8b162b1b772f3ab0826cfa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6d9e988311499cbfde8b162b1b772f3ab0826cfa";
+    sha256 = "0bp2gbl6b2dimw4izmsa9cpsw2650g1a1apq5pv1j0a0ihahwfjn";
+  };
+  "6dbc1369cf4eb542c999ef1a7dc17798e967968e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/6dbc1369cf4eb542c999ef1a7dc17798e967968e";
+    sha256 = "15vl7c83w4l3jd366lxljgpjyh2dxi22s11sk83bkca9ig8p9rlb";
+  };
+  "6e12c754b5531592e7583c0ddf5ea9f617bc4393" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/6e12c754b5531592e7583c0ddf5ea9f617bc4393";
+    sha256 = "095hbf0bx9iwcyrljr23zg1dwd3n382s4pxgpvalpb6flk346i9l";
+  };
+  "6e4f2760b5d09171b1caf834191e8eff91e09092" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/6e4f2760b5d09171b1caf834191e8eff91e09092";
+    sha256 = "042615c1ssd8jd0swn6qxl55v619ilz3y5549qqaj2qbs2rxgda6";
+  };
+  "6e59a6401cd7e9537de8df24d6923df4897465b2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/6e59a6401cd7e9537de8df24d6923df4897465b2";
+    sha256 = "1pbk0lxx24w1bblnjnl2zvljy2pg4c8pad7xyfp5gwinz9ns045w";
+  };
+  "6e5a4c88769060bd4e1cc4b17dc6944cd5f3d5cf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/6e5a4c88769060bd4e1cc4b17dc6944cd5f3d5cf";
+    sha256 = "0y08zj57v9n6a1hp9rgrvx5zcj63kq3363xi2vfl5g0fl3n0rfn4";
+  };
+  "6e730e7ead3a2958afb3beeffb7961d98b372ba4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/6e730e7ead3a2958afb3beeffb7961d98b372ba4";
+    sha256 = "1d5rkr6qa8h4kxqcxarmvwfmn49k1rnfljvrm4b72yscl3x89pri";
+  };
+  "6e81558b9e889ebb9d8f50cf1f1d5c4ab32617ce" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/6e81558b9e889ebb9d8f50cf1f1d5c4ab32617ce";
+    sha256 = "1ljwpklbqah13l6mvrgfbn4xxwpxqycb4cr2ibh90aigjyjbijni";
+  };
+  "6ebcf68520fb80c14bda307947650ecbe5ed0335" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/6ebcf68520fb80c14bda307947650ecbe5ed0335";
+    sha256 = "1xq7g59xy3a25qiib3dv30in8yqg8667wpq940z64gapbsvjk106";
+  };
+  "6efaf9b48d52aee2c7a89e9fb7c8face3a1dab34" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/6efaf9b48d52aee2c7a89e9fb7c8face3a1dab34";
+    sha256 = "10iv45b9g9l3krxqs8cqkgad5zhvy64n84q94ghkyn86ilg6pmqb";
+  };
+  "6f05a4518d46fff2a081dfff843f2af3e163a983" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/6f05a4518d46fff2a081dfff843f2af3e163a983";
+    sha256 = "07qkvg5g4dnzwjv9s38gqjc5mzsa13xmv0g2d9wii4vwm9ray2sw";
+  };
+  "6f0e8b5effca878a55ca98bb70c7fc5b9c33a7ca" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/6f0e8b5effca878a55ca98bb70c7fc5b9c33a7ca";
+    sha256 = "1whaajzna61zci7cjpw0p3j7z1y3wiqz98qkn5s3lpl0j37l3pql";
+  };
+  "6f3fed4aa88e43e6ccbf7498ff502f8440e1d8b4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/6f3fed4aa88e43e6ccbf7498ff502f8440e1d8b4";
+    sha256 = "0hcsv3588k6ra0cd5l1f64m5r35fl6wbs9a8p9j29nigy3vdmbvv";
+  };
+  "6f51406032cee2275e7da1c749608e097223bcb1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/6f51406032cee2275e7da1c749608e097223bcb1";
+    sha256 = "1lcaxdjbkx2nklln244ljdfyhi4b246zvk7pl6hg29kbjaxh3grw";
+  };
+  "6f7d171cf322dcfd650c55aad7573fb99f926026" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/6f7d171cf322dcfd650c55aad7573fb99f926026";
+    sha256 = "06yn4cdz4rrvh1h483fj06n6n0jamngx2z24mjc1raf63slidb07";
+  };
+  "6f920a415787627f9dc4c1ef92a2a039a21976a6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/6f920a415787627f9dc4c1ef92a2a039a21976a6";
+    sha256 = "12szpcgm9mgddiyyf6yhs8rf6hlwa0kw0m9wzs9xdq1phxwwcvy6";
+  };
+  "701e08162a99eeb25b55b6133dfee51bf36e08d3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/701e08162a99eeb25b55b6133dfee51bf36e08d3";
+    sha256 = "1mffiwbv7qbwadrj6jkm1n4hzkjl5m3fc4dgxdijz7i79d8pgyk1";
+  };
+  "7054b730a39f0d762ba1602fbca946a38a8811cf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2565979-eaaf2006b54843b69b5280979c12ed6d/7054b730a39f0d762ba1602fbca946a38a8811cf";
+    sha256 = "1vmx4g2jyv97k5pbv6rayn8a0qd29dwmvbl60v266m2ld25mv59r";
+  };
+  "705da00d6ddc859d91abda6fb8299b957eb0d99f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/705da00d6ddc859d91abda6fb8299b957eb0d99f";
+    sha256 = "0sizr4r95pddbynh4kns28id4n99hb7cz5dxx5pj5ma8n3w5295f";
+  };
+  "7077b313799ab4557f8c8d9aa345313eb3c6fbae" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622232-9cbce5f5f69743598cf4bcb212040bd6/7077b313799ab4557f8c8d9aa345313eb3c6fbae";
+    sha256 = "0mhm5c9z63i6v24bfkhci6zdzjzqwaimkd77p5whrnqrfw44iqz2";
+  };
+  "70bb4371a8b8f7a2118ee2f0a7604496b68eef9b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/70bb4371a8b8f7a2118ee2f0a7604496b68eef9b";
+    sha256 = "1sjrdhycvh0dy9c1b2abkpar8bjmm57xqpfp2qznah918mp43jds";
+  };
+  "70bd0e0e4dbec19c4cffb718ebb1ac84e037940e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/70bd0e0e4dbec19c4cffb718ebb1ac84e037940e";
+    sha256 = "0banm0bvf6rsz8jpkx7ivghf47ds8wf6dbcfg17f7nbbcnjg125d";
+  };
+  "70f50e9df2d8e0011bf9748ea4c1df4c8c8c2202" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/70f50e9df2d8e0011bf9748ea4c1df4c8c8c2202";
+    sha256 = "1cw8ykv8nzrvwc1rdr45ilr2cyl8f6crby374n8049dyx1bd2mmx";
+  };
+  "71031e888d4b28104016a406b7ab6e993322d9c8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/71031e888d4b28104016a406b7ab6e993322d9c8";
+    sha256 = "1ixxwv77kbnz8y8z64v0radxx3q7azbakcpq9nl84k8b93lzmp3z";
+  };
+  "716adbc60694f3f72ef5e25a38f3fb973fdc7a2e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/716adbc60694f3f72ef5e25a38f3fb973fdc7a2e";
+    sha256 = "1c8w4k96i6fgkd0jc9vwpmw31p4bcfw88x09c6781ri64qw1asl6";
+  };
+  "71a6745bfe2208e7c0eea0718fc3a06d9ebf12cf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/71a6745bfe2208e7c0eea0718fc3a06d9ebf12cf";
+    sha256 = "1q9ymfkjvbwv1bwvq5m5c31yb3kcvfwvgrsr803wqa6qm4s40zdd";
+  };
+  "71a806e6c281e55c56f6e0feb65e35d553d03b68" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/71a806e6c281e55c56f6e0feb65e35d553d03b68";
+    sha256 = "05065h1wgxihrmih7yc291vxgpyimcj2kgbqn4j8mly43llylp5f";
+  };
+  "71b05376f1ca6f9ebfddddb4cb2258620d57951f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/71b05376f1ca6f9ebfddddb4cb2258620d57951f";
+    sha256 = "09ccxpvjjs3yjc45ygjd6phff9ax7xa0lhr5sb5jzswfnblkb04i";
+  };
+  "71f91c9ee187d974e3f5da3d91a352d568c260a8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/71f91c9ee187d974e3f5da3d91a352d568c260a8";
+    sha256 = "1j2jk0qb9wdczxww1wl3rm07rhz1q3b4n6z23jja3r1fqsn8w50v";
+  };
+  "7210d2acb28ac3185e52b3c854c02db46878b00b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2499790-9469133ca7fa466794728dd13190004c/7210d2acb28ac3185e52b3c854c02db46878b00b";
+    sha256 = "15llgg0n7w2awbbkb0lvb90g8sjip1zj7knca21lyxgb86p4nfbq";
+  };
+  "7214bfbc3129849a9681c342e1873b66020b0420" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621802-1efd555e661e4948aa22f3883712aa6c/7214bfbc3129849a9681c342e1873b66020b0420";
+    sha256 = "0qpkvfjnmmf8bcvd8qddfyyf3hglkp3870z8rhpxcpyqbv5q644x";
+  };
+  "7221d90f16cb54cc4f5be63f68865da103cd4f5a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/7221d90f16cb54cc4f5be63f68865da103cd4f5a";
+    sha256 = "0xzcfz1npvnf3qidc2yffx5xqs587spjmrxsnsra8fqmghy7y513";
+  };
+  "7228172fbb398b4f9cca6ca9b5db85d1a6644b4a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/7228172fbb398b4f9cca6ca9b5db85d1a6644b4a";
+    sha256 = "1d62b5vw3l58667k2nf2dvladpkwpaaa0ai9x58bh46x1gazfdyq";
+  };
+  "725d0cc30e3c4b6a9e3dfac3f320a6c9904dd8a9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/725d0cc30e3c4b6a9e3dfac3f320a6c9904dd8a9";
+    sha256 = "1lq5pdjpa6jgrywfzx92vczlkqp8ggr6mqlnly772c6a4p507xvi";
+  };
+  "72e906fb126222e8269f7d46e2d9f1ac603baa5e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/72e906fb126222e8269f7d46e2d9f1ac603baa5e";
+    sha256 = "0by17bnb94wwv35bqbb7gxn64xppf6m88m50lm6dxyblclizk1sx";
+  };
+  "72e922640673b6171e86c8c7fcdfa148004c1301" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/72e922640673b6171e86c8c7fcdfa148004c1301";
+    sha256 = "0xbd7jd9pj1g3yf4252dy84w1x7czlqa1gxalk6p6awn1n1va815";
+  };
+  "72fc2150939a11815cfa929001ecb00ad565ce7e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/72fc2150939a11815cfa929001ecb00ad565ce7e";
+    sha256 = "1jbhd6mcrxk21dbjavkz6mf610zdql9srkd6c4flb794kfxx0gir";
+  };
+  "72fee8305071d508698fa86e4a89c80f5ee236b3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2608258-d12288bf79ea446a9353c7f9d223b24e/72fee8305071d508698fa86e4a89c80f5ee236b3";
+    sha256 = "1dkbhigrqnbdpp7ixm8fwhn4x294n7zi33xijw9vngysc7kngx7g";
+  };
+  "7305d73041a77bded642dbf6567625ac3c0208fe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2466157-4ecb0085873048178dd6d2b8872eea79/7305d73041a77bded642dbf6567625ac3c0208fe";
+    sha256 = "17l3s1kn54kzjg7ajxhx7rvmw6rsvk1ad748dp9mqi5qd80096bp";
+  };
+  "730822767c19d479de3afc2e926cfd7438e23852" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/730822767c19d479de3afc2e926cfd7438e23852";
+    sha256 = "1hgcf7mzjamjjrs2636zdkz47knwy8hbvf1l4rm4slzi1mr2zrk1";
+  };
+  "7320897f4f1584c0e42fd2546557d85ca8f513db" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/7320897f4f1584c0e42fd2546557d85ca8f513db";
+    sha256 = "0r77s64pcx4585g5s3gbjksfsggbmp552fsipqzs4fv7qmanym5r";
+  };
+  "736ccee7ee45e606201ef7b7c643498cfa13d70e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/736ccee7ee45e606201ef7b7c643498cfa13d70e";
+    sha256 = "0p69pgkm72g46s76k1v8m2k77hh08sb0amx6lsszkipn86kx7ff4";
+  };
+  "73bae428e969b828d72a1c4b71208bd855b67233" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/73bae428e969b828d72a1c4b71208bd855b67233";
+    sha256 = "1x3ikd5ymqixs0zsny0lp6la3jhxay54iajw2m99w4bzfscqdkz5";
+  };
+  "73ee6ef047e32991fff9aeb313c0e8c7faf673dc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605188-b2b13e5f7b3d453eb5d6b0cde31b638c/73ee6ef047e32991fff9aeb313c0e8c7faf673dc";
+    sha256 = "06xm65k8i87crf0dq2iyj6mxwbyp0spmjwqha3n93fv63sgg3zrf";
+  };
+  "73ffe57844e03a4cafc0e9aa8819694c90e1522b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/73ffe57844e03a4cafc0e9aa8819694c90e1522b";
+    sha256 = "0j5ysqydqi51y5yv984wzs4q2y5d2d2cdrraw001yda5ghiidp4d";
+  };
+  "746b744c6a42c0f8af6feef784581873bde794e1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/746b744c6a42c0f8af6feef784581873bde794e1";
+    sha256 = "1wsmy3wazhzjk50yd2n3g9zrivzfwqvl2r5blcv7zvvqwyfhnpax";
+  };
+  "7491079d020d11f40f14eb94536fe09006ff2c16" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/7491079d020d11f40f14eb94536fe09006ff2c16";
+    sha256 = "03aqvnhvbw15kh30384pyg01s4nixjqz22780yjja4hj51frxps3";
+  };
+  "749a111a54b3257ccd4600b6ece1fd86a57efe58" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/749a111a54b3257ccd4600b6ece1fd86a57efe58";
+    sha256 = "09lf0sslsikg4jks8yzb6b9k3y9d0dbig5j45kfk58yjx90mgfhv";
+  };
+  "74a5411261270860b0b2d315c8398df07f956fa0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/74a5411261270860b0b2d315c8398df07f956fa0";
+    sha256 = "1c8zc6kryl6nn9bv77fim2ccd5ikqjnj5n0b75dii63znm8hlp2i";
+  };
+  "74bdfe7b7c5448f6b002b747a29ddf4eb214dc0a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/74bdfe7b7c5448f6b002b747a29ddf4eb214dc0a";
+    sha256 = "10kq66r73gc8ghb3b5jgahbgs9rnv2s3kbvd72vjbdbyz58wacrx";
+  };
+  "74c4761d61aabc4f7e227da3ff18fc3af1ea7f5f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/74c4761d61aabc4f7e227da3ff18fc3af1ea7f5f";
+    sha256 = "176b4fv2dmppcs9zyci4yilvj0kmn92cxybbwjllp2cr9x2ard91";
+  };
+  "74df4c8f82ff3081bd49648cee83a06677495bd4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/74df4c8f82ff3081bd49648cee83a06677495bd4";
+    sha256 = "12brl8hsdyv0gf4hggi7mf9j5q2r19w3najivicrq86rg0f2km1y";
+  };
+  "74f904f20ed3e1cd02cc9d0e07a2778948328274" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2547993-1fb84b9e293242c988e586c599eeeb56/74f904f20ed3e1cd02cc9d0e07a2778948328274";
+    sha256 = "0169jszrsidkhbhz906yc8a10ffkcnp2kxz193r46j9qpv69dk2q";
+  };
+  "75124406de34db23633265523d08e569d7889164" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/75124406de34db23633265523d08e569d7889164";
+    sha256 = "0709ach7hq7qn6452xd7n6jlqx6j5b597yyvzvmcfsbnp5nmn39k";
+  };
+  "751d2649bc4cf19cea075804463f00cf0ae61ed7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/751d2649bc4cf19cea075804463f00cf0ae61ed7";
+    sha256 = "1a5g17mvwa7f8ydwikgc0f4hf8wp8w491fhhzvnn4m4i6jam6hwn";
+  };
+  "753eb938736a4b412147164d4077e991f9c89950" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2618214-623983ec05b34939b08acd26ecfb4f92/753eb938736a4b412147164d4077e991f9c89950";
+    sha256 = "18zkl0jsx165akaxgxxzf3619jmclxc18nggcbyb1iwqmxrxpcak";
+  };
+  "759eb0a64477d1269a2089f229e3f0a2276fb531" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/759eb0a64477d1269a2089f229e3f0a2276fb531";
+    sha256 = "1v0wgzzv2d6mxmkb0s96q7jb9d5knnh2p0ja261kmqhyc6dlzlqr";
+  };
+  "75e0842c76b2e55a861da42ea1d7c4636ab53833" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/75e0842c76b2e55a861da42ea1d7c4636ab53833";
+    sha256 = "05a3azlaw3y38ysr9rdrjk8mcrzm46q39k9xy75jxg52qpbdxmzi";
+  };
+  "76b0c3828b07ab86d995f91647a8fddeda00981a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/76b0c3828b07ab86d995f91647a8fddeda00981a";
+    sha256 = "1jybpkydwa8ry4197hxb43f6lgszv6sl9fnpbd335mipn5gs9das";
+  };
+  "76df9b164d66551812ce65dddef45a44604b8c8c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2736314-83d0b2c86e6940798eae7a6b4a7a011b/76df9b164d66551812ce65dddef45a44604b8c8c";
+    sha256 = "1knls10cjd66hr0z4988gw5p782q7f7lyagpx9f63zxbqjn0l3v3";
+  };
+  "7725a79a9a5f662ca2adf8ae2efb114d32ff45a2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/7725a79a9a5f662ca2adf8ae2efb114d32ff45a2";
+    sha256 = "1vszgcnacspqzz1fj0y38gjj54qavksbwswbz2cmyml0m77h8qfr";
+  };
+  "77352bcc40b2053c8db752c49772dbf0d158af62" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/77352bcc40b2053c8db752c49772dbf0d158af62";
+    sha256 = "1pgz55g9wk1z146f00r6kbij5qkng7cb7ni22jgr6x3inblq28da";
+  };
+  "77464fb66258632d2799ac5491f4316d35cc346c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/77464fb66258632d2799ac5491f4316d35cc346c";
+    sha256 = "0iixcb51kdjnl8llbqiib1dkcv421d8pi9hly1r00clds5b5bpf0";
+  };
+  "7756f8e0698993a2efb94e15819a1d1a22edd9aa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/7756f8e0698993a2efb94e15819a1d1a22edd9aa";
+    sha256 = "0pm34hr3jm8nsvaypl68nacmbpzi2ynfnxm02rkn589f03778sni";
+  };
+  "777419bfd692da1795221b0711a3b11467f5e4ad" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/777419bfd692da1795221b0711a3b11467f5e4ad";
+    sha256 = "1g2rl7j740zhf4y8pcbcdhpzxzw9hcp0vb82zm72nhfw8hp9z212";
+  };
+  "777fe4089b0a02f749411d577a2a17adf635dec1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/777fe4089b0a02f749411d577a2a17adf635dec1";
+    sha256 = "1lvj3lvc20rh4yvwbyafw270chkl16jlardv8pqavil085qz332f";
+  };
+  "77ab57479dfe164e72b8298375e3b9b577e6640d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/77ab57479dfe164e72b8298375e3b9b577e6640d";
+    sha256 = "18qjd9d7d66qjk087xg246d6gssbiiv08y3rq2v1d7cddbsbbzda";
+  };
+  "785a36aff000132218d273b16e36412342def12d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/785a36aff000132218d273b16e36412342def12d";
+    sha256 = "0235bgb8hzg5x5fhk8a5iasdjfbj5xzh0ccxx3iaadmadcn3xgxj";
+  };
+  "786040422666da11604af7280dd6eed639de30d4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/786040422666da11604af7280dd6eed639de30d4";
+    sha256 = "0na97fbmlgwl7kfp5asvj41llyrk6srn11argjq20vwrpzj9c0h4";
+  };
+  "788022e3bc41bf23e517d88df0ca24f715b1cad4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/788022e3bc41bf23e517d88df0ca24f715b1cad4";
+    sha256 = "1hhilba17whyl3iycd906nh0c4v9mia51pb8cgy7kqjiawypcp6k";
+  };
+  "788b132136ad4d08c5f03e4078824ec04b1ac0b9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622232-9cbce5f5f69743598cf4bcb212040bd6/788b132136ad4d08c5f03e4078824ec04b1ac0b9";
+    sha256 = "1wf1kizj5s4nkkmyhc1xs1mqzzwc1b2vdybbnx3g7rn9p9rq3jgc";
+  };
+  "789b2bc3606dc2558b7cab5dbb62e8e76f20ef74" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/789b2bc3606dc2558b7cab5dbb62e8e76f20ef74";
+    sha256 = "10pzb9ylqbsls482sa1frmk7r8ra7b6y0fjb7x97v482pdskh64r";
+  };
+  "79042a16d0ef7feeccc76315246c5ee6f36dfafe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/79042a16d0ef7feeccc76315246c5ee6f36dfafe";
+    sha256 = "1wn397vwkkakm5q0r2kk1axq3zxfrc1f65cbwqlixzfgpz8lybil";
+  };
+  "7927b5a5a5c57b3801e7d0d4a42fcb142f267b78" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2653252-2bb04ebcdd0e406596c1b14273fe0c06/7927b5a5a5c57b3801e7d0d4a42fcb142f267b78";
+    sha256 = "14w4h37fsmj9mjsfa53hc4ymx9j6b9dfia3n4gwkwmbw5sj8l9gp";
+  };
+  "792a616c0f78fa0b294f67b56549092efbbbeff6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/792a616c0f78fa0b294f67b56549092efbbbeff6";
+    sha256 = "1875sind4si5lwmbypjn3ssbdxn1w5a5wv61kllqw9a8iz76pc0x";
+  };
+  "79477f2a4147dd648f89b314306f5f0346278735" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/79477f2a4147dd648f89b314306f5f0346278735";
+    sha256 = "180qwmv30vf5fx724mn44l8p9j6ipaqqs83fsiwyaifa1zn4kaf8";
+  };
+  "796f0c398bb010288b3688e6743420cfb681a4b8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/796f0c398bb010288b3688e6743420cfb681a4b8";
+    sha256 = "07mj9nfb7ganiv6pc4yz30zsbfbhqpap2x21nrq93f7r75jckssw";
+  };
+  "7983882382ee0785a3619bfda754358f8d6cd5c9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/7983882382ee0785a3619bfda754358f8d6cd5c9";
+    sha256 = "0z3jwzxdmsdwx623fbhzp5jif0yv8v31br3ipbv6d3d8kv0cw90w";
+  };
+  "7996e8351b085aa99ee962c9a0abbbe9b077e23c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2616691-982be94b99b442419e99de37630ca843/7996e8351b085aa99ee962c9a0abbbe9b077e23c";
+    sha256 = "1wsg1f8y22m01m1x8ryxzbyqzgrk0v8wssvpzcdg95ld4n46z6ps";
+  };
+  "79cbc648416e750ee538d57d6b608e3b7bd7717d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/79cbc648416e750ee538d57d6b608e3b7bd7717d";
+    sha256 = "1z5ibq34jhlyszxxllfn1ffmp8b0y7w7cqmxridnq78b1zirsj65";
+  };
+  "7a02f98f23ebb4382454f2813a70cbb932fb9e13" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/7a02f98f23ebb4382454f2813a70cbb932fb9e13";
+    sha256 = "0k8ayk7rh6kkxf8bk9hqy4wa7zh1m5gzbxfds6cc0zd4kr150sqg";
+  };
+  "7a7d7497e9f19ef7a2e4e35a37308b21cec9f982" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/7a7d7497e9f19ef7a2e4e35a37308b21cec9f982";
+    sha256 = "0ba05lnjy3ghs3jy519pcjyav5r75lpall461qns2bppzpm4a076";
+  };
+  "7a8446207acdf4eaf9676898ddacf9bdbf595de9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/7a8446207acdf4eaf9676898ddacf9bdbf595de9";
+    sha256 = "1lndbrl5sp0gj7fasrzsc2yz4vmcr8q29yvp8cva2b9691q8gj4i";
+  };
+  "7ac1ecd1bdbc99aa980807c5645a78ae48ea9577" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604998-3c15fbba3f5f4174942b1436c2db55e8/7ac1ecd1bdbc99aa980807c5645a78ae48ea9577";
+    sha256 = "04m1a8g9w4hyclfx1nc6prd02kicjdsnzg4spwk63rgv3lamjqd0";
+  };
+  "7ad6959d0c1c635355409e72473d108d90869dab" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/7ad6959d0c1c635355409e72473d108d90869dab";
+    sha256 = "19nr57sy463g1m2fbrdhpb8p5yd5dls64gw9zq2zb4jyjj7y8fia";
+  };
+  "7adad32ec30d0be94dcf1a19012e273b9971057e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/7adad32ec30d0be94dcf1a19012e273b9971057e";
+    sha256 = "13f8c98an8ycv27kglnc46jl6abgyvnq6dm8xpzzlh28fj88gbjk";
+  };
+  "7ae477712090513005fe5af06c6026b245d3c946" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/7ae477712090513005fe5af06c6026b245d3c946";
+    sha256 = "1w1ihg63ks2ba8x4m04yblbc7d8ycgbczsjz2lp28j5dy7b10i48";
+  };
+  "7b091ff0e3269cd3b11fb00a394f82b1604095c7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/7b091ff0e3269cd3b11fb00a394f82b1604095c7";
+    sha256 = "10cysl5b6iagx699w1kw5xfa51flr433g4wl55bjz9bdjw4ln51r";
+  };
+  "7b6219b2124e3663a1f4383de616fd63676c9693" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/7b6219b2124e3663a1f4383de616fd63676c9693";
+    sha256 = "0260b4p3ng5jdjb8z22cpp2376wahvh4gihjxcghlk3bal5k743c";
+  };
+  "7b7d2e469aa46e6b7a1550e355690591e4ac54fa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/7b7d2e469aa46e6b7a1550e355690591e4ac54fa";
+    sha256 = "1nyx2fjbcpdfrlbqb966x2zd1rbk7kx9x61knrfhhz7r5kb1z5bm";
+  };
+  "7b83af4328df75db5202d9e02c057d139ca1a9dc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/7b83af4328df75db5202d9e02c057d139ca1a9dc";
+    sha256 = "1igfygl9hk0q3ndjiji6bfgb4p77038bbk31kgrdy4gvky3qz21l";
+  };
+  "7ba89ad415dac138be18aeefe3423e3ebd56c0ee" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2448689-7792f1b8be254cc19b4c3379509684cc/7ba89ad415dac138be18aeefe3423e3ebd56c0ee";
+    sha256 = "10yn9d19andj61gj8x771yyrl2y7l0rgqg22mm53hkbdkfghml8h";
+  };
+  "7bc9f224a762158a310d9dd9c355f21bc20cf5fb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/7bc9f224a762158a310d9dd9c355f21bc20cf5fb";
+    sha256 = "1rxd81p9gd5rwqz9krv48bl5qzdqdb08xlc3ikn85mk847n6riyq";
+  };
+  "7bd4669f05c73f4cc2d165c712eeb0cca6711e7c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/7bd4669f05c73f4cc2d165c712eeb0cca6711e7c";
+    sha256 = "1ps1j2vywaxxcprmxbyzi3nzvks9gxviqjcvha4wv8p4igm7p861";
+  };
+  "7be14b1c31f9c742d61528f894b5a0faafdca608" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/7be14b1c31f9c742d61528f894b5a0faafdca608";
+    sha256 = "01snf2y4scl2vhbbmzs4hjayjp7hkydr7a2kbjgwc1kb41vcvvmg";
+  };
+  "7c8c84dac9bcec95152cac9aa9acac67f7702d08" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2639799-4ac82b5356a9467b8556f714f8dd9e00/7c8c84dac9bcec95152cac9aa9acac67f7702d08";
+    sha256 = "0w0ry83bxhw07l0y2zw3s1szx6gbhh2zbvwnjnd3qhjdic8abvzy";
+  };
+  "7c963542515f21d8db5b961bee100b6412d597d1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2377358-53c9e09a80d741708f589736e8974c22/7c963542515f21d8db5b961bee100b6412d597d1";
+    sha256 = "0y6186f5l3glsnnqv23npj6b1m23jxy18j6mg30g38g4lr2vk0ad";
+  };
+  "7cc355b9c369e318b838b18f749c24e2afd259c4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/7cc355b9c369e318b838b18f749c24e2afd259c4";
+    sha256 = "1jiz1n0wy6mqnv2m7v8mksrh3v6vwliqc8v6jjv7rxz1x4zclinz";
+  };
+  "7d8e31de63a57ce9a9e79c5263a63d5d46615baa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2706207-4f57365c766141c988cbd0106cf38f5c/7d8e31de63a57ce9a9e79c5263a63d5d46615baa";
+    sha256 = "1iz5vbwxajss32yvjwdss1hfczp3viz8nfl9xsk35bh5q5az0mfx";
+  };
+  "7d9e9a2f89c7bbc7404f79811bf83f4076b5bc32" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/7d9e9a2f89c7bbc7404f79811bf83f4076b5bc32";
+    sha256 = "1p37wspipadj5qicv6bs3rg3vqiqx49jkd6q3pgkb40bp0gs70ld";
+  };
+  "7db350110118d3076728f890e80db47042b1c9c4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/7db350110118d3076728f890e80db47042b1c9c4";
+    sha256 = "1x5j73m7lvz6dacd7cl1g6x0206pmh394l650aidzmmywnmpni5y";
+  };
+  "7db51b6372a7e6ccd911890e40586056b5c3bf70" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/7db51b6372a7e6ccd911890e40586056b5c3bf70";
+    sha256 = "003dg3cglf6dbljyfdamahznka718qcpsfbkvsk1kbysa6nz0kcd";
+  };
+  "7dc9a4ae40e2c039f47bfa781f706c6ba93f5e77" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/7dc9a4ae40e2c039f47bfa781f706c6ba93f5e77";
+    sha256 = "11bjnjh99mdh9fqcrnddnhgjr1znlhi11rbqajc1wjwk4zrs7h51";
+  };
+  "7ddc7ee608268e6d717f879cf6b6b7305f636cd2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/7ddc7ee608268e6d717f879cf6b6b7305f636cd2";
+    sha256 = "16cz1bvq3za22myf04p2al6im72x6al6a2y5sv5mgz7nvnhi0q4d";
+  };
+  "7de52ed6339fe756210b171c838332e276370e70" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2619995-d5e097f793bd479d8592679759fb98be/7de52ed6339fe756210b171c838332e276370e70";
+    sha256 = "076p1hj2bjysj1yk45ywrahrz9d9k8q0cvw52g0141985g9av8fs";
+  };
+  "7df9510763997f0e8873568712dd0de573058bf3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/7df9510763997f0e8873568712dd0de573058bf3";
+    sha256 = "0iy45rddw5cq5w9qm6vd6lxjnf2b4hm4abnna0ay7qnmdkcxy0zp";
+  };
+  "7e1d5652590c12db0c440eac59f69a777425f9bf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/7e1d5652590c12db0c440eac59f69a777425f9bf";
+    sha256 = "0j3f2saflmsylyi4i2w4z56kwzpdvimi9na49m3nfd16d5m50fnz";
+  };
+  "7e6ab4f547b9d8bf5f8a35a74d335d500588d8d9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2431986-5a8dd079cf514ebd8b20693fadfa5a4e/7e6ab4f547b9d8bf5f8a35a74d335d500588d8d9";
+    sha256 = "0m45dhadisgl1n32vbj71vhj1avn9mcl3gx7dsrgd5pyj2cm0v2v";
+  };
+  "7e741bb7378733b67fd4bf594a5798fdbbf4c06b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/7e741bb7378733b67fd4bf594a5798fdbbf4c06b";
+    sha256 = "0090i1z4ggh0rjka4lk2nyh8vz6w5kbxrf5y8sb4lyhbggshypz4";
+  };
+  "7e74577c3774e9eb2328f96f667ae7df976b62e7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/7e74577c3774e9eb2328f96f667ae7df976b62e7";
+    sha256 = "03p73gsai1gzazyhi0s409d88b0vlnvap2dy5qas5xazhsj3s32v";
+  };
+  "7e929e26670125eb017b7f33f7906adcbf8cdbe9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/7e929e26670125eb017b7f33f7906adcbf8cdbe9";
+    sha256 = "04dx7sqs1s3h8msjfah395hjx4a2x51k0innh4np11zr0chw4rf0";
+  };
+  "7eab47f1da799465d08b68e26c7ae336a7b07a47" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/7eab47f1da799465d08b68e26c7ae336a7b07a47";
+    sha256 = "1nkgnvif8ysz26rwhxmr3kfk5xajr7z5nbbx4givpv16fmr67hp1";
+  };
+  "7f0b7231a2a6fd1df206769a4acb8cb861b09f02" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/7f0b7231a2a6fd1df206769a4acb8cb861b09f02";
+    sha256 = "0fbsqakyam8jacxw9kmifddmgilr1rlvcxp0dskvdlb31pfzzlx7";
+  };
+  "7f5b42e091a41c16eb4bfdfb2de3a36670854201" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/7f5b42e091a41c16eb4bfdfb2de3a36670854201";
+    sha256 = "1qbwixy33i07qcicgc2xra46nhb9jklal25pw0wrc0r7migxv9f9";
+  };
+  "7f8b724b75c6f29c33f33a1f310cb495e079aaa1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/7f8b724b75c6f29c33f33a1f310cb495e079aaa1";
+    sha256 = "0clv70849r47m9y7l5515xn9z2qn4vazkkpfpwdrgmbh8wjb0xnl";
+  };
+  "7fe64241b07105e31272f224ac763156f8b8296c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/7fe64241b07105e31272f224ac763156f8b8296c";
+    sha256 = "1h4b430rjv86bv4vcrj6hrza71b5hrrivllxn7an78yi7rigc761";
+  };
+  "801295549915c66473e6cd436dc1623ad50a6868" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/801295549915c66473e6cd436dc1623ad50a6868";
+    sha256 = "0d889wz1r7l3801gdcmdchnij3z3ch8adw0rn5rc613r3nz613hh";
+  };
+  "806cb366cb892bd749bb1e697026060f9943b794" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/806cb366cb892bd749bb1e697026060f9943b794";
+    sha256 = "0k470mdbdk4r7ryrm7b2m2mnmiwg9bqn6xrm9f426vj6409sh3bp";
+  };
+  "8083297580223f34923e3ed275ba2082cb6ff1b6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2639799-4ac82b5356a9467b8556f714f8dd9e00/8083297580223f34923e3ed275ba2082cb6ff1b6";
+    sha256 = "0rl4vw9nnarpbg9in4kj08yjran73yk821q03kggxjs9kd3m6p9a";
+  };
+  "80cd8c5c566432905a991761c25be7e43613ea68" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/80cd8c5c566432905a991761c25be7e43613ea68";
+    sha256 = "08d0cchndgs7z1m1iw78ri9b740z06daclbb1krnd9jbjbr72540";
+  };
+  "80cf2aada6b342c76be1c6617a893008f7a2e992" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/80cf2aada6b342c76be1c6617a893008f7a2e992";
+    sha256 = "1is1wl3m8l1gnfnhadnig3h4p3lg2dbrhx0j18zl01s5y5l5dz72";
+  };
+  "80fbbdd5d2b95966d99e270b260593880769871c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/80fbbdd5d2b95966d99e270b260593880769871c";
+    sha256 = "1dcag3ris9wpm0vfk296902arm6xph496gi13xr1lv2ic0ay4ajh";
+  };
+  "8113584b3d880586f19985a5103712b5251a347d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8113584b3d880586f19985a5103712b5251a347d";
+    sha256 = "0qgsp5kjlbzmp2v979wnc30isn10mv8w42riynpkia2waqq1yypf";
+  };
+  "81306b38538d7e69e278eb4d4a1acb25c2d44dfc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2505717-ca6614fe3fb64e47b28005ce3736302b/81306b38538d7e69e278eb4d4a1acb25c2d44dfc";
+    sha256 = "1b3hfip5h2ra2cj3c80v87fyn5g52kfl8hi7l9ynx6rbh45jd7cp";
+  };
+  "81594c92fcec0b95d7d0b47ad36aef8d2605c8b8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2466157-4ecb0085873048178dd6d2b8872eea79/81594c92fcec0b95d7d0b47ad36aef8d2605c8b8";
+    sha256 = "0cj2l82yi6yp8x2rsv5ga7cl5jrmnl7wv68608ymrdimnrg1l19j";
+  };
+  "815c7f4ed8653c23f02829438b553e4e310c1185" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/815c7f4ed8653c23f02829438b553e4e310c1185";
+    sha256 = "1bd8y1165dgw5naxwzh92plkx24v468fz8i0afaxk8cpqvjcn4b4";
+  };
+  "815ceaba7a67e678c4a7187990c7367805ed6d7c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2616691-982be94b99b442419e99de37630ca843/815ceaba7a67e678c4a7187990c7367805ed6d7c";
+    sha256 = "0zrlxcqp7arscfbjsffganmr8ykjy9kavkq6r0sjv33nf2wahcxw";
+  };
+  "81bce187e69fb02baaecaa20027bd477eb1f990b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/81bce187e69fb02baaecaa20027bd477eb1f990b";
+    sha256 = "1pmpm2dppzr71qvrfb8h5837mxgl654hiihymh2aw12bh1hl84dk";
+  };
+  "820a14581d58bc24e04e70e2d050e8568367b29f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/820a14581d58bc24e04e70e2d050e8568367b29f";
+    sha256 = "0h5kl259s20bv2y8k0pklvl5lpv4qc2y742nfyph04d8gh44i11r";
+  };
+  "823786b849304f4f046e804e4c7a9578b0e7dc4d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/823786b849304f4f046e804e4c7a9578b0e7dc4d";
+    sha256 = "1nxcnkv4p6m57rwr4wj4pz19z579sf9mqay6x64ddbnlc0d8ijfv";
+  };
+  "82752934d29486bef3008fe2e7e9953dacd3a238" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/82752934d29486bef3008fe2e7e9953dacd3a238";
+    sha256 = "0i7l4yw0qrp29ax36lp3sgyqbqshv5v0y2y4jp9g8b996rr42ypp";
+  };
+  "82896a288bed5637b5e537aff3c81d9a146cad8b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/82896a288bed5637b5e537aff3c81d9a146cad8b";
+    sha256 = "0g2nh96n0k2mv4fdaw6sqlav9diclhmljsixvfbp0550p44i3dhf";
+  };
+  "82921dd1135940696b085da4d09cdd25eb6b740d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/82921dd1135940696b085da4d09cdd25eb6b740d";
+    sha256 = "0i7yiz8d1qqiy7i6yy389b44v29i3zl479jarss0x77m7nzlpi7v";
+  };
+  "82b74cc467fe5e422dffc6ccdaa2746b68a52fde" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/82b74cc467fe5e422dffc6ccdaa2746b68a52fde";
+    sha256 = "057npy7g6dvcqkj4yw89cpci8cizg636gah9qq82h00684215jsj";
+  };
+  "82db6fcd53c153656a49118fc20771a50c406e2c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/82db6fcd53c153656a49118fc20771a50c406e2c";
+    sha256 = "0wmb1vn704srn9w5a61bs7mb3rp3azgv5bh6rl4hi7wa9wffwmbi";
+  };
+  "8305a66fae9404fe58331fbef287d0215d05f2b3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8305a66fae9404fe58331fbef287d0215d05f2b3";
+    sha256 = "196zwpsd8fz1s6gkd35psacb4v6bik4zjgbaqy6ff2118bg3l19y";
+  };
+  "83080f6144d571a9ef0996315476290d9c3fff68" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/83080f6144d571a9ef0996315476290d9c3fff68";
+    sha256 = "0rmk1xzs86dvr9k971mb3d5d9q0nbyxr6lh753pf5bqkjsrwirp8";
+  };
+  "83095c9481a4bebd25dad78e6ae747bd3674e086" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/83095c9481a4bebd25dad78e6ae747bd3674e086";
+    sha256 = "1r2p3xp0rv19i9dyrf0chc5n8f736d90w5paq90fdxvfzzzx562f";
+  };
+  "8309626bf9429a32adfd8e1526f7dcbfb250ca49" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2640065-e0e714c2e4584d65837eabf6f55a41ba/8309626bf9429a32adfd8e1526f7dcbfb250ca49";
+    sha256 = "02n8g65lp6zbqprxswz598076syxav2vy350yq2gvq6s2p1ad12y";
+  };
+  "831c19b0009bccd44d4c2837f3c8ba6e08753be0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2579917-73d6be760fd9486fbc9abe582732eb6e/831c19b0009bccd44d4c2837f3c8ba6e08753be0";
+    sha256 = "1b0gsmrzb0bh8mrjfmmxlp55867x5fhqm18wacqvzx2g62zmm0f3";
+  };
+  "8336cdf6f693aca7ab55371790ccf0bd5043c224" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/8336cdf6f693aca7ab55371790ccf0bd5043c224";
+    sha256 = "0bqsgbzhsd8dfjlfafs1yx833gwa8pm9jhgq72ymnk83kijhj01x";
+  };
+  "835db4359138adfe88490eae6e8d8c90b322dba7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/835db4359138adfe88490eae6e8d8c90b322dba7";
+    sha256 = "1wbs8pnhyyx84bb60ck5l18fljc37fma5131ijzmjqms84k34rqf";
+  };
+  "836ee88c57cc1b5617f36a2b9fb19db420285b69" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/836ee88c57cc1b5617f36a2b9fb19db420285b69";
+    sha256 = "1yiypr57ik8wpq2w7x5yqib411j2qphk6mnpgpraqydfc22qypca";
+  };
+  "83960dda908738b13095ce2b7d9b31fde2baf36a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/83960dda908738b13095ce2b7d9b31fde2baf36a";
+    sha256 = "0dld18rdn6yjmqzpy3fg36ih3dzr63jma237skjb2nz2d554nkvp";
+  };
+  "83b8a24a4c385e1b384d645d948485842fc3cc76" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2426077-b850b68463b841e5964d120c64b8bf13/83b8a24a4c385e1b384d645d948485842fc3cc76";
+    sha256 = "1z2a60b2h039a99ipx5gs299s5dbrmy23dgwpw4nrqksh0szzrhx";
+  };
+  "83c26e75614987b0816315db03de7aca670aae61" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/83c26e75614987b0816315db03de7aca670aae61";
+    sha256 = "0vsvf3yhc3gv4vcif0qlsakzmxdrziqjv575xpzbx421pk2sg809";
+  };
+  "83cf82ec1c25f57a747c78a0c0ee954463d3aaf8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/83cf82ec1c25f57a747c78a0c0ee954463d3aaf8";
+    sha256 = "180f440v26v4bmj6hbm162jj06vw9sd4kyvarnrazyiq4vmbx3wb";
+  };
+  "83d99abd11bcb8782d32661775471266e6254ae4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2638350-39632eb9e5f94ba4ab8e97fa2d5a3251/83d99abd11bcb8782d32661775471266e6254ae4";
+    sha256 = "0h49cfl1ybxvxgg9p5jq0nb93rqjlqbjabhsjkdzhb4pv9gm1fcf";
+  };
+  "83da0ef16746ffdc1151ecbda04a0b161e3f119e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/83da0ef16746ffdc1151ecbda04a0b161e3f119e";
+    sha256 = "0d4bximz6dkr5q5bbyzlnl2py330qij4i0w5pvgc76asyxl11s3n";
+  };
+  "83dc459b2d9c7905eb6f80c6ffd7c0c912a4b007" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/83dc459b2d9c7905eb6f80c6ffd7c0c912a4b007";
+    sha256 = "1xshwv0v6bzkn2px64jy5kzbwsh9mqmc9salvqdhw7c594gi1lki";
+  };
+  "83e36792413d3e3b767aae667cc67fd3b02ee133" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/83e36792413d3e3b767aae667cc67fd3b02ee133";
+    sha256 = "1vpvk4r3bxrb54ibpjffrj3wg37zp44xf8mz9fk3cn4gz8v18g1n";
+  };
+  "83eae7ee8ccb30a23878582ea6466cd8487f17f3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/83eae7ee8ccb30a23878582ea6466cd8487f17f3";
+    sha256 = "1s011h62ql0w95lkwwa0pwk2x4d086apijgw0zgmh7cmlzknppvk";
+  };
+  "83fd339d2e91415631d3bbe960361fef5a8a1d1b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738476-1eae05647f894f068d67ed64f86505f8/83fd339d2e91415631d3bbe960361fef5a8a1d1b";
+    sha256 = "06zcfs55vhpy9jh8330b1zrmsmf0j2f8w92kpxvgd8zi6xz5y9bs";
+  };
+  "841906d093cebbe152a1ae20fbab8decbd282e19" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/841906d093cebbe152a1ae20fbab8decbd282e19";
+    sha256 = "1zjl5jvq80cgr8lb03k687slrq9l336dryn2dwvwsrfc32rnpynl";
+  };
+  "841af4efd38ead50b821af773faa68345269e26f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/841af4efd38ead50b821af773faa68345269e26f";
+    sha256 = "0zrv8difxrfkkhhzni7qc91s1k30dwp6462c99iaxds8ly117p89";
+  };
+  "8460d3dfed9655b4e8ce53fc3cb879c8905b05f4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/8460d3dfed9655b4e8ce53fc3cb879c8905b05f4";
+    sha256 = "07cgvrc4yhakjs4p2sbkx5c3mch26krvvdx6ag0ijm85mx0gdl8l";
+  };
+  "8463cbaaa73774638635ddfac40864bed92f3c29" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/8463cbaaa73774638635ddfac40864bed92f3c29";
+    sha256 = "1si653ab54yh0fxfxh1wfwfzdq3v8wsxq2vzppl2l2wj96zc8cdr";
+  };
+  "848145830d667120c6b744edf11f9f6c7e2f8b7a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/848145830d667120c6b744edf11f9f6c7e2f8b7a";
+    sha256 = "0vvbpaksh7qdgiwcahdm9h9skp51qxiipzg3gdadam8v10a1g1xx";
+  };
+  "84a55e9bd6ceea8c4b1ef30457675290b8de8b27" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/84a55e9bd6ceea8c4b1ef30457675290b8de8b27";
+    sha256 = "16zjckcf8851kf9cnzij7mz6iwcvld7g7gxrs750gdp01i5wjpbn";
+  };
+  "84b6f854fbee939820a32e6dc3d2b219b84bd6a1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/84b6f854fbee939820a32e6dc3d2b219b84bd6a1";
+    sha256 = "1xd3hcs0nshn7c21kr1jhaskrslb6z91rp5rrlsq3pzclx740ssm";
+  };
+  "85317d647433d1e73e61ca6fe79b44f9b3abca42" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/85317d647433d1e73e61ca6fe79b44f9b3abca42";
+    sha256 = "0ix9vagi91lpqgn224qfxb4h1wvjc6jf3yz5zx4asv6c1bdx7x8l";
+  };
+  "85393f1f0730c3ae240238686b47d7643899d34d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/85393f1f0730c3ae240238686b47d7643899d34d";
+    sha256 = "0yy91726kxdpifa3pfhf987m1yya025q6ybh8c3650i0h9z2hzsw";
+  };
+  "853b10bea00eac17238cb14c6b39474e5d2d1518" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/853b10bea00eac17238cb14c6b39474e5d2d1518";
+    sha256 = "0lhld9bb134mphx4g83abrxf9syz5dx2hmjm701dnx7dsayfl5i9";
+  };
+  "858f8eae96cc6e3a7d1fc624e44ef972c47011b1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/858f8eae96cc6e3a7d1fc624e44ef972c47011b1";
+    sha256 = "0j9h3ysp390psxrc3g71029qsfy21j9jlyqqxgdsns465q0fb031";
+  };
+  "85b191ae1844ad6da93fa57876c8850de342b4ca" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/85b191ae1844ad6da93fa57876c8850de342b4ca";
+    sha256 = "0v5i8fznarbq8zdgi9kvg8hl8kb2293vfj6504a3km1my7frww96";
+  };
+  "85ba3d3276f5f01cc86df8c39d7cd730ed3b9a4d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/85ba3d3276f5f01cc86df8c39d7cd730ed3b9a4d";
+    sha256 = "1i53nv4v3wyy8vpgaglj865d8krmfd2yc8my9wq2yyyyiq9zvr3y";
+  };
+  "85ead6085f10e657e1a91326f3704d60b31164b3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/85ead6085f10e657e1a91326f3704d60b31164b3";
+    sha256 = "1xqzxrys82qxihz27s1p811gqhhswqjalzgdfafk490diah527ss";
+  };
+  "85f7ee1e6e05e198cbb99f56c5a3a9d81b41276c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605823-fed77bb1e455453286ca4bfc444c86ac/85f7ee1e6e05e198cbb99f56c5a3a9d81b41276c";
+    sha256 = "03qfjg299d6dx0xzgm822js1mwqs8n9v8hvw9mjc883y77piasgb";
+  };
+  "864bfa01d63681c131168385b66aa9d3e6b7e23b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/864bfa01d63681c131168385b66aa9d3e6b7e23b";
+    sha256 = "0lfc8a5f5skbdx263jh5m55fqnslva2pkx3yvifnzsgf396872bk";
+  };
+  "86a3ef300ab5182d7d6f3c7e1dec1ab017621176" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/86a3ef300ab5182d7d6f3c7e1dec1ab017621176";
+    sha256 = "1b8a7pm5bxf6gcrrx8d4ld19qgck19gd2nhp01dyjm7vqc8cl201";
+  };
+  "86ad290cb6e4e954f3e8ad5203151d7614279554" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2515854-a6b06d306d9743a78268eae33a3084ae/86ad290cb6e4e954f3e8ad5203151d7614279554";
+    sha256 = "1spwcj4yb5hc94m0f2hx13yfjrzsvkhcvgbmlj10ak9bvpkyx96m";
+  };
+  "86c299a2f4f573039b2558718ba45d95ff08ade1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/86c299a2f4f573039b2558718ba45d95ff08ade1";
+    sha256 = "18qmy1kl7x4jvyj0d9rsyiaq9gszjpx2v0983vbgdqszbgics4ax";
+  };
+  "86cf1c73f3f607e472fa7ae7be4709c191878044" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605596-b0ea63cedf984da9bdd8cabc290cfcc0/86cf1c73f3f607e472fa7ae7be4709c191878044";
+    sha256 = "0avis11c8p42c28k8pdvfns3m397mraj21kk2bnbaw9hmv5difzv";
+  };
+  "86fca9c30e8dbd28a791714c1385aea7dc583091" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/86fca9c30e8dbd28a791714c1385aea7dc583091";
+    sha256 = "1a91dlqcfrqck0q5285cljzdr9zi14g5dgbzy9772gabc49c01fq";
+  };
+  "8741e3f2519f1221c2f8bdb966cfa4504f3ba5a7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/8741e3f2519f1221c2f8bdb966cfa4504f3ba5a7";
+    sha256 = "028fhjrjcqnrjqx9i0v17mib24l20pd1bcpl8sc1bipa8yc0lk81";
+  };
+  "87758c549dbc2d3ff96e0ee0b82d6d99f20c0ab1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/87758c549dbc2d3ff96e0ee0b82d6d99f20c0ab1";
+    sha256 = "1jl52dabxi8rqhfadkwwrq68yiqxfvc2n82f9qvmc6viydjdrmpz";
+  };
+  "87925181e3a8b737757401a6114a8acf82625a49" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/87925181e3a8b737757401a6114a8acf82625a49";
+    sha256 = "1xkykqs3fzvkwf7hm0qxrbhjx1cibyns81cm4lcpad2b4f4a29nd";
+  };
+  "879da85ee7839263b362a6d69f41f3d4477d2263" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/879da85ee7839263b362a6d69f41f3d4477d2263";
+    sha256 = "1d89w13vkl8wjp0x22fsnz9yf7ln4jiadb3mfxfzykix884jr79w";
+  };
+  "8817e4ce5e9049b3ef1374d0f56fa509fa491f73" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/8817e4ce5e9049b3ef1374d0f56fa509fa491f73";
+    sha256 = "1ip08vk00921qgz5q70v60zsykyapjjxg7hghn2lbw54ylfy755r";
+  };
+  "88192934143593f3b9bdf82185f4ac7a7373da7b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/88192934143593f3b9bdf82185f4ac7a7373da7b";
+    sha256 = "0p4y1fi48k2jh288d2axriffynn4w824ngh0vfcd1wlrf988gcvp";
+  };
+  "883890e30ce2c617da8433831db3b480780ce910" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/883890e30ce2c617da8433831db3b480780ce910";
+    sha256 = "04knac1hybywc9rmd7cq11scg8hc3qn4yszf7hbak6z807j0abd0";
+  };
+  "885b477d70802077c49ab7c32a784bacd55ad24b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2467022-c410c14385ba462bb86b4995040cdcb9/885b477d70802077c49ab7c32a784bacd55ad24b";
+    sha256 = "0acf1z7q9wyvshacv9mfgc55kkl1fa4c7a3gv94jmk0jccmf6lkd";
+  };
+  "888feb5c0fbff7928f650be69fab3ac123ebaa26" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/888feb5c0fbff7928f650be69fab3ac123ebaa26";
+    sha256 = "1rj3434znf64z0cgi0dwx3pz5dhziqgm7gpcrx5ag2chkzixl7b0";
+  };
+  "88ea146643258d378d159b9f928c783774ea9c53" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/88ea146643258d378d159b9f928c783774ea9c53";
+    sha256 = "1wh8zfcswfp5ms94lgvl8yn0qjkbrznh95wln2hi9civ7594j3zs";
+  };
+  "88fb7a15bfd879a0c14ff7a16e321cc2b8896c38" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/88fb7a15bfd879a0c14ff7a16e321cc2b8896c38";
+    sha256 = "107xs4qhzjn2305hd84cbp2xnymba6sr8axd5snwwa9dzl39yaaz";
+  };
+  "8901801fb587b12a9aa6263540cdd95b46710f9c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/8901801fb587b12a9aa6263540cdd95b46710f9c";
+    sha256 = "1msg49v9hyvfy5ms00lyq9x322qwvw6akzpz1v6kylrakri8nwvr";
+  };
+  "8906ef4c42cb5d492b620e5d8dc2118dd976ea12" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/8906ef4c42cb5d492b620e5d8dc2118dd976ea12";
+    sha256 = "1xibvx905vvfvs0cdyjqbjy7wb3pvimzazd9ii5rwyvci6gj1vb8";
+  };
+  "89080b8cfede13b245eaadefec0b89e901ff8646" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/89080b8cfede13b245eaadefec0b89e901ff8646";
+    sha256 = "1103qvaxr40xq97p20x8zfv32hkz3nnv53lc8624qkjyhnqwni8c";
+  };
+  "890adf51623c1e158f5c9f34db7f7f686e7005b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/890adf51623c1e158f5c9f34db7f7f686e7005b7";
+    sha256 = "00cb7r13zpgiw9x0ahiimx915ynikicv4ixlxgxrfyfvqvkb2w7b";
+  };
+  "890f859d20731989f0ce0e2ccc89da28cf0f8dbe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/890f859d20731989f0ce0e2ccc89da28cf0f8dbe";
+    sha256 = "1sfsps751hwql9akgqvsxvbfp0hzzlgcxg4pf9wzv0fmsm5zk910";
+  };
+  "89550f66a2a48a9f1b9089703e9b33eb14a23ae5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/89550f66a2a48a9f1b9089703e9b33eb14a23ae5";
+    sha256 = "16bbs2r4i3bl6i0qp7snlifjh9s3gy33pdfjjpvnv0357wzama9g";
+  };
+  "89a680846da64558e5147c08cdce03270f11e7a4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/89a680846da64558e5147c08cdce03270f11e7a4";
+    sha256 = "119sjc3c9nqc1g8jij70kaa2rj2q4q6nd8dm4m4xmk32l9vf98rg";
+  };
+  "89be40342b7a93b0b11a6d495aa56ff3b8aebdbe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/89be40342b7a93b0b11a6d495aa56ff3b8aebdbe";
+    sha256 = "0lbq80772si922f6s3qahsx89hdyzvd8351j2pqr019pnasgpic6";
+  };
+  "89cf6e0f862a93ef9e543780d100517db3f3327b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605642-f320d1a5ef22435181fcba597b91c63e/89cf6e0f862a93ef9e543780d100517db3f3327b";
+    sha256 = "0b5p8gphgwx322ddyizq83mlwx318m8ndw8b6d10pvh6kfzf5ry8";
+  };
+  "89d28cf4154268be0856af7d9417e5f4018f65b9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/89d28cf4154268be0856af7d9417e5f4018f65b9";
+    sha256 = "1mksxkj5hx9wbnswb3dal0qqijlnrcrxprc7ashz0cgs8svhvkj2";
+  };
+  "89e79ac4565d509ccc57badb152f9d534469f4e6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/89e79ac4565d509ccc57badb152f9d534469f4e6";
+    sha256 = "1vinxn36cb93zpri4zk8jxhbjnb11drb13fw7dxvjbivqdzakahl";
+  };
+  "8a1ff4c3dc8b96b41c8fca1325ddf964f3768446" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8a1ff4c3dc8b96b41c8fca1325ddf964f3768446";
+    sha256 = "06gan1mbhj26z6flw0p1mw2qijv0nc8hpxl5q9dvwdmv5j1s937z";
+  };
+  "8a251169614945698a2c1990c0898641d380b289" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/8a251169614945698a2c1990c0898641d380b289";
+    sha256 = "1bd15y5ka1pzmj0y0i19w5r4pvgx36py84sfq097gvsbffx3ik56";
+  };
+  "8a7c6b0f9cc883870556fb456f20715ed40367c5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/8a7c6b0f9cc883870556fb456f20715ed40367c5";
+    sha256 = "1gd8mxmr9874577fzyhl5cl6rrx0sl4g8c7j8is3jp97zcng853g";
+  };
+  "8a933dd63dadc44c26fb7afa83573b5ab52aaf33" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/8a933dd63dadc44c26fb7afa83573b5ab52aaf33";
+    sha256 = "19fjz78gjlp50xq490wfvkjzpay9rrf78jnv0x0gs6kpnyd56x35";
+  };
+  "8abd833e1a283680a6e19d7896cda23b4f559012" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/8abd833e1a283680a6e19d7896cda23b4f559012";
+    sha256 = "0xq3c1hcmlki59g6y36zpfq6pm6cryg88sy364rayihlzgbc2dra";
+  };
+  "8ad5dea631af368fec9f5f42b6f235997a8131e9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/8ad5dea631af368fec9f5f42b6f235997a8131e9";
+    sha256 = "1hwnldwf0g7k34wg19yvzfz6939qc9kw9758fq7dsi0737cxykqc";
+  };
+  "8ad8c126595c03e31b971166788c82bdc9cf0544" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8ad8c126595c03e31b971166788c82bdc9cf0544";
+    sha256 = "17vvcdpba4mijzlpi97xx7d022knpdw918npwq40vcmswmn758vg";
+  };
+  "8ae41d0c7d8fe2a00251726554c48ce1dec9ca04" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8ae41d0c7d8fe2a00251726554c48ce1dec9ca04";
+    sha256 = "04dmv62qlczyj67rrfjnm790ksbpfwdgzl05zgqgi9lyrrsq3m8c";
+  };
+  "8af47f724bed2b5bd921d98f1d04d577d07ad781" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/8af47f724bed2b5bd921d98f1d04d577d07ad781";
+    sha256 = "0jy4dvz4fdf50283w6mcycq1hd7rvc3nawv9zylvb0pgxs6bvlnm";
+  };
+  "8b025a64e2081e1caa1c37427ec0e6194ec0275a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2517611-d0c4506b0eb74bb5b22fcaa18bed9682/8b025a64e2081e1caa1c37427ec0e6194ec0275a";
+    sha256 = "1pm6inqkiqwjf1yjc38ncky6ibm22ha1pj9r84mpwxc1c7f9js6x";
+  };
+  "8b0519b8991a39be23e66177b1f881b62f967cb0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/8b0519b8991a39be23e66177b1f881b62f967cb0";
+    sha256 = "1x5zmgn9h2hxnjsrip75mvj8qs5q5mws8zb72v6rlw8iy7hjf8vh";
+  };
+  "8b3162447aae7621530652ee14ce8da1c287d6b0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8b3162447aae7621530652ee14ce8da1c287d6b0";
+    sha256 = "0r2377k0a3jjn73x5fn1g4ppnjdywzkfxgdf801wk06zdkn41gpk";
+  };
+  "8b8340f444f8bcbe6806d7f4b2a6d3894354baf5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8b8340f444f8bcbe6806d7f4b2a6d3894354baf5";
+    sha256 = "0yqm3ib77952dsydjvw5dmw7fw94iny0zj1y4kkl8wpbcj414kk0";
+  };
+  "8bb26a65444fea08370321879198f39f86ba188c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/8bb26a65444fea08370321879198f39f86ba188c";
+    sha256 = "09912hlzrsgd7pickg9kgrc4rag393h1xkxybm5vnr3iyhd20wk7";
+  };
+  "8bcf71af2f119d1ff9d3b09fe4ddcb08fc1a7d95" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2700683-67efb93bd15f484599a98be1ae830afc/8bcf71af2f119d1ff9d3b09fe4ddcb08fc1a7d95";
+    sha256 = "1zs71smgc45hh3sr3f22l98ch9k5f1z6hppx0dbs2lgg2s8bgkfn";
+  };
+  "8bdaed33beb2fa505dd0ba8f7d9ca94208ec44a9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468936-39e1c39556f84e60be8d850c452aed67/8bdaed33beb2fa505dd0ba8f7d9ca94208ec44a9";
+    sha256 = "09x8k8apm7kly0kb04ladywwzyy90nzjvnd6hh476ir9mss1mjj0";
+  };
+  "8c062ee2e53c0fdeef88071aad2ed5ca1787cc1e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/8c062ee2e53c0fdeef88071aad2ed5ca1787cc1e";
+    sha256 = "1ymf1zl36xfsc0wmipsps3l90jx04qgz8ri7hmwpy4831hc7r594";
+  };
+  "8c220042a37dc4cc1b8b05afb13afadab972b12d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/8c220042a37dc4cc1b8b05afb13afadab972b12d";
+    sha256 = "1hjg7wwfb217dansimncjya4ll7lsxshi0yvnyi2f2f9bm7jijd9";
+  };
+  "8c9f2e92d67f683596da321c8af36ece1d8ac774" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8c9f2e92d67f683596da321c8af36ece1d8ac774";
+    sha256 = "0hiq4c2w47msrn5fiqggb7gf6fn59rk708xxl92jid8wa4h6xipa";
+  };
+  "8ca8fc4f81c127e4c748fcb899af430506bd0b01" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/8ca8fc4f81c127e4c748fcb899af430506bd0b01";
+    sha256 = "0y551cnm9r4jm05iqiwi8ysglkny6c78mwxrmxssabknlh0v15vv";
+  };
+  "8cd8b767b771e6d10c8f1f0b54ab812881f22fcd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604000-fac6782aa4fd45888363b062a8353761/8cd8b767b771e6d10c8f1f0b54ab812881f22fcd";
+    sha256 = "1wp04cwi17h2y01is0wvv02nhcn8nyb1f8c28hcm7dqswyw738j5";
+  };
+  "8d5fa95a3df6eb36318fcf2a135f464a76257cc5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/8d5fa95a3df6eb36318fcf2a135f464a76257cc5";
+    sha256 = "0axx62bip7rfrm0gbvdszdx1ik4mhxqxvi4ybmlbfhf2c1b26grg";
+  };
+  "8d8a695159bf666e16ab7b3558bb1d5e4e3b4698" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/8d8a695159bf666e16ab7b3558bb1d5e4e3b4698";
+    sha256 = "07c4p0dsl575zxamvvwh12hin7qnhk9lcd4aivnbbmrlhlrb23cf";
+  };
+  "8da60707e5826860752528702f9a7256a5d2ef81" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8da60707e5826860752528702f9a7256a5d2ef81";
+    sha256 = "1701n4r1713crfxkaa0n2id346j1mf5nfg93givnr3c2qqlqz5yq";
+  };
+  "8db9bb91759363ec605c3d44273194136ce7dc1f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/8db9bb91759363ec605c3d44273194136ce7dc1f";
+    sha256 = "06xajy55psab26x65cvxyji5bm4cxyh4qb1kcg9a9qpfjip7wfjg";
+  };
+  "8dbbbdecc05ee43425e31b4f4eafb33b90db30ac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/8dbbbdecc05ee43425e31b4f4eafb33b90db30ac";
+    sha256 = "1zch7l01gxhwwkm4i9a9dwa577rrp37vr6nkn1mkhakrjfirfams";
+  };
+  "8dd3bfc182e5277d4408943dba3520659e2928f4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/8dd3bfc182e5277d4408943dba3520659e2928f4";
+    sha256 = "02f3h1lsn8vkrixyb1lx1cbwffvby3i74ym71a05higvhw61mxaj";
+  };
+  "8ddadc13864ca20375d4b0f4ea443c123c3df3b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/8ddadc13864ca20375d4b0f4ea443c123c3df3b7";
+    sha256 = "10vbj0h5k6s3ka3dqzfwz796cpx1ic5dxbaipcwyc45k2vj6ni4x";
+  };
+  "8e039420fc01a77f694997d93310f9ae83f1b6cb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/8e039420fc01a77f694997d93310f9ae83f1b6cb";
+    sha256 = "0jpxci1p47inn5qyp0jjh69ja0s7m5k07jhqvkpyvhy7pgdk0m56";
+  };
+  "8ec6e7ee9b649b9774e5429add4c5058fe492fd1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2791326-4a233957ffc54c94b38c9ceaf84d58de/8ec6e7ee9b649b9774e5429add4c5058fe492fd1";
+    sha256 = "1b29i8b6fh4siq5h8s48d97s0az2761l77z8vzykb4h0psxpzmy1";
+  };
+  "8f4c0d2091f953f5c7ea8154eaa6e6d04add923a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/8f4c0d2091f953f5c7ea8154eaa6e6d04add923a";
+    sha256 = "0sc09156h0vjc6jc67q1sp0khpzzkkvy9c8bh62rg7rbzlldlgiv";
+  };
+  "8f92c27e6fe54071ccf92649c25ae44991ea42c8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/8f92c27e6fe54071ccf92649c25ae44991ea42c8";
+    sha256 = "1ndfkv2zcamf377pbg67f257c4rqxh7ri06r4x2xqc4a5q0s60zl";
+  };
+  "8fb54a6908a0bea0b6a901eb32dd120dd2360fe2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2611810-c0cf8ef9a734410da79e56e1df15e175/8fb54a6908a0bea0b6a901eb32dd120dd2360fe2";
+    sha256 = "07dgqsshhamlgi79884dllr4253yr29ni84dhnrcfn540vpxbs5k";
+  };
+  "8fbbdcccea26e1c7cbd56a84637ec3564aec691b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/8fbbdcccea26e1c7cbd56a84637ec3564aec691b";
+    sha256 = "1vnpb1d239wp1nyrvwiv57rr7qwr2rplws6zcxfnl3rxmmfhkman";
+  };
+  "8fc77c86e05ff31bec85d8974938b0b5aa12fd1a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/8fc77c86e05ff31bec85d8974938b0b5aa12fd1a";
+    sha256 = "1v92ggrafax000jrdc6yhysyr8mridvdcss8zjc8ib5bwism9sdm";
+  };
+  "8ff23362f6d2fe2b1e7f422a3f52c13797ef128e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/8ff23362f6d2fe2b1e7f422a3f52c13797ef128e";
+    sha256 = "0faigq1s7yjji1khqm2g5bi6fm6217lm7lk5gy61ddwxqz1jkf6k";
+  };
+  "901760156bc3f4720396fcb487ad396709e18d9b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/901760156bc3f4720396fcb487ad396709e18d9b";
+    sha256 = "0sgp780bfy2gri238s8fsnbh7vbdrg5mdxla39j15nllfr1ybxfj";
+  };
+  "904a3b18b20eee856202f89aa46a20df12388dc1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/904a3b18b20eee856202f89aa46a20df12388dc1";
+    sha256 = "0ncm73g11s6x5lp5pz5b4xm2kfn7254hp4nzdfxwd841l96b4b7s";
+  };
+  "90874ee4cf89c6b1658479cf16716dd6d9f3391f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/90874ee4cf89c6b1658479cf16716dd6d9f3391f";
+    sha256 = "0hjrsp0jq1qgm9v31kdh7l67z9w54415a9f73lznsb1zmw1phz22";
+  };
+  "90d2bac8a115eb18639fab5f7840138c63cf9b8d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/90d2bac8a115eb18639fab5f7840138c63cf9b8d";
+    sha256 = "0ifayjg539ki273zzxx7b5jpjzdy50pyvb8d2a3r84216anww3qn";
+  };
+  "91475080ede727f0185da20abde65457b43d5476" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/91475080ede727f0185da20abde65457b43d5476";
+    sha256 = "0z6ql3zfvpiay87g3h14pfv5dyjx6d4r7n7ks0pvx829yb2h0n4c";
+  };
+  "9148d7be7b0930b397ef995a2e8cfdc6c7e2617f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/9148d7be7b0930b397ef995a2e8cfdc6c7e2617f";
+    sha256 = "13cw8rzvf6rm9dvj1d7q86l5r3bs4q23z588yd6imlvpf2pp7f5m";
+  };
+  "914d43c1dd28877dfe0d8b3b2fe4dca1ea17a575" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/914d43c1dd28877dfe0d8b3b2fe4dca1ea17a575";
+    sha256 = "1m7y3m9b1vvvvdw05g6hcs2hv9jh0947l9gjhr5zdj9adqf3aa72";
+  };
+  "9157e95d94d3ff3b40e3e507ef12528e8574f8d7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9157e95d94d3ff3b40e3e507ef12528e8574f8d7";
+    sha256 = "0n825h58ygdqv93naavg0xm7p3ncxlyzp2c89dlfzzq4cs7mnvaz";
+  };
+  "91639ede60c084c481daea6546adf05ba88aeb17" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2618867-a941974a307a4d11a35487de88a65fbe/91639ede60c084c481daea6546adf05ba88aeb17";
+    sha256 = "0r2s4k616aj3y5q4cc6wmg1im4sd9qbi477kk4av2yxf1db078vg";
+  };
+  "919773af16fc549ebf79e9b9629c8d0c79d37927" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/919773af16fc549ebf79e9b9629c8d0c79d37927";
+    sha256 = "01xmmimdnzywvlnp3j9417iszkqmprjsb07gkh2rb6pqbabbjh3g";
+  };
+  "919cacfafb5826d92667b345276a3637499d8eac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/919cacfafb5826d92667b345276a3637499d8eac";
+    sha256 = "00yyly9c0ggpl793mkzsa8dlbsh4drdagdhhv8vwdkldq666jizy";
+  };
+  "91eb46476dcb659fc2275fc18c2061796b561bed" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/91eb46476dcb659fc2275fc18c2061796b561bed";
+    sha256 = "020wajrnlvqk2c4pjpxf7562acryacxk1535fib0f6250wjhmh8r";
+  };
+  "91f1332208a164cfc7739215d515dc4574548eb4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/91f1332208a164cfc7739215d515dc4574548eb4";
+    sha256 = "1mxhnjf7vda1cxny35rw3ib4kp9i3h09a5lv0r70pazqj1ir23zi";
+  };
+  "91f5cdeaacc7b2be3fe926cfc1b9d3a054e143f2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/91f5cdeaacc7b2be3fe926cfc1b9d3a054e143f2";
+    sha256 = "0cvqrr7wvlgyvhh5bz61laigv9dy7ra65hdszi3sg467zy35b1dy";
+  };
+  "920bbd06b0082189854b0b43390a039f451bf843" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604998-3c15fbba3f5f4174942b1436c2db55e8/920bbd06b0082189854b0b43390a039f451bf843";
+    sha256 = "0r4wh2iswm4w1zgnjbmw8x4jpgd9zr2c1azy2nvgwg2rcja73adw";
+  };
+  "922b2bdba29589b9fa7f0b9dd3668e5703e9c88c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/922b2bdba29589b9fa7f0b9dd3668e5703e9c88c";
+    sha256 = "1af3n4b4h1yd92y4w660kslpz0nkvpsvinfs3p9l5yv1jfrz2lxi";
+  };
+  "9230b9bb873b7a7cfc1fd2410d1749427c7c3499" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/9230b9bb873b7a7cfc1fd2410d1749427c7c3499";
+    sha256 = "0c6c6rahp2x4n5vahs2csgx8gyzgqzajvzwx0dii1p44crb4cc2h";
+  };
+  "9241f4cc15ce04da3b203bb3ef60aa2a71cb19c4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/9241f4cc15ce04da3b203bb3ef60aa2a71cb19c4";
+    sha256 = "0v7xa1wzsd2rif4dikbm7dzzzw2k7c70vr6rp7l0wv3d978p9fr1";
+  };
+  "925f53a8ddf5e922520fc19cf6a17b00419817e7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/925f53a8ddf5e922520fc19cf6a17b00419817e7";
+    sha256 = "0p4l1r57w29bkir2k9y3pl50ycr5q3436ldrrm0dzzqb8ag5bkfd";
+  };
+  "926540c5a0b84439444ce2305aa3737763bb95a3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/926540c5a0b84439444ce2305aa3737763bb95a3";
+    sha256 = "1m1bsgri6xi5ijpyhpybrir760qrqy2hmwrsbifw0j5yxwxlvyrz";
+  };
+  "9285328e0b04faaf9fdc22bd27b76ef259020492" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9285328e0b04faaf9fdc22bd27b76ef259020492";
+    sha256 = "0c2jz4pjf5f62ga9nlac4m3q92n9wgccjcwbyvr2scangawjh7sq";
+  };
+  "92abcde8582abb2913e4531cf3ea720b0e8c7d33" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/92abcde8582abb2913e4531cf3ea720b0e8c7d33";
+    sha256 = "1h66p5sp1j2l1jm4d6pjg34ng9k0d1796mns38gkcily554v4v6n";
+  };
+  "93423a9a78f3eaad42d062f8d2ff25e901ff455d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/93423a9a78f3eaad42d062f8d2ff25e901ff455d";
+    sha256 = "1hc5hwd0pazkcscicn8dpyyy9dc0aysbz9z95fwjfqsz1l7hg9k2";
+  };
+  "935837a33fa46d5ef7713fd4a123c61845ce49e5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/935837a33fa46d5ef7713fd4a123c61845ce49e5";
+    sha256 = "01dchcyd4z8a6vhk2j071a5rw3hv529cz5fhjkasplfqvl1dri7y";
+  };
+  "937a8d559bb1eaa790bd343ce8439885289660ad" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/937a8d559bb1eaa790bd343ce8439885289660ad";
+    sha256 = "17050dmx7pmsvxv4agmphln7xcy5bq058pmi47pqwlsf2njqskgm";
+  };
+  "93992b5277a20ed987f224c8f23f713677e0e25a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2546088-6cf476c573f0461594db3f64f59ec9cc/93992b5277a20ed987f224c8f23f713677e0e25a";
+    sha256 = "0v60rm9bh086p2agj0hl924lhmzsdbk6akycra97vvjf8riaznmd";
+  };
+  "93d5d44b151da63343cd4f052e5efab5039f13f8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/93d5d44b151da63343cd4f052e5efab5039f13f8";
+    sha256 = "0zq57rg4pw8ly7vr8wjshq5zjp93n4zgzzjqkwgh1lz542w8jrli";
+  };
+  "9402187f503c2f391c471ecb84988e49b0cac918" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2603097-3140b87e2cb94286beb08198353da9a9/9402187f503c2f391c471ecb84988e49b0cac918";
+    sha256 = "0qvxgvjr3fk8v4i5fcsz8vlxzw07hdyy0q94psngzjpvp0f9943d";
+  };
+  "941fcfee8a4d9b5b95af5e64593a01405ed864b8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605823-fed77bb1e455453286ca4bfc444c86ac/941fcfee8a4d9b5b95af5e64593a01405ed864b8";
+    sha256 = "0ipyq7ycmysav0p4n285w49394nxrq4nqqpdmlmd6gcjppv2hsd2";
+  };
+  "9480aeff10931a3129abfc074e9d75dc46fb60b1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/9480aeff10931a3129abfc074e9d75dc46fb60b1";
+    sha256 = "1mjpiaf4jh4fh8bld18gh97bnwhflyqyqb8zmawngbd0f686jhr6";
+  };
+  "948831f2786e73219fac5ebfe8a92939c3ea637f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/948831f2786e73219fac5ebfe8a92939c3ea637f";
+    sha256 = "0z6gh9j67d0as8x8v62n07w5xj2gj6x6k2pgynx01jp6z6k9x4dz";
+  };
+  "94ab4be561c4e5ce07253ce94aa3794090a44428" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/94ab4be561c4e5ce07253ce94aa3794090a44428";
+    sha256 = "0j0nwdwk46yskmmgx3y84wcr50ak801zdfj4mxwlai3bvb04f38n";
+  };
+  "94b9d86dc4aef7c178c2f9b2cd5360412b13b2df" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/94b9d86dc4aef7c178c2f9b2cd5360412b13b2df";
+    sha256 = "0fmkvvqy0v4wsd58hqlgrcpvm4a4qsrasfy5fy5h5b7j8z5q3vcl";
+  };
+  "94cfed4a88c4801ef537b65413db4cc3326b0a89" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/94cfed4a88c4801ef537b65413db4cc3326b0a89";
+    sha256 = "0smaxw3d54i6yymcil00mkdc5mp5yw95p18gc65sx0ir0yycviyc";
+  };
+  "954237c72446f3cdf8886043123658ca943e6a89" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/954237c72446f3cdf8886043123658ca943e6a89";
+    sha256 = "11rrbx70dmjyd97sk964lzjbpcyjg07zjfjnvn25z6v9bv3a49xb";
+  };
+  "957337ec86f032a91c82dfc2f859843e3a1c1e88" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/957337ec86f032a91c82dfc2f859843e3a1c1e88";
+    sha256 = "0gz05g4nh8645h4zdvrhmkpw9m3jlddk8ggd2h203h4zx51l3aav";
+  };
+  "95b668ea9989cc5ca54f2f7db9aafc7ae8277fb8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/95b668ea9989cc5ca54f2f7db9aafc7ae8277fb8";
+    sha256 = "1rprhq2rjgd5s4r8jn5f5nz6w20yckr79sh9mwmsfkx7zxkwda1b";
+  };
+  "95e4d7dc9cb01e3491442f9370e98e0d6361f556" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/95e4d7dc9cb01e3491442f9370e98e0d6361f556";
+    sha256 = "0w86a2dcdm4r0yqdy1ibdrmgmnb122znhacx9cz7jm2bsjb81nh6";
+  };
+  "95f7b61131b0b7361bd6b788845382016a65618d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/95f7b61131b0b7361bd6b788845382016a65618d";
+    sha256 = "1li07rkzvnasm9qc4qza2y6vyw7xhx33wmjzqbc2gwmawxjpl6an";
+  };
+  "960e4509e3bf35c6ecf5e52ebd53c18379354b18" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2634249-f2b4469cf0774eac818e7cb4565f1224/960e4509e3bf35c6ecf5e52ebd53c18379354b18";
+    sha256 = "16y0ffz0kn1k723xmr4vmna8giqsl6pqgp83a7w1hp8slmg1z1xs";
+  };
+  "960f838a00eaece74604333768e1901f77dc91e7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2597177-394deee1ae174b2db1462326aa83252a/960f838a00eaece74604333768e1901f77dc91e7";
+    sha256 = "08v86w4b8jx5af5agv2cyhxwc3a3w9xzr69lfvdljms51991qmkv";
+  };
+  "963f0fd12da9d6cf7d35a71dce090f7d5271d802" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/963f0fd12da9d6cf7d35a71dce090f7d5271d802";
+    sha256 = "133mrcxjpqhrffjbhiviwn91h3x5csqpk1fhhzlmc0spyf9bnswa";
+  };
+  "96421d48a3164d2d4259c4c9500dfbf44d9b90fb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2483157-ef88c8fb9abd408b8fe496d060749077/96421d48a3164d2d4259c4c9500dfbf44d9b90fb";
+    sha256 = "0kvplc4pwnjv7j240d2bcggwibrws3afamx6wh32lap5pps67d81";
+  };
+  "9653a9d2aef2e0fff14e4e16ca9058b38f172dd0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/9653a9d2aef2e0fff14e4e16ca9058b38f172dd0";
+    sha256 = "0d2z11fpnvx15yncyf840n7ww4vaaypyn4r7cg2ddscg8llp7056";
+  };
+  "9690133f46e7a766b46b38365897102baf062020" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/9690133f46e7a766b46b38365897102baf062020";
+    sha256 = "1jim7i5ih76c4wjm06y75iqw9ldcmc5wr0gs5vichdhgdj1y0ay6";
+  };
+  "96a0e755dc47a57b85791e7d748fe25e7258173e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/96a0e755dc47a57b85791e7d748fe25e7258173e";
+    sha256 = "1ibam8hh271ci3fp18baiw3jsll89i1w1q8z87gmi7y5qdasar02";
+  };
+  "96e618ee3726b5d13ee509923aeff0bb6272498c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/96e618ee3726b5d13ee509923aeff0bb6272498c";
+    sha256 = "13xa397xfya40cypwl20j332bp0rcljyj66z8vwdc10vxwwrdqv1";
+  };
+  "96ec8bc282d262d4764767c1478400c10994bf5e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/96ec8bc282d262d4764767c1478400c10994bf5e";
+    sha256 = "00x67b5sd3230k6q08z8n0ad95ia3fxzk0mssz6lmbi0zqqsvvbl";
+  };
+  "973fb0c29b2e3a44d2d370a545ef1a38a81ed07f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/973fb0c29b2e3a44d2d370a545ef1a38a81ed07f";
+    sha256 = "1n7kvxc135za5a2lzmrp18kpyka2gc2dynr30fpn1m1lfa09985b";
+  };
+  "97772a52cd613920ec0a84f0c8b57d0c8e88b1b6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/97772a52cd613920ec0a84f0c8b57d0c8e88b1b6";
+    sha256 = "1l262n4qq78fbvgrd6qilmp70rx4x5ciw444nw6qdjvbxag2va6g";
+  };
+  "9788909a70709303adf419bf0340b73ab037600b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9788909a70709303adf419bf0340b73ab037600b";
+    sha256 = "1vw1a4nlwq6arcddbfiid9lmkfv8ylaakpggzb706hgr9jj1qi7h";
+  };
+  "980f3e90adc8557d71bfbef57bc146374612493f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/980f3e90adc8557d71bfbef57bc146374612493f";
+    sha256 = "1xvybmljiw3p3rwy91fi1dk7fmcpdys8b1c13yw4sij7ym0dqjkf";
+  };
+  "9851cf052473a71589aa7577f62e6b82f0298832" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/9851cf052473a71589aa7577f62e6b82f0298832";
+    sha256 = "0kd2bcr3n9l3qjxjij06gm0rgv5dhvrq3mdv6sqwmv3f28q1r8bq";
+  };
+  "985271d1e9b876cc6b98ce871d8efed7b2b3cbeb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/985271d1e9b876cc6b98ce871d8efed7b2b3cbeb";
+    sha256 = "1mh8jr05wk2wg1830bv1yq30ifxngjrb8nnilw2hwl1g6dmss3g9";
+  };
+  "985fcff275609870f5fa9ace4a4e31fcdef7eb1f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/985fcff275609870f5fa9ace4a4e31fcdef7eb1f";
+    sha256 = "03jw2kr34vxh4rpjq58rq00h0vv7mlbi3pc63aq6914yqwzvv36v";
+  };
+  "986472c357451eab93419161f5ccadfefcbdb41e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/986472c357451eab93419161f5ccadfefcbdb41e";
+    sha256 = "05arp7raj4ins0azci930klihg54zmj2b0ykhmnp91z6mdqw3nx0";
+  };
+  "98bce6b328014cb7a038cf71a5c84a03c88f3b63" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605596-b0ea63cedf984da9bdd8cabc290cfcc0/98bce6b328014cb7a038cf71a5c84a03c88f3b63";
+    sha256 = "1b50jfk9cz2x13378pbyd8lcg0m9jahhjwc1a9zfg68y6pf08rbm";
+  };
+  "98d4e369b78b0733da5369ef5d9a3d0821224bd8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/98d4e369b78b0733da5369ef5d9a3d0821224bd8";
+    sha256 = "1mdsmf24lwsbybjy687lsqhifg0d1za7vc6vaggba2x4gbb2rh2s";
+  };
+  "98dd7a062fbe1436797395825aec70ab45a9e01f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/98dd7a062fbe1436797395825aec70ab45a9e01f";
+    sha256 = "05xrlniqxkkw7c08r8m5ph88pmwsz1jbp0y437nrh4lz7z8xk6i8";
+  };
+  "98eaec4f30d9a8b65a6d9865fe0b1e5b7df1e740" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/98eaec4f30d9a8b65a6d9865fe0b1e5b7df1e740";
+    sha256 = "0kkzj77y0n39diqyfzx29rdi47ayg0f5cr6yi2syyimbq9i8vmb2";
+  };
+  "98f6aead047382d81ea82cfcf7d678c3d279b6ad" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/98f6aead047382d81ea82cfcf7d678c3d279b6ad";
+    sha256 = "0n6v34qn2v5cvqgzv1agp68hllcm9qjdl6928llln8mx56byr1y4";
+  };
+  "9905967a7ecb273ea4c135e170605bb12051e395" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/9905967a7ecb273ea4c135e170605bb12051e395";
+    sha256 = "1yn3gqiqdbbmxn1yn36d0cyf7cb8c74r0kq586fa9kyfq1kp6hcj";
+  };
+  "99408ec397e6f41cef3cc1118a42007c42240b73" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2483157-ef88c8fb9abd408b8fe496d060749077/99408ec397e6f41cef3cc1118a42007c42240b73";
+    sha256 = "07cx908z756kf2b7cbihipabh21zln8d58jaj0vh11fi7znwln7q";
+  };
+  "9960c14a54da2eea43d72be9aefeeb85b8cd4e7c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/9960c14a54da2eea43d72be9aefeeb85b8cd4e7c";
+    sha256 = "1wslww24dria8ka5d6a6by0ix81yg74783b2l8k59afjry3d4gn7";
+  };
+  "9974452a9032d4ef1911e1347776b088bf0f03df" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2579446-f2ba68e6c4fe40608f55a21e4d359a29/9974452a9032d4ef1911e1347776b088bf0f03df";
+    sha256 = "1kvgca25l2bbp416cqqw7ghrjq9mmwgy33qhbmkd665kyi3xcx02";
+  };
+  "998f25b9ce65d4cd484598d5f49cfdb023205ace" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/998f25b9ce65d4cd484598d5f49cfdb023205ace";
+    sha256 = "11m90pb307bpkd1cplzjavhbz76j8ywfwc1lrdp4zl5yb42avj7p";
+  };
+  "99985696491968b007dbff31cfeb9439637ad92d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/99985696491968b007dbff31cfeb9439637ad92d";
+    sha256 = "1n1rgz44hairjjvjc3937pin9rhxxa44sssi87z82965kbhqwmq3";
+  };
+  "9a10248ffa6ef2de0ff39750b0126e7d0b1557b6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9a10248ffa6ef2de0ff39750b0126e7d0b1557b6";
+    sha256 = "1j4m3dg8l69iyxhy9gz915rinaas4a5mflj9a70lwciq01py9fad";
+  };
+  "9a27b682ddf08347ffdd2673c005febde327223b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/9a27b682ddf08347ffdd2673c005febde327223b";
+    sha256 = "050ywwrsm40br2mnqckg3jrgc2q31j8xf4h0za2l5ih2h3vq2ymn";
+  };
+  "9a6f36fd2204a5938bfaa23310ac94f3eac70d91" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/9a6f36fd2204a5938bfaa23310ac94f3eac70d91";
+    sha256 = "0ybib9bi9lfdxfb9ql3jip9fbfglzczyp8r9fsycfbwin33nqn6s";
+  };
+  "9a709e39d73f4dd05adc8a171c9e771ca1facd83" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9a709e39d73f4dd05adc8a171c9e771ca1facd83";
+    sha256 = "1qrv0r9srbrqqwzw96ndirkn54my1ypyinsd1vdfvrwd19amwdpa";
+  };
+  "9abf05827a71d1c0a15a65473fe44db0a9c8676b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/9abf05827a71d1c0a15a65473fe44db0a9c8676b";
+    sha256 = "0x3kjyy72v9hx55bfj5yy5bhzip3i7fkpd0q6kgqi408wvz8345j";
+  };
+  "9ace33ad3d9ba29d499d254c077206230291f79a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/9ace33ad3d9ba29d499d254c077206230291f79a";
+    sha256 = "0jw0d0ck3p5h727apyp7190dm21q2mvf4kcipbaaa0rwdkynq70b";
+  };
+  "9ad3062b35efb39cfe52f02269e5e28c03df86f5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/9ad3062b35efb39cfe52f02269e5e28c03df86f5";
+    sha256 = "16lg92frzz8jqnvdw2r9w6a3fjlgvmndr7m1jlhq66k034d7jwia";
+  };
+  "9aec8735040beb57da24cffa27ef5d254408275f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/9aec8735040beb57da24cffa27ef5d254408275f";
+    sha256 = "1qgbkjhvhrsy7iy0r0gvs41m88har7i8m3ys03y5lrbmdazgb3q9";
+  };
+  "9b2025a39ed5dc7d0f745fd5f484fa5bd2f9b319" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2514423-e0ca01e1f08b4e2480fb868bca2e338b/9b2025a39ed5dc7d0f745fd5f484fa5bd2f9b319";
+    sha256 = "1jnlw9ifq8iyfvz8yn2jigfdq5qmhviy48vh461kfpx3isl1wvq3";
+  };
+  "9b367562030fc7238553c6aebec57181c96d88fa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/9b367562030fc7238553c6aebec57181c96d88fa";
+    sha256 = "1jdr332ks1d1gqi9ygxdmjyr3lingzzb1pdgrnxkg7jbl9i7y4l7";
+  };
+  "9b622139c6c9738ed9a9c4bca74a20d18bea5a75" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2700727-ab54589e54a547ecb0e365d946b4351f/9b622139c6c9738ed9a9c4bca74a20d18bea5a75";
+    sha256 = "11i6g22ncsjn50yq3fmhv2mm6inxw6zhi0zznv0y7gwdyjrisasy";
+  };
+  "9b6f3a80dd242ad667ee7c33f54385d4fa791086" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/9b6f3a80dd242ad667ee7c33f54385d4fa791086";
+    sha256 = "0lb42d3a79q1k35jfa3b1c1z8n774nxkcr918cp9bay4saifvfzw";
+  };
+  "9b85c2fa156837a820c7e7ae27d2ade465850441" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/9b85c2fa156837a820c7e7ae27d2ade465850441";
+    sha256 = "1klwhr444j1pqn44fnjyq2nvlaiaib04n0dwykx181bz2nkjqdqv";
+  };
+  "9b8fbaeb9433a52f4f65397b66bc6da378e067b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9b8fbaeb9433a52f4f65397b66bc6da378e067b7";
+    sha256 = "1l4x5r8ghf70ddfyz1q6wpqlhrc10l41h33gmfhkjwm45fkvkxdh";
+  };
+  "9b97586a3c9bf005cab1870015b75587e39f94da" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/9b97586a3c9bf005cab1870015b75587e39f94da";
+    sha256 = "0a2nw9ibdv51n2b7a9x0jnx8cqxilknm79x210pr3h8p3fjdzlb7";
+  };
+  "9bb171f0382c86c213e8f4d3ffafe1e676490b21" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2718426-3062c3938efa4be7b8cd7493e66818c4/9bb171f0382c86c213e8f4d3ffafe1e676490b21";
+    sha256 = "1hgfyfwn19k47y6garrdfy4jlhis0mi1h7zfnab8x43w7pqjgjpv";
+  };
+  "9bb63a05f1dd1d7171eeb8018c29c90d81773605" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/9bb63a05f1dd1d7171eeb8018c29c90d81773605";
+    sha256 = "18cfpjnyamzwnrmz4i06iwir58dx6657gy4i8jgk8ga736j31vxr";
+  };
+  "9bdd5448dfc6229ba9d0261514a078236c882986" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/9bdd5448dfc6229ba9d0261514a078236c882986";
+    sha256 = "129pclb41yip44m87pr8l1rhdajhgnzcarh84j5w2kgqqmma9h8r";
+  };
+  "9be02ac4f895d7559b0cba2d4b65f8ffb5626236" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/9be02ac4f895d7559b0cba2d4b65f8ffb5626236";
+    sha256 = "0dh8vcf5dm36j4pjyc7m0i9f4947mk3r91ldbj6mhxfi90c6sn0j";
+  };
+  "9bfa76eaf50a585e99981b54ef5628fd89b397e7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2499980-1bec026979484bddb8aa39afef8358b9/9bfa76eaf50a585e99981b54ef5628fd89b397e7";
+    sha256 = "0rmv4ibakmvpllmq5cs1ihfkpvy1brkn8l42kmls66zlz478115l";
+  };
+  "9c2836065510901f9ba07928e4c7e319dd33b670" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/9c2836065510901f9ba07928e4c7e319dd33b670";
+    sha256 = "1b6igbp0mn78hvjgg33xyi6v7gd7nqvl3f4hgq5wfr8dzghx5gky";
+  };
+  "9c2b99ebfed2e931067e8842161b2811d04206eb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9c2b99ebfed2e931067e8842161b2811d04206eb";
+    sha256 = "0j0p40hjbc1v0ld3halwhic0573n1z58sgpy112rqb1m667q87q6";
+  };
+  "9c45f6155855d24fbb8f12e7a40895df1e55b205" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/9c45f6155855d24fbb8f12e7a40895df1e55b205";
+    sha256 = "08rpzwbnxwpk5gvybxv7q0s9k25gn8vcm77k7s69r5wva0p8hl9r";
+  };
+  "9c46b9b756ef22a0a9aad7d5efcf7e670cf46b3c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/9c46b9b756ef22a0a9aad7d5efcf7e670cf46b3c";
+    sha256 = "17jc44fj6vs0kqxk568vn6vjapyc1r7k9b88pc5l96m53bdkn7cm";
+  };
+  "9c8dc173e3087266551343fc43db0a118e573cd5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/9c8dc173e3087266551343fc43db0a118e573cd5";
+    sha256 = "1np5grzkj4cib5mzwxksqh3crbfllwgsk3ss7jz03s5hgh8jk2fa";
+  };
+  "9cb4e1d5ca0e7935f8d937f678a9245ca0a8baf1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9cb4e1d5ca0e7935f8d937f678a9245ca0a8baf1";
+    sha256 = "0wpqjvls8rdi6g47w8xzs71ynfg1aiw7jw1g160wxk11qvn17rid";
+  };
+  "9cdfcaa36a081486e8c591d1b0de339f20e19712" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/9cdfcaa36a081486e8c591d1b0de339f20e19712";
+    sha256 = "0y7h2ass8kgfabkvdwr3jcdi4znc6mcg4zklvw4yr3420d5h16x3";
+  };
+  "9cf547b1a8d0349c6997827cf3b1c76934a8f7e1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2714108-1287c19490104fa7a8ca7bc71daf7ae8/9cf547b1a8d0349c6997827cf3b1c76934a8f7e1";
+    sha256 = "1hh19pkjsnhjcsd8vj7d8l5nlk01iyp4kxf5hn2ymf0j1df0xns0";
+  };
+  "9d0629861bfc4948fc177763e87dc1ea3ac042ba" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/9d0629861bfc4948fc177763e87dc1ea3ac042ba";
+    sha256 = "0bal97q5lyz4s5z39jnxbabhll2agydcdw3mx0sikwr666aa8hac";
+  };
+  "9d238c0aed4cd73464dbba5fbf034030858fe441" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/9d238c0aed4cd73464dbba5fbf034030858fe441";
+    sha256 = "1n3fj5dsc4b9i8jwb1nzlnk1vbjnzlva3ljwkd16z8xfcdq3aqjd";
+  };
+  "9d2a8629491c47d32fd852ad683ba3be0f91dca2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9d2a8629491c47d32fd852ad683ba3be0f91dca2";
+    sha256 = "0csiwyx12frg2bzyp72is2h6fi2vv961byc23k30p0yz22cybr6c";
+  };
+  "9d4088ad171c93938ed41b2c224a98da2eb8e600" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/9d4088ad171c93938ed41b2c224a98da2eb8e600";
+    sha256 = "02z4578c3939zq6m6l9ckjf0kiyf9biq98yqb6dmp93lanr9sahc";
+  };
+  "9d48d62d8894986890f0f871523b546e25618a96" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/9d48d62d8894986890f0f871523b546e25618a96";
+    sha256 = "12j6p2l09n1yv388h0ynxl0p1bply6217600ix7d8mpm4jjri9sa";
+  };
+  "9d6293584ce78fd938acc5ddf91597dead7b8ff0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/9d6293584ce78fd938acc5ddf91597dead7b8ff0";
+    sha256 = "1qxm6h3nl2aawl9z04gn1kzlaiaajccyh0b9gr85d6x8x2dwxjpg";
+  };
+  "9d8150632d85b43bd2be46924eb71dd19d5b444b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9d8150632d85b43bd2be46924eb71dd19d5b444b";
+    sha256 = "14yw0xbyg1rq18xyfydfy3z0gnvkzr27f2vscsgiw1xmps0fsa6h";
+  };
+  "9d835adb6f30382cec8e1701c61f3a305fe5ebe5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/9d835adb6f30382cec8e1701c61f3a305fe5ebe5";
+    sha256 = "0vq311bgcj0zcicb05l5d1pl5jw1vqbblfzmzk3h6nf0hgn2db24";
+  };
+  "9d8f4ef5363610f4b47829299c0824147fa3c486" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/9d8f4ef5363610f4b47829299c0824147fa3c486";
+    sha256 = "0p5kp49clxg0ws3l3dslff5j54gi11bdpbsks2nh9081pfddla5z";
+  };
+  "9da60f5683310aa2ed53d90b2a9a246879223099" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/9da60f5683310aa2ed53d90b2a9a246879223099";
+    sha256 = "0zgiz6m2g1i5884izczyigh42bfw0xbkvf1r6jmavays26r83lb5";
+  };
+  "9dd86d52ca2bc2688244bec708a9054313d175c5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/9dd86d52ca2bc2688244bec708a9054313d175c5";
+    sha256 = "0viis6zccnxasxwfbi34xpqf4rnzr0w439qsskx7mbhg3zi8p0hz";
+  };
+  "9ddf004692c477b60fed575d57551fabdb00997c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/9ddf004692c477b60fed575d57551fabdb00997c";
+    sha256 = "1ij1pdln5llxl6cxsiz6kbfzsgqmk901mrgbzsdki3ibs75dzr1m";
+  };
+  "9de93e74f384195b52fb90f9e7767ece5fd84570" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/9de93e74f384195b52fb90f9e7767ece5fd84570";
+    sha256 = "1mj2syhcxq5qg23li9rh3814wiws421yasjw83j7b63yvpqbnyvl";
+  };
+  "9ded54d67930bcf5c3e95a10d2176c6106f2a3f8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/9ded54d67930bcf5c3e95a10d2176c6106f2a3f8";
+    sha256 = "0csk1i20kwp4rd1j6lci9v4wmc9jx3ji1i1m051iik0dy0553z3p";
+  };
+  "9e3075eea5e5e885d9aa9e6b2952ebe61a8b60a1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/9e3075eea5e5e885d9aa9e6b2952ebe61a8b60a1";
+    sha256 = "10gxi4n3k6fjsigv12603xsjp097b09bl6lli308xngjkiz55syp";
+  };
+  "9e397995b47d5acc37d38c9fa4935abec922ba48" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/9e397995b47d5acc37d38c9fa4935abec922ba48";
+    sha256 = "0cqayf9ag0snn0fab83fz3l5fqbjhllv86ik3vzx09zmg4i0d7n5";
+  };
+  "9e728c35e842f7af53a3e822acd469326d7cd52f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2677283-a70890a1537c42869136794b62c332a4/9e728c35e842f7af53a3e822acd469326d7cd52f";
+    sha256 = "1brpgrvcshwcrignfc257zg2jchav13kaz94n06i6i4fvd4la6ix";
+  };
+  "9e804a449e34aea4d5227c2a0cb3d96352a82de2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621793-1958bfdd4e3b49f3a0ca6a4c08a60a0a/9e804a449e34aea4d5227c2a0cb3d96352a82de2";
+    sha256 = "1rfn257jpdl61g0qf92lqybhj9j81gxq7h8igb7x5kwswa74c7ws";
+  };
+  "9e9a678ef5fe8d87a10fc7621ae8dd3c501e6236" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/9e9a678ef5fe8d87a10fc7621ae8dd3c501e6236";
+    sha256 = "1mijmzfvnxnii8z805a5hnhbiwwh3j16p8i7i0rhrmvkw5gnd68r";
+  };
+  "9ef14ed15fba71337b14c1e33972d9cd36fa9278" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/9ef14ed15fba71337b14c1e33972d9cd36fa9278";
+    sha256 = "157dz7i640q6scfpzqjw24i8qwlwjvrbdxqi60sx9hgkax1xw0n7";
+  };
+  "9ef93659a347d11fc1e9478c37043a0236e34ba5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/9ef93659a347d11fc1e9478c37043a0236e34ba5";
+    sha256 = "0qn4vd5pyjrsaa75n5avy0ri1s71nwnnkgn66qcdc2x5fckq6p3j";
+  };
+  "9f07f59f3c436bdfae1916ca914e86d02a7239eb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/9f07f59f3c436bdfae1916ca914e86d02a7239eb";
+    sha256 = "14qyjvd23zqc5dhv15z8sp9yl324fsfzy9p7x2nl35x14j667l8j";
+  };
+  "9f3ea83f4797ad2eb48a62d176d4849ab3b11b4e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2616691-982be94b99b442419e99de37630ca843/9f3ea83f4797ad2eb48a62d176d4849ab3b11b4e";
+    sha256 = "1fiah07i0wyvya8dwnlkfyq6csg9f0yly1x51j9s6jazy45xffrb";
+  };
+  "9f67c39f021b4b42e5fa8aec0f0be533c8341cac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/9f67c39f021b4b42e5fa8aec0f0be533c8341cac";
+    sha256 = "0p4a43z84i8qjpnpich9rdxg0gsycblmif3slsad8ydabj094vkp";
+  };
+  "9fb4a9e94f7c935385fd64a3d3c2f58144e7118a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/9fb4a9e94f7c935385fd64a3d3c2f58144e7118a";
+    sha256 = "03hyf8kladlf5hwc1rija042pqcyzlbmla0c3pysrla33h4ca5qc";
+  };
+  "9fc2d2e4632111eca96621a257b4547fddf03746" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605188-b2b13e5f7b3d453eb5d6b0cde31b638c/9fc2d2e4632111eca96621a257b4547fddf03746";
+    sha256 = "0bmg6jvpwq02azazsh98mdh0x716lxslqai6g2b8icwxxi84p20s";
+  };
+  "a003e87a1243a65a9d38ce8666ba05cf9dff34df" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2634249-f2b4469cf0774eac818e7cb4565f1224/a003e87a1243a65a9d38ce8666ba05cf9dff34df";
+    sha256 = "08cbncxgcr83mld0qv6zc6mzjc00jjx8za0ii2v8r7a5jhr7hcr7";
+  };
+  "a00af92cb7dfede2f60df7468c841462cd3ef7bd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a00af92cb7dfede2f60df7468c841462cd3ef7bd";
+    sha256 = "13arcphd636ahrdbxlxwb6yrximqgm9ixl745yqp83aihk2wwls1";
+  };
+  "a037040fb7bcc432add0b7d65dc1d3b078b6f143" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/a037040fb7bcc432add0b7d65dc1d3b078b6f143";
+    sha256 = "1jjcbw831yijkabzavbi4vmw3ba8vk248dnaqsjm5gkcajgwagxp";
+  };
+  "a04dbee3efc3178e3a175b2fb572cc36210ba9ce" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2599079-89300969452d4a5eaefe1ab4af976839/a04dbee3efc3178e3a175b2fb572cc36210ba9ce";
+    sha256 = "0xwqk4czfy62r9dh5yyan4kggijy5hgvbq084zbz3fc53cxrj3kc";
+  };
+  "a05558cf2d18454f06cd9c1a5b610a654ec0294d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/a05558cf2d18454f06cd9c1a5b610a654ec0294d";
+    sha256 = "0m9pngd6gnndqbww5xnwcfdf1gnkyipccixi6w4msps20s2bbkfr";
+  };
+  "a056afc246a9cdce5d7321930c97ccf0b9f19f15" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/a056afc246a9cdce5d7321930c97ccf0b9f19f15";
+    sha256 = "1y41y758jn47y9zy46f0inxlzl0h8wrdj4fm9937ypd2fyfw6nmg";
+  };
+  "a09bd78594e737689115679ea7f6a09ed557d18e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/a09bd78594e737689115679ea7f6a09ed557d18e";
+    sha256 = "1b1kivdj0qz5cr5igqmzbcyrmhbygvdavmfrqlqlrs1775411b7x";
+  };
+  "a0d83db11d6b2a64fdb82cc496d07a03ccaa142f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/a0d83db11d6b2a64fdb82cc496d07a03ccaa142f";
+    sha256 = "1qqrpmmdc0zg13x6qvjzi6zk6wvq0khiml4ksrhbn60si3gr8li0";
+  };
+  "a0de04466a75125d3528739deb44e12686e7a970" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/a0de04466a75125d3528739deb44e12686e7a970";
+    sha256 = "1k6ivx8bi63yivbw36lrpz8sv8gc2gzslb6pq2hq19jacl4v7xwy";
+  };
+  "a0f7010e4bf1452ec48d287d971a48198a78da69" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/a0f7010e4bf1452ec48d287d971a48198a78da69";
+    sha256 = "06s4hiwd7vr3n18p5pg34h1irzvq575n2pw9l2sskz6fj82m2fv8";
+  };
+  "a12df808dfee07a06515eabdd6c1b0124a7385d0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2619995-d5e097f793bd479d8592679759fb98be/a12df808dfee07a06515eabdd6c1b0124a7385d0";
+    sha256 = "1xnjwnfzaja205cm6c54nc53m3nbjfqk28ggi7h2rxg9cdjcv59y";
+  };
+  "a1820034a04f046e5f0c74444f653ee4869647c6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/a1820034a04f046e5f0c74444f653ee4869647c6";
+    sha256 = "1mi6z4s5wz9j4y097b27xp9038nar7nn2gmc1x7yaw97kh2z76n8";
+  };
+  "a18cebf9d16dc2e5a99da03353e404d64bce3ae6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/a18cebf9d16dc2e5a99da03353e404d64bce3ae6";
+    sha256 = "1g0arlnn0f4zhhj9lwmj3mjlwjwvj0gw8m8fbr2jw6rylmfag4av";
+  };
+  "a1c1fcef149d29408d496f35628d18dd9bd2e6df" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a1c1fcef149d29408d496f35628d18dd9bd2e6df";
+    sha256 = "1b66dsbjjvz4gm7vm4vaapykhv7ni2y5rkycbfahzcigi5kasf57";
+  };
+  "a1f9df46b4e95588043a59820ba65fc28a8eea7f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a1f9df46b4e95588043a59820ba65fc28a8eea7f";
+    sha256 = "0fbzj0bkkbm7rxdi6lva7g2qhgqmj4y2mhg72z1iw842bikr4l2f";
+  };
+  "a1fc05440064b28d5deb42b383bf1960ca27cb3b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/a1fc05440064b28d5deb42b383bf1960ca27cb3b";
+    sha256 = "1b0xagh5f596ww8g6yng6frrvkrs8vrhzzbnl59ab1cpbq3xn7dw";
+  };
+  "a21a78f021d580176e09c67d0643b83e80ca2744" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/a21a78f021d580176e09c67d0643b83e80ca2744";
+    sha256 = "1xjclk357lm9rydmhzvznq8rd4yysr2jzh5y1bvrbpvxpx4hc3if";
+  };
+  "a243a00aa61675be8ae46cdba7db99c8e8195984" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2615502-35e684f430004977ab5aaed43a0fab81/a243a00aa61675be8ae46cdba7db99c8e8195984";
+    sha256 = "1lvmwf0ajkjsdz68n22dhiihddv4ric0nch46ixvqg8di50fanj2";
+  };
+  "a24d76c382036592b023a22d61abbe88d52cb526" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a24d76c382036592b023a22d61abbe88d52cb526";
+    sha256 = "0brdmg3xp6jgfhralw483pkyvgd305g3m4bcqcpg9vazsrwawypm";
+  };
+  "a2587b8104dccd8347dc49a52bb5643842856a16" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a2587b8104dccd8347dc49a52bb5643842856a16";
+    sha256 = "0j8pwamzj2icivglw0ylpvbx76c0xyys79l049l7lpirp95y0hb0";
+  };
+  "a260cd8d85a752caa55d8857af979f5ae8a68d97" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2597174-0975f975d1f0463f931b68ea4b0ef6d0/a260cd8d85a752caa55d8857af979f5ae8a68d97";
+    sha256 = "19fijnc4j8pr726j3v3c0x35k8mnswk8jfjjzmgxdn6s95c6q9pm";
+  };
+  "a2731fbc3c50dde19f92ac5706a3b73a2fb50c05" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2761703-4d21a69f627145d58d1b542fa90eeb3e/a2731fbc3c50dde19f92ac5706a3b73a2fb50c05";
+    sha256 = "1adi6x27znln5qqkcl1x281csw27v5xd981n0az5wxqxfpssxriq";
+  };
+  "a2b0d085248240cde57087bc35816b078511c856" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/a2b0d085248240cde57087bc35816b078511c856";
+    sha256 = "0ksv63yssyqhphll4glyrizrsylkk2p82l2n653sw0jjrrbp5m20";
+  };
+  "a2b1b97c80248fb89a7ce7322cc399a4fdf3173c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/a2b1b97c80248fb89a7ce7322cc399a4fdf3173c";
+    sha256 = "1908grxgwb9sy4rd02jzc4zyi543dkxhynx0wkc0imfw4x2l9ixa";
+  };
+  "a2ce002a2a6a420e4c746eae8f553665e409a116" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/a2ce002a2a6a420e4c746eae8f553665e409a116";
+    sha256 = "021q59y3gi3f6ygddr736l75japm8zky3lz21z4bzik7kmirxq98";
+  };
+  "a2d4c282439a7d50a9b7005e9c3feb136cc093e8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/a2d4c282439a7d50a9b7005e9c3feb136cc093e8";
+    sha256 = "1wbn5yxpmfq5r20j9h27kpyc1v66a78dil39b83cpp4j7jkv687c";
+  };
+  "a333e2129a0a7518d47d81753d193ceecc5b881a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/a333e2129a0a7518d47d81753d193ceecc5b881a";
+    sha256 = "1ih9hbcsslfslb9wr1i5f2vk9746zczygn54lac2m108kf6y0jk4";
+  };
+  "a353e5dd34009fcbd0a5f9eced792d02ffd2cb97" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2710757-d76358e2c5474af8a7d14e3262b517a4/a353e5dd34009fcbd0a5f9eced792d02ffd2cb97";
+    sha256 = "1wf8zzpyp45c9bq2zwfcy5j33yj2gzf73zbfqcppxz89knyakic7";
+  };
+  "a36932c96e52dc3b154313d65c128fc6efa79367" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a36932c96e52dc3b154313d65c128fc6efa79367";
+    sha256 = "1j2qd8j6sp3vj2rm8cxbli2d0l741i786widws427bddp1ma805y";
+  };
+  "a37744cecf38c8c2ca371eb33120654f8a53b5a3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/a37744cecf38c8c2ca371eb33120654f8a53b5a3";
+    sha256 = "1gi17xrvy9hl31z1bsxdq6awy93hllizvc4hbdc74xmpxdgnnqkx";
+  };
+  "a3891b8c154921b18b27b3c7915a8bab0b886565" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/a3891b8c154921b18b27b3c7915a8bab0b886565";
+    sha256 = "1ak3n4yyxpj34v9cjlglgpy0q292xrh7363p26xbkln39il8h51w";
+  };
+  "a3ea753b468f54a0a4c306c03130572f0ec0eee4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/a3ea753b468f54a0a4c306c03130572f0ec0eee4";
+    sha256 = "0fc6xv7d20c1nvzvw8dc1mwh1c51447y9fgl6z93c6xabvijc2q5";
+  };
+  "a3edc07dfea80da6d7d09067737fc4630c4bb81a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/a3edc07dfea80da6d7d09067737fc4630c4bb81a";
+    sha256 = "11wh3glqpficz5wj9cgif1kjpmcbziapza719gzadkcrjc1vasbl";
+  };
+  "a41d00077f02fab1c6a05e4607094b4eea3b6ad0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/a41d00077f02fab1c6a05e4607094b4eea3b6ad0";
+    sha256 = "1xrf0szqj7wxwqcw7lw43fpzqjq9lh3rr04jyfmnddasxd6qzfwz";
+  };
+  "a456f0111a1d9a6fb8045d0e5e9450b7c36f9374" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/a456f0111a1d9a6fb8045d0e5e9450b7c36f9374";
+    sha256 = "1p9bhg7sjvc70jsansrf9qa2wnxwk9dn4ic5k9jai9alcr48bjan";
+  };
+  "a46938a8170197df7ac0c8d9ca3c7e5aca696271" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a46938a8170197df7ac0c8d9ca3c7e5aca696271";
+    sha256 = "01ipp4xnpgnnhlkqh1hpman6ifj77jij5b9mrra87dkcy83wd7j2";
+  };
+  "a4d7e28c74a63f10107957b9b6af00486f1e7358" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/a4d7e28c74a63f10107957b9b6af00486f1e7358";
+    sha256 = "19ldb1kdwiji7bwjz6fx8rak2dk8gpnvib5b3s3ywl0dxa85yv13";
+  };
+  "a507276db67feeb197bacced284be29d92bfb2b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a507276db67feeb197bacced284be29d92bfb2b7";
+    sha256 = "1a46d8km3ci1jy1hgq7mxcq0bhkd2n8bqrdd7x1nyybvh5r7hjn7";
+  };
+  "a561c854b1abb49bc710438edd6a17feb5370e73" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a561c854b1abb49bc710438edd6a17feb5370e73";
+    sha256 = "0s9sw7kx3gj4xrckivfl2w2dvw2criwwm0bibh6dmajsj058pl84";
+  };
+  "a5a4b35f662228caee7476ddab2567611de6c35c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/a5a4b35f662228caee7476ddab2567611de6c35c";
+    sha256 = "0580qlzrvf1vw8rfncc50vyy9y5g79rwcvj8rjaxvdwmg1n4dpw0";
+  };
+  "a6287affa4b828301aafa84f7bd9ce71935997b1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2616691-982be94b99b442419e99de37630ca843/a6287affa4b828301aafa84f7bd9ce71935997b1";
+    sha256 = "06kdx9x2a4230k1c1b60cwkadarg62rnsbycgbqzhgbp6h4j8awn";
+  };
+  "a717434c111c75d501e35d8a5f4de2b75e299566" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/a717434c111c75d501e35d8a5f4de2b75e299566";
+    sha256 = "1410w7shpi913irx8b48mk7004vdsf0xa3hrh21bvd70askxn4ci";
+  };
+  "a74403ad656c7c68733bf1d09d994d0e8dccd94e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/a74403ad656c7c68733bf1d09d994d0e8dccd94e";
+    sha256 = "0b8kcrdcd4jmn2anxgd0x04szkf2k1gkqkl8srkbf4f5hh7aj27x";
+  };
+  "a744790bed001ed939d533b58c7d7132d8599ee6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/a744790bed001ed939d533b58c7d7132d8599ee6";
+    sha256 = "15gxpbd7p0pj67b1dwgnsq841zdfmzw27qvpzpg15nbdsm4bqknq";
+  };
+  "a7460f75270bd4946c7e856b9cba426bfd756474" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/a7460f75270bd4946c7e856b9cba426bfd756474";
+    sha256 = "1xl68yyf67zr08390y11p8il1g99crr9j71m7bqkps4sr236iv1l";
+  };
+  "a75892ec39777f5deec95c7ab34ac829e42f61f7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/a75892ec39777f5deec95c7ab34ac829e42f61f7";
+    sha256 = "1x83zbrnqx9856s515lqix9na8ir8991whgszbx84xjzs7507wag";
+  };
+  "a7675f8de766ef5fa71fd6c904b6000b880a463d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/a7675f8de766ef5fa71fd6c904b6000b880a463d";
+    sha256 = "0jmc22yiaw09cqx0wanyzbh46iblxpjzs9v1bl8hhicv360rq1ya";
+  };
+  "a7c85f34f7555c16973a534e2c21b5d0bf278e29" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/a7c85f34f7555c16973a534e2c21b5d0bf278e29";
+    sha256 = "1a7zbrmj2gdq61q2gw6jr6j3848mg85snj8hghmajndww1wspjlp";
+  };
+  "a8278a17fc9fa29308c59351a8c53b8330d33e88" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605188-b2b13e5f7b3d453eb5d6b0cde31b638c/a8278a17fc9fa29308c59351a8c53b8330d33e88";
+    sha256 = "0d391bz9b9c73xdnkxm3l8zyz1zjb6nv0vn5m3ihpgb7hkdgfxgz";
+  };
+  "a82d5d8a7e63a42fa0e2414ad66c400a3beb640a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2498161-1c427a8c10084d53ae743a11e6148406/a82d5d8a7e63a42fa0e2414ad66c400a3beb640a";
+    sha256 = "1cr9k5zlj9kl24ph9inczwm84rbch1vkvrkycs22yhqblgwf5zid";
+  };
+  "a84e9f4455088def00bab0652ca92a80ecce5e57" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/a84e9f4455088def00bab0652ca92a80ecce5e57";
+    sha256 = "1ks51i2490lymg2whdj1807z9asyl6gpsgbshw4bgdxd903aka1l";
+  };
+  "a8e8deae490071080b69408bf16c09b087801323" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/a8e8deae490071080b69408bf16c09b087801323";
+    sha256 = "1v0aaimfzl3f52cajgzv9v6wzjn4jpf95y40kalqbj2w7qvyzz4i";
+  };
+  "a980d01787b472fb299cc01e49a8a9da740ce81d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/a980d01787b472fb299cc01e49a8a9da740ce81d";
+    sha256 = "1laqjx21ik77p2xggii4pbcj7np9a6bpn8wlhivzk23zg0jnp0xz";
+  };
+  "a98192f145db4e2a545f79bc9d595f8f5c7fda34" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/a98192f145db4e2a545f79bc9d595f8f5c7fda34";
+    sha256 = "0kwb4jawlfvql1n1fbw04kqik33gmlzci7zc236gyhz4mhb86xd1";
+  };
+  "a98819bf37317dabf20f86b0fd6800a911717698" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/a98819bf37317dabf20f86b0fd6800a911717698";
+    sha256 = "0lh1288ab45p06082lb1a4cjh1k3gqmpxnbsilq5cgic98x7fwr9";
+  };
+  "a99daa4bfd46db4b416f47b4fc1972b221ea57e7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/a99daa4bfd46db4b416f47b4fc1972b221ea57e7";
+    sha256 = "1mk3s8g5vgjpmhw6pb14akvipbm31il3887f4qqgfxcdfgkj261h";
+  };
+  "a9c62ffacb1508452705b057c5f796573d47c78d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/a9c62ffacb1508452705b057c5f796573d47c78d";
+    sha256 = "0c0gm8yqkwbzbdlx625bng0hwg9l8fnwf02fkm7mai8qg2xbb76z";
+  };
+  "a9c93107f208faee20ff396148c3b9954b33aa06" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/a9c93107f208faee20ff396148c3b9954b33aa06";
+    sha256 = "0qrg2k8rf3ic7z9y0pv0mainwbqmhn4p5q6jajf08wndz2k3plr3";
+  };
+  "a9dfe0dbd869009eeca3fb67d49ce2c691877dc8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/a9dfe0dbd869009eeca3fb67d49ce2c691877dc8";
+    sha256 = "0i84q4qa7jp3yils2hi8qd9mp0xpazdmnr93739sqhd8wrvi3isi";
+  };
+  "a9f9260691fe2d9ade072d9589f478dbce491a25" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/a9f9260691fe2d9ade072d9589f478dbce491a25";
+    sha256 = "1bkkfvnxxxscv1rglxn9174h7zfa093j0ilq3wpc682hlihg1c7s";
+  };
+  "aa0999ac4a6e388aa9547c455a6ea08c98d7036a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/aa0999ac4a6e388aa9547c455a6ea08c98d7036a";
+    sha256 = "004gm6cfkrv1hccsqwd9qzby37rjjb5cmhz8z8a4wyr52vcccp6f";
+  };
+  "aa212839e3606b3a1bbb68c9c1353c627853d8d5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/aa212839e3606b3a1bbb68c9c1353c627853d8d5";
+    sha256 = "166y3z7h9ncjz34g9ljbch4knqgi8syhsyl1gkh5wnqwkhsdkyjl";
+  };
+  "aa40eee6849fd0b67b4a01d245e14e6f9cb562fe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2481391-2b0dc74bc6d44dd4917420631716dc19/aa40eee6849fd0b67b4a01d245e14e6f9cb562fe";
+    sha256 = "1zhfxhr1ngxkigy2kbr0x19qa6bfh5jqh2kb04x6b5c5cl2rxnx0";
+  };
+  "aa7f77e42dedc93399b370b494f11d5cafe3ac1b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/aa7f77e42dedc93399b370b494f11d5cafe3ac1b";
+    sha256 = "0zj2dqfl1zc15i511n89g5gbjkxgr7ivsvjjnyxdw6pdcbx3820c";
+  };
+  "aa92bb8c104afa015ba28312d3eb02c006426dc4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/aa92bb8c104afa015ba28312d3eb02c006426dc4";
+    sha256 = "0xw13lfrl0nbhjr1haz9k5yf6vra4h2q72mf213h5aar0h2sfivl";
+  };
+  "aab7c2855fd330fbd2d86fae15fb7fc38e8117a4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/aab7c2855fd330fbd2d86fae15fb7fc38e8117a4";
+    sha256 = "1g615imqp4nvryqr7fzdg2xd62nv6nkq0n6a9s4vfl8di3hfywaz";
+  };
+  "aad648813ec7c3909fab2cba04e54a790f99d97d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/aad648813ec7c3909fab2cba04e54a790f99d97d";
+    sha256 = "1056xhjfdpyg3x778w33wmydzacgv24p9mrcsb0h1n09lkxbab5p";
+  };
+  "aadaaad6c3a74db06ec29a860e4cbdb518a7e965" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/aadaaad6c3a74db06ec29a860e4cbdb518a7e965";
+    sha256 = "1xyx0sr4vgbkyizvmjsykn3lg7mg0rgs3ha8xcvkn4m4wzhciwxs";
+  };
+  "aaf3a012f48b24c193628af42ef3302d96784c3f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/aaf3a012f48b24c193628af42ef3302d96784c3f";
+    sha256 = "1idl0rsr7waqbgydsbnlq7bl26s202arhzv5bzmcghy2jlzgavj1";
+  };
+  "aafb65596f063aac27c03ad64646b10e9cbd9e5f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/aafb65596f063aac27c03ad64646b10e9cbd9e5f";
+    sha256 = "0gmi9sd9sgzb1bmwgyaghslz2rxyba96qyvzn9mdxnh661cwnwsk";
+  };
+  "aaff771bff40e67acec754ff6a73103840091d71" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/aaff771bff40e67acec754ff6a73103840091d71";
+    sha256 = "15f92i5jph2hiihknkbyssif2gwlcm59vkqwj155c164g6fghdsc";
+  };
+  "ab091055311fa9bc429f0aacec0cc24290af3166" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/ab091055311fa9bc429f0aacec0cc24290af3166";
+    sha256 = "124wr5mfd3n11k6rdd60177hfjbjicyn57fccwzn2sxhq3rdxl7p";
+  };
+  "ab0a48b5c47c246a0d31750e9ae6b073ad35963e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/ab0a48b5c47c246a0d31750e9ae6b073ad35963e";
+    sha256 = "0ldkcyzq6jsjkb1w8qgrjjjz9sgpfa7syvmfnr4micv2jna867vc";
+  };
+  "ab0accca4b2e0942f55d408ed30bb84183371d99" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/ab0accca4b2e0942f55d408ed30bb84183371d99";
+    sha256 = "0j2pc8bpm3ikwzlkssgmbk1wcqskkbv9akyb07742vl034vzzc5z";
+  };
+  "ab199653d5f9dea6b89095016907a7ada2eea972" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ab199653d5f9dea6b89095016907a7ada2eea972";
+    sha256 = "0fk560jgq4avnlqvrj6y3qbd9r1zcyjxpvvpdcbwr57kqxqgki5d";
+  };
+  "ab1c1bb528f1ce09f2cd32ba886bdf658ee6ef6e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ab1c1bb528f1ce09f2cd32ba886bdf658ee6ef6e";
+    sha256 = "0jkdyzxqffi9zyfhi8pmh5z57z5cs4inn5cw92gbgh1fx760shx6";
+  };
+  "ab56f3655c7511b5ce622c56fc8f769b82720a77" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/ab56f3655c7511b5ce622c56fc8f769b82720a77";
+    sha256 = "10f5kb8yswwd8178104jz5ph7s5j3hzmicfggfsdmviw4760iplm";
+  };
+  "ab5d351cc1959e213540cc41dbe93cea75dda4d9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ab5d351cc1959e213540cc41dbe93cea75dda4d9";
+    sha256 = "1br599a6lsg7cq8a1zy7wicpjjmg1pvdmd9wph6xd4a4i5r5msh9";
+  };
+  "ab6ec6af0e90d693b32e063348193dfc34a5d608" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/ab6ec6af0e90d693b32e063348193dfc34a5d608";
+    sha256 = "1saj3cr67jik0xfak36j394irs648w4ws8yg1bzb2i4kxl4x4qjf";
+  };
+  "ab9668aa1cb36fe03fd80ec800264850f247911e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/ab9668aa1cb36fe03fd80ec800264850f247911e";
+    sha256 = "1z3sq5jnxannf084xrd5sgm64d54n5w4vhh2jcrch53vylkkf771";
+  };
+  "abcd992f6c90c47b9150148778b5e5dd0be366f5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/abcd992f6c90c47b9150148778b5e5dd0be366f5";
+    sha256 = "0sxcxwpz4xpxjnr5026xpp7m9jagvqb4ff0073r46a9jzp0y0nwh";
+  };
+  "abd31f5aa1a5bc7ad21bd97551365c4785a30537" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/abd31f5aa1a5bc7ad21bd97551365c4785a30537";
+    sha256 = "1si98cl159fdlqpqaagk3bsf8295nwbyf1x12fps78fw8svshhps";
+  };
+  "ac32cbcbb8641f87ce0f4e5e8ea11cdb33568e98" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2700710-7fab47bfec3142a7b4fa395fdd001748/ac32cbcbb8641f87ce0f4e5e8ea11cdb33568e98";
+    sha256 = "0vvxrykslg2klrfmg8nczaxb2picf30fiz19vnwrmkc2hdx8ipj5";
+  };
+  "ac90a77a8f7a8cffa48d869e60f393981eeb2ff1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2620418-84d187e8202a426594ec7cac6eeb85a1/ac90a77a8f7a8cffa48d869e60f393981eeb2ff1";
+    sha256 = "093cl6yhppbc6xqgfiy46rm2wip3cpvnkzxgff0k7bbb8chxp3al";
+  };
+  "ac98ab61a879076754296cafc03b793203fb6701" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ac98ab61a879076754296cafc03b793203fb6701";
+    sha256 = "1jcm9grs9s7prn4qxhpaw5np56g6s6k0z2xa8ky64i1c9rq0dyx4";
+  };
+  "ace785dacecc7b1203d5fd7ca358003149131381" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/ace785dacecc7b1203d5fd7ca358003149131381";
+    sha256 = "1i5aiksqi4hvjyzlrflh9v3dw9n4n4f38aw62flr92psnfy0ahr0";
+  };
+  "acf6558b1e3950d55a31da4e8614e4a357aa653c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2547993-1fb84b9e293242c988e586c599eeeb56/acf6558b1e3950d55a31da4e8614e4a357aa653c";
+    sha256 = "1gsdlhcwdd5dzl5qm8hsrgyg9bjmp0iyaa863fa4h40ammj0kg7a";
+  };
+  "ad4246832e88a45f0bdd6f9cafffd383ed378120" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/ad4246832e88a45f0bdd6f9cafffd383ed378120";
+    sha256 = "00g2y2p4aavw5bfc116k4qj49qkw2gprg4cxv2mnp1ldj9jh81fc";
+  };
+  "ad48b0d39c84ad3a23ee670e06d009fd1ef406ae" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ad48b0d39c84ad3a23ee670e06d009fd1ef406ae";
+    sha256 = "0a396fmil6q217fh2vr6wwm63wyq74j495dxj7y509swjsjf6zsc";
+  };
+  "ad735ce413f80f79900a87098c112c355b2269b9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/ad735ce413f80f79900a87098c112c355b2269b9";
+    sha256 = "1qgccwwrhkljak4xks9qnf0zq4j4q36n4134xs3nvmzbma9l6xw2";
+  };
+  "ad8485d0661bcc3b36bc884373baac7c82c1db1a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/ad8485d0661bcc3b36bc884373baac7c82c1db1a";
+    sha256 = "1w441r581slp32qhpnrpm2hacy3db8y7v5by2z0xycl2nfz25n1l";
+  };
+  "ada3dc17e0a699e9f0888f167ab43c95b9d087c9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610954-bd0fcbe6f0c748508fe9438073c40b27/ada3dc17e0a699e9f0888f167ab43c95b9d087c9";
+    sha256 = "0zzk3laz8wv0sd4gqc54p5hw86wvbjmy8vrdlq5hpfhg6z046cch";
+  };
+  "ada964ecffeda8e2a6db59b92272ea1e22dd17b5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2791326-4a233957ffc54c94b38c9ceaf84d58de/ada964ecffeda8e2a6db59b92272ea1e22dd17b5";
+    sha256 = "0s23ag4qfdy2h7cz7184i2vzbbb3bm3j3655vs8yb8gfjj1rbiyx";
+  };
+  "adb1f445a4a127969356b6635da51f637f54a0ac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/adb1f445a4a127969356b6635da51f637f54a0ac";
+    sha256 = "1h5siwqpjjgqi695gsmbkdj4qx9cd3w4378i7w59dxv512zgkgrz";
+  };
+  "ade00d1c90e8988488643bcf563040510c4be517" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ade00d1c90e8988488643bcf563040510c4be517";
+    sha256 = "07wc8b6i06hqp5mas7jjhs71ag0lb00z3w5gs25zrmz36ly898hl";
+  };
+  "adeb881928e136d07bc7684746ce44d02956f822" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/adeb881928e136d07bc7684746ce44d02956f822";
+    sha256 = "1bs2z2aw2pqiygq6ykznncfd029v483za1ii6sxbxdg59am4brii";
+  };
+  "ae2770ddebf925141015b1cd4b1bb15fe7ece06c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2659695-e878a65d22304b68a9e6878b07b5db24/ae2770ddebf925141015b1cd4b1bb15fe7ece06c";
+    sha256 = "074dv8w0rkv95qcjxrwsbr6imx41w5ywfx7vcd73l3llzdgfk46l";
+  };
+  "ae70c01ba3575e5558b7bde673a82e53494df34b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ae70c01ba3575e5558b7bde673a82e53494df34b";
+    sha256 = "14qd1wbnp3zkfb2ni0dghjbgca4w6c8mnh90f0ijfxwnywk1myba";
+  };
+  "ae8089d30509415ded81477eb41b29f55a431272" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/ae8089d30509415ded81477eb41b29f55a431272";
+    sha256 = "10y28v1pfxz5vdjxvb5kah2756lsl70z9grmda57l5wd4s9qmy91";
+  };
+  "ae874d3eb1af9a5081c94361a989f0b77e0ecf1b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/ae874d3eb1af9a5081c94361a989f0b77e0ecf1b";
+    sha256 = "1r3a0qndxy43pgwsjcc7ia3njip4zvh0419wbm502006amj07yrl";
+  };
+  "ae901fb15f84f70cf6979dafda0d8f5dbcc5c269" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ae901fb15f84f70cf6979dafda0d8f5dbcc5c269";
+    sha256 = "1jipsy7d39z9qmz27ib75yixmgp0qqfazljgmisiw7kyii1m5fpp";
+  };
+  "aecbc01c44a31c0809a43e68b99e44ed1a66bd00" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/aecbc01c44a31c0809a43e68b99e44ed1a66bd00";
+    sha256 = "0vxvjjpr0hvivfsszf94ii8xl67xnb262mxfwm5xmml7472xzhsn";
+  };
+  "aeeedf07121752bb79af7caf8438e5c3d612cd7f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/aeeedf07121752bb79af7caf8438e5c3d612cd7f";
+    sha256 = "1dk4xvniy7cr3xss4s9nrbjgbmibbsb9s7plw20hlg0gzcyg24pn";
+  };
+  "af0b9f348ea115df7f34f8c6a13da31e75e76e16" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/af0b9f348ea115df7f34f8c6a13da31e75e76e16";
+    sha256 = "00y3h6bw7ljrnvy1d9fxff6ncsvgpqaj3hyp44q41w3xlwilsyq7";
+  };
+  "af0da89763358318771d8aefcb742e3416f57423" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/af0da89763358318771d8aefcb742e3416f57423";
+    sha256 = "18xak3xnl38n8mbqa5rv3m70595y36yy2l5rwlhy1k9g66lfvwf8";
+  };
+  "af313d299a6ace9cd07fe010e73680f12b0b5147" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/af313d299a6ace9cd07fe010e73680f12b0b5147";
+    sha256 = "151bsqly7rqy1isklgjvy39bnbxqd3vyjbqaf60lgs6h81ggj5fn";
+  };
+  "af32114b8b970d1d65271ed99052f0de3d4651eb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/af32114b8b970d1d65271ed99052f0de3d4651eb";
+    sha256 = "1pg0r81c1rg9r6m80k3907s77j9mqh8xy2zaym734r3zvjamwf54";
+  };
+  "af412e3bcac064293cc367941ad02eddcc3e5a44" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/af412e3bcac064293cc367941ad02eddcc3e5a44";
+    sha256 = "1gzy8vni5d61pp6v5ns1ykmg2xcgcrm6gd2w90bxgjn7fjxbm6y0";
+  };
+  "af915ecf45e7ce1cfbc694f16a90c5131e953240" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/af915ecf45e7ce1cfbc694f16a90c5131e953240";
+    sha256 = "192x7nbj1mkzvwcjmhaw65wpq0gkjsyx709dh4mkcrm6djw2si6v";
+  };
+  "afb2a10bcf6c13c0cfc4506cce58b6a4e8a8741d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/afb2a10bcf6c13c0cfc4506cce58b6a4e8a8741d";
+    sha256 = "0zqjqww51znppvgkgqinxa91zpwva3jwc8rd7x78f319f3wpka24";
+  };
+  "afb9d2946f9c3633fb9df0e2acc0f5a2cb5a7753" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/afb9d2946f9c3633fb9df0e2acc0f5a2cb5a7753";
+    sha256 = "0z2c3ac6ja8r82wr7fgbh6j9gpma7p1wxrwgqxdwysgys39z7dvr";
+  };
+  "afc1c36f600c80efcf810f3f49289880b32ab502" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/afc1c36f600c80efcf810f3f49289880b32ab502";
+    sha256 = "1clkj01cmpgx51zlqbypjdarm1anispwmch98y87gsmhpbgmgm7l";
+  };
+  "afd3591b1c847bb2dca52c7bab74b7f00043a210" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621658-dcc28ef36e554dd28b121fd140f310e9/afd3591b1c847bb2dca52c7bab74b7f00043a210";
+    sha256 = "1ymdczzqabd5alr8j3gmisrljfvdlncb79d8n62dkxkgp0f894ix";
+  };
+  "aff26a6b13744512c90c853c58676ace9431b24a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2612065-7518df1e66b64067baa9f5dbe835628e/aff26a6b13744512c90c853c58676ace9431b24a";
+    sha256 = "0g66byknihd0fkcd7h1bb7vbgzz8rsyjnkgf61sxbidxdis9v722";
+  };
+  "affb2ac1292b281f85114871becaf2e7a7adfa7e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/affb2ac1292b281f85114871becaf2e7a7adfa7e";
+    sha256 = "0s90sfpjphy4zs3ccwfhhxjh9irr0x4sijjg1k9r5ixzn19klb77";
+  };
+  "b05b1e539b6610459cb8b45e8d0b48d4de00fa44" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/b05b1e539b6610459cb8b45e8d0b48d4de00fa44";
+    sha256 = "0ac90aqnhkm3dvcm5ql5wg959v8y7pyjibppgran58sf0jph91v8";
+  };
+  "b08e33bfe04cad899bb61fb3d822e79b9203df59" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b08e33bfe04cad899bb61fb3d822e79b9203df59";
+    sha256 = "126xswxfgsv1yp33hvpxjfk4m22j3dvs4dhr83rpwqvyw139bxc8";
+  };
+  "b0ad17ab6dad98419386251c9553b4a5d0a73fad" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2597177-394deee1ae174b2db1462326aa83252a/b0ad17ab6dad98419386251c9553b4a5d0a73fad";
+    sha256 = "08rnn13hqbz2j70ldigc3ksa99jmc8gg9x5a2am545s5qw6p5myr";
+  };
+  "b0b3d44fba913897d01ea2ef6e8089c64f988ac6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/b0b3d44fba913897d01ea2ef6e8089c64f988ac6";
+    sha256 = "0lq9vbdkw3cqn0w7zd78n1wpnldxkr3azp02786gqrcx3lgwxffr";
+  };
+  "b0f0802f90e19b137dfc3482c478ce06deda9019" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/b0f0802f90e19b137dfc3482c478ce06deda9019";
+    sha256 = "0ivpnd7z9pl4pkdxsmfn0qnxh5ny19zxh2jvsdkwzj6qk49r7w8x";
+  };
+  "b10f9ee97120ca6711610befa4e7fab7977b88e9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2791326-4a233957ffc54c94b38c9ceaf84d58de/b10f9ee97120ca6711610befa4e7fab7977b88e9";
+    sha256 = "0mf5w54jw7vsk1l8x613zhq9060cd6xj03cjk93pbmkizvy0hxc1";
+  };
+  "b1554d1196eebddea596b1a7274981d7a2670be4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b1554d1196eebddea596b1a7274981d7a2670be4";
+    sha256 = "0rsf740756cc4samd688c81y49fsw1bkiipvahpj1h4kpqys8w4v";
+  };
+  "b16036ff8aa037d50175f1e65bd5504964b26e9a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b16036ff8aa037d50175f1e65bd5504964b26e9a";
+    sha256 = "034rljnxdmy11xhr3rpgzv4sdab87z3ybbrww0gvl0av3chmga5g";
+  };
+  "b176340bbc5d5b5bac78f855162c5a3ff0ba19ce" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2615502-35e684f430004977ab5aaed43a0fab81/b176340bbc5d5b5bac78f855162c5a3ff0ba19ce";
+    sha256 = "1ckgycqh4s28c0yq593d8405cz1g7pnmjpnnfvn3y8gn0yh8qb56";
+  };
+  "b176ee25e0ebb7afdb44613dac3f4254dc99ce2a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/b176ee25e0ebb7afdb44613dac3f4254dc99ce2a";
+    sha256 = "0jb1vsabmj29s03ghc2g48r9sjz2h4s96lvhkf6xgfgqi26nx0vq";
+  };
+  "b17f3e987930d01e04a825ded615a345c7af5ef7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/b17f3e987930d01e04a825ded615a345c7af5ef7";
+    sha256 = "1d4ibb02h26i5za5z7a9sj2cirvz8y93h2jxrb0llq9hfazzzgpv";
+  };
+  "b1bc628c3ffbbceef6e1ef0dfb467b793da712dc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/b1bc628c3ffbbceef6e1ef0dfb467b793da712dc";
+    sha256 = "1li9rf71003ixz42k3gcavfnnjjfgbp69qzxmddv7w8iykas5vli";
+  };
+  "b1cdfd2a0b486252f482eca80d3408be44b15168" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/b1cdfd2a0b486252f482eca80d3408be44b15168";
+    sha256 = "03ipjskn7j0ar4hz9n9w8r6m1wp3ag35n21sx3v594b332ma25cg";
+  };
+  "b1dfb94e146a98148e1f9ba9a56d7114a84628a8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/b1dfb94e146a98148e1f9ba9a56d7114a84628a8";
+    sha256 = "09imd5nsrina53my95vsd4jm9400qz0kc7vik3aafga9648h5nj6";
+  };
+  "b1f44610d6ce19e42537f436c4bfc70e275b432a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/b1f44610d6ce19e42537f436c4bfc70e275b432a";
+    sha256 = "1bfgybl30pgmjzvxiisy0bm6anh2nif2gc67a43ij0gxmbiigwyd";
+  };
+  "b20c27d04963b4b8e0c5dcfd81e51dfc59e30db2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b20c27d04963b4b8e0c5dcfd81e51dfc59e30db2";
+    sha256 = "1sfrx4dnqmp5d7j7xid8p0iv6fglbv7zsas1d1ig0knda2gc5c05";
+  };
+  "b24bbd337d9a9cf1085d4cd1df1e43e928749b90" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/b24bbd337d9a9cf1085d4cd1df1e43e928749b90";
+    sha256 = "0qsi9g0vn6q49w8xkfghkrjhb32jczinnjiyp5isyb19802zc6vm";
+  };
+  "b2b40485507860ae0f1ba756693b78123347a60b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b2b40485507860ae0f1ba756693b78123347a60b";
+    sha256 = "1y9i6ly60x5cyqf429ay00sy3f796ha65wcinjvsmixpgsqivm8h";
+  };
+  "b33175575bd5fbb07b2308fa24fbf8f548763435" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b33175575bd5fbb07b2308fa24fbf8f548763435";
+    sha256 = "120489jn9bnsj3v4v6icl3pvcpzm27g3900l3k8f263b8qz52jpy";
+  };
+  "b33dbe936d08959ce00d8d551c9861052b05a0e3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468936-39e1c39556f84e60be8d850c452aed67/b33dbe936d08959ce00d8d551c9861052b05a0e3";
+    sha256 = "13l63iipsscfz4iqm9jsp68y0w1l2pmmg2skv5mnmlfm4ryq5dc5";
+  };
+  "b3643e64562cf8928fe74794820c500f305fac17" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/b3643e64562cf8928fe74794820c500f305fac17";
+    sha256 = "1gy3p72p0v67psb8n5gqmw6skxavcamq7c5i3mgc5pmys2jmspqd";
+  };
+  "b386d93988dde07a87de09757eacd3a2ecfd6202" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b386d93988dde07a87de09757eacd3a2ecfd6202";
+    sha256 = "1nmsqsm0g8zz3x4x5h3m2nf5ii5cqpr5x3kpcs5x9dpcsz1z5q9f";
+  };
+  "b3a267c43c45f392523e300a6f61318f4ae52d99" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/b3a267c43c45f392523e300a6f61318f4ae52d99";
+    sha256 = "1grivshi7cgmin5cab447s30byjlapnlcg010assxx36vgkhpihp";
+  };
+  "b3ba54dd3b4a9c7c235223aca9ad7d6007559484" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/b3ba54dd3b4a9c7c235223aca9ad7d6007559484";
+    sha256 = "15as68yknbf35zv5638qfc8j4pwry8zbmhn8k0ycjzyi7c5gqqpv";
+  };
+  "b3df044bb928c0123e3067b6ca07bc8db2c7c93c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610298-3f4939c916b54d799ac5de807895697f/b3df044bb928c0123e3067b6ca07bc8db2c7c93c";
+    sha256 = "1zcc27kh9mwhawpkfxishqhkngwp0ixasw091g0ydxvsawq7wikb";
+  };
+  "b4179284c669b70deca0e515159443b89dced17a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b4179284c669b70deca0e515159443b89dced17a";
+    sha256 = "1yi9jlqh5chhq5zrsi6581d20hy4wva56dwvik7p5azcwkv7jh2i";
+  };
+  "b4411a92ba0b237e9dee0988897930e64daca1a7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/b4411a92ba0b237e9dee0988897930e64daca1a7";
+    sha256 = "17ffzs8zmcwf3znbc8jzja6db4kcgj4mnzf90g061k6bx29rrnxi";
+  };
+  "b44f92d2adf2245433cfea594b8718a8a1d0935a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b44f92d2adf2245433cfea594b8718a8a1d0935a";
+    sha256 = "0r5mqhyn811cbwspbi6l9yssx2w8pg6brv52g8qhwjiapr70p6xf";
+  };
+  "b453a1dc5c79a3ef309710fa63d80177fdb4c947" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b453a1dc5c79a3ef309710fa63d80177fdb4c947";
+    sha256 = "0c331fw0hzzh15b0s1i0x52bmdlwwzyjxr9gj1rflm9i0h83xqk6";
+  };
+  "b4815536b7d3c4f5a1a07bf7a0a85f780d0a9a8f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2616691-982be94b99b442419e99de37630ca843/b4815536b7d3c4f5a1a07bf7a0a85f780d0a9a8f";
+    sha256 = "18r4lblc3zg86sfj27izlbgjdap2aw1hhx64s9aykj32k0slhq3k";
+  };
+  "b49270a6fb0733c3b9a3e6627fdc96c5b2b400f7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b49270a6fb0733c3b9a3e6627fdc96c5b2b400f7";
+    sha256 = "11v6h8xgr5lj7x8aakirdny73fsdidshg9ijhck7lq25sqrpg681";
+  };
+  "b49ba6bcffb62e7245700758aeb276ae404637e1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/b49ba6bcffb62e7245700758aeb276ae404637e1";
+    sha256 = "083hj8s2ihr85gb1lpy6zy2xfd7ilr3yr46jvv62i2v8v551y2ri";
+  };
+  "b4a7011b1f4b663e34e08b5caa1fe927463eb914" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2615623-07d97909df1d48be99bb54a411313382/b4a7011b1f4b663e34e08b5caa1fe927463eb914";
+    sha256 = "1442aqg7ds4xxq80jsk7y2bhj2dgnm4bk8ma0kcdhy8qnmhwwvz3";
+  };
+  "b4b01b3870e9301073475bb924e5463d76e87c0f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b4b01b3870e9301073475bb924e5463d76e87c0f";
+    sha256 = "0720v8f1mgqrkxgdk85w3bj68kai90xy6i5gc5b9sbg3dgw1giss";
+  };
+  "b5b76e5c16852517072b42a8cb51945d692252b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b5b76e5c16852517072b42a8cb51945d692252b7";
+    sha256 = "0cxz5vh3j0mf2vfr94v535zl3aa41m0ynydw3phmi45nws9rqck1";
+  };
+  "b5d004587689d2ebd79e34905d174a376e575f5f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/b5d004587689d2ebd79e34905d174a376e575f5f";
+    sha256 = "0gj82721n05pymy3fpghics0v2pi5ck1liqv0d6976y89anz7vlj";
+  };
+  "b63ccd1617b08574d0129948ec7ad1e48f94a220" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b63ccd1617b08574d0129948ec7ad1e48f94a220";
+    sha256 = "1i1l5aq5da080145qxraaj8mh5hpjwk3l6cdl1k3acn3y8rdyb27";
+  };
+  "b66bb0fd25eed1110f4b97f5f4c3cccd294cb884" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/b66bb0fd25eed1110f4b97f5f4c3cccd294cb884";
+    sha256 = "166m1j21yq89qpf3g8h7rdkcdzcnhcj6aps29n5yx1zgay6kq9sd";
+  };
+  "b66faabd2faed41ddcfaa83fbc45e1c038712800" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b66faabd2faed41ddcfaa83fbc45e1c038712800";
+    sha256 = "0lg35984x9q9y0binxrkdwnj4c910nj8wj41bsggwsmfdxz3vi1b";
+  };
+  "b6774cdd5b050cfcaac3143c0a8f89705c6bde71" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/b6774cdd5b050cfcaac3143c0a8f89705c6bde71";
+    sha256 = "0xllvgabdrafyy0gh1plqnzbr9lwxw5xn357dc4bpz7a8nllnzpl";
+  };
+  "b6aa88050eb1fb1e9317e28c1342c6ea4ab7dbad" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/b6aa88050eb1fb1e9317e28c1342c6ea4ab7dbad";
+    sha256 = "1yxxvjhrj20m6jj26y53azikjw1jmdb1sc0l5876bkmwadl7rkyh";
+  };
+  "b6e51c5ce4619cf24deb50699e19457246a65fde" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/b6e51c5ce4619cf24deb50699e19457246a65fde";
+    sha256 = "00q6pplg3rq5wy73nj9gi0h14dvcnvsi0b51xbbbsvd6qnpgf9in";
+  };
+  "b751385c56ed5ce096df337d0a736bdb517071c0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468936-39e1c39556f84e60be8d850c452aed67/b751385c56ed5ce096df337d0a736bdb517071c0";
+    sha256 = "134snqqpd11yd05jgw199fpv41pnw94kh8fig3gmkv2rc0ppdrqc";
+  };
+  "b76100c79e2052b6a9156a3a3b44dc46b73ba80b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/b76100c79e2052b6a9156a3a3b44dc46b73ba80b";
+    sha256 = "02igaa6r8rs8qk7235jvbryycz2v3cl4pd08ifwhg471w65zrwz9";
+  };
+  "b774b3a6af176fe17e8988b8ce8aae6fac0081c8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/b774b3a6af176fe17e8988b8ce8aae6fac0081c8";
+    sha256 = "1vjz9m66hfr3anm75vfb815i0al393rq0y0w0nbi8l5nxayl2fr4";
+  };
+  "b792f771ba89b6e97aa0da38cab7975e31240901" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/b792f771ba89b6e97aa0da38cab7975e31240901";
+    sha256 = "0wjqqiaj00ngyl6mzxqqpk4jbb4xngk6zcahs9jgiiwvr0fs31gr";
+  };
+  "b7cac0682cd1b758954a6990731d98ac60e931f4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/b7cac0682cd1b758954a6990731d98ac60e931f4";
+    sha256 = "1sjhah3cj62frm38rqs3v3mm0jmab39qx0ys39kgq15wl4gyhrs3";
+  };
+  "b7d98916d7231a6cc8fa4b5ba6d9a123af873b7c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/b7d98916d7231a6cc8fa4b5ba6d9a123af873b7c";
+    sha256 = "1y0iwjm5hkwqxz17b69xfvl200nsyf86i2fdm4kcyf8wq99a905r";
+  };
+  "b7e5e66ec2b311c32f25563c90d3883eaf9d7f01" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2386906-35f20c2d3732491bab9f172643aaf695/b7e5e66ec2b311c32f25563c90d3883eaf9d7f01";
+    sha256 = "02c5s02nj5zab4w019bawz9xf3z253w2kjwsnxx0pjzcgzn5dsic";
+  };
+  "b8063b5f31f092324c94ccf41e3dbbca020714c6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b8063b5f31f092324c94ccf41e3dbbca020714c6";
+    sha256 = "0sx6wmnjqmka3838541dwi668lxdyf4z8ddyy3x94qcg7xr67hx8";
+  };
+  "b8147ae4f4e48c66013e2ce160e307bdbf8bb643" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b8147ae4f4e48c66013e2ce160e307bdbf8bb643";
+    sha256 = "0p9sv64h64pjq8g2p2wb7yvmfma1d3dyp1p26vq9pxyx5vaj6c0h";
+  };
+  "b8280b60d889420165c4849a608f2f77a636a96e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/b8280b60d889420165c4849a608f2f77a636a96e";
+    sha256 = "0vqj80qdwi1dfxgijzjgk9wwfkvf07khgyjjw05801vkkjj75nyb";
+  };
+  "b832b94004977756477412eec3019f6cb37e62d1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/b832b94004977756477412eec3019f6cb37e62d1";
+    sha256 = "1vja9zxjlil78d20bmwq1cnzb99q2k3g2g75bpz51v6g5smnwwzm";
+  };
+  "b8394a23db9e6efd8594d13cde39d95e60a2b46d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/b8394a23db9e6efd8594d13cde39d95e60a2b46d";
+    sha256 = "199qs2a3ii5353ijcg7vrd2qjz1ig0zs58qpywjkqq5gcx1h3d3a";
+  };
+  "b8692885cc79308225c50faa58244e7006dadf91" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/b8692885cc79308225c50faa58244e7006dadf91";
+    sha256 = "0dmjw6wr6mb0y6ika02fnqngk9lghkm4hdwl2khlhzp25hn2ki6f";
+  };
+  "b88c8f32e5693eade30c534bf94f295df40e1d87" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2474673-cc4b4abcf8d5453d9c14a5ad304063e3/b88c8f32e5693eade30c534bf94f295df40e1d87";
+    sha256 = "0br9zqlnczmdcnay2lja9j6wahsi13182jvd823q0c5rz8r7y9ha";
+  };
+  "b8b07927a65a87a42232ceb51c98a8b5d6893348" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b8b07927a65a87a42232ceb51c98a8b5d6893348";
+    sha256 = "03kgb1qbibsrhf1h1xx6zlm0dckjymxbjkd0rr3r896xg10rgr5i";
+  };
+  "b8ddc52b5bf66003c85e7e259287f4741bfe8119" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/b8ddc52b5bf66003c85e7e259287f4741bfe8119";
+    sha256 = "1207ryz0lz26nw1vjnhicxn94xzf6i55h312xqgl3w1mz3l6m4pw";
+  };
+  "b8e153475935a408d91ca55c8e98030d5cc99ceb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2435859-13d694fe2b4f4b1b838326ec956dab4d/b8e153475935a408d91ca55c8e98030d5cc99ceb";
+    sha256 = "1rv2kj03nacyhh3bddn2vsvh98ld3f1rizx71hg5q5qx5ikihabp";
+  };
+  "b8e9ff6bec00725cf169b237001ce72af9342600" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/b8e9ff6bec00725cf169b237001ce72af9342600";
+    sha256 = "19cv6afmrykdhfwci6532yx560pc1l6a4z9k7fjh2y9zcgz5v38h";
+  };
+  "b8fd57460311ef331feabf98c510f76f80053855" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/b8fd57460311ef331feabf98c510f76f80053855";
+    sha256 = "0xki6y0slv4g5wg8z323pa09z2s0v14pkmkas9h7j1z8jh2wczwi";
+  };
+  "b94c9f0d77457d47a979c48f936f9be3c11930e0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/b94c9f0d77457d47a979c48f936f9be3c11930e0";
+    sha256 = "1nlg8bv50idaxxhawrxnwdr9s2cq31ac46s383lqmnxmbiyinx9q";
+  };
+  "b955f5ba1db0d7a6f27b22a2a79e008593d687e4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/b955f5ba1db0d7a6f27b22a2a79e008593d687e4";
+    sha256 = "0ywsp3g116w2cbavbm6hiv6sm60zm74lix5j1ipliq9nlkkjfd6a";
+  };
+  "b9e5928d9d628a4f6a0795a3f4947e59fd82874e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468936-39e1c39556f84e60be8d850c452aed67/b9e5928d9d628a4f6a0795a3f4947e59fd82874e";
+    sha256 = "1p3sb9hzqi7isqpw3a4mzra1a56qrzvhrsc483qb8dpj85a134cr";
+  };
+  "ba2567e2e68ba6bc101c3614005d68fd1d0ac2c0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2624272-fa13935f6af5491e88fc623f350f6d60/ba2567e2e68ba6bc101c3614005d68fd1d0ac2c0";
+    sha256 = "055hiysma8dhw6fxclbc87s8r24sqrs8hddri0alc3x3ckgx1xvr";
+  };
+  "ba59a62dae63fc2d143e0cf4c7c65185055b6cfc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ba59a62dae63fc2d143e0cf4c7c65185055b6cfc";
+    sha256 = "0ds72np4k5a83wdianr988wl3l83ml4mmrv7xhq7knmxga11zgww";
+  };
+  "ba6332a94c99ed09c2a9e428e54763da5b1576f9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ba6332a94c99ed09c2a9e428e54763da5b1576f9";
+    sha256 = "0hq06wfzqwddzmji8iwl93gn1h7bsrm5wydfhd2jdkvbchdjrng9";
+  };
+  "ba6a5b201e1374856d563e960e0a5f7a935cf37d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/ba6a5b201e1374856d563e960e0a5f7a935cf37d";
+    sha256 = "0i3lsazrz4d5y8k4569jc9qyr45r5mkp1bkm705ah2ykli1mwvgn";
+  };
+  "ba8f3a342d5ba472b330c322376f9f3d7921dcd3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/ba8f3a342d5ba472b330c322376f9f3d7921dcd3";
+    sha256 = "1m04gn311csvzbn4qmass7v0zpwgc6gb9bh76xk1nqirzm1sqjjx";
+  };
+  "bad3d27e656261f89d7bfe9409032b1623077a17" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bad3d27e656261f89d7bfe9409032b1623077a17";
+    sha256 = "0j6q8pjr2iazpk2ljdxaa0f4m4nsw1bvgpqbnl3l7s8514r98yj5";
+  };
+  "bb049becabe678eba91b10ef8dceac666811ba85" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bb049becabe678eba91b10ef8dceac666811ba85";
+    sha256 = "1gzd6j43gq4w5zrib4ww8ipdhkh8zmzfkiq55wwmfk6jpqqxyaxv";
+  };
+  "bb258d693db2159bec8923eb69e53769e0082936" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/bb258d693db2159bec8923eb69e53769e0082936";
+    sha256 = "0pgvj37zvrrxrpkd3a3iwp7d2kyd5c854vsbksq24cpjbdmdiazf";
+  };
+  "bb2be5134bddeb480f0a728bd702988afdd4811f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/bb2be5134bddeb480f0a728bd702988afdd4811f";
+    sha256 = "0z85frk7i22ql1flrnyipp5vwlyy2j5fw6nyx04pjhv8i0d86ims";
+  };
+  "bb5ab39ad700a8ef35bb3bbd27b4c382839c69ea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/bb5ab39ad700a8ef35bb3bbd27b4c382839c69ea";
+    sha256 = "1p8q27cjb4mxn8y3x4l61z880bxs0swn6a8zgrmyzdmcxxnrkbck";
+  };
+  "bb77f99554309b937e1c3bc3c0569d3ef0568a00" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/bb77f99554309b937e1c3bc3c0569d3ef0568a00";
+    sha256 = "12kyhxb2sxk0n0j7xnsqccrmf6svsblpmg9hgx5p84qr1wwi3l8g";
+  };
+  "bbb17328cc23f4bf942377d41807a13a7b852229" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bbb17328cc23f4bf942377d41807a13a7b852229";
+    sha256 = "13nj59zrhss1z8czcahqsljdgjbpcrn7ajyz2v0nvhlxv5zvqk56";
+  };
+  "bbcf231dbaac1a61eba6aa76798c72923c7ddc56" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/bbcf231dbaac1a61eba6aa76798c72923c7ddc56";
+    sha256 = "1zqi6x73wj86nzsnq3gc19f25s0hzjc72zhhn3k2mmmzg6c5rk06";
+  };
+  "bbd3ed12cac3a5812ed814525f0d0018011bcd2f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/bbd3ed12cac3a5812ed814525f0d0018011bcd2f";
+    sha256 = "13k4nj6cls0bm9fbfznanlpaxi6rf5cl96fjzdh5knakhr5pg4vb";
+  };
+  "bbdc2b6ed549549505ee1860ea5068ae5bfc7db2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/bbdc2b6ed549549505ee1860ea5068ae5bfc7db2";
+    sha256 = "04vf62h854l2bby4a101c4wcngvzh04n0agv8kckjbxd4484kqkh";
+  };
+  "bc249eda4e4d0e13fd0e6a660e8cb471ace80c0a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/bc249eda4e4d0e13fd0e6a660e8cb471ace80c0a";
+    sha256 = "01saqqwf52fg5cv3cbf7kx80pa5lp6n70wjc1vzkx322sz1d37wc";
+  };
+  "bc927fee31049f8467d1a02704ac805cef57cb71" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/bc927fee31049f8467d1a02704ac805cef57cb71";
+    sha256 = "03zny0fk95qr83wrdhhnb6knygc8m4y4z1b45m89gvxjz3s7qz9g";
+  };
+  "bca8b698f2e07aaa627a4e94587fdef669602b23" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716370-1fe4be93d0274863a43a7797419557e3/bca8b698f2e07aaa627a4e94587fdef669602b23";
+    sha256 = "1rdpv3fci2l9q3802wajkr1b8as0g17g1mnzyzndsr68jwafn4sf";
+  };
+  "bcb92df46de5890dc5538dd7f0256a6504653c01" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bcb92df46de5890dc5538dd7f0256a6504653c01";
+    sha256 = "1rfdcc2ap488hr67sbpdafc3g4kpxhqv49yjqm9aygj9pb237amw";
+  };
+  "bcc1b9fa37b696e2b1e09da24ada79401007ef3b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bcc1b9fa37b696e2b1e09da24ada79401007ef3b";
+    sha256 = "1g113bj35nm7nm0xabfdsrbx5p02cqynp2xr5m656k3iln0q57fg";
+  };
+  "bcc352fe44e93b30ce97deea8345406542f840d7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/bcc352fe44e93b30ce97deea8345406542f840d7";
+    sha256 = "0m5vf9x58s47bm4x1vrrs0hrv4pjiy1a6qxx36qrsrqfv6shb6k0";
+  };
+  "bcd0cabdfbee7db486a249459af2c96bbe597c9b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/bcd0cabdfbee7db486a249459af2c96bbe597c9b";
+    sha256 = "1gl16fgzp7ljwablwn7n7l6d27m2vfiwycwpqag3nmvcqmsa236c";
+  };
+  "bd11c74bd2655f16eff2974a9ea3299f642a52cf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bd11c74bd2655f16eff2974a9ea3299f642a52cf";
+    sha256 = "168rzxjij3dpqjymrqyqqgablffs3mgqfhmi4fnd31mpq1cmx7lf";
+  };
+  "bd969e12b2d210ce0b8817860e18034a3a30c510" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bd969e12b2d210ce0b8817860e18034a3a30c510";
+    sha256 = "0yal1m4cpkd4nqfarccf5z7szaz46k1cflv9v0797dlk81zgrwjh";
+  };
+  "bdd022a7d16d25b6d56f693ab8ddb909273da156" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/bdd022a7d16d25b6d56f693ab8ddb909273da156";
+    sha256 = "1zqrs5nan5ipaxf392f25ynyppxfc5zq9nafq15ic4z7a5az2nz7";
+  };
+  "be2367fa9ac1bcb508f247e19ea18ae92e277583" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/be2367fa9ac1bcb508f247e19ea18ae92e277583";
+    sha256 = "1pffz2clg1ql5d14an4y6g6i148vxiai2kq2hzkbvv23hgmhczlz";
+  };
+  "be250ea55f51ad2bfa64247db8ab7f7ba22bcc99" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/be250ea55f51ad2bfa64247db8ab7f7ba22bcc99";
+    sha256 = "1hrj2ggi584mlc8nxpniczsyj4xcgygf3adi7xql5vmmb5h8gvim";
+  };
+  "be6492e4410913060da03bbab7fc0ce412e8bb38" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/be6492e4410913060da03bbab7fc0ce412e8bb38";
+    sha256 = "0mpw68bffg01n0g5706nllhck685n32fy1fbg4fs6hk199ddz252";
+  };
+  "be6c1ac56f7b742b9f733b29f46549c5b46f7644" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/be6c1ac56f7b742b9f733b29f46549c5b46f7644";
+    sha256 = "1m4kszd8nqb7xwgmbf14d5ndfpjf1li2w7wsg00km3d5plsl1458";
+  };
+  "be8aba4af0c0804bb17d6ce660ccc3973fb6c35d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/be8aba4af0c0804bb17d6ce660ccc3973fb6c35d";
+    sha256 = "0y77nmzw5hg874iw4y69qmyiz5xg0kr685gprs4nhx09ia4j0c91";
+  };
+  "bee8e68740f8d36a56d9f09e880ff29b5adf0496" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/bee8e68740f8d36a56d9f09e880ff29b5adf0496";
+    sha256 = "1xkdq0792shkjmgf48j4cy4pf3d710zx91g2xmbjfax892n5k1lc";
+  };
+  "bf03069e8d65f6b224763824352cf754ebcbc339" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bf03069e8d65f6b224763824352cf754ebcbc339";
+    sha256 = "1kv8kfwh0bki0zdfimhkrhib56p2bj02by25dmhqvg39r480rs36";
+  };
+  "bf03cada636a04cf211c2e10d586f47b2dda7902" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/bf03cada636a04cf211c2e10d586f47b2dda7902";
+    sha256 = "085zw12vjkdg9r3lki1wnzm8981d7mlzvsgihb7v34zh77idy2vd";
+  };
+  "bf30590744b68cebf21b6124ffdccdf6964f7163" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bf30590744b68cebf21b6124ffdccdf6964f7163";
+    sha256 = "08dd0mg3p60gmzqh0dyfj65icyaa7q44daidqwdbd62h9yxxf9c3";
+  };
+  "bf49c9dd965903acaa8c00eba5613c4de5fe0250" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/bf49c9dd965903acaa8c00eba5613c4de5fe0250";
+    sha256 = "08ga8yhh586h0yc0i2n3a28wmwbzlhz57va40rq269dx93gap3mn";
+  };
+  "bf4dda70b776a7efb6c3302f7abb3d24e90652d7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2579917-73d6be760fd9486fbc9abe582732eb6e/bf4dda70b776a7efb6c3302f7abb3d24e90652d7";
+    sha256 = "0m11crr85b0315yvb4n4pwvzg24zdwgqzw0c5yf1kvjdzkm1z8w7";
+  };
+  "bf920c60bfd2a78e29432783f56c62f419515f85" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/bf920c60bfd2a78e29432783f56c62f419515f85";
+    sha256 = "1rvkpgzckmwrn4bndlq6zc38kc0wj4y6lv0xv26harw3z467fzbp";
+  };
+  "bfed7e9e92de3969ace22aefdf5d85a45b2068c5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/bfed7e9e92de3969ace22aefdf5d85a45b2068c5";
+    sha256 = "0srdb9aahfik14g4s2b7j6ff73g139iqx36fnm86nalf09digdnp";
+  };
+  "bff70448477367ce462c3ee06f051b1f047549ad" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613445-f4cf430b68ba4dbf80d97361d7c5dd6e/bff70448477367ce462c3ee06f051b1f047549ad";
+    sha256 = "1z2jva1iph244fay5f84srg2wpji4gyfv6qss3130i0yzwlbkpqd";
+  };
+  "c0078092106c7019d3c1a17afb492202a59101b2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468936-39e1c39556f84e60be8d850c452aed67/c0078092106c7019d3c1a17afb492202a59101b2";
+    sha256 = "0k2i5d1lylbjq7wzi7hzazq5hhyiav9yjpc5y26dz5d2l06nc43i";
+  };
+  "c007855aa7a0479a01364a56f831920abf69f840" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/c007855aa7a0479a01364a56f831920abf69f840";
+    sha256 = "1cjd5amlgpgqr7fm98g515qd3hl169mw4lg7i7hv9h4d6jrynxrh";
+  };
+  "c02b5a7580fbfb67eb000c6b641d7431e90ce87f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/c02b5a7580fbfb67eb000c6b641d7431e90ce87f";
+    sha256 = "1iri4r9nrv07sd060d1iy31pp584svm3470rxb0a82wdifh592k5";
+  };
+  "c0476a6a0442712d3245a0babbf62c40e8e75b95" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/c0476a6a0442712d3245a0babbf62c40e8e75b95";
+    sha256 = "134j96dp2yy1n19mbh15cdbwwfi5kfi37bb36vc3jbpbispgbiw7";
+  };
+  "c05811bfedda9e7307a79810ed22e36c9b1e3639" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2728442-495b054ed4db444082c281db65b26f74/c05811bfedda9e7307a79810ed22e36c9b1e3639";
+    sha256 = "11jrzgkzjhnvzl26rq4cg64rn1w354fivkp0kmpn4l323ih89hlw";
+  };
+  "c059220dd6a95113a01bfba79f5ed3d5e1766535" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/c059220dd6a95113a01bfba79f5ed3d5e1766535";
+    sha256 = "1hlhsmrqkmivz7cgsj1r7g041fkgjqvff5dcafm6zfh9invjminv";
+  };
+  "c0890e191c0abbf571bc8e71dd0996ecee557a66" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c0890e191c0abbf571bc8e71dd0996ecee557a66";
+    sha256 = "0gnmkajymhhvkygd35qbqbdfza3msjpsziwapr4l7fkzwn9nw4b6";
+  };
+  "c0c041729c29323273ff25722a4fde1aa90a2b9a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2388509-1346da53605048a5b86087c481124153/c0c041729c29323273ff25722a4fde1aa90a2b9a";
+    sha256 = "1kg32w0qqnsz45fpwj9vqcnnvn03f6m7ngswi5gni3asg3xxnlfa";
+  };
+  "c0c56d20bbce88d3e626d132185502535d37ae8c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c0c56d20bbce88d3e626d132185502535d37ae8c";
+    sha256 = "1zijd325z8zvmz78qi34vn7bwc6glw0bv07av8kyxxl3q08yyi5y";
+  };
+  "c1023e403c67693d0cda4a7067f08cc4868b331f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/c1023e403c67693d0cda4a7067f08cc4868b331f";
+    sha256 = "1z1ridxkw4v62r7wpy8p3a2pvbbk5s6fvnb3pj6risyd2nalnx84";
+  };
+  "c1348ebfc2f62edbbaf065a9987835d16f3faebe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c1348ebfc2f62edbbaf065a9987835d16f3faebe";
+    sha256 = "1rbz1jawc4rga0r0153w48n10b5gvamv0356iw79pjag6naylb2z";
+  };
+  "c1621ab3068dbffadc595d03ef2ca486f7a5d484" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/c1621ab3068dbffadc595d03ef2ca486f7a5d484";
+    sha256 = "005d8nk35149kqw2jy0bmfkgs036ymj6khdpgyhybafyqns3kxl5";
+  };
+  "c16c7518b7bf0b8838fb4ec5d024020f7d7dcd2c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c16c7518b7bf0b8838fb4ec5d024020f7d7dcd2c";
+    sha256 = "0v3frxr6pb15y1m6lvkblhhy08k67vbcnjxb0r6pldqqgr10w74d";
+  };
+  "c18d93c3fb088e46dc560285a889e191b2350e3b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c18d93c3fb088e46dc560285a889e191b2350e3b";
+    sha256 = "1gpivr38hx21v5vclbgrbzjdg0ly1ksrdx03vnkjzm2f2564qany";
+  };
+  "c1aea1c747a9068d40e613d94eaf43b511d8008c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/c1aea1c747a9068d40e613d94eaf43b511d8008c";
+    sha256 = "0b7vs9yh0hl73zn5q7lxgwj898rh3qmphsmrab9b2byfbj4mk76k";
+  };
+  "c1d09face93090ba4fb6700351d2c5202a35a2f7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/c1d09face93090ba4fb6700351d2c5202a35a2f7";
+    sha256 = "117cl93bgd91lpp7xd6sr87xcr1j8bsam637khgdcw8mj5k3npqz";
+  };
+  "c25bec168e93ab9183b4187a3172187d41e8b094" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/c25bec168e93ab9183b4187a3172187d41e8b094";
+    sha256 = "0pgzkljpjj8r7l7b6bqqrvqhqcv67r4drbdlq0fqw1cgpspvk9zi";
+  };
+  "c260984388b36733a83e5c5a2d1bddf9202de51e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/c260984388b36733a83e5c5a2d1bddf9202de51e";
+    sha256 = "1qd8vzscnfygqbmwxf61df75j565jr052igscsrq2jy79ls6gndz";
+  };
+  "c28e42653d329ca15b9b65ef130aa7e18df44da4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716370-1fe4be93d0274863a43a7797419557e3/c28e42653d329ca15b9b65ef130aa7e18df44da4";
+    sha256 = "0bsbd40nwyx5592fs2clf6bf7am52fswa68lkpqdimq5srabwcyf";
+  };
+  "c299da387c827b828bdc3e81fb617c8992d1ffbe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/c299da387c827b828bdc3e81fb617c8992d1ffbe";
+    sha256 = "1lfv6s7cjfibbyn89pwc15xfmz0ismcsd8hjna9a9isbi9bfqf8r";
+  };
+  "c2b5d2cc4aa67357f3ee15def8c1d137016f723e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2706207-4f57365c766141c988cbd0106cf38f5c/c2b5d2cc4aa67357f3ee15def8c1d137016f723e";
+    sha256 = "0y15qbgnfx0av2qlnff4xj0n1njnq00agxlr7sr0xwqabkkzlm9y";
+  };
+  "c2c0e9b8e4352e01ad72f4a6d2ce4e6c0c26878e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/c2c0e9b8e4352e01ad72f4a6d2ce4e6c0c26878e";
+    sha256 = "1b50br0m1ff7haidcqhnn3ggxa0jf57bsnzq1h90320ciszkk3rj";
+  };
+  "c2d1aa057a438fe3a8996316005b4f584d087df7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/c2d1aa057a438fe3a8996316005b4f584d087df7";
+    sha256 = "1fdgibvi2aiy9xd3xjvv6fm5qvz2bsmax9v648sb8gdlvp1a2s1i";
+  };
+  "c3390a1d1d84fd03f5aa0a105422b669c9f6ab91" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/c3390a1d1d84fd03f5aa0a105422b669c9f6ab91";
+    sha256 = "16gmb4j6ky53h7lzyccd59aidqxyvjiq9bh43m326jwvbnmcr7lg";
+  };
+  "c3a4ce7861427e417e289e118620ba02ecec6995" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c3a4ce7861427e417e289e118620ba02ecec6995";
+    sha256 = "03qqa0w3p8isci9243jsivlrzzw0scf5w6371jfs4h109fw0qg6b";
+  };
+  "c40ca2cfe00fdc980844d0a02dfb2571b7fe48c3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/c40ca2cfe00fdc980844d0a02dfb2571b7fe48c3";
+    sha256 = "0cxr3qncsx37g69labw8lz622yn9rjxybagd6wrf1bgvacg9f8kv";
+  };
+  "c430a47ee45e5afb9a0831bf2ea38b466b497549" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c430a47ee45e5afb9a0831bf2ea38b466b497549";
+    sha256 = "1bz6j9s06jn1nwyiczama8axg707vd5ny6p44i905z7z2r46s5nj";
+  };
+  "c431002fc0e408cf00a8650910c2f4bb3b85df53" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/c431002fc0e408cf00a8650910c2f4bb3b85df53";
+    sha256 = "01dc7m14cdf4dmc389d3wng39chqj7wiisxzzm83knbjdihrhfrp";
+  };
+  "c461017451f8ce7d5833a200e5d6fa969138fc0f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/c461017451f8ce7d5833a200e5d6fa969138fc0f";
+    sha256 = "1bm0alxlmrkzrrv23s2qab55wxccl3vkhq2srzcw2fnvi407gzif";
+  };
+  "c467b9d4b67580014c04e62e822a99d7cd7a6dbb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/c467b9d4b67580014c04e62e822a99d7cd7a6dbb";
+    sha256 = "0jw6ppirc57wqn41x1c4c9x6i8xrxy8yjwk999rz0swf4dwambx0";
+  };
+  "c4ac8e5f2224886f32727c69401d26eaf54e6d17" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/c4ac8e5f2224886f32727c69401d26eaf54e6d17";
+    sha256 = "05lsv3lpg7sa57q6vm98iskxmmza487nppahzqnc4g7h16k7x0v9";
+  };
+  "c4d70abc45c0067c48d200a7195e87cb07990867" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/c4d70abc45c0067c48d200a7195e87cb07990867";
+    sha256 = "12lbg924x6g1zq6bq0ah54k1vgj5bplayizb4ihrn28sgfmc9y29";
+  };
+  "c54921d21c20e7c27fee9dadcf212291b32f32de" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c54921d21c20e7c27fee9dadcf212291b32f32de";
+    sha256 = "0yb7amg4pnaz7fjqwmjsydz6wig9rqig5wv74zpmc9yalxyfym5k";
+  };
+  "c57259f627108af7691176d6a5ab0a8bdb504fe8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c57259f627108af7691176d6a5ab0a8bdb504fe8";
+    sha256 = "0426ssgyxinyvqq69hcah4ddl249ic412bdvlgwfx10m636h7nk4";
+  };
+  "c58fa62bd83bf317b52d835b43fe31cb0a5fed9c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c58fa62bd83bf317b52d835b43fe31cb0a5fed9c";
+    sha256 = "0s66g3ggy0zz70p6vs4qwkwgv3jnk2b2y3a7rh58385gg3dk4ccm";
+  };
+  "c596e1a5af08148c69666476cb7a935d5b860e04" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/c596e1a5af08148c69666476cb7a935d5b860e04";
+    sha256 = "0sglq3myrvkw38gah4pgpslrsfrx7j1h9dxbx8dbykzjzprf3i0j";
+  };
+  "c620a0e05618810252d4b0f8e82fe97a677dde26" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c620a0e05618810252d4b0f8e82fe97a677dde26";
+    sha256 = "1i95wlgkq1d3m7k4qdfm5h6vs2m0f45d6hpcg3dj8jxy5zvqsgmq";
+  };
+  "c63b8b65198dbac3e3764c69e57b85f011332ea1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c63b8b65198dbac3e3764c69e57b85f011332ea1";
+    sha256 = "0ybhwi57ic2c0xshlj2jw9y0rmmnn9yy22dff4c51mj08g9xqjr0";
+  };
+  "c64839804e94445b7c1ac409d5d0f8f1ea36e54c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c64839804e94445b7c1ac409d5d0f8f1ea36e54c";
+    sha256 = "00s8l1sr0cfkchqyhfvp0ix3fpf10a2smj93xibimkh9lfaz6i35";
+  };
+  "c650d7a313cf559c35793ae4885bfb7ab7e24cd2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2597174-0975f975d1f0463f931b68ea4b0ef6d0/c650d7a313cf559c35793ae4885bfb7ab7e24cd2";
+    sha256 = "1j9rkf1zys5sygijb650s5si25s95hfh6v5z2ahii1gylkrn7lh5";
+  };
+  "c653b9ebfd67dfad854b519e55534735d82f73f2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c653b9ebfd67dfad854b519e55534735d82f73f2";
+    sha256 = "0s2fq88ay1080qqf3qlvh7g0sddbbs8a0jvb6992wbbb0y23839a";
+  };
+  "c705af8ab47f089acd3efa03df30ad116079209c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c705af8ab47f089acd3efa03df30ad116079209c";
+    sha256 = "0dmpf4agrq74ga9sgp8qlb4wsps3fg33jiv0x8mj82d9h064y4li";
+  };
+  "c77e5ef4d0349554ba75af77135182db3577571a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/c77e5ef4d0349554ba75af77135182db3577571a";
+    sha256 = "03gir460iljc089y523fqlxvbp7sq1n9v6ldi6ij52fpm6wvzid1";
+  };
+  "c78d32aaf4ea80b2746ac7ad1692b021b1b548b7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c78d32aaf4ea80b2746ac7ad1692b021b1b548b7";
+    sha256 = "1gwakfigb6bxjjr2scx753kjjvxy32npc5s5l3jqiidw27mbwrjh";
+  };
+  "c7945d9532844fa35363f33da23f208a629dbe28" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c7945d9532844fa35363f33da23f208a629dbe28";
+    sha256 = "1g43sj9v065rvg73jynaycnp3jlw9cngbzr0lv4jyiip8ycd9m7z";
+  };
+  "c7a7c3acf3dd7cd611ae94f5c86473ecd3a2955b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c7a7c3acf3dd7cd611ae94f5c86473ecd3a2955b";
+    sha256 = "1nh8drrb4sk4sid00m2l41pwz01n752jxn7xcxdjfgf1qri7gmfp";
+  };
+  "c7d451a7ac00e4726f44c4fb551c45dfd4614302" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/c7d451a7ac00e4726f44c4fb551c45dfd4614302";
+    sha256 = "0fmsf826chnq5lsfqgp8ndys4aa6v9gpsq3jcwwak3kl8vni21x8";
+  };
+  "c7ea7e43fc1d7ff54a1a54b74c3962098d7851bb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c7ea7e43fc1d7ff54a1a54b74c3962098d7851bb";
+    sha256 = "0gxk8c51f6hsx98sx6f4laqmcc3ln3sslr8848blqwvnhwy3fqfn";
+  };
+  "c7fb09c7cbdf7c014549eb2b9c1345a0f2ac3770" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2714108-1287c19490104fa7a8ca7bc71daf7ae8/c7fb09c7cbdf7c014549eb2b9c1345a0f2ac3770";
+    sha256 = "1c51kddffr04xf65sykxy8lmx25066gcrz881m7iwx20l5rnlc1m";
+  };
+  "c840da0835818272e18eacdd15f50e802453c69c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/c840da0835818272e18eacdd15f50e802453c69c";
+    sha256 = "137193jraim288jy64k6sinwg4pqhc6cchspxjzzn8h7dzfbmyjr";
+  };
+  "c874ee18eb2aefe1e6d4345996da6c6ce2087d43" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/c874ee18eb2aefe1e6d4345996da6c6ce2087d43";
+    sha256 = "09i5kmida7s8zw8az2b1wxnsradjfv47hiy20fkrdqhpz0ra8lh7";
+  };
+  "c884f0dbf617ea1c10f5b347fd4f19d3d87befb2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/c884f0dbf617ea1c10f5b347fd4f19d3d87befb2";
+    sha256 = "1nhrhkzlvfdb4lp0v2syiwpd13sjx0z390wh404197p31xjwjvyq";
+  };
+  "c88fb38c74260fca80491abeaa7a26fd116fba25" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/c88fb38c74260fca80491abeaa7a26fd116fba25";
+    sha256 = "0bk6g0fns1g08zghm5nf2wipbcxzwprcg106d9rifgsq4w1bxk7i";
+  };
+  "c8fcf9a784756d66ad119b3e642423161380add6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2572690-84e70917b1c64a80b248151191ccd58a/c8fcf9a784756d66ad119b3e642423161380add6";
+    sha256 = "1ixadgvvl3w9wirikl6fsj3g7lkbji4pa67pplys3fxd3rwflzqg";
+  };
+  "c939abca16161626114a6afa440cfb71ae87dc6d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/c939abca16161626114a6afa440cfb71ae87dc6d";
+    sha256 = "1mqhplp4zkxr2qzcl4xdqgh8ng5yhgrmjqsm5g04zlyn1xb46ghi";
+  };
+  "c93c98cb950c9d8f504bea894ad865f29b9991ec" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2528371-50b896349a4f4b48b4cce5ef240b0c45/c93c98cb950c9d8f504bea894ad865f29b9991ec";
+    sha256 = "006lrid8py6qhn21gi6n80nfd4y7v29xpjz8c80q8a4p1klayvkr";
+  };
+  "c93f0a56e40373b70b8f6cfcd57796df6e3e5d64" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/c93f0a56e40373b70b8f6cfcd57796df6e3e5d64";
+    sha256 = "0s7dgwc50q78b20l33ra8wrlxkqf0666ldxqb4isx6bk973yf7kv";
+  };
+  "c9440b326c43f4ba6af0b71b1ca029ae223ecabb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/c9440b326c43f4ba6af0b71b1ca029ae223ecabb";
+    sha256 = "1wzfk57gnly1qafvjcy7jxa5nbq3fm89fjna9h7xfaf382kwviwm";
+  };
+  "c946526ac2560a1cf84cb7a63c24bc9994fed050" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/c946526ac2560a1cf84cb7a63c24bc9994fed050";
+    sha256 = "117i8fkym78xq4ssk9hvhfw51myx69xnxm9zxd8mvsa7yrfd3420";
+  };
+  "c95cdaed781fb020898a671e373b60aa382404ff" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c95cdaed781fb020898a671e373b60aa382404ff";
+    sha256 = "19626mhx070k3myam8g2s9dvqqx82pv7jbrdnnkbiz3kc0i65xzm";
+  };
+  "c96e9cd94a86b222bed132142b65c1d90314445d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2441582-104388acf6d34237af496ee648a9c7db/c96e9cd94a86b222bed132142b65c1d90314445d";
+    sha256 = "1vp5lzll11hhn6qwn21qnidhlr6md2mm4cnafpbgsj7ci5jy9i8v";
+  };
+  "c9b2fa52f0b68b4de48806e71af562ddd9ab8363" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2501204-f81f6b4f13824670853a18474a99a9e4/c9b2fa52f0b68b4de48806e71af562ddd9ab8363";
+    sha256 = "1lhr1k6qj5v1j3h4g6q4cwmswpk96l3v26gbq5hj2alab6r5chvs";
+  };
+  "c9f7bd390be6e2f50469fcf024ace928b624a38d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/c9f7bd390be6e2f50469fcf024ace928b624a38d";
+    sha256 = "1rsbwbgiqgvck30gd86p2sh53gykb68sfgyfpflqng9psffzxfja";
+  };
+  "ca146ad3bcc63037df80affd27568080de042fd2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/ca146ad3bcc63037df80affd27568080de042fd2";
+    sha256 = "0dd3piwj2g5zfiidysy219xvcdypdmdqfccwv0ib4ddb6yxa0csd";
+  };
+  "ca3317bb9d7ae47177c0d9362f17d53c865d8b92" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/ca3317bb9d7ae47177c0d9362f17d53c865d8b92";
+    sha256 = "17vb8vrkc7y3rspnbd6nw34v58ifi8dr206kcf2ah8zpfbpqqkcd";
+  };
+  "ca72923ffc518f8f79ad2bb67a376e8c4e51c3ff" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2791326-4a233957ffc54c94b38c9ceaf84d58de/ca72923ffc518f8f79ad2bb67a376e8c4e51c3ff";
+    sha256 = "0zk6xryzk7d8g0f148n4n2zk92jspi71v530bp50nqpjzclv4j7f";
+  };
+  "ca83db39ca850bdf08a4e3bda07b207534365c24" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/ca83db39ca850bdf08a4e3bda07b207534365c24";
+    sha256 = "10a9vl982ni45wj3mnky56n2yljvha2xic4mf2n3vrmrr1aqxrah";
+  };
+  "caafa6d602fb6dfd386f6eb601ff8ed2b2e74234" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622402-86d1483fa60742b6be9fd5a0b0b946e0/caafa6d602fb6dfd386f6eb601ff8ed2b2e74234";
+    sha256 = "1r4vjwkkckaj25ajhw3csn351lppwgb46dc6im023dy8lj5fvc5d";
+  };
+  "cad827e1f1025fed382fad69988e6878edf449bc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/cad827e1f1025fed382fad69988e6878edf449bc";
+    sha256 = "0fz5m8ab4xa5zm8n9w8a4yrzhzjfq7wald118r8s50r4fwsnm517";
+  };
+  "cb540e992bfeed51b40d2faa7209ebc16384c2cc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/cb540e992bfeed51b40d2faa7209ebc16384c2cc";
+    sha256 = "145pgs42bmwr56r4fkjf40l24j9imhcf1f004k2bbmjn8518h4nb";
+  };
+  "cb5e9b0f8eb95171fa01852fb15eabf2845a79f5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/cb5e9b0f8eb95171fa01852fb15eabf2845a79f5";
+    sha256 = "0yy29b05a07h2zk1zy298i1ydlh3vr9mmjawqb34fgff18m1xy3w";
+  };
+  "cb73a430e097bac42d93ec902203b7888ed0b681" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/cb73a430e097bac42d93ec902203b7888ed0b681";
+    sha256 = "1nysj9pxf2kwsh7v8iqz305slwy2s6ysmg9ra76ysmns7rh9rvap";
+  };
+  "cb81a778a0190199a4c52ec5e9e3f749c532fdf8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/cb81a778a0190199a4c52ec5e9e3f749c532fdf8";
+    sha256 = "1hl7yhy7ysg35vrq5y4ngq4aiqfkb5h74zd6x7qay1k588k3af7g";
+  };
+  "cbafcbe19329c889151577a995439d8c09b69f61" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/cbafcbe19329c889151577a995439d8c09b69f61";
+    sha256 = "194zad942iv7rr5fngyk0kpckafip987mhgl1bk2fflvxvs5nckg";
+  };
+  "cbe9427bf8fe34234353780bf7d7188dbd5673af" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/cbe9427bf8fe34234353780bf7d7188dbd5673af";
+    sha256 = "18ri7fwgvyp6p3qm4qn32dyiiwl2vw3f4j5g0dgv4k8p29cpx7d3";
+  };
+  "cc2764b781992363c5941eb2399962b3dc251c9a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/cc2764b781992363c5941eb2399962b3dc251c9a";
+    sha256 = "0sxvjqbyz3bvppf090vpwggb0f758mxh16m0f5lf3z6xv917vbqw";
+  };
+  "cc6c17f5d19462048695c62e88e553ff08996aea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/cc6c17f5d19462048695c62e88e553ff08996aea";
+    sha256 = "0mi2m0f6j89dj3qbm43clcih8d06z943iv585ni8rp8dpvm733xn";
+  };
+  "ccb1bc3ca1edbf4177b3c0d1784bfcb61f87daae" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ccb1bc3ca1edbf4177b3c0d1784bfcb61f87daae";
+    sha256 = "0lxc3imyakyqxphhyw7xxjlinyvvhpq050xwnydks6bja2nqjrvx";
+  };
+  "ccbf9e16dbb06aba05b68b87bd827f67b8eac84b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ccbf9e16dbb06aba05b68b87bd827f67b8eac84b";
+    sha256 = "1v65rdr6f3a5l8k9pa6aqnarv279ik4g82m3arnndlhs8d1fwry4";
+  };
+  "cd0d52d3a393b848c4524f8d20e9c3d772779d50" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/cd0d52d3a393b848c4524f8d20e9c3d772779d50";
+    sha256 = "1b1vccn5jhy79k1h1ilj572j0nkrv6imb3m3fk9zy897fp8phm86";
+  };
+  "cd136c8c017886023a62be7a07da35d0a4af997e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/cd136c8c017886023a62be7a07da35d0a4af997e";
+    sha256 = "0aw9ipcqp0iq706nw26rriqn1jvsczypwj46yk3sjxmcp7bzf0rg";
+  };
+  "cd20dd95dc2f4e182bbf98e7f0d6a7cd87f10df6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/cd20dd95dc2f4e182bbf98e7f0d6a7cd87f10df6";
+    sha256 = "06ba9m6rcvia5rr1pghi1x4z7xjvw1rj9p9hpd7yvzbn02vx58y1";
+  };
+  "cd28a4a14b5471b45eae79e893b8acbc4f7e1f94" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/cd28a4a14b5471b45eae79e893b8acbc4f7e1f94";
+    sha256 = "110936dirzdy78nxcplpnz8z2hnqpcwdbgb6yfsg9w7a9x0290pd";
+  };
+  "cd31abaa21b8f9ec03052817bf36f6c16178f5e5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2597174-0975f975d1f0463f931b68ea4b0ef6d0/cd31abaa21b8f9ec03052817bf36f6c16178f5e5";
+    sha256 = "0imni7w08al0d35nis2xz501zl5qz1dmc4myhhabvm0l6cf3x4ig";
+  };
+  "cd5ab248342e1a8cf9bd3f635151bfdd3d41ad3b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/cd5ab248342e1a8cf9bd3f635151bfdd3d41ad3b";
+    sha256 = "173d24jramz5i4h5pvm4v22jiqnw87b4g1bg0y2v79n313k4p87g";
+  };
+  "ce44b880be5cb6a25056be3c177c866b85aee1d5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/ce44b880be5cb6a25056be3c177c866b85aee1d5";
+    sha256 = "0gcvwwwzyl8s91fxvzaqnxvkz9kpw08643gra8acmbvplx2r92sj";
+  };
+  "ce8de3d894102a4bb85d1eaaa271f605239a2fd1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/ce8de3d894102a4bb85d1eaaa271f605239a2fd1";
+    sha256 = "1m385wpp8zv140c51yq0bybpja4j7rgy837myqb7xsi3cmwsmrdz";
+  };
+  "ced0e06e0c817a6519c5a995d3ba2743df02ecdf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ced0e06e0c817a6519c5a995d3ba2743df02ecdf";
+    sha256 = "0hfxs8i2cjifry6sbyqhw5f54ngbl3dnhzmikvhci0mz1np1blah";
+  };
+  "ced6c6d11883cd80b95d5f522d9526e6467945e5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ced6c6d11883cd80b95d5f522d9526e6467945e5";
+    sha256 = "0ii9010n609i4i4zip2mgjqnhpfb7imfxviqi8kbax35mkfv38ci";
+  };
+  "ceefcb84598a9a4c5ce8d34e749d52d7511a8013" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/ceefcb84598a9a4c5ce8d34e749d52d7511a8013";
+    sha256 = "0rynh9y2scir13ffmgwqcdvcm21p2n0q4i3di1aval7r690b0wz1";
+  };
+  "cefd87d67f6688e869ab62068aa16c5f02113c8c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2597174-0975f975d1f0463f931b68ea4b0ef6d0/cefd87d67f6688e869ab62068aa16c5f02113c8c";
+    sha256 = "0nli07f78bpmjk6bxaa2x32m1l7ds6d4rh8iycciywm8fwbw0ak6";
+  };
+  "cf4a635ba3a4c070a83394e45c5bae8ef8651afe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621163-719903f8599f48949652ccefc2a2d5be/cf4a635ba3a4c070a83394e45c5bae8ef8651afe";
+    sha256 = "0pb38cbss34md3pn9j1rzhwanq1dwqw2jpaygsb9fzxnrgypismr";
+  };
+  "cf5e1ce959a11e3674cc1a7c352dc878022c2eff" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2547993-1fb84b9e293242c988e586c599eeeb56/cf5e1ce959a11e3674cc1a7c352dc878022c2eff";
+    sha256 = "0lyp1iavwk61iv47nlaw7s3bdfr469in0d9rngp7mr9w1b367szx";
+  };
+  "cf784788aae211d789405fe0a7308e059e15627c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/cf784788aae211d789405fe0a7308e059e15627c";
+    sha256 = "02cl56q4232l8y34ajl04s0zxq8mdbvbx7bad1q4f2fcx6g395x7";
+  };
+  "cfaa6e2212f937f340e867175482030d495675ed" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2448689-7792f1b8be254cc19b4c3379509684cc/cfaa6e2212f937f340e867175482030d495675ed";
+    sha256 = "0wdpkcnlnkj6bwv1q4g3i3yn2j7rv98h6l58y323h4bn2hn8f90y";
+  };
+  "cfc8c6e323848f57580a531e48fc4b81cdd17efd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2458551-07195e4b171247cfbc0f6645046eda02/cfc8c6e323848f57580a531e48fc4b81cdd17efd";
+    sha256 = "1bjsd26ckak6212lvb706653raz8sn8b380n5dp653frbsagnmgw";
+  };
+  "cff332b0fe6e7874406db49746b5a2be18f822f5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/cff332b0fe6e7874406db49746b5a2be18f822f5";
+    sha256 = "15w6kfv1pxzswr71knkkyw8zc7i1ibk9rapgp7s9ybkfkdfwrfjn";
+  };
+  "cffe52e7d9b8a547c321247c96a680a061a7c077" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/cffe52e7d9b8a547c321247c96a680a061a7c077";
+    sha256 = "1ha9z55y46lm88zai4dh9404gab7kfkcl95fm0ch22mv3ps94a86";
+  };
+  "d00340b56c80a33987bae91b824e43fa883353b9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/d00340b56c80a33987bae91b824e43fa883353b9";
+    sha256 = "1f9nz3vjw21gvg9s4ycmjcjp3kb79q0inirjnbp0wbxmmd0w102i";
+  };
+  "d01535f7276e94b02b13cc27f3966f8867e79101" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/d01535f7276e94b02b13cc27f3966f8867e79101";
+    sha256 = "05mzb8x5rhs4z9cdfsgv43ggigvpnhkq6jfd5apvsqqyzsrxpn48";
+  };
+  "d04d874a8a5abeb10db060dd59e268c16687663b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d04d874a8a5abeb10db060dd59e268c16687663b";
+    sha256 = "1qaspy0c182xnbpplw4bmnahd52l47g3gmws77gic0ls9dlm98b2";
+  };
+  "d0566c823351a86a79411b3b8d001317aa356284" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d0566c823351a86a79411b3b8d001317aa356284";
+    sha256 = "1i2fxmzs90wjsaxrc26jjmy045gq08p8a3k7z8p9lxkk9xnvvq49";
+  };
+  "d0916b22915dc03f3e2bae8097e2ad696e7c8f4e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2620197-1c557d2f91dd4277b16fd1ed8715aab3/d0916b22915dc03f3e2bae8097e2ad696e7c8f4e";
+    sha256 = "06fl6qfyax8nkccimh3r771l6a36q9rkihdqhn13ax0klab27cmv";
+  };
+  "d0ac4798d087f4f67f533a8d8cc04a7685a380aa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/d0ac4798d087f4f67f533a8d8cc04a7685a380aa";
+    sha256 = "1fbzjkmizabaxrjipsfx5y4qlsd0vddb0b20cwxx8q74q2m2ai63";
+  };
+  "d110f2213c54503001102b5f9a81fc0743ba32c0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d110f2213c54503001102b5f9a81fc0743ba32c0";
+    sha256 = "12l3jzkrlqfkxrq9nk7ksyzy4ffawci9hlbfnrcwrckiz107360z";
+  };
+  "d111d246a5dff2d0eed94cb2592bfe277ad9e0ea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d111d246a5dff2d0eed94cb2592bfe277ad9e0ea";
+    sha256 = "0qjagdpy4wx39jg31ib87dh1gfyyhd06aa1g044jnc9zjdx47n7a";
+  };
+  "d1450a3f59e35f9d62efa518fa3ecc4e3ce0b0ef" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d1450a3f59e35f9d62efa518fa3ecc4e3ce0b0ef";
+    sha256 = "0i7hjlykmzasgyxpw5sx7nrcpi6nmqj3ckcr1ayaym7j2d2dljpw";
+  };
+  "d165f29f588eae8d8a55d377f73b67973713c670" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/d165f29f588eae8d8a55d377f73b67973713c670";
+    sha256 = "0gqsm4h2bzvp7pm77z3alrm21pf8vp4m4ihlc9qqwv2jm98gmfi6";
+  };
+  "d1a31fc8df90aed8358e255ead086de9df9b8eea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622268-4534504e79af46a28b290d0661d1cc42/d1a31fc8df90aed8358e255ead086de9df9b8eea";
+    sha256 = "0gfbvm7l4skz5snpbk39hr9ccmja5fxkvnrr5278l9ways2d2ilg";
+  };
+  "d1cc40fc311b1fe882b059047a6c7f53925c9827" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d1cc40fc311b1fe882b059047a6c7f53925c9827";
+    sha256 = "0lxfzdv2gwjscqmxsdhdli5sg1mr08djq7ik8a26h96mvxwqna4j";
+  };
+  "d1e8035d7cb1c18606f75bf22a42e813f926497a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d1e8035d7cb1c18606f75bf22a42e813f926497a";
+    sha256 = "0il1fg83apcy0hvr78gfginpw3y522vqky8523wkbvrbipzqps1g";
+  };
+  "d25faf54b177d399192ede835440a8eb4948ab59" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d25faf54b177d399192ede835440a8eb4948ab59";
+    sha256 = "1fwd7slxj50zh75lcj8i17mijsah1gqnid4mvhvyh33fmgbmwc10";
+  };
+  "d27c0f6b2f82d4e0112056dc4963a251ad84b3c5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2482054-e6ea3bde29504ce5b51935e2939eefee/d27c0f6b2f82d4e0112056dc4963a251ad84b3c5";
+    sha256 = "1f6h8h1aaffy0hn17mlzynfaammkm8whsbjlbb31czgpiq445h9w";
+  };
+  "d27cda6ec1c697039954ff45ad0d4bc809382324" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d27cda6ec1c697039954ff45ad0d4bc809382324";
+    sha256 = "119vqrcws2yfw532n7gykqbgh4p0jhx8vfyc7vkzfrj0ynrda9m6";
+  };
+  "d280f17be242e85379048663a32b3f86bfcd6625" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2629494-07ea5ec481884143ac3af33e276b7492/d280f17be242e85379048663a32b3f86bfcd6625";
+    sha256 = "1lfm6gjsz8y3z90ix3prmvpmx0ps8g4rpzflwd8p1wk8h8kqr4jy";
+  };
+  "d28b2e8946d305dc75d30be04ee1c9bfec7bf72a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/d28b2e8946d305dc75d30be04ee1c9bfec7bf72a";
+    sha256 = "15yjgzhi621bj13nz1wrs9m7jy2v0mjgx3w59fyv5vgf94mj6nyq";
+  };
+  "d292729e71bdf7b0dfe9367148d16b19fa7a5da7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/d292729e71bdf7b0dfe9367148d16b19fa7a5da7";
+    sha256 = "0g7z09z0rxrjf82y9m30qc2a2gbz34gf0hvwxyb3pwzgfbsapxh1";
+  };
+  "d2a00e055f1285c1fa4a975781d66bcdc44da301" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/d2a00e055f1285c1fa4a975781d66bcdc44da301";
+    sha256 = "0ndhbjbcr9mhjzzvfqxx38a84ch7jpb4vik096i71kji8pbby5my";
+  };
+  "d2dbfcbb4a4a5cb2324c962101ba1ae4ebedc502" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d2dbfcbb4a4a5cb2324c962101ba1ae4ebedc502";
+    sha256 = "0ywl10w2xkcm1nc7zcwzsz1q3j25w37hhyrkkvhg41vqjdnibx2p";
+  };
+  "d2dc1c9128c24c0a330a534ae29cc6ae6beaffc0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/d2dc1c9128c24c0a330a534ae29cc6ae6beaffc0";
+    sha256 = "16d5d8n5m1srr2iddf0hvigpaybpyiwr3w2850sgn1qskbx5n2gb";
+  };
+  "d324c1434b20b5ef66a2937ab08337f78c5646a0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/d324c1434b20b5ef66a2937ab08337f78c5646a0";
+    sha256 = "0xnx3clcsxg0b5hmq22dz8wplhfvmckiz921arnl1hbwgfgjiwis";
+  };
+  "d338b1e7e6160d0f539aa12687e23db81cce61c4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2623227-c4b8ee6a09664c9dac75b68f4d1629d4/d338b1e7e6160d0f539aa12687e23db81cce61c4";
+    sha256 = "1zpbqrzxnmiq1wsvxr5gxv2gyf1kip08d8zpgfz6952bxh2ql2d2";
+  };
+  "d347f6ee6f9955b5ddb428582f0a5694be416663" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d347f6ee6f9955b5ddb428582f0a5694be416663";
+    sha256 = "0a67s7r0gnpnb11p4dlz61zqmrk6jm3s2q6n6vz3sak9q046wiz6";
+  };
+  "d3603561d5e25d4f17d441b894b6b532ac8ca892" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745458-2d2488161ce24ccca70e5ce98643ad1d/d3603561d5e25d4f17d441b894b6b532ac8ca892";
+    sha256 = "1farglicxvs0xvrlkp8vhj8zad9c2zm7m7bwwgs35nbmk7ii3hvv";
+  };
+  "d3c4fc80dcded70862e182185119d810e694728f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/d3c4fc80dcded70862e182185119d810e694728f";
+    sha256 = "1g15fbqvwz35hy6czvwb23wv3hv8z62c2hzgnh6wpyliz8hvwvsm";
+  };
+  "d3fa6eb331487a41362af20fc809e610469ecc14" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d3fa6eb331487a41362af20fc809e610469ecc14";
+    sha256 = "1n15651kjzdp4nhxv8rl331gqa9drj2h2lz590ldcqngc27gdm7r";
+  };
+  "d40c0edc4a86159f31ffdeb1c868655892857c27" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/d40c0edc4a86159f31ffdeb1c868655892857c27";
+    sha256 = "08k3m19bgb2l0c7r1680gg3rhprinr9gr1qnmqw9vkpaclkbmhya";
+  };
+  "d43babee559c0a43f3cdfe93ac68d127740c7c60" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2706207-4f57365c766141c988cbd0106cf38f5c/d43babee559c0a43f3cdfe93ac68d127740c7c60";
+    sha256 = "16by5ci4078gbm4qq84np3z1gl6p9g1988nqzwavb1gmcd5l39lp";
+  };
+  "d48b4b394816bf765766cfb0de720c2fcf3dbe91" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d48b4b394816bf765766cfb0de720c2fcf3dbe91";
+    sha256 = "03r22czm4w4l1cz5i9dl5v5nbij3zs4bkh5kgxbq9jd4vqkg15n0";
+  };
+  "d570076bdc206ebe525e4fdc41a05520d5f706fd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2638350-39632eb9e5f94ba4ab8e97fa2d5a3251/d570076bdc206ebe525e4fdc41a05520d5f706fd";
+    sha256 = "1bs1j3rya8w5xlmpws006dyzl6ma498qmjpbvy46588zv6id0h9d";
+  };
+  "d59bfb566ff92e983f4a66e10ce13ac21e90924d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2649176-0ea78bc522e047c6b5b5e477faaaf0eb/d59bfb566ff92e983f4a66e10ce13ac21e90924d";
+    sha256 = "0wgw0q5ln0cz34jc1pn2pqk49b2cbkxljw1c7cyixw81mq0750z3";
+  };
+  "d5cc1b80671cb302ce39ef82a91478483444777a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2612065-7518df1e66b64067baa9f5dbe835628e/d5cc1b80671cb302ce39ef82a91478483444777a";
+    sha256 = "1klyngm5zxnswi2cxj5sd6lcnxmxmj894mpzkbj5fc9l5k9zzh4f";
+  };
+  "d5f5f1dab637b46122ba0000804b82a3466d4f57" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d5f5f1dab637b46122ba0000804b82a3466d4f57";
+    sha256 = "0wzzk0xm9q17myvgk7mbv21gnyjgms4cr397gxkdjfjljbb78n9b";
+  };
+  "d613d9e9dacb47de3549938a8e516310c73c64bc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/d613d9e9dacb47de3549938a8e516310c73c64bc";
+    sha256 = "17rskdgxjwdlq1v17l756z7fj1l0r96fkzpbagsp7w4h7lxkr3ii";
+  };
+  "d63c4c238a195e3f8e062b2a9cf0757f0ed55587" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d63c4c238a195e3f8e062b2a9cf0757f0ed55587";
+    sha256 = "0waid6qlkmm5avzmd63j7dapq2c5kad6727aalc66kf3bxqqk628";
+  };
+  "d65a42fdc8154793ead3cde82b7ec619bd249478" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/d65a42fdc8154793ead3cde82b7ec619bd249478";
+    sha256 = "097124ah7iynh2xq14wlarnqj5kqay45mcsfzy57fkr49kl9q31x";
+  };
+  "d6c884c9dad1608090dcb5009a5146b5e2cb307d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d6c884c9dad1608090dcb5009a5146b5e2cb307d";
+    sha256 = "1z0nixzhmi07w3nfn2zb81qlq3hgc8x1n42rdafq7m4ddgaccp5b";
+  };
+  "d717fddace1fd0e9b4a4b2c78118ebb0c354e35a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2620878-145fecd6dbcb4cf59f55c309f12ff608/d717fddace1fd0e9b4a4b2c78118ebb0c354e35a";
+    sha256 = "0a25mfvkjyycc6ybffg5a453vvzgs0lxs11iwgbd366p1q1a9fc5";
+  };
+  "d777e45fe21ea823174bd647cf6817128035cf2d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d777e45fe21ea823174bd647cf6817128035cf2d";
+    sha256 = "1p363fd1fdl04md3cwpl8sk4n8vs1kbzlvf1m5hfjwjpwf4nrflr";
+  };
+  "d79b515a8ffc174a508593ce109108ecb9e44813" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/d79b515a8ffc174a508593ce109108ecb9e44813";
+    sha256 = "0wxp8x8f1s961vxlrr507rmngqqwaikj3i09zwzzif54gip02g2x";
+  };
+  "d7a56916778ad1fa03472f47ec92e8a9eed66219" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2482391-24fb529bc09847ca8c3576d69ba36285/d7a56916778ad1fa03472f47ec92e8a9eed66219";
+    sha256 = "06w8nb6bzpc98brswfk1ciikgghvx575w6il3l3p7yjx87093vbx";
+  };
+  "d7ae2a94509bb8a9d5e77006c5538cd11b721439" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/d7ae2a94509bb8a9d5e77006c5538cd11b721439";
+    sha256 = "12cwb2ajb3ikrr2pnk9djd9c4cyh2prigfy7x3q2kdni28dw4v9i";
+  };
+  "d7cd467675e181dbeba3cf24443590ebb76f9515" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d7cd467675e181dbeba3cf24443590ebb76f9515";
+    sha256 = "0d6s9lk446ixhiivxxrxv3s8l6xxlxqljkcj1ynyxcfcm9q6d29r";
+  };
+  "d7df186da35e7874ec3096cafd37119085cf5ce5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/d7df186da35e7874ec3096cafd37119085cf5ce5";
+    sha256 = "0l553fq2pmm2jpv9kag039kg8mjspnqaf9ja2g6ylgbkclm8sc60";
+  };
+  "d7eaad8d8e27e59910b9a915de128b42dda290db" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d7eaad8d8e27e59910b9a915de128b42dda290db";
+    sha256 = "1l641nqdiyp8wvpiydmanb1i32da6naad7fiwggjk8y9dd035j3z";
+  };
+  "d814756dd80360682458cdbeed8859d522418bd2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/d814756dd80360682458cdbeed8859d522418bd2";
+    sha256 = "0lmvilkzvcipf1favy33khkfdg285l6cvfykzprljyff1jgqb16w";
+  };
+  "d82a48c7d5dec9cc59dfa1a8ee7298c7e787cee7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2627198-ce999b21af1d474180ef48e136faa3d2/d82a48c7d5dec9cc59dfa1a8ee7298c7e787cee7";
+    sha256 = "1lvp57nm4y0xfc09wqckfd6736qf994sgdwhvzd3a39xnjcm1zcf";
+  };
+  "d841bdc828b7ed9f4a76d474d455264dcaadbe38" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/d841bdc828b7ed9f4a76d474d455264dcaadbe38";
+    sha256 = "0vi449pj78607r89y2zbx2dm5qdk0njdnws55cmx6wv7p13wiwq4";
+  };
+  "d852eca7663f1c36dab87cbd527dbfac895faf97" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d852eca7663f1c36dab87cbd527dbfac895faf97";
+    sha256 = "09y0jdcsxnj6wmb1q60a79dfpn0qq9laxsh20glpgw00a302917z";
+  };
+  "d87a6dc2de5d3e0f991324f8edf80b016f15f204" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d87a6dc2de5d3e0f991324f8edf80b016f15f204";
+    sha256 = "08bmfkq48m62gahq3c9gjkjvwg1f7986kiq82xzr0vd15742l3vh";
+  };
+  "d889e4d65d962a36e5839fedc6a70a00ac10fafd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d889e4d65d962a36e5839fedc6a70a00ac10fafd";
+    sha256 = "15f3gbgqfjhcnmqqcbklp5qh5l4jrcb0mfg0gf4njaprb479274r";
+  };
+  "d8a13d14cf5b0d5bd31f2b05c3b53dbffdedc49c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/d8a13d14cf5b0d5bd31f2b05c3b53dbffdedc49c";
+    sha256 = "13hipnkqpzlxkx87yy49303fxs8mpna2947yaf06nyjwphy9y554";
+  };
+  "d8abbf7642437f66197d216a0eceef1ccce557c9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/d8abbf7642437f66197d216a0eceef1ccce557c9";
+    sha256 = "0jdfxmw3bqp1nws33hrch9j7irnln19ac5cf21bnzavsvkvfrwhv";
+  };
+  "d8f99844942adf5e16059b6743f25804288ee4ca" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/d8f99844942adf5e16059b6743f25804288ee4ca";
+    sha256 = "14fihk8cpbsdf26vfvhfx5finmvz6ckbxmhbkm7qh34wi6h10v6r";
+  };
+  "d904eb14d805f07ce46163d3b8b20c434fe0db0b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2706207-4f57365c766141c988cbd0106cf38f5c/d904eb14d805f07ce46163d3b8b20c434fe0db0b";
+    sha256 = "0pwnpnmca2s8qg2k27malnw6d20si50dp3rlqcciaihn6dbjn8qh";
+  };
+  "d92734f6a18a11d0dfbf8c9e12f63f2180c5225d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d92734f6a18a11d0dfbf8c9e12f63f2180c5225d";
+    sha256 = "1m8yai075pib0imrh5dlwifdgbzsijk0vcgz8n8yzgq4j7k6rk16";
+  };
+  "d9a9e14ffd76c4ec3dd9ed97fe543c3169480ecb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/d9a9e14ffd76c4ec3dd9ed97fe543c3169480ecb";
+    sha256 = "009fzivb39c6wx2mv4z6kjkfqr51fhkx6w08h8d9g0z0kin4hffl";
+  };
+  "d9b01b6ec88b6bdfbdb3493b4881158a6b4c8d81" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/d9b01b6ec88b6bdfbdb3493b4881158a6b4c8d81";
+    sha256 = "1nnk36bh320bblcnd8zvhfvgd9q456a007zwk8l11akx4yd645pj";
+  };
+  "d9eb718a9365d9af9b6cc77b440a8da1ea6c1bc1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/d9eb718a9365d9af9b6cc77b440a8da1ea6c1bc1";
+    sha256 = "15z0bl57iixqyghm5ac3gy8czvx03spwbm5m6i13nk48dvlfyh8w";
+  };
+  "d9edee7f1f74e5386558b4a961fca4552e02ed53" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/d9edee7f1f74e5386558b4a961fca4552e02ed53";
+    sha256 = "17gkslrvbvdkkdapsqpck8q3rczk4cam00c9yhyi137j7n1lkpyk";
+  };
+  "da1a0a91f4e47865a8becf9da734feefa1851a0e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/da1a0a91f4e47865a8becf9da734feefa1851a0e";
+    sha256 = "0lz6gkyn0vcwpgd3ln60cm4nnsz01g20h7qz00pgjczpa4j2qas4";
+  };
+  "da7b12758710d9e2c5869e221e94cef9c9eedfc1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/da7b12758710d9e2c5869e221e94cef9c9eedfc1";
+    sha256 = "03pxq5gncfxllslif2vsfacwxv3wpfgajsgdx0s62slsqrfgrm1h";
+  };
+  "da7ba6ca87d1fd789d7ec8278b87f5eb53200dae" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/da7ba6ca87d1fd789d7ec8278b87f5eb53200dae";
+    sha256 = "1xx0kk0n7lmd7llildsw03a7zbfd3dr3jcjjm2ljb3x2zxksapwz";
+  };
+  "da8b24eeab7203c68fbffbc306797cd5a0ad0a21" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622247-8eee96f5d21944c4aceb4b5731ec49c7/da8b24eeab7203c68fbffbc306797cd5a0ad0a21";
+    sha256 = "0h522mjxnb25w077j7vfd7vw588w2wj3lhvb740hmzs8hg50grbf";
+  };
+  "db0072b27b24bda3fd51a10fdc7e99e0cd839029" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621850-a9425aa00359454986fe050ca270f1f8/db0072b27b24bda3fd51a10fdc7e99e0cd839029";
+    sha256 = "16py0ri5wzfyxi5yv673wwx4cvqdgibgf8g5gndwkvbxdk1901i1";
+  };
+  "db0399e0ca29f1327956d92769300c29b37b2b11" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/db0399e0ca29f1327956d92769300c29b37b2b11";
+    sha256 = "1rn19ggfrq07xpwv7hxlqsq01rz4s5aw8jyyk9jpgwm8951mdk0m";
+  };
+  "db1ce685def3bdbdaa34985a4bcc7f9397fe18c5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/db1ce685def3bdbdaa34985a4bcc7f9397fe18c5";
+    sha256 = "1jvh0j9208qp3msz14gg2dliasys859zfkwagwgcpwzz8r9750dg";
+  };
+  "db49a1753cbbba64d471588023c076a11c7f8ed0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2515540-18724700a05d4a0c889f39065edf2969/db49a1753cbbba64d471588023c076a11c7f8ed0";
+    sha256 = "19jb6xz05mnypcs43ld8lf2jvybkj8xr2mmbrhkpvwbxj0gz9mgq";
+  };
+  "dbaad381a8fe78e42dee5bc0259045658757985f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/dbaad381a8fe78e42dee5bc0259045658757985f";
+    sha256 = "10g36av438yi4gif8c1r35z2jfpqynkqw65nyhy3pnxhwph92hk8";
+  };
+  "dbd67380af0391a17ceebc816f623b42e665cd2d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/dbd67380af0391a17ceebc816f623b42e665cd2d";
+    sha256 = "11cdb6rm97vvmfhnf50sl1bcyrg3zki3v5vdhm3w4bzazmvw4d6b";
+  };
+  "dbe75239cd713a39f272a0de6cac2dfb95039ebb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/dbe75239cd713a39f272a0de6cac2dfb95039ebb";
+    sha256 = "0sy95z08ps7hmkzyg0ym20q9b2f2d1mfs8wp9zbcqixlbkgna90l";
+  };
+  "dc103daa4b0245c15f666e3b82ee1ca395c26e15" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/dc103daa4b0245c15f666e3b82ee1ca395c26e15";
+    sha256 = "1xy9yz8nrk8b1l64x0jq6cgdk10xjf1mmm4g62fqg6sn0zcl5ai0";
+  };
+  "dc8af4beee95a25b1c0cab56a5b11a66babc6a87" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/dc8af4beee95a25b1c0cab56a5b11a66babc6a87";
+    sha256 = "1shf8pf5xyqsjqslnj9m7a93xm9f6lydsf35vhq81p2sll5786kr";
+  };
+  "dc999c480c689209d1072c9b4435243a1121150a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/dc999c480c689209d1072c9b4435243a1121150a";
+    sha256 = "0lg507q9kwc16hn0f9dapahd0iymywswrn2iqd26lx7g6lvnckd0";
+  };
+  "dccb30d618cfef75cf0ac5c9e91b08be0183d1c6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/dccb30d618cfef75cf0ac5c9e91b08be0183d1c6";
+    sha256 = "1z6qy8hsnznrdfx3k6fqnnb8flv8s894ljrglppmr0f0sdbrvavk";
+  };
+  "dcd771e85d726f704215a4feaa632c6ad6472de7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/dcd771e85d726f704215a4feaa632c6ad6472de7";
+    sha256 = "0yqwa73qvwi1rmv4qlgwcn4fp88yqwijd4qw510abfljqgvkwnh5";
+  };
+  "dd2d043a6fefc80a25ca78d62c7e8ac26e471cc5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/dd2d043a6fefc80a25ca78d62c7e8ac26e471cc5";
+    sha256 = "10i0f74cgc3n0yiv88vggiwpsf8jjxg0jvqnqfcmpapd8m6f9s99";
+  };
+  "dd37156cd306b8d31089c3a93edede1ffb0d3293" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/dd37156cd306b8d31089c3a93edede1ffb0d3293";
+    sha256 = "0qldw0lnwx6qnlis7gxpgzdag2sk9cyg2myy8phmmd0407a4l6pl";
+  };
+  "dd67559046c4cec3957fcc155765827a5c36dfb2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/dd67559046c4cec3957fcc155765827a5c36dfb2";
+    sha256 = "1fxk257fjj23k4vx0p6fydbg0kmqd8lx0fbn0fiy94binwym6aiq";
+  };
+  "dd6aa88361efd8c13bc630db41c40d185f94dafa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/dd6aa88361efd8c13bc630db41c40d185f94dafa";
+    sha256 = "1cd1knbxhzzjddavdnd996n53km3nrq0183nrvh7kmy7jp51b6i7";
+  };
+  "dd765b2a31ae5ecdd886e1550b3a93dbc11a74ae" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/dd765b2a31ae5ecdd886e1550b3a93dbc11a74ae";
+    sha256 = "1vlzi62gws4dby85aan2aw96gd9n1frrwvkym5jw9cn7m3rp7di3";
+  };
+  "dd8ef40e0195694f7f018da7e80a520807402c9b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2468936-39e1c39556f84e60be8d850c452aed67/dd8ef40e0195694f7f018da7e80a520807402c9b";
+    sha256 = "030hfr8vk0rn374h9gav0j3x8mvm5r8ggq37h666q4fswazqa2cv";
+  };
+  "ddad05592e192eebafd8842ac556d92572eef1aa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/ddad05592e192eebafd8842ac556d92572eef1aa";
+    sha256 = "000r1d5nifky1yczl7p2fdygrl8yn9n5ajqbxmx2ccmavxr2wqjz";
+  };
+  "ddc5b08945cb44c8aa6434129c3f898bd87a41af" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ddc5b08945cb44c8aa6434129c3f898bd87a41af";
+    sha256 = "0gr5ra1izhksappm1k4s4n632dyzfxdlxv1ilnmfmcs4vhjphpg6";
+  };
+  "ddcc2181537ebf3c5cf4ba351f0960b885372aa9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/ddcc2181537ebf3c5cf4ba351f0960b885372aa9";
+    sha256 = "0hp5d6xj8dh033801j5bl07wji2489v4ci6fl0jljhsfwh9r9zcf";
+  };
+  "ddef4f0acf5f073d28dd6a38c4fa58630d3a68f8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/ddef4f0acf5f073d28dd6a38c4fa58630d3a68f8";
+    sha256 = "1p8ag7dgnrnpj2cj7l94ic98gghhs5xc1qsmwmr5m5v6ra6mkm3s";
+  };
+  "ddffea76154050032a408a3890c07633f1ba3b0b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2604938-a9e6e886491749ef99155ebfe50a18fa/ddffea76154050032a408a3890c07633f1ba3b0b";
+    sha256 = "1bfwfwg9hn4sh5nqwpd8nfjbqkkyp5nzns2cw47cqvrrz9m645hw";
+  };
+  "de0049c6936b76d5da37bb69dd25ac91e83514c3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/de0049c6936b76d5da37bb69dd25ac91e83514c3";
+    sha256 = "1abk2d6mp27rya7yp3dhvgwr18z7yny9l024l9wv2dzgfhw4mlmr";
+  };
+  "de01c69dad3bc654ab534e5eedcd2b8374f2a2e0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/de01c69dad3bc654ab534e5eedcd2b8374f2a2e0";
+    sha256 = "1dggg7qwqsfzcnr296qcw0k5k7bisg2nlxic185qydca0y844khg";
+  };
+  "de04f7b02c49aa87b2b6da18c62a5ff36858352c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/de04f7b02c49aa87b2b6da18c62a5ff36858352c";
+    sha256 = "1fljk9j3l64v4yf4by4n22pfdxa63frilac93wbw663nb7w5hrw6";
+  };
+  "de2d73029d96c42d88f7765a10be8b6af0007eb8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2701057-ddd66ac9b77f4863be4b1dc8e90d0e10/de2d73029d96c42d88f7765a10be8b6af0007eb8";
+    sha256 = "10hc364qj9mav9nqa8jvkiwmmrmx24xqpn8gknra4iw7nqhp43c8";
+  };
+  "de40a1a3ef4f09ae9523868d74d8cc9af2745ec8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/de40a1a3ef4f09ae9523868d74d8cc9af2745ec8";
+    sha256 = "16jhqdx31vid1knbfldhwf3d4vlap6p815q6ri64fb5g0drny9zn";
+  };
+  "de7be9bd446cca2c3d817d2f1d7042e9a6f27378" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/de7be9bd446cca2c3d817d2f1d7042e9a6f27378";
+    sha256 = "139pvk98m51s0i31s4621x83cdx81459fw5jj7sr1kby3g900adh";
+  };
+  "dea23be7b0f4c3aec67d1c95e616bc04d4e99100" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/dea23be7b0f4c3aec67d1c95e616bc04d4e99100";
+    sha256 = "09z1az90fg35rp8rfsnlqh5bhgrw1pdw14lkavnhz1kcpxzg429h";
+  };
+  "debdde2d089368f9ec40b6d50aed4cab14a4e785" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2533444-8b800f9092dc4a4c822daa186a0dd399/debdde2d089368f9ec40b6d50aed4cab14a4e785";
+    sha256 = "1gvk274y842is0k67pancjpbw7s0yqv1lqz36ar2l84b7mky9ncq";
+  };
+  "debfd2113b48ed4529163d952262d80fe8cc11f1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/debfd2113b48ed4529163d952262d80fe8cc11f1";
+    sha256 = "0ijv1i1xdsj15b63dvj1j248bcqylbp62cncza464jzpf1mgmjl1";
+  };
+  "df2925eb96fbc24fb45e29b8553772c650ff8c53" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2791326-4a233957ffc54c94b38c9ceaf84d58de/df2925eb96fbc24fb45e29b8553772c650ff8c53";
+    sha256 = "1msa6jm9c3x8150sci2bbs47l424xchjfgg5ixr388q5fiqjwv50";
+  };
+  "df3e6640f45ebf0909095b9ae74a7cb7404e447d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/df3e6640f45ebf0909095b9ae74a7cb7404e447d";
+    sha256 = "1rg63nvywdrzwvslzpq8z53wkhfm3fgw8x7lzxkqay58v3npdz44";
+  };
+  "df4ccc222a9b196a9484691be86f2d14462b2357" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/df4ccc222a9b196a9484691be86f2d14462b2357";
+    sha256 = "17gf45g193ind6i7m49ckwxrfffryi1xp3dl8gkgfj8q9yvlh01n";
+  };
+  "df5437931a8964c846c6c9377f381c0213082e22" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/df5437931a8964c846c6c9377f381c0213082e22";
+    sha256 = "0hllda7r7v1nvffb504djzc2l6l6bg1ldl3fgn5dz152jgvylq95";
+  };
+  "df54fb21975e218c1da9d209d52b225e78430abf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/df54fb21975e218c1da9d209d52b225e78430abf";
+    sha256 = "0cdj50yxdl4lfpmhydkymzc5p1zb07z86cgqmsyqs3b4xp7a410n";
+  };
+  "df6d4711f83f1c570af30ec97dd418f0664398b5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/df6d4711f83f1c570af30ec97dd418f0664398b5";
+    sha256 = "03vr4pvvr03nwwf4jp3q0fps1kaybk327z6r80cf934q8dq1hmam";
+  };
+  "df7074a5b6e12f2c024e07d5dd9fdcd863f0553a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2574758-8fd9f8c50854489f98b3664933c83100/df7074a5b6e12f2c024e07d5dd9fdcd863f0553a";
+    sha256 = "0m9mk7mr9i2i0rly7jb9vbz000rpxmpgrlawa1isvgpp98nq9jx9";
+  };
+  "df877ce5674ccd5af752d839ce7729c724750815" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/df877ce5674ccd5af752d839ce7729c724750815";
+    sha256 = "087wfyc54y7ay8bh5ml8g46402pk42mmimzvlpskq6vz6hwqbwg1";
+  };
+  "dfd7ec76ea282f899f489dcf84e86c17e2d5176b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/dfd7ec76ea282f899f489dcf84e86c17e2d5176b";
+    sha256 = "0yhnv54lb22ksa1b9rd12jwrpbfia6v46j60qszgp3wfzh927b7p";
+  };
+  "dfdacbcbdca178e9cf577d37637399e02c80c006" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/dfdacbcbdca178e9cf577d37637399e02c80c006";
+    sha256 = "1k16n6jf7jv3ja47faf27vkbhcwn99y6rgfzk5d9m5r18326m6is";
+  };
+  "e002d0958c673752ae43a0801b444a2ce1624b4a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/e002d0958c673752ae43a0801b444a2ce1624b4a";
+    sha256 = "14wkqdp6bwy7i9dx9lb7fxrhwsspxwn9hpsxc3qqd43gbff6vmg0";
+  };
+  "e02e3dbebd645b7ffc82cb42b41d79fd60a268cd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2634392-be4d7ed7261341cdaeeca1438154a993/e02e3dbebd645b7ffc82cb42b41d79fd60a268cd";
+    sha256 = "1gj5921y97f0f64iqf566hpsmm8gf39p0x51ps67r5hk89k52gj8";
+  };
+  "e03589b69f1b5cdf2431809897f2a1287d4d1db2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/e03589b69f1b5cdf2431809897f2a1287d4d1db2";
+    sha256 = "0bwr0lf8b523kwgrakm6cj2rpcaw1ql213xsa4gmaxbqjxmhjwn9";
+  };
+  "e0a2c1da63edd46fd58df91cebed0a6ba9d4e2ba" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/e0a2c1da63edd46fd58df91cebed0a6ba9d4e2ba";
+    sha256 = "1wlxk5v5jabmdg4i6nm91kqgx4lak68455chgyyzw83n3921cwc6";
+  };
+  "e0b52177b69db23587e60178455553700fca7a3e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/e0b52177b69db23587e60178455553700fca7a3e";
+    sha256 = "1dpp1ixnl806d5b7ag0chzd771nrlqpr0vp0xg6sqz77y9f64jdc";
+  };
+  "e0da56b57fd7c9eadf21a0c6bcaa75267e6eddd0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2762618-27ee95221f7a46349f0cabdf112a1cd5/e0da56b57fd7c9eadf21a0c6bcaa75267e6eddd0";
+    sha256 = "05phccb0fvx9li9yr689l2wxbana6hvzljwsn1a2113rkh794gql";
+  };
+  "e10e19c255056c096d6105cfbff767f6749ffeea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2608258-d12288bf79ea446a9353c7f9d223b24e/e10e19c255056c096d6105cfbff767f6749ffeea";
+    sha256 = "0356fyglgynnlm1myic04f0g9c1yz12zz8z4vi7j8plypnsanqs8";
+  };
+  "e119a785ae743089d9760220e95431e5b5a828c3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e119a785ae743089d9760220e95431e5b5a828c3";
+    sha256 = "1vqrm60v9jgd3xdvdwkavxfapl1424pcwm0w9zn4gypbkwfigs8g";
+  };
+  "e1a0aba6fa5c1c2bd71eb9f8b6fa3b6bd0c08378" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/e1a0aba6fa5c1c2bd71eb9f8b6fa3b6bd0c08378";
+    sha256 = "1qvnscdxnyyps3sm2625hjvb2glkcaxj3kd4qhcpaw99p22cp61z";
+  };
+  "e1a2109b7b2cea0b5a275ee93d3ec4dd15bda288" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e1a2109b7b2cea0b5a275ee93d3ec4dd15bda288";
+    sha256 = "0b1namzxfx0pshfcixvzwpm19d29ma70wbsb5v37jx79bwplxvly";
+  };
+  "e1fb2b61f5ab2e0ded49292c3ba53d25ee0e31d4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e1fb2b61f5ab2e0ded49292c3ba53d25ee0e31d4";
+    sha256 = "04xd0vdrqrlnakxg94racp4q4rqq8z383n6jyg798g386gd2nkyw";
+  };
+  "e214f8d9834372bc3a68863ed9b25f6d3468aab6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/e214f8d9834372bc3a68863ed9b25f6d3468aab6";
+    sha256 = "1x8alx8qywjysqs8fznf7f2rgz47ryi02711fj2vdifhiazl81z6";
+  };
+  "e2e2347e195fcb6908121d1d8252b675c0225733" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/e2e2347e195fcb6908121d1d8252b675c0225733";
+    sha256 = "0am2g2w1p9gbdc4r75gib8kadfkzxk0pl93bkggrvbc04gaajq0y";
+  };
+  "e2f498b239aa783a65b663c31fbe397e04857c5f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/e2f498b239aa783a65b663c31fbe397e04857c5f";
+    sha256 = "1abyxjalrqhvinl4agkhc5mwyvi18hip7v6rjvvzxi6c6jvlfbsf";
+  };
+  "e2f8447f74d7ae894d6ebc37fd1de2b774b15bb2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/e2f8447f74d7ae894d6ebc37fd1de2b774b15bb2";
+    sha256 = "08j2hxs3grsfk5y3xfq4ch1z4hd9rwgn5yfzd2h31ldrpyx4r39y";
+  };
+  "e2ff2a15b3b4f835c8275051591b9d4de07df86b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/e2ff2a15b3b4f835c8275051591b9d4de07df86b";
+    sha256 = "0q77kjwr6xi1drxv0kqxc4kbm93r42ygsyxfyk2rqjfa30v72496";
+  };
+  "e3adc0e94fdc76e94c4297ae60dc8b7678ff6d13" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/e3adc0e94fdc76e94c4297ae60dc8b7678ff6d13";
+    sha256 = "1cihl2vayvhqd8g2jvnzirfv2a2c7dadyvg2cmkd8rdcf7ry7r7m";
+  };
+  "e3e99323ec9693b9c6beafc30a7c439d27d51019" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2738466-c1f653d3509f461bb7b24e2d8451128d/e3e99323ec9693b9c6beafc30a7c439d27d51019";
+    sha256 = "1dw27yqsfdh6d8p4d9afwn9pz8dhd1lw1y72vw6vj15ns1m1hsj3";
+  };
+  "e3f2410485eaec849a562752ca8348217b12f390" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2611810-c0cf8ef9a734410da79e56e1df15e175/e3f2410485eaec849a562752ca8348217b12f390";
+    sha256 = "17n58ay2q59xc7d02dxzx4lxcqf1fm92pyz07w6fjlwiqlr30pz6";
+  };
+  "e412f545b4a58b60e62cd1dcf57ca25871356b05" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2515174-63b13cf90d1f431ebc611d28340ef4ba/e412f545b4a58b60e62cd1dcf57ca25871356b05";
+    sha256 = "19vbfalid5jpg1x9dbxip4fbdvpvyrhdjz8wfk9ysiw8nbk1xyj2";
+  };
+  "e4328c9505893ca9157deacf1baf1aea7d01f8d4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/e4328c9505893ca9157deacf1baf1aea7d01f8d4";
+    sha256 = "0ksgc1abgwmhgz9j557l6kj6awdfzivm08dfk0n4bspc8dmdp728";
+  };
+  "e458507f455e3bac9232d632426fc4b75f29841d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e458507f455e3bac9232d632426fc4b75f29841d";
+    sha256 = "1y3w5h0ss3iq6sv0pmzw8n62s3asp616j6n3fqy8vja3bm6s57hr";
+  };
+  "e465c13305ee8aa9186e587aed90d1007e5b31e7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e465c13305ee8aa9186e587aed90d1007e5b31e7";
+    sha256 = "04ig4zfzv4g24yr882hfrx4570jvhd3abvpig9mc1d7x6hg2vnn3";
+  };
+  "e4770351a3cb31df020fd6bff26ce03237621428" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/e4770351a3cb31df020fd6bff26ce03237621428";
+    sha256 = "1sza989jj7mhwv60ridbqpypskddsyx97vrlpflwq4i8xk8f0qhn";
+  };
+  "e4db89beb65b004392150dc83a65a28ea62cb155" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/e4db89beb65b004392150dc83a65a28ea62cb155";
+    sha256 = "14b951ymdf4difjjrcc9n6kg5ib5wks26kdagrr04bdb0qpv6m5s";
+  };
+  "e4e9b76a89d03aea789e6df7b7dcbc13cc7ca8cf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/e4e9b76a89d03aea789e6df7b7dcbc13cc7ca8cf";
+    sha256 = "1v9ldnkaq65zym2d439zbqvybfvpwj30hj6mdhwny84mf71kimmi";
+  };
+  "e4fa82ded20830726a04678904111f9fa6f26954" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621793-1958bfdd4e3b49f3a0ca6a4c08a60a0a/e4fa82ded20830726a04678904111f9fa6f26954";
+    sha256 = "0r22snlddx333vbz83h776njmycshb8kmx2biw7hs4qfyvj99y0j";
+  };
+  "e50119c064462a0e056574db4e21f359f7f0c159" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/e50119c064462a0e056574db4e21f359f7f0c159";
+    sha256 = "0gb1rbclzkxs1c63ylabam1il1nw85xvrd7n3s3gjb7s7dq5mmwb";
+  };
+  "e5146f66274a1f5409227f94447af2a1f4bfafd9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2745394-b798b336538945738fe2766d7bbc5abe/e5146f66274a1f5409227f94447af2a1f4bfafd9";
+    sha256 = "0vcn9fr140kvc5z65ra6qjymfzc4dmgmds4mnzg7n29bfkvmsxff";
+  };
+  "e55d8897009789617d8b961ae3c6c1d00a845bb3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/e55d8897009789617d8b961ae3c6c1d00a845bb3";
+    sha256 = "1rc7xs76q551a7vcy9642jrgvbl97y98gkdqkrb62ibpv3c2g4ps";
+  };
+  "e5e8a89007ed0e73685f9b0366b1eedf31f4c1e8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2608258-d12288bf79ea446a9353c7f9d223b24e/e5e8a89007ed0e73685f9b0366b1eedf31f4c1e8";
+    sha256 = "19w1q3wxbskznn1yiyzmds6dsnnb5ik31lhdqsxzqzjm0hl01m1w";
+  };
+  "e62a73c1c93258f0b94c3cc46e35318469afe84e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/e62a73c1c93258f0b94c3cc46e35318469afe84e";
+    sha256 = "1yrwbvldncip3xpcxq2n9q707z21zg85yxhgvp37j24nqagm6wfi";
+  };
+  "e65191a9b59946c7f04782468840b7352ab5c96b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/e65191a9b59946c7f04782468840b7352ab5c96b";
+    sha256 = "0q8qnncfb723n9ljzfsyi7v44q2301v37c2yjcaqdvs6vaij517x";
+  };
+  "e67a9dfa527d0eeb0ed24ef9d5e22b41baa25251" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/e67a9dfa527d0eeb0ed24ef9d5e22b41baa25251";
+    sha256 = "0vplmbsk6zpr416x96fdshakjymwa631y78c0sr24gqd853w88b4";
+  };
+  "e6a8b07d1017a517555ae184a3ce22fa2b948c72" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/e6a8b07d1017a517555ae184a3ce22fa2b948c72";
+    sha256 = "0wvi5d9ndis8zrbxgy62m6hmr3bvgygfw4hmq6gqay12z78rvchy";
+  };
+  "e6b8c05e76abc49f7a2264f2b95199b825fa851c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e6b8c05e76abc49f7a2264f2b95199b825fa851c";
+    sha256 = "0m4dwy0mmyr0f1vjk8grqiapwc1q36cj3ischp2gf2ibj1xxiixa";
+  };
+  "e6fda4b3f8fe12c3bbe8ccf91bdcc8d759ea1ea2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/e6fda4b3f8fe12c3bbe8ccf91bdcc8d759ea1ea2";
+    sha256 = "0ggsvrwnfp10h4ns5vadpxnxm6m0nf5i0zr3i57k2h2kxx7vn192";
+  };
+  "e70061ffc85b6027a648cac0b1c8c6ef7d4e3106" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/e70061ffc85b6027a648cac0b1c8c6ef7d4e3106";
+    sha256 = "0y2lka9gippprgffs4w1p6yh3kvj8m3d749ysbc8lwjvijhh0dyg";
+  };
+  "e70429fd818fe983008a06e931d39724ea7a382c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e70429fd818fe983008a06e931d39724ea7a382c";
+    sha256 = "0vhfpdbbv46z7kdl1dlnn7mlcpvygn4k6fb8wdgykavp0phzhj4j";
+  };
+  "e76c34cb7cbdb14d92e415c4af5ccdc344c4c58d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/e76c34cb7cbdb14d92e415c4af5ccdc344c4c58d";
+    sha256 = "0jkx8w6p77l53233cac8gzbwdmbbs3znkw588g8mcvwzkpszwbxi";
+  };
+  "e77064e9ba8339459d66bc680e55880bbcc5991f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2467022-c410c14385ba462bb86b4995040cdcb9/e77064e9ba8339459d66bc680e55880bbcc5991f";
+    sha256 = "1fc9jnqb7l5v20asz6cqyrp8vr0617n35k41wrqdcsy0qib9alkn";
+  };
+  "e7808a43acaf99637e43857c76760d74f77d6ae5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/e7808a43acaf99637e43857c76760d74f77d6ae5";
+    sha256 = "0s88msrsnmcqnjyzk7afzf6wikwyajjlybq7jsjyfaax4vaj1cbv";
+  };
+  "e7a4ddc64af2a43bf5c7d439244636d60a7dae07" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2500002-69b23dcf7a2d4165b2b432780845acb0/e7a4ddc64af2a43bf5c7d439244636d60a7dae07";
+    sha256 = "13i3cnkrkk0z01bf0prl77wmx4qbnckihgbxjv34lizv3mhd1yzg";
+  };
+  "e7fdcefcd4a8853ab010e1eb4f2d88b5bd9726a9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/e7fdcefcd4a8853ab010e1eb4f2d88b5bd9726a9";
+    sha256 = "1v4yq5b9rng7p1jsvhlnqvcxpnfd1iwmnmd9ygq25prxirlklx8z";
+  };
+  "e85ad2ef6896adbbc28a46b023af6b64deb29b88" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/e85ad2ef6896adbbc28a46b023af6b64deb29b88";
+    sha256 = "1albg4m9z0g6rv7bqd3mzb8k6r07n6hin3s05gzhl21qqiarwf95";
+  };
+  "e902a543218c50ffc9cd9a41bd8d53d0df1939c2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/e902a543218c50ffc9cd9a41bd8d53d0df1939c2";
+    sha256 = "17b3c4kp6a9kbs2k473zygn7w2xmmb19z3sk08alcp658isby3l4";
+  };
+  "e997f5bba3b4d4b283427ec3ca644a876f6dee7d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e997f5bba3b4d4b283427ec3ca644a876f6dee7d";
+    sha256 = "1gc2rzz40ipkjy17fz6qiwsv2wxi4qmblmp0rbvafg8mgrhs2jnf";
+  };
+  "e9a64dd557215b53134c33355716c8a4bd1e22f7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2622402-86d1483fa60742b6be9fd5a0b0b946e0/e9a64dd557215b53134c33355716c8a4bd1e22f7";
+    sha256 = "1kjvf0spvmp1r8yh75n39a64w3xp1qiw17w8fv6lip3df8dbjywi";
+  };
+  "e9b508ed95c44a9c9e0d979b1ae02f7dcd5590a6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e9b508ed95c44a9c9e0d979b1ae02f7dcd5590a6";
+    sha256 = "01dl9z60593mizz76sg55zhc949sgxcdp60vkfhrdkhl1l212sga";
+  };
+  "e9c7b3390ef65a90310c9cd4a97594bff007303c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/e9c7b3390ef65a90310c9cd4a97594bff007303c";
+    sha256 = "0jnx4b7pkycly81dka9vn01ky96j0xnzxg0f4z5fpfl8z8al3cgh";
+  };
+  "e9cec016ae177e586ef08f408aec2f7c4de9afdc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/e9cec016ae177e586ef08f408aec2f7c4de9afdc";
+    sha256 = "0k193y1kbmjq6yjxdgv59w1dn9f1b8i7yr2dbzwi2cr57wx3h483";
+  };
+  "e9d6f32dcb7a670874503cb3cb5d73fd9cb09cb2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/e9d6f32dcb7a670874503cb3cb5d73fd9cb09cb2";
+    sha256 = "0k3rw21ngsf677m8q4n1zil9fmbsdd97sxss3jv6hkyjq5r6djxl";
+  };
+  "e9f10cc1fed35407864f324f08f3c9fcb5a2847f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/e9f10cc1fed35407864f324f08f3c9fcb5a2847f";
+    sha256 = "1fz73zsa0f4dma3v47s0dcgdzz8aniryvmpx9rpx955rckrrawsg";
+  };
+  "ea58f8314459f7bf1d36a672ccc1f2c60c4e0eba" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ea58f8314459f7bf1d36a672ccc1f2c60c4e0eba";
+    sha256 = "1xlyfkxpk86w2ik8ppx6czlx6b5jfvz33k6in9y0zvpi1mvkvam3";
+  };
+  "ea7cb20f21cb971f2f7da29210e7bba16e97a53f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ea7cb20f21cb971f2f7da29210e7bba16e97a53f";
+    sha256 = "1vl4hy09jqhb9h43gn6ymnq2027yc7cfvwh5bn860mj5syayjznl";
+  };
+  "eaceaa2d359d151c5394522df962ce393938a21b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2608258-d12288bf79ea446a9353c7f9d223b24e/eaceaa2d359d151c5394522df962ce393938a21b";
+    sha256 = "124s81bi0y3sx8r6f4qp7mb5294bivjickw7izg0qym3r35vpvy8";
+  };
+  "eaea434c65e3ccf8cec643ea1ec391bdddbc6fac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/eaea434c65e3ccf8cec643ea1ec391bdddbc6fac";
+    sha256 = "0mdxz6820gcwgzaaipg8k0psddp4i5k0kgl4771kp3my736zsdp1";
+  };
+  "eb24d02e3515e1a1c0df3b6323b5ba9b795e16e3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/eb24d02e3515e1a1c0df3b6323b5ba9b795e16e3";
+    sha256 = "02768h2a16rzwn5d1qrcbxydi0nijyaf301aac32ngsp92y24ycg";
+  };
+  "eb942c482591c680356ad05c627b9153756a5c8a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/eb942c482591c680356ad05c627b9153756a5c8a";
+    sha256 = "05vpd0hwalasgjskblzqba8xadmrj10mjsvqis7chdq0am7g66r9";
+  };
+  "ebb51925dec18058068c3d6ba8d32c6bd5d8f5a8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ebb51925dec18058068c3d6ba8d32c6bd5d8f5a8";
+    sha256 = "0k1w16kh1fbk255qg9lhnbb192lifjskv5mqkd95rmzacpk1vypi";
+  };
+  "ebcdbd3113ce1b1b12aba710b9ed475f2b77bf74" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ebcdbd3113ce1b1b12aba710b9ed475f2b77bf74";
+    sha256 = "0iqxilmibqdpcl0k2qvcipw1nphvxykqi0b04si2mls71lawrklz";
+  };
+  "ebf62a48af4d0a972019aca5d8365670d7260bdd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ebf62a48af4d0a972019aca5d8365670d7260bdd";
+    sha256 = "14gfqpfqr5nnj8q26vxa10c5p793zkf57j60563bk5ijm2rxrmgp";
+  };
+  "ebf8732591def396954f78bf472667f690877f95" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ebf8732591def396954f78bf472667f690877f95";
+    sha256 = "13p11mvlnanlc64ap1xmq69m0gqgcks2jvh0f3j546dgw9x36yvc";
+  };
+  "ec13b2ec5777dbbd7c22e1e2bdcb3e127496b370" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2621793-1958bfdd4e3b49f3a0ca6a4c08a60a0a/ec13b2ec5777dbbd7c22e1e2bdcb3e127496b370";
+    sha256 = "0fqy9izbfficxmzf1pbw9w4yasvs55dawm0186afpkg7gcc8rqvd";
+  };
+  "ec35da884d7ee63a6b73a14153ebc0ef84e83072" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/ec35da884d7ee63a6b73a14153ebc0ef84e83072";
+    sha256 = "0vg8qmf8v73d2zg51yixzhsrgd92d03s5lfviympplshychims77";
+  };
+  "ec59e3143dfd3d4c018548a31a6481bc3f9e1137" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2431986-5a8dd079cf514ebd8b20693fadfa5a4e/ec59e3143dfd3d4c018548a31a6481bc3f9e1137";
+    sha256 = "1qfg4cmvb07q61rkj8ca6wzly9zzfaqbx77jlvy5gc0yn4mpijfy";
+  };
+  "ec5de1727c79fc933c910e364d19af5e7ebcbf99" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/ec5de1727c79fc933c910e364d19af5e7ebcbf99";
+    sha256 = "1cppbmy26118b0gxz6j4zk0zi9rlnd2v1pcbkj1ba86mh6b2d1bh";
+  };
+  "ec6d576df884aeea2ed37256df7caa8cc8040d6e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/ec6d576df884aeea2ed37256df7caa8cc8040d6e";
+    sha256 = "1139k9957gbripd65125gp72lg303z10j7yzkfafpbkkixbsi4n1";
+  };
+  "eceee0a55c343bdc9f43a6d2a6e1f7ae7429da77" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/eceee0a55c343bdc9f43a6d2a6e1f7ae7429da77";
+    sha256 = "1xd4y3y13qw8nm29d7w55k2cdy50j3jsndm7yhay2ciwwl9jqlhp";
+  };
+  "ed023b655c8dbac838b64bf7e6103b7e9d563ad0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/ed023b655c8dbac838b64bf7e6103b7e9d563ad0";
+    sha256 = "0d53hk0wkgrr8nwa74326ni3z00fmwvifq1i1fj4wca0n3qlgq3j";
+  };
+  "ed23ade7aa2af09963a993ee53ab33389aae2e80" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/ed23ade7aa2af09963a993ee53ab33389aae2e80";
+    sha256 = "1215la804zb4hnc6ily5vjzyrvzb0npyjfjl19kb8qrmcyiymfpz";
+  };
+  "ed2c9b990f683ecb84050df89e925e9f65e3883f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/ed2c9b990f683ecb84050df89e925e9f65e3883f";
+    sha256 = "1aixypsgvv780pyy8ncizmmysfx1hjym9rbb3m0h4xiizcl4q5ym";
+  };
+  "ed384e6a16f79979d70b9926060a68eeb610de53" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610584-8220d2cd9ec743a5b8ec0d50768a5d76/ed384e6a16f79979d70b9926060a68eeb610de53";
+    sha256 = "0bx62ijccnfyrknqrcw3ymvzvdjgc0qpllzaqn9vhnygxsjy4w2f";
+  };
+  "ed8d4fee989f83055b4947da8ddd5639f8168782" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ed8d4fee989f83055b4947da8ddd5639f8168782";
+    sha256 = "1gf587b6qa3n3m3abshiw26nypr4wnzzj4i9qycfr33aasasgckg";
+  };
+  "edcad0b0c2862c776fa60784960b9a3a8b3ce6ef" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/edcad0b0c2862c776fa60784960b9a3a8b3ce6ef";
+    sha256 = "10ffm3i1lbyx05ffl8mksp58kagfwdh8kqfgplyxnlxpn2qxf48f";
+  };
+  "edd66f69f77a99b2383d34436d6be71565769a43" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/edd66f69f77a99b2383d34436d6be71565769a43";
+    sha256 = "0h7giabjphgikhdrc6r662xb0ahw4spr89jhckzgplr4l8z8nzz5";
+  };
+  "ee33cb45be04ea08ab507a4058d81bcdd1da7746" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2761703-4d21a69f627145d58d1b542fa90eeb3e/ee33cb45be04ea08ab507a4058d81bcdd1da7746";
+    sha256 = "0n99fhb5qng2x0y5rxp4x88jsdcyqliqi1z078lj6qhsjd8dmqlh";
+  };
+  "ee8662030dbca92bd70af3ba1550ece5c275d13e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/ee8662030dbca92bd70af3ba1550ece5c275d13e";
+    sha256 = "00hfl5h4yk3mc8dhxrlk0zg8nyfgrnmzzhglk0vgzi3mkcvc7jv1";
+  };
+  "eeaa24c1e61cc4b0806496b256349c44f84c02bc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2615502-35e684f430004977ab5aaed43a0fab81/eeaa24c1e61cc4b0806496b256349c44f84c02bc";
+    sha256 = "10kzf6q01v3xd9s7d594biwjy4zzq4wgnqq0ib50ii62rsvli112";
+  };
+  "eef24b0bf5f818f43c64498f50e0a79f5b683883" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2612065-7518df1e66b64067baa9f5dbe835628e/eef24b0bf5f818f43c64498f50e0a79f5b683883";
+    sha256 = "0sg9nyp4gvcqmxdx842nr9szfk1fmi4nrwxmmyvqhs774xavxw4d";
+  };
+  "ef8182b6df585c7dd91f05618e06fd8ee15be5f3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/ef8182b6df585c7dd91f05618e06fd8ee15be5f3";
+    sha256 = "1xrjsspjnfapf26k3ppjx3fzlfcq7qdnxwhvfhn4669spw0a8zgi";
+  };
+  "ef923ee8da67064c7a03f02651b14c309db14a3c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/ef923ee8da67064c7a03f02651b14c309db14a3c";
+    sha256 = "1rc0v251migvcrhvxc7cmv3c5qp1a51fzff6whl7h1qqbzc82ick";
+  };
+  "efd4413cfd5173a82811ede79b4a13bad5f6a450" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/efd4413cfd5173a82811ede79b4a13bad5f6a450";
+    sha256 = "1f76f939x8xkp5z2k8p0i70ig6i2m4ryj9lrc3x393sjlj26nqaa";
+  };
+  "efd812740856e722b88087211add0e268de83d7a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/efd812740856e722b88087211add0e268de83d7a";
+    sha256 = "0yj404y245zicyqgwg2bs9l14gr9vlaakrawk3hdrr24m4lczyz9";
+  };
+  "efe81a03fc4e327388573f361faff5b233243834" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/efe81a03fc4e327388573f361faff5b233243834";
+    sha256 = "1hd7zv4pv604pfbvfya15g3rba9ip6pbzqm6vazi7q7znigzxyql";
+  };
+  "eff7dae5ebb303e1c5f823e0de1accf1075e8402" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2638350-39632eb9e5f94ba4ab8e97fa2d5a3251/eff7dae5ebb303e1c5f823e0de1accf1075e8402";
+    sha256 = "0fa1ikjab52kxkrxb5lnajvwa2ims8d5sm7mi52sx1f67gb3dnb3";
+  };
+  "f0263ddc2018e02536d900df1e275809633e73a5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/f0263ddc2018e02536d900df1e275809633e73a5";
+    sha256 = "0likfdcz1k5acs9w9gxb4r7236ws01cwllrq8qnz3sc2ym111bm1";
+  };
+  "f04bb0803c834328c048cff05056081b1d0e8120" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/f04bb0803c834328c048cff05056081b1d0e8120";
+    sha256 = "0rncg0q01swbkl9pwr7jia19vgpx2yyl1bmyf6l9gz9sfmin1a1i";
+  };
+  "f0887df1b56e17573badb6af33d52f7ec6fb6138" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/f0887df1b56e17573badb6af33d52f7ec6fb6138";
+    sha256 = "1n0gg5af4i0bm854fbv7bvinwgjqda7fbr12q4zm0wqw41r19l3s";
+  };
+  "f0ae004e1cc9e390958b1988391d02b9c74849c3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/f0ae004e1cc9e390958b1988391d02b9c74849c3";
+    sha256 = "1k3gdybbilnkpsd2qf14gn6a0klb8ggdahmlp6wa373pvxf71vz6";
+  };
+  "f0d6a898c18d4750e572c04c2dc290f0628f238c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/f0d6a898c18d4750e572c04c2dc290f0628f238c";
+    sha256 = "1a3ymsi7x4aw0dgb5i1yfq517x9i9fs01mb51irxaamiavxw2zdq";
+  };
+  "f13495e23590f813c800280c335b159a2f568a9d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/f13495e23590f813c800280c335b159a2f568a9d";
+    sha256 = "14d25nmaic3j24dl6viy09alqi63q8vw71wzi7yxyhvgzy51ajv9";
+  };
+  "f1372e2ede9021ff61444ea132b18024ee271b60" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/f1372e2ede9021ff61444ea132b18024ee271b60";
+    sha256 = "113m23b78k218ag72040ggm73846xdyyyfqjc83pzx5g7gfzswyk";
+  };
+  "f13adaffef53d65d806c3eb02f96c6c7f0ac7272" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/f13adaffef53d65d806c3eb02f96c6c7f0ac7272";
+    sha256 = "1i7kv84qdf1srg0828yl4a984pc0c5gh6iqlh2wngxrk79vpvrmh";
+  };
+  "f14abb295c0159f6c8c07119ef3cd201b5062479" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/f14abb295c0159f6c8c07119ef3cd201b5062479";
+    sha256 = "05vakydf2xgpc07262dgv8h0761jswjcpz5z4gp6kan550zx46z4";
+  };
+  "f18da05b89b485f1870ff2b88125f3c1511f8805" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/f18da05b89b485f1870ff2b88125f3c1511f8805";
+    sha256 = "1xp77cwjj0iav25hk3w7n25mzchsbxbbkqhlicvqh41y4q489sxd";
+  };
+  "f199d69df437b77400f96b6d2d4f02360535404c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/f199d69df437b77400f96b6d2d4f02360535404c";
+    sha256 = "1cm14f0i1k92l4flbc00gwvqnvpiwhyyx0g0rf4ssnyp2is9jhy3";
+  };
+  "f1e035fa0d8b44b2b3aeb9958e9dea3862744d82" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/f1e035fa0d8b44b2b3aeb9958e9dea3862744d82";
+    sha256 = "10k3dhgg4h26kjxrvqbvzx6vxq5v9qyi4iwk2csjpyp6xpwzb74q";
+  };
+  "f2374c3116e4d1fae6b4cbd246c9033e282a6c10" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/f2374c3116e4d1fae6b4cbd246c9033e282a6c10";
+    sha256 = "07bjgb6ip8gzyckhsjwi1nlby9059givw8i7gxx09j9xmq6s6n15";
+  };
+  "f24d05b616e3f50a24367e32f8c42d68d40797a3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2605550-2722e8035d7444a18952cbd04a5c58c7/f24d05b616e3f50a24367e32f8c42d68d40797a3";
+    sha256 = "01an1abvb6w7id44avc3fp35919avvqspmgl24ygp872xz6g5glh";
+  };
+  "f268daf62521a638834ffec5779bd359e0ffe63d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/f268daf62521a638834ffec5779bd359e0ffe63d";
+    sha256 = "0z4zbyjm9vlzk14r80j9ka8hdinylnbmf43mpna4rva27rqwsprh";
+  };
+  "f279ae70e30f66de7b592409e9ed96993301657f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/f279ae70e30f66de7b592409e9ed96993301657f";
+    sha256 = "057dpl4pgjd8p98vik95gwdj2z42al9ibr210h1j92jdvyjxg99z";
+  };
+  "f286035c2605a855fb9dda2fc06bb71648b1dbe6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/f286035c2605a855fb9dda2fc06bb71648b1dbe6";
+    sha256 = "10vsqbadg5y58skq4p79vdxlkwqqfvac5v91kq4dflgcs4h05960";
+  };
+  "f288cbb85cc9eecfcf90abe6376c32c54435f879" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/f288cbb85cc9eecfcf90abe6376c32c54435f879";
+    sha256 = "077rd0cqcpl629niwgs2qldrh4ld2xyiskg5x32m9igfwkq8dxyv";
+  };
+  "f2c0ebdd94707b207218226a42b19201386b9713" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2634249-f2b4469cf0774eac818e7cb4565f1224/f2c0ebdd94707b207218226a42b19201386b9713";
+    sha256 = "126bhrrj1q7b04wpbiyk1c8j9dpnkinfmm47z330jwis5mblrzzy";
+  };
+  "f2cc42adcfafd68a62e7d1b7e6af4e4968c0be10" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2572690-84e70917b1c64a80b248151191ccd58a/f2cc42adcfafd68a62e7d1b7e6af4e4968c0be10";
+    sha256 = "0kqv0iiy4fmcnbizc17kl3h8jv1knvn0h687fdjk68jhpkfh1fmv";
+  };
+  "f2dfdcb3b2d9423b17c83e2bf5fea37b9bee4681" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/f2dfdcb3b2d9423b17c83e2bf5fea37b9bee4681";
+    sha256 = "1p8dafdpjr058agppmhm2b5flsgk43f7rzisiplhw3qbmxn8s98x";
+  };
+  "f2e462f932cdcf953218a6d7c9cf6aeebf7dbfe4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613635-9840736c5f9647ffa600ff7b7e36f4ea/f2e462f932cdcf953218a6d7c9cf6aeebf7dbfe4";
+    sha256 = "07ypkcwj25x76055p99z54qramz975wlk3px6wy827i79zpgfx7s";
+  };
+  "f3543f8286961b827b3ed3afa8f7663b98d38b90" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2787088-b587684669f0414288401564922cf5d8/f3543f8286961b827b3ed3afa8f7663b98d38b90";
+    sha256 = "09lc3lpn3d0hqpldqld38l7lgdj9xscnnsamly8bxcajm3y3d9vr";
+  };
+  "f355e6bd836583380c61a5ed5a0c5d6150fe7542" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/f355e6bd836583380c61a5ed5a0c5d6150fe7542";
+    sha256 = "1pblr5r97iwmyv1j54hgsisdp4f7vp3l8mwj8zkiggk7nih7yi03";
+  };
+  "f380b2adccc3afba7a9a9a501560525a8359a651" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/f380b2adccc3afba7a9a9a501560525a8359a651";
+    sha256 = "0dh4k513j0q3h4ja144825fcc4cib1pfzjcpsr79kaj0villfp6i";
+  };
+  "f38889741341129aaa57f66f2c36e093673c46ea" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/f38889741341129aaa57f66f2c36e093673c46ea";
+    sha256 = "0nazhgzcmmrkkdjfqp29q2m01ca09cg2wwa23nvrjxra1bx394p4";
+  };
+  "f3a58411dee61c2a7993eb792fffd09b343e42eb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/f3a58411dee61c2a7993eb792fffd09b343e42eb";
+    sha256 = "1xffc2cbd8ccs1sw7yy8vvqy9pvngg5jwlp4g8hnyvvf2jpd0532";
+  };
+  "f441f0d4f281e728c3ca0c5b5f0e5838637eefba" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/f441f0d4f281e728c3ca0c5b5f0e5838637eefba";
+    sha256 = "122bsyzki9w8b2yz5l68k6yz9r4w7zs1949ii0ccy2d5dd707zzk";
+  };
+  "f44c1c4d05656c9a8e943d8738705031cef49e0b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/f44c1c4d05656c9a8e943d8738705031cef49e0b";
+    sha256 = "0piwkmqxqgp7i6r5z39xv1yqwx4v7k01yy2l4j70fbqa8zcvikdw";
+  };
+  "f4569ad2ff2b2fc1e09a93d172caa5084bdfe887" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/f4569ad2ff2b2fc1e09a93d172caa5084bdfe887";
+    sha256 = "0hnzdxvy9l3jwp6mp9hfvgks9mikpbhkdnv9dc3ydyw46f8d8m6f";
+  };
+  "f49df27b644738c41a183cbea4451a65d6ed937d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/f49df27b644738c41a183cbea4451a65d6ed937d";
+    sha256 = "1j2y6x1yilb35snqpsfz4d253hry23zbc2i1cas05yz7j06d248a";
+  };
+  "f4ac5ca56e38b43436485f6d2a480e5bc47d1e3c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/f4ac5ca56e38b43436485f6d2a480e5bc47d1e3c";
+    sha256 = "1cpdciik3mh3nh4z255yja75fpvsq1bfiwd5zlia95ypvfvvabyf";
+  };
+  "f4b57562abffd4d02b186411d743d78de996f9c1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2528371-50b896349a4f4b48b4cce5ef240b0c45/f4b57562abffd4d02b186411d743d78de996f9c1";
+    sha256 = "0lih22kxxnrnq7bg6hgmcszrjqidh89z6kz38c607wfgqks3f3fm";
+  };
+  "f4e5c321293ab07639b720b5f3c43e81d2476f5d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/f4e5c321293ab07639b720b5f3c43e81d2476f5d";
+    sha256 = "1rrzw4yms3rfdxb51sz6lfzh7w34v79fb6nlmqhs7zgjqg7nj5rq";
+  };
+  "f4f360f81e0fe0c3b19ba2e927c0edf2ca16dd74" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/f4f360f81e0fe0c3b19ba2e927c0edf2ca16dd74";
+    sha256 = "1ynp6x1zwx4kahvjp7c3k62f5kimg37l28v1jxrk42c6c590a9k1";
+  };
+  "f4f52945149f9b540099572fcd29c911f8f8fc18" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/f4f52945149f9b540099572fcd29c911f8f8fc18";
+    sha256 = "05jp9y3bsm2a5vyr6azbgn6isiw00wld1vbyw8f5sc7j4rbr2c8c";
+  };
+  "f51cdb5d1eca4ab02befd826a9ff14a8d168ba9d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/f51cdb5d1eca4ab02befd826a9ff14a8d168ba9d";
+    sha256 = "0089lky37w6yfm4xlwqdlrdj3jj6k3bkyhw3nbhprlf94r8h8s5s";
+  };
+  "f56a72b63003eb41d4300d8b2b39b21f53acfc8c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/f56a72b63003eb41d4300d8b2b39b21f53acfc8c";
+    sha256 = "0a0f4vfpncifw87j6h0ajnzwhk9d0s35l5s5dad6rp0ijh6d5axv";
+  };
+  "f56edcc07a586e9b6792c219e9e8eca444362bfa" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/f56edcc07a586e9b6792c219e9e8eca444362bfa";
+    sha256 = "1nk5jxlgscmsv9hnjqprsbkvc2g3wcdqx04xhnzcr992b4xr7p9a";
+  };
+  "f5a791771dabe2848c00de5551dea8e2ec534cc5" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/f5a791771dabe2848c00de5551dea8e2ec534cc5";
+    sha256 = "0wrs36vv55lzbzn2ixqyjnf15mf41xzbw7fvfgzcdxcmpscc76cy";
+  };
+  "f5a8823af793b1af1d0d25d57df351ef32bf3d40" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/f5a8823af793b1af1d0d25d57df351ef32bf3d40";
+    sha256 = "171lmzp6i9l2inwhpcif35v8j00dg44ipfkq1fxay58iinqjk9x1";
+  };
+  "f5d3ceb33b27c7cfc4a8e4689a6b49f594aea8e3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2590354-88fba4596efa431eaf994358f50a5f48/f5d3ceb33b27c7cfc4a8e4689a6b49f594aea8e3";
+    sha256 = "0pfplb9yqmhzxzkafhi8j5c8s7y9wqywrzxs7av8hnrhxxj0nasa";
+  };
+  "f602c209a799d0cc6814312718f806f70e09062b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/f602c209a799d0cc6814312718f806f70e09062b";
+    sha256 = "1kjb7vbq5xqz9wdbcwsyayr6mrl5r6zczqb7pjpgavwx7kfk5xw8";
+  };
+  "f65aee70832fe31db72589b465574d372fa46ea9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613304-102512ed386740db8ece250c091d390e/f65aee70832fe31db72589b465574d372fa46ea9";
+    sha256 = "14vany0873b0hsa28g724fj1zrk2ls4jwjrhs379wxmddhllrrfv";
+  };
+  "f6fadd3d388c12b5d7246b025244646c62920fdc" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/f6fadd3d388c12b5d7246b025244646c62920fdc";
+    sha256 = "1qx4xdscnfg5aha11sfvkqrp5w7db2idwhak9vph9fd5r2kg9anx";
+  };
+  "f6fdc33805bc89e2eaff8003a996f6bf8f880789" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/f6fdc33805bc89e2eaff8003a996f6bf8f880789";
+    sha256 = "1r5hx97nasmk8m37pw490im1fq85q35khjpm5kq36byly3f6nvph";
+  };
+  "f7301b809afdfc0f640f1ae1c5683ff024e82766" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/f7301b809afdfc0f640f1ae1c5683ff024e82766";
+    sha256 = "1bnbh14kj5ywifry0xnbzz1j9shnxizwamvi94ddjxidxacg8byh";
+  };
+  "f7543772618d958884a94ad5d6a90a39de6049c2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/f7543772618d958884a94ad5d6a90a39de6049c2";
+    sha256 = "1hl95yhmxgs6qwrg4fjlk1klqdf7wdssid60ysm7dyqcaf0pxq1s";
+  };
+  "f7a44be87cd8b2cc22a5c6580998902cd597ffac" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2615502-35e684f430004977ab5aaed43a0fab81/f7a44be87cd8b2cc22a5c6580998902cd597ffac";
+    sha256 = "0zcdg0hyrb57wl3hy3w5mh1jibd31k9lcj3sa1bqx1wvgy3axs35";
+  };
+  "f7f52ad80e2bfa86c133febe8231fb1c1f321c68" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/f7f52ad80e2bfa86c133febe8231fb1c1f321c68";
+    sha256 = "1wmasx8b2vjprs16iz2mm6djd0f9j5j2jp9mii9s55hqlc2x3zlv";
+  };
+  "f7ff067e31d48918ce41494b39f2f30c48890e55" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/f7ff067e31d48918ce41494b39f2f30c48890e55";
+    sha256 = "1xz599vrazq3gk6jcdnsrvg20dy6dfsjacm71fgi61ja9mb85kbx";
+  };
+  "f859df604a7deb221be8fb75f5eabac9a4518834" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641912-e998389b29084ea288ee35c8e738d35c/f859df604a7deb221be8fb75f5eabac9a4518834";
+    sha256 = "1mh460676fcx2557fjkfkvwl2ahxwadqyfa5axaf07fss3dnj865";
+  };
+  "f859fcf20b1d5912f1dd1fba6f9bd4393a014968" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/f859fcf20b1d5912f1dd1fba6f9bd4393a014968";
+    sha256 = "0nqg6j8kxhs5qrriaycj0ihv5hwwj8h5w4a9zjs2c23982cxgd6y";
+  };
+  "f8a7fca733ca940a07647121bde451787b5afb66" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/f8a7fca733ca940a07647121bde451787b5afb66";
+    sha256 = "18kg4v54a769z22py9zzm4llz6r8kf38nm1i54704mkm5py2h35l";
+  };
+  "f8deb83eeba474abd3c4332328d32de585f40d2e" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/f8deb83eeba474abd3c4332328d32de585f40d2e";
+    sha256 = "0ra7znx005gdyzybn66246bwjdkx3bwmzi99k0wqc8h3np0x3vh4";
+  };
+  "f938e9fb108c5df460b316ad63f8e4d43de264a9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/f938e9fb108c5df460b316ad63f8e4d43de264a9";
+    sha256 = "0xy3y79i0arjb3qcmq1psd3xbync91zbdfyxg2w542iviwcqx8b9";
+  };
+  "f9b69d517e1417f8099af43fbb448801dd00c40d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2539301-e5e4001afc404628b562e71e48fbe47f/f9b69d517e1417f8099af43fbb448801dd00c40d";
+    sha256 = "1813v1a3aaxpsa8fwfkwc5ik9fks5fcs1xy1spdag422iqg7752r";
+  };
+  "f9c0960de898d46640b7767a29c2119310539a4c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2612065-7518df1e66b64067baa9f5dbe835628e/f9c0960de898d46640b7767a29c2119310539a4c";
+    sha256 = "0vj3giryjmh9g43bngrimn0qm7lv41hsgwd034db6n341q2dcpsc";
+  };
+  "fa0f4ef2e4265e7a8b79791ead562e32bf436c05" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2431986-5a8dd079cf514ebd8b20693fadfa5a4e/fa0f4ef2e4265e7a8b79791ead562e32bf436c05";
+    sha256 = "1570238pvmaj2id29whvch7hn8914b2d8adf0gy6mcckgrjlx8d9";
+  };
+  "fa392f24144f8018b8a29676f4cae4fe188e7a7b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2610711-48667bb021d647959b5e191a0aa242db/fa392f24144f8018b8a29676f4cae4fe188e7a7b";
+    sha256 = "024xcvz6jh5zvx65rrip7wwrixpzdc3ww1kp6711w15qdv5nsqhk";
+  };
+  "fa3c3cf43525a5cf7e63f9b4de6d7441a0e826af" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/fa3c3cf43525a5cf7e63f9b4de6d7441a0e826af";
+    sha256 = "172birg7k18453hdz4smcr28n1dg3pvb8p3w8knjqmmg8kgy6lqv";
+  };
+  "fab186b2b42815a73845c32093d591f8d4623f0a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/fab186b2b42815a73845c32093d591f8d4623f0a";
+    sha256 = "1h55af59wbw1rq5gxrca12k1f9n65kxrqnp5bczvlmcm1nb3gi1h";
+  };
+  "fab30d459fc6efe51b656ac70e86c70a8772e5ae" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2528371-50b896349a4f4b48b4cce5ef240b0c45/fab30d459fc6efe51b656ac70e86c70a8772e5ae";
+    sha256 = "0zfymfssbgb22ixpqsiylyzygs331w5dnkjwqs1i6nwi5i2i83ds";
+  };
+  "fac6370a5441886d40a7aa7b4494da0c3304b397" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/fac6370a5441886d40a7aa7b4494da0c3304b397";
+    sha256 = "1y3b4rs1ca5v0imxx7iijr9lzxawf4brjdm62haxv6wadaqd27qm";
+  };
+  "fb092729cca1243487ce2f17b83e612ee2e645f0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fb092729cca1243487ce2f17b83e612ee2e645f0";
+    sha256 = "136ddzazdpyzk4178g7c88adh50c91bcnv993z87fny2yzc71rh8";
+  };
+  "fb175aabdcfafb6d77b5b7bad0de2c37cbabac81" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/fb175aabdcfafb6d77b5b7bad0de2c37cbabac81";
+    sha256 = "06hxp3g03bk3dvwnif9f5yhl6fc4dah722x5sabhi9pphq0z3ckc";
+  };
+  "fb4d3c4309ce988d3ebc299d517c232e83fdfe7b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/fb4d3c4309ce988d3ebc299d517c232e83fdfe7b";
+    sha256 = "1qkg8zi3czwsija16npjjgfkb2k15q6zrrp3f6nz6mn6443248my";
+  };
+  "fb634cba7663cb05cb4751272114071ba34cc677" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fb634cba7663cb05cb4751272114071ba34cc677";
+    sha256 = "0qd9raqdaw6ayza6ii6hs79ah97pb957bb22azvijmk6p2a81krz";
+  };
+  "fb807fd862137423f4c6611e8ee553e2b04a62e7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2785401-212f8ec6a3d142c8bfeb17366702bbce/fb807fd862137423f4c6611e8ee553e2b04a62e7";
+    sha256 = "14b8pbm93xd7nrb7spwb1wpsiyrqksb25y4mfn2inaismakzxq8p";
+  };
+  "fb8b95b64656d46eb01aeb66dc7607697828e39f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fb8b95b64656d46eb01aeb66dc7607697828e39f";
+    sha256 = "1bznalkd43vbl6x5p0mwpnjmjvs91l2v0nscling0csxkkkrna1w";
+  };
+  "fbc4c9072ed5c93f777e5f6fe6f43486862fa0b8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2613671-efa8cb7212aa45139aff99785a99f6c2/fbc4c9072ed5c93f777e5f6fe6f43486862fa0b8";
+    sha256 = "0kxdjzwk81ixnxxfp4wmn19qq2lbdgv1xic01mpdp00naxzw6s68";
+  };
+  "fc571a1d0a7202a062ecd269c06a2308ab378cb4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fc571a1d0a7202a062ecd269c06a2308ab378cb4";
+    sha256 = "1zfdsd060m1njrkx2hlw7bcwpff23pggyklza2hpdj9k6h3jmdn2";
+  };
+  "fc71358f88c1a01c32f496b064386dba3145a36a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fc71358f88c1a01c32f496b064386dba3145a36a";
+    sha256 = "1sq6f7zpmbqq9b27irf4xx8zg9p906xfpgsdxyrzgwf15vqc3cxc";
+  };
+  "fc72803a9439e161de25108be11e5429ed900f77" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fc72803a9439e161de25108be11e5429ed900f77";
+    sha256 = "1nhbsry6l2wb1w8rv4lkzp42r0iqfhd5r21ckxz10gsngf9v8d5z";
+  };
+  "fc7b29cbf72c69bffecb661d7345ac5be329c14d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2717066-919cce012f444f43b8fd9849400ad87b/fc7b29cbf72c69bffecb661d7345ac5be329c14d";
+    sha256 = "0gqb44kivk31lyrmvnfff65sb0llaqi04vc3270366x5h4sii9n9";
+  };
+  "fc97754c9af277910c57351443a42a210b2eb8a2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fc97754c9af277910c57351443a42a210b2eb8a2";
+    sha256 = "047psrjpddw50plbk1al6wgapzcdhzs8a7g0h2pypwiknxkw09cy";
+  };
+  "fc9d37a2c0ab6854c6b039c509d86b9459982472" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fc9d37a2c0ab6854c6b039c509d86b9459982472";
+    sha256 = "1p8j4q0blxpi9lblbyvix6w0vnds1yxn7ydq4z3qqaxmnixv9kvf";
+  };
+  "fcaba3584b9391b167f49dfe53afe253623ada36" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2608258-d12288bf79ea446a9353c7f9d223b24e/fcaba3584b9391b167f49dfe53afe253623ada36";
+    sha256 = "11dfccim0y3z9pw8hy0z0pqam8wcs3pn5sdr3yjd3g097hz2firp";
+  };
+  "fd441937ce92861563e4bd9e3619d5d9cdf73a55" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/fd441937ce92861563e4bd9e3619d5d9cdf73a55";
+    sha256 = "0fbyr6sax9j9mxfa86waw8v499yzb3sk4pqfsykcamy9dvzav6hm";
+  };
+  "fd44fdad76da5efbaf3bced1a5d2bf12eb028b35" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fd44fdad76da5efbaf3bced1a5d2bf12eb028b35";
+    sha256 = "141rnzqcg3p51saqqd54bl5nj7f5kkm6ysvbcmlcpd5qmxg0swqb";
+  };
+  "fd521968de6928ff3ba9e7a3568d3190fc56573a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fd521968de6928ff3ba9e7a3568d3190fc56573a";
+    sha256 = "0gxwqdk6d6lg3akvn5ydvr2jr2ywq4w38ql0ck1xxj8p5jnwh90m";
+  };
+  "fd5c39fee72ecaed24e8e462a4a71a69c06e4509" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/fd5c39fee72ecaed24e8e462a4a71a69c06e4509";
+    sha256 = "0jfdv5cbgqczza53gd35qgxykxa1660rj5r7p57kbyfhhn116785";
+  };
+  "fd621bb2eef661c744d767a89b7b835495af2a90" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/fd621bb2eef661c744d767a89b7b835495af2a90";
+    sha256 = "14pfnxzc77k809m22l6arqpi2rzdm8f5s07hkqn7ikvddyh55snq";
+  };
+  "fd63513879784b9901479056b82fc51c57ba8666" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/fd63513879784b9901479056b82fc51c57ba8666";
+    sha256 = "0qcxd2x5lhj2vkpc99y8yh0knsx0cnbr6h6zpv35ympybxffdm9r";
+  };
+  "fd9f084abed9009fd3d7585637980961e5ac37c9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2746336-9279cae0020b417daa2c9ef71df497d5/fd9f084abed9009fd3d7585637980961e5ac37c9";
+    sha256 = "1q21jh1pnq2hnc5pyx2bvjivly9d83mf3kh5xsvxgz73sviqr42h";
+  };
+  "fdb6c138bd7f73ccfc7a2324408b8199fe18c5c8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fdb6c138bd7f73ccfc7a2324408b8199fe18c5c8";
+    sha256 = "1sapx3lsi13mz76vljdiwddq5say5ing9jpckjpsg9vvzwpmd03k";
+  };
+  "fdddaa298c770236e8e0ae3fa46d56ab464ff590" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fdddaa298c770236e8e0ae3fa46d56ab464ff590";
+    sha256 = "0psr2i314z03ispws9cr2wfk6vq9l0fwcw1vz65rcns7i24l4bii";
+  };
+  "fdea9eb5b7adc1f8cdca84ff533afa9978bc74e2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2369826-2acd3c361c9d4a858bd63938a2ab980e/fdea9eb5b7adc1f8cdca84ff533afa9978bc74e2";
+    sha256 = "17pnggfb9aj0lahbbs0blfiywdz53bszbrh4bx0n86viyls5g36r";
+  };
+  "fe108abb775ce219aed6c508fa1d8d9ec9710c50" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/fe108abb775ce219aed6c508fa1d8d9ec9710c50";
+    sha256 = "0qknlj971xn147z7992idp3hbwif2fqy02ml8jbxah4v82d1ssdk";
+  };
+  "fe26cc5b44599296ab8cca48bf52350d32f5ccf3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2645089-febc94e74d4940f8a601cd6b98abe18d/fe26cc5b44599296ab8cca48bf52350d32f5ccf3";
+    sha256 = "154jg46kbbfn7ipjap4s8bgfjhzazj3pd2n7yd009drw2l1ald1q";
+  };
+  "fe2fd0043d9dceb3bd974fd46a7f657222f0068f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2616691-982be94b99b442419e99de37630ca843/fe2fd0043d9dceb3bd974fd46a7f657222f0068f";
+    sha256 = "0rq7hnir60k0ncfk0qzin2fk8w2m9l9259qzx7cryf9hvssy1vxq";
+  };
+  "fe34956f65e0611aa1584ca611b7843e22e3e29f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2636785-bb59fe7a4b5f4abc9305901e79ac10da/fe34956f65e0611aa1584ca611b7843e22e3e29f";
+    sha256 = "1hnasgpz4ml4095nnr1936jfx09vfajib3g9szrwdy0bf9rcrdh8";
+  };
+  "fe39e5851d68399087d05d9c22da12a1fdd7b6de" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2641797-79a5af4419414bd1af098301c8bac322/fe39e5851d68399087d05d9c22da12a1fdd7b6de";
+    sha256 = "1rfaalg6rbc1w45b5iipb81n6y0mdqkf1ylfphzbchpqliipl5ba";
+  };
+  "fe79883294e7b730b4ea0e6e72c662ced28e999b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2500002-69b23dcf7a2d4165b2b432780845acb0/fe79883294e7b730b4ea0e6e72c662ced28e999b";
+    sha256 = "0rc7vagcgn74cg4vkzhkhy0jyv5wphacb3kd8kfxzidb1v92k4br";
+  };
+  "fe94f39680410922eeef278b013e20b5ee27e7fe" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2372940-e2185854aff3439f82782883f74d5bf8/fe94f39680410922eeef278b013e20b5ee27e7fe";
+    sha256 = "0wllmwfggykl56kwb92jdz8rcfvrn4hxvj9mav19sc9fg2dibfzf";
+  };
+  "fecddbf47598e42c13644ce42253e7ca8178eb29" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/fecddbf47598e42c13644ce42253e7ca8178eb29";
+    sha256 = "0xwi7xa1jm012lmxhz3al7yhwwv33qz332bqvwamcza63ir6zpw9";
+  };
+  "fed2a12f5d40235d6295fed1092707889ff01b08" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/fed2a12f5d40235d6295fed1092707889ff01b08";
+    sha256 = "08cyqg80grwpmv9fkm7nldz8p12nzssg08cyijc4d5afx6xddym4";
+  };
+  "ff38188923ffc7c35c9b2e533f2ce6f3a9aa3a3d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/ff38188923ffc7c35c9b2e533f2ce6f3a9aa3a3d";
+    sha256 = "03vknw5a43n6kl3llyk7czg5a0w4fkic29b6d8i0q71jxknizf50";
+  };
+  "ff61432b09f3c5882ed0f5f932a0537f38cde5cf" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2716009-3335bc961a4d42e9ac0bd72e7491e442/ff61432b09f3c5882ed0f5f932a0537f38cde5cf";
+    sha256 = "08qcnz8qrxqrrhsll0n9k49cp6fqiacl85n0jhq53jsh805hlw2b";
+  };
+  "ff66ba394c099b33decda558509ec6f4fdb43892" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2581810-569aa4e20f7249d0bfc2a94ef91ec1a8/ff66ba394c099b33decda558509ec6f4fdb43892";
+    sha256 = "12qmiff7fynifhpaivsyg23v6jm89i903dhqqs2xiihbd77ln8lb";
+  };
+  "ffd25a14ee418633d47a558d3a953c501f56e2f3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2493588-b79d458e39e94a44804912814d8e1e50/ffd25a14ee418633d47a558d3a953c501f56e2f3";
+    sha256 = "0kclig15z3ywc7mb0xyv5pvijkzzj4llimij5hqagwwdgi31rirg";
+  };
+  "ffe1832c9002fb490bd976e6906fe43792e2e487" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2487260-b428468bcd6545bfbb79f02a6605b9ef/ffe1832c9002fb490bd976e6906fe43792e2e487";
+    sha256 = "1n5q3v765kblvn9z74jdgxj1f1qdqpnypx1i00xf8ni5if5w183d";
+  };
+  "ffe4b29f6febe2e6345b292bd341aefed751ae1d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2565979-eaaf2006b54843b69b5280979c12ed6d/ffe4b29f6febe2e6345b292bd341aefed751ae1d";
+    sha256 = "159bff8wiz2smjl34l7d581wyy9ihxr576s4blq8hdqkm1wl0va9";
+  };
+  "025037991170960704b2d2a49e7bf37cebf06b85" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/025037991170960704b2d2a49e7bf37cebf06b85";
+    sha256 = "05p86qn4g7qg9wzz62piksf2xi599hyim2bqi38158qrmfmqigdw";
+  };
+  "091a839006f281b7b12ee0d1bd0fff225f0ac73a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/091a839006f281b7b12ee0d1bd0fff225f0ac73a";
+    sha256 = "0m79g350p4gv3yb13i5921gbcc7bx852p5lmivfpwx3wqvghd5pz";
+  };
+  "09dbd9ce439ba4adad23922f5b9002fa4e759bd1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/09dbd9ce439ba4adad23922f5b9002fa4e759bd1";
+    sha256 = "188f2j0ik5c2cmw5ck386diabc24p57yhqrb4c7303d13dnqr1mm";
+  };
+  "0c416ae48c3e2ad2be1333ccc20f6992ce982aa4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/0c416ae48c3e2ad2be1333ccc20f6992ce982aa4";
+    sha256 = "1bm210fw20prl3k51dr9gai3asdg3kq30diln70lgm9wyk18kiv4";
+  };
+  "117189ccfc8241744b0cde19d866507341334ea0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/117189ccfc8241744b0cde19d866507341334ea0";
+    sha256 = "1nv2s6g8i7scqgwbqgsyicys2cwaf3mkvcqqvpc807ag2ad3rxl6";
+  };
+  "12164f23f40b93eb0a4cf6f0acb58596becc8f2f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/12164f23f40b93eb0a4cf6f0acb58596becc8f2f";
+    sha256 = "0px9qidckfldj9b9znxg31alsqrzzgpfjixr003lv410hbn099ir";
+  };
+  "1580d9078ae389f2cea6d568fc4ea0b0ebd5d183" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/1580d9078ae389f2cea6d568fc4ea0b0ebd5d183";
+    sha256 = "1xffqr3bhd4x5h36vk4dnz0hmc64gjg273ysnn68x9k2zdqgdmj0";
+  };
+  "1c44fa7c763743e619fef130346733eb5f107049" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/1c44fa7c763743e619fef130346733eb5f107049";
+    sha256 = "05nms6yrclw38v6180b4bqswwdmlb7l2l388wj4f7i0zi9cc0z1d";
+  };
+  "1f209ff22ef667820d2143b0bef1783612c2dc33" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/1f209ff22ef667820d2143b0bef1783612c2dc33";
+    sha256 = "1w6prwjci9fbp4jln2dl0pdjjiis30r982cjk261jb7ryrzm1bc6";
+  };
+  "2a13498d62f2897b95a2fde8f9117caf2213369d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/2a13498d62f2897b95a2fde8f9117caf2213369d";
+    sha256 = "11khy0pbyqbchzksfp51ihw8ahgpf9kvby6jp2spwf4cqglr4yzj";
+  };
+  "2c0a73c42dae723ea6ada9f3a83b520b4094655f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/2c0a73c42dae723ea6ada9f3a83b520b4094655f";
+    sha256 = "1gm11rsybfsdsbzbyrfwvp1wpy9x84plgwayv59qmn4j15hz7hya";
+  };
+  "2ea89fc7cf11ce2e9f8bd6df71dd99eff85bcc15" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/2ea89fc7cf11ce2e9f8bd6df71dd99eff85bcc15";
+    sha256 = "1zn4b57cf0w74m125iihbn2yjba95v22pn8gxq49qrfg5aci928r";
+  };
+  "2f7a26433cf0506c014fcc5694c194b28a811006" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/2f7a26433cf0506c014fcc5694c194b28a811006";
+    sha256 = "0ikgmmv133lamgmm5dah5sy50pr5g1125bw8rx4l27mgbz5yq276";
+  };
+  "316245a9c9d050b2bce9f47deafb0baa66af6347" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/316245a9c9d050b2bce9f47deafb0baa66af6347";
+    sha256 = "1389lmbg8dby7g14yq8jphvzdzswnwhkpm8aqa3h74ivnpabnpni";
+  };
+  "3536f544f9e91433e6939163fb611c524a5f468f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/3536f544f9e91433e6939163fb611c524a5f468f";
+    sha256 = "0wm2djjaksndivynjdz0f2c56a792r6q13vi19baipm0hglbaq3w";
+  };
+  "3663f96dbca6fd930e000a6617a3bb214a6ee0f0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/3663f96dbca6fd930e000a6617a3bb214a6ee0f0";
+    sha256 = "0qhpfkja24fxnzgl6vihwz2ilvz0jsdk04g5jn5r08iv90klj5c8";
+  };
+  "3d32ebca9fef4352a99f2e0636ac45e9d3b35d03" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/3d32ebca9fef4352a99f2e0636ac45e9d3b35d03";
+    sha256 = "02dsfahlg3fcvzb9aqxiycwd5vcb0q205gbzrh3x5m989flyrs1y";
+  };
+  "44c8dbacafb32300e6af2a0cf5897e5145c2b7f4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/44c8dbacafb32300e6af2a0cf5897e5145c2b7f4";
+    sha256 = "1vjyvp13qbfmv5jgdbicikhjq6wm9216ikqk23w1qsz0xzbn9wb9";
+  };
+  "4511815cd4297243a8afd7a2e799c60880a6ea95" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/4511815cd4297243a8afd7a2e799c60880a6ea95";
+    sha256 = "1rw6h3sc30ypr6304mjg6pzh841wmn5gjd4a3xv4y681nqys30li";
+  };
+  "4d9e2249062c1ccd50913501cbc7ea2fdb8cc94c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/4d9e2249062c1ccd50913501cbc7ea2fdb8cc94c";
+    sha256 = "0z86cczszfk05fmcd7dwfahnv0cm1wj7xq0yr0i332a7jr0g5s6d";
+  };
+  "4e3bb620861aa7c3d996fd8ee7cd3a40c2096bb0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/4e3bb620861aa7c3d996fd8ee7cd3a40c2096bb0";
+    sha256 = "0l9bfkanklr3zywkyn4lb5lzfpqkhr4c4n6kvw9gi4nzg063ifnh";
+  };
+  "574e359a11791294117e7f4ad4f677a99424170a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/574e359a11791294117e7f4ad4f677a99424170a";
+    sha256 = "1vhnylasbla79d2syx41804pshyd7w8ph1y88yyjp5w9g8zbcy0g";
+  };
+  "5756967d4a6019de75418949a564995c64fd81b1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/5756967d4a6019de75418949a564995c64fd81b1";
+    sha256 = "1fy2h21myp9yzc60545appg75in12f13rslhr7bpmsssgjrrz2fg";
+  };
+  "5c884c59ad7491166618894713300acc03499f45" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/5c884c59ad7491166618894713300acc03499f45";
+    sha256 = "19zrbvfnmhivs7gy0bm92kn04fqyc8179mkir5v4wycx7q24w938";
+  };
+  "5ea84c79c69cb4f20a2cbde31b1e9655f352f1c8" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/5ea84c79c69cb4f20a2cbde31b1e9655f352f1c8";
+    sha256 = "02rhs442s9y67kb8gympr42yl3xxx3d34iwqz926gr5721if0gh0";
+  };
+  "60be604621599e16ffec1f76e08339b6f9d89f8d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/60be604621599e16ffec1f76e08339b6f9d89f8d";
+    sha256 = "1nyll0lj0fmdphmah4zd5n6bn2zgy2sgff6mnwch2mm6bvxmgzlm";
+  };
+  "659b18633abf461608be32b8b565f4b70725ee20" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/659b18633abf461608be32b8b565f4b70725ee20";
+    sha256 = "00jywmppclqm62q0zq3b1dww6f27blblc633kcskyxc9f2i8p3qs";
+  };
+  "6f25ee59e861b5697b41d487ab19360684b2079b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/6f25ee59e861b5697b41d487ab19360684b2079b";
+    sha256 = "0y3fiwflj6qfmmpgpyi3xkyn6dls620iwcwq5cdpz4jhzhz5vbqm";
+  };
+  "723429357fc93c212749453abdecffa83625ce63" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/723429357fc93c212749453abdecffa83625ce63";
+    sha256 = "126ncm0szxkskfgwfbx5mhnbdpxl395gn62dv3rdg7xm4wjg3s07";
+  };
+  "73163f4d3a1f9f7015cad45b8b2fe49ee716aed2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/73163f4d3a1f9f7015cad45b8b2fe49ee716aed2";
+    sha256 = "1lkd1i92yc8lyfpnxp9gkgrklmxfj0p3zj1j0png50a4v6qyw55d";
+  };
+  "74ee06b2cb0a84dec755ca05d0b832517a58db9a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/74ee06b2cb0a84dec755ca05d0b832517a58db9a";
+    sha256 = "10xp24ija0l7dn3xd690dk6a342ma4iafmcywinvh111xcwkvvql";
+  };
+  "77c1ef425fc9a747ed3815f78a2616fee747fd12" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/77c1ef425fc9a747ed3815f78a2616fee747fd12";
+    sha256 = "0gspscdvrnvj0ps5z2ckga2ji00y8m9kj3zaqpl06kywyz5p1q1l";
+  };
+  "77cf0dabcf5441932f1317ec4ee4e28bf2039a85" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/77cf0dabcf5441932f1317ec4ee4e28bf2039a85";
+    sha256 = "1mdngkvkss3ia9g6kjiybvqj4w7q39iif1kqfjxzr1gs098q23ng";
+  };
+  "80d27f0c38fd20a082015a2b069457560f523b57" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/80d27f0c38fd20a082015a2b069457560f523b57";
+    sha256 = "1s2cxkgwnzisbj9r55ciwkv42m423cq7nhkywd7d80hy2wrpir5p";
+  };
+  "817fe5e5ddfde58d79455a8b2cf70079f0642770" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/817fe5e5ddfde58d79455a8b2cf70079f0642770";
+    sha256 = "03dh02fjc2ksdhifwx92qfvcaymvkhc5cf4m8jlg9v3lkz1dxa2z";
+  };
+  "81cf86d27a982faf7f6331f91b6b5634cfaa00d0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/81cf86d27a982faf7f6331f91b6b5634cfaa00d0";
+    sha256 = "0n9ra5ynq4kqpd5gsdx72qk8nn8nh9bffbqvyp1jwkbc7vbf6rn1";
+  };
+  "82368148bbcf9a6d07bead1e678bfee5f8631cfb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/82368148bbcf9a6d07bead1e678bfee5f8631cfb";
+    sha256 = "06f7ysl5zxx15x2mc0yl2qxdfydnaclr7zwffip03s1szjfdf078";
+  };
+  "85df0b8a16e3e1c2b99bd8d8703a8c00f80c4ffd" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/85df0b8a16e3e1c2b99bd8d8703a8c00f80c4ffd";
+    sha256 = "0gl18m1fqb2gyd0fnf5bvq77bqvlyngqvqbjikdr1vhj78jp8l2p";
+  };
+  "8a73223e8d37b2fb9151a753a24139f37818e434" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/8a73223e8d37b2fb9151a753a24139f37818e434";
+    sha256 = "0sk5l8ijfjrys0l3mj6ypgx4araw0hnxz0cjzm9bk8y605331znx";
+  };
+  "8ab79f2416da3c5f785bf291971680dbfdb62e26" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/8ab79f2416da3c5f785bf291971680dbfdb62e26";
+    sha256 = "1xlnzpljknkmbw85xz35a48h2fdv9c2ijf0nm7cdc489699v9gfv";
+  };
+  "8c09c7e57e2bc1a99df552e75f3bc3033364bbd1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/8c09c7e57e2bc1a99df552e75f3bc3033364bbd1";
+    sha256 = "168yb57ri0wibsy1gr940y8sxdc9s2vcniizkk4dykpnkay0izl1";
+  };
+  "8e02b6fe5eaaad154d3b7677458a9f52c538129f" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/8e02b6fe5eaaad154d3b7677458a9f52c538129f";
+    sha256 = "0zlz81qm00klwfmnc1133c8q1jgxn1w6b5fajs8jigmhwqahi806";
+  };
+  "8ef45e913784e24ac5b05d020bb1c90e5e1f65b4" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/8ef45e913784e24ac5b05d020bb1c90e5e1f65b4";
+    sha256 = "13rd7mvzc3vxgz7zpa89rdfidflvaxzlv60m1ngcsjigwank5a52";
+  };
+  "8f31c3a2ca87728958356ef279d797c21ff800d2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/8f31c3a2ca87728958356ef279d797c21ff800d2";
+    sha256 = "10vqrm360csnbncrhkyy45nnl9md88jl0f9lmvlav19m60cdxazi";
+  };
+  "90647a14bfb8f6e8cbcc8d8ecce7d8e2500818b9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/90647a14bfb8f6e8cbcc8d8ecce7d8e2500818b9";
+    sha256 = "0hlknlph7dw2c74pmg99apbhdfd844vq77navnynxm890nrjzqs0";
+  };
+  "a0032cd8280294edff61604e9bf0312230cfd79b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/a0032cd8280294edff61604e9bf0312230cfd79b";
+    sha256 = "026b18ka0nsb1ri7wk0iqnjz60fsnr11c22lvhq2wiqh9jqsl9f6";
+  };
+  "a038a78206b6b0572fa3a86e5a96e3fee0d32b04" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/a038a78206b6b0572fa3a86e5a96e3fee0d32b04";
+    sha256 = "0ahhkyb4h23apy04jjif0ys6nqjjrzf27w7h3xvw93mzasc4x515";
+  };
+  "a27eb78abbdabe194ad5b4c1bfe56dfca38e43b0" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/a27eb78abbdabe194ad5b4c1bfe56dfca38e43b0";
+    sha256 = "0bba6vpl4lk376yhjjlgxc81m20i9qq9b7kr2bf7lg76fx485ydq";
+  };
+  "a2e5471c647ec896793c1df59ec6c214756b7644" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/a2e5471c647ec896793c1df59ec6c214756b7644";
+    sha256 = "05n7fnxpg01xg4b8k323h0lbhlqxq2b432454rg5lj5ydd71w9vd";
+  };
+  "a6f1cf388c274ffbbbf5ee9f678d2fd2c982ac9d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/a6f1cf388c274ffbbbf5ee9f678d2fd2c982ac9d";
+    sha256 = "0l0fdmypq1h5whfnk1132z77sbnmgwqhizss8pgjwi9k0qgahgcc";
+  };
+  "afad2bca0d8075378f5239206210c90bc449f66d" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/afad2bca0d8075378f5239206210c90bc449f66d";
+    sha256 = "13944ai93z6md86wq4ghjhlgnw3xd5xf64ski1n0imxy3xnclki9";
+  };
+  "b49b4db86170da54d36c9f77345132f501569443" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/b49b4db86170da54d36c9f77345132f501569443";
+    sha256 = "1dm4ln3cky50hzwpfb8hyzj3wyiwnjzpwybmri7sp51yhfjbssh4";
+  };
+  "b928e6544636d28eb1f1fad8cbfb3a508d6b523b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/b928e6544636d28eb1f1fad8cbfb3a508d6b523b";
+    sha256 = "0a2lgynlylx99aj6jlzkbid6sq8sc1y9sblr3vjdc0rxpzyr7saf";
+  };
+  "bac3a42148c64a342e3a138e254acfc37baf7f7c" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/bac3a42148c64a342e3a138e254acfc37baf7f7c";
+    sha256 = "0z3vq7qnjjihk5h7rr4sjgiyqvqvm64ivra2bdb89hklycawz6c5";
+  };
+  "bf6954d37d21ccd063ce7829bdbf17a34a5972f6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/bf6954d37d21ccd063ce7829bdbf17a34a5972f6";
+    sha256 = "1wmm2rhf0c1351y9mjdyi4dxq2jmsl893ijm99f4zr64nqgxh76b";
+  };
+  "c48ea333ebc4208f44ca53ccec1b4a9224234423" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/c48ea333ebc4208f44ca53ccec1b4a9224234423";
+    sha256 = "0q536yk3rncy3gf6ch5mmsvjizq1n5lkk8nfhg1lrvg7mhxsd257";
+  };
+  "c4ab35a8f3c52c8999804559d5a506f4a4ea28d6" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/c4ab35a8f3c52c8999804559d5a506f4a4ea28d6";
+    sha256 = "03id4awm9lnrrk92d9vdzlwy5g6bai9ig4i5lsk90f814vhz11nq";
+  };
+  "c5f44e9ae34828343c5c6eb3e73c2c451120da78" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/c5f44e9ae34828343c5c6eb3e73c2c451120da78";
+    sha256 = "15qbc27xc2gp431i3hhslwbgsgg3az37swvc37rarqw8jaayfdzw";
+  };
+  "c97e1a685bb16bacc741e943d668230b044da28b" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/c97e1a685bb16bacc741e943d668230b044da28b";
+    sha256 = "1an5cdb74lspq3v15xdksjld444saw7b62nx8c9vy8hq0qkxmyg0";
+  };
+  "ceed10f922981467ca264e2f3c1ba9a6834ee9fb" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/ceed10f922981467ca264e2f3c1ba9a6834ee9fb";
+    sha256 = "0lsghjsy1dxr94crqd4z28vgl1fzwbw2q02k7yh2hzq3p5w5n08s";
+  };
+  "d657a675c488b3ceece090f664b8b3890c0f72c7" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/d657a675c488b3ceece090f664b8b3890c0f72c7";
+    sha256 = "1ddbjh67h2iz3pm0sfj77yc907zcfrzmn0bzyaa4rkz234zzp6hl";
+  };
+  "d80b9d2bef36dbe0669cfea717fe30315568ba9a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/d80b9d2bef36dbe0669cfea717fe30315568ba9a";
+    sha256 = "11p1dbc3zrakwhmw7xi2wdshsbm6azdix8gy81gf8icy55ggg8ma";
+  };
+  "d87b8c33d15b51b773c6f091853c54f865561e64" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/d87b8c33d15b51b773c6f091853c54f865561e64";
+    sha256 = "0qx0pb86fw6v50nl1p59d375bmc3x35cwd0qvbsbszr5w0wla0w2";
+  };
+  "d995c76652895e51297226aedf32dd0c715582e3" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/d995c76652895e51297226aedf32dd0c715582e3";
+    sha256 = "0pgwg8w2svxvnw1p7cp233p866f4kpmfsgaw1ids8z37dw8qa7h0";
+  };
+  "de6a3578fbc96909e587a897c860f56738c9a027" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/de6a3578fbc96909e587a897c860f56738c9a027";
+    sha256 = "1vpm2s3ndg9nqnady3kswfh4bwcrmx1x37m79kcvbpaalbb1w7cr";
+  };
+  "e0a272e2ea952c9c27d010098f6ed3be34d70023" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/e0a272e2ea952c9c27d010098f6ed3be34d70023";
+    sha256 = "1cw0bn4lrk11nynab2s56i982fljd39ibczp92lwv6f9crpbxqqd";
+  };
+  "e18cf443cf050171be2dafbb7847b1eef470d743" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/e18cf443cf050171be2dafbb7847b1eef470d743";
+    sha256 = "10pf020vhki6wv2a8ja4gx5lr4l8fc6fhbyvkmjw6fszf4qkmgzd";
+  };
+  "e89e8d979ec25d6a66f7a72b8390aaa876cb54b2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/e89e8d979ec25d6a66f7a72b8390aaa876cb54b2";
+    sha256 = "0x7mcg0rfx0nvr9356yk4lzilz5x732bhir53qis4z7rfjhdi3fn";
+  };
+  "ecee7a937781e9f7f6528b7bf03dd4cdc12bbd1a" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/ecee7a937781e9f7f6528b7bf03dd4cdc12bbd1a";
+    sha256 = "16l5vasgq7iykpgrhr2q5x5rp780fy5nhzg459varwpr2ixlj640";
+  };
+  "eef376599acf8af872a7ecceb89b8afc1dc53cca" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/eef376599acf8af872a7ecceb89b8afc1dc53cca";
+    sha256 = "10kjixb4gsdy2m0zj0v4sd38qqjbxcy4wmiwvpbpj95nyckf4695";
+  };
+  "f32b43ead099376849798c829e67335923b6f5df" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/f32b43ead099376849798c829e67335923b6f5df";
+    sha256 = "0bzabjvzamnadzx2idzviiyzhv3nkbp7w2wcq20lpzmszk0lxdn5";
+  };
+  "f6efa02b7fe9e154763f4e74a2d13e6016651478" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/f6efa02b7fe9e154763f4e74a2d13e6016651478";
+    sha256 = "1qwgrh9pdhp5rsiimwm6v0hvmi9v3fbijx4pkdgklm6c7mxfmh6g";
+  };
+  "f82d0258fa61f3050a7ec0c48a72a14882f4f9ff" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/f82d0258fa61f3050a7ec0c48a72a14882f4f9ff";
+    sha256 = "10yqzj12sma2xqcxvqdh3s24dl5pwk9wlplxiaplkwm802fn95sw";
+  };
+  "fd8eb71773dfc69f5da73a588a9487e8155eb7d9" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/fd8eb71773dfc69f5da73a588a9487e8155eb7d9";
+    sha256 = "1xfvsj2rsbmnhmgv67j7xkc41n3c61ikvmlglj47iyqxlrcp15hs";
+  };
+  "fe7abbfa12319d22b0735b908af92eafc25d27a2" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/fe7abbfa12319d22b0735b908af92eafc25d27a2";
+    sha256 = "0f6cvhhba05slb5wxyymx46syb7v1ggbgcvisifiaf8wnivh46f9";
+  };
+  "ff648984dc86f826cc03f174f5a1b26e33268529" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/ff648984dc86f826cc03f174f5a1b26e33268529";
+    sha256 = "0l2p41n9w4iap9nixxivn6vlzbl5bb3x47pkr250lgd3s81slhg5";
+  };
+  "ffcb54fe4e2f0e1ee2f22f84cff4ddc49da010f1" = fetchurl {
+    url = "http://cdn.unrealengine.com/dependencies/2818068-50a136646fbe4d1b8b290d40ccd3f30a/ffcb54fe4e2f0e1ee2f22f84cff4ddc49da010f1";
+    sha256 = "1irjabajfblyl5s36lasq5rclxagc1finwb7y68wsj3w5195gihg";
+  };
+}
diff --git a/nixpkgs/pkgs/games/ue4/default.nix b/nixpkgs/pkgs/games/ue4/default.nix
new file mode 100644
index 000000000000..0260e4f2e20d
--- /dev/null
+++ b/nixpkgs/pkgs/games/ue4/default.nix
@@ -0,0 +1,83 @@
+{ lib, stdenv, writeScript, fetchurl, requireFile, unzip, clang, mono, which,
+  xorg, xdg-user-dirs }:
+
+let
+  deps = import ./cdn-deps.nix { inherit fetchurl; };
+  linkDeps = writeScript "link-deps.sh" (lib.concatMapStringsSep "\n" (hash:
+    let prefix = lib.concatStrings (lib.take 2 (lib.stringToCharacters hash));
+    in ''
+      mkdir -p .git/ue4-gitdeps/${prefix}
+      ln -s ${lib.getAttr hash deps} .git/ue4-gitdeps/${prefix}/${hash}
+    ''
+  ) (lib.attrNames deps));
+  libPath = lib.makeLibraryPath [
+    xorg.libX11 xorg.libXScrnSaver xorg.libXau xorg.libXcursor xorg.libXext
+    xorg.libXfixes xorg.libXi xorg.libXrandr xorg.libXrender xorg.libXxf86vm
+    xorg.libxcb
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "ue4";
+  version = "4.10.2";
+  sourceRoot = "UnrealEngine-${version}-release";
+  src = requireFile {
+    name = "${sourceRoot}.zip";
+    url = "https://github.com/EpicGames/UnrealEngine/releases/tag/${version}";
+    sha256 = "1rh6r2z00kjzq1i2235py65bg9i482az4rwr14kq9n4slr60wkk1";
+  };
+  unpackPhase = ''
+    ${unzip}/bin/unzip $src
+  '';
+  configurePhase = ''
+    ${linkDeps}
+
+    # Sometimes mono segfaults and things start downloading instead of being
+    # deterministic. Let's just fail in that case.
+    export http_proxy="nodownloads"
+
+    patchShebangs Setup.sh
+    patchShebangs Engine/Build/BatchFiles/Linux
+    ./Setup.sh
+    ./GenerateProjectFiles.sh
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/UnrealEngine
+
+    sharedir="$out/share/UnrealEngine"
+
+    cat << EOF > $out/bin/UE4Editor
+    #! $SHELL -e
+
+    sharedir="$sharedir"
+
+    # Can't include spaces, so can't piggy-back off the other Unreal directory.
+    workdir="\$HOME/.config/unreal-engine-nix-workdir"
+    if [ ! -e "\$workdir" ]; then
+      mkdir -p "\$workdir"
+      ${xorg.lndir}/bin/lndir "\$sharedir" "\$workdir"
+      unlink "\$workdir/Engine/Binaries/Linux/UE4Editor"
+      cp "\$sharedir/Engine/Binaries/Linux/UE4Editor" "\$workdir/Engine/Binaries/Linux/UE4Editor"
+    fi
+
+    cd "\$workdir/Engine/Binaries/Linux"
+    export PATH="${xdg-user-dirs}/bin\''${PATH:+:}\$PATH"
+    export LD_LIBRARY_PATH="${libPath}\''${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH"
+    exec ./UE4Editor "\$@"
+    EOF
+    chmod +x $out/bin/UE4Editor
+
+    cp -r . "$sharedir"
+  '';
+  buildInputs = [ clang mono which xdg-user-dirs ];
+
+  meta = {
+    description = "A suite of integrated tools for game developers to design and build games, simulations, and visualizations";
+    homepage = "https://www.unrealengine.com/what-is-unreal-engine-4";
+    license = lib.licenses.unfree;
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+    # See issue https://github.com/NixOS/nixpkgs/issues/17162
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ue4/generate-expr-from-cdn.sh b/nixpkgs/pkgs/games/ue4/generate-expr-from-cdn.sh
new file mode 100644
index 000000000000..91cab1ca32f5
--- /dev/null
+++ b/nixpkgs/pkgs/games/ue4/generate-expr-from-cdn.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+go() {
+    file="$1"
+
+    IFS=$'\n'
+    for pack in $(perl -n -e '/(<Pack .*\/>)/ && print "$1\n"' $file); do
+        remotepath=$(echo "$pack" | perl -n -e '/RemotePath="([^"]*)"/ && print $1')
+        hash=$(echo "$pack" | perl -n -e '/Hash="([^"]*)"/ && print $1')
+        url="http://cdn.unrealengine.com/dependencies/$remotepath/$hash"
+
+        until sha256=$(nix-prefetch-url $url --type sha256); do
+            true
+        done
+
+        cat <<EOF
+  "$hash" = fetchurl {
+    url = $url;
+    sha256 = "$sha256";
+  };
+EOF
+    done
+}
+
+
+cat <<EOF
+{ fetchurl }:
+
+{
+EOF
+
+go Engine/Build/Commit.gitdeps.xml
+go Engine/Build/Promoted.gitdeps.xml
+
+cat <<EOF
+}
+EOF
diff --git a/nixpkgs/pkgs/games/ue4demos/default.nix b/nixpkgs/pkgs/games/ue4demos/default.nix
new file mode 100644
index 000000000000..ce3f3ad38f8d
--- /dev/null
+++ b/nixpkgs/pkgs/games/ue4demos/default.nix
@@ -0,0 +1,195 @@
+{ lib, stdenv, fetchurl, unzip, patchelf, xorg, openal }:
+
+let
+  urls = file:
+    [
+      # Untrusted mirrors - do not update hashes
+      "https://ludios.org/mirror/ue4demos/${file}"
+      "https://web.archive.org/web/20140824192039/http://ue4linux.raxxy.com/${file}"
+    ];
+
+  buildDemo = { name, src }:
+    stdenv.mkDerivation rec {
+      inherit name src;
+
+      nativeBuildInputs = [ unzip patchelf ];
+
+      rtdeps = lib.makeLibraryPath
+        [ xorg.libXxf86vm xorg.libXext openal ]
+        + ":" + lib.makeSearchPathOutput "lib" "lib64" [ stdenv.cc.cc ];
+
+      buildCommand =
+      ''
+        mkdir -p "$out"
+        cd $out
+        unzip $src
+
+        interpreter=$(echo ${stdenv.cc.libc}/lib/ld-linux*.so.2)
+        binary=$(find . -executable -type f)
+        patchelf \
+          --set-interpreter $interpreter \
+          --set-rpath ${rtdeps} \
+          "$binary"
+
+        # Workaround on
+        # LogLinuxPlatformFile:Warning: open('/nix/store/hash-ue4demos-demo/demo/demo/Saved/Config/CleanSourceConfigs/Engine.ini', Flags=0x00080241) failed: errno=2 (No such file or directory)
+        # for Vehicle, Shooter and Strategy games.
+        ls | grep ' ' && $(
+          haxname=$(ls | grep ' ' | sed 's/ //g'); \
+          haxpath=$(ls | grep ' ')/$haxname/Saved; \
+          mkdir -p "$haxpath"/Config/CleanSourceConfigs; \
+          ln -s /dev/null "$haxpath"/Config/CleanSourceConfigs/Engine.ini; \
+          mkdir -p "$haxpath"/Logs; \
+          ln -s /dev/null "$haxpath"/Logs/$haxname.log)
+
+        # Executables are buried under a varied paths across demos.
+        mkdir bin
+        cd bin
+        ln -s "$out/$binary" $(basename "$out/$binary")
+      '';
+
+      meta = {
+        description = "Unreal Engine 4 Linux demos";
+        homepage = "https://wiki.unrealengine.com/Linux_Demos";
+        platforms = [ "x86_64-linux" ];
+        license = lib.licenses.unfree;
+      };
+    };
+
+in {
+  tappy_chicken = buildDemo {
+    name = "ue4demos-tappy_chicken";
+    src = fetchurl {
+      urls = urls "tappy_chicken.zip";
+      sha256 = "0lwhvk3lpb2r5ng2cnzk7fpjj5lwhy2sch1a8v154x1xfhfb3h4v";
+    };
+  };
+
+  swing_ninja = buildDemo {
+    name = "ue4demos-swing_ninja";
+    src = fetchurl {
+      urls = urls "swing_ninja.zip";
+      sha256 = "1bmgqqk3lda5h7nnqi59jgyrsn0clr3xs0k1jclnqf9fk0m8hjcv";
+    };
+  };
+
+  card_game = buildDemo {
+    name = "ue4demos-card_game";
+    src = fetchurl {
+      urls = urls "card_game.zip";
+      sha256 = "154baqias5q7kad0c89k35jbmnmlm865sll02mi7bk1yllcckz5z";
+    };
+  };
+
+  vehicle_game = buildDemo {
+    name = "ue4demos-vehicle_game";
+    src = fetchurl {
+      urls = urls "vehicle_game.zip";
+      sha256 = "03dlacf1iv7sgn7pl3sx9r6243wy8fsi2kd858syfm9slg0190bs";
+    };
+  };
+
+  shooter_game = buildDemo {
+    name = "ue4demos-shooter_game";
+    src = fetchurl {
+      urls = urls "shooter_game.zip";
+      sha256 = "1bk32k349iqbqk8x8jffnqq0pjiqmvrvv675xxmlvkkr8qrlhz98";
+    };
+  };
+
+  strategy_game = buildDemo {
+    name = "ue4demos-strategy_game";
+    src = fetchurl {
+      urls = urls "strategy_game.zip";
+      sha256 = "1p7i966v1ssm20y12g4wsccpgnky3szy19qyjlacynk7bgbk6lg7";
+    };
+  };
+
+  black_jack = buildDemo {
+    name = "ue4demos-black_jack";
+    src = fetchurl {
+      urls = urls "black_jack.zip";
+      sha256 = "0g52wkzn5isa3az32y25yx5b56wxks97pajqwkmm6gf4qpkfksxv";
+    };
+  };
+
+  landscape_mountains = buildDemo {
+    name = "ue4demos-landscape_mountains";
+    src = fetchurl {
+      urls = urls "landscape_mountains.zip";
+      sha256 = "14jzajhs3cpydvf3ag7lpj4hkpbjpwnn3xkdvdx92fi0pcl8cwym";
+    };
+  };
+
+  matinee_demo = buildDemo {
+    name = "ue4demos-matinee_demo";
+    src = fetchurl {
+      urls = urls "matinee_demo.zip";
+      sha256 = "0ib8k6fl15cxzdarar2sqq5v3g3c7p2jidkdjd00nym6cvkibb4d";
+    };
+  };
+
+  elemental_demo = buildDemo {
+    name = "ue4demos-elemental_demo";
+    src = fetchurl {
+      urls = urls "elemental_demo.zip";
+      sha256 = "1v4jdsy8jvv8wgc8dx17q17xigfrya5q0nfdzw4md7fzm3bg9z0v";
+    };
+  };
+
+  effects_cave_demo = buildDemo {
+    name = "ue4demos-effects_cave_demo";
+    src = fetchurl {
+      urls = urls "effects_cave_demo.zip";
+      sha256 = "0lvd3aaha2x9pnpkdmrzi6nf7hymr95834z3l8shygjf9kbbzsz4";
+    };
+  };
+
+  realistic_rendering = buildDemo {
+    name = "ue4demos-realistic_rendering";
+    src = fetchurl {
+      urls = urls "realistic_rendering_demo.zip";
+      sha256 = "0r16nznkv475hkw5rnngqsc69ch8vh86dppyyyr9nn43dkr2110a";
+    };
+  };
+
+  reflections_subway = buildDemo {
+    name = "ue4demos-reflections_subway";
+    src = fetchurl {
+      urls = urls "reflections_subway_demo.zip";
+      sha256 = "0dw5sm7405gxw9iqz0vpnhdprrb4wl5i14pvzl1381k973m8bd00";
+    };
+  };
+
+  scifi_hallway_demo = buildDemo {
+    name = "ue4demos-scifi_hallway_demo";
+    src = fetchurl {
+      urls = urls "sci-fi_hallway_demo.zip";
+      sha256 = "14qp9iwm47awn8d9j6ijh6cnds308x60xs4vi2fvz2666jlz1pq2";
+    };
+  };
+
+  mobile_temple_demo = buildDemo {
+    name = "ue4demos-mobile_temple_demo";
+    src = fetchurl {
+      urls = urls "mobile_temple_demo.zip";
+      sha256 = "12bz4h1b9lhmqglwsa6r8q48ijqbjdha9fql31540d01kigaka75";
+    };
+  };
+
+  stylized_demo = buildDemo {
+    name = "ue4demos-stylized_demo";
+    src = fetchurl {
+      urls = urls "stylized_demo.zip";
+      sha256 = "1676ridmj8rk4y4hbdscfnnka5l636av1xxl0qwvk236kq9j7v0l";
+    };
+  };
+
+  blueprint_examples_demo = buildDemo {
+    name = "ue4demos-blueprint_examples_demo";
+    src = fetchurl {
+      urls = urls "blueprint_examples_demo.zip";
+      sha256 = "076q33h2hy965fvr805hsprkpcmizf638lj2ik8k923v86b15nbv";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/games/ufoai/default.nix b/nixpkgs/pkgs/games/ufoai/default.nix
new file mode 100644
index 000000000000..1272097ecb93
--- /dev/null
+++ b/nixpkgs/pkgs/games/ufoai/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, libtheora, xvidcore, libGLU, libGL, SDL, SDL_ttf, SDL_mixer
+, curl, libjpeg, libpng, gettext, cunit, enableEditor?false }:
+
+stdenv.mkDerivation rec {
+  pname = "ufoai";
+  version = "2.4";
+  src = fetchurl {
+    url = "mirror://sourceforge/ufoai/ufoai-${version}-source.tar.bz2";
+    sha256 = "0kxrbcjrharcwz319s90m789i4my9285ihp5ax6kfhgif2vn2ji5";
+  };
+
+  srcData = fetchurl {
+    url = "mirror://sourceforge/ufoai/ufoai-${version}-data.tar";
+    sha256 = "1drhh08cqqkwv1yz3z4ngkplr23pqqrdx6cp8c3isy320gy25cvb";
+  };
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: r_gl.h:52: multiple definition of `qglGenBuffers';
+  #     r_gl.h:52: first defined here
+  # TODO: drop once release contains upstream fix:
+  #   https://github.com/ufoai/ufoai/commit/8a3075fffdad294e
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  preConfigure = ''tar xvf "${srcData}"'';
+
+  configureFlags = [ "--enable-release" "--enable-sse" ]
+    ++ lib.optional enableEditor "--enable-uforadiant";
+
+  buildInputs = [
+    libtheora xvidcore libGLU libGL SDL SDL_ttf SDL_mixer
+    curl libjpeg libpng gettext cunit
+  ];
+
+  NIX_CFLAGS_LINK = [
+    # to avoid occasional runtime error in finding libgcc_s.so.1
+    "-lgcc_s"
+    # tests are underlinked against libm:
+    # ld: release-linux-x86_64/testall/client/sound/s_mix.c.o: undefined reference to symbol 'acos@@GLIBC_2.2.5'
+    "-lm"
+  ];
+
+  meta = {
+    homepage = "http://ufoai.org";
+    description = "A squad-based tactical strategy game in the tradition of X-Com";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = lib.platforms.linux;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/games/uhexen2/default.nix b/nixpkgs/pkgs/games/uhexen2/default.nix
new file mode 100644
index 000000000000..1a43679bd127
--- /dev/null
+++ b/nixpkgs/pkgs/games/uhexen2/default.nix
@@ -0,0 +1,67 @@
+{ lib, fetchgit, SDL, stdenv, libogg, libvorbis, libmad, xdelta }:
+
+stdenv.mkDerivation rec {
+  pname = "uhexen2";
+  version = "1.5.9";
+
+  src = fetchgit {
+    url = "https://git.code.sf.net/p/uhexen2/uhexen2";
+    sha256 = "0crdihbnb92awkikn15mzdpkj1x9s34xixf1r7fxxf762m60niks";
+    rev = "4ef664bc41e3998b0d2a55ff1166dadf34c936be";
+  };
+
+  buildInputs = [ SDL libogg libvorbis libmad xdelta ];
+
+  preBuild = ''
+    makeFiles=(
+        "engine/hexen2 glh2"
+        "engine/hexen2 clean"
+        "engine/hexen2 h2"
+        "engine/hexen2/server"
+        "engine/hexenworld/client glhw"
+        "engine/hexenworld/client clean"
+        "engine/hexenworld/client hw"
+        "engine/hexenworld/server"
+        "h2patch"
+    )
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    for makefile in "''${makeFiles[@]}"; do
+          local flagsArray=(
+            -j$NIX_BUILD_CORES
+            SHELL=$SHELL
+            $makeFlags "''${makeFlagsArray[@]}"
+            $buildFlags "''${buildFlagsArray[@]}"
+          )
+          echoCmd 'build flags' ""''${flagsArray[@]}""
+          make  -C $makefile ""''${flagsArray[@]}""
+          unset flagsArray
+    done
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 engine/hexen2/{glhexen2,hexen2,server/h2ded} -t $out/bin
+    install -Dm755 engine/hexenworld/{client/glhwcl,client/hwcl,server/hwsv} -t $out/bin
+    install -Dm755 h2patch/h2patch -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A cross-platform port of Hexen II game";
+    longDescription = ''
+      Hammer of Thyrion (uHexen2) is a cross-platform port of Raven Software's Hexen II source.
+      It is based on an older linux port, Anvil of Thyrion.
+      HoT includes countless bug fixes, improved music, sound and video modes, opengl improvements,
+      support for many operating systems and architectures, and documentation among many others.
+    '';
+    homepage = "https://uhexen2.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ xdhampus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ultimatestunts/default.nix b/nixpkgs/pkgs/games/ultimatestunts/default.nix
new file mode 100644
index 000000000000..0ffe86efee4c
--- /dev/null
+++ b/nixpkgs/pkgs/games/ultimatestunts/default.nix
@@ -0,0 +1,26 @@
+{lib, stdenv, fetchurl, SDL, libGLU, libGL, SDL_image, freealut, openal, libvorbis,
+pkg-config}:
+
+stdenv.mkDerivation rec {
+  pname = "ultimate-stunts";
+  version = "0.7.7.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/ultimatestunts/ultimatestunts-srcdata-${lib.replaceStrings ["."] [""] version}.tar.gz";
+    sha256 = "sha256-/MBuSi/yxcG9k3ZwrNsHkUDzzg798AV462VZog67JtM=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ SDL libGLU libGL SDL_image freealut openal libvorbis ];
+
+  postPatch = ''
+    sed -e '1i#include <unistd.h>' -i $(find . -name '*.c' -o -name '*.cpp')
+  '';
+
+  meta = {
+    homepage = "http://www.ultimatestunts.nl/";
+    description = "Remake of the popular racing DOS-game Stunts";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ultrastardx/default.nix b/nixpkgs/pkgs/games/ultrastardx/default.nix
new file mode 100644
index 000000000000..424781dd8958
--- /dev/null
+++ b/nixpkgs/pkgs/games/ultrastardx/default.nix
@@ -0,0 +1,86 @@
+{ lib, stdenv
+, autoreconfHook
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, lua
+, fpc
+, pcre
+, portaudio
+, freetype
+, libpng
+, SDL2
+, SDL2_image
+, SDL2_gfx
+, SDL2_mixer
+, SDL2_net, SDL2_ttf
+, ffmpeg_4
+, sqlite
+, zlib
+, libX11
+, libGLU
+, libGL
+}:
+
+let
+  sharedLibs = [
+    pcre portaudio freetype
+    SDL2 SDL2_image SDL2_gfx SDL2_mixer SDL2_net SDL2_ttf
+    sqlite lua zlib libX11 libGLU libGL ffmpeg_4
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "ultrastardx";
+  version = "2023.9.0";
+
+  src = fetchFromGitHub {
+    owner = "UltraStar-Deluxe";
+    repo = "USDX";
+    rev = "v${version}";
+    hash = "sha256-KvYfWdpgN72F8Y5iFNba0SCjPoS33O3FAdrrC49xoGo=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ fpc libpng ] ++ sharedLibs;
+
+  postPatch = ''
+    substituteInPlace src/config.inc.in \
+      --subst-var-by libpcre_LIBNAME libpcre.so.1
+
+    # ultrastardx binds to libffmpeg (and sublibs), specifying a very restrictive
+    # upper bounds on the minor versions of .so files.
+    # We can assume ffmpeg_4 won’t break any major ABI compatibility, since it's
+    # effectively EOL
+    sed \
+      -e 's/^  LIBAVCODEC_MAX_VERSION_MINOR.*$/  LIBAVCODEC_MAX_VERSION_MINOR = 1000;/' \
+      -i src/lib/ffmpeg-4.0/avcodec.pas
+    sed \
+      -e 's/^  LIBAVFORMAT_MAX_VERSION_MINOR.*$/  LIBAVFORMAT_MAX_VERSION_MINOR = 1000;/' \
+      -i src/lib/ffmpeg-4.0/avformat.pas
+    sed \
+      -e 's/^  LIBAVUTIL_MAX_VERSION_MINOR.*$/  LIBAVUTIL_MAX_VERSION_MINOR = 1000;/' \
+      -i src/lib/ffmpeg-4.0/avutil.pas
+    sed \
+      -e 's/^  LIBSWRESAMPLE_MAX_VERSION_MINOR.*$/  LIBSWRESAMPLE_MAX_VERSION_MINOR = 1000;/' \
+      -i src/lib/ffmpeg-4.0/swresample.pas
+    sed \
+      -e 's/^  LIBSWSCALE_MAX_VERSION_MINOR.*$/  LIBSWSCALE_MAX_VERSION_MINOR = 1000;/' \
+      -i src/lib/ffmpeg-4.0/swscale.pas
+  '';
+
+  preBuild = with lib;
+    let items = concatMapStringsSep " " (x: "-rpath ${getLib x}/lib") sharedLibs;
+    in ''
+      export NIX_LDFLAGS="$NIX_LDFLAGS ${items}"
+    '';
+
+  # dlopened libgcc requires the rpath not to be shrinked
+  dontPatchELF = true;
+
+  meta = with lib; {
+    homepage = "https://usdx.eu/";
+    description = "Free and open source karaoke game";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/umoria/default.nix b/nixpkgs/pkgs/games/umoria/default.nix
new file mode 100644
index 000000000000..13ec037afba7
--- /dev/null
+++ b/nixpkgs/pkgs/games/umoria/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, gcc9Stdenv
+, fetchFromGitHub
+, autoreconfHook
+, cmake
+, ncurses6
+, runtimeShell
+}:
+
+let
+  savesDir = "~/.umoria";
+in
+gcc9Stdenv.mkDerivation rec {
+  pname = "umoria";
+  version = "5.7.15";
+
+  src = fetchFromGitHub {
+    owner = "dungeons-of-moria";
+    repo = "umoria";
+    rev = "v${version}";
+    sha256 = "sha256-1j4QkE33UcTzM06qAjk1/PyK5uNA7E/kyDe3bZcFKUM=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ ncurses6 ];
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/data $out/bin
+    cp -r umoria/data/* $out/data
+    cp umoria/umoria $out/.umoria-unwrapped
+
+    mkdir -p $out/bin
+    cat <<EOF >$out/bin/umoria
+    #! ${runtimeShell} -e
+
+    RUNDIR=\$(mktemp -d)
+
+    # Print the directory, so users have access to dumps, and let the system
+    # take care of cleaning up temp files.
+    echo "Running umoria in \$RUNDIR"
+
+    cd \$RUNDIR
+    ln -sn $out/data \$RUNDIR/data
+
+    mkdir -p ${savesDir}
+    [[ ! -f ${savesDir}/scores.dat ]] && touch ${savesDir}/scores.dat
+    ln -s ${savesDir}/scores.dat scores.dat
+
+    if [ \$# -eq 0 ]; then
+       $out/.umoria-unwrapped ${savesDir}/game.sav
+    else
+       $out/.umoria-unwrapped "\$@"
+    fi
+    EOF
+
+    chmod +x $out/bin/umoria
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://umoria.org/";
+    description = "The Dungeons of Moria - the original roguelike";
+    longDescription = ''
+      The Dungeons of Moria is a single player dungeon simulation originally written
+      by Robert Alan Koeneke, with its first public release in 1983.
+      The game was originally developed using VMS Pascal before being ported to the C
+      language by James E. Wilson in 1988, and released a Umoria.
+    '';
+    platforms = platforms.unix;
+    badPlatforms = [ "aarch64-darwin" ];
+    maintainers = with maintainers; [ aciceri kenran ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/unciv/default.nix b/nixpkgs/pkgs/games/unciv/default.nix
new file mode 100644
index 000000000000..70971fb1ad37
--- /dev/null
+++ b/nixpkgs/pkgs/games/unciv/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, lib
+, fetchurl
+, copyDesktopItems
+, makeDesktopItem
+, makeWrapper
+, jre
+, libpulseaudio
+, libXxf86vm
+}:
+let
+  desktopItem = makeDesktopItem {
+    name = "unciv";
+    exec = "unciv";
+    comment = "An open-source Android/Desktop remake of Civ V";
+    desktopName = "Unciv";
+    categories = [ "Game" ];
+  };
+
+  envLibPath = lib.makeLibraryPath [
+    libpulseaudio
+    libXxf86vm
+  ];
+
+in
+stdenv.mkDerivation rec {
+  pname = "unciv";
+  version = "4.8.13";
+
+  src = fetchurl {
+    url = "https://github.com/yairm210/Unciv/releases/download/${version}/Unciv.jar";
+    hash = "sha256-16TpsKNLcm6lbi4exYxDZWfmRsvfAhT1ktP36zC9Psg=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    makeWrapper ${jre}/bin/java $out/bin/unciv \
+      --prefix LD_LIBRARY_PATH : ${envLibPath} \
+      --prefix PATH : ${lib.makeBinPath [ jre ]} \
+      --add-flags "-jar ${src}"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    description = "An open-source Android/Desktop remake of Civ V";
+    homepage = "https://github.com/yairm210/Unciv";
+    maintainers = with maintainers; [ tex ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mpl20;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/unnethack/default.nix b/nixpkgs/pkgs/games/unnethack/default.nix
new file mode 100644
index 000000000000..af402a7de935
--- /dev/null
+++ b/nixpkgs/pkgs/games/unnethack/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, util-linux, ncurses, flex, bison }:
+
+stdenv.mkDerivation rec {
+  pname = "unnethack";
+  version = "5.3.2";
+
+  src = fetchFromGitHub {
+    name = "UnNetHack";
+    owner = "UnNetHack";
+    repo = "UnNetHack";
+    rev = version;
+    sha256 = "1rg0mqyplgn3dfh3wz09a600qxk7aidqw4d84kyiincljvhyb7ps";
+  };
+
+  buildInputs = [ ncurses ];
+
+  nativeBuildInputs = [ util-linux flex bison ];
+
+  configureFlags = [ "--enable-curses-graphics"
+                     "--disable-tty-graphics"
+                     "--with-owner=no"
+                     "--with-group=no"
+                     "--with-gamesdir=/tmp/unnethack"
+                   ];
+
+  makeFlags = [ "GAMEPERM=744" ];
+  patches = [
+    # fix regression with bison, merged in master
+    (fetchpatch {
+      name = "fix-bison.patch";
+      url = "https://github.com/UnNetHack/UnNetHack/commit/04f0a3a850a94eb8837ddcef31303968240d1c31.patch";
+      sha256 = "1zblbwqqz9nx16k6n31wi2hdvz775lvzmkjblmrx18nbm4ylj0n9";
+    })
+  ];
+
+  # Fails the build occasionally due to missing buid depends:
+  #   ./../sys/unix/unixmain.c:9:10: fatal error: date.h: No such file or directory
+  # TODO: remove once upstream issue is fixed:
+  #   https://github.com/UnNetHack/UnNetHack/issues/56
+  enableParallelBuilding = false;
+
+  postInstall = ''
+    cp -r /tmp/unnethack $out/share/unnethack/profile
+    mv $out/bin/unnethack $out/bin/.wrapped_unnethack
+    cat <<EOF >$out/bin/unnethack
+      #! ${stdenv.shell} -e
+      if [ ! -d ~/.unnethack ]; then
+        mkdir -p ~/.unnethack
+        cp -r $out/share/unnethack/profile/* ~/.unnethack
+        chmod -R +w ~/.unnethack
+      fi
+
+      ln -s ~/.unnethack /tmp/unnethack
+
+      cleanup() {
+        rm -rf /tmp/unnethack
+      }
+      trap cleanup EXIT
+
+      $out/bin/.wrapped_unnethack
+    EOF
+    chmod +x $out/bin/unnethack
+  '';
+
+  meta = with lib; {
+    description = "Fork of NetHack";
+    homepage = "https://unnethack.wordpress.com/";
+    license = "nethack";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/unvanquished/default.nix b/nixpkgs/pkgs/games/unvanquished/default.nix
new file mode 100644
index 000000000000..a8ad86e11a9c
--- /dev/null
+++ b/nixpkgs/pkgs/games/unvanquished/default.nix
@@ -0,0 +1,237 @@
+{ lib
+, stdenv
+, fetchzip
+, fetchFromGitHub
+, fetchpatch
+, SDL2
+, buildFHSEnv
+, cmake
+, copyDesktopItems
+, curl
+, freetype
+, gcc
+, geoip
+, glew
+, gmp
+, libGL
+, libjpeg
+, libogg
+, libopus
+, libpng
+, libvorbis
+, libwebp
+, lua5
+, makeDesktopItem
+, ncurses
+, nettle
+, openal
+, opusfile
+, zlib
+# to download assets
+, aria2
+, cacert
+}:
+
+let
+  version = "0.54.0";
+  binary-deps-version = "8";
+
+  src = fetchFromGitHub {
+    owner = "Unvanquished";
+    repo = "Unvanquished";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-X2c6BHI4W6fOurLiBWIBZzJrZ+7RHMEwN8GJGz6e350=";
+  };
+
+  unvanquished-binary-deps = stdenv.mkDerivation rec {
+    # DISCLAIMER: this is selected binary crap from the NaCl SDK
+    name = "unvanquished-binary-deps";
+    version = binary-deps-version;
+
+    src = fetchzip {
+      url = "https://dl.unvanquished.net/deps/linux-amd64-default_${version}.tar.xz ";
+      sha256 = "sha256-6r9j0HRMDC/7i8f4f5bBK4NmwsTpSChHrRWwz0ENAZo=";
+    };
+
+    dontPatchELF = true;
+
+    preFixup = ''
+      # We are not using the autoPatchelfHook, because it would make
+      # nacl_bootstrap_helper unable to load nacl_loader:
+      # "nacl_loader: ELF file has unreasonable e_phnum=13"
+      interpreter="$(< "$NIX_CC/nix-support/dynamic-linker")"
+      for f in pnacl/bin/*; do
+        if [ -f "$f" && -x "$f" ]; then
+          echo "Patching $f"
+          patchelf --set-interpreter "$interpreter" "$f"
+        fi
+      done
+    '';
+
+    preCheck = ''
+      # check it links correctly
+      pnacl/bin/clang -v
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out
+      cp -R ./* $out/
+
+      runHook postInstall
+    '';
+  };
+
+  libstdcpp-preload-for-unvanquished-nacl = stdenv.mkDerivation {
+    name = "libstdcpp-preload-for-unvanquished-nacl";
+
+    propagatedBuildInputs = [ gcc.cc.lib ];
+
+    buildCommand = ''
+      mkdir $out/etc -p
+      echo ${gcc.cc.lib}/lib/libstdc++.so.6 > $out/etc/ld-nix.so.preload
+    '';
+  };
+
+  fhsEnv = buildFHSEnv {
+    name = "unvanquished-fhs-wrapper";
+
+    targetPkgs = pkgs: [ libstdcpp-preload-for-unvanquished-nacl ];
+  };
+
+  wrapBinary = binary: wrappername: ''
+    cat > $out/lib/${binary}-wrapper <<-EOT
+    #!/bin/sh
+    exec $out/lib/${binary} -pakpath ${unvanquished-assets} "\$@"
+    EOT
+    chmod +x $out/lib/${binary}-wrapper
+
+    cat > $out/bin/${wrappername} <<-EOT
+    #!/bin/sh
+    exec ${fhsEnv}/bin/unvanquished-fhs-wrapper $out/lib/${binary}-wrapper "\$@"
+    EOT
+    chmod +x $out/bin/${wrappername}
+  '';
+
+  unvanquished-assets = stdenv.mkDerivation {
+    pname = "unvanquished-assets";
+    inherit version src;
+
+    outputHash = "sha256-ua9Q5E5C4t8z/yNQp6qn1i9NNDAk4ohzvgpMbCBxb8Q=";
+    outputHashMode = "recursive";
+
+    nativeBuildInputs = [ aria2 cacert ];
+
+    buildCommand = ''
+      bash $src/download-paks --cache=$(pwd) --version=${version} $out
+    '';
+  };
+
+# this really is the daemon game engine, the game itself is in the assets
+in stdenv.mkDerivation rec {
+  pname = "unvanquished";
+  inherit version src binary-deps-version;
+
+  preConfigure = ''
+    TARGET="linux-amd64-default_${binary-deps-version}"
+    mkdir daemon/external_deps/"$TARGET"
+    cp -r ${unvanquished-binary-deps}/* daemon/external_deps/"$TARGET"/
+    chmod +w -R daemon/external_deps/"$TARGET"/
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    unvanquished-binary-deps
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    gmp
+    libGL
+    zlib
+    ncurses
+    geoip
+    lua5
+    nettle
+    curl
+    SDL2
+    freetype
+    glew
+    openal
+    libopus
+    opusfile
+    libogg
+    libvorbis
+    libjpeg
+    libwebp
+    libpng
+  ];
+
+  cmakeFlags = [
+    "-DBUILD_CGAME=NO"
+    "-DBUILD_SGAME=NO"
+    "-DUSE_HARDENING=TRUE"
+    "-DUSE_LTO=TRUE"
+    "-DOpenGL_GL_PREFERENCE=LEGACY" # https://github.com/DaemonEngine/Daemon/issues/474
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "net.unvanquished.Unvanquished.desktop";
+      desktopName = "Unvanquished";
+      comment = "FPS/RTS Game - Aliens vs. Humans";
+      icon = "unvanquished";
+      exec = "unvanquished";
+      categories = [ "Game" "ActionGame" "StrategyGame" ];
+      prefersNonDefaultGPU = true;
+    })
+    (makeDesktopItem {
+      name = "net.unvanquished.UnvanquishedProtocolHandler.desktop";
+      desktopName = "Unvanquished (protocol handler)";
+      noDisplay = true;
+      exec = "unvanquished -connect %u";
+      mimeTypes = [ "x-scheme-handler/unv" ];
+      prefersNonDefaultGPU = true;
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    for f in daemon daemon-tty daemonded nacl_loader nacl_helper_bootstrap; do
+      install -Dm0755 -t $out/lib/ $f
+    done
+    install -Dm0644 -t $out/lib/ irt_core-amd64.nexe
+
+    mkdir $out/bin/
+    ${wrapBinary "daemon"     "unvanquished"}
+    ${wrapBinary "daemon-tty" "unvanquished-tty"}
+    ${wrapBinary "daemonded"  "unvanquished-server"}
+
+    for d in ${src}/dist/icons/*; do
+      install -Dm0644 -t $out/share/icons/hicolor/$(basename $d)/apps/ $d/unvanquished.png
+    done
+
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://unvanquished.net/";
+    downloadPage = "https://unvanquished.net/download/";
+    description = "A fast paced, first person strategy game";
+    # don't replace the following lib.licenses.zlib with just "zlib",
+    # or you would end up with the package instead
+    license = with lib.licenses; [
+      mit gpl3Plus lib.licenses.zlib bsd3 # engine
+      cc-by-sa-25 cc-by-sa-30 cc-by-30 cc-by-sa-40 cc0 # assets
+    ];
+    sourceProvenance = with lib.sourceTypes; [
+      fromSource
+      binaryNativeCode  # unvanquished-binary-deps
+    ];
+    maintainers = with lib.maintainers; [ afontain ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/uqm/3dovideo.nix b/nixpkgs/pkgs/games/uqm/3dovideo.nix
new file mode 100644
index 000000000000..2281688949c8
--- /dev/null
+++ b/nixpkgs/pkgs/games/uqm/3dovideo.nix
@@ -0,0 +1,61 @@
+{ stdenv, lib, requireFile, writeText, fetchFromGitHub, haskellPackages }:
+
+let
+  makeSpin = num: let
+    padded = (lib.optionalString (lib.lessThan num 10) "0") + toString num;
+  in "slides.spins.${padded} = 3DOVID:" +
+     "addons/3dovideo/spins/ship${padded}.duk:" +
+     "addons/3dovideo/spins/spin.aif:" +
+     "addons/3dovideo/spins/ship${padded}.aif:89";
+
+  videoRMP = writeText "3dovideo.rmp" (''
+    slides.ending = 3DOVID:addons/3dovideo/ending/victory.duk
+    slides.intro = 3DOVID:addons/3dovideo/intro/intro.duk
+  '' + lib.concatMapStrings makeSpin (lib.range 0 24));
+
+  helper = with haskellPackages; mkDerivation rec {
+    pname = "uqm3donix";
+    version = "0.1.0.0";
+
+    src = fetchFromGitHub {
+      owner = "aszlig";
+      repo = "uqm3donix";
+      rev = "v${version}";
+      hash = "sha256-rK30u2PBysiSGSA9829F1Nom/wtoVN6rGTBneRKeWEw=";
+    };
+
+    isLibrary = false;
+    isExecutable = true;
+
+    buildDepends = [ base binary bytestring filepath tar ];
+
+    description = "Extract video files from a Star Control II 3DO image";
+    license = lib.licenses.bsd3;
+  };
+
+in stdenv.mkDerivation {
+  name = "uqm-3dovideo";
+
+  src = requireFile rec {
+    name = "videos.tar";
+    sha256 = "044h0cl69r0kc43vk4n0akk0prwzb7inq324h5yfqb38sd4zkds1";
+    message = ''
+      In order to get the intro and ending sequences from the 3DO version, you
+      need to have the original 3DO Star Control II CD. Create an image from
+      the CD and use uqm3donix* to extract a tarball with the videos from it.
+      The reason for this is because the 3DO uses its own proprietary disk
+      format.
+
+      Save the file as videos.tar and use "nix-prefetch-url file://\$PWD/${name}" to
+      add it to the Nix store.
+
+      [*] ${helper}/bin/uqm3donix CDIMAGE ${name}
+    '';
+  };
+
+  buildCommand = ''
+    mkdir -vp "$out"
+    tar xf "$src" -C "$out" --strip-components=3
+    cp "${videoRMP}" "$out/3dovideo.rmp"
+  '';
+}
diff --git a/nixpkgs/pkgs/games/uqm/default.nix b/nixpkgs/pkgs/games/uqm/default.nix
new file mode 100644
index 000000000000..7da4c1e597b5
--- /dev/null
+++ b/nixpkgs/pkgs/games/uqm/default.nix
@@ -0,0 +1,109 @@
+{ stdenv, lib, fetchurl, fetchFromGitHub, pkg-config, libGLU, libGL
+, SDL2, libpng, libvorbis, libogg, libmikmod
+
+, use3DOVideos ? false, requireFile ? null, writeText ? null
+, haskellPackages ? null
+
+, useRemixPacks ? false
+}:
+
+assert use3DOVideos -> requireFile != null && writeText != null
+                    && haskellPackages != null;
+
+let
+  videos = import ./3dovideo.nix {
+    inherit stdenv lib requireFile writeText fetchFromGitHub haskellPackages;
+  };
+
+  remixPacks = lib.imap1 (num: sha256: fetchurl rec {
+    name = "uqm-remix-disc${toString num}.uqm";
+    url = "mirror://sourceforge/sc2/${name}";
+    inherit sha256;
+  }) [
+    "1s470i6hm53l214f2rkrbp111q4jyvnxbzdziqg32ffr8m3nk5xn"
+    "1pmsq65k8gk4jcbyk3qjgi9yqlm0dlaimc2r8hz2fc9f2124gfvz"
+    "07g966ylvw9k5q9jdzqdczp7c5qv4s91xjlg4z5z27fgcs7rzn76"
+    "1l46k9aqlcp7d3fjkjb3n05cjfkxx8rjlypgqy0jmdx529vikj54"
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "uqm";
+  version = "0.8.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sc2/uqm-${version}-src.tgz";
+    sha256 = "JPL325z3+vU7lfniWA5vWWIFqY7QwzXP6DTGR4WtT1o=";
+  };
+
+  content = fetchurl {
+    url = "mirror://sourceforge/sc2/uqm-${version}-content.uqm";
+    sha256 = "d9dawl5vt1WjPEujs4p7e8Qfy8AolokbDMmskhS3Lu8=";
+  };
+
+  voice = fetchurl {
+    url = "mirror://sourceforge/sc2/uqm-${version}-voice.uqm";
+    sha256 = "ntv1HXfYtTM5nF86+1STFKghDXqrccosUbTySDIzekU=";
+  };
+
+  music = fetchurl {
+    url = "mirror://sourceforge/sc2/uqm-${version}-3domusic.uqm";
+    sha256 = "RM087H6VabQRettNd/FSKJCXJWYmc5GuCWMUhdIx2Lk=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ SDL2 libpng libvorbis libogg libmikmod libGLU libGL ];
+
+  postUnpack = ''
+    mkdir -p uqm-${version}/content/packages
+    mkdir -p uqm-${version}/content/addons
+    ln -s "$content" "uqm-${version}/content/packages/uqm-${version}-content.uqm"
+    ln -s "$music" "uqm-${version}/content/addons/uqm-${version}-3domusic.uqm"
+    ln -s "$voice" "uqm-${version}/content/addons/uqm-${version}-voice.uqm"
+  '' + lib.optionalString useRemixPacks (lib.concatMapStrings (disc: ''
+    ln -s "${disc}" "uqm-$version/content/addons/${disc.name}"
+  '') remixPacks) + lib.optionalString use3DOVideos ''
+    ln -s "${videos}" "uqm-${version}/content/addons/3dovideo"
+  '';
+
+  postPatch = ''
+    # Using _STRINGS_H as include guard conflicts with glibc.
+    sed -i -e '/^#/s/_STRINGS_H/_UQM_STRINGS_H/g' src/uqm/comm/*/strings.h
+    # See https://github.com/NixOS/nixpkgs/pull/93560
+    sed -i -e 's,/tmp/,$TMPDIR/,' build/unix/config_functions
+  '';
+
+  # uqm has a 'unique' build system with a root script incidentally called
+  # 'build.sh'.
+  configurePhase = ''
+    echo "INPUT_install_prefix_VALUE='$out'" >> config.state
+    echo "INPUT_install_bindir_VALUE='$out/bin'" >> config.state
+    echo "INPUT_install_libdir_VALUE='$out/lib'" >> config.state
+    echo "INPUT_install_sharedir_VALUE='$out/share'" >> config.state
+    PREFIX=$out ./build.sh uqm config
+  '';
+
+  buildPhase = ''
+    ./build.sh uqm
+  '';
+
+  installPhase = ''
+    ./build.sh uqm install
+    sed -i $out/bin/uqm -e "s%/usr/local/games/%$out%g"
+  '';
+
+  meta = {
+    description = "Remake of Star Control II";
+    longDescription = ''
+      The goals for the The Ur-Quan Masters project are:
+        - to bring Star Control II to modern platforms, thereby making a lot of
+          people happy
+        - to make game translations easy, thereby making even more people happy
+        - to adapt the code so that people can more easily make their own
+          spin-offs, thereby making zillions more people happy!
+    '';
+    homepage = "https://sc2.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ jcumming aszlig ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/urbanterror/Makefile.local b/nixpkgs/pkgs/games/urbanterror/Makefile.local
new file mode 100644
index 000000000000..aee08a8ade79
--- /dev/null
+++ b/nixpkgs/pkgs/games/urbanterror/Makefile.local
@@ -0,0 +1,5 @@
+USE_CURL = 1
+USE_CURL_DLOPEN = 0
+USE_FREETYPE = 1
+USE_OPENAL = 1
+USE_OPENAL_DLOPEN = 0
diff --git a/nixpkgs/pkgs/games/urbanterror/default.nix b/nixpkgs/pkgs/games/urbanterror/default.nix
new file mode 100644
index 000000000000..a1bf80784d03
--- /dev/null
+++ b/nixpkgs/pkgs/games/urbanterror/default.nix
@@ -0,0 +1,115 @@
+{ lib
+, fetchzip
+, stdenv
+, copyDesktopItems
+, imagemagick
+, libicns
+, makeBinaryWrapper
+, curl
+, libGL
+, libGLU
+, openal
+, libXxf86vm
+, SDL
+, makeDesktopItem
+}:
+
+let
+  version = "4.3.4";
+
+  urbanterror-maps = fetchzip {
+    name = "urbanterror-maps";
+    url = "http://cdn.urbanterror.info/urt/43/releases/zips/UrbanTerror${builtins.replaceStrings ["."] [""] version}_full.zip";
+    hash = "sha256-C6Gb5PPECAOjQhmkrzkV6dpY/zHVtUj9oq3507o2PUI=";
+  };
+
+  urbanterror-source = fetchzip {
+    name = "urbanterror-source";
+    url = "https://github.com/FrozenSand/ioq3-for-UrbanTerror-4/archive/release-${version}.zip";
+    hash = "sha256-zF6Tkaj5WYkFU66VwpBFr1P18OJGrGgxnc/jvcvt8hA=";
+  };
+in
+stdenv.mkDerivation {
+  pname = "urbanterror";
+  inherit version;
+
+  srcs = [
+    urbanterror-maps
+    urbanterror-source
+  ];
+
+  sourceRoot = "urbanterror-source";
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    imagemagick
+    libicns
+    makeBinaryWrapper
+  ];
+
+  buildInputs = [
+    curl
+    libGL
+    libGLU
+    openal
+    libXxf86vm
+    SDL
+  ];
+
+  preConfigure = ''
+    cp ${./Makefile.local} ./Makefile.local
+  '';
+
+  installTargets = [ "copyfiles" ];
+  installFlags = [ "COPYDIR=$(out)/share/urbanterror" ];
+
+  preInstall = ''
+    mkdir -p $out/share/urbanterror
+  '';
+
+  postInstall = ''
+    icns2png --extract ${urbanterror-maps}/Quake3-UrT.app/Contents/Resources/quake3-urt.icns
+
+    for size in 16 24 32 48 64 128 256 512 1024; do
+      mkdir -pv $out/share/icons/hicolor/"$size"x"$size"/apps
+      if [ ! -e quake3-urt_"$size"x"$size"x32.png ] ; then
+        convert -resize "$size"x"$size" quake3-urt_512x512x32.png quake3-urt_"$size"x"$size"x32.png
+      fi
+      install -Dm644 quake3-urt_"$size"x"$size"x32.png $out/share/icons/hicolor/"$size"x"$size"/apps/urbanterror.png
+    done;
+
+    makeWrapper $out/share/urbanterror/Quake3-UrT.* $out/bin/urbanterror
+    makeWrapper $out/share/urbanterror/Quake3-UrT-Ded.* $out/bin/urbanterror-ded
+
+    ln -s ${urbanterror-maps}/q3ut4 $out/share/urbanterror/
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "urbanterror";
+      exec = "urbanterror";
+      icon = "urbanterror";
+      comment = "A multiplayer tactical FPS on top of Quake 3 engine";
+      desktopName = "Urban Terror";
+      categories = [ "Game" "ActionGame" ];
+    })
+  ];
+
+  meta = {
+    description = "A multiplayer tactical FPS on top of Quake 3 engine";
+    homepage = "https://www.urbanterror.info";
+    license = lib.licenses.unfreeRedistributable;
+    longDescription = ''
+      Urban Terror is a free multiplayer first person shooter developed by
+      FrozenSand, that (thanks to the ioquake3-code) does not require
+      Quake III Arena anymore. Urban Terror can be described as a Hollywood
+      tactical shooter; somewhat realism based, but the motto is "fun over
+      realism". This results in a very unique, enjoyable and addictive game.
+    '';
+    mainProgram = "urbanterror";
+    maintainers = with lib.maintainers; [ astsmtl drupol ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ut2004/default.nix b/nixpkgs/pkgs/games/ut2004/default.nix
new file mode 100644
index 000000000000..3f306ac6eb54
--- /dev/null
+++ b/nixpkgs/pkgs/games/ut2004/default.nix
@@ -0,0 +1,9 @@
+{ callPackage }:
+
+{
+  ut2004-demo = callPackage ./demo.nix { };
+
+  ut2004 = gamePacks: callPackage ./wrapper.nix {
+    inherit gamePacks;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ut2004/demo.nix b/nixpkgs/pkgs/games/ut2004/demo.nix
new file mode 100644
index 000000000000..5203453cc601
--- /dev/null
+++ b/nixpkgs/pkgs/games/ut2004/demo.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl }:
+
+let
+  arch =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "amd64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "x86"
+    else throw "Unsupported architecture";
+
+in stdenv.mkDerivation rec {
+  pname = "ut2004-demo";
+  version = "3334";
+
+  src = fetchurl {
+    url = "http://ftp.snt.utwente.nl/pub/games/UT2004/demo/UT2004-LNX-Demo${version}.run.gz";
+    sha256 = "0d5f84qz8l1rg16yzx2k4ikr46n9iwj68na1bqi87wrww7ck6jh7";
+  };
+
+  buildCommand = ''
+    cat $src | gunzip > setup.run
+    chmod +x setup.run
+    ./setup.run --noexec --target .
+    mkdir $out
+    tar -xaf ut2004demo.tar.bz2 -C $out
+    tar -xaf linux-${arch}.tar.bz2 -C $out
+
+    rm $out/System/libSDL-1.2.so.0
+    rm $out/System/openal.so
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "A first-person shooter video game developed by Epic Games and Digital Extreme -- demo version";
+    homepage = "http://www.unrealtournament2004.com";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/ut2004/wrapper.nix b/nixpkgs/pkgs/games/ut2004/wrapper.nix
new file mode 100644
index 000000000000..cc5b0e400bc1
--- /dev/null
+++ b/nixpkgs/pkgs/games/ut2004/wrapper.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, runCommand, buildEnv, makeWrapper, makeDesktopItem, gamePacks, libstdcxx5, SDL, openal }:
+
+let
+  game = buildEnv {
+    name = "ut2004-game";
+    paths = gamePacks;
+    ignoreCollisions = true;
+    pathsToLink = [ "/" "/System" ];
+    postBuild = ''
+      ln -s ${lib.getLib SDL}/lib/libSDL-1.2.so.0 $out/System
+      ln -s ${lib.getLib openal}/lib/libopenal.so $out/System/openal.so
+      for i in $out/System/*-bin; do
+        path="$(readlink -f "$i")"
+        rm "$i"
+        cp "$path" "$i"
+        chmod +w "$i"
+        patchelf \
+          --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
+          --set-rpath "$out/System:${lib.makeLibraryPath [ libstdcxx5 ]}" \
+          "$i"
+      done
+    '';
+  };
+
+  desktop = makeDesktopItem {
+    name = "ut2004";
+    desktopName = "Unreal Tournament 2004";
+    comment = "A first-person shooter video game developed by Epic Games and Digital Extreme";
+    genericName = "First-person shooter";
+    categories = [ "Game" ];
+    exec = "ut2004";
+  };
+
+in runCommand "ut2004" {
+  nativeBuildInputs = [ makeWrapper ];
+} ''
+  mkdir -p $out/bin
+  for i in ${game}/System/*-bin; do
+    name="$(basename "$i")"
+    makeWrapper $i $out/bin/''${name%-bin} \
+      --chdir "${game}/System"
+  done
+
+  mkdir -p $out/share/applications
+  ln -s ${desktop}/share/applications/* $out/share/applications
+''
diff --git a/nixpkgs/pkgs/games/vassal/default.nix b/nixpkgs/pkgs/games/vassal/default.nix
new file mode 100644
index 000000000000..a3e7516c6f81
--- /dev/null
+++ b/nixpkgs/pkgs/games/vassal/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchzip
+, glib
+, jre
+, makeWrapper
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "VASSAL";
+  version = "3.7.0";
+
+  src = fetchzip {
+    url = "https://github.com/vassalengine/vassal/releases/download/${version}/${pname}-${version}-linux.tar.bz2";
+    sha256 = "sha256-GmqPnay/K36cJgP622ht18csaohcUYZpvMD8LaOH4eM=";
+  };
+
+  buildInputs = [
+    glib
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/vassal $out/doc
+
+    cp CHANGES LICENSE README.md $out
+    cp -R lib/* $out/share/vassal
+    cp -R doc/* $out/doc
+
+    makeWrapper ${jre}/bin/java $out/bin/vassal \
+      --add-flags "-Duser.dir=$out -cp $out/share/vassal/Vengine.jar \
+      VASSAL.launch.ModuleManager"
+
+    runHook postInstall
+  '';
+
+  # Don't move doc to share/, VASSAL expects it to be in the root
+  forceShare = [ "man" "info" ];
+
+  meta = with lib; {
+      description = "A free, open-source boardgame engine";
+      homepage = "https://vassalengine.org/";
+      sourceProvenance = with sourceTypes; [ binaryBytecode ];
+      license = licenses.lgpl21Only;
+      maintainers = with maintainers; [ tvestelind ];
+      platforms = platforms.unix;
+      mainProgram = "vassal";
+  };
+}
diff --git a/nixpkgs/pkgs/games/vcmi/default.nix b/nixpkgs/pkgs/games/vcmi/default.nix
new file mode 100644
index 000000000000..ad5aa48c7c5d
--- /dev/null
+++ b/nixpkgs/pkgs/games/vcmi/default.nix
@@ -0,0 +1,102 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+, boost
+, cmake
+, ffmpeg
+, fuzzylite
+, innoextract
+, luajit
+, minizip
+, ninja
+, pkg-config
+, python3
+, qtbase
+, qttools
+, tbb
+, unshield
+, wrapQtAppsHook
+, zlib
+, testers
+, vcmi
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vcmi";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "vcmi";
+    repo = "vcmi";
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-dwTQRpu+IrKhuiiw/uYBt8i/BYlQ5XCy/jUhDAo6aa4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    pkg-config
+    python3
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+    boost
+    ffmpeg
+    fuzzylite
+    luajit
+    minizip
+    qtbase
+    qttools
+    tbb
+    zlib
+  ];
+
+  cmakeFlags = [
+    "-DENABLE_LUA:BOOL=ON"
+    "-DENABLE_ERM:BOOL=OFF"
+    "-DENABLE_GITVERSION:BOOL=OFF"
+    "-DENABLE_PCH:BOOL=OFF"
+    "-DENABLE_TEST:BOOL=OFF"
+    "-DFORCE_BUNDLED_MINIZIP:BOOL=OFF"
+    "-DFORCE_BUNDLED_FL:BOOL=OFF"
+    "-DCMAKE_INSTALL_RPATH:STRING=$out/lib/vcmi"
+    "-DCMAKE_INSTALL_BINDIR:STRING=bin"
+    "-DCMAKE_INSTALL_LIBDIR:STRING=lib"
+    "-DCMAKE_INSTALL_DATAROOTDIR:STRING=share"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/vcmibuilder \
+      --prefix PATH : "${lib.makeBinPath [ innoextract ffmpeg unshield ]}"
+  '';
+
+  doCheck = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = vcmi;
+    command = ''
+      XDG_DATA_HOME=$PWD XDG_CACHE_HOME=$PWD XDG_CONFIG_HOME=$PWD \
+        vcmiclient --version
+    '';
+  };
+
+  meta = with lib; {
+    description = "An open-source engine for Heroes of Might and Magic III";
+    homepage = "https://vcmi.eu";
+    changelog = "https://github.com/vcmi/vcmi/blob/${src.rev}/ChangeLog";
+    license = with licenses; [ gpl2Only cc-by-sa-40 ];
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.linux;
+    mainProgram = "vcmilauncher";
+  };
+}
diff --git a/nixpkgs/pkgs/games/vdrift/0001-Ignore-missing-data-for-installation.patch b/nixpkgs/pkgs/games/vdrift/0001-Ignore-missing-data-for-installation.patch
new file mode 100644
index 000000000000..6794e8018aff
--- /dev/null
+++ b/nixpkgs/pkgs/games/vdrift/0001-Ignore-missing-data-for-installation.patch
@@ -0,0 +1,27 @@
+From 7ebe252a8488a63675d1c50c0faa1bdc5ff97889 Mon Sep 17 00:00:00 2001
+From: Linus Heckemann <git@sphalerite.org>
+Date: Fri, 5 Jan 2018 21:27:28 +0100
+Subject: [PATCH] Ignore missing data for installation
+
+This is for packaging vdrift separately from its data in nixpkgs.
+---
+ SConstruct | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index 4394de0b..beef29a4 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -511,9 +511,6 @@ env.Alias(target = 'bin-package', source = bin_archive)
+ #----------------#
+ Export(['env', 'version', 'src_dir', 'bin_dir'])
+ if 'install' in COMMAND_LINE_TARGETS:
+-    if not os.path.isfile('data/SConscript'):
+-        raise 'VDrift data not found. Please make sure data is placed in vdrift directory. See README.md and http://wiki.vdrift.net.' 
+-    SConscript('data/SConscript')
+     # desktop appdata installation
+     install_desktop = env.Install(env['destdir'] + env['prefix'] + '/share/applications', 'vdrift.desktop')
+     install_appdata = env.Install(env['destdir'] + env['prefix'] + '/share/appdata', 'vdrift.appdata.xml')
+-- 
+2.15.0
+
diff --git a/nixpkgs/pkgs/games/vdrift/default.nix b/nixpkgs/pkgs/games/vdrift/default.nix
new file mode 100644
index 000000000000..50fb4af1416a
--- /dev/null
+++ b/nixpkgs/pkgs/games/vdrift/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchsvn
+, pkg-config
+, scons
+, libGLU
+, libGL
+, SDL2
+, SDL2_image
+, libvorbis
+, bullet
+, curl
+, gettext
+, writeShellScriptBin
+
+, data ? fetchsvn {
+    url = "svn://svn.code.sf.net/p/vdrift/code/vdrift-data";
+    rev = "1446";
+    sha256 = "sha256-KEu49GAOfenPyuaUItt6W9pkuqUNpXgmTSFuc7ThljQ=";
+  }
+}:
+let
+  version = "unstable-2021-09-05";
+  bin = stdenv.mkDerivation {
+    pname = "vdrift";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "vdrift";
+      repo = "vdrift";
+      rev = "7e9e00c8612b2014d491f026dd86b03f9fb04dcd";
+      sha256 = "sha256-DrzRF4WzwEXCNALq0jz8nHWZ1oYTEsdrvSYVYI1WkTI=";
+    };
+
+    nativeBuildInputs = [ pkg-config scons ];
+    buildInputs = [ libGLU libGL SDL2 SDL2_image libvorbis bullet curl gettext ];
+
+    patches = [
+      ./0001-Ignore-missing-data-for-installation.patch
+    ];
+
+    buildPhase = ''
+      sed -i -e s,/usr/local,$out, SConstruct
+      export CXXFLAGS="$(pkg-config --cflags SDL2_image)"
+      scons -j$NIX_BUILD_CORES
+    '';
+    installPhase = "scons install";
+
+    meta = {
+      description = "Car racing game";
+      homepage = "http://vdrift.net/";
+      license = lib.licenses.gpl2Plus;
+      maintainers = with lib.maintainers; [ viric ];
+      platforms = lib.platforms.linux;
+    };
+  };
+  wrappedName = "vdrift-${version}-with-data-${toString data.rev}";
+in
+(writeShellScriptBin "vdrift"  ''
+  export VDRIFT_DATA_DIRECTORY="${data}"
+  exec ${bin}/bin/vdrift "$@"
+'').overrideAttrs (_: {
+  name = wrappedName;
+  meta = bin.meta // {
+    hydraPlatforms = [ ];
+  };
+  unwrapped = bin;
+  inherit bin data;
+})
diff --git a/nixpkgs/pkgs/games/vectoroids/default.nix b/nixpkgs/pkgs/games/vectoroids/default.nix
new file mode 100644
index 000000000000..82c157104439
--- /dev/null
+++ b/nixpkgs/pkgs/games/vectoroids/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL
+, SDL_image
+, SDL_mixer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vectoroids";
+  version = "1.1.0";
+
+  src = fetchurl {
+    url = "ftp://ftp.tuxpaint.org/unix/x/vectoroids/src/vectoroids-${version}.tar.gz";
+    sha256 = "0bkvd4a1v496w0vlvqyi1a6p25ssgpkchxxxi8899sb72wlds54d";
+  };
+
+  buildInputs = [
+    SDL
+    SDL_image
+    SDL_mixer
+  ];
+
+  preConfigure = ''
+    sed -i s,/usr/local,$out, Makefile
+    mkdir -p $out/bin
+  '';
+
+  meta = {
+    homepage = "http://www.newbreedsoftware.com/vectoroids/";
+    description = "Clone of the classic arcade game Asteroids by Atari";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/vessel/default.nix b/nixpkgs/pkgs/games/vessel/default.nix
new file mode 100644
index 000000000000..7c535cb323ec
--- /dev/null
+++ b/nixpkgs/pkgs/games/vessel/default.nix
@@ -0,0 +1,84 @@
+{ lib, stdenv, requireFile, SDL, libpulseaudio, alsa-lib, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "vessel";
+  version = "12082012";
+
+  goBuyItNow = ''
+    We cannot download the full version automatically, as you require a license.
+    Once you bought a license, you need to add your downloaded version to the nix store.
+    You can do this by using "nix-prefetch-url file://\$PWD/vessel-${version}-bin" in the
+    directory where you saved it.
+  '';
+
+  src = if (stdenv.isi686) then
+    requireFile {
+      message = goBuyItNow;
+      name = "vessel-${version}-bin";
+      sha256 = "1vpwcrjiln2mx43h7ib3jnccyr3chk7a5x2bw9kb4lw8ycygvg96";
+    } else throw "unsupported platform ${stdenv.hostPlatform.system} only i686-linux supported for now.";
+
+  phases = "installPhase";
+  ld_preload = ./isatty.c;
+
+  libPath = lib.makeLibraryPath [ stdenv.cc.cc stdenv.cc.libc ]
+    + ":" + lib.makeLibraryPath [ SDL libpulseaudio alsa-lib ] ;
+
+  installPhase = ''
+    mkdir -p $out/libexec/strangeloop/vessel/
+    mkdir -p $out/bin
+
+    # allow scripting of the mojoinstaller
+    gcc -fPIC -shared -o isatty.so $ld_preload
+
+    echo @@@
+    echo @@@ this next step appears to hang for a while
+    echo @@@
+
+    # if we call ld.so $(bin) we don't need to set the ELF interpreter, and save a patchelf step.
+    LD_PRELOAD=./isatty.so $(cat $NIX_CC/nix-support/dynamic-linker) $src << IM_A_BOT
+    n
+    $out/libexec/strangeloop/vessel/
+    IM_A_BOT
+
+    # use nix SDL libraries
+    rm $out/libexec/strangeloop/vessel/x86/libSDL*
+    rm $out/libexec/strangeloop/vessel/x86/libstdc++*
+
+    # props to Ethan Lee (the Vessel porter) for understanding
+    # how $ORIGIN works in rpath. There is hope for humanity.
+    patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath $libPath:$out/libexec/strangeloop/vessel/x86/ \
+      $out/libexec/strangeloop/vessel/x86/vessel.x86
+
+    # we need to libs to find their deps
+    for lib in $out/libexec/strangeloop/vessel/x86/lib* ; do
+    patchelf \
+      --set-rpath $libPath:$out/libexec/strangeloop/vessel/x86/ \
+      $lib
+    done
+
+    cat > $out/bin/Vessel << EOW
+    #!${runtimeShell}
+    cd $out/libexec/strangeloop/vessel/
+    exec ./x86/vessel.x86
+    EOW
+
+    chmod +x $out/bin/Vessel
+  '';
+
+  meta = with lib; {
+    description = "A fluid physics based puzzle game";
+    longDescription = ''
+      Living liquid machines have overrun this world of unstoppable progress,
+      and it is the role of their inventor, Arkwright, to stop the chaos they are
+      causing. Vessel is a game about a man with the power to bring ordinary matter
+      to life, and all the consequences that ensue.
+    '';
+    homepage = "http://www.strangeloopgames.com";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ jcumming ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/vessel/isatty.c b/nixpkgs/pkgs/games/vessel/isatty.c
new file mode 100644
index 000000000000..38ee2b6ce2e8
--- /dev/null
+++ b/nixpkgs/pkgs/games/vessel/isatty.c
@@ -0,0 +1,6 @@
+// We override isatty to help 'automate' installers. 
+
+// Some installers (mojoinstall) have a stdio GUI that refuses to run if you
+// feed it a file on stdin. This should help that. 
+
+int isatty(int fd) { return 1; }
diff --git a/nixpkgs/pkgs/games/vimgolf/Gemfile b/nixpkgs/pkgs/games/vimgolf/Gemfile
new file mode 100644
index 000000000000..a375239ffc82
--- /dev/null
+++ b/nixpkgs/pkgs/games/vimgolf/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'vimgolf'
diff --git a/nixpkgs/pkgs/games/vimgolf/Gemfile.lock b/nixpkgs/pkgs/games/vimgolf/Gemfile.lock
new file mode 100644
index 000000000000..9eaf1172d05e
--- /dev/null
+++ b/nixpkgs/pkgs/games/vimgolf/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    highline (2.0.3)
+    json_pure (2.6.1)
+    thor (1.2.1)
+    vimgolf (0.5.0)
+      highline (~> 2.0, >= 2.0.3)
+      json_pure (~> 2.3, >= 2.3.1)
+      thor (~> 1.0, >= 1.0.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  vimgolf
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/games/vimgolf/default.nix b/nixpkgs/pkgs/games/vimgolf/default.nix
new file mode 100644
index 000000000000..2847ff7dd3bf
--- /dev/null
+++ b/nixpkgs/pkgs/games/vimgolf/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "vimgolf";
+  gemdir = ./.;
+  exes = [ "vimgolf" ];
+
+  passthru.updateScript = bundlerUpdateScript "vimgolf";
+
+  meta = with lib; {
+    description = "A game that tests Vim efficiency";
+    homepage = "https://vimgolf.com";
+    license = licenses.mit;
+    maintainers = with maintainers; [ leungbk ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/vimgolf/gemset.nix b/nixpkgs/pkgs/games/vimgolf/gemset.nix
new file mode 100644
index 000000000000..17d66b934b22
--- /dev/null
+++ b/nixpkgs/pkgs/games/vimgolf/gemset.nix
@@ -0,0 +1,43 @@
+{
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yclf57n2j3cw8144ania99h1zinf8q3f5zrhqa754j6gl95rp9d";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  json_pure = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05ddn30jkpw6anfakfm7lffnrl2i0265ryrrwa4j0ivihjr95y82";
+      type = "gem";
+    };
+    version = "2.6.1";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  vimgolf = {
+    dependencies = ["highline" "json_pure" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190dzqkvshd4i6jf30xnpm4sczraw6rdh4wvfh6qnmg0czmj0sny";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+}
diff --git a/nixpkgs/pkgs/games/vintagestory/default.nix b/nixpkgs/pkgs/games/vintagestory/default.nix
new file mode 100644
index 000000000000..22f64b383f00
--- /dev/null
+++ b/nixpkgs/pkgs/games/vintagestory/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, xorg
+, gtk2
+, sqlite
+, openal
+, cairo
+, libGLU
+, SDL2
+, freealut
+, libglvnd
+, pipewire
+, libpulseaudio
+, dotnet-runtime_7
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vintagestory";
+  version = "1.18.12";
+
+  src = fetchurl {
+    url = "https://cdn.vintagestory.at/gamefiles/stable/vs_client_linux-x64_${version}.tar.gz";
+    hash = "sha256-akeW03+IdRvt3Fs3gF6TcYv9gD33DHPtpmiiMa0b92k=";
+  };
+
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+
+  buildInputs = [ dotnet-runtime_7 ];
+
+  runtimeLibs = lib.makeLibraryPath ([
+    gtk2
+    sqlite
+    openal
+    cairo
+    libGLU
+    SDL2
+    freealut
+    libglvnd
+    pipewire
+    libpulseaudio
+  ] ++ (with xorg; [
+    libX11
+    libXi
+  ]));
+
+  desktopItems = makeDesktopItem {
+    name = "vintagestory";
+    desktopName = "Vintage Story";
+    exec = "vintagestory";
+    icon = "vintagestory";
+    comment = "Innovate and explore in a sandbox world";
+    categories = [ "Game" ];
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/vintagestory $out/bin $out/share/pixmaps $out/share/fonts/truetype
+    cp -r * $out/share/vintagestory
+    cp $out/share/vintagestory/assets/gameicon.xpm $out/share/pixmaps/vintagestory.xpm
+    cp $out/share/vintagestory/assets/game/fonts/*.ttf $out/share/fonts/truetype
+
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    makeWrapper ${dotnet-runtime_7}/bin/dotnet $out/bin/vintagestory \
+      --prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
+      --add-flags $out/share/vintagestory/Vintagestory.dll
+    makeWrapper ${dotnet-runtime_7}/bin/dotnet $out/bin/vintagestory-server \
+      --prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
+      --add-flags $out/share/vintagestory/VintagestoryServer.dll
+  '' + ''
+    find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do
+      local filename="$(basename -- "$file")"
+      ln -sf "$filename" "''${file%/*}"/"''${filename,,}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "An in-development indie sandbox game about innovation and exploration";
+    homepage = "https://www.vintagestory.at/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ artturin gigglesquid ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/vitetris/default.nix b/nixpkgs/pkgs/games/vitetris/default.nix
new file mode 100644
index 000000000000..f7e566b22084
--- /dev/null
+++ b/nixpkgs/pkgs/games/vitetris/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "vitetris";
+  version = "0.59.1";
+
+  src = fetchFromGitHub {
+    owner = "vicgeralds";
+    repo = "vitetris";
+    rev = "v${version}";
+    sha256 = "sha256-Rbfa2hD67RGmInfWwYD4SthL8lm5bGSBi3oudV5hAao=";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  makeFlags = [ "INSTALL=install" ];
+
+  meta = {
+    description = "Terminal-based Tetris clone by Victor Nilsson";
+    homepage = "http://www.victornils.net/tetris/";
+    license = lib.licenses.bsd2;
+    maintainers = with lib.maintainers; [ siers ];
+    mainProgram = "tetris";
+
+    longDescription = ''
+      vitetris is a terminal-based Tetris clone by Victor Nilsson. Gameplay is much
+      like the early Tetris games by Nintendo.
+
+      Features include: configurable keys, highscore table, two-player mode with
+      garbage, network play, joystick (gamepad) support on Linux or with Allegro.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/games/vms-empire/default.nix b/nixpkgs/pkgs/games/vms-empire/default.nix
new file mode 100644
index 000000000000..b3e89617ef33
--- /dev/null
+++ b/nixpkgs/pkgs/games/vms-empire/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchurl
+, ncurses
+, xmlto
+, docbook_xml_dtd_44
+, docbook_xsl
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vms-empire";
+  version = "1.16";
+
+  src = fetchurl{
+    url = "http://www.catb.org/~esr/${pname}/${pname}-${version}.tar.gz";
+    hash = "sha256-XETIbt/qVU+TpamPc2WQynqqUuZqkTUnItBprjg+gPk=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = [
+    ncurses
+    xmlto
+    docbook_xml_dtd_44
+    docbook_xsl
+  ];
+
+  postBuild = ''
+    xmlto man vms-empire.xml
+    xmlto html-nochunks vms-empire.xml
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D vms-empire -t ${placeholder "out"}/bin/
+    install -D vms-empire.html -t ${placeholder "out"}/share/doc/${pname}/
+    install -D vms-empire.desktop -t ${placeholder "out"}/share/applications/
+    install -D vms-empire.png -t ${placeholder "out"}/share/icons/hicolor/48x48/apps/
+    install -D vms-empire.xml -t ${placeholder "out"}/share/appdata/
+    installManPage empire.6
+    runHook postInstall
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "http://catb.org/~esr/vms-empire/";
+    description = "The ancestor of all expand/explore/exploit/exterminate games";
+    longDescription = ''
+      Empire is a simulation of a full-scale war between two emperors, the
+      computer and you. Naturally, there is only room for one, so the object of
+      the game is to destroy the other. The computer plays by the same rules
+      that you do. This game was ancestral to all later
+      expand/explore/exploit/exterminate games, including Civilization and
+      Master of Orion.
+    '';
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/voxelands/default.nix b/nixpkgs/pkgs/games/voxelands/default.nix
new file mode 100644
index 000000000000..906c3b9bd36c
--- /dev/null
+++ b/nixpkgs/pkgs/games/voxelands/default.nix
@@ -0,0 +1,74 @@
+{ lib, stdenv
+, fetchFromGitLab
+, bzip2
+, cmake
+, expat
+, freetype
+, irrlicht
+, libICE
+, libGL
+, libGLU
+, libSM
+, libX11
+, libXext
+, libXxf86vm
+, libjpeg
+, libpng
+, libvorbis
+, openal
+, pkg-config
+, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "voxelands";
+  version = "1704.00";
+
+  src = fetchFromGitLab {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "0yj9z9nygpn0z63y739v72l3kg81wd71xgix5k045vfzhqsam5m0";
+  };
+
+  cmakeFlags = [
+    "-DIRRLICHT_INCLUDE_DIR=${irrlicht}/include/irrlicht"
+    "-DCMAKE_C_FLAGS_RELEASE=-DNDEBUG"
+    "-DCMAKE_CXX_FLAGS_RELEASE=-DNDEBUG"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    # has to go before others to override transitive libpng-1.6
+    libpng
+
+    bzip2
+    expat
+    freetype
+    irrlicht
+    libICE
+    libGL
+    libGLU
+    libSM
+    libX11
+    libXext
+    libXxf86vm
+    libjpeg
+    libvorbis
+    openal
+    sqlite
+  ];
+
+  meta = with lib; {
+    homepage = "https://voxelands.net/";
+    description = "Infinite-world block sandbox game based on Minetest";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    broken = stdenv.isAarch64;  # build fails with "libIrrlicht.so: undefined reference to `png_init_filter_functions_neon'"
+  };
+}
diff --git a/nixpkgs/pkgs/games/vvvvvv/default.nix b/nixpkgs/pkgs/games/vvvvvv/default.nix
new file mode 100644
index 000000000000..6fc3ab6ecef5
--- /dev/null
+++ b/nixpkgs/pkgs/games/vvvvvv/default.nix
@@ -0,0 +1,93 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchurl
+, cmake
+, makeWrapper
+, copyDesktopItems
+, makeDesktopItem
+, physfs
+, SDL2
+, SDL2_mixer
+, tinyxml-2
+, utf8cpp
+, Foundation
+, IOKit
+, makeAndPlay ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vvvvvv";
+  version = "2.3.6";
+
+  src = fetchFromGitHub {
+    owner = "TerryCavanagh";
+    repo = "VVVVVV";
+    rev = version;
+    sha256 = "sha256-sLNO4vkmlirsqJmCV9YWpyNnIiigU1KMls7rOgWgSmQ=";
+  };
+  sourceRoot = "${src.name}/desktop_version";
+  dataZip = fetchurl {
+    url = "https://thelettervsixtim.es/makeandplay/data.zip";
+    name = "data.zip";
+    sha256 = "sha256-x2eAlZT2Ry2p9WE252ZX44ZA1YQWSkYRIlCsYpPswOo=";
+    meta.license = lib.licenses.unfree;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    physfs
+    SDL2
+    SDL2_mixer
+    tinyxml-2
+    utf8cpp
+  ] ++ lib.optionals stdenv.isDarwin [ Foundation IOKit ];
+
+  # Help CMake find SDL_mixer.h
+  env.NIX_CFLAGS_COMPILE = "-I${lib.getDev SDL2_mixer}/include/SDL2";
+
+  cmakeFlags = [ "-DBUNDLE_DEPENDENCIES=OFF" ] ++ lib.optional makeAndPlay "-DMAKEANDPLAY=ON";
+
+  desktopItems = [
+    (makeDesktopItem {
+      type = "Application";
+      name = "VVVVVV";
+      desktopName = "VVVVVV";
+      comment = meta.description;
+      exec = pname;
+      icon = "VVVVVV";
+      terminal = false;
+      categories = [ "Game" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 VVVVVV $out/bin/${pname}
+    install -Dm644 "$src/desktop_version/icon.ico" "$out/share/pixmaps/VVVVVV.png"
+
+    wrapProgram $out/bin/${pname} --add-flags "-assets ${dataZip}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A retro-styled platform game" + lib.optionalString makeAndPlay " (redistributable, without original levels)";
+    longDescription = ''
+      VVVVVV is a platform game all about exploring one simple mechanical
+      idea - what if you reversed gravity instead of jumping?
+    '' + lib.optionalString makeAndPlay ''
+      (Redistributable version, doesn't include the original levels.)
+    '';
+    homepage = "https://thelettervsixtim.es";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ martfont ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/wargus/default.nix b/nixpkgs/pkgs/games/wargus/default.nix
new file mode 100644
index 000000000000..ca4b70923eca
--- /dev/null
+++ b/nixpkgs/pkgs/games/wargus/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, lib, callPackage, fetchFromGitHub
+, fetchurl, runCommand, unzip, bchunk, p7zip
+, cmake, pkg-config, makeWrapper
+, zlib, bzip2, libpng
+, dialog, python3, cdparanoia, ffmpeg
+}:
+
+let
+  stratagus = callPackage ./stratagus.nix {};
+
+  dataDownload = fetchurl {
+    url = "https://archive.org/download/warcraft-ii-tides-of-darkness_202105/Warcess.zip";
+    sha256 = "0yxgvf8xpv1w2bjmny4a38pa3xcdgqckk9abj21ilkc5zqzqmm9b";
+  };
+
+  data = runCommand "warcraft2" {
+    buildInputs = [ unzip bchunk p7zip ];
+    meta.license = lib.licenses.unfree;
+  } ''
+    unzip ${dataDownload} "Warcraft.II.Tides.of.Darkness/Warcraft II - Tides of Darkness (1995)/games/WarcrafD/cd/"{WC2BTDP.img,WC2BTDP.cue}
+    bchunk "Warcraft.II.Tides.of.Darkness/Warcraft II - Tides of Darkness (1995)/games/WarcrafD/cd/"{WC2BTDP.img,WC2BTDP.cue} WC2BTDP
+    rm -r Warcraft.II.Tides.of.Darkness
+    7z x WC2BTDP01.iso
+    rm WC2BTDP*.{iso,cdr}
+    cp -r DATA $out
+  '';
+
+in
+stdenv.mkDerivation rec {
+  pname = "wargus";
+  inherit (stratagus) version;
+
+  src = fetchFromGitHub {
+    owner = "wargus";
+    repo = "wargus";
+    rev = "v${version}";
+    sha256 = "sha256-yJeMFxCD0ikwVPQApf+IBuMQ6eOjn1fVKNmqh6r760c=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ffmpeg ];
+  buildInputs = [ zlib bzip2 libpng ];
+  cmakeFlags = [
+    "-DSTRATAGUS=${stratagus}/games/stratagus"
+    "-DSTRATAGUS_INCLUDE_DIR=${stratagus.src}/gameheaders"
+  ];
+  postInstall = ''
+    makeWrapper $out/games/wargus $out/bin/wargus \
+      --prefix PATH : ${lib.makeBinPath [ "$out" ]}
+    substituteInPlace $out/share/applications/wargus.desktop \
+      --replace $out/games/wargus $out/bin/wargus
+
+    $out/bin/wartool -v -r ${data} $out/share/games/stratagus/wargus
+    ln -s $out/share/games/stratagus/wargus/{contrib/black_title.png,graphics/ui/black_title.png}
+  '';
+
+  meta = with lib; {
+    description = "Importer and scripts for Warcraft II: Tides of Darkness, the expansion Beyond the Dark Portal, and Aleonas Tales";
+    homepage = "https://wargus.github.io/";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.astro ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/wargus/stratagus.nix b/nixpkgs/pkgs/games/wargus/stratagus.nix
new file mode 100644
index 000000000000..fc4f23427994
--- /dev/null
+++ b/nixpkgs/pkgs/games/wargus/stratagus.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake, pkg-config, makeWrapper
+, zlib, bzip2, libpng, lua5_1, toluapp
+, SDL2, SDL2_mixer, SDL2_image, libGL
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stratagus";
+  version = "3.3.1";
+
+  src = fetchFromGitHub {
+    owner = "wargus";
+    repo = "stratagus";
+    rev = "v${version}";
+    sha256 = "sha256-q8AvIWr/bOzI0wV0D2emxIXYEKDYmFxbtwr2BS+xYfA=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+    zlib bzip2 libpng
+    lua5_1 toluapp
+    (lib.getDev SDL2) SDL2_image SDL2_mixer libGL
+  ];
+  cmakeFlags = [
+    "-DCMAKE_CXX_FLAGS=-Wno-error=format-overflow"
+  ];
+
+  meta = with lib; {
+    description = "strategy game engine";
+    homepage = "https://wargus.github.io/stratagus.html";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.astro ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/warmux/default.nix b/nixpkgs/pkgs/games/warmux/default.nix
new file mode 100644
index 000000000000..6b52194ffcae
--- /dev/null
+++ b/nixpkgs/pkgs/games/warmux/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake
+, zlib, curl, gnutls, fribidi, libpng, SDL, SDL_gfx, SDL_image, SDL_mixer
+, SDL_net, SDL_ttf, libunwind, libX11, xorgproto, libxml2, pkg-config
+, gettext, intltool, libtool, perl
+}:
+
+stdenv.mkDerivation {
+  pname = "warmux";
+  version = "unstable-2017-10-20";
+
+  src = fetchFromGitHub {
+    owner = "fluxer";
+    repo = "warmux";
+    rev = "8f81d4fc309a548ae89a068c2dde27b7e7ef8851";
+    sha256 = "1hvzglsmp75xiqqb0k75qjz4jwi8kl3fhn8zfsz53hhhqmbw6wkr";
+  };
+
+  preConfigure = "patchShebangs autogen.sh && ./autogen.sh";
+  configureFlagsArray = ("CFLAGS=-include ${zlib.dev}/include/zlib.h");
+
+  nativeBuildInputs = [
+    autoconf automake gettext intltool libtool pkg-config
+  ];
+  buildInputs = [
+    zlib curl gnutls fribidi libpng SDL SDL_gfx SDL_image SDL_mixer
+    SDL_net SDL_ttf libunwind libX11 xorgproto libxml2 perl
+  ];
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Ballistics turn-based battle game between teams - unofficial copy";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    license = with licenses; [ gpl2 ufl ];
+    homepage = "https://github.com/fluxer/warmux";
+  };
+}
diff --git a/nixpkgs/pkgs/games/warsow/default.nix b/nixpkgs/pkgs/games/warsow/default.nix
new file mode 100644
index 000000000000..007b124ba58c
--- /dev/null
+++ b/nixpkgs/pkgs/games/warsow/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, warsow-engine, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "warsow";
+  version = "2.1.2";
+
+  src = fetchurl {
+    url = "http://warsow.net/${pname}-${version}.tar.gz";
+    sha256 = "07y2airw5qg3s1bf1c63a6snjj22riz0mqhk62jmfm9nrarhavrc";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/share/warsow
+    cp -r basewsw $out/share/warsow
+    ln -s ${warsow-engine}/lib/warsow $out/share/warsow/libs
+
+    mkdir -p $out/bin
+    for i in ${warsow-engine}/bin/*; do
+      makeWrapper "$i" "$out/bin/$(basename "$i")" --chdir "$out/share/warsow"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Multiplayer FPS game designed for competitive gaming";
+    longDescription = ''
+      Set in a futuristic cartoon-like world where rocketlauncher-wielding
+      pigs and lasergun-carrying cyberpunks roam the streets, Warsow is a
+      completely free fast-paced first-person shooter (FPS) for Windows, Linux
+      and macOS.
+    '';
+    homepage = "http://www.warsow.net";
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ astsmtl abbradar ];
+    platforms = warsow-engine.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/games/warsow/engine.nix b/nixpkgs/pkgs/games/warsow/engine.nix
new file mode 100644
index 000000000000..5bc2ef7dbd91
--- /dev/null
+++ b/nixpkgs/pkgs/games/warsow/engine.nix
@@ -0,0 +1,59 @@
+{ stdenv, lib, substituteAll, fetchurl, cmake, libogg, libvorbis, libtheora, curl, freetype
+, libjpeg, libpng, SDL2, libGL, openal, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "warsow-engine";
+  version = "2.1.0";
+
+  src = fetchurl {
+    url = "http://slice.sh/warsow/warsow_21_sdk.tar.gz";
+    sha256 = "0fj5k7qpf6far8i1xhqxlpfjch10zj26xpilhp95aq2yiz08pj4r";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./libpath.patch;
+      inherit zlib curl libpng libjpeg libogg libvorbis libtheora freetype;
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    libogg libvorbis libtheora curl freetype libjpeg SDL2 libGL openal zlib
+    libpng
+  ];
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: CMakeFiles/wswtv_server.dir/__/unix/unix_time.c.o:(.bss+0x8): multiple definition of
+  #     `c_pointcontents'; CMakeFiles/wswtv_server.dir/__/null/ascript_null.c.o:(.bss+0x8): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  cmakeFlags = [ "-DQFUSION_GAME=Warsow" ];
+
+  preConfigure = ''
+    cd source/source
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib
+    cp -r libs $out/lib/warsow
+    for i in warsow.* wsw_server.* wswtv_server.*; do
+      install -Dm755 "$i" "$out/bin/''${i%.*}"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Multiplayer FPS game designed for competitive gaming (engine only)";
+    homepage = "http://www.warsow.net";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ astsmtl abbradar ];
+    platforms = platforms.linux;
+    broken = stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/games/warsow/libpath.patch b/nixpkgs/pkgs/games/warsow/libpath.patch
new file mode 100644
index 000000000000..ad2487102379
--- /dev/null
+++ b/nixpkgs/pkgs/games/warsow/libpath.patch
@@ -0,0 +1,28 @@
+diff -ru3 warsow_21_sdk_old/source/source/gameshared/q_arch.h warsow_21_sdk_new/source/source/gameshared/q_arch.h
+--- warsow_21_sdk_old/source/source/gameshared/q_arch.h	2016-03-26 22:22:10.000000000 +0300
++++ warsow_21_sdk_new/source/source/gameshared/q_arch.h	2018-03-13 00:37:29.907019953 +0300
+@@ -206,15 +206,15 @@
+ #endif
+ 
+ // FIXME: move these to CMakeLists.txt
+-#define LIBZ_LIBNAME "libz.so.1|libz.so"
+-#define LIBCURL_LIBNAME "libcurl.so.4|libcurl.so.3|libcurl.so"
+-#define LIBPNG_LIBNAME "libpng16.so.16|libpng15.so.15|libpng14.so.14|libpng12.so.0|libpng.so"
+-#define LIBJPEG_LIBNAME "libjpeg.so.8|libjpeg.so"
+-#define LIBOGG_LIBNAME "libogg.so.0|libogg.so"
+-#define LIBVORBIS_LIBNAME "libvorbis.so.0|libvorbis.so"
+-#define LIBVORBISFILE_LIBNAME "libvorbisfile.so.3|libvorbisfile.so"
+-#define LIBTHEORA_LIBNAME "libtheora.so.0|libtheora.so"
+-#define LIBFREETYPE_LIBNAME "libfreetype.so.6|libfreetype.so"
++#define LIBZ_LIBNAME "@zlib@/lib/libz.so"
++#define LIBCURL_LIBNAME "@curl@/lib/libcurl.so"
++#define LIBPNG_LIBNAME "@libpng@/lib/libpng.so"
++#define LIBJPEG_LIBNAME "@libjpeg@/lib/libjpeg.so"
++#define LIBOGG_LIBNAME "@libogg@/lib/libogg.so"
++#define LIBVORBIS_LIBNAME "@libvorbis@/lib/libvorbis.so"
++#define LIBVORBISFILE_LIBNAME "@libvorbis@/lib/libvorbisfile.so"
++#define LIBTHEORA_LIBNAME "@libtheora@/lib/libtheora.so"
++#define LIBFREETYPE_LIBNAME "@freetype@/lib/libfreetype.so"
+ 
+ #if defined ( __FreeBSD__ )
+ #define BUILDSTRING "FreeBSD"
diff --git a/nixpkgs/pkgs/games/warzone2100/default.nix b/nixpkgs/pkgs/games/warzone2100/default.nix
new file mode 100644
index 000000000000..22a2be308348
--- /dev/null
+++ b/nixpkgs/pkgs/games/warzone2100/default.nix
@@ -0,0 +1,148 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, ninja
+, p7zip
+, pkg-config
+, asciidoctor
+, gettext
+
+, SDL2
+, libtheora
+, libvorbis
+, libopus
+, openal
+, openalSoft
+, physfs
+, miniupnpc
+, libsodium
+, curl
+, libpng
+, freetype
+, harfbuzz
+, sqlite
+, which
+, vulkan-headers
+, vulkan-loader
+, shaderc
+
+, testers
+, warzone2100
+, nixosTests
+
+, gitUpdater
+
+, withVideos ? false
+}:
+
+let
+  pname = "warzone2100";
+  sequences_src = fetchurl {
+    url = "mirror://sourceforge/${pname}/warzone2100/Videos/high-quality-en/sequences.wz";
+    sha256 = "90ff552ca4a70e2537e027e22c5098ea4ed1bc11bb7fc94138c6c941a73d29fa";
+  };
+in
+
+stdenv.mkDerivation rec {
+  inherit pname;
+  version  = "4.3.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/releases/${version}/${pname}_src.tar.xz";
+    sha256 = "sha256-AdYI9vljjhTXyFffQK0znBv8IHoF2q/nFXrYZSo0BcM=";
+  };
+
+  buildInputs = [
+    SDL2
+    libtheora
+    libvorbis
+    libopus
+    openal
+    openalSoft
+    physfs
+    miniupnpc
+    libsodium
+    curl
+    libpng
+    freetype
+    harfbuzz
+    sqlite
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    vulkan-headers
+    vulkan-loader
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    ninja
+    p7zip
+    asciidoctor
+    gettext
+    shaderc
+  ];
+
+  postPatch = ''
+    substituteInPlace lib/exceptionhandler/dumpinfo.cpp \
+                      --replace '"which "' '"${which}/bin/which "'
+    substituteInPlace lib/exceptionhandler/exceptionhandler.cpp \
+                      --replace "which %s" "${which}/bin/which %s"
+    # https://github.com/Warzone2100/warzone2100/pull/3353
+    substituteInPlace lib/ivis_opengl/gfx_api_vk.cpp \
+      --replace vk::throwResultException vk::detail::throwResultException
+  '';
+
+  cmakeFlags = [
+    "-DWZ_DISTRIBUTOR=NixOS"
+    # The cmake builder automatically sets CMAKE_INSTALL_BINDIR to an absolute
+    # path, but this results in an error:
+    #
+    # > An absolute CMAKE_INSTALL_BINDIR path cannot be used if the following
+    # > are not also absolute paths: WZ_DATADIR
+    #
+    # WZ_DATADIR is based on CMAKE_INSTALL_DATAROOTDIR, so we set that.
+    #
+    # Alternatively, we could have set CMAKE_INSTALL_BINDIR to "bin".
+    "-DCMAKE_INSTALL_DATAROOTDIR=${placeholder "out"}/share"
+  ] ++ lib.optional stdenv.isDarwin "-P../configure_mac.cmake";
+
+  postInstall = lib.optionalString withVideos ''
+    cp ${sequences_src} $out/share/warzone2100/sequences.wz
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = warzone2100;
+      # The command always exits with code 1
+      command = "(warzone2100 --version || [ $? -eq 1 ])";
+    };
+    nixosTest = nixosTests.warzone2100;
+  };
+
+  passthru.updateScript = gitUpdater {
+    url = "https://github.com/Warzone2100/warzone2100";
+  };
+
+  meta = with lib; {
+    description = "A free RTS game, originally developed by Pumpkin Studios";
+    longDescription = ''
+        Warzone 2100 is an open source real-time strategy and real-time tactics
+      hybrid computer game, originally developed by Pumpkin Studios and
+      published by Eidos Interactive.
+        In Warzone 2100, you command the forces of The Project in a battle to
+      rebuild the world after mankind has almost been destroyed by nuclear
+      missiles. The game offers campaign, multi-player, and single-player
+      skirmish modes. An extensive tech tree with over 400 different
+      technologies, combined with the unit design system, allows for a wide
+      variety of possible units and tactics.
+    '';
+    homepage = "https://wz2100.net";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ astsmtl fgaz ];
+    platforms = platforms.all;
+    # configure_mac.cmake tries to download stuff
+    # https://github.com/Warzone2100/warzone2100/blob/master/macosx/README.md
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/games/wesnoth/default.nix b/nixpkgs/pkgs/games/wesnoth/default.nix
new file mode 100644
index 000000000000..df5b393ccded
--- /dev/null
+++ b/nixpkgs/pkgs/games/wesnoth/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, cmake, pkg-config, SDL2, SDL2_image, SDL2_mixer, SDL2_net, SDL2_ttf
+, pango, gettext, boost, libvorbis, fribidi, dbus, libpng, pcre, openssl, icu
+, Cocoa, Foundation
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wesnoth";
+  version = "1.16.9";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "wesnoth";
+    repo = "wesnoth";
+    hash = "sha256-KtAPc2nsqSoHNsLTLom/yaUECn+IWBdBFpiMclrUHxM=";
+  };
+
+  patches = [
+    # Pull upstream fix https://github.com/wesnoth/wesnoth/pull/6726
+    # for gcc-13 support.
+    (fetchpatch {
+      name = "gcc-134.patch";
+      url = "https://github.com/wesnoth/wesnoth/commit/f073493ebc279cefa391d364c48265058795e1d2.patch";
+      hash = "sha256-uTB65DEBZwHFRgDwNx/yVjzmnW3jRoiibadXhNcwMkI=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ SDL2 SDL2_image SDL2_mixer SDL2_net SDL2_ttf pango gettext boost
+                  libvorbis fribidi dbus libpng pcre openssl icu ]
+                ++ lib.optionals stdenv.isDarwin [ Cocoa Foundation];
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-framework AppKit";
+
+  meta = with lib; {
+    description = "The Battle for Wesnoth, a free, turn-based strategy game with a fantasy theme";
+    longDescription = ''
+      The Battle for Wesnoth is a Free, turn-based tactical strategy
+      game with a high fantasy theme, featuring both single-player, and
+      online/hotseat multiplayer combat. Fight a desperate battle to
+      reclaim the throne of Wesnoth, or take hand in any number of other
+      adventures.
+    '';
+
+    homepage = "https://www.wesnoth.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/widelands/default.nix b/nixpkgs/pkgs/games/widelands/default.nix
new file mode 100644
index 000000000000..f49921024e45
--- /dev/null
+++ b/nixpkgs/pkgs/games/widelands/default.nix
@@ -0,0 +1,102 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, pkg-config # needed to find minizip
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_net
+, SDL2_ttf
+, cmake
+, curl
+, doxygen
+, gettext
+, glew
+, graphviz
+, icu
+, installShellFiles
+, libpng
+, lua
+, python3
+, zlib
+, minizip
+, asio
+, libSM
+, libICE
+, libXext
+}:
+
+stdenv.mkDerivation rec {
+  pname = "widelands";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "widelands";
+    repo = "widelands";
+    rev = "v${version}";
+    sha256 = "sha256-fe1fey34b6T1+kqMa22STROu7dagQJtg24nW2jhVix8=";
+  };
+
+  postPatch = ''
+    substituteInPlace xdg/org.widelands.Widelands.desktop \
+      --replace 'Exec=widelands' "Exec=$out/bin/widelands"
+  '';
+
+  cmakeFlags = [
+    "-Wno-dev" # dev warnings are only needed for upstream development
+    "-DWL_INSTALL_BASEDIR=${placeholder "out"}/share/widelands" # for COPYING, Changelog, etc.
+    "-DWL_INSTALL_DATADIR=${placeholder "out"}/share/widelands" # for game data
+    "-DWL_INSTALL_BINDIR=${placeholder "out"}/bin"
+  ];
+
+  nativeBuildInputs = [ cmake doxygen gettext graphviz installShellFiles pkg-config ];
+
+  enableParallelBuilding = true;
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_net
+    SDL2_ttf
+    curl
+    glew
+    icu
+    libpng
+    lua
+    python3
+    zlib
+    minizip
+    asio
+    libSM  # XXX: these should be propagated by SDL2?
+    libICE
+    libXext
+  ];
+
+  postInstall = ''
+    install -Dm444 -t $out/share/applications ../xdg/org.widelands.Widelands.desktop
+
+    for s in 16 32 48 64 128; do
+      install -Dm444 ../data/images/logos/wl-ico-''${s}.png $out/share/icons/hicolor/''${s}x''${s}/org.widelands.Widelands.png
+    done
+
+    installManPage ../xdg/widelands.6
+  '';
+
+  meta = with lib; {
+    description = "RTS with multiple-goods economy";
+    homepage = "https://widelands.org/";
+    longDescription = ''
+      Widelands is a real time strategy game based on "The Settlers" and "The
+      Settlers II". It has a single player campaign mode, as well as a networked
+      multiplayer mode.
+    '';
+    changelog = "https://github.com/widelands/widelands/releases/tag/v1.1";
+    mainProgram = "widelands";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ raskin jcumming ];
+    platforms = platforms.linux;
+    hydraPlatforms = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/wipeout-rewrite/default.nix b/nixpkgs/pkgs/games/wipeout-rewrite/default.nix
new file mode 100644
index 000000000000..16703fad517b
--- /dev/null
+++ b/nixpkgs/pkgs/games/wipeout-rewrite/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, Foundation
+, glew
+, SDL2
+, writeShellScript
+}:
+
+let
+  datadir = "\"\${XDG_DATA_HOME:-$HOME/.local/share}\"/wipeout-rewrite";
+  datadirCheck = writeShellScript "wipeout-rewrite-check-datadir.sh" ''
+    datadir=${datadir}
+
+    if [ ! -d "$datadir" ]; then
+      echo "[Wrapper] Creating data directory $datadir"
+      mkdir -p "$datadir"
+    fi
+
+    echo "[Wrapper] Remember to put your game assets into $datadir/wipeout if you haven't done so yet!"
+    echo "[Wrapper] Check https://github.com/phoboslab/wipeout-rewrite#running for the required format."
+  '';
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "wipeout-rewrite";
+  version = "unstable-2023-08-13";
+
+  src = fetchFromGitHub {
+    owner = "phoboslab";
+    repo = "wipeout-rewrite";
+    rev = "7a9f757a79d5c6806252cc1268bda5cdef463e23";
+    hash = "sha256-21IG9mZPGgRhVkT087G+Bz/zLkknkHKGmWjSpcLw8vE=";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    glew
+    SDL2
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    Foundation
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 wipegame $out/bin/wipegame
+
+    # I can't get --chdir to not expand the bash variables in datadir at build time (so they point to /homeless-shelter)
+    # or put them inside single quotes (breaking the expansion at runtime)
+    wrapProgram $out/bin/wipegame \
+      --run '${datadirCheck}' \
+      --run 'cd ${datadir}'
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    mainProgram = "wipegame";
+    description = "A re-implementation of the 1995 PSX game wipEout";
+    homepage = "https://github.com/phoboslab/wipeout-rewrite";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ OPNA2608 ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/games/wireworld/default.nix b/nixpkgs/pkgs/games/wireworld/default.nix
new file mode 100644
index 000000000000..828d313d2a87
--- /dev/null
+++ b/nixpkgs/pkgs/games/wireworld/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, zip
+, love
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, strip-nondeterminism
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wireworld";
+  version = "unstable-2023-05-09";
+
+  src = fetchFromGitLab {
+    owner = "blinry";
+    repo = pname;
+    rev = "03b82bf5d604d6d4ad3c07b224583de6c396fd17";
+    hash = "sha256-8BshnGLuA8lmG9g7FU349DWKP/fZvlvjrQBau/LSJ4E=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+    strip-nondeterminism
+    zip
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "Wireworld";
+      exec = pname;
+      comment = "";
+      desktopName = "Wireworld";
+      genericName = "Wireworld";
+      categories = [ "Game" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    zip -9 -r Wireworld.love ./*
+    strip-nondeterminism --type zip Wireworld.love
+    install -Dm444 -t $out/share/games/lovegames/ Wireworld.love
+    makeWrapper ${love}/bin/love $out/bin/Wireworld \
+      --add-flags $out/share/games/lovegames/Wireworld.love
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Fascinating electronics logic puzzles, game where you'll learn how to build clocks, diodes, and logic gates";
+    license = with licenses; [
+      mit
+      ofl
+      blueOak100
+      cc-by-sa-30
+      cc-by-sa-40
+    ];
+    downloadPage = "https://ldjam.com/events/ludum-dare/53/wireworld";
+    maintainers = with lib.maintainers; [ janik ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/games/wolfstoneextract/default.nix b/nixpkgs/pkgs/games/wolfstoneextract/default.nix
new file mode 100644
index 000000000000..159e6ae3f15c
--- /dev/null
+++ b/nixpkgs/pkgs/games/wolfstoneextract/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchFromBitbucket
+, cmake
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "wolfstoneextract";
+  version = "1.2";
+
+  src = fetchFromBitbucket {
+    owner = "ecwolf";
+    repo = "wolfstoneextract";
+    rev = finalAttrs.version;
+    hash = "sha256-yrYLP2ewOtiry+EgH1IEaxz2Q55mqQ6mRGSxzVUnJ8Q=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  meta = with lib; {
+    description = "Utility to extract Wolfstone data from Wolfenstein II";
+    homepage = "https://bitbucket.org/ecwolf/wolfstoneextract/src/master/";
+    platforms = [ "x86_64-linux" ];
+    license = with licenses; [ gpl3Only bsd3 ];
+    maintainers = with maintainers; [ keenanweaver ];
+  };
+})
diff --git a/nixpkgs/pkgs/games/worldofgoo/default.nix b/nixpkgs/pkgs/games/worldofgoo/default.nix
new file mode 100644
index 000000000000..4b38c86fbdce
--- /dev/null
+++ b/nixpkgs/pkgs/games/worldofgoo/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, requireFile, unzip, makeDesktopItem, SDL2, SDL2_mixer, libogg, libvorbis }:
+
+let
+  arch = if stdenv.system == "x86_64-linux"
+    then "x86_64"
+    else "x86";
+
+  desktopItem = makeDesktopItem {
+    desktopName = "World of Goo";
+    genericName = "World of Goo";
+    categories = [ "Game" ];
+    exec = "WorldOfGoo.bin.${arch}";
+    icon = "2dboy-worldofgoo";
+    name = "worldofgoo";
+  };
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "WorldOfGoo";
+  version = "1.53";
+
+  helpMsg = ''
+    We cannot download the full version automatically, as you require a license.
+    Once you have bought a license, you need to add your downloaded version to the nix store.
+    You can do this by using "nix-prefetch-url file://\$PWD/${pname}.Linux${version}.sh"
+    in the directory where you saved it.
+  '';
+
+  src = requireFile {
+    message = helpMsg;
+    name = "WorldOfGoo.Linux.1.53.sh";
+    sha256 = "175e4b0499a765f1564942da4bd65029f8aae1de8231749c56bec672187d53ee";
+  };
+
+  nativeBuildInputs = [ unzip ];
+  sourceRoot = pname;
+  phases = [ "unpackPhase installPhase" ];
+
+  libPath = lib.makeLibraryPath [ stdenv.cc.cc.lib stdenv.cc.libc SDL2 SDL2_mixer
+    libogg libvorbis ];
+
+  unpackPhase = ''
+    # The game is distributed as a shell script, with a tar of mojosetup, and a
+    # zip archive attached to the end. Therefore a simple unzip does the job.
+    # However, to avoid unzip errors, we need to strip those out first.
+    tail -c +421887 ${src} > ${src}.zip
+    unzip -q ${src}.zip -d ${pname}
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/applications $out/share/icons/hicolor/256x256/apps
+
+    install -t $out/bin -m755 data/${arch}/WorldOfGoo.bin.${arch}
+    cp -R data/noarch/* $out/bin
+    cp data/noarch/game/gooicon.png $out/share/icons/hicolor/256x256/apps/2dboy-worldofgoo.png
+    cp ${desktopItem}/share/applications/worldofgoo.desktop \
+      $out/share/applications/worldofgoo.desktop
+
+    patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" --set-rpath $libPath $out/bin/WorldOfGoo.bin.${arch}
+  '';
+
+  meta = with lib; {
+    description = "A physics based puzzle game";
+    longDescription = ''
+      World of Goo is a physics based puzzle / construction game. The millions of Goo
+      Balls who live in the beautiful World of Goo don't know that they are in a
+      game, or that they are extremely delicious.
+    '';
+    homepage = "https://worldofgoo.com";
+    license = licenses.unfree;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = with maintainers; [ jcumming amaxine ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/wyvern/cargo-lock.patch b/nixpkgs/pkgs/games/wyvern/cargo-lock.patch
new file mode 100644
index 000000000000..13a0dbfb86e5
--- /dev/null
+++ b/nixpkgs/pkgs/games/wyvern/cargo-lock.patch
@@ -0,0 +1,4139 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index f37a245..ef42a65 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1,2500 +1,3020 @@
+ # This file is automatically @generated by Cargo.
+ # It is not intended for manual editing.
++version = 3
++
++[[package]]
++name = "addr2line"
++version = "0.19.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
++dependencies = [
++ "gimli",
++]
++
++[[package]]
++name = "adler"
++version = "1.0.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
++
+ [[package]]
+ name = "adler32"
+-version = "1.0.4"
++version = "1.2.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+ 
+ [[package]]
+ name = "aho-corasick"
+ version = "0.6.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5"
+ dependencies = [
+- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr",
+ ]
+ 
+ [[package]]
+ name = "aho-corasick"
+-version = "0.7.6"
++version = "1.0.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+ dependencies = [
+- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr",
+ ]
+ 
+ [[package]]
+ name = "ansi_term"
+-version = "0.11.0"
++version = "0.12.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+ dependencies = [
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "anstream"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
++dependencies = [
++ "anstyle",
++ "anstyle-parse",
++ "anstyle-query",
++ "anstyle-wincon",
++ "colorchoice",
++ "is-terminal",
++ "utf8parse",
++]
++
++[[package]]
++name = "anstyle"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
++
++[[package]]
++name = "anstyle-parse"
++version = "0.2.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
++dependencies = [
++ "utf8parse",
++]
++
++[[package]]
++name = "anstyle-query"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
++dependencies = [
++ "windows-sys 0.48.0",
++]
++
++[[package]]
++name = "anstyle-wincon"
++version = "1.0.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
++dependencies = [
++ "anstyle",
++ "windows-sys 0.48.0",
+ ]
+ 
+ [[package]]
+ name = "arrayref"
+-version = "0.3.5"
++version = "0.3.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+ 
+ [[package]]
+ name = "arrayvec"
+-version = "0.4.12"
++version = "0.5.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
++
++[[package]]
++name = "atty"
++version = "0.2.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+ dependencies = [
+- "nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
++ "hermit-abi 0.1.19",
++ "libc",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+-name = "atty"
+-version = "0.2.13"
++name = "autocfg"
++version = "0.1.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+ dependencies = [
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "autocfg 1.1.0",
+ ]
+ 
+ [[package]]
+ name = "autocfg"
+-version = "0.1.7"
++version = "1.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+ 
+ [[package]]
+ name = "backtrace"
+-version = "0.3.40"
++version = "0.3.67"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+ dependencies = [
+- "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
++ "addr2line",
++ "cc",
++ "cfg-if 1.0.0",
++ "libc",
++ "miniz_oxide 0.6.2",
++ "object",
++ "rustc-demangle",
+ ]
+ 
+ [[package]]
+-name = "backtrace-sys"
+-version = "0.1.32"
++name = "base64"
++version = "0.10.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+ dependencies = [
+- "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
++ "byteorder",
+ ]
+ 
+ [[package]]
+ name = "base64"
+-version = "0.10.1"
++version = "0.13.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
++checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+ 
+ [[package]]
+ name = "bit-set"
+-version = "0.5.1"
++version = "0.5.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+ dependencies = [
+- "bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bit-vec",
+ ]
+ 
+ [[package]]
+ name = "bit-vec"
+-version = "0.5.1"
++version = "0.6.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+ 
+ [[package]]
+ name = "bitflags"
+-version = "1.2.1"
++version = "1.3.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+ 
+ [[package]]
+ name = "blake2b_simd"
+-version = "0.5.8"
++version = "0.5.11"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587"
+ dependencies = [
+- "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "arrayref",
++ "arrayvec",
++ "constant_time_eq",
+ ]
+ 
+ [[package]]
+ name = "build_const"
+-version = "0.2.1"
++version = "0.2.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b4ae4235e6dac0694637c763029ecea1a2ec9e4e06ec2729bd21ba4d9c863eb7"
+ 
+ [[package]]
+ name = "butlerd"
+ version = "0.1.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "095899eb6b69e0a1c98215e51a44c67b8e3c902ebb9440afaafe2eb45e650a09"
+ dependencies = [
+- "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
++ "hyper",
++ "rand 0.5.6",
++ "regex 1.8.1",
++ "reqwest",
++ "serde",
++ "serde_derive",
++ "serde_json",
+ ]
+ 
+ [[package]]
+ name = "byteorder"
+-version = "1.3.2"
++version = "1.4.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+ 
+ [[package]]
+ name = "bytes"
+ version = "0.4.12"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+ dependencies = [
+- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "byteorder",
++ "either",
++ "iovec",
+ ]
+ 
+ [[package]]
+ name = "bzip2"
+-version = "0.3.3"
++version = "0.4.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+ dependencies = [
+- "bzip2-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bzip2-sys",
++ "libc",
+ ]
+ 
+ [[package]]
+ name = "bzip2-sys"
+-version = "0.1.7"
++version = "0.1.11+1.0.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+ dependencies = [
+- "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc",
++ "libc",
++ "pkg-config",
+ ]
+ 
+ [[package]]
+-name = "c2-chacha"
+-version = "0.2.3"
++name = "cc"
++version = "1.0.79"
+ 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)",
+-]
++checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+ 
+ [[package]]
+-name = "cc"
+-version = "1.0.47"
++name = "cfg-if"
++version = "0.1.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+ 
+ [[package]]
+ name = "cfg-if"
+-version = "0.1.10"
++version = "1.0.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+ 
+ [[package]]
+ name = "clap"
+-version = "2.33.0"
++version = "2.34.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+ dependencies = [
+- "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ansi_term",
++ "atty",
++ "bitflags",
++ "strsim",
++ "textwrap",
++ "unicode-width",
++ "vec_map",
+ ]
+ 
+ [[package]]
+ name = "clap-verbosity-flag"
+ version = "0.2.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bda14f5323b2b747f52908c5b7b8af7790784088bc7c2957a11695e39ad476dc"
+ dependencies = [
+- "env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "structopt 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
++ "env_logger",
++ "failure",
++ "log",
++ "structopt",
+ ]
+ 
+ [[package]]
+ name = "clicolors-control"
+ version = "1.0.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
+ dependencies = [
+- "atty 0.2.13 (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.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "atty",
++ "lazy_static",
++ "libc",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "cloudabi"
+ version = "0.0.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+ dependencies = [
+- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags",
+ ]
+ 
++[[package]]
++name = "colorchoice"
++version = "1.0.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
++
+ [[package]]
+ name = "confy"
+ version = "0.3.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4b1400cd0dae7f27d2c7ced9492e1398d2e2df614570092a4936c73b416dedea"
+ dependencies = [
+- "directories 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "directories",
++ "serde",
++ "toml 0.4.10",
+ ]
+ 
+ [[package]]
+ name = "console"
+ version = "0.7.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8ca57c2c14b8a2bf3105bc9d15574aad80babf6a9c44b1058034cdf8bd169628"
+ dependencies = [
+- "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+- "clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "encode_unicode 0.3.6 (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.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "atty",
++ "clicolors-control",
++ "encode_unicode",
++ "lazy_static",
++ "libc",
++ "parking_lot 0.12.1",
++ "regex 1.8.1",
++ "termios",
++ "unicode-width",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "console"
+-version = "0.9.1"
++version = "0.15.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
+ dependencies = [
+- "clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "encode_unicode 0.3.6 (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.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "encode_unicode",
++ "lazy_static",
++ "libc",
++ "unicode-width",
++ "windows-sys 0.42.0",
+ ]
+ 
+ [[package]]
+ name = "constant_time_eq"
+-version = "0.1.4"
++version = "0.1.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+ 
+ [[package]]
+ name = "cookie"
+-version = "0.11.1"
++version = "0.11.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "be2018768ed1d848cc4d347d551546474025ba820e5db70e4c9aaa349f678bd7"
+ dependencies = [
+- "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+- "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "percent-encoding 2.2.0",
++ "time",
+ ]
+ 
+ [[package]]
+ name = "cookie"
+ version = "0.12.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5"
+ dependencies = [
+- "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+- "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "time",
++ "url 1.7.2",
+ ]
+ 
+ [[package]]
+ name = "cookie_store"
+ version = "0.5.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b0d2f2ecb21dce00e2453268370312978af9b8024020c7a37ae2cc6dbbe64685"
+ dependencies = [
+- "cookie 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "publicsuffix 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+- "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+- "try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cookie 0.11.5",
++ "failure",
++ "failure_derive",
++ "idna 0.1.5",
++ "log",
++ "publicsuffix",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "time",
++ "try_from",
++ "url 1.7.2",
+ ]
+ 
+ [[package]]
+ name = "cookie_store"
+ version = "0.7.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c"
+ dependencies = [
+- "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "publicsuffix 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+- "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+- "try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cookie 0.12.0",
++ "failure",
++ "idna 0.1.5",
++ "log",
++ "publicsuffix",
++ "serde",
++ "serde_json",
++ "time",
++ "try_from",
++ "url 1.7.2",
+ ]
+ 
+ [[package]]
+ name = "core-foundation"
+-version = "0.6.4"
++version = "0.9.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+ dependencies = [
+- "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
++ "core-foundation-sys",
++ "libc",
+ ]
+ 
+ [[package]]
+ name = "core-foundation-sys"
+-version = "0.6.2"
++version = "0.8.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+ 
+ [[package]]
+ name = "crc"
+ version = "1.8.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb"
+ dependencies = [
+- "build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "build_const",
+ ]
+ 
+ [[package]]
+ name = "crc32fast"
+-version = "1.2.0"
++version = "1.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
++dependencies = [
++ "cfg-if 1.0.0",
++]
++
++[[package]]
++name = "crossbeam-channel"
++version = "0.5.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 1.0.0",
++ "crossbeam-utils 0.8.15",
+ ]
+ 
+ [[package]]
+ name = "crossbeam-deque"
+-version = "0.7.1"
++version = "0.7.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c20ff29ded3204c5106278a81a38f4b482636ed4fa1e6cfbeef193291beb29ed"
++dependencies = [
++ "crossbeam-epoch 0.8.2",
++ "crossbeam-utils 0.7.2",
++ "maybe-uninit",
++]
++
++[[package]]
++name = "crossbeam-deque"
++version = "0.8.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+ dependencies = [
+- "crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 1.0.0",
++ "crossbeam-epoch 0.9.14",
++ "crossbeam-utils 0.8.15",
+ ]
+ 
+ [[package]]
+ name = "crossbeam-epoch"
+-version = "0.7.2"
++version = "0.8.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
+ dependencies = [
+- "arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "memoffset 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "autocfg 1.1.0",
++ "cfg-if 0.1.10",
++ "crossbeam-utils 0.7.2",
++ "lazy_static",
++ "maybe-uninit",
++ "memoffset 0.5.6",
++ "scopeguard",
++]
++
++[[package]]
++name = "crossbeam-epoch"
++version = "0.9.14"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
++dependencies = [
++ "autocfg 1.1.0",
++ "cfg-if 1.0.0",
++ "crossbeam-utils 0.8.15",
++ "memoffset 0.8.0",
++ "scopeguard",
+ ]
+ 
+ [[package]]
+ name = "crossbeam-queue"
+-version = "0.1.2"
++version = "0.2.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
+ dependencies = [
+- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.10",
++ "crossbeam-utils 0.7.2",
++ "maybe-uninit",
+ ]
+ 
+ [[package]]
+ name = "crossbeam-utils"
+-version = "0.6.6"
++version = "0.7.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
++dependencies = [
++ "autocfg 1.1.0",
++ "cfg-if 0.1.10",
++ "lazy_static",
++]
++
++[[package]]
++name = "crossbeam-utils"
++version = "0.8.15"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 1.0.0",
+ ]
+ 
+ [[package]]
+ name = "curl"
+-version = "0.4.25"
++version = "0.4.44"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+ dependencies = [
+- "curl-sys 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "openssl-sys 0.9.52 (registry+https://github.com/rust-lang/crates.io-index)",
+- "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
+- "socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "curl-sys",
++ "libc",
++ "openssl-probe",
++ "openssl-sys",
++ "schannel",
++ "socket2",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "curl-sys"
+-version = "0.4.24"
++version = "0.4.61+curl-8.0.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "14d05c10f541ae6f3bc5b3d923c20001f47db7d5f0b2bc6ad16490133842db79"
+ dependencies = [
+- "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
+- "openssl-sys 0.9.52 (registry+https://github.com/rust-lang/crates.io-index)",
+- "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
+- "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc",
++ "libc",
++ "libz-sys",
++ "openssl-sys",
++ "pkg-config",
++ "vcpkg",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "dialoguer"
+ version = "0.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "116f66c4e7b19af0d52857aa4ff710cc3b4781d9c16616e31540bc55ec57ba8c"
+ dependencies = [
+- "console 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)",
+- "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "console 0.15.5",
++ "lazy_static",
++ "tempfile 3.5.0",
+ ]
+ 
+ [[package]]
+ name = "directories"
+ version = "0.10.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fc2561db021b6f1321d0f16b67ed28ce843ef4610dfaa432e3ffa2e8a3050ebf"
+ dependencies = [
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "dirs"
+ version = "1.0.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901"
+ dependencies = [
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc",
++ "redox_users",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "dtoa"
+-version = "0.4.4"
++version = "0.4.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+ 
+ [[package]]
+ name = "eidolon"
+ version = "1.4.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8a501eef266fdb28e1414b6104ca799a216bce6dc4ae1217ad0f40d591351671"
+ dependencies = [
+- "butlerd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "human-panic 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+- "structopt 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
++ "butlerd",
++ "dirs",
++ "human-panic",
++ "regex 0.2.11",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "structopt",
+ ]
+ 
+ [[package]]
+ name = "either"
+-version = "1.5.3"
++version = "1.8.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+ 
+ [[package]]
+ name = "encode_unicode"
+ version = "0.3.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+ 
+ [[package]]
+ name = "encoding_rs"
+-version = "0.8.20"
++version = "0.8.32"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 1.0.0",
+ ]
+ 
+ [[package]]
+ name = "env_logger"
+ version = "0.5.13"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38"
++dependencies = [
++ "atty",
++ "humantime",
++ "log",
++ "regex 1.8.1",
++ "termcolor",
++]
++
++[[package]]
++name = "errno"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
++dependencies = [
++ "errno-dragonfly",
++ "libc",
++ "windows-sys 0.48.0",
++]
++
++[[package]]
++name = "errno-dragonfly"
++version = "0.1.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+ dependencies = [
+- "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+- "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc",
++ "libc",
+ ]
+ 
+ [[package]]
+ name = "error-chain"
+-version = "0.12.1"
++version = "0.12.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
+ dependencies = [
+- "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)",
+- "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "backtrace",
++ "version_check",
+ ]
+ 
+ [[package]]
+ name = "failure"
+-version = "0.1.6"
++version = "0.1.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
+ dependencies = [
+- "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "backtrace",
++ "failure_derive",
+ ]
+ 
+ [[package]]
+ name = "failure_derive"
+-version = "0.1.6"
++version = "0.1.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
+ dependencies = [
+- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "synstructure 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 1.0.56",
++ "quote 1.0.27",
++ "syn 1.0.109",
++ "synstructure",
++]
++
++[[package]]
++name = "fastrand"
++version = "1.9.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
++dependencies = [
++ "instant",
+ ]
+ 
+ [[package]]
+ name = "flate2"
+-version = "1.0.12"
++version = "1.0.26"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "crc32fast",
++ "miniz_oxide 0.7.1",
+ ]
+ 
+ [[package]]
+ name = "fnv"
+-version = "1.0.6"
++version = "1.0.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+ 
+ [[package]]
+ name = "foreign-types"
+ version = "0.3.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+ dependencies = [
+- "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "foreign-types-shared",
+ ]
+ 
+ [[package]]
+ name = "foreign-types-shared"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
++
++[[package]]
++name = "form_urlencoded"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
++dependencies = [
++ "percent-encoding 2.2.0",
++]
+ 
+ [[package]]
+ name = "fuchsia-cprng"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+ 
+ [[package]]
+ name = "fuchsia-zircon"
+ version = "0.3.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+ 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)",
++ "bitflags",
++ "fuchsia-zircon-sys",
+ ]
+ 
+ [[package]]
+ name = "fuchsia-zircon-sys"
+ version = "0.3.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+ 
+ [[package]]
+ name = "futf"
+-version = "0.1.4"
++version = "0.1.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+ dependencies = [
+- "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mac",
++ "new_debug_unreachable",
+ ]
+ 
+ [[package]]
+ name = "futures"
+-version = "0.1.29"
++version = "0.1.31"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+ 
+ [[package]]
+ name = "futures-cpupool"
+ version = "0.1.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
+ dependencies = [
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "futures",
++ "num_cpus",
+ ]
+ 
+ [[package]]
+ name = "getrandom"
+-version = "0.1.13"
++version = "0.1.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
++dependencies = [
++ "cfg-if 1.0.0",
++ "libc",
++ "wasi 0.9.0+wasi-snapshot-preview1",
++]
++
++[[package]]
++name = "getrandom"
++version = "0.2.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 1.0.0",
++ "libc",
++ "wasi 0.11.0+wasi-snapshot-preview1",
+ ]
+ 
++[[package]]
++name = "gimli"
++version = "0.27.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
++
+ [[package]]
+ name = "gog"
+ version = "0.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "19bfb6c45ea1fba86f5880b4f239ef8034230387d90a0dfea70e094caeabf0be"
+ dependencies = [
+- "cookie 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)",
+- "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)",
+- "select 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+- "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+- "user_agent 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cookie 0.11.5",
++ "curl",
++ "error-chain",
++ "log",
++ "regex 1.8.1",
++ "reqwest",
++ "select",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "time",
++ "user_agent",
+ ]
+ 
+ [[package]]
+ name = "h2"
+ version = "0.1.26"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"
+ dependencies = [
+- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)",
+- "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "byteorder",
++ "bytes",
++ "fnv",
++ "futures",
++ "http",
++ "indexmap",
++ "log",
++ "slab",
++ "string",
++ "tokio-io",
+ ]
+ 
++[[package]]
++name = "hashbrown"
++version = "0.12.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
++
+ [[package]]
+ name = "heck"
+-version = "0.3.1"
++version = "0.3.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+ dependencies = [
+- "unicode-segmentation 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-segmentation",
+ ]
+ 
+ [[package]]
+ name = "hermit-abi"
+-version = "0.1.3"
++version = "0.1.19"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+ dependencies = [
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc",
+ ]
+ 
++[[package]]
++name = "hermit-abi"
++version = "0.2.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "hermit-abi"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
++
+ [[package]]
+ name = "html5ever"
+ version = "0.23.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5ce65ac8028cf5a287a7dbf6c4e0a6cf2dcf022ed5b167a81bae66ebf599a8b7"
+ dependencies = [
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "markup5ever 0.8.1 (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)",
++ "log",
++ "mac",
++ "markup5ever",
++ "proc-macro2 0.4.30",
++ "quote 0.6.13",
++ "syn 0.15.44",
+ ]
+ 
+ [[package]]
+ name = "http"
+-version = "0.1.19"
++version = "0.1.21"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0"
+ dependencies = [
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bytes",
++ "fnv",
++ "itoa 0.4.8",
+ ]
+ 
+ [[package]]
+ name = "http-body"
+ version = "0.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d"
+ dependencies = [
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bytes",
++ "futures",
++ "http",
++ "tokio-buf",
+ ]
+ 
+ [[package]]
+ name = "httparse"
+-version = "1.3.4"
++version = "1.8.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+ 
+ [[package]]
+ name = "human-panic"
+-version = "1.0.1"
++version = "1.1.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c16465f6227e18e5a64eba488245d7b2974d4db0c4404ca5a69b550defa18d0a"
+ dependencies = [
+- "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure 0.1.6 (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.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "termcolor 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "anstream",
++ "anstyle",
++ "backtrace",
++ "os_info",
++ "serde",
++ "serde_derive",
++ "toml 0.7.3",
++ "uuid 1.3.2",
+ ]
+ 
+ [[package]]
+ name = "humantime"
+ version = "1.3.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+ dependencies = [
+- "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "quick-error",
+ ]
+ 
+ [[package]]
+ name = "hyper"
+-version = "0.12.35"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)",
+- "http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)",
+- "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-reactor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-threadpool 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+- "want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++version = "0.12.36"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52"
++dependencies = [
++ "bytes",
++ "futures",
++ "futures-cpupool",
++ "h2",
++ "http",
++ "http-body",
++ "httparse",
++ "iovec",
++ "itoa 0.4.8",
++ "log",
++ "net2",
++ "rustc_version",
++ "time",
++ "tokio",
++ "tokio-buf",
++ "tokio-executor",
++ "tokio-io",
++ "tokio-reactor",
++ "tokio-tcp",
++ "tokio-threadpool",
++ "tokio-timer",
++ "want",
+ ]
+ 
+ [[package]]
+ name = "hyper-tls"
+ version = "0.3.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f"
+ dependencies = [
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)",
+- "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bytes",
++ "futures",
++ "hyper",
++ "native-tls",
++ "tokio-io",
+ ]
+ 
+ [[package]]
+ name = "idna"
+ version = "0.1.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+ dependencies = [
+- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "matches",
++ "unicode-bidi",
++ "unicode-normalization",
+ ]
+ 
+ [[package]]
+ name = "idna"
+-version = "0.2.0"
++version = "0.2.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
++dependencies = [
++ "matches",
++ "unicode-bidi",
++ "unicode-normalization",
++]
++
++[[package]]
++name = "idna"
++version = "0.3.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+ dependencies = [
+- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-bidi",
++ "unicode-normalization",
+ ]
+ 
+ [[package]]
+ name = "indexmap"
+-version = "1.3.0"
++version = "1.9.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+ dependencies = [
+- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "autocfg 1.1.0",
++ "hashbrown",
+ ]
+ 
+ [[package]]
+ name = "indicatif"
+ version = "0.10.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "40ecd1e2ee08e6c255ce890f5a99d17000850e664e7acf119fb03b25b0575bfe"
+ dependencies = [
+- "console 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)",
+- "number_prefix 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "console 0.15.5",
++ "lazy_static",
++ "number_prefix",
++ "parking_lot 0.12.1",
++ "regex 1.8.1",
+ ]
+ 
+ [[package]]
+ name = "inflate"
+ version = "0.4.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff"
+ dependencies = [
+- "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "adler32",
++]
++
++[[package]]
++name = "instant"
++version = "0.1.12"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
++dependencies = [
++ "cfg-if 1.0.0",
++]
++
++[[package]]
++name = "io-lifetimes"
++version = "1.0.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
++dependencies = [
++ "hermit-abi 0.3.1",
++ "libc",
++ "windows-sys 0.48.0",
+ ]
+ 
+ [[package]]
+ name = "iovec"
+ version = "0.1.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
++dependencies = [
++ "libc",
++]
++
++[[package]]
++name = "is-terminal"
++version = "0.4.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+ dependencies = [
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
++ "hermit-abi 0.3.1",
++ "io-lifetimes",
++ "rustix",
++ "windows-sys 0.48.0",
+ ]
+ 
+ [[package]]
+ name = "itoa"
+-version = "0.4.4"
++version = "0.4.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
++
++[[package]]
++name = "itoa"
++version = "1.0.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+ 
+ [[package]]
+ name = "kernel32-sys"
+ version = "0.2.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+ 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)",
++ "winapi 0.2.8",
++ "winapi-build",
+ ]
+ 
+ [[package]]
+ name = "lazy_static"
+ version = "1.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+ 
+ [[package]]
+ name = "libc"
+-version = "0.2.65"
++version = "0.2.144"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+ 
+ [[package]]
+ name = "libz-sys"
+-version = "1.0.25"
++version = "1.1.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+ dependencies = [
+- "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
+- "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc",
++ "libc",
++ "pkg-config",
++ "vcpkg",
+ ]
+ 
++[[package]]
++name = "linux-raw-sys"
++version = "0.3.7"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
++
+ [[package]]
+ name = "lock_api"
+-version = "0.3.1"
++version = "0.3.4"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
++dependencies = [
++ "scopeguard",
++]
++
++[[package]]
++name = "lock_api"
++version = "0.4.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+ dependencies = [
+- "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "autocfg 1.1.0",
++ "scopeguard",
+ ]
+ 
+ [[package]]
+ name = "log"
+-version = "0.4.8"
++version = "0.4.17"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 1.0.0",
+ ]
+ 
+ [[package]]
+ name = "mac"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+ 
+ [[package]]
+ name = "markup5ever"
+ version = "0.8.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f1af46a727284117e09780d05038b1ce6fc9c76cc6df183c3dae5a8955a25e21"
+ dependencies = [
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+- "phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+- "string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log",
++ "phf",
++ "phf_codegen",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "string_cache",
++ "string_cache_codegen",
++ "tendril",
+ ]
+ 
+ [[package]]
+ name = "matches"
+-version = "0.1.8"
++version = "0.1.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+ 
+ [[package]]
+ name = "maybe-uninit"
+ version = "2.0.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+ 
+ [[package]]
+ name = "memchr"
+-version = "2.2.1"
++version = "2.5.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+ 
+ [[package]]
+ name = "memoffset"
+-version = "0.5.2"
++version = "0.5.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"
+ dependencies = [
+- "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "autocfg 1.1.0",
++]
++
++[[package]]
++name = "memoffset"
++version = "0.8.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
++dependencies = [
++ "autocfg 1.1.0",
+ ]
+ 
+ [[package]]
+ name = "mime"
+-version = "0.3.14"
++version = "0.3.17"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+ 
+ [[package]]
+ name = "mime_guess"
+-version = "2.0.1"
++version = "2.0.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+ dependencies = [
+- "mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicase 2.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "mime",
++ "unicase",
+ ]
+ 
+ [[package]]
+ name = "miniz_oxide"
+-version = "0.3.5"
++version = "0.6.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
++dependencies = [
++ "adler",
++]
++
++[[package]]
++name = "miniz_oxide"
++version = "0.7.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+ dependencies = [
+- "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "adler",
+ ]
+ 
+ [[package]]
+ name = "mio"
+-version = "0.6.19"
++version = "0.6.23"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+ dependencies = [
+- "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.65 (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)",
++ "cfg-if 0.1.10",
++ "fuchsia-zircon",
++ "fuchsia-zircon-sys",
++ "iovec",
++ "kernel32-sys",
++ "libc",
++ "log",
++ "miow",
++ "net2",
++ "slab",
++ "winapi 0.2.8",
+ ]
+ 
+ [[package]]
+ name = "miow"
+-version = "0.2.1"
++version = "0.2.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+ 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)",
++ "kernel32-sys",
++ "net2",
++ "winapi 0.2.8",
++ "ws2_32-sys",
+ ]
+ 
+ [[package]]
+ name = "native-tls"
+-version = "0.2.3"
++version = "0.2.11"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+ dependencies = [
+- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "openssl 0.10.25 (registry+https://github.com/rust-lang/crates.io-index)",
+- "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "openssl-sys 0.9.52 (registry+https://github.com/rust-lang/crates.io-index)",
+- "schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
+- "security-framework 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static",
++ "libc",
++ "log",
++ "openssl",
++ "openssl-probe",
++ "openssl-sys",
++ "schannel",
++ "security-framework",
++ "security-framework-sys",
++ "tempfile 3.5.0",
+ ]
+ 
+ [[package]]
+ name = "net2"
+-version = "0.2.33"
++version = "0.2.38"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.10",
++ "libc",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "new_debug_unreachable"
+-version = "1.0.3"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-
+-[[package]]
+-name = "nodrop"
+-version = "0.1.14"
++version = "1.0.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+ 
+ [[package]]
+ name = "num-traits"
+-version = "0.2.8"
++version = "0.2.15"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+ dependencies = [
+- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "autocfg 1.1.0",
+ ]
+ 
+ [[package]]
+ name = "num_cpus"
+-version = "1.11.0"
++version = "1.15.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+ dependencies = [
+- "hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
++ "hermit-abi 0.2.6",
++ "libc",
+ ]
+ 
+ [[package]]
+ name = "number_prefix"
+ version = "0.2.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dbf9993e59c894e3c08aa1c2712914e9e6bf1fcbfc6bef283e2183df345a4fee"
++dependencies = [
++ "num-traits",
++]
++
++[[package]]
++name = "object"
++version = "0.30.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+ dependencies = [
+- "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr",
+ ]
+ 
++[[package]]
++name = "once_cell"
++version = "1.17.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
++
+ [[package]]
+ name = "openssl"
+-version = "0.10.25"
++version = "0.10.52"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
++dependencies = [
++ "bitflags",
++ "cfg-if 1.0.0",
++ "foreign-types",
++ "libc",
++ "once_cell",
++ "openssl-macros",
++ "openssl-sys",
++]
++
++[[package]]
++name = "openssl-macros"
++version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+ dependencies = [
+- "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "openssl-sys 0.9.52 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 1.0.56",
++ "quote 1.0.27",
++ "syn 2.0.15",
+ ]
+ 
+ [[package]]
+ name = "openssl-probe"
+-version = "0.1.2"
++version = "0.1.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+ 
+ [[package]]
+ name = "openssl-sys"
+-version = "0.9.52"
++version = "0.9.87"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+ dependencies = [
+- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)",
+- "vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cc",
++ "libc",
++ "pkg-config",
++ "vcpkg",
+ ]
+ 
+ [[package]]
+-name = "os_type"
+-version = "2.2.0"
++name = "os_info"
++version = "3.7.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
+ dependencies = [
+- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "log",
++ "serde",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "parking_lot"
+ version = "0.9.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
++dependencies = [
++ "lock_api 0.3.4",
++ "parking_lot_core 0.6.3",
++ "rustc_version",
++]
++
++[[package]]
++name = "parking_lot"
++version = "0.12.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+ dependencies = [
+- "lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lock_api 0.4.9",
++ "parking_lot_core 0.9.7",
+ ]
+ 
+ [[package]]
+ name = "parking_lot_core"
+-version = "0.6.2"
++version = "0.6.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bda66b810a62be75176a80873726630147a5ca780cd33921e0b5709033e66b0a"
++dependencies = [
++ "cfg-if 0.1.10",
++ "cloudabi",
++ "libc",
++ "redox_syscall 0.1.57",
++ "rustc_version",
++ "smallvec 0.6.14",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "parking_lot_core"
++version = "0.9.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 1.0.0",
++ "libc",
++ "redox_syscall 0.2.16",
++ "smallvec 1.10.0",
++ "windows-sys 0.45.0",
+ ]
+ 
+ [[package]]
+ name = "percent-encoding"
+ version = "1.0.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+ 
+ [[package]]
+ name = "percent-encoding"
+-version = "2.1.0"
++version = "2.2.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+ 
+ [[package]]
+ name = "phf"
+ version = "0.7.24"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
+ dependencies = [
+- "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "phf_shared",
+ ]
+ 
+ [[package]]
+ name = "phf_codegen"
+ version = "0.7.24"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
+ dependencies = [
+- "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+- "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
++ "phf_generator",
++ "phf_shared",
+ ]
+ 
+ [[package]]
+ name = "phf_generator"
+ version = "0.7.24"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
+ dependencies = [
+- "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "phf_shared",
++ "rand 0.6.5",
+ ]
+ 
+ [[package]]
+ name = "phf_shared"
+ version = "0.7.24"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
+-
+-[[package]]
+-name = "pkg-config"
+-version = "0.3.17"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-
+-[[package]]
+-name = "podio"
+-version = "0.1.6"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
++dependencies = [
++ "siphasher",
++]
+ 
+ [[package]]
+-name = "ppv-lite86"
+-version = "0.2.6"
++name = "pkg-config"
++version = "0.3.27"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+ 
+ [[package]]
+ name = "precomputed-hash"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+ 
+ [[package]]
+ name = "proc-macro2"
+ version = "0.4.30"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+ dependencies = [
+- "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-xid 0.1.0",
+ ]
+ 
+ [[package]]
+ name = "proc-macro2"
+-version = "1.0.6"
++version = "1.0.56"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+ dependencies = [
+- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-ident",
+ ]
+ 
+ [[package]]
+ name = "publicsuffix"
+-version = "1.5.3"
++version = "1.5.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f"
+ dependencies = [
+- "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "idna 0.2.3",
++ "url 2.3.1",
+ ]
+ 
+ [[package]]
+ name = "quick-error"
+-version = "1.2.2"
++version = "1.2.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+ 
+ [[package]]
+ name = "quote"
+ version = "0.6.13"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+ dependencies = [
+- "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 0.4.30",
+ ]
+ 
+ [[package]]
+ name = "quote"
+-version = "1.0.2"
++version = "1.0.27"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+ dependencies = [
+- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 1.0.56",
+ ]
+ 
+ [[package]]
+ name = "rand"
+ version = "0.3.23"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c"
+ dependencies = [
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc",
++ "rand 0.4.6",
+ ]
+ 
+ [[package]]
+ name = "rand"
+ version = "0.4.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+ dependencies = [
+- "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fuchsia-cprng",
++ "libc",
++ "rand_core 0.3.1",
++ "rdrand",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "rand"
+ version = "0.5.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"
+ dependencies = [
+- "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cloudabi",
++ "fuchsia-cprng",
++ "libc",
++ "rand_core 0.3.1",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "rand"
+ version = "0.6.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+ dependencies = [
+- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
+-
+-[[package]]
+-name = "rand"
+-version = "0.7.2"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "autocfg 0.1.8",
++ "libc",
++ "rand_chacha",
++ "rand_core 0.4.2",
++ "rand_hc",
++ "rand_isaac",
++ "rand_jitter",
++ "rand_os",
++ "rand_pcg",
++ "rand_xorshift",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "rand_chacha"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+ dependencies = [
+- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
+-
+-[[package]]
+-name = "rand_chacha"
+-version = "0.2.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "autocfg 0.1.8",
++ "rand_core 0.3.1",
+ ]
+ 
+ [[package]]
+ name = "rand_core"
+ version = "0.3.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+ dependencies = [
+- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.4.2",
+ ]
+ 
+ [[package]]
+ name = "rand_core"
+ version = "0.4.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-
+-[[package]]
+-name = "rand_core"
+-version = "0.5.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
++checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+ 
+ [[package]]
+ name = "rand_hc"
+ version = "0.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+ dependencies = [
+- "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
+-
+-[[package]]
+-name = "rand_hc"
+-version = "0.2.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.3.1",
+ ]
+ 
+ [[package]]
+ name = "rand_isaac"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+ dependencies = [
+- "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.3.1",
+ ]
+ 
+ [[package]]
+ name = "rand_jitter"
+ version = "0.1.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+ dependencies = [
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc",
++ "rand_core 0.4.2",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "rand_os"
+ version = "0.1.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+ dependencies = [
+- "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cloudabi",
++ "fuchsia-cprng",
++ "libc",
++ "rand_core 0.4.2",
++ "rdrand",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "rand_pcg"
+ version = "0.1.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+ dependencies = [
+- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "autocfg 0.1.8",
++ "rand_core 0.4.2",
+ ]
+ 
+ [[package]]
+ name = "rand_xorshift"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+ dependencies = [
+- "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand_core 0.3.1",
+ ]
+ 
+ [[package]]
+ name = "rayon"
+-version = "1.2.0"
++version = "1.7.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+ dependencies = [
+- "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rayon-core 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "either",
++ "rayon-core",
+ ]
+ 
+ [[package]]
+ name = "rayon-core"
+-version = "1.6.0"
++version = "1.11.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+ dependencies = [
+- "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "crossbeam-channel",
++ "crossbeam-deque 0.8.3",
++ "crossbeam-utils 0.8.15",
++ "num_cpus",
+ ]
+ 
+ [[package]]
+ name = "rdrand"
+ version = "0.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
++dependencies = [
++ "rand_core 0.3.1",
++]
++
++[[package]]
++name = "redox_syscall"
++version = "0.1.57"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
++
++[[package]]
++name = "redox_syscall"
++version = "0.2.16"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+ dependencies = [
+- "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags",
+ ]
+ 
+ [[package]]
+ name = "redox_syscall"
+-version = "0.1.56"
++version = "0.3.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
++dependencies = [
++ "bitflags",
++]
+ 
+ [[package]]
+ name = "redox_users"
+-version = "0.3.1"
++version = "0.3.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
+ dependencies = [
+- "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "getrandom 0.1.16",
++ "redox_syscall 0.1.57",
++ "rust-argon2",
+ ]
+ 
+ [[package]]
+ name = "regex"
+ version = "0.2.11"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384"
+ dependencies = [
+- "aho-corasick 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "utf8-ranges 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
++ "aho-corasick 0.6.10",
++ "memchr",
++ "regex-syntax 0.5.6",
++ "thread_local",
++ "utf8-ranges",
+ ]
+ 
+ [[package]]
+ name = "regex"
+-version = "1.3.1"
++version = "1.8.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+ dependencies = [
+- "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "aho-corasick 1.0.1",
++ "memchr",
++ "regex-syntax 0.7.1",
+ ]
+ 
+ [[package]]
+ name = "regex-syntax"
+ version = "0.5.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7"
+ dependencies = [
+- "ucd-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "ucd-util",
+ ]
+ 
+ [[package]]
+ name = "regex-syntax"
+-version = "0.6.12"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-
+-[[package]]
+-name = "remove_dir_all"
+-version = "0.5.2"
++version = "0.7.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
++checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+ 
+ [[package]]
+ name = "reqwest"
+-version = "0.9.22"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)",
+- "flate2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)",
+- "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)",
+- "hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
+- "mime_guess 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-threadpool 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+- "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
++version = "0.9.24"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f88643aea3c1343c804950d7bf983bd2067f5ab59db6d613a08e05572f2714ab"
++dependencies = [
++ "base64 0.10.1",
++ "bytes",
++ "cookie 0.12.0",
++ "cookie_store 0.7.0",
++ "encoding_rs",
++ "flate2",
++ "futures",
++ "http",
++ "hyper",
++ "hyper-tls",
++ "log",
++ "mime",
++ "mime_guess",
++ "native-tls",
++ "serde",
++ "serde_json",
++ "serde_urlencoded",
++ "time",
++ "tokio",
++ "tokio-executor",
++ "tokio-io",
++ "tokio-threadpool",
++ "tokio-timer",
++ "url 1.7.2",
++ "uuid 0.7.4",
++ "winreg",
+ ]
+ 
+ [[package]]
+ name = "rust-argon2"
+-version = "0.5.1"
++version = "0.8.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
+ dependencies = [
+- "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "blake2b_simd 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "base64 0.13.1",
++ "blake2b_simd",
++ "constant_time_eq",
++ "crossbeam-utils 0.8.15",
+ ]
+ 
+ [[package]]
+ name = "rustc-demangle"
+-version = "0.1.16"
++version = "0.1.23"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+ 
+ [[package]]
+ name = "rustc_version"
+ version = "0.2.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
++dependencies = [
++ "semver",
++]
++
++[[package]]
++name = "rustix"
++version = "0.37.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+ dependencies = [
+- "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags",
++ "errno",
++ "io-lifetimes",
++ "libc",
++ "linux-raw-sys",
++ "windows-sys 0.48.0",
+ ]
+ 
+ [[package]]
+ name = "ryu"
+-version = "1.0.2"
++version = "1.0.13"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+ 
+ [[package]]
+ name = "same-file"
+-version = "1.0.5"
++version = "1.0.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+ dependencies = [
+- "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-util",
+ ]
+ 
+ [[package]]
+ name = "schannel"
+-version = "0.1.16"
++version = "0.1.21"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+ dependencies = [
+- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "windows-sys 0.42.0",
+ ]
+ 
+ [[package]]
+ name = "scopeguard"
+-version = "1.0.0"
++version = "1.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+ 
+ [[package]]
+ name = "security-framework"
+-version = "0.3.3"
++version = "2.8.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+ dependencies = [
+- "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bitflags",
++ "core-foundation",
++ "core-foundation-sys",
++ "libc",
++ "security-framework-sys",
+ ]
+ 
+ [[package]]
+ name = "security-framework-sys"
+-version = "0.3.3"
++version = "2.8.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+ dependencies = [
+- "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "core-foundation-sys",
++ "libc",
+ ]
+ 
+ [[package]]
+ name = "select"
+ version = "0.4.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ac645958c62108d11f90f8d34e4dc2799c838fc995ed4c2075867a2a8d5be76b"
+ dependencies = [
+- "bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "html5ever 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bit-set",
++ "html5ever",
+ ]
+ 
+ [[package]]
+ name = "semver"
+ version = "0.9.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+ dependencies = [
+- "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "semver-parser",
+ ]
+ 
+ [[package]]
+ name = "semver-parser"
+ version = "0.7.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+ 
+ [[package]]
+ name = "serde"
+-version = "1.0.102"
++version = "1.0.162"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6"
+ dependencies = [
+- "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde_derive",
+ ]
+ 
+ [[package]]
+ name = "serde_derive"
+-version = "1.0.102"
++version = "1.0.162"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6"
+ dependencies = [
+- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 1.0.56",
++ "quote 1.0.27",
++ "syn 2.0.15",
+ ]
+ 
+ [[package]]
+ name = "serde_json"
+-version = "1.0.41"
++version = "1.0.96"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
++dependencies = [
++ "itoa 1.0.6",
++ "ryu",
++ "serde",
++]
++
++[[package]]
++name = "serde_spanned"
++version = "0.6.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+ dependencies = [
+- "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
++ "serde",
+ ]
+ 
+ [[package]]
+ name = "serde_urlencoded"
+ version = "0.5.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a"
+ dependencies = [
+- "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "dtoa",
++ "itoa 0.4.8",
++ "serde",
++ "url 1.7.2",
+ ]
+ 
+ [[package]]
+ name = "siphasher"
+ version = "0.2.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
+ 
+ [[package]]
+ name = "slab"
+-version = "0.4.2"
++version = "0.4.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
++dependencies = [
++ "autocfg 1.1.0",
++]
+ 
+ [[package]]
+ name = "smallvec"
+-version = "0.6.13"
++version = "0.6.14"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+ dependencies = [
+- "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "maybe-uninit",
+ ]
+ 
++[[package]]
++name = "smallvec"
++version = "1.10.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
++
+ [[package]]
+ name = "socket2"
+-version = "0.3.11"
++version = "0.4.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (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)",
++ "libc",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "string"
+ version = "0.2.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d"
+ dependencies = [
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bytes",
+ ]
+ 
+ [[package]]
+ name = "string_cache"
+ version = "0.7.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67"
+ dependencies = [
+- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+- "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static",
++ "new_debug_unreachable",
++ "phf_shared",
++ "precomputed-hash",
++ "serde",
++ "string_cache_codegen",
++ "string_cache_shared",
+ ]
+ 
+ [[package]]
+ name = "string_cache_codegen"
+ version = "0.4.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6"
+ dependencies = [
+- "phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+- "phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
+- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "phf_generator",
++ "phf_shared",
++ "proc-macro2 1.0.56",
++ "quote 1.0.27",
++ "string_cache_shared",
+ ]
+ 
+ [[package]]
+ name = "string_cache_shared"
+ version = "0.3.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
+ 
+ [[package]]
+ name = "strsim"
+ version = "0.8.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+ 
+ [[package]]
+ name = "structopt"
+ version = "0.2.18"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "16c2cdbf9cc375f15d1b4141bc48aeef444806655cd0e904207edc8d68d86ed7"
+ dependencies = [
+- "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "structopt-derive 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
++ "clap",
++ "structopt-derive",
+ ]
+ 
+ [[package]]
+ name = "structopt-derive"
+ version = "0.2.18"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "53010261a84b37689f9ed7d395165029f9cc7abb9f56bbfe86bee2597ed25107"
+ dependencies = [
+- "heck 0.3.1 (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)",
++ "heck",
++ "proc-macro2 0.4.30",
++ "quote 0.6.13",
++ "syn 0.15.44",
+ ]
+ 
+ [[package]]
+ name = "syn"
+ version = "0.15.44"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+ 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)",
++ "proc-macro2 0.4.30",
++ "quote 0.6.13",
++ "unicode-xid 0.1.0",
+ ]
+ 
+ [[package]]
+ name = "syn"
+-version = "1.0.7"
++version = "1.0.109"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+ dependencies = [
+- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 1.0.56",
++ "quote 1.0.27",
++ "unicode-ident",
+ ]
+ 
+ [[package]]
+-name = "synstructure"
+-version = "0.12.2"
++name = "syn"
++version = "2.0.15"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+ dependencies = [
+- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 1.0.56",
++ "quote 1.0.27",
++ "unicode-ident",
+ ]
+ 
+ [[package]]
+-name = "tempdir"
+-version = "0.3.7"
++name = "synstructure"
++version = "0.12.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+ dependencies = [
+- "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 1.0.56",
++ "quote 1.0.27",
++ "syn 1.0.109",
++ "unicode-xid 0.2.4",
+ ]
+ 
+ [[package]]
+ name = "tempfile"
+ version = "2.2.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "11ce2fe9db64b842314052e2421ac61a73ce41b898dc8e3750398b219c5fc1e0"
+ dependencies = [
+- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand 0.3.23 (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.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "kernel32-sys",
++ "libc",
++ "rand 0.3.23",
++ "redox_syscall 0.1.57",
++ "winapi 0.2.8",
+ ]
+ 
+ [[package]]
+ name = "tempfile"
+-version = "3.1.0"
++version = "3.5.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+- "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 1.0.0",
++ "fastrand",
++ "redox_syscall 0.3.5",
++ "rustix",
++ "windows-sys 0.45.0",
+ ]
+ 
+ [[package]]
+ name = "tendril"
+-version = "0.4.1"
++version = "0.4.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+ dependencies = [
+- "futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "futf",
++ "mac",
++ "utf-8",
+ ]
+ 
+ [[package]]
+ name = "termcolor"
+-version = "0.3.6"
++version = "1.2.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+ dependencies = [
+- "wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi-util",
+ ]
+ 
+ [[package]]
+-name = "termcolor"
+-version = "1.0.5"
++name = "termios"
++version = "0.3.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b"
+ dependencies = [
+- "wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "libc",
+ ]
+ 
+ [[package]]
+-name = "termios"
+-version = "0.3.1"
++name = "textwrap"
++version = "0.11.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+ dependencies = [
+- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
++ "unicode-width",
+ ]
+ 
+ [[package]]
+-name = "textwrap"
+-version = "0.11.0"
++name = "thiserror"
++version = "1.0.40"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
++dependencies = [
++ "thiserror-impl",
++]
++
++[[package]]
++name = "thiserror-impl"
++version = "1.0.40"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+ dependencies = [
+- "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "proc-macro2 1.0.56",
++ "quote 1.0.27",
++ "syn 2.0.15",
+ ]
+ 
+ [[package]]
+ name = "thread_local"
+ version = "0.3.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
+ dependencies = [
+- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "lazy_static",
+ ]
+ 
+ [[package]]
+ name = "time"
+-version = "0.1.42"
++version = "0.1.45"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
++dependencies = [
++ "libc",
++ "wasi 0.10.0+wasi-snapshot-preview1",
++ "winapi 0.3.9",
++]
++
++[[package]]
++name = "tinyvec"
++version = "1.6.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+ dependencies = [
+- "libc 0.2.65 (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)",
++ "tinyvec_macros",
+ ]
+ 
++[[package]]
++name = "tinyvec_macros"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
++
+ [[package]]
+ name = "tokio"
+ version = "0.1.22"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
+ dependencies = [
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
+- "num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-reactor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-threadpool 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bytes",
++ "futures",
++ "mio",
++ "num_cpus",
++ "tokio-current-thread",
++ "tokio-executor",
++ "tokio-io",
++ "tokio-reactor",
++ "tokio-tcp",
++ "tokio-threadpool",
++ "tokio-timer",
+ ]
+ 
+ [[package]]
+ name = "tokio-buf"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46"
+ dependencies = [
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bytes",
++ "either",
++ "futures",
+ ]
+ 
+ [[package]]
+ name = "tokio-current-thread"
+-version = "0.1.6"
++version = "0.1.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"
+ dependencies = [
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "futures",
++ "tokio-executor",
+ ]
+ 
+ [[package]]
+ name = "tokio-executor"
+-version = "0.1.8"
++version = "0.1.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
+ dependencies = [
+- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
++ "crossbeam-utils 0.7.2",
++ "futures",
+ ]
+ 
+ [[package]]
+ name = "tokio-io"
+-version = "0.1.12"
++version = "0.1.13"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
+ dependencies = [
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bytes",
++ "futures",
++ "log",
+ ]
+ 
+ [[package]]
+ name = "tokio-reactor"
+-version = "0.1.10"
++version = "0.1.12"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
+ dependencies = [
+- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (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)",
+- "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
+- "num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
++ "crossbeam-utils 0.7.2",
++ "futures",
++ "lazy_static",
++ "log",
++ "mio",
++ "num_cpus",
++ "parking_lot 0.9.0",
++ "slab",
++ "tokio-executor",
++ "tokio-io",
++ "tokio-sync",
+ ]
+ 
+ [[package]]
+ name = "tokio-sync"
+-version = "0.1.7"
++version = "0.1.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
+ dependencies = [
+- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
++ "fnv",
++ "futures",
+ ]
+ 
+ [[package]]
+ name = "tokio-tcp"
+-version = "0.1.3"
++version = "0.1.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
+ dependencies = [
+- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+- "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-reactor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "bytes",
++ "futures",
++ "iovec",
++ "mio",
++ "tokio-io",
++ "tokio-reactor",
+ ]
+ 
+ [[package]]
+ name = "tokio-threadpool"
+-version = "0.1.16"
++version = "0.1.18"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89"
+ dependencies = [
+- "crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (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)",
+- "num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "crossbeam-deque 0.7.4",
++ "crossbeam-queue",
++ "crossbeam-utils 0.7.2",
++ "futures",
++ "lazy_static",
++ "log",
++ "num_cpus",
++ "slab",
++ "tokio-executor",
+ ]
+ 
+ [[package]]
+ name = "tokio-timer"
+-version = "0.2.11"
++version = "0.2.13"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"
+ dependencies = [
+- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "crossbeam-utils 0.7.2",
++ "futures",
++ "slab",
++ "tokio-executor",
+ ]
+ 
+ [[package]]
+ name = "toml"
+ version = "0.4.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
++dependencies = [
++ "serde",
++]
++
++[[package]]
++name = "toml"
++version = "0.7.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
++dependencies = [
++ "serde",
++ "serde_spanned",
++ "toml_datetime",
++ "toml_edit",
++]
++
++[[package]]
++name = "toml_datetime"
++version = "0.6.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
++dependencies = [
++ "serde",
++]
++
++[[package]]
++name = "toml_edit"
++version = "0.19.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+ dependencies = [
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
++ "indexmap",
++ "serde",
++ "serde_spanned",
++ "toml_datetime",
++ "winnow",
+ ]
+ 
+ [[package]]
+ name = "try-lock"
+-version = "0.2.2"
++version = "0.2.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+ 
+ [[package]]
+ name = "try_from"
+ version = "0.3.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cfg-if 0.1.10",
+ ]
+ 
+ [[package]]
+ name = "ucd-util"
+-version = "0.1.5"
++version = "0.1.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "abd2fc5d32b590614af8b0a20d837f32eca055edd0bbead59a9cfe80858be003"
+ 
+ [[package]]
+ name = "unicase"
+-version = "2.5.1"
++version = "2.6.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+ dependencies = [
+- "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "version_check",
+ ]
+ 
+ [[package]]
+ name = "unicode-bidi"
+-version = "0.3.4"
++version = "0.3.13"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-dependencies = [
+- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
++checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
++
++[[package]]
++name = "unicode-ident"
++version = "1.0.8"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+ 
+ [[package]]
+ name = "unicode-normalization"
+-version = "0.1.8"
++version = "0.1.22"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+ dependencies = [
+- "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
++ "tinyvec",
+ ]
+ 
+ [[package]]
+ name = "unicode-segmentation"
+-version = "1.5.0"
++version = "1.10.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+ 
+ [[package]]
+ name = "unicode-width"
+-version = "0.1.6"
++version = "0.1.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+ 
+ [[package]]
+ name = "unicode-xid"
+ version = "0.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+ 
+ [[package]]
+ name = "unicode-xid"
+-version = "0.2.0"
++version = "0.2.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+ 
+ [[package]]
+ name = "url"
+ version = "1.7.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+ dependencies = [
+- "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
++ "idna 0.1.5",
++ "matches",
++ "percent-encoding 1.0.1",
+ ]
+ 
+ [[package]]
+ name = "url"
+-version = "2.1.0"
++version = "2.3.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+ dependencies = [
+- "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
++ "form_urlencoded",
++ "idna 0.3.0",
++ "percent-encoding 2.2.0",
+ ]
+ 
+ [[package]]
+ name = "user_agent"
+ version = "0.6.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "970a778e2284bd68e55ca4e93b858da333cd85c3d5d8b4eab2c6e729cd6f47c4"
+ dependencies = [
+- "cookie 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "cookie_store 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)",
+- "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "cookie 0.11.5",
++ "cookie_store 0.5.1",
++ "failure",
++ "log",
++ "reqwest",
++ "url 1.7.2",
+ ]
+ 
+ [[package]]
+ name = "utf-8"
+-version = "0.7.5"
++version = "0.7.6"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+ 
+ [[package]]
+ name = "utf8-ranges"
+-version = "1.0.4"
++version = "1.0.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba"
++
++[[package]]
++name = "utf8parse"
++version = "0.2.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+ 
+ [[package]]
+ name = "uuid"
+-version = "0.6.5"
++version = "0.7.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a"
+ dependencies = [
+- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "rand 0.6.5",
+ ]
+ 
+ [[package]]
+ name = "uuid"
+-version = "0.7.4"
++version = "1.3.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2"
+ dependencies = [
+- "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
++ "getrandom 0.2.9",
+ ]
+ 
+ [[package]]
+ name = "vcpkg"
+-version = "0.2.7"
++version = "0.2.15"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+ 
+ [[package]]
+ name = "vec_map"
+-version = "0.8.1"
++version = "0.8.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+ 
+ [[package]]
+ name = "version_check"
+-version = "0.1.5"
++version = "0.9.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+ 
+ [[package]]
+ name = "walkdir"
+-version = "2.2.9"
++version = "2.3.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+ dependencies = [
+- "same-file 1.0.5 (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.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "same-file",
++ "winapi-util",
+ ]
+ 
+ [[package]]
+ name = "want"
+ version = "0.2.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230"
+ dependencies = [
+- "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "futures",
++ "log",
++ "try-lock",
+ ]
+ 
+ [[package]]
+ name = "wasi"
+-version = "0.7.0"
++version = "0.9.0+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
++
++[[package]]
++name = "wasi"
++version = "0.10.0+wasi-snapshot-preview1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
++
++[[package]]
++name = "wasi"
++version = "0.11.0+wasi-snapshot-preview1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+ 
+ [[package]]
+ name = "winapi"
+ version = "0.2.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+ 
+ [[package]]
+ name = "winapi"
+-version = "0.3.8"
++version = "0.3.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+ 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)",
++ "winapi-i686-pc-windows-gnu",
++ "winapi-x86_64-pc-windows-gnu",
+ ]
+ 
+ [[package]]
+ name = "winapi-build"
+ version = "0.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+ 
+ [[package]]
+ name = "winapi-i686-pc-windows-gnu"
+ version = "0.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+ 
+ [[package]]
+ name = "winapi-util"
+-version = "0.1.2"
++version = "0.1.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+ dependencies = [
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "winapi-x86_64-pc-windows-gnu"
+ version = "0.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+ 
+ [[package]]
+-name = "wincolor"
+-version = "0.1.6"
++name = "windows-sys"
++version = "0.42.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+ dependencies = [
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "windows_aarch64_gnullvm 0.42.2",
++ "windows_aarch64_msvc 0.42.2",
++ "windows_i686_gnu 0.42.2",
++ "windows_i686_msvc 0.42.2",
++ "windows_x86_64_gnu 0.42.2",
++ "windows_x86_64_gnullvm 0.42.2",
++ "windows_x86_64_msvc 0.42.2",
+ ]
+ 
+ [[package]]
+-name = "wincolor"
+-version = "1.0.2"
++name = "windows-sys"
++version = "0.45.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
++dependencies = [
++ "windows-targets 0.42.2",
++]
++
++[[package]]
++name = "windows-sys"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
++dependencies = [
++ "windows-targets 0.48.0",
++]
++
++[[package]]
++name = "windows-targets"
++version = "0.42.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
++dependencies = [
++ "windows_aarch64_gnullvm 0.42.2",
++ "windows_aarch64_msvc 0.42.2",
++ "windows_i686_gnu 0.42.2",
++ "windows_i686_msvc 0.42.2",
++ "windows_x86_64_gnu 0.42.2",
++ "windows_x86_64_gnullvm 0.42.2",
++ "windows_x86_64_msvc 0.42.2",
++]
++
++[[package]]
++name = "windows-targets"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
++dependencies = [
++ "windows_aarch64_gnullvm 0.48.0",
++ "windows_aarch64_msvc 0.48.0",
++ "windows_i686_gnu 0.48.0",
++ "windows_i686_msvc 0.48.0",
++ "windows_x86_64_gnu 0.48.0",
++ "windows_x86_64_gnullvm 0.48.0",
++ "windows_x86_64_msvc 0.48.0",
++]
++
++[[package]]
++name = "windows_aarch64_gnullvm"
++version = "0.42.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
++
++[[package]]
++name = "windows_aarch64_gnullvm"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
++
++[[package]]
++name = "windows_aarch64_msvc"
++version = "0.42.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
++
++[[package]]
++name = "windows_aarch64_msvc"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
++
++[[package]]
++name = "windows_i686_gnu"
++version = "0.42.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
++
++[[package]]
++name = "windows_i686_gnu"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
++
++[[package]]
++name = "windows_i686_msvc"
++version = "0.42.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
++
++[[package]]
++name = "windows_i686_msvc"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
++
++[[package]]
++name = "windows_x86_64_gnu"
++version = "0.42.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
++
++[[package]]
++name = "windows_x86_64_gnu"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
++
++[[package]]
++name = "windows_x86_64_gnullvm"
++version = "0.42.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
++
++[[package]]
++name = "windows_x86_64_gnullvm"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
++
++[[package]]
++name = "windows_x86_64_msvc"
++version = "0.42.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
++
++[[package]]
++name = "windows_x86_64_msvc"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
++
++[[package]]
++name = "winnow"
++version = "0.4.6"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+ dependencies = [
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+- "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
++ "memchr",
+ ]
+ 
+ [[package]]
+ name = "winreg"
+ version = "0.6.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
+ dependencies = [
+- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
++ "winapi 0.3.9",
+ ]
+ 
+ [[package]]
+ name = "ws2_32-sys"
+ version = "0.2.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+ 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)",
++ "winapi 0.2.8",
++ "winapi-build",
+ ]
+ 
+ [[package]]
+ name = "wyvern"
+ version = "1.4.1"
+ dependencies = [
+- "clap-verbosity-flag 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "confy 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "console 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)",
+- "dialoguer 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
+- "eidolon 1.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "gog 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "human-panic 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+- "indicatif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "inflate 0.4.5 (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)",
+- "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+- "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+- "structopt 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+- "tempfile 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
+- "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+- "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
+- "zip 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
++ "clap-verbosity-flag",
++ "confy",
++ "console 0.7.7",
++ "crc",
++ "curl",
++ "dialoguer",
++ "dirs",
++ "eidolon",
++ "gog",
++ "human-panic",
++ "indicatif",
++ "inflate",
++ "lazy_static",
++ "log",
++ "rayon",
++ "reqwest",
++ "serde",
++ "serde_derive",
++ "serde_json",
++ "structopt",
++ "tempfile 2.2.0",
++ "toml 0.4.10",
++ "url 1.7.2",
++ "walkdir",
++ "zip",
+ ]
+ 
+ [[package]]
+ name = "zip"
+-version = "0.5.3"
++version = "0.5.13"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
+ dependencies = [
+- "bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+- "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "flate2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)",
+- "podio 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+- "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+-]
+-
+-[metadata]
+-"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
+-"checksum aho-corasick 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5"
+-"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
+-"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+-"checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee"
+-"checksum arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
+-"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
+-"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
+-"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea"
+-"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491"
+-"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+-"checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80"
+-"checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb"
+-"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+-"checksum blake2b_simd 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)" = "5850aeee1552f495dd0250014cf64b82b7c8879a89d83b33bbdace2cc4f63182"
+-"checksum build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39"
+-"checksum butlerd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "095899eb6b69e0a1c98215e51a44c67b8e3c902ebb9440afaafe2eb45e650a09"
+-"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
+-"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+-"checksum bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b"
+-"checksum bzip2-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6584aa36f5ad4c9247f5323b0a42f37802b37a836f0ad87084d7a33961abe25f"
+-"checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb"
+-"checksum cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)" = "aa87058dce70a3ff5621797f1506cb837edd02ac4c0ae642b4542dce802908b8"
+-"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+-"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
+-"checksum clap-verbosity-flag 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bda14f5323b2b747f52908c5b7b8af7790784088bc7c2957a11695e39ad476dc"
+-"checksum clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
+-"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+-"checksum confy 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4b1400cd0dae7f27d2c7ced9492e1398d2e2df614570092a4936c73b416dedea"
+-"checksum console 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8ca57c2c14b8a2bf3105bc9d15574aad80babf6a9c44b1058034cdf8bd169628"
+-"checksum console 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f5d540c2d34ac9dd0deb5f3b5f54c36c79efa78f6b3ad19106a554d07a7b5d9f"
+-"checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120"
+-"checksum cookie 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "99be24cfcf40d56ed37fd11c2123be833959bbc5bddecb46e1c2e442e15fa3e0"
+-"checksum cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5"
+-"checksum cookie_store 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b0d2f2ecb21dce00e2453268370312978af9b8024020c7a37ae2cc6dbbe64685"
+-"checksum cookie_store 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46750b3f362965f197996c4448e4a0935e791bf7d6631bfce9ee0af3d24c919c"
+-"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
+-"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
+-"checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb"
+-"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
+-"checksum crossbeam-deque 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18cd2e169ad86297e6bc0ad9aa679aee9daa4f19e8163860faf7c164e4f5a71"
+-"checksum crossbeam-epoch 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fedcd6772e37f3da2a9af9bf12ebe046c0dfe657992377b4df982a2b54cd37a9"
+-"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
+-"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
+-"checksum curl 0.4.25 (registry+https://github.com/rust-lang/crates.io-index)" = "06aa71e9208a54def20792d877bc663d6aae0732b9852e612c4a933177c31283"
+-"checksum curl-sys 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "f659f3ffac9582d6177bb86d1d2aa649f4eb9d0d4de9d03ccc08b402832ea340"
+-"checksum dialoguer 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "116f66c4e7b19af0d52857aa4ff710cc3b4781d9c16616e31540bc55ec57ba8c"
+-"checksum directories 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc2561db021b6f1321d0f16b67ed28ce843ef4610dfaa432e3ffa2e8a3050ebf"
+-"checksum dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901"
+-"checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e"
+-"checksum eidolon 1.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8a501eef266fdb28e1414b6104ca799a216bce6dc4ae1217ad0f40d591351671"
+-"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
+-"checksum encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+-"checksum encoding_rs 0.8.20 (registry+https://github.com/rust-lang/crates.io-index)" = "87240518927716f79692c2ed85bfe6e98196d18c6401ec75355760233a7e12e9"
+-"checksum env_logger 0.5.13 (registry+https://github.com/rust-lang/crates.io-index)" = "15b0a4d2e39f8420210be8b27eeda28029729e2fd4291019455016c348240c38"
+-"checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9"
+-"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9"
+-"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08"
+-"checksum flate2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)" = "ad3c5233c9a940c8719031b423d7e6c16af66e031cb0420b0896f5245bf181d3"
+-"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
+-"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+-"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+-"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+-"checksum 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 futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b"
+-"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef"
+-"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
+-"checksum getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407"
+-"checksum gog 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "19bfb6c45ea1fba86f5880b4f239ef8034230387d90a0dfea70e094caeabf0be"
+-"checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"
+-"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
+-"checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120"
+-"checksum html5ever 0.23.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ce65ac8028cf5a287a7dbf6c4e0a6cf2dcf022ed5b167a81bae66ebf599a8b7"
+-"checksum http 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)" = "d7e06e336150b178206af098a055e3621e8336027e2b4d126bda0bc64824baaf"
+-"checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d"
+-"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9"
+-"checksum human-panic 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "21638c5955a6daf3ecc42cae702335fc37a72a4abcc6959ce457b31a7d43bbdd"
+-"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+-"checksum hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)" = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6"
+-"checksum hyper-tls 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3a800d6aa50af4b5850b2b0f659625ce9504df908e9733b635720483be26174f"
+-"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+-"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
+-"checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2"
+-"checksum indicatif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)" = "40ecd1e2ee08e6c255ce890f5a99d17000850e664e7acf119fb03b25b0575bfe"
+-"checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff"
+-"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+-"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
+-"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 libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "1a31a0627fdf1f6a39ec0dd577e101440b7db22672c0901fe00a9a6fbb5c24e8"
+-"checksum libz-sys 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
+-"checksum lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8912e782533a93a167888781b836336a6ca5da6175c05944c86cf28c31104dc"
+-"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
+-"checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+-"checksum markup5ever 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f1af46a727284117e09780d05038b1ce6fc9c76cc6df183c3dae5a8955a25e21"
+-"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
+-"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+-"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
+-"checksum memoffset 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a85c1a8c329f11437034d7313dca647c79096523533a1c79e86f1d0f657c7cc"
+-"checksum mime 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "dd1d63acd1b78403cc0c325605908475dd9b9a3acbf65ed8bcab97e27014afcf"
+-"checksum mime_guess 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1a0ed03949aef72dbdf3116a383d7b38b4768e6f960528cd6a6044aa9ed68599"
+-"checksum miniz_oxide 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6f3f74f726ae935c3f514300cc6773a0c9492abc5e972d42ba0c0ebb88757625"
+-"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23"
+-"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
+-"checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e"
+-"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
+-"checksum new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f40f005c60db6e03bae699e414c58bf9aa7ea02a2d0b9bfbcf19286cc4c82b30"
+-"checksum nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
+-"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
+-"checksum num_cpus 1.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "155394f924cdddf08149da25bfb932d226b4a593ca7468b08191ff6335941af5"
+-"checksum number_prefix 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dbf9993e59c894e3c08aa1c2712914e9e6bf1fcbfc6bef283e2183df345a4fee"
+-"checksum openssl 0.10.25 (registry+https://github.com/rust-lang/crates.io-index)" = "2f372b2b53ce10fb823a337aaa674e3a7d072b957c6264d0f4ff0bd86e657449"
+-"checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
+-"checksum openssl-sys 0.9.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c977d08e1312e2f7e4b86f9ebaa0ed3b19d1daff75fae88bbb88108afbd801fc"
+-"checksum os_type 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7edc011af0ae98b7f88cf7e4a83b70a54a75d2b8cb013d6efd02e5956207e9eb"
+-"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
+-"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
+-"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+-"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+-"checksum phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
+-"checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
+-"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
+-"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
+-"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
+-"checksum podio 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "780fb4b6698bbf9cf2444ea5d22411cef2953f0824b98f33cf454ec5615645bd"
+-"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
+-"checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+-"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+-"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
+-"checksum publicsuffix 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9bf259a81de2b2eb9850ec990ec78e6a25319715584fd7652b9b26f96fcb1510"
+-"checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0"
+-"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+-"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+-"checksum rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)" = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c"
+-"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+-"checksum rand 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"
+-"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+-"checksum rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412"
+-"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+-"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
+-"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+-"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+-"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+-"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+-"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+-"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+-"checksum rand_jitter 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+-"checksum rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+-"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+-"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+-"checksum rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83a27732a533a1be0a0035a111fe76db89ad312f6f0347004c220c57f209a123"
+-"checksum rayon-core 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "98dcf634205083b17d0861252431eb2acbfb698ab7478a2d20de07954f47ec7b"
+-"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+-"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
+-"checksum redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecedbca3bf205f8d8f5c2b44d83cd0690e39ee84b951ed649e9f1841132b66d"
+-"checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384"
+-"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
+-"checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7"
+-"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
+-"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
+-"checksum reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)" = "2c2064233e442ce85c77231ebd67d9eca395207dec2127fe0bbedde4bd29a650"
+-"checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf"
+-"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
+-"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+-"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
+-"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
+-"checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021"
+-"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
+-"checksum security-framework 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "301c862a6d0ee78f124c5e1710205965fc5c553100dcda6d98f13ef87a763f04"
+-"checksum security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e31493fc37615debb8c5090a7aeb4a9730bc61e77ab10b9af59f1a202284f895"
+-"checksum select 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ac645958c62108d11f90f8d34e4dc2799c838fc995ed4c2075867a2a8d5be76b"
+-"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.102 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4b39bd9b0b087684013a792c59e3e07a46a01d2322518d8a1104641a0b1be0"
+-"checksum serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)" = "ca13fc1a832f793322228923fbb3aba9f3f44444898f835d31ad1b74fa0a2bf8"
+-"checksum serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "2f72eb2a68a7dc3f9a691bfda9305a1c017a6215e5a4545c258500d2099a37c2"
+-"checksum serde_urlencoded 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "642dd69105886af2efd227f75a520ec9b44a820d65bc133a9131f7d229fd165a"
+-"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
+-"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
+-"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6"
+-"checksum socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85"
+-"checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d"
+-"checksum string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67"
+-"checksum string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6"
+-"checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
+-"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+-"checksum structopt 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "16c2cdbf9cc375f15d1b4141bc48aeef444806655cd0e904207edc8d68d86ed7"
+-"checksum structopt-derive 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "53010261a84b37689f9ed7d395165029f9cc7abb9f56bbfe86bee2597ed25107"
+-"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+-"checksum syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0e7bedb3320d0f3035594b0b723c8a28d7d336a3eda3881db79e61d676fb644c"
+-"checksum synstructure 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "575be94ccb86e8da37efb894a87e2b660be299b41d8ef347f9d6d79fbe61b1ba"
+-"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+-"checksum tempfile 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "11ce2fe9db64b842314052e2421ac61a73ce41b898dc8e3750398b219c5fc1e0"
+-"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
+-"checksum tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b"
+-"checksum termcolor 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "adc4587ead41bf016f11af03e55a624c06568b5a19db4e90fde573d805074f83"
+-"checksum termcolor 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96d6098003bde162e4277c70665bd87c326f5a0c3f3fbfb285787fa482d54e6e"
+-"checksum termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72b620c5ea021d75a735c943269bb07d30c9b77d6ac6b236bc8b5c496ef05625"
+-"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+-"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
+-"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
+-"checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
+-"checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46"
+-"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443"
+-"checksum tokio-executor 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0f27ee0e6db01c5f0b2973824547ce7e637b2ed79b891a9677b0de9bd532b6ac"
+-"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926"
+-"checksum tokio-reactor 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "c56391be9805bc80163151c0b9e5164ee64f4b0200962c346fea12773158f22d"
+-"checksum tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d06554cce1ae4a50f42fba8023918afa931413aded705b560e29600ccf7c6d76"
+-"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119"
+-"checksum tokio-threadpool 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2bd2c6a3885302581f4401c82af70d792bb9df1700e7437b0aeb4ada94d5388c"
+-"checksum tokio-timer 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "f2106812d500ed25a4f38235b9cae8f78a09edf43203e16e59c3b769a342a60e"
+-"checksum toml 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
+-"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382"
+-"checksum try_from 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "283d3b89e1368717881a9d51dad843cc435380d8109c9e47d38780a324698d8b"
+-"checksum ucd-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa9b3b49edd3468c0e6565d85783f51af95212b6fa3986a5500954f00b460874"
+-"checksum unicase 2.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2e2e6bd1e59e56598518beb94fd6db628ded570326f0a98c679a304bd9f00150"
+-"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
+-"checksum unicode-normalization 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "141339a08b982d942be2ca06ff8b076563cbe223d1befd5450716790d44e2426"
+-"checksum unicode-segmentation 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49f5526225fd8b77342d5986ab5f6055552e9c0776193b5b63fd53b46debfad7"
+-"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
+-"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 url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+-"checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61"
+-"checksum user_agent 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "970a778e2284bd68e55ca4e93b858da333cd85c3d5d8b4eab2c6e729cd6f47c4"
+-"checksum utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7"
+-"checksum utf8-ranges 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba"
+-"checksum uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e1436e58182935dcd9ce0add9ea0b558e8a87befe01c1a301e6020aeb0876363"
+-"checksum uuid 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "90dbc611eb48397705a6b0f6e917da23ae517e4d127123d2cf7674206627d32a"
+-"checksum vcpkg 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "33dd455d0f96e90a75803cfeb7f948768c08d70a6de9a8d2362461935698bf95"
+-"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
+-"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
+-"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
+-"checksum want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230"
+-"checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
+-"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.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
+-"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+-"checksum wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb06499a3a4d44302791052df005d5232b927ed1a9658146d842165c4de7767"
+-"checksum wincolor 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "96f5016b18804d24db43cebf3c77269e7569b8954a8464501c216cc5e070eaa9"
+-"checksum winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
+-"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+-"checksum zip 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3c21bb410afa2bd823a047f5bda3adb62f51074ac7e06263b2c97ecdd47e9fc6"
++ "byteorder",
++ "bzip2",
++ "crc32fast",
++ "flate2",
++ "thiserror",
++ "time",
++]
diff --git a/nixpkgs/pkgs/games/wyvern/default.nix b/nixpkgs/pkgs/games/wyvern/default.nix
new file mode 100644
index 000000000000..6eae1a4e71b2
--- /dev/null
+++ b/nixpkgs/pkgs/games/wyvern/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, fetchCrate
+, rustPlatform
+, cmake
+, pkg-config
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wyvern";
+  version = "1.4.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-OjL3wEoh4fT2nKqb7lMefP5B0vYyUaTRj09OXPEVfW4=";
+  };
+
+  cargoPatches = [ ./cargo-lock.patch ];
+
+  cargoHash = "sha256-cwk8yFt8JrYkYlNUW9n/bgMUA6jyOpG0TSh5C+eERLY=";
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ openssl ];
+
+  meta = with lib; {
+    description = "A simple CLI client for installing and maintaining linux GOG games";
+    homepage = "https://git.sr.ht/~nicohman/wyvern";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ _0x4A6F ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xbill/default.nix b/nixpkgs/pkgs/games/xbill/default.nix
new file mode 100644
index 000000000000..ac387a4a8c02
--- /dev/null
+++ b/nixpkgs/pkgs/games/xbill/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, lib, makeDesktopItem, copyDesktopItems, fetchurl, libX11, libXpm, libXt, motif, ... }:
+
+stdenv.mkDerivation rec {
+  pname = "xbill";
+  version = "2.1";
+
+  nativeBuildInputs = [ copyDesktopItems ];
+  buildInputs = [ libX11 libXpm libXt motif ];
+
+  NIX_CFLAGS_LINK = "-lXpm";
+
+  configureFlags = [
+    "--with-x"
+    "--enable-motif"
+  ];
+
+  src = fetchurl {
+    url = "http://www.xbill.org/download/${pname}-${version}.tar.gz";
+    sha256 = "13b08lli2gvppmvyhy0xs8cbjbkvrn4b87302mx0pxrdrvqzzz8f";
+  };
+
+  desktopItems = [ (makeDesktopItem {
+    name = "xbill";
+    exec = "xbill";
+    icon = "xbill";
+    desktopName = "XBill";
+    comment     = "Get rid of those Wingdows viruses!";
+    categories  = [ "Game" "ArcadeGame" ];
+  }) ];
+
+  postInstall = ''
+    install -Dm644 pixmaps/icon.xpm $out/share/pixmaps/xbill.xpm
+  '';
+
+  meta = with stdenv; {
+    description = "Protect a computer network from getting infected";
+    homepage = "http://www.xbill.org/";
+    license = lib.licenses.gpl1Only;
+    maintainers = with lib.maintainers; [ aw ];
+    longDescription = ''
+      Ever get the feeling that nothing is going right? You're a sysadmin,
+      and someone's trying to destroy your computers. The little people
+      running around the screen are trying to infect your computers with
+      Wingdows [TM], a virus cleverly designed to resemble a popular
+      operating system.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/games/xboard/default.nix b/nixpkgs/pkgs/games/xboard/default.nix
new file mode 100644
index 000000000000..af75ec79e730
--- /dev/null
+++ b/nixpkgs/pkgs/games/xboard/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, libX11
+, xorgproto
+, libXt
+, libXaw
+, libSM
+, libICE
+, libXmu
+, libXext
+, gnuchess
+, texinfo
+, libXpm
+, pkg-config
+, librsvg
+, cairo
+, pango
+, gtk2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xboard";
+  version = "4.9.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/xboard/xboard-${version}.tar.gz";
+    sha256 = "sha256-Ky5T6EKK2bbo3IpVs6UYM4GRGk2uLABy+pYpa7sZcNY=";
+  };
+
+  patches = [
+    # Pull patch pending upstream inclusion for -fno-common toolchain support:
+    #   https://savannah.gnu.org/patch/index.php?10211
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://savannah.gnu.org/patch/download.php?file_id=53275";
+      sha256 = "sha256-ZOo9jAy1plFjhC5HXJQvXL+Zf7FL14asV3G4AwfgqTY=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libX11
+    xorgproto
+    libXt
+    libXaw
+    libSM
+    libICE
+    libXmu
+    libXext
+    gnuchess
+    texinfo
+    libXpm
+    librsvg
+    cairo
+    pango
+    gtk2
+  ];
+
+  meta = with lib; {
+    description = "GUI for chess engines";
+    homepage = "https://www.gnu.org/software/xboard/";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xbomb/default.nix b/nixpkgs/pkgs/games/xbomb/default.nix
new file mode 100644
index 000000000000..093f822a7e31
--- /dev/null
+++ b/nixpkgs/pkgs/games/xbomb/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, libX11, libXaw }:
+
+stdenv.mkDerivation rec {
+  pname = "xbomb";
+  version = "2.2b";
+  src = fetchurl {
+    url    = "https://www.gedanken.org.uk/software/xbomb/download/xbomb-${version}.tgz";
+    sha256 = "0692gjw28qvh8wj9l58scjw6kxj7jdyb3yzgcgs9wcznq11q839m";
+  };
+
+  buildInputs = [ libX11 libXaw ];
+
+  makeFlags = [
+    "INSTDIR=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    homepage = "http://www.gedanken.org.uk/software/xbomb/";
+    description = "Minesweeper for X11 with various grid sizes and shapes";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xconq/default.nix b/nixpkgs/pkgs/games/xconq/default.nix
new file mode 100644
index 000000000000..78a7949d1a91
--- /dev/null
+++ b/nixpkgs/pkgs/games/xconq/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchurl, cpio, xorgproto, libX11, libXmu, libXaw, libXt, tcl, tk
+, libXext, fontconfig, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "xconq";
+  version = "7.5.0-0pre.0.20050612";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/xconq/xconq/xconq-${version}/xconq-${version}.tar.gz";
+    sha256 = "1za78yx57mgwcmmi33wx3533yz1x093dnqis8q2qmqivxav51lca";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ cpio xorgproto libX11 libXmu libXaw libXt tcl tk libXext fontconfig ];
+
+  configureFlags = [
+    "--enable-alternate-scoresdir=scores"
+    "--with-tclconfig=${tcl}/lib"
+    "--with-tkconfig=${tk}/lib"
+  ];
+
+  env.CXXFLAGS = toString [
+    "-std=c++11"
+    "-DUSE_INTERP_RESULT"
+    "-Wno-writable-strings"
+  ];
+
+  enableParallelBuilding = true;
+
+  hardeningDisable = [ "format" ];
+
+  patchPhase = ''
+    # Fix Makefiles
+    find . -name 'Makefile.in' -exec sed -re 's@^        ( *)(cd|[&][&])@	\1\2@' -i '{}' ';'
+    find . -name 'Makefile.in' -exec sed -e '/chown/d; /chgrp/d' -i '{}' ';'
+    # do not set sticky bit in nix store
+    find . -name 'Makefile.in' -exec sed -e 's/04755/755/g' -i '{}' ';'
+    sed -e '/^			* *[$][(]tcltkdir[)]\/[*][.][*]/d' -i tcltk/Makefile.in
+
+    # Fix C files
+    sed -re 's@[(]int[)]color@(long)color@' -i tcltk/tkmap.c
+    sed -re '/unitp = view_unit[(]uview[)]/aelse *unitp = NULL\;' -i tcltk/tkmap.c
+    sed -re 's@BMAP_BYTE char@BMAP_BYTE unsigned char@' -i kernel/ui.h
+
+    # Fix TCL files
+    sed -re 's@MediumBlue@LightBlue@g' -i tcltk/tkconq.tcl
+  '';
+
+  postInstall = ''
+    for file in $out/bin/*; do
+      wrapProgram $file --prefix TCLLIBPATH ' ' "${tk}/lib"
+    done
+  '';
+
+  meta = with lib; {
+    description = "A programmable turn-based strategy game";
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xcowsay/default.nix b/nixpkgs/pkgs/games/xcowsay/default.nix
new file mode 100644
index 000000000000..52569e044f06
--- /dev/null
+++ b/nixpkgs/pkgs/games/xcowsay/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, makeWrapper, pkg-config
+, dbus, dbus-glib, gtk3, gdk-pixbuf, librsvg
+, fortune
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xcowsay";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "http://www.nickg.me.uk/files/xcowsay-${version}.tar.gz";
+    sha256 = "sha256-RqzoZP8o0tIfS3BY8CleGNAEGhIMEHipUfpDxOD1yMU=";
+  };
+
+  buildInputs = [
+    dbus
+    dbus-glib
+    gtk3
+    gdk-pixbuf # loading cow images
+    librsvg # dreaming SVG images
+  ];
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+
+  configureFlags = [ "--enable-dbus" ];
+
+  postInstall = ''
+    for tool in xcowdream xcowsay xcowthink xcowfortune; do
+      wrapProgram $out/bin/$tool \
+        --prefix PATH : $out/bin:${fortune}/bin
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.doof.me.uk/xcowsay";
+    description = "Tool to display a cute cow and messages";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/xgalaga++/default.nix b/nixpkgs/pkgs/games/xgalaga++/default.nix
new file mode 100644
index 000000000000..ba78e2864414
--- /dev/null
+++ b/nixpkgs/pkgs/games/xgalaga++/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchurl
+, libX11
+, libXpm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xgalaga++";
+  version = "0.9";
+  src = fetchurl {
+    url    = "https://marc.mongenet.ch/OSS/XGalaga/xgalaga++_${version}.tar.gz";
+    sha256 = "sha256-yNtLuYCMHLvQAVM7CDGPardrh3q27TE9l31qhUbMf8k=";
+  };
+
+  buildInputs = [
+    libX11
+    libXpm
+  ];
+
+  buildPhase = ''
+    make all HIGH_SCORES_FILE=.xgalaga++.scores
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man
+    mv xgalaga++ $out/bin
+    mv xgalaga++.6x $out/share/man
+  '';
+
+  meta = with lib; {
+    homepage = "https://marc.mongenet.ch/OSS/XGalaga/";
+    description = "XGalaga++ is a classic single screen vertical shoot ’em up. It is inspired by XGalaga and reuses most of its sprites.";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xivlauncher/default.nix b/nixpkgs/pkgs/games/xivlauncher/default.nix
new file mode 100644
index 000000000000..b88c3ac9477f
--- /dev/null
+++ b/nixpkgs/pkgs/games/xivlauncher/default.nix
@@ -0,0 +1,80 @@
+{ lib, buildDotnetModule, fetchFromGitHub, dotnetCorePackages, SDL2, libsecret, glib, gnutls, aria2, steam, gst_all_1
+, copyDesktopItems, makeDesktopItem, makeWrapper
+, useSteamRun ? true }:
+
+let
+  rev = "1.0.6";
+in
+  buildDotnetModule rec {
+    pname = "XIVLauncher";
+    version = rev;
+
+    src = fetchFromGitHub {
+      owner = "goatcorp";
+      repo = "XIVLauncher.Core";
+      inherit rev;
+      hash = "sha256-P1i12vw9KQOTL7QBxjKPSlda5rvoyl7DGmuuD5iVEQs=";
+      fetchSubmodules = true;
+    };
+
+    nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+
+    buildInputs = with gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav ];
+
+    projectFile = "src/XIVLauncher.Core/XIVLauncher.Core.csproj";
+    nugetDeps = ./deps.nix; # File generated with `nix-build -A xivlauncher.passthru.fetch-deps`
+
+    dotnetFlags = [
+      "-p:BuildHash=${rev}"
+      "-p:PublishSingleFile=false"
+    ];
+
+    postPatch = ''
+      substituteInPlace lib/FFXIVQuickLauncher/src/XIVLauncher.Common/Game/Patch/Acquisition/Aria/AriaHttpPatchAcquisition.cs \
+        --replace 'ariaPath = "aria2c"' 'ariaPath = "${aria2}/bin/aria2c"'
+    '';
+
+    postInstall = ''
+      mkdir -p $out/share/pixmaps
+      cp src/XIVLauncher.Core/Resources/logo.png $out/share/pixmaps/xivlauncher.png
+    '';
+
+    postFixup = lib.optionalString useSteamRun (let
+      steam-run = (steam.override {
+        extraPkgs = pkgs: [ pkgs.libunwind ];
+      }).run;
+    in ''
+      substituteInPlace $out/bin/XIVLauncher.Core \
+        --replace 'exec' 'exec ${steam-run}/bin/steam-run'
+    '') + ''
+      wrapProgram $out/bin/XIVLauncher.Core --prefix GST_PLUGIN_SYSTEM_PATH_1_0 ":" "$GST_PLUGIN_SYSTEM_PATH_1_0"
+      # the reference to aria2 gets mangled as UTF-16LE and isn't detectable by nix: https://github.com/NixOS/nixpkgs/issues/220065
+      mkdir -p $out/nix-support
+      echo ${aria2} >> $out/nix-support/depends
+    '';
+
+    executables = [ "XIVLauncher.Core" ];
+
+    runtimeDeps = [ SDL2 libsecret glib gnutls ];
+
+    desktopItems = [
+      (makeDesktopItem {
+        name = "xivlauncher";
+        exec = "XIVLauncher.Core";
+        icon = "xivlauncher";
+        desktopName = "XIVLauncher";
+        comment = meta.description;
+        categories = [ "Game" ];
+        startupWMClass = "XIVLauncher.Core";
+      })
+    ];
+
+    meta = with lib; {
+      description = "Custom launcher for FFXIV";
+      homepage = "https://github.com/goatcorp/FFXIVQuickLauncher";
+      license = licenses.gpl3;
+      maintainers = with maintainers; [ sersorrel witchof0x20 ];
+      platforms = [ "x86_64-linux" ];
+      mainProgram = "XIVLauncher.Core";
+    };
+  }
diff --git a/nixpkgs/pkgs/games/xivlauncher/deps.nix b/nixpkgs/pkgs/games/xivlauncher/deps.nix
new file mode 100644
index 000000000000..10b646fc8c41
--- /dev/null
+++ b/nixpkgs/pkgs/games/xivlauncher/deps.nix
@@ -0,0 +1,191 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Castle.Core"; version = "4.4.1"; sha256 = "13dja1jxl5zwhi0ghkgvgmqdrixn57f9hk52jy5vpaaakzr550r7"; })
+  (fetchNuGet { pname = "CheapLoc"; version = "1.1.6"; sha256 = "1m6cgx9yh7h3vrq2d4f99xyvsxc9jvz8zjq1q14qgylfmyq4hx4l"; })
+  (fetchNuGet { pname = "CommandLineParser"; version = "2.9.1"; sha256 = "1sldkj8lakggn4hnyabjj1fppqh50fkdrr1k99d4gswpbk5kv582"; })
+  (fetchNuGet { pname = "Config.Net"; version = "4.19.0"; sha256 = "17iv0vy0693s6d8626lbz3w1ppn5abn77aaki7h4qi4izysizgim"; })
+  (fetchNuGet { pname = "Downloader"; version = "2.2.8"; sha256 = "0farwh3pc6m8hsgqywigdpcb4gr2m9myyxm2idzjmhhkzfqghj28"; })
+  (fetchNuGet { pname = "goaaats.NativeLibraryLoader"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "1bjjgsw4ry9cz8dzsgwx428hn06wms194pqz8nclwrqcwfx7gmxk"; })
+  (fetchNuGet { pname = "goaaats.Steamworks"; version = "2.3.4"; sha256 = "1khxkkjvh6af60rxc13bacxn85amdfzr8z0b9a6gfg6m1fnmlkss"; })
+  (fetchNuGet { pname = "goaaats.Veldrid"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "0b35bn4190hxbvrwsygpbpg00gnrj6crxyk8b0d7ian611v4jj0m"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.ImageSharp"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "1zihi2n9qz18kfkz4qnj3412bfsqvx49809hqkknixdrgn8323i2"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.MetalBindings"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "13cs5jr8bpkrkzziz8b71l3npr14shxryrpsiw0zm7jcx69vg2qf"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.OpenGLBindings"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "1p7gv2234r3f1pskcr1ah7p3ak6zn1rrmvxy5xqc9d5y4zdrnzlb"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.SDL2"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "14xj3z0yc25vq17bvv2193cbqxj7k9iimxbaqk2rpvlpmrbg20xi"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.StartupUtilities"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "03r3x9h0fyb07d6d28ny6r5s688m50xc0lgc6zf2cy684kfnvmp5"; })
+  (fetchNuGet { pname = "ImGui.NET"; version = "1.87.2"; sha256 = "0rv0n18fvz1gbh45crhzn1f8xw8zkc8qyiyj91vajjcry8mq1x7q"; })
+  (fetchNuGet { pname = "KeySharp"; version = "1.0.5"; sha256 = "1ic10v0a174fw6w89iyg4yzji36bsj15573y676cj5n09n6s75d4"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "6.0.0"; sha256 = "15gqy2m14fdlvy1g59207h5kisznm355kbw010gy19vh47z8gpz3"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.3.3"; sha256 = "09m4cpry8ivm9ga1abrxmvw16sslxhy2k5sl14zckhqb1j164im6"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.BannedApiAnalyzers"; version = "3.3.3"; sha256 = "1z6x0d8lpcfjr3sxy25493i17vvcg5bsay6c03qan6mnj5aqzw2k"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "4.0.1"; sha256 = "0axjv1nhk1z9d4c51d9yxdp09l8yqqnqaifhqcwnxnv0r4y5cka9"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "4.0.1"; sha256 = "1h6jfifg7pw2vacpdds4v4jqnaydg9b108irf315wzx6rh8yv9cb"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.NetAnalyzers"; version = "6.0.0"; sha256 = "06zy947m5lrbwb684g42ijb07r5jsqycvfnphc6cqfdrfnzqv6k9"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.NetAnalyzers"; version = "7.0.0"; sha256 = "1rl5zi8s213g70nvqfacf50ff8vqvaj8i7jxv0gjw2hkz73dg4h1"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "6.0.0-preview.5.21301.5"; sha256 = "02712s86n2i8s5j6vxdayqwcc7r538yw3frhf1gfrc6ah6hvqnzc"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; })
+  (fetchNuGet { pname = "Mono.Cecil"; version = "0.9.6.1"; sha256 = "1fr7969h5q611l5227xw6nvv5rzap76vbpk0wg9hxbcxk3hn7szf"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "12.0.2"; sha256 = "0w2fbji1smd2y7x25qqibf1qrznmv4s6s0jvrbvr6alb7mfyqvh5"; })
+  (fetchNuGet { pname = "PInvoke.Kernel32"; version = "0.7.124"; sha256 = "0n1245s2p5735n8xgmahrx7g8mw32pxdn4rr9dydb9r6mvgm9bhk"; })
+  (fetchNuGet { pname = "PInvoke.Windows.Core"; version = "0.7.124"; sha256 = "16qkn91gh3aiab2330q5j1vlx2ni4m4kkz04dvsqlm8lr7ldizlz"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "Serilog"; version = "2.12.0"; sha256 = "0lqxpc96qcjkv9pr1rln7mi4y7n7jdi4vb36c2fv3845w1vswgr4"; })
+  (fetchNuGet { pname = "Serilog.Enrichers.Sensitive"; version = "1.7.2"; sha256 = "1f3r4jrfiz47vnvy7m0w6d8280nhhna67xwbagx1i557m9qvjssg"; })
+  (fetchNuGet { pname = "Serilog.Enrichers.Thread"; version = "3.1.0"; sha256 = "1y75aiv2k1sxnh012ixkx92fq1yl8srqggy8l439igg4p223hcqi"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Async"; version = "1.5.0"; sha256 = "0bcb3n6lmg5wfj806mziybfmbb8gyiszrivs3swf0msy8w505gyg"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "3.1.1"; sha256 = "0j99as641y1k6havwwkhyr0n08vibiblmfjj6nz051mz8g3864fn"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "4.0.1"; sha256 = "080vh9kcyn9lx4j7p34146kp9byvhqlaz5jn9wzx70ql9cwd0hlz"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Debug"; version = "1.0.1"; sha256 = "0969mb254kr59bgkq01ybyzca89z3f4n9ng5mdj8m53d5653zf22"; })
+  (fetchNuGet { pname = "Serilog.Sinks.File"; version = "5.0.0"; sha256 = "097rngmgcrdfy7jy8j7dq3xaq2qky8ijwg0ws6bfv5lx0f3vvb0q"; })
+  (fetchNuGet { pname = "SharedMemory"; version = "2.3.2"; sha256 = "078qaab0j8p2fjcc9n7r4sr5pr7567a9bspfiikkc85bsx7vfm8w"; })
+  (fetchNuGet { pname = "SharpGen.Runtime"; version = "2.0.0-beta.10"; sha256 = "0yxq0b4m96z71afc7sywfrlwz2pgr5nilacmssjk803v70f0ydr1"; })
+  (fetchNuGet { pname = "SharpGen.Runtime.COM"; version = "2.0.0-beta.10"; sha256 = "1qvpphja72x9r3yi96bnmwwy30b1n155v2yy2gzlxjil6qg3xjmb"; })
+  (fetchNuGet { pname = "SixLabors.ImageSharp"; version = "1.0.4"; sha256 = "0fmgn414my76gjgp89qlc210a0lqvnvkvk2fcwnpwxdhqpfvyilr"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.4.0"; sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
+  (fetchNuGet { pname = "System.Collections.NonGeneric"; version = "4.3.0"; sha256 = "07q3k0hf3mrcjzwj8fwk6gv3n51cb513w4mgkfxzm3i37sc9kz7k"; })
+  (fetchNuGet { pname = "System.Collections.Specialized"; version = "4.3.0"; sha256 = "1sdwkma4f6j85m3dpb53v9vcgd0zyc9jb33f8g63byvijcj39n20"; })
+  (fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
+  (fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.3.0"; sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0"; })
+  (fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.3.0"; sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x"; })
+  (fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "6.0.0"; sha256 = "0sqapr697jbb4ljkq46msg0xx1qpmc31ivva6llyz2wzq3mpmxbw"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.7.0"; sha256 = "0l8jpxhpgjlf1nkz5lvp61r4kfdbhr29qi8aapcxn3izd9wd0j8r"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.7.0"; sha256 = "0mbjfajmafkca47zr8v36brvknzks5a7pgb49kfq2d188pyv6iap"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.4.0"; sha256 = "0a6ahgi5b148sl5qyfpyw383p3cb4yrkm802k29fsi4mxkiwir29"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.0"; sha256 = "17labczwqk3jng3kkky73m0jhi8wc21vbl7cz5c0hj2p1dswin43"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.3"; sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "6.0.0"; sha256 = "0a678bzj8yxxiffyzy60z2w1nczzpi8v97igr4ip3byd2q89dv58"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "6.0.0-preview.5.21301.5"; sha256 = "131f3z3ikv3n8442chr11nj4x46amq00mb53pb2ds42dabldkdgy"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "6.0.0"; sha256 = "05kd3a8w7658hjxq9vvszxip30a479fjmfq4bq1r95nrsvs4hbss"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Permissions"; version = "6.0.0"; sha256 = "0jsl4xdrkqi11iwmisi1r2f2qn5pbvl79mzq877gndw6ans2zhzw"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "6.0.0-preview.5.21301.5"; sha256 = "1q3iikvjcfrm5p89p1j7qlw1szvryq680qypk023wgy9phmlwi57"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "6.0.0"; sha256 = "06n9ql3fmhpjl32g3492sj181zjml5dlcc5l76xq2h38c4f87sai"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "6.0.6"; sha256 = "0bkfrnr9618brbl1gvhyqrf5720syawf9dvpk8xfvkxbg7imlpjx"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.Windows.Extensions"; version = "6.0.0"; sha256 = "1wy9pq9vn1bqg5qnv53iqrbx04yzdmjw4x5yyi09y3459vaa1sip"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "Vk"; version = "1.0.25"; sha256 = "18kx3g088215803yznnmf6621wgwvgakj8hlmrb726b7zwb3x53l"; })
+  (fetchNuGet { pname = "Vortice.D3DCompiler"; version = "2.1.0"; sha256 = "1ikw4k40m1vhl6q3v4lacbvmz09prqkk8zz0dms49hxjrpi0gfdh"; })
+  (fetchNuGet { pname = "Vortice.Direct3D11"; version = "2.1.0"; sha256 = "05hzmkk32agbk2617yhv3wm1zjkv25w57395an4vkp14rvsz82vf"; })
+  (fetchNuGet { pname = "Vortice.DirectX"; version = "2.1.0"; sha256 = "0mv3p7rs2p9rh4vylz24gmiqj0q63rmfa7mjvsqk1j1zlrkyyhlk"; })
+  (fetchNuGet { pname = "Vortice.DXGI"; version = "2.1.0"; sha256 = "1d7rmqf7q287w3l7clfvp66kd0giy4n6087n9r8jj0w5r65416ls"; })
+  (fetchNuGet { pname = "Vortice.Mathematics"; version = "1.3.24"; sha256 = "1fqni3lhaxddpdz060zbjjhkn5fgg7458ajxfrj3df3wjbld3bc3"; })
+]
diff --git a/nixpkgs/pkgs/games/xjump/darwin.patch b/nixpkgs/pkgs/games/xjump/darwin.patch
new file mode 100644
index 000000000000..8221677658e3
--- /dev/null
+++ b/nixpkgs/pkgs/games/xjump/darwin.patch
@@ -0,0 +1,21 @@
+--- xjump/src/main.c	2018-02-20 09:15:15.608807657 +0100
++++ xjump-patched/src/main.c	2018-02-20 09:15:34.148949100 +0100
+@@ -604,18 +604,6 @@
+    * optimistic privilege dropping function. */
+   setgroups(0, NULL);
+ 
+-  if (setresgid(-1, realgid, realgid) != 0) {
+-    perror("Could not drop setgid privileges.  Aborting.");
+-    exit(1);
+-  }
+-
+-  /* Dropping user privileges must come last.
+-   * Otherwise we won't be able to drop group privileges anymore */
+-  if (setresuid(-1, realuid, realuid) != 0) {
+-    perror("Could not drop setuid privileges.  Aborting.");
+-    exit(1);
+-  }
+-
+   /* From now on we run with regular user privileges */
+ 
+   static XtActionsRec a_table[] = {
diff --git a/nixpkgs/pkgs/games/xjump/default.nix b/nixpkgs/pkgs/games/xjump/default.nix
new file mode 100644
index 000000000000..2c56e0bba4f6
--- /dev/null
+++ b/nixpkgs/pkgs/games/xjump/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libX11, libXt, libXpm, libXaw, localStateDir?null }:
+
+stdenv.mkDerivation {
+  pname = "xjump";
+  version = "2.9.3";
+  src = fetchFromGitHub {
+    owner = "hugomg";
+    repo = "xjump";
+    rev = "e7f20fb8c2c456bed70abb046c1a966462192b80";
+    sha256 = "0hq4739cvi5a47pxdc0wwkj2lmlqbf1xigq0v85qs5bq3ixmq2f7";
+  };
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ libX11 libXt libXpm libXaw ];
+  preConfigure = "autoreconf --install";
+  patches = lib.optionals stdenv.buildPlatform.isDarwin [ ./darwin.patch ];
+  configureFlags = lib.optionals (localStateDir != null) ["--localstatedir=${localStateDir}"];
+
+  meta = with lib; {
+    description = "The falling tower game";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pmeunier ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/xmage/default.nix b/nixpkgs/pkgs/games/xmage/default.nix
new file mode 100644
index 000000000000..b6aa8e22afd2
--- /dev/null
+++ b/nixpkgs/pkgs/games/xmage/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchurl
+, jdk8
+, unzip
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xmage";
+  version = "1.4.50V2";
+
+  src = fetchurl {
+    url =
+      "https://github.com/magefree/mage/releases/download/xmage_${finalAttrs.version}/xmage_${finalAttrs.version}.zip";
+    sha256 = "sha256-t1peHYwCRy3wiIIwOD3nUyoxSOxbw6B/g++A1ofIbmg=";
+  };
+
+  preferLocalBuild = true;
+
+  unpackPhase = ''
+    ${unzip}/bin/unzip $src
+  '';
+
+  installPhase = let
+    strVersion = lib.substring 0 6 finalAttrs.version;
+  in ''
+    mkdir -p $out/bin
+    cp -rv ./* $out
+
+    cat << EOS > $out/bin/xmage
+    exec ${jdk8}/bin/java -Xms256m -Xmx512m -XX:MaxPermSize=384m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar $out/mage-client/lib/mage-client-${strVersion}.jar
+    EOS
+
+    chmod +x $out/bin/xmage
+  '';
+
+  meta = with lib; {
+    description = "Magic Another Game Engine";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    homepage = "http://xmage.de/";
+  };
+
+})
+
diff --git a/nixpkgs/pkgs/games/xmoto/default.nix b/nixpkgs/pkgs/games/xmoto/default.nix
new file mode 100644
index 000000000000..5909c3f20ee4
--- /dev/null
+++ b/nixpkgs/pkgs/games/xmoto/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, gettext, makeWrapper, bzip2
+, curl, libjpeg, libxml2, xz, lua, ode, libGL, libpng, SDL, SDL_mixer, SDL_net
+, SDL_ttf, sqlite, libxdg_basedir, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "xmoto";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "00f5ha79lfa2iiaz66wl0hl5dapa1l15qdr7m7knzi0ll7j6z66n";
+  };
+
+  patches = [
+    # Fix build with Nix
+    (fetchpatch {
+      url = "https://github.com/xmoto/xmoto/commit/536dcc7ec77a4c4c454b86220e85b1cb3cd1c7f7.patch";
+      sha256 = "0h9lld668jrbmrqva89zqwp63jiagjj86prkxzx6372p3kk9y7g7";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    gettext
+    makeWrapper
+  ];
+
+  buildInputs = [
+    bzip2
+    curl
+    libjpeg
+    libxml2
+    xz
+    lua
+    ode
+    libGL
+    libpng
+    SDL
+    SDL_mixer
+    SDL_net
+    SDL_ttf
+    sqlite
+    libxdg_basedir
+    zlib
+  ];
+
+  preFixup = ''
+    wrapProgram "$out/bin/xmoto" \
+      --prefix XDG_DATA_DIRS : "$out/share/"
+  '';
+
+  meta = with lib; {
+    description = "A challenging 2D motocross platform game, where physics play an important role";
+    longDescription = ''
+      X-Moto is a challenging 2D motocross platform game, where physics plays an all important role in the gameplay.
+      You need to control your bike to its limits, if you want to have a chance to finish the most difficult challenges.
+    '';
+    homepage = "https://xmoto.tuxfamily.org";
+    maintainers = with maintainers; [ raskin pSub ];
+    platforms = platforms.all;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xonotic/default.nix b/nixpkgs/pkgs/games/xonotic/default.nix
new file mode 100644
index 000000000000..60eb1189391d
--- /dev/null
+++ b/nixpkgs/pkgs/games/xonotic/default.nix
@@ -0,0 +1,193 @@
+{ lib, stdenv, fetchurl, fetchzip, makeWrapper, runCommand, makeDesktopItem
+, xonotic-data, copyDesktopItems
+, # required for both
+  unzip, libjpeg, zlib, libvorbis, curl, freetype, libpng, libtheora
+, # glx
+  libX11, libGLU, libGL, libXpm, libXext, libXxf86vm, alsa-lib
+, # sdl
+  SDL2
+, # blind
+  gmp
+
+, withSDL ? true
+, withGLX ? false
+, withDedicated ? true
+}:
+
+let
+  pname = "xonotic";
+  version = "0.8.6";
+  name = "${pname}-${version}";
+  variant =
+    if withSDL && withGLX then
+      ""
+    else if withSDL then
+      "-sdl"
+    else if withGLX then
+      "-glx"
+    else if withDedicated then
+      "-dedicated"
+    else "-what-even-am-i";
+
+  meta = {
+    description = "A free fast-paced first-person shooter";
+    longDescription = ''
+      Xonotic is a free, fast-paced first-person shooter that works on
+      Windows, macOS and Linux. The project is geared towards providing
+      addictive arena shooter gameplay which is all spawned and driven
+      by the community itself. Xonotic is a direct successor of the
+      Nexuiz project with years of development between them, and it
+      aims to become the best possible open-source FPS of its kind.
+    '';
+    homepage = "https://www.xonotic.org/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ astsmtl zalakain ];
+    platforms = lib.platforms.linux;
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "xonotic";
+    exec = "xonotic";
+    comment = meta.description;
+    desktopName = "Xonotic";
+    categories = [ "Game" "Shooter" ];
+    icon = "xonotic";
+    startupNotify = false;
+  };
+
+  xonotic-unwrapped = stdenv.mkDerivation rec {
+    pname = "xonotic${variant}-unwrapped";
+    inherit version;
+
+    src = fetchurl {
+      url = "https://dl.xonotic.org/xonotic-${version}-source.zip";
+      hash = "sha256-i5KseBz/SuicEhoj6s197AWiqr7azMI6GdGglYtAEqg=";
+    };
+
+    nativeBuildInputs = [ unzip ];
+    buildInputs = [ libjpeg zlib libvorbis curl gmp ]
+      ++ lib.optionals withGLX [ libX11.dev libGLU.dev libGL.dev libXpm.dev libXext.dev libXxf86vm.dev alsa-lib.dev ]
+      ++ lib.optionals withSDL [ SDL2.dev ];
+
+    sourceRoot = "Xonotic/source/darkplaces";
+
+    # "debug", "release", "profile"
+    target = "release";
+
+    dontStrip = target != "release";
+
+    postConfigure = ''
+      pushd ../d0_blind_id
+      ./configure $configureFlags
+      popd
+    '';
+
+    buildPhase = (lib.optionalString withDedicated ''
+      make -j $NIX_BUILD_CORES sv-${target}
+    '' + lib.optionalString withGLX ''
+      make -j $NIX_BUILD_CORES cl-${target}
+    '' + lib.optionalString withSDL ''
+      make -j $NIX_BUILD_CORES sdl-${target}
+    '') + ''
+      pushd ../d0_blind_id
+      make -j $NIX_BUILD_CORES
+      popd
+    '';
+
+    enableParallelBuilding = true;
+
+    installPhase = (''
+      install -Dm644 ../../misc/logos/xonotic_icon.svg \
+        $out/share/icons/hicolor/scalable/apps/xonotic.svg
+      pushd ../../misc/logos/icons_png
+      for img in *.png; do
+        size=''${img#xonotic_}
+        size=''${size%.png}
+        dimensions="''${size}x''${size}"
+        install -Dm644 $img \
+          $out/share/icons/hicolor/$dimensions/apps/xonotic.png
+      done
+      popd
+    '' + lib.optionalString withDedicated ''
+      install -Dm755 darkplaces-dedicated "$out/bin/xonotic-dedicated"
+    '' + lib.optionalString withGLX ''
+      install -Dm755 darkplaces-glx "$out/bin/xonotic-glx"
+    '' + lib.optionalString withSDL ''
+      install -Dm755 darkplaces-sdl "$out/bin/xonotic-sdl"
+    '') + ''
+      pushd ../d0_blind_id
+      make install
+      popd
+    '';
+
+    # Xonotic needs to find libcurl.so at runtime for map downloads
+    dontPatchELF = true;
+    postFixup = lib.optionalString withDedicated ''
+      patchelf --add-needed ${curl.out}/lib/libcurl.so $out/bin/xonotic-dedicated
+    '' + lib.optionalString withGLX ''
+      patchelf \
+          --add-needed ${curl.out}/lib/libcurl.so \
+          --add-needed ${libvorbis}/lib/libvorbisfile.so \
+          --add-needed ${libvorbis}/lib/libvorbisenc.so \
+          --add-needed ${libvorbis}/lib/libvorbis.so \
+          --add-needed ${libGL.out}/lib/libGL.so \
+          --add-needed ${freetype}/lib/libfreetype.so \
+          --add-needed ${libpng}/lib/libpng.so \
+          --add-needed ${libtheora}/lib/libtheora.so \
+          $out/bin/xonotic-glx
+    '' + lib.optionalString withSDL ''
+      patchelf \
+          --add-needed ${curl.out}/lib/libcurl.so \
+          --add-needed ${libvorbis}/lib/libvorbisfile.so \
+          --add-needed ${libvorbis}/lib/libvorbisenc.so \
+          --add-needed ${libvorbis}/lib/libvorbis.so \
+          --add-needed ${freetype}/lib/libfreetype.so \
+          --add-needed ${libpng}/lib/libpng.so \
+          --add-needed ${libtheora}/lib/libtheora.so \
+          $out/bin/xonotic-sdl
+    '';
+  };
+
+in rec {
+  xonotic-data = fetchzip {
+    name = "xonotic-data";
+    url = "https://dl.xonotic.org/xonotic-${version}.zip";
+    hash = "sha256-Lhjpyk7idmfQAVn4YUb7diGyyKZQBfwNXxk2zMOqiZQ=";
+    postFetch = ''
+      cd $out
+      rm -rf $(ls | grep -v "^data$" | grep -v "^key_0.d0pk$")
+    '';
+    meta.hydraPlatforms = [];
+    passthru.version = version;
+  };
+
+  xonotic = runCommand "xonotic${variant}-${version}" {
+    inherit xonotic-unwrapped;
+    nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+    desktopItems = [ desktopItem ];
+    passthru = {
+      inherit version;
+      meta = meta // {
+        hydraPlatforms = [];
+      };
+    };
+  } (''
+    mkdir -p $out/bin
+  '' + lib.optionalString withDedicated ''
+    ln -s ${xonotic-unwrapped}/bin/xonotic-dedicated $out/bin/
+  '' + lib.optionalString withGLX ''
+    ln -s ${xonotic-unwrapped}/bin/xonotic-glx $out/bin/xonotic-glx
+    ln -s $out/bin/xonotic-glx $out/bin/xonotic
+  '' + lib.optionalString withSDL ''
+    ln -s ${xonotic-unwrapped}/bin/xonotic-sdl $out/bin/xonotic-sdl
+    ln -sf $out/bin/xonotic-sdl $out/bin/xonotic
+  '' + lib.optionalString (withSDL || withGLX) ''
+    mkdir -p $out/share
+    ln -s ${xonotic-unwrapped}/share/icons $out/share/icons
+    copyDesktopItems
+  '' + ''
+    for binary in $out/bin/xonotic-*; do
+      wrapProgram $binary --add-flags "-basedir ${xonotic-data}" --prefix LD_LIBRARY_PATH : "${xonotic-unwrapped}/lib"
+    done
+  '');
+}
diff --git a/nixpkgs/pkgs/games/xpilot/bloodspilot-client.nix b/nixpkgs/pkgs/games/xpilot/bloodspilot-client.nix
new file mode 100644
index 000000000000..8e603ef53f78
--- /dev/null
+++ b/nixpkgs/pkgs/games/xpilot/bloodspilot-client.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, libX11, SDL, libGLU, libGL, expat, zlib, SDL_ttf, SDL_image }:
+
+stdenv.mkDerivation rec {
+  version = "1.5.0";
+  pname = "bloodspilot-client";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/bloodspilot/client-sdl/v${version}/bloodspilot-client-sdl-${version}.tar.gz";
+    sha256 = "1qwl95av5an2zl01m7saj6fyy49xpixga7gbn4lwbpgpqs1rbwxj";
+  };
+
+  buildInputs = [
+    libX11 SDL SDL_ttf SDL_image libGLU libGL expat zlib
+  ];
+
+  NIX_LDFLAGS = "-lX11";
+
+  meta = {
+    description = "A multiplayer space combat game (client part)";
+    homepage = "http://bloodspilot.sf.net/";
+    license = lib.licenses.gpl2Plus ;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xpilot/bloodspilot-server.nix b/nixpkgs/pkgs/games/xpilot/bloodspilot-server.nix
new file mode 100644
index 000000000000..a860c4e1d5ff
--- /dev/null
+++ b/nixpkgs/pkgs/games/xpilot/bloodspilot-server.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, expat }:
+
+stdenv.mkDerivation rec {
+  pname = "bloodspilot-xpilot-fxi-server";
+  version = "1.4.6";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/bloodspilot/server/server%20v${version}/xpilot-${version}fxi.tar.gz";
+    sha256 = "0d7hnpshifq6gy9a0g6il6h1hgqqjyys36n8w84hr8d4nhg4d1ji";
+  };
+
+  buildInputs = [
+    expat
+  ];
+
+  patches = [
+    ./server-gcc5.patch
+  ];
+
+  meta = with lib; {
+    description = "A multiplayer X11 space combat game (server part)";
+    homepage = "http://bloodspilot.sf.net/";
+    license = licenses.gpl2Plus ;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xpilot/default.nix b/nixpkgs/pkgs/games/xpilot/default.nix
new file mode 100644
index 000000000000..bd86538d99ec
--- /dev/null
+++ b/nixpkgs/pkgs/games/xpilot/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, libX11, libSM, SDL, libGLU, libGL, expat, SDL_ttf
+, SDL_image, zlib, libXxf86misc }:
+stdenv.mkDerivation rec {
+  pname = "xpilot-ng";
+  version = "4.7.3";
+  src = fetchurl {
+    url = "mirror://sourceforge/xpilot/xpilot_ng/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "02a7pnp88kh88fzda5q8mzlckk6y9r5fw47j00h26wbsfly0k1zj";
+  };
+  buildInputs = [
+    libX11 libSM SDL SDL_ttf SDL_image libGLU libGL expat zlib libXxf86misc
+  ];
+  meta = with lib; {
+    description = "A multiplayer X11 space combat game";
+    homepage = "http://xpilot.sf.net/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xpilot/server-gcc5.patch b/nixpkgs/pkgs/games/xpilot/server-gcc5.patch
new file mode 100644
index 000000000000..5618399bfecd
--- /dev/null
+++ b/nixpkgs/pkgs/games/xpilot/server-gcc5.patch
@@ -0,0 +1,65 @@
+--- xpilot-1.4.6fxi/src/common/net.c	2016-02-09 00:20:43.531714342 +0000
++++ xpilot-1.4.6fxi/src/common/net.c	2016-02-09 00:21:15.301331053 +0000
+@@ -608,9 +608,9 @@
+ }
+ 
+ #if STDVA
+-inline int32_t Packet_scanf(sockbuf_t *sbuf, const char *fmt, ...)
++extern int32_t Packet_scanf(sockbuf_t *sbuf, const char *fmt, ...)
+ #else
+-inline int32_t Packet_scanf(va_alist)
++extern int32_t Packet_scanf(va_alist)
+ va_dcl
+ #endif
+ {
+--- xpilot-1.4.6fxi/src/server/collision.c	2016-02-09 00:22:29.581784405 +0000
++++ xpilot-1.4.6fxi/src/server/collision.c	2016-02-09 00:22:38.152952500 +0000
+@@ -71,7 +71,7 @@
+  * p: first object, q: second object
+  */
+ 
+-inline int32_t Collision_occured(int32_t p1x, int32_t p1y, int32_t p2x, int32_t p2y,
++extern int32_t Collision_occured(int32_t p1x, int32_t p1y, int32_t p2x, int32_t p2y,
+ 		int32_t q1x, int32_t q1y, int32_t q2x, int32_t q2y, int32_t r)
+ {
+ 	int32_t fac1, fac2;	/* contraction between the distance between the x and y coordinates of objects */
+--- xpilot-1.4.6fxi/src/server/player.c	2016-02-09 00:25:29.546313808 +0000
++++ xpilot-1.4.6fxi/src/server/player.c	2016-02-09 00:25:40.464527932 +0000
+@@ -1411,12 +1411,12 @@
+ 	return NULL;
+ }
+ 
+-inline bool Player_idle_timed_out(player_t *pl)
++extern bool Player_idle_timed_out(player_t *pl)
+ {
+ 	return (frame_loops - pl->frame_last_busy > MAX_PLAYER_IDLE_TICKS && (NumPlayers > 1)) ? true : false;
+ }
+ 
+-inline bool Player_is_recovered(player_t *pl)
++extern bool Player_is_recovered(player_t *pl)
+ {
+ 	return (pl->recovery_count <= 0.0) ? true : false;
+ }
+--- xpilot-1.4.6fxi/src/server/score.c	2016-02-09 00:21:45.659923025 +0000
++++ xpilot-1.4.6fxi/src/server/score.c	2016-02-09 00:22:07.224345939 +0000
+@@ -24,17 +24,17 @@
+ char msg[MSG_LEN];
+ 
+ 
+-inline double Get_Score(player_t *pl)
++extern double Get_Score(player_t *pl)
+ {
+     return pl->score;
+ }
+ 
+-inline void Score_set(player_t * pl, double score)
++extern void Score_set(player_t * pl, double score)
+ {
+     pl->score = score;
+ }
+ 
+-inline void Score_add(player_t * pl, double score)
++extern void Score_add(player_t * pl, double score)
+ {
+     pl->score += score;
+ }
diff --git a/nixpkgs/pkgs/games/xskat/default.nix b/nixpkgs/pkgs/games/xskat/default.nix
new file mode 100644
index 000000000000..74c2be586ceb
--- /dev/null
+++ b/nixpkgs/pkgs/games/xskat/default.nix
@@ -0,0 +1,30 @@
+{lib, stdenv, fetchurl, libX11, imake, gccmakedep}:
+
+stdenv.mkDerivation rec {
+  pname = "xskat";
+  version = "4.0";
+
+  nativeBuildInputs = [ gccmakedep ];
+  buildInputs = [ libX11 imake ];
+
+  src = fetchurl {
+    url = "http://www.xskat.de/xskat-${version }.tar.gz";
+    sha256 = "8ba52797ccbd131dce69b96288f525b0d55dee5de4008733f7a5a51deb831c10";
+  };
+
+  preInstall = ''
+    sed -i Makefile \
+      -e "s|.* BINDIR .*|   BINDIR = $out/bin|" \
+      -e "s|.* MANPATH .*|  MANPATH = $out/man|"
+  '';
+
+  installTargets = [ "install" "install.man" ];
+
+  meta = with lib; {
+    description = "Famous german card game";
+    platforms = platforms.unix;
+    license = licenses.free;
+    longDescription = "Play the german card game Skat against the AI or over IRC.";
+    homepage = "http://www.xskat.de/";
+  };
+}
diff --git a/nixpkgs/pkgs/games/xsnow/default.nix b/nixpkgs/pkgs/games/xsnow/default.nix
new file mode 100644
index 000000000000..ff34bfe729ba
--- /dev/null
+++ b/nixpkgs/pkgs/games/xsnow/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, pkg-config, libxml2, gtk3-x11, libXt, libXpm }:
+
+stdenv.mkDerivation rec {
+  pname = "xsnow";
+  version = "3.4.4";
+
+  src = fetchurl {
+    url = "https://ratrabbit.nl/downloads/xsnow/xsnow-${version}.tar.gz";
+    sha256 = "sha256-fPMy5AxKspFkcWphf/IjMc/ZQtayljThKxbcMtvOjRc=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3-x11 libxml2 libXt libXpm ];
+
+  makeFlags = [ "gamesdir=$(out)/bin" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "An X-windows application that will let it snow on the root, in between and on windows";
+    homepage = "https://ratrabbit.nl/ratrabbit/xsnow/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ robberer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xsok/default.nix b/nixpkgs/pkgs/games/xsok/default.nix
new file mode 100644
index 000000000000..53254ba98f91
--- /dev/null
+++ b/nixpkgs/pkgs/games/xsok/default.nix
@@ -0,0 +1,46 @@
+{lib, stdenv, fetchurl, libX11, imake, libXt, libXaw, libXpm, libXext
+, withNethackLevels ? true
+}:
+stdenv.mkDerivation rec {
+  pname = "xsok";
+  version = "1.02";
+
+  src = fetchurl {
+    url = "http://http.debian.net/debian/pool/main/x/xsok/xsok_1.02.orig.tar.gz";
+    sha256 = "0f4z53xsy4w8x8zp5jya689xp3rcfpi5wri2ip0qa8nk3sw7zj73";
+  };
+
+  nethackLevels = fetchurl {
+    url = "https://www.electricmonk.nl/data/nethack/nethack.def";
+    sha256 = "057ircp13hfpy513c7wpyp986hsvhqs7km98w4k39f5wkvp3dj02";
+  };
+
+  buildInputs = [libX11 libXt libXaw libXpm libXext];
+  nativeBuildInputs = [imake];
+
+  env.NIX_CFLAGS_COMPILE = " -isystem ${libXpm.dev}/include/X11 ";
+
+  preConfigure = ''
+    sed -e "s@/usr/@$out/share/@g" -i src/Imakefile
+    sed -e "s@/var/games/xsok@./.xsok/@g" -i src/Imakefile
+    sed -e '/chown /d' -i src/Imakefile
+    sed -e '/chmod /d' -i src/Imakefile
+    sed -e '/InstallAppDefaults/d' -i src/Imakefile
+    sed -e 's/CC = gcc/CC = cc/g' -i src/Imakefile
+  '';
+
+  makeFlags = ["BINDIR=$(out)/bin"];
+
+  postInstall = lib.optionalString withNethackLevels ''
+    gzip < ${nethackLevels} > "$out/share/games/lib/xsok/Nethack.def.gz"
+    echo Nethack > "$out/share/games/lib/xsok/gametypes"
+  '';
+
+  meta = {
+    description = "A generic Sokoban game for X11";
+    license = lib.licenses.gpl2Plus;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.unix;
+    homepage = "https://tracker.debian.org/pkg/xsok";
+  };
+}
diff --git a/nixpkgs/pkgs/games/xsokoban/default.nix b/nixpkgs/pkgs/games/xsokoban/default.nix
new file mode 100644
index 000000000000..4d8a6fa05056
--- /dev/null
+++ b/nixpkgs/pkgs/games/xsokoban/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchurl, libX11, xorgproto, libXpm, libXt }:
+
+stdenv.mkDerivation rec {
+  pname = "xsokoban";
+  version = "3.3c";
+
+  src = fetchurl {
+    url = "https://www.cs.cornell.edu/andru/release/${pname}-${version}.tar.gz";
+    sha256 = "006lp8y22b9pi81x1a9ldfgkl1fbmkdzfw0lqw5y9svmisbafbr9";
+  };
+
+  buildInputs = [ libX11 xorgproto libXpm libXt ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${libXpm.dev}/include/X11";
+
+  hardeningDisable = [ "format" ];
+
+  prePatch = ''
+    substituteInPlace Makefile.in --replace 4755 0755
+  '';
+
+  preConfigure = ''
+    sed -e 's/getline/my_getline/' -i score.c
+
+    chmod a+rw config.h
+    cat >>config.h <<EOF
+    #define HERE "@nixos-packaged"
+    #define WWW 0
+    #define OWNER "$(whoami)"
+    #define ROOTDIR "$out/lib/xsokoban"
+    #define ANYLEVEL 1
+    #define SCOREFILE ".xsokoban-score"
+    #define LOCKFILE ".xsokoban-score-lock"
+    EOF
+
+    sed -i main.c \
+      -e 's/getpass[(][^)]*[)]/PASSWORD/' \
+      -e '/if [(]owner[)]/iowner=1;'
+  '';
+
+  preBuild = ''
+    sed -i Makefile \
+      -e "s@/usr/local/@$out/@" \
+      -e "s@ /bin/@ @"
+    mkdir -p $out/bin $out/share $out/man/man1 $out/lib
+  '';
+
+  meta = with lib; {
+    description = "X sokoban";
+    license = licenses.publicDomain;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/xtris/default.nix b/nixpkgs/pkgs/games/xtris/default.nix
new file mode 100644
index 000000000000..2263a46187e9
--- /dev/null
+++ b/nixpkgs/pkgs/games/xtris/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchzip, xorg }:
+stdenv.mkDerivation rec {
+  pname = "xtris";
+  version = "1.15";
+
+  src = fetchzip {
+    url = "https://web.archive.org/web/20120315061213/http://www.iagora.com/~espel/xtris/xtris-${version}.tar.gz";
+    sha256 = "1vqva99lyv7r6f9c7yikk8ahcfh9aq3clvwm4pz964wlbr9mj1v6";
+  };
+
+  patchPhase = ''
+    sed -i '
+      s:/usr/local/bin:'$out'/bin:
+      s:/usr/local/man:'$out'/share/man:
+      s:mkdir:mkdir -p:g
+      s:^CFLAGS:#CFLAGS:
+    ' Makefile
+  '';
+  buildInputs = [ xorg.libX11 ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = with lib; {
+    description = "A multi-player version of the classical game of Tetris, for the X Window system";
+    homepage = "https://web.archive.org/web/20120315061213/http://www.iagora.com/~espel/xtris/xtris.html";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/zaz/default.nix b/nixpkgs/pkgs/games/zaz/default.nix
new file mode 100644
index 000000000000..84db2a1356c6
--- /dev/null
+++ b/nixpkgs/pkgs/games/zaz/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, SDL
+, SDL_image
+, mesa
+, libtheora
+, libvorbis
+, libogg
+, ftgl
+, freetype
+}:
+
+stdenv.mkDerivation rec {
+  pname = "zaz";
+  version = "1.0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1r3bmwny05zzmdalxm5ah2rray0nnsg1w00r30p47q6x2lpwj8ml";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [
+    (lib.getDev SDL)
+    SDL_image
+    mesa
+    libtheora
+    libvorbis.dev
+    libogg
+    ftgl
+    freetype
+  ];
+
+  # Fix SDL include problems
+  env.NIX_CFLAGS_COMPILE = "-I${lib.getDev SDL}/include/SDL -I${SDL_image}/include/SDL";
+  # Fix linking errors
+  makeFlags = [
+    "ZAZ_LIBS+=-lSDL"
+    "ZAZ_LIBS+=-lvorbis"
+    "ZAZ_LIBS+=-ltheora"
+    "ZAZ_LIBS+=-logg"
+    "ZAZ_LIBS+=-ltheoraenc"
+    "ZAZ_LIBS+=-ltheoradec"
+    "ZAZ_LIBS+=-lvorbisfile"
+  ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A puzzle game about arranging balls in triplets, like Luxor, Zuma, or Puzzle Bobble";
+    homepage = "https://zaz.sourceforge.net/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/games/zod/0002-add-scaling-factor-to-source.patch b/nixpkgs/pkgs/games/zod/0002-add-scaling-factor-to-source.patch
new file mode 100644
index 000000000000..bdcaddaabbb1
--- /dev/null
+++ b/nixpkgs/pkgs/games/zod/0002-add-scaling-factor-to-source.patch
@@ -0,0 +1,161 @@
+Date: Mon, 17 May 2021 18:28:54 +0200
+Subject: [PATCH 2/2] add scaling factor to source
+
+---
+ zod_launcher_src/zod_launcherFrm.cpp | 84 ++++++++++++++--------------
+ 1 file changed, 42 insertions(+), 42 deletions(-)
+
+diff --git a/zod_launcher_src/zod_launcherFrm.cpp b/zod_launcher_src/zod_launcherFrm.cpp
+index 54bb9aa..de268f2 100644
+--- a/zod_launcher_src/zod_launcherFrm.cpp
++++ b/zod_launcher_src/zod_launcherFrm.cpp
+@@ -83,15 +83,15 @@ void zod_launcherFrm::CreateGUIControls()
+ 	//Add the custom code before or after the blocks

+ 	////GUI Items Creation Start

+ 

+-	WxButton4 = new wxButton(this, ID_WXBUTTON4, wxT("Previous Settings"), wxPoint(280, 16), wxSize(249, 25), 0, wxDefaultValidator, wxT("WxButton4"));

++	WxButton4 = new wxButton(this, ID_WXBUTTON4, wxT("Previous Settings"), wxPoint(@scalingFactor@*280,@scalingFactor@*16), wxSize(@scalingFactor@*249,@scalingFactor@*25), 0, wxDefaultValidator, wxT("WxButton4"));

+ 

+-	WxStaticText11 = new wxStaticText(this, ID_WXSTATICTEXT11, wxT("Login Password::"), wxPoint(280, 120), wxDefaultSize, 0, wxT("WxStaticText11"));

++	WxStaticText11 = new wxStaticText(this, ID_WXSTATICTEXT11, wxT("Login Password::"), wxPoint(@scalingFactor@*280,@scalingFactor@*120), wxDefaultSize, 0, wxT("WxStaticText11"));

+ 

+-	WxStaticText10 = new wxStaticText(this, ID_WXSTATICTEXT10, wxT("Login Name::"), wxPoint(280, 96), wxDefaultSize, 0, wxT("WxStaticText10"));

++	WxStaticText10 = new wxStaticText(this, ID_WXSTATICTEXT10, wxT("Login Name::"), wxPoint(@scalingFactor@*280,@scalingFactor@*96), wxDefaultSize, 0, wxT("WxStaticText10"));

+ 

+-	WxEdit9 = new wxTextCtrl(this, ID_WXEDIT9, wxT(""), wxPoint(384, 120), wxSize(145, 17), 0, wxDefaultValidator, wxT("WxEdit9"));

++	WxEdit9 = new wxTextCtrl(this, ID_WXEDIT9, wxT(""), wxPoint(@scalingFactor@*384,@scalingFactor@*120), wxSize(@scalingFactor@*145,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxEdit9"));

+ 

+-	WxEdit8 = new wxTextCtrl(this, ID_WXEDIT8, wxT(""), wxPoint(384, 96), wxSize(145, 17), 0, wxDefaultValidator, wxT("WxEdit8"));

++	WxEdit8 = new wxTextCtrl(this, ID_WXEDIT8, wxT(""), wxPoint(@scalingFactor@*384,@scalingFactor@*96), wxSize(@scalingFactor@*145,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxEdit8"));

+ 

+ 	WxMenuBar1 = new wxMenuBar();

+ 	wxMenu *ID_MNU_FILE_1001_Mnu_Obj = new wxMenu(0);

+@@ -103,45 +103,45 @@ void zod_launcherFrm::CreateGUIControls()
+ 	WxMenuBar1->Append(ID_MNU_ABOUT_1003_Mnu_Obj, wxT("About"));

+ 	SetMenuBar(WxMenuBar1);

+ 

+-	WxCheckBox11 = new wxCheckBox(this, ID_WXCHECKBOX11, wxT("yellow"), wxPoint(152, 208), wxSize(49, 17), 0, wxDefaultValidator, wxT("WxCheckBox11"));

++	WxCheckBox11 = new wxCheckBox(this, ID_WXCHECKBOX11, wxT("yellow"), wxPoint(@scalingFactor@*152,@scalingFactor@*208), wxSize(@scalingFactor@*49,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox11"));

+ 

+-	WxCheckBox10 = new wxCheckBox(this, ID_WXCHECKBOX10, wxT("green"), wxPoint(104, 208), wxSize(49, 17), 0, wxDefaultValidator, wxT("WxCheckBox10"));

++	WxCheckBox10 = new wxCheckBox(this, ID_WXCHECKBOX10, wxT("green"), wxPoint(@scalingFactor@*104,@scalingFactor@*208), wxSize(@scalingFactor@*49,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox10"));

+ 

+-	WxCheckBox9 = new wxCheckBox(this, ID_WXCHECKBOX9, wxT("blue"), wxPoint(56, 208), wxSize(41, 17), 0, wxDefaultValidator, wxT("WxCheckBox9"));

++	WxCheckBox9 = new wxCheckBox(this, ID_WXCHECKBOX9, wxT("blue"), wxPoint(@scalingFactor@*56,@scalingFactor@*208), wxSize(@scalingFactor@*41,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox9"));

+ 

+-	WxCheckBox8 = new wxCheckBox(this, ID_WXCHECKBOX8, wxT("red"), wxPoint(8, 208), wxSize(41, 17), 0, wxDefaultValidator, wxT("WxCheckBox8"));

++	WxCheckBox8 = new wxCheckBox(this, ID_WXCHECKBOX8, wxT("red"), wxPoint(@scalingFactor@*8,@scalingFactor@*208), wxSize(@scalingFactor@*41,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox8"));

+ 

+-	WxStaticBox5 = new wxStaticBox(this, ID_WXSTATICBOX5, wxT("AI Players"), wxPoint(0, 192), wxSize(265, 49));

++	WxStaticBox5 = new wxStaticBox(this, ID_WXSTATICBOX5, wxT("AI Players"), wxPoint(@scalingFactor@*0,@scalingFactor@*192), wxSize(@scalingFactor@*265,@scalingFactor@*49));

+ 

+-	WxCheckBox7 = new wxCheckBox(this, ID_WXCHECKBOX7, wxT("No Music"), wxPoint(376, 192), wxSize(65, 17), 0, wxDefaultValidator, wxT("WxCheckBox7"));

++	WxCheckBox7 = new wxCheckBox(this, ID_WXCHECKBOX7, wxT("No Music"), wxPoint(@scalingFactor@*376,@scalingFactor@*192), wxSize(@scalingFactor@*65,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox7"));

+ 

+-	WxCheckBox6 = new wxCheckBox(this, ID_WXCHECKBOX6, wxT("No OpenGL"), wxPoint(280, 208), wxSize(81, 17), 0, wxDefaultValidator, wxT("WxCheckBox6"));

++	WxCheckBox6 = new wxCheckBox(this, ID_WXCHECKBOX6, wxT("No OpenGL"), wxPoint(@scalingFactor@*280,@scalingFactor@*208), wxSize(@scalingFactor@*81,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox6"));

+ 

+-	WxEdit7 = new wxTextCtrl(this, ID_WXEDIT7, wxT(""), wxPoint(112, 160), wxSize(145, 17), 0, wxDefaultValidator, wxT("WxEdit7"));

++	WxEdit7 = new wxTextCtrl(this, ID_WXEDIT7, wxT(""), wxPoint(@scalingFactor@*112,@scalingFactor@*160), wxSize(@scalingFactor@*145,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxEdit7"));

+ 

+-	WxStaticText9 = new wxStaticText(this, ID_WXSTATICTEXT9, wxT("Settings Filename::"), wxPoint(8, 160), wxDefaultSize, 0, wxT("WxStaticText9"));

++	WxStaticText9 = new wxStaticText(this, ID_WXSTATICTEXT9, wxT("Settings Filename::"), wxPoint(@scalingFactor@*8,@scalingFactor@*160), wxDefaultSize, 0, wxT("WxStaticText9"));

+ 

+-	WxButton3 = new wxButton(this, ID_WXBUTTON3, wxT("Launch Zod Engine"), wxPoint(208, 304), wxSize(121, 17), 0, wxDefaultValidator, wxT("WxButton3"));

++	WxButton3 = new wxButton(this, ID_WXBUTTON3, wxT("Launch Zod Engine"), wxPoint(@scalingFactor@*208,@scalingFactor@*304), wxSize(@scalingFactor@*121,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxButton3"));

+ 

+-	WxStaticText8 = new wxStaticText(this, ID_WXSTATICTEXT8, wxT("--- Command Arguments ---"), wxPoint(8, 264), wxSize(520, 17), wxALIGN_CENTRE | wxST_NO_AUTORESIZE, wxT("WxStaticText8"));

++	WxStaticText8 = new wxStaticText(this, ID_WXSTATICTEXT8, wxT("--- Command Arguments ---"), wxPoint(@scalingFactor@*8,@scalingFactor@*264), wxSize(@scalingFactor@*520,@scalingFactor@*17), wxALIGN_CENTRE | wxST_NO_AUTORESIZE, wxT("WxStaticText8"));

+ 

+-	WxEdit6 = new wxTextCtrl(this, ID_WXEDIT6, wxT(""), wxPoint(8, 280), wxSize(521, 17), 0, wxDefaultValidator, wxT("WxEdit6"));

++	WxEdit6 = new wxTextCtrl(this, ID_WXEDIT6, wxT(""), wxPoint(@scalingFactor@*8,@scalingFactor@*280), wxSize(@scalingFactor@*521,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxEdit6"));

+ 

+-	WxStaticBox4 = new wxStaticBox(this, ID_WXSTATICBOX4, wxT("Launch Game"), wxPoint(0, 248), wxSize(537, 81));

++	WxStaticBox4 = new wxStaticBox(this, ID_WXSTATICBOX4, wxT("Launch Game"), wxPoint(@scalingFactor@*0,@scalingFactor@*248), wxSize(@scalingFactor@*537,@scalingFactor@*81));

+ 

+-	WxCheckBox5 = new wxCheckBox(this, ID_WXCHECKBOX5, wxT("Bland Cursor"), wxPoint(448, 208), wxSize(81, 17), 0, wxDefaultValidator, wxT("WxCheckBox5"));

++	WxCheckBox5 = new wxCheckBox(this, ID_WXCHECKBOX5, wxT("Bland Cursor"), wxPoint(@scalingFactor@*448,@scalingFactor@*208), wxSize(@scalingFactor@*81,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox5"));

+ 

+-	WxCheckBox4 = new wxCheckBox(this, ID_WXCHECKBOX4, wxT("No Sound"), wxPoint(448, 192), wxSize(73, 17), 0, wxDefaultValidator, wxT("WxCheckBox4"));

++	WxCheckBox4 = new wxCheckBox(this, ID_WXCHECKBOX4, wxT("No Sound"), wxPoint(@scalingFactor@*448,@scalingFactor@*192), wxSize(@scalingFactor@*73,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox4"));

+ 

+-	WxCheckBox3 = new wxCheckBox(this, ID_WXCHECKBOX3, wxT("Is Windowed"), wxPoint(280, 192), wxSize(89, 17), 0, wxDefaultValidator, wxT("WxCheckBox3"));

++	WxCheckBox3 = new wxCheckBox(this, ID_WXCHECKBOX3, wxT("Is Windowed"), wxPoint(@scalingFactor@*280,@scalingFactor@*192), wxSize(@scalingFactor@*89,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox3"));

+ 

+-	WxStaticText7 = new wxStaticText(this, ID_WXSTATICTEXT7, wxT("x"), wxPoint(448, 168), wxSize(18, 17), wxALIGN_CENTRE | wxST_NO_AUTORESIZE, wxT("WxStaticText7"));

++	WxStaticText7 = new wxStaticText(this, ID_WXSTATICTEXT7, wxT("x"), wxPoint(@scalingFactor@*448,@scalingFactor@*168), wxSize(@scalingFactor@*18,@scalingFactor@*17), wxALIGN_CENTRE | wxST_NO_AUTORESIZE, wxT("WxStaticText7"));

+ 

+-	WxEdit5 = new wxTextCtrl(this, ID_WXEDIT5, wxT("484"), wxPoint(472, 168), wxSize(57, 17), 0, wxDefaultValidator, wxT("WxEdit5"));

++	WxEdit5 = new wxTextCtrl(this, ID_WXEDIT5, wxT("484"), wxPoint(@scalingFactor@*472,@scalingFactor@*168), wxSize(@scalingFactor@*57,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxEdit5"));

+ 

+-	WxEdit4 = new wxTextCtrl(this, ID_WXEDIT4, wxT("800"), wxPoint(384, 168), wxSize(57, 17), 0, wxDefaultValidator, wxT("WxEdit4"));

++	WxEdit4 = new wxTextCtrl(this, ID_WXEDIT4, wxT("800"), wxPoint(@scalingFactor@*384,@scalingFactor@*168), wxSize(@scalingFactor@*57,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxEdit4"));

+ 

+-	WxStaticText6 = new wxStaticText(this, ID_WXSTATICTEXT6, wxT("Resolution::"), wxPoint(280, 168), wxDefaultSize, 0, wxT("WxStaticText6"));

++	WxStaticText6 = new wxStaticText(this, ID_WXSTATICTEXT6, wxT("Resolution::"), wxPoint(@scalingFactor@*280,@scalingFactor@*168), wxDefaultSize, 0, wxT("WxStaticText6"));

+ 

+ 	wxArrayString arrayStringFor_WxChoice1;

+ 	arrayStringFor_WxChoice1.Add(wxT("null"));

+@@ -149,42 +149,42 @@ void zod_launcherFrm::CreateGUIControls()
+ 	arrayStringFor_WxChoice1.Add(wxT("blue"));

+ 	arrayStringFor_WxChoice1.Add(wxT("green"));

+ 	arrayStringFor_WxChoice1.Add(wxT("yellow"));

+-	WxChoice1 = new wxChoice(this, ID_WXCHOICE1, wxPoint(384, 144), wxSize(145, 21), arrayStringFor_WxChoice1, 0, wxDefaultValidator, wxT("WxChoice1"));

++	WxChoice1 = new wxChoice(this, ID_WXCHOICE1, wxPoint(@scalingFactor@*384,@scalingFactor@*144), wxSize(@scalingFactor@*145,@scalingFactor@*21), arrayStringFor_WxChoice1, 0, wxDefaultValidator, wxT("WxChoice1"));

+ 	WxChoice1->SetSelection(1);

+ 

+-	WxStaticText5 = new wxStaticText(this, ID_WXSTATICTEXT5, wxT("Player Team::"), wxPoint(280, 144), wxDefaultSize, 0, wxT("WxStaticText5"));

++	WxStaticText5 = new wxStaticText(this, ID_WXSTATICTEXT5, wxT("Player Team::"), wxPoint(@scalingFactor@*280,@scalingFactor@*144), wxDefaultSize, 0, wxT("WxStaticText5"));

+ 

+-	WxEdit3 = new wxTextCtrl(this, ID_WXEDIT3, wxT(""), wxPoint(384, 72), wxSize(145, 17), 0, wxDefaultValidator, wxT("WxEdit3"));

++	WxEdit3 = new wxTextCtrl(this, ID_WXEDIT3, wxT(""), wxPoint(@scalingFactor@*384,@scalingFactor@*72), wxSize(@scalingFactor@*145,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxEdit3"));

+ 

+-	WxStaticText4 = new wxStaticText(this, ID_WXSTATICTEXT4, wxT("Player Name::"), wxPoint(280, 72), wxDefaultSize, 0, wxT("WxStaticText4"));

++	WxStaticText4 = new wxStaticText(this, ID_WXSTATICTEXT4, wxT("Player Name::"), wxPoint(@scalingFactor@*280,@scalingFactor@*72), wxDefaultSize, 0, wxT("WxStaticText4"));

+ 

+-	WxStaticBox3 = new wxStaticBox(this, ID_WXSTATICBOX3, wxT("Engine Settings"), wxPoint(272, 56), wxSize(265, 185));

++	WxStaticBox3 = new wxStaticBox(this, ID_WXSTATICBOX3, wxT("Engine Settings"), wxPoint(@scalingFactor@*272,@scalingFactor@*56), wxSize(@scalingFactor@*265,@scalingFactor@*185));

+ 

+-	WxEdit2 = new wxTextCtrl(this, ID_WXEDIT2, wxT(""), wxPoint(112, 136), wxSize(145, 17), 0, wxDefaultValidator, wxT("WxEdit2"));

++	WxEdit2 = new wxTextCtrl(this, ID_WXEDIT2, wxT(""), wxPoint(@scalingFactor@*112,@scalingFactor@*136), wxSize(@scalingFactor@*145,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxEdit2"));

+ 

+-	WxStaticText3 = new wxStaticText(this, ID_WXSTATICTEXT3, wxT("Map Filename::"), wxPoint(8, 136), wxDefaultSize, 0, wxT("WxStaticText3"));

++	WxStaticText3 = new wxStaticText(this, ID_WXSTATICTEXT3, wxT("Map Filename::"), wxPoint(@scalingFactor@*8,@scalingFactor@*136), wxDefaultSize, 0, wxT("WxStaticText3"));

+ 

+-	WxCheckBox2 = new wxCheckBox(this, ID_WXCHECKBOX2, wxT("Filename is a Maplist"), wxPoint(96, 112), wxSize(121, 17), 0, wxDefaultValidator, wxT("WxCheckBox2"));

++	WxCheckBox2 = new wxCheckBox(this, ID_WXCHECKBOX2, wxT("Filename is a Maplist"), wxPoint(@scalingFactor@*96,@scalingFactor@*112), wxSize(@scalingFactor@*121,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox2"));

+ 

+-	WxCheckBox1 = new wxCheckBox(this, ID_WXCHECKBOX1, wxT("Is Dedicated"), wxPoint(8, 112), wxSize(89, 17), 0, wxDefaultValidator, wxT("WxCheckBox1"));

++	WxCheckBox1 = new wxCheckBox(this, ID_WXCHECKBOX1, wxT("Is Dedicated"), wxPoint(@scalingFactor@*8,@scalingFactor@*112), wxSize(@scalingFactor@*89,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxCheckBox1"));

+ 

+-	WxStaticText2 = new wxStaticText(this, ID_WXSTATICTEXT2, wxT("----- OR -----"), wxPoint(8, 96), wxSize(249, 17), wxALIGN_CENTRE | wxST_NO_AUTORESIZE, wxT("WxStaticText2"));

++	WxStaticText2 = new wxStaticText(this, ID_WXSTATICTEXT2, wxT("----- OR -----"), wxPoint(@scalingFactor@*8,@scalingFactor@*96), wxSize(@scalingFactor@*249,@scalingFactor@*17), wxALIGN_CENTRE | wxST_NO_AUTORESIZE, wxT("WxStaticText2"));

+ 

+-	WxStaticText1 = new wxStaticText(this, ID_WXSTATICTEXT1, wxT("Connect Address::"), wxPoint(8, 72), wxDefaultSize, 0, wxT("WxStaticText1"));

++	WxStaticText1 = new wxStaticText(this, ID_WXSTATICTEXT1, wxT("Connect Address::"), wxPoint(@scalingFactor@*8,@scalingFactor@*72), wxDefaultSize, 0, wxT("WxStaticText1"));

+ 

+-	WxEdit1 = new wxTextCtrl(this, ID_WXEDIT1, wxT(""), wxPoint(112, 72), wxSize(145, 17), 0, wxDefaultValidator, wxT("WxEdit1"));

++	WxEdit1 = new wxTextCtrl(this, ID_WXEDIT1, wxT(""), wxPoint(@scalingFactor@*112,@scalingFactor@*72), wxSize(@scalingFactor@*145,@scalingFactor@*17), 0, wxDefaultValidator, wxT("WxEdit1"));

+ 

+-	WxButton2 = new wxButton(this, ID_WXBUTTON2, wxT("Nighsoft Server"), wxPoint(136, 16), wxSize(121, 25), 0, wxDefaultValidator, wxT("WxButton2"));

++	WxButton2 = new wxButton(this, ID_WXBUTTON2, wxT("Nighsoft Server"), wxPoint(@scalingFactor@*136,@scalingFactor@*16), wxSize(@scalingFactor@*121,@scalingFactor@*25), 0, wxDefaultValidator, wxT("WxButton2"));

+ 

+-	WxButton1 = new wxButton(this, ID_WXBUTTON1, wxT("Local Game"), wxPoint(8, 16), wxSize(121, 25), 0, wxDefaultValidator, wxT("WxButton1"));

++	WxButton1 = new wxButton(this, ID_WXBUTTON1, wxT("Local Game"), wxPoint(@scalingFactor@*8,@scalingFactor@*16), wxSize(@scalingFactor@*121,@scalingFactor@*25), 0, wxDefaultValidator, wxT("WxButton1"));

+ 

+-	WxStaticBox2 = new wxStaticBox(this, ID_WXSTATICBOX2, wxT("Connection Settings"), wxPoint(0, 56), wxSize(265, 129));

++	WxStaticBox2 = new wxStaticBox(this, ID_WXSTATICBOX2, wxT("Connection Settings"), wxPoint(@scalingFactor@*0,@scalingFactor@*56), wxSize(@scalingFactor@*265,@scalingFactor@*129));

+ 

+-	WxStaticBox1 = new wxStaticBox(this, ID_WXSTATICBOX1, wxT("Preset Settings"), wxPoint(0, 0), wxSize(537, 49));

++	WxStaticBox1 = new wxStaticBox(this, ID_WXSTATICBOX1, wxT("Preset Settings"), wxPoint(@scalingFactor@*0,@scalingFactor@*0), wxSize(@scalingFactor@*537,@scalingFactor@*49));

+ 

+ 	SetTitle(wxT("The Zod Launcher"));

+ 	SetIcon(wxNullIcon);

+-	SetSize(8,8,545,376);

++	SetSize(8,8,@scalingFactor@*545,@scalingFactor@*376);

+ 	Center();

+ 	

+ 	////GUI Items Creation End

+-- 
+2.29.3
+
diff --git a/nixpkgs/pkgs/games/zod/default.nix b/nixpkgs/pkgs/games/zod/default.nix
new file mode 100644
index 000000000000..e0c2031dde25
--- /dev/null
+++ b/nixpkgs/pkgs/games/zod/default.nix
@@ -0,0 +1,115 @@
+{ lib
+, config
+, fetchzip
+, stdenv
+, SDL
+, SDL_image
+, SDL_ttf
+, SDL_mixer
+, libmysqlclient
+, wxGTK32
+, symlinkJoin
+, runCommandLocal
+, makeWrapper
+, coreutils
+, scalingFactor ? 2 # this is to resize the fixed-size zod_launcher window
+, substituteAll
+}:
+let
+  name = "zod-engine";
+  version = "2011-09-06";
+  src = fetchzip {
+    url = "mirror://sourceforge/zod/linux_releases/zod_linux-${version}.tar.gz";
+    sha256 = "017v96aflrv07g8j8zk9mq8f8rqxl5228rjff5blq8dxpsv1sx7h";
+  };
+  postPatch = ''
+    sed '1i#include <ctime>' -i zod_src/common.cpp # gcc12
+  '';
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+  buildInputs = [
+    SDL
+    SDL_image
+    SDL_ttf
+    SDL_mixer
+    libmysqlclient
+    wxGTK32
+    coreutils
+  ];
+  hardeningDisable = [ "format" ];
+  NIX_LDFLAGS = "-L${libmysqlclient}/lib/mysql";
+  zod_engine = stdenv.mkDerivation {
+    inherit version src postPatch nativeBuildInputs buildInputs hardeningDisable NIX_LDFLAGS;
+    pname = "${name}-engine";
+    enableParallelBuilding = true;
+    preBuild = "cd zod_src";
+    installPhase = ''
+      mkdir -p $out/bin
+      install -m755 zod $out/bin/
+      wrapProgram $out/bin/zod --chdir "${zod_assets}/usr/lib/commander-zod"
+    '';
+  };
+  zod_map_editor = stdenv.mkDerivation {
+    inherit version src postPatch nativeBuildInputs buildInputs hardeningDisable NIX_LDFLAGS;
+    pname = "${name}-map_editor";
+    enableParallelBuilding = true;
+    preBuild = "cd zod_src";
+    makeFlags = [ "map_editor" ];
+    installPhase = ''
+      mkdir -p $out/bin
+      install -m755 zod_map_editor $out/bin
+      wrapProgram $out/bin/zod_map_editor --chdir "${zod_assets}/usr/lib/commander-zod"
+    '';
+  };
+  zod_launcher = stdenv.mkDerivation {
+      inherit version src nativeBuildInputs buildInputs zod_engine zod_map_editor;
+      pname = "${name}-launcher";
+      # This is necessary because the zod_launcher has terrible fixed-width window
+      # the Idea is to apply the scalingFactor to all positions and sizes and I tested 1,2,3 and 4
+      # 2,3,4 look acceptable on my 4k monitor and 1 is unreadable.
+      # also the ./ in the run command is removed to have easier time starting the game
+      patches = [
+        (substituteAll {
+          inherit scalingFactor;
+          src=./0002-add-scaling-factor-to-source.patch;
+        })
+      ];
+      postPatch = ''
+        substituteInPlace zod_launcher_src/zod_launcherFrm.cpp \
+          --replace 'message = wxT("./zod");' 'message = wxT("zod");' \
+          --replace "check.replace(i,1,1,'_');" "check.replace(i,1,1,(wxUniChar)'_');"
+      '';
+      preBuild = "cd zod_launcher_src";
+      installPhase = ''
+        mkdir -p $out/bin
+        install -m755 zod_launcher $out/bin
+      '';
+  };
+  zod_assets = runCommandLocal "${name}-assets" {} ''
+    mkdir -p $out/usr/lib/commander-zod{,blank_maps}
+    cp -r ${src}/assets $out/usr/lib/commander-zod/assets
+    for i in ${src}/*.map ${src}/*.txt; do
+      install -m644 $i $out/usr/lib/commander-zod
+    done
+    for map in ${src}/blank_maps/*; do
+      install -m644 $map $out/usr/lib/commander-zod/blank_maps
+    done
+  '';
+in
+  symlinkJoin {
+    inherit name;
+    paths = [
+      zod_engine
+      zod_launcher
+      zod_map_editor
+      zod_assets
+    ];
+    meta = with lib; {
+      description = "Multiplayer remake of ZED";
+      homepage = "http://zod.sourceforge.net/";
+      maintainers = with maintainers; [ zeri ];
+      license = licenses.gpl3Plus; /* Says the website */
+      platforms = platforms.linux;
+    };
+  }
diff --git a/nixpkgs/pkgs/games/zoom/default.nix b/nixpkgs/pkgs/games/zoom/default.nix
new file mode 100644
index 000000000000..8524ea601b47
--- /dev/null
+++ b/nixpkgs/pkgs/games/zoom/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchurl
+, perl
+, expat
+, fontconfig
+, freetype
+, xorg
+}:
+
+# !!! assert freetype == xorg.freetype
+
+stdenv.mkDerivation rec {
+  pname = "zoom";
+  version = "1.1.5";
+
+  src = fetchurl {
+    url = "https://www.logicalshift.co.uk/unix/zoom/zoom-${version}.tar.gz";
+    hash = "sha256-8pZ/HAVV341K6QRDUC0UzzO2rGW2AvSZ++Pp445V27w=";
+  };
+
+  buildInputs = [
+    perl
+    expat
+    fontconfig
+    freetype
+    xorg.libICE
+    xorg.libSM
+    xorg.libX11
+    xorg.libXext
+    xorg.libXrender
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${freetype}/include/freetype2 -fgnu89-inline";
+
+  meta = with lib; {
+    homepage = "https://www.logicalshift.co.uk/unix/zoom/";
+    description = "Player for Z-Code, TADS and HUGO stories or games";
+    longDescription = ''
+      Zoom is a player for Z-Code, TADS and HUGO stories or games. These are
+      usually text adventures ('interactive fiction'), and were first created
+      by Infocom with the Zork series of games. Throughout the 80's, Infocom
+      released many interactive fiction stories before their ambitions to enter
+      the database market finally brought them low.
+    '';
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}