clan: improve machine completions
All checks were successful
checks / checks-impure (pull_request) Successful in 2m46s
buildbot/nix-eval Build done.

In recent nix versions the `nix flake show` command busts the eval
cache, which made the function that used to be faster, slower.

On benchmarks the completion was around 180-200ms.
This commit is contained in:
a-kenji 2024-06-05 13:32:23 +02:00
parent 5024973896
commit 49e67ac46c

View File

@ -44,23 +44,23 @@ def complete_machines(
def run_cmd() -> None:
try:
# In my tests this was consistently faster than:
# nix eval .#nixosConfigurations --apply builtins.attrNames
cmd = ["nix", "flake", "show", "--system", "no-eval", "--json"]
if (clan_dir_result := clan_dir(None)) is not None:
cmd.append(clan_dir_result)
result = subprocess.run(
cmd,
check=True,
capture_output=True,
text=True,
flake = clan_dir_result
else:
flake = "."
services_result = json.loads(
run(
nix_eval(
flags=[
f"{flake}#nixosConfigurations",
"--apply",
"builtins.attrNames",
],
),
).stdout.strip()
)
data = json.loads(result.stdout)
try:
machines.extend(data.get("nixosConfigurations").keys())
except KeyError:
pass
machines.extend(services_result)
except subprocess.CalledProcessError:
pass