Files
TheaninovOS/overlays/cubyz-bin/default.nix
2025-11-14 13:51:17 +01:00

122 lines
3.2 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
callPackage,
makeWrapper,
libx11,
libxcursor,
libGL,
alsa-lib,
vulkan-loader,
vulkan-validation-layers,
vulkan-tools,
zig,
}:
let
# This is kinda atrocious, but it works
# Override default zig flags
zig_hook =
(zig.overrideAttrs {
version = "0.15.0";
src = fetchFromGitHub {
owner = "ziglang";
repo = "zig";
rev = "bd97b66186dabb3533df1ea9eb650d7574496a59";
hash = "sha256-EVIg01kQ3JCZxnnrk6qMJn3Gm3+BZzPs75x9Q+sxqBw=";
};
}).hook.overrideAttrs
{
zig_default_flags = "";
};
in
stdenv.mkDerivation (finalAttrs: {
version = "0.0.1";
pname = "cubyz";
src = fetchFromGitHub {
owner = "pixelguys";
repo = "cubyz";
tag = finalAttrs.version;
hash = "sha256-SbMRr4kktwagYUyVBKFZLOwgSmkPngV8NbwkJRk2Zvg=";
};
postPatch = ''
ln -s ${callPackage ./deps.nix { }} $ZIG_GLOBAL_CACHE_DIR/p
'';
preBuild = "
mkdir -p ../Cubyz-libs/zig-out
ln -s ${callPackage ./libs.nix { }}/* ../Cubyz-libs/zig-out/
";
nativeBuildInputs = [
zig_hook # Needed for building zig stuff
makeWrapper # Needed for env variables
];
buildInputs = [
libx11
libGL
vulkan-loader
vulkan-validation-layers
vulkan-tools
libxcursor
alsa-lib
];
zigBuildFlags = [
#"-j6" # Included in zig default flags
"-Dcpu=baseline" # Included in zig default flags
"-Drelease"
"-Dlocal" # Use local libraries
"-Doptimize=ReleaseSafe"
];
# Symlink the assets to $out, add a desktop entry
postBuild = ''
mkdir -p $out/assets/cubyz
ln -s ${callPackage ./assets.nix { }}/* $out/assets/cubyz/
ln -s $src/assets/cubyz/* $out/assets/cubyz/
printf "
[Desktop Entry]
Name=Cubyz
Exec=$out/bin/Cubyz
Icon=$out/assets/cubyz/logo.png
Type=Application
Categories=Game;
" > $out/cubyz.desktop
'';
# Change some env variables, move a bunch of stuff under .config for modding purposes, symlink a desktop entry
postInstall = ''
wrapProgram $out/bin/Cubyz \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath finalAttrs.buildInputs}" \
--prefix VK_LAYER_PATH : "${vulkan-validation-layers}/share/vulkan/explicit_layer.d" \
--run "
cd \$HOME/.config/cubyz
mkdir -p \$HOME/.config/cubyz/logs
mkdir -p \$HOME/.config/cubyz/assets
[ ! -d \$HOME/.config/cubyz/assets/cubyz ] && cp -pr $out/assets/cubyz \$HOME/.config/cubyz/assets/
[ ! -f \$HOME/.config/cubyz/launchConfig.zon ] && printf \".{
.cubyzDir = \\\"\$HOME/.config/cubyz\\\",
}\" > \$HOME/.config/cubyz/launchConfig.zon
[ ! -l \$HOME/.local/share/applications/cubyz.desktop ] && ln -sf $out/cubyz.desktop \$HOME/.local/share/applications/cubyz.desktop
"
'';
meta = {
homepage = "https://github.com/PixelGuys/Cubyz";
description = "Voxel sandbox game with a large render distance, procedurally generated content and some cool graphical effects";
changelog = "https://github.com/PixelGuys/Cubyz/releases/tag/${finalAttrs.version}";
license = lib.licenses.gpl3Only;
platforms = lib.platforms.linux;
mainProgram = "cubyz";
maintainers = with lib.maintainers; [ leha44581 ];
};
})