diff --git a/.gitignore b/.gitignore index e236026..c7a8d79 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ +.direnv build/ data.trace.db +*.jar +result \ No newline at end of file diff --git a/flake.lock b/flake.lock index c19674c..c2c0455 100644 --- a/flake.lock +++ b/flake.lock @@ -1,25 +1,58 @@ { "nodes": { - "nixpkgs": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1701952659, - "narHash": "sha256-TJv2srXt6fYPUjxgLAL0cy4nuf1OZD4KuA1TrCiQqg0=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b4372c4924d9182034066c823df76d6eaf1f4ec4", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-23.11", - "repo": "nixpkgs", + "owner": "numtide", + "repo": "flake-utils", "type": "github" } }, + "nixpkgs": { + "locked": { + "lastModified": 1751943650, + "narHash": "sha256-7orTnNqkGGru8Je6Un6mq1T8YVVU/O5kyW4+f9C1mZQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "88983d4b665fb491861005137ce2b11a9f89f203", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-25.05", + "type": "indirect" + } + }, "root": { "inputs": { + "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } + }, + "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", diff --git a/flake.nix b/flake.nix index 85229a5..d6b7ab7 100644 --- a/flake.nix +++ b/flake.nix @@ -1,39 +1,23 @@ { - description = "BASE Demo Game"; + description = "The BASE engine demo game"; inputs = { - nixpkgs.url = github:NixOS/nixpkgs/nixos-23.11; + nixpkgs.url = "nixpkgs/nixos-25.05"; + flake-utils.url = "github:numtide/flake-utils"; }; - outputs = { self, nixpkgs }: - let - pkgs = import nixpkgs { inherit system; }; - system = "x86_64-linux"; - opengl = "/run/opengl-driver"; - in { - devShells.${system}.default = with pkgs; mkShell { - name = "base-demo"; - - buildInputs = [ - xorg.libXtst - alsa-lib - jdk17 - ]; - - shellHook = '' - echo - echo - echo "======================================================================================================" - echo "Welcome to BASE Demo Game NixOS flake shell environment" - echo "Remember to provide following LD environment variable in order to run the game outside this shell" - echo - echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH" - echo "======================================================================================================" - echo - echo - ''; - - LD_LIBRARY_PATH = "${opengl}/lib:${xorg.libXtst}/lib:${alsa-lib}/lib"; - }; - }; + outputs = inputs @ { + self, + nixpkgs, + flake-utils, + ... + }: + flake-utils.lib.eachDefaultSystem (system: let + pkgs = import nixpkgs {inherit system;}; + in { + packages = rec { + game = pkgs.callPackage ./game.nix (inputs // {inherit system;}); + default = game; + }; + }); } diff --git a/game.nix b/game.nix new file mode 100644 index 0000000..eb22739 --- /dev/null +++ b/game.nix @@ -0,0 +1,41 @@ +{ + pkgs, + lib, + stdenv, + system, + makeWrapper, + jdk17, + xorg, + openjfx17, + glib, + alsa-lib, + libGL, + gtk3, + ... +}: +stdenv.mkDerivation rec { + pname = "base-demo"; + version = "0.0.1"; + + src = pkgs.requireFile { + name = "${pname}-jar-${version}.jar"; + sha256 = "0k0zh3zccz1sgdqgc97glb6i2rb2459lp89j9s6hyvlzpk86sy5z"; + message = "Please compile the game with BASE game designer, then rename the output 'game.jar' file to '${pname}-jar-${version}.jar' and add it to store before proceeding."; + }; + + dontUnpack = true; + + nativeBuildInputs = [makeWrapper]; + + installPhase = '' + mkdir -p $out/bin + makeWrapper "${jdk17}/bin/java" $out/bin/base-demo \ + --add-flags "-jar ${src}" \ + --prefix LD_LIBRARY_PATH : "${xorg.libXtst}/lib" \ + --prefix LD_LIBRARY_PATH : "${openjfx17}/lib" \ + --prefix LD_LIBRARY_PATH : "${glib.out}/lib" \ + --prefix LD_LIBRARY_PATH : "${alsa-lib}/lib" \ + --prefix LD_LIBRARY_PATH : "${libGL}/lib" \ + --prefix LD_LIBRARY_PATH : "${gtk3}/lib" + ''; +}