replace environment variable with nixpkgs directory
In this directory we generate all the files that we need to load nixpkgs. This seems more robust than all those environment variables that may or not may be set.
This commit is contained in:
@@ -24,3 +24,19 @@ def user_config_dir() -> Path:
|
||||
return Path(os.path.expanduser("~/Library/Application Support/"))
|
||||
else:
|
||||
return Path(os.getenv("XDG_CONFIG_HOME", os.path.expanduser("~/.config")))
|
||||
|
||||
|
||||
def module_root() -> Path:
|
||||
return Path(__file__).parent
|
||||
|
||||
|
||||
def flake_registry() -> Path:
|
||||
return module_root() / "nixpkgs" / "flake-registry.json"
|
||||
|
||||
|
||||
def nixpkgs() -> Path:
|
||||
return (module_root() / "nixpkgs" / "path").resolve()
|
||||
|
||||
|
||||
def unfree_nixpkgs() -> Path:
|
||||
return module_root() / "nixpkgs" / "unfree"
|
||||
|
||||
@@ -1,10 +1,42 @@
|
||||
import os
|
||||
|
||||
from .dirs import flake_registry, unfree_nixpkgs
|
||||
|
||||
|
||||
def nix_shell(packages: list[str], cmd: list[str]) -> list[str]:
|
||||
flake = os.environ.get("CLAN_FLAKE")
|
||||
# in unittest we will have all binaries provided
|
||||
if flake is None:
|
||||
# we cannot use nix-shell inside the nix sandbox
|
||||
# in our tests we just make sure we have all the packages
|
||||
if os.environ.get("IN_NIX_SANDBOX"):
|
||||
return cmd
|
||||
wrapped_packages = [f"path:{flake}#{p}" for p in packages]
|
||||
return ["nix", "shell"] + wrapped_packages + ["-c"] + cmd
|
||||
wrapped_packages = [f"nixpkgs#{p}" for p in packages]
|
||||
return (
|
||||
[
|
||||
"nix",
|
||||
"shell",
|
||||
"--extra-experimental-features",
|
||||
"nix-command flakes",
|
||||
"--flake-registry",
|
||||
str(flake_registry()),
|
||||
]
|
||||
+ wrapped_packages
|
||||
+ ["-c"]
|
||||
+ cmd
|
||||
)
|
||||
|
||||
|
||||
def unfree_nix_shell(packages: list[str], cmd: list[str]) -> list[str]:
|
||||
if os.environ.get("IN_NIX_SANDBOX"):
|
||||
return cmd
|
||||
return (
|
||||
[
|
||||
"nix",
|
||||
"shell",
|
||||
"--extra-experimental-features",
|
||||
"nix-command flakes",
|
||||
"-f",
|
||||
str(unfree_nixpkgs()),
|
||||
]
|
||||
+ packages
|
||||
+ ["-c"]
|
||||
+ cmd
|
||||
)
|
||||
|
||||
@@ -9,7 +9,7 @@ from tempfile import TemporaryDirectory
|
||||
from typing import Any, Iterator, Optional
|
||||
|
||||
from ..errors import ClanError
|
||||
from ..nix import nix_shell
|
||||
from ..nix import nix_shell, unfree_nix_shell
|
||||
|
||||
|
||||
def try_bind_port(port: int) -> bool:
|
||||
@@ -87,7 +87,10 @@ def zerotier_controller() -> Iterator[ZerotierController]:
|
||||
controller_port = find_free_port(range(10000, 65535))
|
||||
if controller_port is None:
|
||||
raise ClanError("cannot find a free port for zerotier controller")
|
||||
cmd = nix_shell(["bash", "zerotierone"], ["bash", "-c", "command -v zerotier-one"])
|
||||
|
||||
cmd = unfree_nix_shell(
|
||||
["bash", "zerotierone"], ["bash", "-c", "command -v zerotier-one"]
|
||||
)
|
||||
res = subprocess.run(
|
||||
cmd,
|
||||
check=True,
|
||||
@@ -102,7 +105,6 @@ def zerotier_controller() -> Iterator[ZerotierController]:
|
||||
raise ClanError(
|
||||
f"zerotier-one executable needs to come from /nix/store: {zerotier_exe}"
|
||||
)
|
||||
|
||||
with TemporaryDirectory() as d:
|
||||
tempdir = Path(d)
|
||||
home = tempdir / "zerotier-one"
|
||||
|
||||
Reference in New Issue
Block a user