[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.
153 lines
3.9 KiB
Nix
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
|
|
];
|
|
};
|
|
}
|