{ config, pkgs, lib, ... }: let cfg = config.programs.tibia; # Legacy libxml2 (2.9.x) — wymagany przez Tibię, usunięty z nixpkgs-unstable libxml2_2_9 = pkgs.callPackage ../../packages/libxml2-2.9 { }; # Wspólne ścieżki bibliotek tibiaLibPath = lib.makeLibraryPath [ pkgs.nss pkgs.nspr pkgs.libxkbfile libxml2_2_9 ]; # Helper: eksport LD_LIBRARY_PATH exportLibs = '' export LD_LIBRARY_PATH="${tibiaLibPath}:$LD_LIBRARY_PATH" ''; # Wrapper dla właściwego clienta (uruchamiany przez Tibia package.json) tibiaClientWrapper = pkgs.writeShellScriptBin "tibia-client" '' #!/usr/bin/env bash ${exportLibs} exec steam-run "$HOME/.local/share/CipSoft GmbH/Tibia/packages/Tibia/bin/client" "$@" ''; # Patchuje package.json Tibii żeby używała wrappera zamiast surowego binary tibiaPatcher = pkgs.writeShellScriptBin "tibia-patch" '' #!/usr/bin/env bash set -e PKGDIR="$HOME/.local/share/CipSoft GmbH/Tibia/packages/Tibia" PKGJSON="$PKGDIR/package.json" LOCALWRAPPER="$PKGDIR/tibia-client-wrapper" if [ ! -f "$PKGJSON" ]; then echo "package.json not found — run the launcher once first." exit 0 fi if grep -q "tibia-client-wrapper" "$PKGJSON" 2>/dev/null; then echo "Already patched." exit 0 fi cat > "$LOCALWRAPPER" <<'TIBIA_WRAPPER' #!/usr/bin/env bash ${exportLibs} exec ${tibiaClientWrapper}/bin/tibia-client "$@" TIBIA_WRAPPER chmod +x "$LOCALWRAPPER" sed -i 's#"executable": "bin/client"#"executable": "tibia-client-wrapper"#' "$PKGJSON" echo "Tibia client patched to use tibia-client-wrapper." ''; # Uruchamia launcher Tibii (pobrany ręcznie przez tibia-install) tibiaLauncherWrapper = pkgs.writeShellScriptBin "tibia" '' #!/usr/bin/env bash set -e LAUNCHER="$HOME/Gry/Tibia/Tibia" if [ ! -x "$LAUNCHER" ]; then echo "Tibia launcher not found at:" echo " $LAUNCHER" echo "" echo "Run 'tibia-install' first, or download manually from:" echo " https://www.tibia.com/download/" exit 1 fi tibia-patch ${exportLibs} exec steam-run "$LAUNCHER" ''; # Pomija launcher, odpala clienta bezpośrednio tibiaDirect = pkgs.writeShellScriptBin "tibia-direct" '' #!/usr/bin/env bash CLIENT="$HOME/.local/share/CipSoft GmbH/Tibia/packages/Tibia/bin/client" if [ ! -x "$CLIENT" ]; then echo "Tibia client not found." echo "Run 'tibia' once so the launcher downloads the client." exit 1 fi ${exportLibs} exec steam-run "$CLIENT" ''; # Instaluje launcher Tibii na nowym systemie tibiaInstall = pkgs.writeShellScriptBin "tibia-install" '' #!/usr/bin/env bash set -e URL="https://static.tibia.com/download/tibia.x64.tar.gz" DEST="$HOME/Gry/Tibia" TMPDIR=$(mktemp -d) trap "rm -rf $TMPDIR" EXIT echo "Downloading Tibia launcher from $URL ..." wget -q --show-progress -O "$TMPDIR/tibia.tar.gz" "$URL" mkdir -p "$DEST" tar xzf "$TMPDIR/tibia.tar.gz" -C "$DEST" chmod +x "$DEST/Tibia" echo "" echo "Tibia launcher installed to: $DEST/Tibia" echo "Run 'tibia' to start." ''; # .desktop entry tibiaDesktop = pkgs.makeDesktopItem { name = "tibia"; exec = "tibia-direct"; desktopName = "Tibia"; comment = "Tibia MMORPG Client"; categories = [ "Game" ]; }; in { options.programs.tibia = { enable = lib.mkEnableOption "Tibia game client support"; }; config = lib.mkIf cfg.enable { home.packages = with pkgs; [ steam-run libxml2_2_9 wget tibiaClientWrapper tibiaPatcher tibiaLauncherWrapper tibiaDirect tibiaInstall tibiaDesktop ]; }; }