From f68c10a00823eacf6fc87c03c3db73a654efcbaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Thu, 23 Nov 2023 14:37:05 +0100 Subject: [PATCH] clan-vm-manager: add nix package --- flake.nix | 1 - pkgs/clan-cli/.envrc | 11 +--- pkgs/clan-cli/default.nix | 5 -- pkgs/clan-cli/shell.nix | 1 - pkgs/clan-vm-manager/.envrc | 6 ++ pkgs/clan-vm-manager/bin/clan-vm-manager | 12 ++++ .../clan_vm_manager/__init__.py | 4 +- pkgs/clan-vm-manager/default.nix | 57 +++++++++++++++++++ pkgs/clan-vm-manager/flake-module.nix | 12 ++++ pkgs/clan-vm-manager/pyproject.toml | 28 +++++++++ pkgs/clan-vm-manager/shell.nix | 15 +++++ pkgs/flake-module.nix | 1 + 12 files changed, 136 insertions(+), 17 deletions(-) create mode 100644 pkgs/clan-vm-manager/.envrc create mode 100755 pkgs/clan-vm-manager/bin/clan-vm-manager create mode 100644 pkgs/clan-vm-manager/default.nix create mode 100644 pkgs/clan-vm-manager/flake-module.nix create mode 100644 pkgs/clan-vm-manager/pyproject.toml create mode 100644 pkgs/clan-vm-manager/shell.nix diff --git a/flake.nix b/flake.nix index 86afbf86..a57719c2 100644 --- a/flake.nix +++ b/flake.nix @@ -33,7 +33,6 @@ "aarch64-darwin" ]; imports = [ - ./checks/flake-module.nix ./devShell.nix ./formatter.nix diff --git a/pkgs/clan-cli/.envrc b/pkgs/clan-cli/.envrc index 0ded7613..0e43ca83 100644 --- a/pkgs/clan-cli/.envrc +++ b/pkgs/clan-cli/.envrc @@ -1,13 +1,6 @@ -# Because we depend on nixpkgs sources, uploading to builders takes a long time - source_up +nix_direnv_watch_file flake-module.nix default.nix -if type nix_direnv_watch_file &>/dev/null; then - nix_direnv_watch_file flake-module.nix - nix_direnv_watch_file default.nix -else - direnv watch flake-module.nix - direnv watch default.nix -fi +# Because we depend on nixpkgs sources, uploading to builders takes a long time use flake .#clan-cli --builders '' diff --git a/pkgs/clan-cli/default.nix b/pkgs/clan-cli/default.nix index 439ca6de..e8ceb8c4 100644 --- a/pkgs/clan-cli/default.nix +++ b/pkgs/clan-cli/default.nix @@ -41,11 +41,6 @@ let dependencies = [ argcomplete # optional dependency: if not enabled, shell completion will not work - wrapGAppsHook - gtk3 - glib - gobject-introspection - pygobject3 ]; pytestDependencies = runtimeDependencies ++ dependencies ++ [ diff --git a/pkgs/clan-cli/shell.nix b/pkgs/clan-cli/shell.nix index bce7119a..1bae9190 100644 --- a/pkgs/clan-cli/shell.nix +++ b/pkgs/clan-cli/shell.nix @@ -45,7 +45,6 @@ mkShell { export PATH="$tmp_path/python/bin:${checkScript}/bin:$PATH" export PYTHONPATH="$repo_root:$tmp_path/python/${pythonWithDeps.sitePackages}:" - export XDG_DATA_DIRS="$tmp_path/share''${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}" export fish_complete_path="$tmp_path/share/fish/vendor_completions.d''${fish_complete_path:+:$fish_complete_path}" mkdir -p \ diff --git a/pkgs/clan-vm-manager/.envrc b/pkgs/clan-vm-manager/.envrc new file mode 100644 index 00000000..27620706 --- /dev/null +++ b/pkgs/clan-vm-manager/.envrc @@ -0,0 +1,6 @@ +source_up + +nix_direnv_watch_file flake-module.nix default.nix + +# Because we depend on nixpkgs sources, uploading to builders takes a long time +use flake .#clan-vm-manager --builders '' diff --git a/pkgs/clan-vm-manager/bin/clan-vm-manager b/pkgs/clan-vm-manager/bin/clan-vm-manager new file mode 100755 index 00000000..3b35422b --- /dev/null +++ b/pkgs/clan-vm-manager/bin/clan-vm-manager @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +import os +import sys + +sys.path.insert( + 0, os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) +) + +from clan_vm_manager import main # NOQA + +if __name__ == "__main__": + main() diff --git a/pkgs/clan-vm-manager/clan_vm_manager/__init__.py b/pkgs/clan-vm-manager/clan_vm_manager/__init__.py index 800ddc27..3e568be6 100644 --- a/pkgs/clan-vm-manager/clan_vm_manager/__init__.py +++ b/pkgs/clan-vm-manager/clan_vm_manager/__init__.py @@ -6,6 +6,8 @@ start_app: Optional[Callable] = None from .app import start_app -def register_parser(parser: argparse.ArgumentParser) -> None: +def main() -> None: parser = argparse.ArgumentParser(description="clan-vm-manager") parser.set_defaults(func=start_app) + args = parser.parse_args() + args.func(args) diff --git a/pkgs/clan-vm-manager/default.nix b/pkgs/clan-vm-manager/default.nix new file mode 100644 index 00000000..a7277e37 --- /dev/null +++ b/pkgs/clan-vm-manager/default.nix @@ -0,0 +1,57 @@ +{ python3 +, runCommand +, setuptools +, copyDesktopItems +, pygobject3 +, wrapGAppsHook +, gtk3 +, gnome +, gobject-introspection +, clan-cli +}: +let + source = ./.; +in +python3.pkgs.buildPythonApplication { + name = "clan-vm-manager"; + src = source; + format = "pyproject"; + + makeWrapperArgs = [ + # This prevents problems with mixed glibc versions that might occur when the + # cli is called through a browser built against another glibc + "--unset LD_LIBRARY_PATH" + ]; + + nativeBuildInputs = [ + setuptools + copyDesktopItems + wrapGAppsHook + gobject-introspection + ]; + + buildInputs = [ gtk3 gnome.adwaita-icon-theme ]; + propagatedBuildInputs = [ pygobject3 clan-cli ]; + + # also re-expose dependencies so we test them in CI + passthru.tests = { + clan-vm-manager-no-breakpoints = runCommand "clan-vm-manager-no-breakpoints" { } '' + if grep --include \*.py -Rq "breakpoint()" ${source}; then + echo "breakpoint() found in ${source}:" + grep --include \*.py -Rn "breakpoint()" ${source} + exit 1 + fi + touch $out + ''; + }; + + # Don't leak python packages into a devshell. + # It can be very confusing if you `nix run` than load the cli from the devshell instead. + postFixup = '' + rm $out/nix-support/propagated-build-inputs + ''; + checkPhase = '' + PYTHONPATH= $out/bin/clan-vm-manager --help + ''; + meta.mainProgram = "clan"; +} diff --git a/pkgs/clan-vm-manager/flake-module.nix b/pkgs/clan-vm-manager/flake-module.nix new file mode 100644 index 00000000..7264c130 --- /dev/null +++ b/pkgs/clan-vm-manager/flake-module.nix @@ -0,0 +1,12 @@ +{ ... }: { + perSystem = { config, pkgs, ... }: { + devShells.clan-vm-manager = pkgs.callPackage ./shell.nix { + inherit (config.packages) clan-cli clan-vm-manager; + }; + packages.clan-vm-manager = pkgs.python3.pkgs.callPackage ./default.nix { + inherit (config.packages) clan-cli; + }; + + checks = config.packages.clan-vm-manager.tests; + }; +} diff --git a/pkgs/clan-vm-manager/pyproject.toml b/pkgs/clan-vm-manager/pyproject.toml new file mode 100644 index 00000000..0ec43fce --- /dev/null +++ b/pkgs/clan-vm-manager/pyproject.toml @@ -0,0 +1,28 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[project] +name = "clan-vm-manager" +dynamic = ["version"] +scripts = { clan-vm-manager = "clan_vm_manager:main" } + +[tool.setuptools.package-data] +clan_vm_manager = ["*.glade"] + +[tool.mypy] +python_version = "3.10" +warn_redundant_casts = true +disallow_untyped_calls = true +disallow_untyped_defs = true +no_implicit_optional = true + +[[tool.mypy.overrides]] +module = "gi.*" +ignore_missing_imports = true + +[tool.ruff] +line-length = 88 + +select = ["E", "F", "I", "N"] +ignore = ["E501", "E402"] diff --git a/pkgs/clan-vm-manager/shell.nix b/pkgs/clan-vm-manager/shell.nix new file mode 100644 index 00000000..aecc5cd4 --- /dev/null +++ b/pkgs/clan-vm-manager/shell.nix @@ -0,0 +1,15 @@ +{ clan-vm-manager, clan-cli, mkShell, ruff, python3 }: +let + pythonWithDeps = python3.withPackages (ps: clan-vm-manager.propagatedBuildInputs); +in +mkShell { + buildInputs = [ pythonWithDeps ] ++ clan-vm-manager.buildInputs; + nativeBuildInputs = [ + ruff + ] ++ clan-vm-manager.nativeBuildInputs; + + shellHook = '' + rm -f ../clan-cli/clan_cli/nixpkgs + ln -sf ${clan-cli.nixpkgs} ../clan-cli/clan_cli/nixpkgs + ''; +} diff --git a/pkgs/flake-module.nix b/pkgs/flake-module.nix index 5173b5db..b3792a8f 100644 --- a/pkgs/flake-module.nix +++ b/pkgs/flake-module.nix @@ -1,6 +1,7 @@ { ... }: { imports = [ ./clan-cli/flake-module.nix + ./clan-vm-manager/flake-module.nix ./installer/flake-module.nix ./ui/flake-module.nix ./theme/flake-module.nix