logos-app/flake.nix
Marcus (agent-cos) f79a4784b4 Initial commit: Logos Bible Software flake
- logos: WINE-based desktop app (offline-capable)
- logos-web: Electron wrapper for web app
- logos-install: one-time GUI installer
2026-05-15 19:30:15 -07:00

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