{ src, withRuNethackMemes ? false, coreutils, darwin, fetchzip, stdenv, ncurses, groff, lib, gzip, gnugrep, bash, pkg-config, pkgs, # pkgs ? import {} }: stdenv.mkDerivation (finalAttrs: { pname = "nethack"; version = "3.7-git"; src = pkgs.fetchFromGitHub { owner = "NetHack"; repo = "NetHack"; rev = "0f01260605c9393068e07a308840a9b6f8864aa9"; sha256 = "0d193ycd5yd1sgg64m6w7gqjm8vmfx8vsmrf6vi19idhj6zch72x"; }; luaVersion = "5.4.6"; luaTarballHash = "sha256-K2dM3q69YuOhlKKE9qTcHFJUVhjlRPxQtKB8ZQOpAyE="; luaSrc = fetchzip { name = "lua-src"; url = "https://www.lua.org/ftp/lua-${finalAttrs.luaVersion}.tar.gz"; hash = finalAttrs.luaTarballHash; }; platformHint = { "aarch64-darwin" = "macOS"; "x86_64-linux" = "linux"; } .${stdenv.hostPlatform.system} or (throw "Unsupported platform: ${stdenv.hostPlatform.system}"); #inherit src; prePatch = '' mkdir -p ./lib cp -r --no-preserve=mode ${finalAttrs.luaSrc} ./lib/lua-${finalAttrs.luaVersion} ''; buildInputs = [ ncurses ]; nativeBuildInputs = [ groff pkg-config ]; postPatch = '' sed \ -e '/^GIT_HASH/d' \ -e '/^GIT_BRANCH/d' \ -e '/^SHELLDIR/d' \ -e '/-DCOMPRESS/s:/bin/gzip:${lib.getExe' gzip "gzip"}:' \ -i sys/unix/hints/${finalAttrs.platformHint}.370 ${lib.optionalString stdenv.hostPlatform.isDarwin '' substituteInPlace sys/unix/hints/${finalAttrs.platformHint}.370 \ --replace-fail "/usr/bin/true" "${coreutils}/bin/true" \ --replace-fail "which" "${darwin.shell_cmds}/bin/which" ''} sed \ -e '/^GDBPATH=/d' \ -e '/^PANICTRACE_GDB=/s/1/0/' \ -e '/^GREPPATH=/s:=.*:=${lib.getExe gnugrep}:' \ -e '/^WIZARDS/s/=.*/=*/' \ -i sys/unix/sysconf ${lib.optionalString withRuNethackMemes '' sed \ -e 's/\bluckstone\b/laccstone/g' \ -e 's/\bhiss\b/zHz/g' \ -e 's/\bsouls\b/Russel Souls/g' \ -i $(find -type f) ''} ''; patches = [ ./unixconf.patch ]; configurePhase = '' sys/unix/setup.sh sys/unix/hints/${finalAttrs.platformHint}.370 ''; postInstall = '' mkdir $out/bin cat > $out/bin/nethack << EOF #! ${lib.getExe bash} if [ -z "\$HOME" ]; then echo "Home directory must be set to play NetHack" >&2 exit 1 fi export NETHACKVARDIR="\$HOME/.local/share/nethack" if [ -e "\$NETHACKVARDIR" ]; then if [ ! -d "\$NETHACKVARDIR" ]; then echo "\$NETHACKVARDIR must not be something that is not a directory" >&2 exit 1 fi else mkdir -p "\$NETHACKVARDIR" cp -r $out/lib/nethack/vardir/* "\$NETHACKVARDIR" chmod -R +w "\$NETHACKVARDIR"/* fi $out/lib/nethack/nethack \$@ EOF chmod +x $out/bin/nethack ''; enableParallelBuilding = true; NIX_CFLAGS_COMPILE = "-DUSE_DARKGRAY"; makeFlags = [ "GIT=0" "PREFIX=$(out)" "HACKDIR=$(out)/lib/nethack" "VARDIR=$(out)/lib/nethack/vardir" "WANT_WIN_TTY=1" "WANT_WIN_CURSES=1" ]; meta = { mainProgram = "nethack"; }; })