Merge pull request #319 from Merc6/refactor/rewrite-nix-flake
Some checks are pending
Publish Documentation / build (push) Waiting to run
Build (Linux, x86_64) / build-linux (push) Waiting to run
Build (Linux, x86_64) / build-linux-debug (push) Waiting to run
Clang Format / clang-format (push) Waiting to run

refactor: rewrite `flake.nix`
This commit is contained in:
Tropical 2026-03-27 13:20:35 -05:00 committed by GitHub
commit d2f127349b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 151 additions and 95 deletions

View file

@ -17,6 +17,24 @@
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"miniaudio": {
"flake": false,
"locked": {
@ -44,15 +62,15 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1774106199,
"narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=",
"owner": "nixos",
"lastModified": 1774386573,
"narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655",
"rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9",
"type": "github"
},
"original": {
"owner": "nixos",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
@ -61,6 +79,7 @@
"root": {
"inputs": {
"4jlibs": "4jlibs",
"flake-utils": "flake-utils",
"miniaudio": "miniaudio",
"miniaudio-patch": "miniaudio-patch",
"nixpkgs": "nixpkgs",
@ -118,6 +137,21 @@
"repo": "stb",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",

202
flake.nix
View file

@ -1,121 +1,143 @@
{
description = "4jcraft-nix package and dev shell";
description = "4jcraft nix-package and dev-shell";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
shiggy = {
url = "github:4jcraft/shiggy/main";
flake = false;
};
miniaudio = {
url = "https://github.com/mackron/miniaudio/archive/refs/tags/0.11.22.tar.gz";
flake = false;
};
miniaudio-patch = {
url = "https://wrapdb.mesonbuild.com/v2/miniaudio_0.11.22-2/get_patch";
url = "github:4jcraft/shiggy/main";
flake = false;
};
"4jlibs" = {
url = "github:4jcraft/4jlibs/main";
url = "github:4jcraft/4jlibs/main";
flake = false;
};
miniaudio = {
url = "https://github.com/mackron/miniaudio/archive/refs/tags/0.11.22.tar.gz";
flake = false;
};
miniaudio-patch = {
url = "https://wrapdb.mesonbuild.com/v2/miniaudio_0.11.22-2/get_patch";
flake = false;
};
stb = {
url = "github:nothings/stb/master";
url = "github:nothings/stb/master";
flake = false;
};
simdutf = {
url = "github:simdutf/simdutf";
url = "github:simdutf/simdutf";
flake = false;
};
};
outputs = { self, nixpkgs, ... } @ inputs:
let
allSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
forAllSystems = f: nixpkgs.lib.genAttrs allSystems (system: f {
pkgs = import nixpkgs { inherit system; };
});
in
{
packages = forAllSystems ({ pkgs }: {
default = pkgs.clangStdenv.mkDerivation {
pname = "4jcraft";
version = "0.1.0";
src = ./.;
outputs =
{
self,
nixpkgs,
flake-utils,
...
}@inputs:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs { inherit system; };
in
{
packages.default = pkgs.clangStdenv.mkDerivation {
pname = "4jcraft";
version = "0.1.0";
src = ./.;
dontUseCmakeConfigure = true;
dontUseCmakeConfigure = true;
preConfigure = ''
# shiggy
cp -r ${inputs.shiggy} subprojects/shiggy
# 4jcraft - Meson expects this subprojects structure
postUnpack = ''
mkdir -p source/subprojects
# miniaudio
cp -r ${inputs.miniaudio} subprojects/miniaudio
chmod -R u+w subprojects/miniaudio
unzip ${inputs."miniaudio-patch"} -d /tmp/miniaudio-patch/
cp -r /tmp/miniaudio-patch/*/. subprojects/miniaudio/
cat > subprojects/miniaudio.wrap <<'EOF'
[wrap-file]
directory = miniaudio
cp -r ${inputs.shiggy} source/subprojects/shiggy
cp -r ${inputs."4jlibs"} source/subprojects/4jlibs
cp -r ${inputs.stb} source/subprojects/stb
cp -r ${inputs.simdutf} source/subprojects/simdutf
cp -r ${inputs.miniaudio} source/subprojects/miniaudio
[provide]
dependency_names = miniaudio
EOF
chmod -R u+w source/subprojects
'';
# 4jlibs
cp -r ${inputs."4jlibs"} subprojects/4jlibs
# 4jcraft - `stb` and `simdutf` patches
postPatch = ''
cp subprojects/packagefiles/stb/meson.build subprojects/stb/meson.build
cp subprojects/packagefiles/simdutf/meson.build subprojects/simdutf/meson.build
cp subprojects/packagefiles/simdutf/meson.options subprojects/simdutf/meson.options
# stb
cp -r ${inputs.stb} subprojects/stb
chmod -R u+w subprojects/
cp subprojects/packagefiles/stb/meson.build subprojects/stb/meson.build
${pkgs.unzip} ${inputs.miniaudio-patch} -d miniaudio-patch-tmp
cp -r miniaudio-patch-tmp/*/. subprojects/miniaudio/
# simdutf
cp -r ${inputs.simdutf} subprojects/simdutf
chmod -R u+w subprojects/simdutf
cp subprojects/packagefiles/simdutf/meson.build subprojects/simdutf/meson.build
cp subprojects/packagefiles/simdutf/meson.options subprojects/simdutf/meson.options
'';
cat > subprojects/miniaudio.wrap <<EOF
[wrap-file]
directory = miniaudio
[provide]
dependency_names = miniaudio
EOF
'';
buildInputs = with pkgs; [
openssl.dev
libGL
libGLU
SDL2
zlib
];
nativeBuildInputs = with pkgs; [
lld
meson
ninja
pkg-config
python3
];
nativeBuildInputs = with pkgs; [
cmake
lld
meson
ninja
pkg-config
python3
makeWrapper
unzip
];
buildInputs = with pkgs; [
openssl.dev
libGL
libGLU
SDL2
zlib
];
installPhase = ''
mkdir -p $out/share/4jcraft
cp -r Minecraft.Client/. $out/share/4jcraft/
mkdir -p $out/bin
makeWrapper $out/share/4jcraft/Minecraft.Client \
$out/bin/4jcraft \
--run "cd $out/share/4jcraft"
'';
installPhase = ''
mkdir -p $out/share/4jcraft
cp -r Minecraft.Client/. $out/share/4jcraft/
meta = {
description = "4JCraft";
platforms = pkgs.lib.platforms.unix;
mkdir -p $out/bin
${pkgs.makeWrapper} $out/share/4jcraft/Minecraft.Client $out/bin/4jcraft \
--run "cd $out/share/4jcraft"
'';
meta = {
description = "4JCraft";
platforms = pkgs.lib.platforms.unix;
};
};
};
});
};
devShells.default =
pkgs.mkShell.override
{
stdenv = pkgs.clangStdenv;
}
{
inputsFrom = [ self.packages.${system}.default ];
packages = with pkgs; [
clang-tools
lldb
valgrind
include-what-you-use
ccache
];
shellHook = ''
export CC="ccache clang"
export CXX="ccache clang++"
'';
};
}
);
}