61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
import argparse
|
|
import dataclasses
|
|
import json
|
|
import logging
|
|
from pathlib import Path
|
|
|
|
from clan_cli.api import API
|
|
|
|
from ..cmd import run_no_stdout
|
|
from ..completions import add_dynamic_completer, complete_machines
|
|
from ..nix import nix_config, nix_eval
|
|
from .types import machine_name_type
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
@dataclasses.dataclass
|
|
class MachineInfo:
|
|
machine_name: str
|
|
machine_description: str | None
|
|
machine_icon: str | None
|
|
|
|
|
|
@API.register
|
|
def show_machine(flake_url: str | Path, machine_name: str) -> MachineInfo:
|
|
config = nix_config()
|
|
system = config["system"]
|
|
cmd = nix_eval(
|
|
[
|
|
f"{flake_url}#clanInternals.machines.{system}.{machine_name}",
|
|
"--apply",
|
|
"machine: { inherit (machine.config.clan.core) machineDescription machineIcon machineName; }",
|
|
"--json",
|
|
]
|
|
)
|
|
proc = run_no_stdout(cmd)
|
|
res = proc.stdout.strip()
|
|
machine = json.loads(res)
|
|
|
|
return MachineInfo(
|
|
machine_name=machine.get("machineName"),
|
|
machine_description=machine.get("machineDescription", None),
|
|
machine_icon=machine.get("machineIcon", None),
|
|
)
|
|
|
|
|
|
def show_command(args: argparse.Namespace) -> None:
|
|
flake_path = Path(args.flake).resolve()
|
|
machine = show_machine(flake_path, args.machine)
|
|
print(f"Name: {machine.machine_name}")
|
|
print(f"Description: {machine.machine_description or ''}")
|
|
print(f"Icon: {machine.machine_icon or ''}")
|
|
|
|
|
|
def register_show_parser(parser: argparse.ArgumentParser) -> None:
|
|
parser.set_defaults(func=show_command)
|
|
machine_parser = parser.add_argument(
|
|
"machine", help="the name of the machine", type=machine_name_type
|
|
)
|
|
add_dynamic_completer(machine_parser, complete_machines)
|