{ config, lib, pkgs, ... }: let # Siril's Python plugins (sirilpy) run in a venv that pip-installs foreign # manylinux wheels (numpy, GraXpert deps, ...). Those .so files need # libstdc++ at runtime. nix-ld does NOT cover this: it only handles the # initial exec of a foreign binary, but here a *native* nixpkgs python # dlopen()s the foreign wheel. So we put the libs on LD_LIBRARY_PATH, which # the python subprocess inherits from the Siril process. sirilWithPlugins = pkgs.symlinkJoin { name = "siril-with-plugins"; paths = [ pkgs.siril ]; nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = '' wrapProgram $out/bin/siril \ --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath (with pkgs; [ stdenv.cc.cc.lib # libstdc++ / libgcc_s / libgomp (numpy etc.) zlib zstd # libzstd.so.1 (PyQt6) libGL # libGL.so.1 (PyQt6) # PyQt6 (VeraLux) — Qt bundles xcb support so it needs these even # on Wayland; libxkbcommon is the keymap lib used by Wayland too. glib fontconfig freetype dbus libxkbcommon # Qt platform plugins: the wayland plugin (libqwayland.so) needs the # wayland client libs; the xcb fallback needs libxcb-cursor.so.0. wayland # libwayland-client/cursor/egl (wayland plugin) libxcb-cursor # libxcb-cursor.so.0 (xcb plugin) libx11 libxcb libxcb-util libxcb-wm libxcb-image libxcb-keysyms libxcb-render-util ])} ''; }; in { # install stellarium for target finding and siril for stacking environment.systemPackages = with pkgs; [ stellarium sirilWithPlugins ]; # StarNet++ has no nixpkgs package. Download the StarNet v2 ORT CLI build # (starnet2_linux_*_ORT_x64_cli) from https://www.starnetastro.com/download/ # and unzip it to ~/.local/share/siril/starnet/. Then in Siril set # Preferences -> Miscellaneous -> StarNet executable # to the extracted ./starnet2 binary. # # The binary is a generic dynamically-linked ELF, so NixOS needs nix-ld to # run it. Its own opencv/onnxruntime libs are found via the bundled ./lib. programs.nix-ld.enable = true; programs.nix-ld.libraries = with pkgs; [ stdenv.cc.cc.lib # libstdc++ / libgcc_s zlib ]; }