Merge pull request 'Silence mypy error after nixpkgs update' (#3072) from nixpkgs-update into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/3072
This commit is contained in:
4
flake.lock
generated
4
flake.lock
generated
@@ -58,9 +58,9 @@
|
|||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 315532800,
|
"lastModified": 315532800,
|
||||||
"narHash": "sha256-bV4oQApFGvOYLu8OBEeAkIIGe+/20WC9ObDuAqfGzkI=",
|
"narHash": "sha256-+BzPdWVevbkSpM12Hxc0pvl5bK4QVqBj/Aksrkgduq4=",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.05pre769684.9bc8a9093126/nixexprs.tar.xz"
|
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.05pre769919.354953266373/nixexprs.tar.xz"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
|
|||||||
@@ -19,9 +19,10 @@ def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]:
|
|||||||
monkeypatch.chdir(str(path))
|
monkeypatch.chdir(str(path))
|
||||||
yield path
|
yield path
|
||||||
else:
|
else:
|
||||||
with tempfile.TemporaryDirectory(prefix="pytest-") as dirpath:
|
with tempfile.TemporaryDirectory(prefix="pytest-") as _dirpath:
|
||||||
|
dirpath = Path(_dirpath)
|
||||||
monkeypatch.setenv("HOME", str(dirpath))
|
monkeypatch.setenv("HOME", str(dirpath))
|
||||||
monkeypatch.setenv("XDG_CONFIG_HOME", str(Path(dirpath) / ".config"))
|
monkeypatch.setenv("XDG_CONFIG_HOME", str(dirpath / ".config"))
|
||||||
monkeypatch.chdir(str(dirpath))
|
monkeypatch.chdir(str(dirpath))
|
||||||
log.debug("Temp HOME directory: %s", str(dirpath))
|
log.debug("Temp HOME directory: %s", str(dirpath))
|
||||||
yield Path(dirpath)
|
yield dirpath
|
||||||
|
|||||||
@@ -202,8 +202,8 @@ def generate_facts(
|
|||||||
prompt: Callable[[str, str], str] = prompt_func,
|
prompt: Callable[[str, str], str] = prompt_func,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
was_regenerated = False
|
was_regenerated = False
|
||||||
with TemporaryDirectory(prefix="facts-generate-") as tmp:
|
with TemporaryDirectory(prefix="facts-generate-") as _tmpdir:
|
||||||
tmpdir = Path(tmp)
|
tmpdir = Path(_tmpdir).resolve()
|
||||||
|
|
||||||
for machine in machines:
|
for machine in machines:
|
||||||
errors = 0
|
errors = 0
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ def upload_secrets(machine: Machine) -> None:
|
|||||||
machine.info("Secrets already uploaded")
|
machine.info("Secrets already uploaded")
|
||||||
return
|
return
|
||||||
|
|
||||||
with TemporaryDirectory(prefix="facts-upload-") as tempdir:
|
with TemporaryDirectory(prefix="facts-upload-") as _tempdir:
|
||||||
local_secret_dir = Path(tempdir)
|
local_secret_dir = Path(_tempdir).resolve()
|
||||||
secret_facts_store.upload(local_secret_dir)
|
secret_facts_store.upload(local_secret_dir)
|
||||||
remote_secret_dir = Path(machine.secrets_upload_directory)
|
remote_secret_dir = Path(machine.secrets_upload_directory)
|
||||||
|
|
||||||
|
|||||||
@@ -100,8 +100,8 @@ def flash_machine(
|
|||||||
secret_facts_store: SecretStoreBase = secret_facts_module.SecretStore(
|
secret_facts_store: SecretStoreBase = secret_facts_module.SecretStore(
|
||||||
machine=machine
|
machine=machine
|
||||||
)
|
)
|
||||||
with TemporaryDirectory(prefix="disko-install-") as tmpdir_:
|
with TemporaryDirectory(prefix="disko-install-") as _tmpdir:
|
||||||
tmpdir = Path(tmpdir_)
|
tmpdir = Path(_tmpdir)
|
||||||
upload_dir = machine.secrets_upload_directory
|
upload_dir = machine.secrets_upload_directory
|
||||||
|
|
||||||
if upload_dir.startswith("/"):
|
if upload_dir.startswith("/"):
|
||||||
|
|||||||
@@ -61,8 +61,9 @@ def install_machine(opts: InstallOptions) -> None:
|
|||||||
generate_facts([machine])
|
generate_facts([machine])
|
||||||
generate_vars([machine])
|
generate_vars([machine])
|
||||||
|
|
||||||
with TemporaryDirectory(prefix="nixos-install-") as base_directory:
|
with TemporaryDirectory(prefix="nixos-install-") as _base_directory:
|
||||||
activation_secrets = Path(base_directory) / "activation_secrets"
|
base_directory = Path(_base_directory).resolve()
|
||||||
|
activation_secrets = base_directory / "activation_secrets"
|
||||||
upload_dir = activation_secrets / machine.secrets_upload_directory.lstrip("/")
|
upload_dir = activation_secrets / machine.secrets_upload_directory.lstrip("/")
|
||||||
upload_dir.mkdir(parents=True)
|
upload_dir.mkdir(parents=True)
|
||||||
machine.secret_facts_store.upload(upload_dir)
|
machine.secret_facts_store.upload(upload_dir)
|
||||||
@@ -70,7 +71,7 @@ def install_machine(opts: InstallOptions) -> None:
|
|||||||
upload_dir, phases=["activation", "users", "services"]
|
upload_dir, phases=["activation", "users", "services"]
|
||||||
)
|
)
|
||||||
|
|
||||||
partitioning_secrets = Path(base_directory) / "partitioning_secrets"
|
partitioning_secrets = base_directory / "partitioning_secrets"
|
||||||
partitioning_secrets.mkdir(parents=True)
|
partitioning_secrets.mkdir(parents=True)
|
||||||
machine.secret_vars_store.populate_dir(
|
machine.secret_vars_store.populate_dir(
|
||||||
partitioning_secrets, phases=["partitioning"]
|
partitioning_secrets, phases=["partitioning"]
|
||||||
|
|||||||
@@ -56,8 +56,8 @@ def morph_machine(
|
|||||||
).stdout.rstrip()
|
).stdout.rstrip()
|
||||||
archive_path = json.loads(archive_json)["path"]
|
archive_path = json.loads(archive_json)["path"]
|
||||||
|
|
||||||
with TemporaryDirectory(prefix="morph-") as temp_dir:
|
with TemporaryDirectory(prefix="morph-") as _temp_dir:
|
||||||
flakedir = Path(temp_dir) / "flake"
|
flakedir = Path(_temp_dir).resolve() / "flake"
|
||||||
|
|
||||||
flakedir.mkdir(parents=True, exist_ok=True)
|
flakedir.mkdir(parents=True, exist_ok=True)
|
||||||
run(["cp", "-r", archive_path + "/.", str(flakedir)])
|
run(["cp", "-r", archive_path + "/.", str(flakedir)])
|
||||||
|
|||||||
@@ -181,8 +181,8 @@ def execute_generator(
|
|||||||
raise ClanError(msg) from e
|
raise ClanError(msg) from e
|
||||||
|
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
with TemporaryDirectory(prefix="vars-") as tmp:
|
with TemporaryDirectory(prefix="vars-") as _tmpdir:
|
||||||
tmpdir = Path(tmp)
|
tmpdir = Path(_tmpdir).resolve()
|
||||||
tmpdir_in = tmpdir / "in"
|
tmpdir_in = tmpdir / "in"
|
||||||
tmpdir_prompts = tmpdir / "prompts"
|
tmpdir_prompts = tmpdir / "prompts"
|
||||||
tmpdir_out = tmpdir / "out"
|
tmpdir_out = tmpdir / "out"
|
||||||
|
|||||||
@@ -231,8 +231,8 @@ class SecretStore(StoreBase):
|
|||||||
if not self.needs_upload():
|
if not self.needs_upload():
|
||||||
log.info("Secrets already uploaded")
|
log.info("Secrets already uploaded")
|
||||||
return
|
return
|
||||||
with TemporaryDirectory(prefix="vars-upload-") as tempdir:
|
with TemporaryDirectory(prefix="vars-upload-") as _tempdir:
|
||||||
pass_dir = Path(tempdir)
|
pass_dir = Path(_tempdir).resolve()
|
||||||
self.populate_dir(pass_dir, phases)
|
self.populate_dir(pass_dir, phases)
|
||||||
upload_dir = Path(
|
upload_dir = Path(
|
||||||
self.machine.deployment["password-store"]["secretLocation"]
|
self.machine.deployment["password-store"]["secretLocation"]
|
||||||
|
|||||||
@@ -224,8 +224,8 @@ class SecretStore(StoreBase):
|
|||||||
if "partitioning" in phases:
|
if "partitioning" in phases:
|
||||||
msg = "Cannot upload partitioning secrets"
|
msg = "Cannot upload partitioning secrets"
|
||||||
raise NotImplementedError(msg)
|
raise NotImplementedError(msg)
|
||||||
with TemporaryDirectory(prefix="sops-upload-") as tempdir:
|
with TemporaryDirectory(prefix="sops-upload-") as _tempdir:
|
||||||
sops_upload_dir = Path(tempdir)
|
sops_upload_dir = Path(_tempdir).resolve()
|
||||||
self.populate_dir(sops_upload_dir, phases)
|
self.populate_dir(sops_upload_dir, phases)
|
||||||
upload(self.machine.target_host, sops_upload_dir, Path("/var/lib/sops-nix"))
|
upload(self.machine.target_host, sops_upload_dir, Path("/var/lib/sops-nix"))
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,8 @@ pythonRuntime.pkgs.buildPythonApplication {
|
|||||||
# Define and expose the tests and checks to run in CI
|
# Define and expose the tests and checks to run in CI
|
||||||
passthru.tests =
|
passthru.tests =
|
||||||
(lib.mapAttrs' (n: lib.nameValuePair "clan-dep-${n}") testRuntimeDependenciesMap)
|
(lib.mapAttrs' (n: lib.nameValuePair "clan-dep-${n}") testRuntimeDependenciesMap)
|
||||||
// {
|
// lib.optionalAttrs (!stdenv.isDarwin) {
|
||||||
|
# disabled on macOS until we fix all remaining issues
|
||||||
clan-pytest-without-core =
|
clan-pytest-without-core =
|
||||||
runCommand "clan-pytest-without-core"
|
runCommand "clan-pytest-without-core"
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -209,12 +209,13 @@ class ClanFlake:
|
|||||||
@pytest.fixture(scope="session")
|
@pytest.fixture(scope="session")
|
||||||
def minimal_flake_template() -> Iterator[ClanFlake]:
|
def minimal_flake_template() -> Iterator[ClanFlake]:
|
||||||
with (
|
with (
|
||||||
tempfile.TemporaryDirectory(prefix="flake-") as home,
|
tempfile.TemporaryDirectory(prefix="flake-") as _home,
|
||||||
pytest.MonkeyPatch.context() as mp,
|
pytest.MonkeyPatch.context() as mp,
|
||||||
):
|
):
|
||||||
mp.setenv("HOME", home)
|
home = Path(_home).resolve()
|
||||||
|
mp.setenv("HOME", str(home))
|
||||||
flake = ClanFlake(
|
flake = ClanFlake(
|
||||||
temporary_home=Path(home),
|
temporary_home=home,
|
||||||
flake_template=clan_templates(TemplateType.CLAN) / "minimal",
|
flake_template=clan_templates(TemplateType.CLAN) / "minimal",
|
||||||
)
|
)
|
||||||
flake.init_from_template()
|
flake.init_from_template()
|
||||||
@@ -248,7 +249,6 @@ def create_flake(
|
|||||||
machines: list[str] | None = None,
|
machines: list[str] | None = None,
|
||||||
# alternatively specify the machines directly including their config
|
# alternatively specify the machines directly including their config
|
||||||
machine_configs: dict[str, dict] | None = None,
|
machine_configs: dict[str, dict] | None = None,
|
||||||
remote: bool = False,
|
|
||||||
) -> Iterator[FlakeForTest]:
|
) -> Iterator[FlakeForTest]:
|
||||||
"""
|
"""
|
||||||
Creates a flake with the given name and machines.
|
Creates a flake with the given name and machines.
|
||||||
@@ -313,11 +313,7 @@ def create_flake(
|
|||||||
|
|
||||||
init_git(monkeypatch, flake)
|
init_git(monkeypatch, flake)
|
||||||
|
|
||||||
if remote:
|
yield FlakeForTest(flake)
|
||||||
with tempfile.TemporaryDirectory(prefix="flake-"):
|
|
||||||
yield FlakeForTest(flake)
|
|
||||||
else:
|
|
||||||
yield FlakeForTest(flake)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|||||||
@@ -76,16 +76,20 @@ exec {bash} -l "${{@}}"
|
|||||||
login_shell.chmod(0o755)
|
login_shell.chmod(0o755)
|
||||||
|
|
||||||
lib_path = None
|
lib_path = None
|
||||||
assert platform == "linux", (
|
|
||||||
f"we do not support the ld_preload trick on non-linux just now. Got {platform}"
|
extension = ".so"
|
||||||
)
|
if platform == "darwin":
|
||||||
|
extension = ".dylib"
|
||||||
|
link_lib_flag = "-shared"
|
||||||
|
if platform == "darwin":
|
||||||
|
link_lib_flag = "-dynamiclib"
|
||||||
|
|
||||||
# This enforces a login shell by overriding the login shell of `getpwnam(3)`
|
# This enforces a login shell by overriding the login shell of `getpwnam(3)`
|
||||||
lib_path = tmpdir / "libgetpwnam-preload.so"
|
lib_path = tmpdir / f"libgetpwnam-preload.${extension}"
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
[
|
[
|
||||||
os.environ.get("CC", "cc"),
|
os.environ.get("CC", "cc"),
|
||||||
"-shared",
|
link_lib_flag,
|
||||||
"-o",
|
"-o",
|
||||||
lib_path,
|
lib_path,
|
||||||
str(test_root / "getpwnam-preload.c"),
|
str(test_root / "getpwnam-preload.c"),
|
||||||
@@ -109,8 +113,12 @@ def sshd(
|
|||||||
sshd = shutil.which("sshd")
|
sshd = shutil.which("sshd")
|
||||||
assert sshd is not None, "no sshd binary found"
|
assert sshd is not None, "no sshd binary found"
|
||||||
env = {}
|
env = {}
|
||||||
|
preload_env_name = "LD_PRELOAD"
|
||||||
|
if platform == "darwin":
|
||||||
|
preload_env_name = "DYLD_INSERT_LIBRARIES"
|
||||||
|
|
||||||
env = {
|
env = {
|
||||||
"LD_PRELOAD": str(sshd_config.preload_lib),
|
preload_env_name: str(sshd_config.preload_lib),
|
||||||
"LOGIN_SHELL": str(sshd_config.login_shell),
|
"LOGIN_SHELL": str(sshd_config.login_shell),
|
||||||
}
|
}
|
||||||
proc = command.run(
|
proc = command.run(
|
||||||
|
|||||||
@@ -11,12 +11,13 @@ log = logging.getLogger(__name__)
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]:
|
def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]:
|
||||||
with tempfile.TemporaryDirectory(prefix="pytest-home-") as dirpath:
|
with tempfile.TemporaryDirectory(prefix="pytest-home-") as _dirpath:
|
||||||
|
dirpath = Path(_dirpath).resolve()
|
||||||
xdg_runtime_dir = os.getenv("XDG_RUNTIME_DIR")
|
xdg_runtime_dir = os.getenv("XDG_RUNTIME_DIR")
|
||||||
monkeypatch.setenv("HOME", str(dirpath))
|
monkeypatch.setenv("HOME", str(dirpath))
|
||||||
monkeypatch.setenv("XDG_CONFIG_HOME", str(Path(dirpath) / ".config"))
|
monkeypatch.setenv("XDG_CONFIG_HOME", str(dirpath / ".config"))
|
||||||
|
|
||||||
runtime_dir = Path(dirpath) / "xdg-runtime-dir"
|
runtime_dir = dirpath / "xdg-runtime-dir"
|
||||||
runtime_dir.mkdir()
|
runtime_dir.mkdir()
|
||||||
runtime_dir.chmod(0o700)
|
runtime_dir.chmod(0o700)
|
||||||
|
|
||||||
@@ -34,10 +35,10 @@ def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]:
|
|||||||
|
|
||||||
monkeypatch.setenv("XDG_RUNTIME_DIR", str(runtime_dir))
|
monkeypatch.setenv("XDG_RUNTIME_DIR", str(runtime_dir))
|
||||||
monkeypatch.chdir(str(dirpath))
|
monkeypatch.chdir(str(dirpath))
|
||||||
yield Path(dirpath)
|
yield dirpath
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def temp_dir() -> Iterator[Path]:
|
def temp_dir() -> Iterator[Path]:
|
||||||
with tempfile.TemporaryDirectory(prefix="pytest-") as dirpath:
|
with tempfile.TemporaryDirectory(prefix="pytest-") as _dirpath:
|
||||||
yield Path(dirpath)
|
yield Path(_dirpath).resolve()
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from tempfile import TemporaryDirectory
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from clan_cli.clan_uri import ClanURI
|
from clan_cli.clan_uri import ClanURI
|
||||||
@@ -36,14 +35,13 @@ def test_firefox_strip_uri() -> None:
|
|||||||
assert uri.get_url() == "git+https://git.clan.lol/clan/democlan.git"
|
assert uri.get_url() == "git+https://git.clan.lol/clan/democlan.git"
|
||||||
|
|
||||||
|
|
||||||
def test_local_uri() -> None:
|
def test_local_uri(temp_dir: Path) -> None:
|
||||||
with TemporaryDirectory(prefix="clan_test") as tempdir:
|
flake_nix = temp_dir / "flake.nix"
|
||||||
flake_nix = Path(tempdir) / "flake.nix"
|
flake_nix.write_text("outputs = _: {}")
|
||||||
flake_nix.write_text("outputs = _: {}")
|
|
||||||
|
|
||||||
# Create a ClanURI object from a local URI
|
# Create a ClanURI object from a local URI
|
||||||
uri = ClanURI.from_str(f"clan://file://{tempdir}")
|
uri = ClanURI.from_str(f"clan://file://{temp_dir}")
|
||||||
assert uri.flake.path == Path(tempdir)
|
assert uri.flake.path == temp_dir
|
||||||
|
|
||||||
|
|
||||||
def test_is_remote() -> None:
|
def test_is_remote() -> None:
|
||||||
@@ -79,25 +77,23 @@ def test_from_str_remote() -> None:
|
|||||||
assert uri.flake.identifier == "https://example.com"
|
assert uri.flake.identifier == "https://example.com"
|
||||||
|
|
||||||
|
|
||||||
def test_from_str_local() -> None:
|
def test_from_str_local(temp_dir: Path) -> None:
|
||||||
with TemporaryDirectory(prefix="clan_test") as tempdir:
|
flake_nix = temp_dir / "flake.nix"
|
||||||
flake_nix = Path(tempdir) / "flake.nix"
|
flake_nix.write_text("outputs = _: {}")
|
||||||
flake_nix.write_text("outputs = _: {}")
|
|
||||||
|
|
||||||
uri = ClanURI.from_str(url=tempdir, machine_name="myVM")
|
uri = ClanURI.from_str(url=str(temp_dir), machine_name="myVM")
|
||||||
assert uri.get_url().endswith(tempdir)
|
assert uri.get_url().endswith(str(temp_dir))
|
||||||
assert uri.machine_name == "myVM"
|
assert uri.machine_name == "myVM"
|
||||||
assert uri.flake.is_local
|
assert uri.flake.is_local
|
||||||
assert str(uri.flake).endswith(tempdir) # type: ignore
|
assert str(uri.flake).endswith(str(temp_dir))
|
||||||
|
|
||||||
|
|
||||||
def test_from_str_local_no_machine() -> None:
|
def test_from_str_local_no_machine(temp_dir: Path) -> None:
|
||||||
with TemporaryDirectory(prefix="clan_test") as tempdir:
|
flake_nix = temp_dir / "flake.nix"
|
||||||
flake_nix = Path(tempdir) / "flake.nix"
|
flake_nix.write_text("outputs = _: {}")
|
||||||
flake_nix.write_text("outputs = _: {}")
|
|
||||||
|
|
||||||
uri = ClanURI.from_str(tempdir)
|
uri = ClanURI.from_str(str(temp_dir))
|
||||||
assert uri.get_url().endswith(tempdir)
|
assert uri.get_url().endswith(str(temp_dir))
|
||||||
assert uri.machine_name == "defaultVM"
|
assert uri.machine_name == "defaultVM"
|
||||||
assert uri.flake.is_local
|
assert uri.flake.is_local
|
||||||
assert str(uri.flake).endswith(tempdir) # type: ignore
|
assert str(uri.flake).endswith(str(temp_dir))
|
||||||
|
|||||||
@@ -18,7 +18,11 @@ V = TypeVar(
|
|||||||
) # Value type, bound to GObject.GObject or its subclasses
|
) # Value type, bound to GObject.GObject or its subclasses
|
||||||
|
|
||||||
|
|
||||||
class GKVStore(GObject.GObject, Gio.ListModel, Generic[K, V]):
|
# GObject and Gio.ListModel are not compatible with mypy, so we need to ignore the errors
|
||||||
|
# clan_vm_manager/components/gkvstore.py:21: error: Definition of "newv" in base class "Object" is incompatible with definition in base class "GInterface" [misc]
|
||||||
|
# clan_vm_manager/components/gkvstore.py:21: error: Definition of "install_properties" in base class "Object" is incompatible with definition in base class "GInterface" [misc]
|
||||||
|
# clan_vm_manager/components/gkvstore.py:21: error: Definition of "getv" in base class "Object" is incompatible with definition in base class "GInterface" [misc]
|
||||||
|
class GKVStore(GObject.GObject, Gio.ListModel, Generic[K, V]): # type: ignore[misc]
|
||||||
"""
|
"""
|
||||||
A simple key-value store that implements the Gio.ListModel interface, with generic types for keys and values.
|
A simple key-value store that implements the Gio.ListModel interface, with generic types for keys and values.
|
||||||
Only use self[key] and del self[key] for accessing the items for better performance.
|
Only use self[key] and del self[key] for accessing the items for better performance.
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
setuptools,
|
setuptools,
|
||||||
webkitgtk_6_0,
|
webkitgtk_6_0,
|
||||||
wrapGAppsHook,
|
wrapGAppsHook,
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
source = ./.;
|
source = ./.;
|
||||||
@@ -32,14 +34,18 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
# Dependencies that are directly used in the project but nor from internal python packages
|
# Dependencies that are directly used in the project but nor from internal python packages
|
||||||
externalPythonDeps = [
|
externalPythonDeps =
|
||||||
pygobject3
|
[
|
||||||
pygobject-stubs
|
pygobject3
|
||||||
gtk4
|
pygobject-stubs
|
||||||
libadwaita
|
gtk4
|
||||||
webkitgtk_6_0
|
libadwaita
|
||||||
adwaita-icon-theme
|
adwaita-icon-theme
|
||||||
] ++ clan-cli.propagatedBuildInputs;
|
]
|
||||||
|
++ clan-cli.propagatedBuildInputs
|
||||||
|
++ lib.optionals (!stdenv.isDarwin) [
|
||||||
|
webkitgtk_6_0
|
||||||
|
];
|
||||||
|
|
||||||
# Deps including python packages from the local project
|
# Deps including python packages from the local project
|
||||||
allPythonDeps = [ (python3.pkgs.toPythonModule clan-cli) ] ++ externalPythonDeps;
|
allPythonDeps = [ (python3.pkgs.toPythonModule clan-cli) ] ++ externalPythonDeps;
|
||||||
|
|||||||
@@ -8,17 +8,16 @@
|
|||||||
system,
|
system,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
if lib.elem system lib.platforms.darwin then
|
{
|
||||||
{ }
|
devShells.clan-vm-manager = pkgs.callPackage ./shell.nix {
|
||||||
else
|
inherit (config.packages) clan-vm-manager;
|
||||||
{
|
|
||||||
devShells.clan-vm-manager = pkgs.callPackage ./shell.nix {
|
|
||||||
inherit (config.packages) 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;
|
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (system != lib.platforms.darwin) {
|
||||||
|
packages.clan-vm-manager = pkgs.python3.pkgs.callPackage ./default.nix {
|
||||||
|
inherit (config.packages) clan-cli;
|
||||||
|
};
|
||||||
|
|
||||||
|
checks = config.packages.clan-vm-manager.tests;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user