diff --git a/pkgs/by-name/ke/keen4/package.nix b/pkgs/by-name/ke/keen4/package.nix index 05a7ff5c3365..0a6f9813d016 100644 --- a/pkgs/by-name/ke/keen4/package.nix +++ b/pkgs/by-name/ke/keen4/package.nix @@ -1,56 +1,43 @@ { - lib, - stdenv, - fetchurl, dosbox, - unzip, + fetchzip, + lib, + writeShellApplication, }: -stdenv.mkDerivation { +let + zip = fetchzip { + name = "keen4.zip"; + url = "https://archive.org/download/msdos_Commander_Keen_4_-_Secret_of_the_Oracle_1991/Commander_Keen_4_-_Secret_of_the_Oracle_1991.zip"; + hash = "sha256-vVfBQArNH1JPUxM5suMe8NK54a+NAMnDhLKxVUOzUgA="; + }; +in +writeShellApplication { name = "keen4"; - src = fetchurl { - url = "http://tarballs.nixos.org/keen4.zip"; - sha256 = "12rnc9ksl7v6l8wsxvr26ylkafzq80dbsa7yafzw9pqc8pafkhx1"; - }; + runtimeInputs = [ dosbox ]; - nativeBuildInputs = [ unzip ]; + # 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. + text = '' + mkdir -p "''${HOME:-.}/.keen4" + cd "''${HOME:-.}/.keen4" + # avoid linking CONFIG.CK4, which must be writable + ln -sft . ${zip}/{AUDIO.CK4,EGAGRAPH.CK4,GAMEMAPS.CK4,KEEN4E.EXE} + trap 'find . -type l -delete' EXIT - installPhase = '' - mkdir -p $out/share/keen4 - mv * $out/share/keen4 - - mkdir -p $out/bin - cat > $out/bin/keen4 <