When running for example `clan networks list` we now get a reasonable
error message, instead of:
```
Traceback (most recent call last):
File "/nix/store/8ygq8bfxqydk2917mmg32wy9wb0qzzzd-clan-cli/bin/.clan-wrapped", line 9, in <module>
sys.exit(main())
~~~~^^
File "/nix/store/8ygq8bfxqydk2917mmg32wy9wb0qzzzd-clan-cli/lib/python3.13/site-packages/clan_cli/cli.py", line 516, in main
args.func(args)
~~~~~~~~~^^^^^^
File "/nix/store/8ygq8bfxqydk2917mmg32wy9wb0qzzzd-clan-cli/lib/python3.13/site-packages/clan_cli/network/list.py", line 12, in list_command
networks = networks_from_flake(flake)
File "/nix/store/8ygq8bfxqydk2917mmg32wy9wb0qzzzd-clan-cli/lib/python3.13/site-packages/clan_lib/network/network.py", line 106, in networks_from_flake
networks_ = flake.select("clan.exports.instances.*.networking")
^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'select'
```
This adds a (for now hidden) clan network command that exposes list,
ping, overview subcommands to get informations about configured
networks.
ClanServices can now use the exports to define network specific
information.
This is not the complete feature yet, as we are lacking more tests and
documentation, but merging this now makes it easier to iterate.
This helps to reduce import cycles in python
If ANY python module from clan_cli is imported all the imports of the __init__.py are executed leading to a lot of cycles
Currently the template help has the following interface:
```
usage: clan [-h] [SUBCOMMAND]
The clan cli tool
positional arguments:
{show,backups,b,flakes,f,templates,flash,ssh,secrets,facts,vars,va,machines,m,vms,select,se,state,st}
show Show meta information about the clan
backups (b) Manage backups of clan machines
flakes (f) Create a clan flake inside the current directory
templates Subcommands to interact with templates
flash Flashes your machine to an USB drive
ssh Ssh to a remote machine
secrets Manage secrets
facts Manage facts
vars (va) Manage vars
machines (m) Manage machines and their configuration
vms Manage virtual machines
select (se) Select nixos values from the flake
state (st) Query state information about machines
options:
-h, --help show this help message and exit
Online reference for the clan cli tool: ]8;;https://docs.clan.lol/reference/cli\https://docs.clan.lol/reference/cli]8;;\
For more detailed information, visit: ]8;;https://docs.clan.lol\https://docs.clan.lol]8;;\
```
Changed sandbox_exec_cmd to return a context manager that automatically
handles profile file cleanup. This ensures the temporary profile is
always removed, even if exceptions occur.
Adds macOS sandboxing support similar to Linux bubblewrap implementation:
- Created clan_lib/sandbox_exec module with sandbox profile creation
- Implemented file system isolation allowing only tmpdir and nix store access
- Added network restrictions (deny outbound except localhost)
- Integrated sandbox-exec command into vars generation on macOS
- Added comprehensive test suite for macOS sandbox functionality
- Fixed working directory handling for generators writing to CWD