{ 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 ]; }; } ); }