pkgs: wrapWine
This commit is contained in:
parent
73504959a2
commit
2d2909e22e
1 changed files with 89 additions and 0 deletions
89
pkgs/wrapWine.nix
Normal file
89
pkgs/wrapWine.nix
Normal file
|
@ -0,0 +1,89 @@
|
|||
# Yoink https://github.com/h4ckbs/lan-party-netboot/blob/master/wrapWine.nix
|
||||
|
||||
{ pkgs }:
|
||||
let
|
||||
inherit (builtins) length concatStringsSep;
|
||||
inherit (pkgs) lib cabextract writeShellScriptBin;
|
||||
inherit (lib) makeBinPath;
|
||||
in
|
||||
{ is64bits ? false
|
||||
, wine ? if is64bits then pkgs.wineWowPackages.stable else pkgs.wine
|
||||
, wineFlags ? ""
|
||||
, executable
|
||||
, chdir ? null
|
||||
, name
|
||||
, tricks ? [ ]
|
||||
, setupScript ? ""
|
||||
, firstrunScript ? ""
|
||||
, home ? ""
|
||||
}:
|
||||
let
|
||||
wineBin = "${wine}/bin/wine${if is64bits then "64" else ""}";
|
||||
requiredPackages = [
|
||||
wine
|
||||
cabextract
|
||||
];
|
||||
WINENIX_PROFILES = "$HOME/WINENIX_PROFILES";
|
||||
PATH = makeBinPath requiredPackages;
|
||||
NAME = name;
|
||||
HOME =
|
||||
if home == ""
|
||||
then "${WINENIX_PROFILES}/${name}"
|
||||
else home;
|
||||
WINEARCH =
|
||||
if is64bits
|
||||
then "win64"
|
||||
else "win32";
|
||||
setupHook = ''
|
||||
${wine}/bin/wineboot
|
||||
'';
|
||||
tricksHook =
|
||||
if (length tricks) > 0 then
|
||||
let
|
||||
tricksStr = concatStringsSep " " tricks;
|
||||
tricksCmd = ''
|
||||
pushd $(mktemp -d)
|
||||
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
|
||||
chmod +x winetricks
|
||||
./winetricks ${tricksStr}
|
||||
popd
|
||||
'';
|
||||
in
|
||||
tricksCmd
|
||||
else "";
|
||||
script = writeShellScriptBin name ''
|
||||
export APP_NAME="${NAME}"
|
||||
export WINEARCH=${WINEARCH}
|
||||
export WINE_NIX="$HOME/.wine-nix" # define antes de definir $HOME senão ele vai gravar na nova $HOME a .wine-nix
|
||||
export WINE_NIX_PROFILES="${WINENIX_PROFILES}"
|
||||
export PATH=$PATH:${PATH}
|
||||
export HOME="${HOME}"
|
||||
mkdir -p "$HOME"
|
||||
export WINEPREFIX="$WINE_NIX/${name}"
|
||||
export EXECUTABLE="${executable}"
|
||||
mkdir -p "$WINE_NIX" "$WINE_NIX_PROFILES"
|
||||
${setupScript}
|
||||
if [ ! -d "$WINEPREFIX" ] # if the prefix does not exist
|
||||
then
|
||||
${setupHook}
|
||||
# ${wineBin} cmd /c dir > /dev/null 2> /dev/null # initialize prefix
|
||||
wineserver -w
|
||||
${tricksHook}
|
||||
rm "$WINEPREFIX/drive_c/users/$USER" -rf
|
||||
ln -s "$HOME" "$WINEPREFIX/drive_c/users/$USER"
|
||||
${firstrunScript}
|
||||
fi
|
||||
${if chdir != null
|
||||
then ''cd "${chdir}"''
|
||||
else ""}
|
||||
if [ ! "$REPL" == "" ]; # if $REPL is setup then start a shell in the context
|
||||
then
|
||||
bash
|
||||
exit 0
|
||||
fi
|
||||
|
||||
${wineBin} ${wineFlags} "$EXECUTABLE" "$@"
|
||||
wineserver -w
|
||||
'';
|
||||
in
|
||||
script
|
Loading…
Reference in a new issue