nixos/modules/home/tibia.nix
Sasza Stanczew 1a2966e054 Refactor: czysta separacja system/user, moduł Tibii jako shared home-manager
[HermesAI]

Główne zmiany:

1. Separacja pakietów (best practice 2025+):
   - base.nix: tylko konfiguracja Nix-a (gc, flakes, allowUnfree), zero pakietów
   - home.nix: wszystkie pakiety użytkownika (brave, neovim, git, lutris, itd.)
   - NixOS modules (plasma.nix, gaming.nix): tylko enable serwisów, bez pakietów

2. Tibia jako shared home-manager module:
   - modules/home/tibia.nix — opcja programs.tibia.enable dostępna dla każdego usera
   - Rejestracja przez home-manager.sharedModules w flake.nix
   - packages/libxml2-2.9/ — osobny callPackage zamiast inline build
   - Nowe: tibia-install (pobiera launcher na świeżym systemie), .desktop entry
   - tibia-patch: check "already patched", quoted heredoc (bez expandowania $@)
   - Poprawiona ścieżka do tibia-client (store path przez ${...} zamiast /run/...)

3. Porządki:
   - Usunięte puste moduły (3dmodel, 3dprint, network, office) — pakiety w home.nix
   - hosts/nix-latitude/configuration.nix: usunięty duplikat hostname, packages z usera
   - flake.nix: home-manager spięty do nixos-unstable, usunięty brakujący host nix-gaming
   - .gitignore: result, .direnv, *.swp

UWAGA: Wymaga nix flake lock na maszynie NixOS po pull.
Nowy user: programs.tibia.enable = true w home.nix + tibia-install.
2026-05-30 23:18:50 +02:00

153 lines
3.9 KiB
Nix

{ 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 ..."
if command -v wget &>/dev/null; then
wget -q --show-progress -O "$TMPDIR/tibia.tar.gz" "$URL"
elif command -v curl &>/dev/null; then
curl -# -L -o "$TMPDIR/tibia.tar.gz" "$URL"
else
echo "Neither wget nor curl found."
exit 1
fi
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
tibiaClientWrapper
tibiaPatcher
tibiaLauncherWrapper
tibiaDirect
tibiaInstall
tibiaDesktop
];
};
}