diff --git a/.gitignore b/.gitignore index 56f543a..a2f2eca 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ # balatromobile # /balatro*.apk + +# Balatro # +*.exe diff --git a/Balatro.exe b/Balatro.exe new file mode 100755 index 0000000..0476b35 Binary files /dev/null and b/Balatro.exe differ diff --git a/balatro-android/package.nix b/balatro-android/package.nix new file mode 100644 index 0000000..ff4becf --- /dev/null +++ b/balatro-android/package.nix @@ -0,0 +1,18 @@ +{ + stdenvNoCC, + balatro, + balatromobile, + extraArguments ? "", +}: +stdenvNoCC.mkDerivation { + pname = "balatro-android"; + version = balatro.version; + + dontUnpack = true; + + buildPhase = '' + mkdir -p $out/share + ${balatromobile}/bin/balatromobile android ${extraArguments} ${balatro}/share/Balatro + install balatro*.apk $out/share + ''; +} diff --git a/balatro/globals.patch b/balatro/globals.patch new file mode 100644 index 0000000..4bac257 --- /dev/null +++ b/balatro/globals.patch @@ -0,0 +1,15 @@ +--- result/share/balatro/globals.lua 1970-01-01 01:00:01.000000000 +0100 ++++ result/share/balatro/globals.lua 1970-01-01 01:00:01.000000000 +0100 +@@ -56,6 +56,12 @@ function Game:set_globals() + self.F_CRASH_REPORTS = false + end + ++ if love.system.getOS() == 'Linux' then ++ self.F_SAVE_TIMER = 5 ++ self.F_DISCORD = true ++ self.F_ENGLISH_ONLY = false ++ end ++ + if love.system.getOS() == 'Nintendo Switch' then + self.F_HIDE_BETA_LANGS = true + self.F_BASIC_CREDITS = true diff --git a/balatro/package.nix b/balatro/package.nix new file mode 100644 index 0000000..4926de2 --- /dev/null +++ b/balatro/package.nix @@ -0,0 +1,82 @@ +{ + stdenv, + lib, + love, + lovely-injector, + p7zip, + copyDesktopItems, + makeWrapper, + makeDesktopItem, + requireFile, + withMods ? true, + withLinuxPatch ? true, + balatroExe ? + requireFile { + name = "Balatro.exe"; + url = "https://store.steampowered.com/app/2379780/Balatro/"; + # Use `nix hash file --sri --type sha256 ` to get the correct hash + hash = "sha256-DXX+FkrM8zEnNNSzesmHiN0V8Ljk+buLf5DE5Z3pP0c="; + }, +}: +stdenv.mkDerivation { + pname = "balatro"; + version = "1.0.1o"; + + nativeBuildInputs = [ + p7zip + copyDesktopItems + makeWrapper + ]; + buildInputs = [love] ++ lib.optional withMods lovely-injector; + dontUnpack = true; + desktopItems = [ + (makeDesktopItem { + name = "balatro"; + desktopName = "Balatro"; + exec = "balatro"; + keywords = ["Game"]; + categories = ["Game"]; + icon = "balatro"; + }) + ]; + buildPhase = '' + runHook preBuild + tmpdir=$(mktemp -d) + 7z x ${balatroExe} -o$tmpdir -y + ${ + if withLinuxPatch + then "patch $tmpdir/globals.lua -i ${./globals.patch}" + else "" + } + patchedExe=$(mktemp -u).zip + 7z a $patchedExe $tmpdir/* + runHook postBuild + ''; + + # The `cat` bit is a hack suggested by whitelje (https://github.com/ethangreen-dev/lovely-injector/pull/66#issuecomment-2319615509) + # to make it so that lovely will pick up Balatro as the game name. The `LD_PRELOAD` bit is used to load lovely and it is the + # 'official' way of doing it. + installPhase = '' + runHook preInstall + install -Dm444 $tmpdir/resources/textures/2x/balatro.png -t $out/share/icons/ + + cat ${lib.getExe love} $patchedExe > $out/share/Balatro + chmod +x $out/share/Balatro + + makeWrapper $out/share/Balatro $out/bin/balatro ${lib.optionalString withMods "--prefix LD_PRELOAD : '${lovely-injector}/lib/liblovely.so'"} + runHook postInstall + ''; + + meta = { + description = "Poker roguelike"; + longDescription = '' + Balatro is a hypnotically satisfying deckbuilder where you play illegal poker hands, + discover game-changing jokers, and trigger adrenaline-pumping, outrageous combos. + ''; + license = lib.licenses.unfree; + homepage = "https://store.steampowered.com/app/2379780/Balatro/"; + maintainers = [lib.maintainers.antipatico]; + platforms = love.meta.platforms; + mainProgram = "balatro"; + }; +} diff --git a/default.nix b/balatromobile/package.nix similarity index 100% rename from default.nix rename to balatromobile/package.nix diff --git a/flake.nix b/flake.nix index 51e7662..fe6d69c 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "A Python Project Template."; + description = "Packages concerning the game Balatro."; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -9,20 +9,24 @@ self, nixpkgs, ... - } @ inputs: let + }: let supportedSystems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; pkgs = forAllSystems (system: nixpkgs.legacyPackages.${system}); in { # `nix build` packages = forAllSystems (system: rec { - default = balatromobile; - balatromobile = pkgs.${system}.callPackage ./default.nix {}; + balatro = pkgs.${system}.callPackage ./balatro/package.nix {}; + balatromobile = pkgs.${system}.callPackage ./balatromobile/package.nix {}; + balatro-android = pkgs.${system}.callPackage ./balatro-android/package.nix {inherit balatro balatromobile;}; }); # `nix run` - apps = forAllSystems (system: rec { - default = balatromobile; + apps = forAllSystems (system: { + balatro = { + program = "${self.packages.${system}.balatro}/bin/balatro"; + type = "app"; + }; balatromobile = { program = "${self.packages.${system}.balatromobile}/bin/balatromobile"; type = "app";