games
haunted-ps1-demo-disc-2020
haunted-ps1-demo-disc-2021
haunted-ps1-flipside-frights
haunted-ps1-spectral-mall
jazz2
lib
···
249
249
./keys/flake-module.nix
250
250
./retiolum/flake-module.nix
251
251
./skills/flake-module.nix
252
252
-
./games/flake-module.nix
253
252
254
253
./wrapperModules/pi/flake-module.nix
255
254
./wrapperModules/claude-code/flake-module.nix
···
1
1
-
{
2
2
-
lib,
3
3
-
...
4
4
-
}:
5
5
-
{
6
6
-
perSystem =
7
7
-
{ pkgs, ... }:
8
8
-
let
9
9
-
gameDirs = builtins.filter (name: name != "lib") (
10
10
-
builtins.attrNames (lib.filterAttrs (_: type: type == "directory") (builtins.readDir ./.))
11
11
-
);
12
12
-
13
13
-
buildGame =
14
14
-
name:
15
15
-
let
16
16
-
result = builtins.tryEval (pkgs.callPackage ./${name} { });
17
17
-
in
18
18
-
if result.success then result.value else null;
19
19
-
20
20
-
games = lib.filterAttrs (_: v: v != null) (lib.genAttrs gameDirs buildGame);
21
21
-
in
22
22
-
{
23
23
-
# Expose via legacyPackages so `nix run .#games.haunted-ps1-demo-disc-2021` works
24
24
-
legacyPackages.games = games;
25
25
-
};
26
26
-
}
···
1
1
-
{ callPackage }:
2
2
-
3
3
-
let
4
4
-
mkHauntedPs1 = callPackage ../lib/mk-haunted-ps1.nix { };
5
5
-
in
6
6
-
mkHauntedPs1 {
7
7
-
pname = "haunted-ps1-demo-disc-2020";
8
8
-
zipName = "demodisc2020-win.zip";
9
9
-
sha256 = "14d18l0kcbjim2rczg9lcmvgs46n6bs7pisfg33qnarwiv40v5f3";
10
10
-
exeName = "Haunted PS1 Demo Disc/Haunted PS1 Demo Disc.exe";
11
11
-
downloadUrl = "https://hauntedps1.itch.io/demodisc2020";
12
12
-
downloadName = "demodisc2020-win.zip (2.8 GB)";
13
13
-
desktopName = "Haunted PS1 Demo Disc 2020";
14
14
-
description = "A collection of PS1-style horror game demos from the Haunted PS1 community (2020 edition)";
15
15
-
}
···
1
1
-
{ callPackage }:
2
2
-
3
3
-
let
4
4
-
mkHauntedPs1 = callPackage ../lib/mk-haunted-ps1.nix { };
5
5
-
in
6
6
-
mkHauntedPs1 {
7
7
-
pname = "haunted-ps1-demo-disc-2021";
8
8
-
zipName = "demodisc2021-win.zip";
9
9
-
sha256 = "0392n5pgilpk0lgwr35w6jl6hq9h800y8lkpb729vjhw4c7ywsmm";
10
10
-
exeName = "HauntedDemoDisc2021.exe";
11
11
-
downloadUrl = "https://hauntedps1.itch.io/demodisc2021";
12
12
-
downloadName = "Demo Disc 2021 [Windows]";
13
13
-
desktopName = "Haunted PS1 Demo Disc 2021";
14
14
-
description = "A collection of 25 PS1-style horror game demos from the Haunted PS1 community";
15
15
-
}
···
1
1
-
{ callPackage }:
2
2
-
3
3
-
let
4
4
-
mkHauntedPs1 = callPackage ../lib/mk-haunted-ps1.nix { };
5
5
-
in
6
6
-
mkHauntedPs1 {
7
7
-
pname = "haunted-ps1-flipside-frights";
8
8
-
zipName = "demo-disc-flipside-frights-windows.zip";
9
9
-
sha256 = "0g14mjj309mf5sk9bcgkwnk9xr9zyw3zcbrv12kpwl65wjcw38v5";
10
10
-
exeName = "Demo Disc - Flipside Frights/DD04.exe";
11
11
-
downloadUrl = "https://hauntedps1.itch.io/demo-disc-flipside-frights";
12
12
-
downloadName = "demo-disc-flipside-frights-windows.zip (7.4 GB)";
13
13
-
desktopName = "Haunted PS1 Demo Disc: Flipside Frights";
14
14
-
description = "The latest Haunted PS1 demo disc featuring 24 horror game demos (2025)";
15
15
-
}
···
1
1
-
{ callPackage }:
2
2
-
3
3
-
let
4
4
-
mkHauntedPs1 = callPackage ../lib/mk-haunted-ps1.nix { };
5
5
-
in
6
6
-
mkHauntedPs1 {
7
7
-
pname = "haunted-ps1-spectral-mall";
8
8
-
zipName = "demodisc2022-win.zip";
9
9
-
sha256 = "09c41dc0014myrlkpcichv34f4yvayqwns2cm5k9g1q880dhsmfz";
10
10
-
exeName = "HPS1 Demo Disk Spectral Mall.exe";
11
11
-
downloadUrl = "https://hauntedps1.itch.io/demo-disc-spectral-mall";
12
12
-
downloadName = "The Haunted PS1 Demo Disc: Spectral Mall [Windows] (5.4 GB)";
13
13
-
desktopName = "Haunted PS1 Demo Disc: Spectral Mall";
14
14
-
description = "A PS1-style horror game demo disc set in a haunted mall";
15
15
-
}
···
1
1
-
{
2
2
-
fetchurl,
3
3
-
jazz2,
4
4
-
lib,
5
5
-
runCommandLocal,
6
6
-
stdenvNoCC,
7
7
-
unzip,
8
8
-
writeShellScript,
9
9
-
}:
10
10
-
11
11
-
let
12
12
-
jazz2-mp = jazz2.overrideAttrs (old: {
13
13
-
cmakeFlags = old.cmakeFlags ++ [
14
14
-
(lib.cmakeBool "WITH_MULTIPLAYER" true)
15
15
-
];
16
16
-
});
17
17
-
18
18
-
gameData = fetchurl {
19
19
-
url = "https://archive.org/download/jazz-jackrabbit-2-1.24-the-secret-files-plus/Jazz%20Jackrabbit%202%201.24%20The%20Secret%20Files%20Plus.zip";
20
20
-
hash = "sha256-ceeXiGUy5QDq1HQPo5gpyQe2odAK1F5frofBXegeXi8=";
21
21
-
name = "jazz-jackrabbit-2-tsf.zip";
22
22
-
};
23
23
-
24
24
-
sourceData =
25
25
-
runCommandLocal "jazz2-source-data"
26
26
-
{
27
27
-
nativeBuildInputs = [ unzip ];
28
28
-
}
29
29
-
''
30
30
-
mkdir -p "$out/Jazz² Resurrection/Source"
31
31
-
unzip -j -o ${gameData} -d "$out/Jazz² Resurrection/Source/"
32
32
-
'';
33
33
-
34
34
-
wrapper = writeShellScript "jazz2" ''
35
35
-
datadir="''${XDG_DATA_HOME:-$HOME/.local/share}/Jazz² Resurrection"
36
36
-
if [ ! -e "$datadir/Source/Anims.j2a" ]; then
37
37
-
mkdir -p "$datadir"
38
38
-
rm -rf "$datadir/Source"
39
39
-
ln -sfn "${sourceData}/Jazz² Resurrection/Source" "$datadir/Source"
40
40
-
fi
41
41
-
exec ${lib.getExe jazz2-mp} "$@"
42
42
-
'';
43
43
-
in
44
44
-
45
45
-
stdenvNoCC.mkDerivation {
46
46
-
pname = "jazz2-with-gamedata";
47
47
-
inherit (jazz2) version;
48
48
-
49
49
-
dontUnpack = true;
50
50
-
51
51
-
installPhase = ''
52
52
-
mkdir -p $out/bin
53
53
-
ln -s ${wrapper} $out/bin/jazz2
54
54
-
'';
55
55
-
56
56
-
meta = jazz2.meta // {
57
57
-
description = "Jazz Jackrabbit 2 (Jazz² Resurrection with game data and multiplayer)";
58
58
-
};
59
59
-
}
···
1
1
-
# Shared builder for Haunted PS1 demo disc games
2
2
-
{
3
3
-
lib,
4
4
-
stdenv,
5
5
-
requireFile,
6
6
-
unzip,
7
7
-
makeWrapper,
8
8
-
umu-launcher,
9
9
-
makeDesktopItem,
10
10
-
copyDesktopItems,
11
11
-
}:
12
12
-
13
13
-
{
14
14
-
pname,
15
15
-
version ? "1.0",
16
16
-
zipName,
17
17
-
sha256,
18
18
-
exeName,
19
19
-
downloadUrl,
20
20
-
downloadName,
21
21
-
desktopName,
22
22
-
description,
23
23
-
}:
24
24
-
25
25
-
let
26
26
-
src = requireFile {
27
27
-
name = zipName;
28
28
-
inherit sha256;
29
29
-
message = ''
30
30
-
To use this package, you need to download ${desktopName}.
31
31
-
32
32
-
1. Go to ${downloadUrl}
33
33
-
2. Create a free itch.io account or log in
34
34
-
3. Click the "Download" button for "${downloadName}"
35
35
-
4. Once downloaded, add it to the Nix store:
36
36
-
37
37
-
nix-store --add-fixed sha256 ~/Downloads/${zipName}
38
38
-
39
39
-
Then try building again.
40
40
-
'';
41
41
-
};
42
42
-
43
43
-
desktopItem = makeDesktopItem {
44
44
-
name = pname;
45
45
-
inherit desktopName;
46
46
-
comment = description;
47
47
-
exec = pname;
48
48
-
icon = pname;
49
49
-
categories = [ "Game" ];
50
50
-
};
51
51
-
52
52
-
in
53
53
-
stdenv.mkDerivation {
54
54
-
inherit pname version src;
55
55
-
56
56
-
nativeBuildInputs = [
57
57
-
unzip
58
58
-
makeWrapper
59
59
-
copyDesktopItems
60
60
-
];
61
61
-
62
62
-
desktopItems = [ desktopItem ];
63
63
-
64
64
-
dontBuild = true;
65
65
-
66
66
-
unpackPhase = ''
67
67
-
runHook preUnpack
68
68
-
unzip -q "$src"
69
69
-
runHook postUnpack
70
70
-
'';
71
71
-
72
72
-
installPhase = ''
73
73
-
runHook preInstall
74
74
-
75
75
-
# Install all game files
76
76
-
mkdir -p "$out/share/${pname}"
77
77
-
cp -r * "$out/share/${pname}/"
78
78
-
79
79
-
# Create wrapper script using umu-run (Proton launcher)
80
80
-
mkdir -p "$out/bin"
81
81
-
cat > "$out/bin/${pname}" <<WRAPPER
82
82
-
#!/bin/sh
83
83
-
export WINEPREFIX="\''${WINEPREFIX:-\$HOME/.local/share/${pname}/prefix}"
84
84
-
export GAMEID="${pname}"
85
85
-
export PROTONPATH="GE-Proton"
86
86
-
exec ${umu-launcher}/bin/umu-run "\$out/share/${pname}/${exeName}" "\$@"
87
87
-
WRAPPER
88
88
-
substituteInPlace "$out/bin/${pname}" --replace-fail '$out' "$out"
89
89
-
chmod +x "$out/bin/${pname}"
90
90
-
91
91
-
runHook postInstall
92
92
-
'';
93
93
-
94
94
-
meta = {
95
95
-
inherit description;
96
96
-
homepage = downloadUrl;
97
97
-
license = lib.licenses.unfree;
98
98
-
platforms = [ "x86_64-linux" ];
99
99
-
mainProgram = pname;
100
100
-
};
101
101
-
}