# An "impure" template thx to `pyproject.nix`, # https://pyproject-nix.github.io/pyproject.nix/templates.html#impure # https://github.com/pyproject-nix/pyproject.nix/blob/master/templates/impure/flake.nix { description = "An impure `piker` overlay using `uv` with Nix(OS)"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; }; outputs = { nixpkgs, ... }: let inherit (nixpkgs) lib; forAllSystems = lib.genAttrs lib.systems.flakeExposed; in { devShells = forAllSystems ( system: let pkgs = nixpkgs.legacyPackages.${system}; # do store-path extractions qt6baseStorePath = lib.getLib pkgs.qt6.qtbase; # ?TODO? can remove below since manual linking not needed? # qt6QtWaylandStorePath = lib.getLib pkgs.qt6.qtwayland; # XXX NOTE XXX, for now we overlay specific pkgs via # a major-version-pinned-`cpython` cpython = "python313"; pypkgs = pkgs."${cpython}Packages"; in { default = pkgs.mkShell { packages = with pkgs; [ qt6.qtwayland qt6.qtbase uv python313 # ?TODO^ how to set from `cpython` above? pypkgs.pyqt6 pypkgs.pyqt6-sip pypkgs.qtpy pypkgs.qdarkstyle pypkgs.rapidfuzz ]; shellHook = '' # unmask to debug **this** dev-shell-hook # set -e # set qt-base/plugin path(s) QTBASE_PATH="${qt6baseStorePath}/lib" QT_PLUGIN_PATH="${qt6baseStorePath}/lib/qt-6/plugins" QT_QPA_PLATFORM_PLUGIN_PATH="$QT_PLUGIN_PATH/platforms" # link in Qt cc lib paths from LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$QTBASE_PATH" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$QT_PLUGIN_PATH" LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$QT_QPA_PLATFORM_PLUGIN_PATH" # link-in c++ stdlib for various AOT-ext-pkgs (numpy, etc.) LD_LIBRARY_PATH="${pkgs.stdenv.cc.cc.lib}/lib:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH # RUNTIME-SETTINGS # # ------ Qt ------ # XXX, unmask to debug qt .so linking/loading deats # export QT_DEBUG_PLUGINS=1 # # ALSO, for *modern linux* DEs, # - maybe set wayland-mode (TODO, parametrtize this!) # * a chosen wayland-mode shell-integration export QT_QPA_PLATFORM="wayland" export QT_WAYLAND_SHELL_INTEGRATION="xdg-shell" # ------ uv ------ # - always use the ./py313/ venv-subdir export UV_PROJECT_ENVIRONMENT="py313" # sync project-env with all extras uv sync --dev --all-extras # ------ TIPS ------ # NOTE, to launch the py-venv installed `xonsh` (like @goodboy) # run the `nix develop` cmd with, # >> nix develop -c uv run xonsh ''; }; } ); }; }