- logos: WINE-based desktop app (offline-capable) - logos-web: Electron wrapper for web app - logos-install: one-time GUI installer
152 lines
4.7 KiB
Nix
152 lines
4.7 KiB
Nix
{
|
|
description = "Logos Bible Software — Electron wrapper + WINE installer for NixOS";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
|
|
# Shared user data path for persistent storage
|
|
dataDir = "$HOME/.local/share/logos-app";
|
|
|
|
# ── Electron web wrapper ──────────────────────────
|
|
logos-electron = pkgs.writeShellApplication {
|
|
name = "logos-web";
|
|
runtimeInputs = [ pkgs.electron ];
|
|
text = ''
|
|
mkdir -p "${dataDir}"
|
|
exec electron "${./main.js}"
|
|
'';
|
|
};
|
|
|
|
# ── WINE launcher (after desktop install) ──────────
|
|
logos-wine = pkgs.writeShellApplication {
|
|
name = "logos";
|
|
runtimeInputs = [ pkgs.wineWow64Packages.stagingFull ];
|
|
text = ''
|
|
WINEPREFIX="''${WINEPREFIX:-$HOME/.local/share/logos-wine}"
|
|
export WINEPREFIX WINEARCH=win64
|
|
|
|
LOGOS_EXE="$WINEPREFIX/drive_c/users/$USER/AppData/Local/Logos/Logos.exe"
|
|
|
|
if [ ! -f "$LOGOS_EXE" ]; then
|
|
echo "Logos not installed yet. Run: logos-install"
|
|
exit 1
|
|
fi
|
|
|
|
exec wine "$LOGOS_EXE" "$@"
|
|
'';
|
|
};
|
|
|
|
# ── Installer script ───────────────────────────────
|
|
logos-install = pkgs.writeShellApplication {
|
|
name = "logos-install";
|
|
runtimeInputs = with pkgs; [ wineWow64Packages.stagingFull winetricks wget ];
|
|
text = ''
|
|
set -e
|
|
WINEPREFIX="''${WINEPREFIX:-$HOME/.local/share/logos-wine}"
|
|
export WINEPREFIX WINEARCH=win64
|
|
|
|
if [ -z "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ]; then
|
|
echo "ERROR: No display. Run from your desktop, not SSH."
|
|
exit 1
|
|
fi
|
|
|
|
echo "=== Logos Installer ==="
|
|
|
|
# Init WINE prefix
|
|
if [ ! -d "$WINEPREFIX" ]; then
|
|
echo "[1/3] Creating WINE prefix..."
|
|
wineboot -i && wineserver -w
|
|
winecfg -v win10
|
|
winetricks -q corefonts
|
|
else
|
|
echo "[1/3] WINE prefix exists"
|
|
fi
|
|
|
|
# Download installer
|
|
INSTALLER="/tmp/LogosSetup.exe"
|
|
if [ ! -f "$INSTALLER" ]; then
|
|
echo "[2/3] Downloading Logos installer..."
|
|
wget -q --show-progress -O "$INSTALLER" \
|
|
"https://downloads.logoscdn.com/LBS10/Installer/LogosSetup.exe"
|
|
else
|
|
echo "[2/3] Installer cached"
|
|
fi
|
|
|
|
echo "[3/3] Running installer — follow the GUI..."
|
|
wine "$INSTALLER"
|
|
echo "Done. Launch with: logos"
|
|
'';
|
|
};
|
|
|
|
# ── Desktop entries ────────────────────────────────
|
|
logos-desktop = pkgs.makeDesktopItem {
|
|
name = "logos";
|
|
exec = "logos";
|
|
icon = "logos";
|
|
desktopName = "Logos Bible Software";
|
|
comment = "Bible study and research (WINE)";
|
|
categories = [ "Education" "Office" ];
|
|
terminal = false;
|
|
};
|
|
|
|
logos-web-desktop = pkgs.makeDesktopItem {
|
|
name = "logos-web";
|
|
exec = "logos-web";
|
|
icon = "logos-web";
|
|
desktopName = "Logos (Web)";
|
|
comment = "Logos web app wrapper";
|
|
categories = [ "Education" "Office" ];
|
|
terminal = false;
|
|
};
|
|
|
|
in
|
|
{
|
|
packages = {
|
|
default = logos-wine;
|
|
logos = logos-wine;
|
|
logos-web = logos-electron;
|
|
logos-install = logos-install;
|
|
logos-full = pkgs.symlinkJoin {
|
|
name = "logos-full";
|
|
paths = [
|
|
logos-wine
|
|
logos-electron
|
|
logos-install
|
|
logos-desktop
|
|
logos-web-desktop
|
|
];
|
|
};
|
|
};
|
|
|
|
apps = {
|
|
default = {
|
|
type = "app";
|
|
program = "${logos-wine}/bin/logos";
|
|
};
|
|
web = {
|
|
type = "app";
|
|
program = "${logos-electron}/bin/logos-web";
|
|
};
|
|
install = {
|
|
type = "app";
|
|
program = "${logos-install}/bin/logos-install";
|
|
};
|
|
};
|
|
|
|
devShells.default = pkgs.mkShell {
|
|
packages = with pkgs; [
|
|
wineWow64Packages.stagingFull
|
|
winetricks
|
|
electron
|
|
];
|
|
};
|
|
}
|
|
);
|
|
}
|