aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/ci.yml64
-rw-r--r--nix/mobase-shell.nix49
2 files changed, 113 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2ce5cc2..612eed9 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -65,3 +65,67 @@ jobs:
path: build/fluorine-manager/
compression-level: 6
if-no-files-found: warn
+
+ build-nixos-mobase:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Install Nix
+ uses: cachix/install-nix-action@v30
+ with:
+ nix_path: nixpkgs=channel:nixos-unstable
+
+ - name: Cache Nix store
+ uses: actions/cache@v4
+ with:
+ path: /tmp/nix-cache
+ key: nix-mobase-${{ hashFiles('nix/mobase-shell.nix') }}
+ restore-keys: nix-mobase-
+
+ - name: Build mobase.so for NixOS
+ run: |
+ nix-shell nix/mobase-shell.nix --run "
+ set -euo pipefail
+
+ # Build libloot from source (not in nixpkgs)
+ git clone --depth 1 https://github.com/loot/libloot.git /tmp/libloot
+ cmake -S /tmp/libloot/cpp -B /tmp/libloot/build -G Ninja \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DBUILD_SHARED_LIBS=ON \
+ -DLIBLOOT_INSTALL_DOCS=OFF \
+ -DBUILD_TESTING=OFF \
+ -DCMAKE_INSTALL_PREFIX=/tmp/libloot-install
+ cmake --build /tmp/libloot/build --parallel
+ cmake --install /tmp/libloot/build
+
+ # Configure full project (disable Rust FFI — not needed for mobase)
+ PYBIND11_DIR=\$(python3 -c 'import pybind11; print(pybind11.get_cmake_dir())')
+ cmake -S . -B build-nix -G Ninja \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DPython_EXECUTABLE=\$(which python3) \
+ -Dpybind11_DIR=\"\${PYBIND11_DIR}\" \
+ -DBUILD_PLUGIN_PYTHON=ON \
+ -DBUILD_NAK_FFI=OFF \
+ -DBUILD_BSA_FFI=OFF \
+ -DCMAKE_PREFIX_PATH=/tmp/libloot-install \
+ -Dlibloot_DIR=/tmp/libloot-install
+
+ # Build only mobase target
+ cmake --build build-nix --target mobase --parallel
+
+ # Package it
+ mkdir -p nixos-mobase
+ cp build-nix/libs/plugin_python/src/mobase/mobase.cpython-*-linux-gnu.so nixos-mobase/
+ echo 'NixOS-compatible mobase pybind11 module for Fluorine Manager.' > nixos-mobase/README.txt
+ echo 'Drop this .so into your plugins/libs/ directory, replacing the existing one.' >> nixos-mobase/README.txt
+ "
+
+ - name: Upload NixOS mobase
+ uses: actions/upload-artifact@v4
+ with:
+ name: mobase-nixos
+ path: nixos-mobase/
+ compression-level: 6
+ if-no-files-found: warn
diff --git a/nix/mobase-shell.nix b/nix/mobase-shell.nix
new file mode 100644
index 0000000..19c8d34
--- /dev/null
+++ b/nix/mobase-shell.nix
@@ -0,0 +1,49 @@
+{ pkgs ? import <nixpkgs> {} }:
+
+pkgs.mkShell {
+ nativeBuildInputs = with pkgs; [
+ cmake
+ ninja
+ pkg-config
+ git
+ ];
+
+ buildInputs = with pkgs; [
+ # Qt 6
+ qt6.qtbase
+ qt6.wrapQtAppsHook
+ qt6.qtwebengine
+ qt6.qtwebsockets
+ qt6.qtsvg
+ qt6.qtwayland
+
+ # Python + pybind11
+ python313
+ python313Packages.pybind11
+ python313Packages.sip
+ python313Packages.pyqt6
+
+ # Libraries
+ boost
+ sqlite
+ tinyxml2
+ fontconfig
+ spdlog
+ fuse3
+ libcap
+ lz4
+ zlib
+ zstd
+ bzip2
+ xz
+ openssl
+ curl
+ tomlplusplus
+ fmt
+ ];
+
+ shellHook = ''
+ export PYTHONPATH="${pkgs.python313Packages.pybind11}/${pkgs.python313.sitePackages}:$PYTHONPATH"
+ export CMAKE_PREFIX_PATH="${pkgs.qt6.qtbase}:${pkgs.qt6.qtwebengine}:${pkgs.qt6.qtwebsockets}:${pkgs.qt6.qtsvg}:$CMAKE_PREFIX_PATH"
+ '';
+}