Compare commits

..

664 Commits

Author SHA1 Message Date
Jörg Thalheim
a2e4b98a93 clan-cli/secrets: suggest clan vars keygen instead 2025-10-07 11:12:04 +02:00
Louis Opter
25ce97dd5e clan-cli/secrets: update some error message in encrypt_secret
Found that while reading through some code.
2025-10-07 11:09:00 +02:00
a-kenji
bd361b2744 docs: Fix nixpkgs hierarchy 2025-10-07 11:09:00 +02:00
clan-bot
ac901f5656 Update nixpkgs-dev in devFlake 2025-10-07 11:09:00 +02:00
clan-bot
8339ad605c Update clan-core-for-checks in devFlake 2025-10-07 11:09:00 +02:00
clan-bot
3473aaa440 Update clan-core-for-checks in devFlake 2025-10-07 11:09:00 +02:00
clan-bot
e983b10331 Update clan-core-for-checks in devFlake 2025-10-07 11:09:00 +02:00
clan-bot
fcf5ccd115 Update nixpkgs-dev in devFlake 2025-10-07 11:09:00 +02:00
clan-bot
6e7a67c830 Update clan-core-for-checks in devFlake 2025-10-06 15:01:51 +00:00
DavHau
1cb7c7d25f Merge pull request 'tests: disable state-version generation in all python tests' (#5399) from dave into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5399
2025-10-06 10:13:02 +00:00
DavHau
43b1744528 tests: disable state-version generation in all python tests
This improves the performance of tests, as there are less vars operations to perform.
2025-10-06 17:08:42 +07:00
clan-bot
27d1dd4400 Merge pull request 'Update clan-core-for-checks in devFlake' (#5400) from update-devFlake-clan-core-for-checks into main 2025-10-06 10:06:25 +00:00
clan-bot
5d27af51d8 Update clan-core-for-checks in devFlake 2025-10-06 10:01:52 +00:00
clan-bot
c737271585 Merge pull request 'Update clan-core-for-checks in devFlake' (#5398) from update-devFlake-clan-core-for-checks into main 2025-10-06 05:07:22 +00:00
clan-bot
f504a63e93 Update clan-core-for-checks in devFlake 2025-10-06 05:01:53 +00:00
clan-bot
ca53d14656 Merge pull request 'Update clan-core-for-checks in devFlake' (#5397) from update-devFlake-clan-core-for-checks into main 2025-10-06 00:09:06 +00:00
clan-bot
09d8a2b3a9 Update clan-core-for-checks in devFlake 2025-10-06 00:01:51 +00:00
Michael Hoang
2a67b09f51 Merge pull request 'test-fixtures: move to devFlake' (#5277) from push-mmqvttmrxtlk into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5277
2025-10-05 21:52:33 +00:00
Michael Hoang
3295e1561d checks: use new clan-core-for-checks to fix tests
I manually updated `flake.lock` and then evaluated the flake input to get the
correct NAR hash and last modified time.
2025-10-05 23:48:08 +02:00
Michael Hoang
9d0cec1422 checks/installation: don't require privateInputs for eval 2025-10-05 23:26:33 +02:00
Michael Hoang
dc66321a72 test-fixtures: move to devFlake 2025-10-05 23:26:24 +02:00
Michael Hoang
01baa46b36 flake: make privateInputs actually the inputs 2025-10-05 22:09:44 +02:00
clan-bot
dd0acfb628 Merge pull request 'Update nixpkgs-dev in devFlake' (#5395) from update-devFlake-nixpkgs-dev into main 2025-10-05 20:08:47 +00:00
clan-bot
ab14538c28 Merge pull request 'Update clan-core-for-checks in devFlake' (#5394) from update-devFlake-clan-core-for-checks into main 2025-10-05 20:06:58 +00:00
clan-bot
331287bfb6 Update nixpkgs-dev in devFlake 2025-10-05 20:02:08 +00:00
clan-bot
02cfe180db Update clan-core-for-checks in devFlake 2025-10-05 20:01:48 +00:00
clan-bot
b681737dce Merge pull request 'Update clan-core-for-checks in devFlake' (#5393) from update-devFlake-clan-core-for-checks into main 2025-10-05 15:07:57 +00:00
clan-bot
99011d2514 Update clan-core-for-checks in devFlake 2025-10-05 15:01:51 +00:00
hsjobeki
8aa4749a3e Merge pull request 'docs: check init htmlproofer' (#5392) from docs-simplify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5392
2025-10-05 12:16:54 +00:00
Johannes Kirschbauer
359582118c docs: fix broken links 2025-10-05 14:14:12 +02:00
Johannes Kirschbauer
75c8feb42a docs: fix rss link 2025-10-05 14:14:12 +02:00
Johannes Kirschbauer
fcfd56c00c docs: check init htmlproofer
Checks integrity of internal links
post-rendering for problems that might have slipped through
we noticed a set of edge cases where the builtin link checking doesnt work
2025-10-05 14:14:12 +02:00
clan-bot
d598e19da4 Merge pull request 'Update clan-core-for-checks in devFlake' (#5390) from update-devFlake-clan-core-for-checks into main 2025-10-05 10:10:51 +00:00
clan-bot
23a07f15ab Merge pull request 'Update nixpkgs-dev in devFlake' (#5391) from update-devFlake-nixpkgs-dev into main 2025-10-05 10:10:50 +00:00
clan-bot
a3e34a9a1a Update nixpkgs-dev in devFlake 2025-10-05 10:02:09 +00:00
clan-bot
4991965ed9 Update clan-core-for-checks in devFlake 2025-10-05 10:01:51 +00:00
clan-bot
7560a07458 Merge pull request 'Update sops-nix' (#5384) from update-sops-nix into main 2025-10-05 05:09:54 +00:00
clan-bot
ee3b126a04 Merge pull request 'Update nixpkgs-dev in devFlake' (#5386) from update-devFlake-nixpkgs-dev into main 2025-10-05 05:09:12 +00:00
clan-bot
9c4af81b2f Merge pull request 'Update clan-core-for-checks in devFlake' (#5385) from update-devFlake-clan-core-for-checks into main 2025-10-05 05:09:09 +00:00
clan-bot
83878ceeda Update nixpkgs-dev in devFlake 2025-10-05 05:02:24 +00:00
clan-bot
6206b4a636 Update clan-core-for-checks in devFlake 2025-10-05 05:02:06 +00:00
clan-bot
da151a1ff4 Update sops-nix 2025-10-05 05:02:00 +00:00
clan-bot
dd686ed6dd Merge pull request 'Update clan-core-for-checks in devFlake' (#5383) from update-devFlake-clan-core-for-checks into main 2025-10-05 00:08:11 +00:00
clan-bot
93908bfa54 Update clan-core-for-checks in devFlake 2025-10-05 00:01:55 +00:00
clan-bot
e28b49317e Merge pull request 'Update clan-core-for-checks in devFlake' (#5381) from update-devFlake-clan-core-for-checks into main 2025-10-04 20:06:38 +00:00
clan-bot
6e7a96e762 Update clan-core-for-checks in devFlake 2025-10-04 20:01:49 +00:00
clan-bot
a026ead29d Merge pull request 'Update clan-core-for-checks in devFlake' (#5379) from update-devFlake-clan-core-for-checks into main 2025-10-04 15:06:03 +00:00
clan-bot
e1b8086c40 Update clan-core-for-checks in devFlake 2025-10-04 15:01:51 +00:00
clan-bot
9847d4558b Merge pull request 'Update clan-core-for-checks in devFlake' (#5377) from update-devFlake-clan-core-for-checks into main 2025-10-04 10:06:15 +00:00
clan-bot
eef1e4eca9 Merge pull request 'Update nixpkgs-dev in devFlake' (#5378) from update-devFlake-nixpkgs-dev into main 2025-10-04 10:05:59 +00:00
clan-bot
b7dd116136 Update nixpkgs-dev in devFlake 2025-10-04 10:02:09 +00:00
clan-bot
8c6d096fa7 Update clan-core-for-checks in devFlake 2025-10-04 10:01:52 +00:00
clan-bot
81d5132ac6 Merge pull request 'Update clan-core-for-checks in devFlake' (#5376) from update-devFlake-clan-core-for-checks into main 2025-10-04 05:06:05 +00:00
clan-bot
4c51a62b2a Update clan-core-for-checks in devFlake 2025-10-04 05:01:52 +00:00
clan-bot
e587735050 Merge pull request 'Update clan-core-for-checks in devFlake' (#5375) from update-devFlake-clan-core-for-checks into main 2025-10-04 00:06:32 +00:00
clan-bot
808e42f9b5 Update clan-core-for-checks in devFlake 2025-10-04 00:01:53 +00:00
Luis Hebendanz
fd62b4e9b3 Merge pull request 'clan_lib: Add clan_module_to_llm_function for ai integration' (#5361) from ai_support2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5361
2025-10-03 21:20:43 +00:00
clan-bot
dc1dd9aa3f Merge pull request 'Update clan-core-for-checks in devFlake' (#5373) from update-devFlake-clan-core-for-checks into main 2025-10-03 20:06:35 +00:00
clan-bot
67b1f36a38 Merge pull request 'Update nixpkgs-dev in devFlake' (#5374) from update-devFlake-nixpkgs-dev into main 2025-10-03 20:06:25 +00:00
clan-bot
9de5607394 Update nixpkgs-dev in devFlake 2025-10-03 20:02:08 +00:00
clan-bot
6e994d57c6 Update clan-core-for-checks in devFlake 2025-10-03 20:01:49 +00:00
hsjobeki
90c8f674e1 Merge pull request 'docs: move services into its reserved category' (#5372) from docs-simplify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5372
2025-10-03 19:18:42 +00:00
Johannes Kirschbauer
3068a9e16a docs: move service definition into explizit markdown file 2025-10-03 21:16:32 +02:00
Johannes Kirschbauer
6c972c1e19 docs: move services into its reserved category 2025-10-03 21:02:18 +02:00
hsjobeki
807e3b2369 Merge pull request 'docs: fix contributing.md' (#5371) from docs-simplify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5371
2025-10-03 18:54:36 +00:00
Johannes Kirschbauer
f9c58b4912 docs: fix contributing.md 2025-10-03 20:51:04 +02:00
hsjobeki
3fc2a55468 Merge pull request 'docs: consistent options reference' (#5370) from docs-simplify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5370
2025-10-03 17:01:58 +00:00
Johannes Kirschbauer
8d9d4c9089 docs: fix absolute links need to be absolute 2025-10-03 18:59:47 +02:00
Johannes Kirschbauer
76d1d9b167 docs: consistent options reference 2025-10-03 18:17:13 +02:00
hsjobeki
652eb87bcc Merge pull request 'docs: move official services into subfolder' (#5369) from docs-simplify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5369
2025-10-03 15:59:02 +00:00
Johannes Kirschbauer
028cf2a00c docs: move official services into subfolder 2025-10-03 17:56:47 +02:00
hsjobeki
c04e8b6ead Merge pull request 'docs: use absolute page URI' (#5368) from docs-simplify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5368
2025-10-03 15:36:00 +00:00
Johannes Kirschbauer
08c2d574ce docs: use absolute page URI
This allows us to migrate to any framework that uses normal uri's
We just need to strip all .md endings in a simple grep command
2025-10-03 17:31:42 +02:00
hsjobeki
cf8720e4dd Merge pull request 'docs: decisions harmonize with file tree' (#5367) from docs-simplify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5367
2025-10-03 15:08:28 +00:00
clan-bot
2bca2b2b7e Merge pull request 'Update clan-core-for-checks in devFlake' (#5366) from update-devFlake-clan-core-for-checks into main 2025-10-03 15:06:21 +00:00
Johannes Kirschbauer
f9c8ed74e1 docs: decisions harmonize with file tree 2025-10-03 17:06:14 +02:00
clan-bot
1a488dd2ad Update clan-core-for-checks in devFlake 2025-10-03 15:01:51 +00:00
hsjobeki
b58f37011d Merge pull request 'docs: move getting-started out of guides' (#5365) from docs-simplify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5365
2025-10-03 14:53:59 +00:00
Johannes Kirschbauer
b1f6dd58f3 docs: move getting-started out of guides 2025-10-03 16:50:10 +02:00
hsjobeki
d634f2c9ae Merge pull request 'docs: unify markdown files with documentation titles' (#5364) from docs-simplify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5364
2025-10-03 14:31:29 +00:00
Johannes Kirschbauer
90b1033870 docs: unify markdown files with documentation titles
This is preparational work to reduce the surface are of the different mappings

We want to reduce the following:

/guides/secrets.md -> Guides/getting started/How to use flakes with sops -> with '# Secrets Management'

- Title
- URI
- Filepath

should follow a stricter pattern to make it easy to maintain
2025-10-03 16:08:20 +02:00
Michael Hoang
d20ed9ec0c Merge pull request 'clanServices/sshd: readd default' (#5363) from push-wxxokvmsuymn into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5363
2025-10-03 13:11:27 +00:00
Michael Hoang
d847ab6fa1 clanServices/sshd: readd default 2025-10-03 15:07:09 +02:00
Michael Hoang
94272f76d4 Merge pull request 'cli: support getting chroot-realpath from nixos-init if necessary' (#5362) from push-wquonsppmwzr into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5362
2025-10-03 11:21:26 +00:00
Michael Hoang
56558023a8 cli: support getting chroot-realpath from nixos-init if necessary 2025-10-03 13:02:40 +02:00
Qubasa
b56230e3a7 clan_lib: Add clan_module_to_llm_function for ai integration 2025-10-03 12:32:33 +02:00
clan-bot
5e98b1335a Merge pull request 'Update clan-core-for-checks in devFlake' (#5360) from update-devFlake-clan-core-for-checks into main 2025-10-03 10:05:59 +00:00
clan-bot
36e03b75b2 Update clan-core-for-checks in devFlake 2025-10-03 10:01:52 +00:00
clan-bot
a371b9255c Merge pull request 'Update clan-core-for-checks in devFlake' (#5358) from update-devFlake-clan-core-for-checks into main 2025-10-03 05:06:07 +00:00
clan-bot
01e7a7ff26 Update clan-core-for-checks in devFlake 2025-10-03 05:01:54 +00:00
clan-bot
7f4faf8696 Merge pull request 'Update clan-core-for-checks in devFlake' (#5356) from update-devFlake-clan-core-for-checks into main 2025-10-03 00:05:59 +00:00
clan-bot
2a14e3e085 Update clan-core-for-checks in devFlake 2025-10-03 00:01:47 +00:00
clan-bot
b7521d00c7 Merge pull request 'Update nixpkgs-dev in devFlake' (#5355) from update-devFlake-nixpkgs-dev into main 2025-10-02 20:07:35 +00:00
clan-bot
7a77e563c9 Merge pull request 'Update clan-core-for-checks in devFlake' (#5354) from update-devFlake-clan-core-for-checks into main 2025-10-02 20:07:31 +00:00
clan-bot
bb119518c4 Update nixpkgs-dev in devFlake 2025-10-02 20:02:06 +00:00
clan-bot
d9048fdfda Update clan-core-for-checks in devFlake 2025-10-02 20:01:46 +00:00
Luis Hebendanz
4f00a22921 Merge pull request 'clanServices: Add role descriptions to all our services Part 2' (#5353) from Qubasa/clan-core:add_role_descriptions into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5353
2025-10-02 17:16:38 +00:00
Luis Hebendanz
4ce5f49144 Merge pull request 'inventory: Add roles.<name>.description option and a warning if it is not set Part 1' (#5340) from Qubasa/clan-core:ai_support into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5340
2025-10-02 17:16:29 +00:00
Qubasa
3d5d812e05 clanServices: Add role descriptions to all our services 2025-10-02 19:05:31 +02:00
Qubasa
2df96d3a9b inventory: Add roles.<name>.description option and a warning if it is not set 2025-10-02 18:57:55 +02:00
hsjobeki
b344db021b Merge pull request 'lib/clan: add checks' (#5352) from write-access into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5352
2025-10-02 16:41:23 +00:00
Johannes Kirschbauer
2dabff5db1 lib/clan: add checks 2025-10-02 18:21:37 +02:00
hsjobeki
e4a31f065d Merge pull request 'lib/introspection: backwards support older nixpkgs version with reduced features' (#5351) from write-access into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5351
2025-10-02 15:43:33 +00:00
Johannes Kirschbauer
149e14e85d lib/introspection: backwards support older nixpkgs version with reduced features 2025-10-02 17:39:03 +02:00
clan-bot
38339651cc Merge pull request 'Update clan-core-for-checks in devFlake' (#5350) from update-devFlake-clan-core-for-checks into main 2025-10-02 15:07:53 +00:00
clan-bot
652cc9fecc Update clan-core-for-checks in devFlake 2025-10-02 15:01:50 +00:00
hsjobeki
13c2581cbd Merge pull request 'lib/introspect: seperate headType from nullable' (#5332) from write-access into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5332
2025-10-02 14:44:56 +00:00
Johannes Kirschbauer
6f5f182aef lib/introspect: fix list item meta 2025-10-02 16:40:29 +02:00
DavHau
393323ba91 Merge pull request 'vars: optimize generate - reduce cache misses' (#5348) from dave into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5348
2025-10-02 11:50:26 +00:00
DavHau
5a6ffbf916 vars: optimize generate - reduce cache misses
optimize the `clan vars generate` procedure by pre-caching more selectors.

To achieve this, helper functions are added to several classes.

Also a debugging feature is added to the Flake class in order to track stack traces of cache misses
2025-10-02 18:46:11 +07:00
clan-bot
6de667c125 Merge pull request 'Update clan-core-for-checks in devFlake' (#5346) from update-devFlake-clan-core-for-checks into main 2025-10-02 10:09:11 +00:00
clan-bot
ba03ac29fd Merge pull request 'Update nixpkgs-dev in devFlake' (#5347) from update-devFlake-nixpkgs-dev into main 2025-10-02 10:09:04 +00:00
clan-bot
3691dcc9e0 Update nixpkgs-dev in devFlake 2025-10-02 10:02:09 +00:00
clan-bot
8c976445c0 Update clan-core-for-checks in devFlake 2025-10-02 10:01:50 +00:00
hsjobeki
586b0ddc5f Merge pull request 'ui: new api call design' (#5319) from hgl-api into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5319
2025-10-02 07:58:09 +00:00
clan-bot
cb0d4f2200 Merge pull request 'Update clan-core-for-checks in devFlake' (#5345) from update-devFlake-clan-core-for-checks into main 2025-10-02 05:06:44 +00:00
clan-bot
65f884616a Update clan-core-for-checks in devFlake 2025-10-02 05:01:51 +00:00
clan-bot
bc139cb0e2 Merge pull request 'Update clan-core-for-checks in devFlake' (#5344) from update-devFlake-clan-core-for-checks into main 2025-10-02 00:07:24 +00:00
clan-bot
b0bb03b1d1 Merge pull request 'Update flake-parts' (#5343) from update-flake-parts into main 2025-10-02 00:05:59 +00:00
clan-bot
6a4de66edb Update clan-core-for-checks in devFlake 2025-10-02 00:01:53 +00:00
clan-bot
0982378f96 Update flake-parts 2025-10-02 00:01:14 +00:00
clan-bot
8d4a9a959f Merge pull request 'Update nixpkgs-dev in devFlake' (#5342) from update-devFlake-nixpkgs-dev into main 2025-10-01 20:08:10 +00:00
clan-bot
5d0d302ed5 Merge pull request 'Update clan-core-for-checks in devFlake' (#5341) from update-devFlake-clan-core-for-checks into main 2025-10-01 20:07:28 +00:00
clan-bot
fd2730eaa7 Update nixpkgs-dev in devFlake 2025-10-01 20:02:07 +00:00
clan-bot
ef2d6f7949 Update clan-core-for-checks in devFlake 2025-10-01 20:01:47 +00:00
clan-bot
b9c07a7151 Merge pull request 'Update clan-core-for-checks in devFlake' (#5338) from update-devFlake-clan-core-for-checks into main 2025-10-01 15:06:05 +00:00
clan-bot
e6a3dd4c34 Merge pull request 'Update nixpkgs-dev in devFlake' (#5339) from update-devFlake-nixpkgs-dev into main 2025-10-01 15:05:33 +00:00
clan-bot
8697bc8b11 Update nixpkgs-dev in devFlake 2025-10-01 15:02:11 +00:00
clan-bot
a0d7bd0726 Update clan-core-for-checks in devFlake 2025-10-01 15:01:53 +00:00
Johannes Kirschbauer
1a8131f17f lib/introspect: recurse for nested attrsOf 2025-10-01 16:56:53 +02:00
Kenji Berthold
af62946651 Merge pull request 'service/yggdrasil: Fix typos' (#5337) from kenji/ke-fix-typos into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5337
2025-10-01 14:33:52 +00:00
a-kenji
351087d4e1 service/yggdrasil: Fix typos 2025-10-01 16:29:40 +02:00
Glen Huang
a268be69fe ui: new api call design
- api functions exist under api.*
- they accept an abort signal and return a promise
- they can be swapped out at build time depending on the platform
  (e.g.,window.method on desktop, fetch on mobile)
- TanStack Query functions should only be used in components, and
  only when we need its features, favoring simpler api.* calls
2025-10-01 20:51:48 +08:00
Michael Hoang
a9a1982943 Merge pull request 'nixos_test_lib: fix Nix in Nix not working with driverInteractive' (#5326) from push-puyqntntpwsx into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5326
2025-10-01 12:38:45 +00:00
Michael Hoang
850160d120 nixos_test_lib: fix Nix in Nix not working with driverInteractive 2025-10-01 14:33:23 +02:00
Kenji Berthold
8dc7256a4a Merge pull request 'pkgs/lib: verbose git commits' (#5333) from kenji/ke-verbose-git-commits into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5333
Reviewed-by: DavHau <d.hauer.it@gmail.com>
2025-10-01 10:28:45 +00:00
Luis Hebendanz
02fdb83282 Merge pull request 'docs: Update zerotier documentation' (#5335) from ke-docs-update-zerotier into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5335
2025-10-01 10:25:52 +00:00
a-kenji
df3fdf3758 pkgs/lib/git: List all files that are committed 2025-10-01 12:24:33 +02:00
a-kenji
11c559ee6d docs: Update zerotier documentation 2025-10-01 12:14:57 +02:00
a-kenji
5e6a202ce0 docs: Remove outdated information 2025-10-01 12:11:09 +02:00
clan-bot
f31dbe6c2a Merge pull request 'Update clan-core-for-checks in devFlake' (#5334) from update-devFlake-clan-core-for-checks into main 2025-10-01 10:06:02 +00:00
clan-bot
f18cdd20ce Update clan-core-for-checks in devFlake 2025-10-01 10:01:51 +00:00
a-kenji
08e2048eeb pkgs/lib: verbose git commits
Make sure the user knowns that a git command is run.

From the issue #4588:
> It is confusing at times, when executing some CLI command, expecting change,
then checking git status but no changes are observed.

We now log:
- git add (debug)
- git commit (info)

The git commit information is formatted the following way:
```
Committed machines/backup-target to git
```

Alternatives:
Currently this shows to the user what happened.
But we might want to show the user what is being run.
We could print the information before invoking the `git commit` itself.
Informing the user of a potential password input window.

Closes #4588
2025-10-01 11:46:01 +02:00
Johannes Kirschbauer
a8156d2fa6 lib/introspect: seperate headType from nullable 2025-10-01 09:51:34 +02:00
DavHau
e593d5da34 Merge pull request 'vars/list: reduce cache misses to 1' (#5331) from dave into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5331
2025-10-01 05:52:55 +00:00
DavHau
b72145d4aa vars/list: reduce cache misses to 1
This improves the performance for clan vars list
2025-10-01 12:43:09 +07:00
clan-bot
7cdd026e04 Merge pull request 'Update clan-core-for-checks in devFlake' (#5330) from update-devFlake-clan-core-for-checks into main 2025-10-01 05:06:12 +00:00
clan-bot
8e395d6715 Update clan-core-for-checks in devFlake 2025-10-01 05:02:08 +00:00
clan-bot
0868f466b6 Merge pull request 'Update clan-core-for-checks in devFlake' (#5329) from update-devFlake-clan-core-for-checks into main 2025-10-01 00:06:28 +00:00
clan-bot
7144b4b271 Update clan-core-for-checks in devFlake 2025-10-01 00:01:50 +00:00
clan-bot
b99d2363b9 Merge pull request 'Update clan-core-for-checks in devFlake' (#5327) from update-devFlake-clan-core-for-checks into main 2025-09-30 20:06:36 +00:00
clan-bot
0131900d79 Merge pull request 'Update nixpkgs-dev in devFlake' (#5328) from update-devFlake-nixpkgs-dev into main 2025-09-30 20:05:57 +00:00
clan-bot
2cd2a8b9b7 Update nixpkgs-dev in devFlake 2025-09-30 20:02:10 +00:00
clan-bot
f918149430 Update clan-core-for-checks in devFlake 2025-09-30 20:01:50 +00:00
clan-bot
7ecec19232 Merge pull request 'Update clan-core-for-checks in devFlake' (#5325) from update-devFlake-clan-core-for-checks into main 2025-09-30 15:06:05 +00:00
clan-bot
0ee297504c Update clan-core-for-checks in devFlake 2025-09-30 15:01:52 +00:00
hsjobeki
e680c3a478 Merge pull request 'classgen: mute expected warning' (#5324) from mute-warning into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5324
2025-09-30 13:40:08 +00:00
Johannes Kirschbauer
5a026eaf57 classgen: mute expected warning 2025-09-30 15:37:22 +02:00
Luis Hebendanz
873382eaa9 Merge pull request 'ai_support' (#5323) from Qubasa/clan-core:ai_support into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5323
2025-09-30 13:34:17 +00:00
Qubasa
07def16ff6 clan-app: fix logging error
on closing the logging file descriptor some parts of the program still
had the old reference. This will replace the old fd with stderr to fix
errors raised
2025-09-30 15:32:21 +02:00
Qubasa
fdc4b5f769 clan-app: full context tracebacks
If an exception now is thrown in one of the middlewares we will get a
proper traceback instead of a cut off one like before
2025-09-30 15:31:16 +02:00
Qubasa
8ad9f99606 clan-app: renamed deps folder to 'backend' 2025-09-30 15:30:39 +02:00
Luis Hebendanz
adb82a8414 Merge pull request 'clan-app: fixed broken webview delete_task' (#5321) from Qubasa/clan-core:ai_support into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5321
2025-09-30 12:09:56 +00:00
Qubasa
d36f97aa6d clan-app: fixed broken webview delete_task 2025-09-30 14:07:25 +02:00
DavHau
d2728bea27 Merge pull request 'vars: make list/get fast' (#5316) from vars into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5316
2025-09-30 10:15:08 +00:00
Jörg Thalheim
d67e23890b inline stringify_vars 2025-09-30 12:10:44 +02:00
Jörg Thalheim
597eb46c47 vars: speedup get/list
no longer get the full closure that is only needed for generating vars
2025-09-30 12:10:44 +02:00
clan-bot
4b4f4c8a30 Merge pull request 'Update clan-core-for-checks in devFlake' (#5317) from update-devFlake-clan-core-for-checks into main 2025-09-30 10:06:52 +00:00
clan-bot
467ba09720 Merge pull request 'Update nixpkgs-dev in devFlake' (#5318) from update-devFlake-nixpkgs-dev into main 2025-09-30 10:06:26 +00:00
clan-bot
1cfc9f1c5a Update nixpkgs-dev in devFlake 2025-09-30 10:02:12 +00:00
clan-bot
3ba9f1e957 Update clan-core-for-checks in devFlake 2025-09-30 10:01:52 +00:00
clan-bot
b9b8b6d5be Merge pull request 'Update clan-core-for-checks in devFlake' (#5315) from update-devFlake-clan-core-for-checks into main 2025-09-30 05:06:59 +00:00
clan-bot
f5aa3dc76f Update clan-core-for-checks in devFlake 2025-09-30 05:01:51 +00:00
clan-bot
9dcf3ae934 Merge pull request 'Update sops-nix' (#5313) from update-sops-nix into main 2025-09-30 00:09:19 +00:00
clan-bot
7629f497f5 Merge pull request 'Update clan-core-for-checks in devFlake' (#5314) from update-devFlake-clan-core-for-checks into main 2025-09-30 00:07:56 +00:00
clan-bot
39b6dd70e4 Update clan-core-for-checks in devFlake 2025-09-30 00:01:50 +00:00
clan-bot
c8e5b0ac00 Update sops-nix 2025-09-30 00:01:45 +00:00
clan-bot
d8a1699691 Merge pull request 'Update clan-core-for-checks in devFlake' (#5312) from update-devFlake-clan-core-for-checks into main 2025-09-29 20:06:44 +00:00
clan-bot
95dbd1e4cc Update clan-core-for-checks in devFlake 2025-09-29 20:01:49 +00:00
clan-bot
eaa359d70c Merge pull request 'Update clan-core-for-checks in devFlake' (#5311) from update-devFlake-clan-core-for-checks into main 2025-09-29 15:06:53 +00:00
clan-bot
37524ebb37 Update clan-core-for-checks in devFlake 2025-09-29 15:01:51 +00:00
brianmcgee
750f502ac6 Merge pull request 'feat(ui): remove add clan button from ListClansModal' (#5310) from feat/remove-add-clan-button into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5310
2025-09-29 10:45:15 +00:00
Brian McGee
aa0b03064a feat(ui): remove add clan button from ListClansModal
It was confusing how it worked. Cleaner to remove it and just have users X out of the modal and use the existing onboarding workflow.

Closes #5010
2025-09-29 11:42:41 +01:00
Brian McGee
04a1fa1cf0 feat(ui): remove add clan button from ListClansModal
It was confusing how it worked. Cleaner to remove it and just have users X out of the modal and use the existing onboarding workflow.

Closes #5010
2025-09-29 11:13:03 +01:00
clan-bot
7951e25319 Merge pull request 'Update clan-core-for-checks in devFlake' (#5308) from update-devFlake-clan-core-for-checks into main 2025-09-29 10:09:29 +00:00
clan-bot
d7c42cd2aa Merge pull request 'Update nixpkgs-dev in devFlake' (#5309) from update-devFlake-nixpkgs-dev into main 2025-09-29 10:08:53 +00:00
clan-bot
4f6cb72a3b Merge pull request 'Update data-mesher' (#5307) from update-data-mesher into main 2025-09-29 10:06:29 +00:00
clan-bot
ee6adf5ca5 Update nixpkgs-dev in devFlake 2025-09-29 10:02:08 +00:00
clan-bot
a2fffd64fd Update clan-core-for-checks in devFlake 2025-09-29 10:01:52 +00:00
clan-bot
18e0175412 Update data-mesher 2025-09-29 10:01:14 +00:00
hsjobeki
890486e353 Merge pull request 'use css modules for Tag and MachineStatus' (#5255) from hgl-ui-machine into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5255
2025-09-29 08:06:44 +00:00
hsjobeki
406ee30b1c Merge pull request 'docs/index: fix broken links' (#5306) from docs-fix into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5306
2025-09-29 07:38:04 +00:00
hsjobeki
ccced8c9f7 Merge pull request 'ui/onboarding: extract cube animation to its own component' (#5287) from hgl-onboarding into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5287
Reviewed-by: hsjobeki <hsjobeki@gmail.com>
2025-09-29 07:37:57 +00:00
Johannes Kirschbauer
13c0639fa9 docs/index: fix broken links 2025-09-29 09:30:29 +02:00
clan-bot
c59ae5205d Merge pull request 'Update clan-core-for-checks in devFlake' (#5305) from update-devFlake-clan-core-for-checks into main 2025-09-29 05:07:15 +00:00
clan-bot
a0df88dd71 Update clan-core-for-checks in devFlake 2025-09-29 05:01:52 +00:00
clan-bot
b813988dd6 Merge pull request 'Update clan-core-for-checks in devFlake' (#5304) from update-devFlake-clan-core-for-checks into main 2025-09-29 00:08:39 +00:00
clan-bot
db1f4db2ff Update clan-core-for-checks in devFlake 2025-09-29 00:01:54 +00:00
clan-bot
1ce0cbc9bb Merge pull request 'Update clan-core-for-checks in devFlake' (#5303) from update-devFlake-clan-core-for-checks into main 2025-09-28 20:06:35 +00:00
clan-bot
cb73261283 Update clan-core-for-checks in devFlake 2025-09-28 20:01:49 +00:00
clan-bot
d073306f05 Merge pull request 'Update clan-core-for-checks in devFlake' (#5302) from update-devFlake-clan-core-for-checks into main 2025-09-28 15:08:04 +00:00
clan-bot
e99d2876ce Update clan-core-for-checks in devFlake 2025-09-28 15:01:51 +00:00
clan-bot
9e09134f27 Merge pull request 'Update clan-core-for-checks in devFlake' (#5300) from update-devFlake-clan-core-for-checks into main 2025-09-28 10:06:29 +00:00
clan-bot
1826880edf Merge pull request 'Update nixpkgs-dev in devFlake' (#5301) from update-devFlake-nixpkgs-dev into main 2025-09-28 10:05:45 +00:00
clan-bot
8525855fe2 Update nixpkgs-dev in devFlake 2025-09-28 10:02:05 +00:00
clan-bot
17b91ce812 Update clan-core-for-checks in devFlake 2025-09-28 10:01:48 +00:00
clan-bot
5ebe68c9c9 Merge pull request 'Update clan-core-for-checks in devFlake' (#5299) from update-devFlake-clan-core-for-checks into main 2025-09-28 05:09:24 +00:00
clan-bot
861e050c02 Merge pull request 'Update sops-nix' (#5298) from update-sops-nix into main 2025-09-28 05:09:18 +00:00
clan-bot
5b72076895 Update clan-core-for-checks in devFlake 2025-09-28 05:01:55 +00:00
clan-bot
98ffa0c368 Update sops-nix 2025-09-28 05:01:51 +00:00
clan-bot
9e07526f7e Merge pull request 'Update clan-core-for-checks in devFlake' (#5297) from update-devFlake-clan-core-for-checks into main 2025-09-28 00:06:30 +00:00
clan-bot
5e0a8eb914 Update clan-core-for-checks in devFlake 2025-09-28 00:01:51 +00:00
clan-bot
814990f75d Merge pull request 'Update clan-core-for-checks in devFlake' (#5296) from update-devFlake-clan-core-for-checks into main 2025-09-27 20:06:34 +00:00
clan-bot
35b2dbec59 Update clan-core-for-checks in devFlake 2025-09-27 20:01:49 +00:00
clan-bot
68106108ee Merge pull request 'Update clan-core-for-checks in devFlake' (#5294) from update-devFlake-clan-core-for-checks into main 2025-09-27 15:08:11 +00:00
clan-bot
216dfbccec Merge pull request 'Update nixpkgs-dev in devFlake' (#5295) from update-devFlake-nixpkgs-dev into main 2025-09-27 15:07:29 +00:00
clan-bot
f8aa623c9a Update nixpkgs-dev in devFlake 2025-09-27 15:02:09 +00:00
clan-bot
3d30cfbb13 Update clan-core-for-checks in devFlake 2025-09-27 15:01:51 +00:00
clan-bot
5f1303ffd1 Merge pull request 'Update clan-core-for-checks in devFlake' (#5293) from update-devFlake-clan-core-for-checks into main 2025-09-27 10:06:12 +00:00
clan-bot
d300e35b6a Update clan-core-for-checks in devFlake 2025-09-27 10:01:53 +00:00
clan-bot
aa8e9758d1 Merge pull request 'Update clan-core-for-checks in devFlake' (#5292) from update-devFlake-clan-core-for-checks into main 2025-09-27 05:06:16 +00:00
clan-bot
4604a80f72 Update clan-core-for-checks in devFlake 2025-09-27 05:01:52 +00:00
clan-bot
54b0fe25f3 Merge pull request 'Update clan-core-for-checks in devFlake' (#5291) from update-devFlake-clan-core-for-checks into main 2025-09-27 00:06:41 +00:00
clan-bot
6dc1b1b102 Update clan-core-for-checks in devFlake 2025-09-27 00:01:51 +00:00
clan-bot
01b018866d Merge pull request 'Update clan-core-for-checks in devFlake' (#5289) from update-devFlake-clan-core-for-checks into main 2025-09-26 20:06:47 +00:00
clan-bot
03d402c8c5 Merge pull request 'Update nixpkgs-dev in devFlake' (#5290) from update-devFlake-nixpkgs-dev into main 2025-09-26 20:06:02 +00:00
clan-bot
29f8d783c4 Update nixpkgs-dev in devFlake 2025-09-26 20:02:07 +00:00
clan-bot
b14e82aae4 Update clan-core-for-checks in devFlake 2025-09-26 20:01:48 +00:00
clan-bot
cc23fe4e2d Merge pull request 'Update clan-core-for-checks in devFlake' (#5288) from update-devFlake-clan-core-for-checks into main 2025-09-26 15:06:52 +00:00
clan-bot
22d86b859e Update clan-core-for-checks in devFlake 2025-09-26 15:01:53 +00:00
Glen Huang
35f42107bb ui/onboarding: extract cube animation to its own component 2025-09-26 21:58:32 +08:00
hsjobeki
017f0901da Merge pull request 'ui/HostFileInput: refactor' (#5280) from hgl-hostfileinput into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5280
Reviewed-by: hsjobeki <hsjobeki@gmail.com>
2025-09-26 13:53:02 +00:00
Glen Huang
54c39edafd ui/HostFileInput: refactor
- Contain api call within itself
- Flatten input attributes
- Fix directory validation type error
2025-09-26 21:44:50 +08:00
Michael Hoang
d0148b47d5 Merge pull request 'checks/installation: refactor to remove hardcoded system' (#5278) from push-qkzrzzqorxsl into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5278
2025-09-26 12:24:29 +00:00
Michael Hoang
e4137a6876 checks/installation: fix NixOS configuration not having a system 2025-09-26 14:13:19 +02:00
Michael Hoang
356b0ab546 Merge pull request 'checks/installation: remove unused closureInfo' (#5286) from push-kpwummqulwnp into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5286
2025-09-26 11:32:04 +00:00
Michael Hoang
992273013f checks/installation: remove unused closureInfo 2025-09-26 13:19:25 +02:00
clan-bot
1e91be3efa Merge pull request 'Update clan-core-for-checks in devFlake' (#5284) from update-devFlake-clan-core-for-checks into main 2025-09-26 10:06:45 +00:00
clan-bot
907ccbfd22 Merge pull request 'Update nixpkgs-dev in devFlake' (#5285) from update-devFlake-nixpkgs-dev into main 2025-09-26 10:06:11 +00:00
clan-bot
49ff420b8b Update nixpkgs-dev in devFlake 2025-09-26 10:02:11 +00:00
clan-bot
269169815c Update clan-core-for-checks in devFlake 2025-09-26 10:01:52 +00:00
clan-bot
724b114c34 Merge pull request 'Update clan-core-for-checks in devFlake' (#5281) from update-devFlake-clan-core-for-checks into main 2025-09-26 05:06:45 +00:00
clan-bot
a5bc193411 Merge pull request 'Update nixpkgs-dev in devFlake' (#5282) from update-devFlake-nixpkgs-dev into main 2025-09-26 05:06:44 +00:00
clan-bot
2b321914f5 Update nixpkgs-dev in devFlake 2025-09-26 05:02:11 +00:00
clan-bot
921693f494 Update clan-core-for-checks in devFlake 2025-09-26 05:01:52 +00:00
clan-bot
374bb30eea Merge pull request 'Update clan-core-for-checks in devFlake' (#5279) from update-devFlake-clan-core-for-checks into main 2025-09-26 00:07:29 +00:00
clan-bot
0f2d38551f Update clan-core-for-checks in devFlake 2025-09-26 00:01:48 +00:00
Michael Hoang
3ec2c7c03b Merge pull request 'cli: support machines init-hardware-config --debug' (#5275) from push-kkrktlvvovkm into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5275
2025-09-25 20:14:53 +00:00
Michael Hoang
51bf7c8848 cli: support machines init-hardware-config --debug 2025-09-25 22:10:01 +02:00
clan-bot
14dfe1f9c5 Merge pull request 'Update clan-core-for-checks in devFlake' (#5274) from update-devFlake-clan-core-for-checks into main 2025-09-25 20:07:01 +00:00
clan-bot
88b3c1b7ac Update clan-core-for-checks in devFlake 2025-09-25 20:01:51 +00:00
Michael Hoang
285e72616e Merge pull request 'Update clan-core-for-checks in devFlake' (#5203) from update-devFlake-clan-core-for-checks into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5203
2025-09-25 17:23:41 +00:00
Michael Hoang
4cadedaa5d checks: don't use the global flake registry 2025-09-25 19:18:28 +02:00
Michael Hoang
27f87c7345 checks: add dependency on bubblewrap 2025-09-25 19:18:28 +02:00
clan-bot
6f5137fc56 Update clan-core-for-checks in devFlake 2025-09-25 19:18:28 +02:00
Michael Hoang
948bc41562 Merge pull request 'checks/flash: don't generate any vars' (#5273) from push-ormsrmnustku into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5273
2025-09-25 17:18:00 +00:00
Michael Hoang
ab5060a947 checks/flash: don't generate any vars 2025-09-25 19:14:10 +02:00
Luis Hebendanz
23d5a77814 Merge pull request 'Improve backup documentation' (#5272) from Qubasa/clan-core:docs_fix2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5272
2025-09-25 17:13:59 +00:00
Qubasa
6d6a085b97 flake.nix: re-add nuschtos 2025-09-25 19:03:32 +02:00
Qubasa
233d1a48af docs: make flake-inputs flow better 2025-09-25 18:59:27 +02:00
Qubasa
eddb1e35fc docs: make flake-parts guide flow better 2025-09-25 18:59:27 +02:00
Qubasa
2c2266ce8c docs: group templates together 2025-09-25 18:59:27 +02:00
Qubasa
a28270f43a docs: extensive backup documentation 2025-09-25 18:59:27 +02:00
Michael Hoang
824f80f357 Merge pull request 'checks/update: reduce instances of hardcoded system' (#5270) from push-toqqzsyoqotv into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5270
2025-09-25 16:40:53 +00:00
Michael Hoang
bec8de3faa checks/update: reduce instances of hardcoded system 2025-09-25 18:37:35 +02:00
Qubasa
f9681d49b6 borgbackup: fix requirement that client and server roles must be defined 2025-09-25 18:32:37 +02:00
hsjobeki
3169df3769 Merge pull request 'ui: no need to guard SolidQueryDevtools behind dev flag' (#5266) from hgl-query into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5266
2025-09-25 15:12:52 +00:00
clan-bot
1314f070f7 Merge pull request 'Update nix-darwin' (#5269) from update-nix-darwin into main 2025-09-25 15:07:19 +00:00
clan-bot
eba3b9f119 Update nix-darwin 2025-09-25 15:02:38 +00:00
Glen Huang
19b8c6022f ui: no need to guard SolidQueryDevtools behind dev flag
It won't be bundled in the prod build
2025-09-25 17:05:30 +08:00
clan-bot
587dde157f Merge pull request 'Update nixpkgs-dev in devFlake' (#5265) from update-devFlake-nixpkgs-dev into main 2025-09-25 00:06:28 +00:00
clan-bot
149ea99344 Update nixpkgs-dev in devFlake 2025-09-25 00:02:08 +00:00
clan-bot
1e32e2ef46 Merge pull request 'Update treefmt-nix in devFlake' (#5264) from update-devFlake-treefmt-nix into main 2025-09-24 20:08:06 +00:00
clan-bot
565972d602 Merge pull request 'Update treefmt-nix' (#5263) from update-treefmt-nix into main 2025-09-24 20:08:05 +00:00
clan-bot
dab2bffc7b Update treefmt-nix in devFlake 2025-09-24 20:02:15 +00:00
clan-bot
7385d7caec Update treefmt-nix 2025-09-24 20:01:47 +00:00
hsjobeki
becb32a947 Merge pull request 'lib/introspect: use valueMeta to expose more information' (#5262) from update-service into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5262
2025-09-24 16:38:14 +00:00
Johannes Kirschbauer
bcadf6b0fb clan_lib: write_rules complete internal keys 2025-09-24 18:34:09 +02:00
Johannes Kirschbauer
75121767d3 lib/introspect: use valueMeta to expose more information 2025-09-24 17:24:44 +02:00
Luis Hebendanz
8da25d5295 Merge pull request 'hardware-update-split' (#5261) from Qubasa/clan-core:hardware-update-split into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5261
2025-09-24 14:54:32 +00:00
Qubasa
ed069c48d3 clan-cli: rename to init-hardware-config 2025-09-24 16:51:06 +02:00
Qubasa
ac79bfb35f clan-cli: Split up update-hardware info into kexec-hardware-info 2025-09-24 15:47:33 +02:00
Qubasa
5595b2f862 clan-cli: Don't print trace on Keyboard Interrupt 2025-09-24 15:43:04 +02:00
hsjobeki
f03bcb8c14 Merge pull request 'ui: add npmrc to disable install scripts' (#5258) from hgl-npmrc into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5258
2025-09-24 11:01:26 +00:00
hsjobeki
b8e1fa2478 Merge pull request 'ui/cubes: use css modules for cube' (#5257) from hgl-ui-cube into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5257
2025-09-24 11:01:14 +00:00
Glen Huang
a2529e953b ui: add npmrc to disable install scripts
https://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised#immediate-actions-required
2025-09-24 18:59:04 +08:00
clan-bot
d783ae7c7c Merge pull request 'Update nixpkgs-dev in devFlake' (#5256) from update-devFlake-nixpkgs-dev into main 2025-09-24 10:06:06 +00:00
Glen Huang
2c66bd6508 ui/cubes: use css modules for cubes 2025-09-24 18:05:25 +08:00
clan-bot
aeb6b44ca6 Update nixpkgs-dev in devFlake 2025-09-24 10:02:02 +00:00
Glen Huang
cbb32e5ce9 ui/colors: remove the unused fgClass function 2025-09-24 17:48:21 +08:00
Glen Huang
5f13b24f80 ui/TagGroup: use css modules for TagGroup 2025-09-24 17:37:50 +08:00
Glen Huang
aaa353ec91 ui/Tag: use css modules 2025-09-24 17:17:47 +08:00
Glen Huang
c0281e8b4c ui/MachineStatus: use css modules 2025-09-24 15:47:38 +08:00
clan-bot
fde05adbd6 Merge pull request 'Update nuschtos in devFlake' (#5252) from update-devFlake-nuschtos into main 2025-09-24 00:05:38 +00:00
clan-bot
e1fff811ee Update nuschtos in devFlake 2025-09-24 00:02:02 +00:00
hsjobeki
3171512f30 Merge pull request 'ui/SectionService: not throwing errors inside the component rendering function' (#5249) from hgl-ui-froze into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5249
2025-09-23 15:54:09 +00:00
hsjobeki
b87953e2af Merge pull request 'clan: add nixpkgs version checks' (#5246) from update-service into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5246
2025-09-23 15:11:56 +00:00
Johannes Kirschbauer
ab8607e01a clan: add nixpkgs version checks 2025-09-23 17:07:33 +02:00
Glen Huang
6db8757281 ui/SectionService: not throwing errors inside the component rendering function 2025-09-23 22:50:22 +08:00
hsjobeki
18edf5f992 Merge pull request 'ui: use css modules for TextArea and TextInput' (#5235) from hgl-ui-textfield into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5235
2025-09-23 13:59:21 +00:00
Mic92
f6bc4ca6df Merge pull request 'clan-cli vars: speedup vars retrieval' (#5245) from faster_vars into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5245
Reviewed-by: Kenji Berthold <aks.kenji@protonmail.com>
2025-09-23 12:03:37 +00:00
lassulus
8567c2c09d clan-cli vars: speedup vars retrieval 2025-09-23 13:55:33 +02:00
clan-bot
59aec481b2 Merge pull request 'Update nixpkgs-dev in devFlake' (#5238) from update-devFlake-nixpkgs-dev into main 2025-09-23 10:05:00 +00:00
clan-bot
fe04eb827f Update nixpkgs-dev in devFlake 2025-09-23 10:01:27 +00:00
Glen Huang
7be9e3f333 ui: use css modules for TextArea and TextInput 2025-09-23 15:01:17 +08:00
hsjobeki
6b059ca71d Merge pull request 'clan_lib: persist, compute static data for simpler patch validation' (#5218) from update-service into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5218
2025-09-22 16:39:29 +00:00
Johannes Kirschbauer
9ea5156f32 clan_lib: disable static checks temporarily 2025-09-22 18:32:58 +02:00
brianmcgee
519ff4c0f3 Merge pull request 'ui/form: use css modules for form components' (#5232) from hgl-ui-form into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5232
Reviewed-by: brianmcgee <brian@bmcgee.ie>
2025-09-22 13:06:02 +00:00
Glen Huang
bc045ee972 ui/form: use css modules for form components 2025-09-22 20:59:53 +08:00
brianmcgee
5de0d37f0e Merge pull request 'ui/checkbox: use css modules' (#5228) from hgl-ui-checkbox into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5228
Reviewed-by: brianmcgee <brian@bmcgee.ie>
2025-09-22 10:11:59 +00:00
Johannes Kirschbauer
3574b37a29 clan_lib: fix inventory test message assertions 2025-09-22 12:10:51 +02:00
brianmcgee
2921ae7b84 Merge pull request 'ui: use css modules for sidebar components' (#5217) from hgl into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5217
Reviewed-by: brianmcgee <brian@bmcgee.ie>
2025-09-22 10:07:52 +00:00
clan-bot
8f5cae5671 Merge pull request 'Update nixpkgs-dev in devFlake' (#5230) from update-devFlake-nixpkgs-dev into main 2025-09-22 10:05:52 +00:00
clan-bot
bc241cdd5f Update nixpkgs-dev in devFlake 2025-09-22 10:01:41 +00:00
Glen Huang
d1b65d5a06 ui/checkbox: use css modules 2025-09-22 17:21:06 +08:00
Qubasa
8ff060c589 clan_lib: Remote add to arguments override func 2025-09-22 11:20:49 +02:00
clan-bot
8402463296 Merge pull request 'Update data-mesher' (#5227) from update-data-mesher into main 2025-09-22 05:06:27 +00:00
clan-bot
461e7ee968 Update data-mesher 2025-09-22 05:00:36 +00:00
Johannes Kirschbauer
b273cc9c6a clan_lib: temporarily allow missing paths again 2025-09-21 17:33:35 +02:00
Johannes Kirschbauer
51f3ffec42 clan_lib: rename writeability to write_map 2025-09-21 17:30:33 +02:00
Johannes Kirschbauer
48ddf22879 clan_lib: split utils into meaningfull files 2025-09-21 17:24:28 +02:00
clan-bot
7a9f3dfc03 Merge pull request 'Update nix-darwin' (#5224) from update-nix-darwin into main 2025-09-21 15:06:53 +00:00
clan-bot
2588813578 Merge pull request 'Update nixpkgs-dev in devFlake' (#5225) from update-devFlake-nixpkgs-dev into main 2025-09-21 15:05:09 +00:00
clan-bot
c95ab34807 Update nixpkgs-dev in devFlake 2025-09-21 15:01:29 +00:00
clan-bot
54fc2aec03 Update nix-darwin 2025-09-21 15:00:39 +00:00
Johannes Kirschbauer
9a03644a80 clan_lib: deprecate is_writeable_key 2025-09-21 16:37:50 +02:00
Johannes Kirschbauer
381c190ba2 clan_lib: inventory store use structured keys 2025-09-21 16:25:54 +02:00
Johannes Kirschbauer
bd50e1ee40 clan_lib: use structured keys for def calc_patches
This allows key that contain dot  and other potentially ambigous unicode
2025-09-21 16:02:10 +02:00
Johannes Kirschbauer
00d38180d3 clan_lib: use flatten_data_structured 2025-09-21 16:02:10 +02:00
Johannes Kirschbauer
7e1b7b056d clan_lib: use flatten_data_structured 2025-09-21 16:02:10 +02:00
Johannes Kirschbauer
4ec3043a4e clan_lib: init flatten_data_structured
Avoids ambiguity issues with keys that contain dots or other separators.
2025-09-21 16:02:10 +02:00
Johannes Kirschbauer
78634d0165 clan_lib: persist, compute static data for simpler patch validation 2025-09-21 16:02:10 +02:00
clan-bot
4d4a689519 Merge pull request 'Update sops-nix' (#5223) from update-sops-nix into main 2025-09-21 05:07:27 +00:00
clan-bot
bd4285a638 Update sops-nix 2025-09-21 05:01:24 +00:00
clan-bot
c418d688dc Merge pull request 'Update nixpkgs-dev in devFlake' (#5222) from update-devFlake-nixpkgs-dev into main 2025-09-21 00:05:33 +00:00
clan-bot
69ea1a211f Update nixpkgs-dev in devFlake 2025-09-21 00:01:33 +00:00
clan-bot
02117d8698 Merge pull request 'Update nix-darwin' (#5221) from update-nix-darwin into main 2025-09-20 20:05:15 +00:00
clan-bot
91643bafbe Update nix-darwin 2025-09-20 20:00:38 +00:00
pinpox
8223120521 Merge pull request 'Add yggdrasil clanService' (#5104) from yggdrasil-vars into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5104
2025-09-20 14:05:54 +00:00
pinpox
8e279a1e71 Add yggdrasil clanService 2025-09-20 16:03:26 +02:00
clan-bot
d6c891750d Merge pull request 'Update nixpkgs-dev in devFlake' (#5220) from update-devFlake-nixpkgs-dev into main 2025-09-20 10:04:45 +00:00
clan-bot
c73d954b55 Update nixpkgs-dev in devFlake 2025-09-20 10:01:30 +00:00
Luis Hebendanz
4ec6ec0090 Merge pull request 'clan-cli: Increase test coverage for clan flash list' (#5194) from Qubasa/clan-core:add_flash_test into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5194
2025-09-20 00:19:33 +00:00
Qubasa
ec98cdf097 clan-cli: Increase test coverage for clan flash list 2025-09-20 02:15:33 +02:00
clan-bot
4ad348d881 Merge pull request 'Update nixpkgs-dev in devFlake' (#5219) from update-devFlake-nixpkgs-dev into main 2025-09-20 00:05:55 +00:00
clan-bot
728d651ad1 Update nixpkgs-dev in devFlake 2025-09-20 00:01:33 +00:00
Luis Hebendanz
fb4c151969 Merge pull request 'clan machines generations' (#4848) from Qubasa/clan-core:add_generate_cli into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/4848
2025-09-19 23:30:19 +00:00
Glen Huang
3cf979f0ed ui/divider: use css modules 2025-09-19 22:29:18 +08:00
Glen Huang
3bc31b3e3f ui: use css modules for sidebar components 2025-09-19 22:22:01 +08:00
brianmcgee
99f167a89f Merge pull request 'ui: use css modules for Typography and SidebarBody' (#5215) from hgl into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5215
Reviewed-by: brianmcgee <brian@bmcgee.ie>
2025-09-19 13:48:14 +00:00
hsjobeki
ed432cc4cf Merge pull request 'UI: add update service' (#5216) from update-service into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5216
2025-09-19 13:44:12 +00:00
Michael Hoang
4ec5be9476 Merge pull request 'treewide: fix evaluation warnings' (#5214) from nuke-warnings into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5214
2025-09-19 13:29:41 +00:00
Michael Hoang
00a864663b flash-installer: fix evaluation warnings 2025-09-19 15:24:59 +02:00
Michael Hoang
9f1d8d22e8 demo-iso: fix evaluation warning 2025-09-19 15:23:27 +02:00
Johannes Kirschbauer
6f791ac086 UI: add update service 2025-09-19 15:01:53 +02:00
Glen Huang
133f4aee53 ui: use css modules for Typography and SidebarBody
Extra changes:
- Add missing transition to according triggers in SidebarBody
- More sensible tag for each Typography hierarchy
2025-09-19 20:52:22 +08:00
clan-bot
91985504d0 Merge pull request 'Update nuschtos in devFlake' (#5213) from update-devFlake-nuschtos into main 2025-09-19 10:09:08 +00:00
clan-bot
ba5968ce93 Merge pull request 'Update nixpkgs-dev in devFlake' (#5212) from update-devFlake-nixpkgs-dev into main 2025-09-19 10:08:02 +00:00
clan-bot
3370212cea Update nuschtos in devFlake 2025-09-19 10:01:33 +00:00
clan-bot
3043a92815 Update nixpkgs-dev in devFlake 2025-09-19 10:01:30 +00:00
brianmcgee
77921f2857 Merge pull request 'ui/onboarding: use css modules' (#5171) from hgl/clan-core:css into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5171
Reviewed-by: brianmcgee <brian@bmcgee.ie>
2025-09-19 09:56:37 +00:00
Glen Huang
f22c8f166e ui: use css modules for Button, Icon and Loader
Changes:
- use mergeProps to set default values instead of using ||
- Let a parent component override a child by specifying `in`
- Button can only have at most two icons,  make it accept icon and endIcon
- Rely on class to denote Button's icon type, instead of querying the DOM structure in css
- Dynamic with undefined as the component already skips rendering, no need to explicit check the component value
- move fgClass in css.tsx to a css module
2025-09-19 17:32:29 +08:00
Qubasa
d6ae9cde3f clanServices: add deprecation warning to monitoring service settings. 2025-09-19 10:34:02 +02:00
clan-bot
51b6717202 Merge pull request 'Update nuschtos in devFlake' (#5210) from update-devFlake-nuschtos into main 2025-09-19 00:05:33 +00:00
clan-bot
d27576c130 Merge pull request 'Update nixpkgs-dev in devFlake' (#5209) from update-devFlake-nixpkgs-dev into main 2025-09-19 00:04:22 +00:00
clan-bot
0a972b387c Update nuschtos in devFlake 2025-09-19 00:01:39 +00:00
clan-bot
e8bbe91685 Update nixpkgs-dev in devFlake 2025-09-19 00:01:36 +00:00
Qubasa
455268f6ce clanServices: add ca certs for monitoring/telegraf 2025-09-19 01:29:23 +02:00
clan-bot
ce2e80bcf1 Merge pull request 'Update treefmt-nix in devFlake' (#5205) from update-devFlake-treefmt-nix into main 2025-09-18 20:04:17 +00:00
clan-bot
8e9105735c Update treefmt-nix in devFlake 2025-09-18 20:01:38 +00:00
hsjobeki
db75af2445 Merge pull request 'clanInternals: remove unused options' (#5206) from module-clan into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5206
2025-09-18 16:13:23 +00:00
clan-bot
24014564e8 Merge pull request 'Update nixpkgs-dev in devFlake' (#5204) from update-devFlake-nixpkgs-dev into main 2025-09-18 15:49:06 +00:00
clan-bot
4939723477 Update nixpkgs-dev in devFlake 2025-09-18 17:46:48 +02:00
clan-bot
8be04e790b Merge pull request 'Update treefmt-nix' (#5202) from update-treefmt-nix into main 2025-09-18 15:45:00 +00:00
clan-bot
eaf94f90fe Update treefmt-nix 2025-09-18 17:40:37 +02:00
Johannes Kirschbauer
ac07265ea4 clan/module: remove deprecated clanInternals.inventory 2025-09-18 15:35:39 +00:00
Johannes Kirschbauer
92ca540a42 clan/module: remove clanModules from clanInternals 2025-09-18 15:35:39 +00:00
Mic92
8b18418e7c Merge pull request 'fix pytest' (#5207) from fix-tests into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5207
2025-09-18 15:35:28 +00:00
Jörg Thalheim
9b1573db63 Revert "Merge pull request 'Update clan-core-for-checks in devFlake' (#5132) from update-devFlake-clan-core-for-checks into main"
This reverts commit 62eedacd33, reversing
changes made to 1a344f759a.
2025-09-18 17:31:31 +02:00
Jörg Thalheim
47be7d6865 fix pytest 2025-09-18 17:07:50 +02:00
hsjobeki
1e18d7b897 Merge pull request 'clan_lib: fix update_service:_instance api name' (#5201) from api-update-service into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5201
2025-09-18 14:46:00 +00:00
Michael Hoang
f099e92394 Merge pull request 'gitea: run nix with --print-build-logs to workflows' (#5200) from push-tymntmvkqxmx into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5200
2025-09-18 14:45:10 +00:00
Johannes Kirschbauer
668fc39dba clan_lib: fix update_service:_instance api name 2025-09-18 16:45:03 +02:00
Michael Hoang
589d353285 gitea: run nix with --print-build-logs to workflows 2025-09-18 16:42:15 +02:00
clan-bot
62eedacd33 Merge pull request 'Update clan-core-for-checks in devFlake' (#5132) from update-devFlake-clan-core-for-checks into main 2025-09-18 14:35:43 +00:00
Michael Hoang
4ce8f03ea6 checks: add dependency on bubblewrap 2025-09-18 16:34:15 +02:00
clan-bot
75367f4d6f Update clan-core-for-checks in devFlake 2025-09-18 16:34:15 +02:00
hsjobeki
1a344f759a Merge pull request 'clan_lib/api: init update service instance' (#5199) from api-update-service into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5199
2025-09-18 14:33:18 +00:00
Johannes Kirschbauer
3cc1ea6d83 clan_lib/api: init update service instance 2025-09-18 16:31:07 +02:00
Johannes Kirschbauer
09af3f38ee clan_lib: allow delete on non-existing data 2025-09-18 16:29:55 +02:00
Johannes Kirschbauer
0f71ffd3c7 clan_lib: typecast return of get_value_by_path 2025-09-18 16:29:55 +02:00
Johannes Kirschbauer
0fef161391 clan_lib: add inventory json argument 2025-09-18 16:27:05 +02:00
hsjobeki
854481fd49 Merge pull request 'Remove function syntax from extraModules' (#5152) from remove-extainv-func into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5152
Reviewed-by: hsjobeki <hsjobeki@gmail.com>
2025-09-18 14:00:28 +00:00
Qubasa
74f853bd7c clan-cli: Add a clan machines generations command
improvements

stash
2025-09-18 15:18:33 +02:00
Mic92
5613cbe7cb Merge pull request 'telegraf: move telegraf.json into runtime directory' (#5196) from telegraf into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5196
2025-09-18 12:12:45 +00:00
Jörg Thalheim
4b549365f7 telegraf: move telegraf.json into runtime directory
No need to persist this type of data. We also don't need to allocate a
persistent user for telegraf.

Also make it a directory because otherwise thre is a potential race
condition on startup.
2025-09-18 12:11:48 +02:00
clan-bot
e03fcc25e7 Merge pull request 'Update nixpkgs-dev in devFlake' (#5197) from update-devFlake-nixpkgs-dev into main 2025-09-18 10:05:24 +00:00
clan-bot
a798fcb359 Update nixpkgs-dev in devFlake 2025-09-18 10:02:43 +00:00
Glen Huang
d163f0da14 ui/onboarding: use css modules 2025-09-18 14:39:45 +08:00
clan-bot
92e2c841e3 Merge pull request 'Update disko' (#5195) from update-disko into main 2025-09-18 05:05:05 +00:00
clan-bot
01856cf4cb Update disko 2025-09-18 05:00:35 +00:00
Luis Hebendanz
0d04b24473 Merge pull request 'clanServices: init test clan_lib.metrics.version::get_nixos_systems' (#4849) from Qubasa/clan-core:build_is_installed_api into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/4849
2025-09-17 23:42:25 +00:00
Qubasa
bc521a1b9b clanServices: jail telegraf-json to not write to tmp dir 2025-09-18 01:38:30 +02:00
Qubasa
eb321df10d clanServices: add indepth test for telegraf metrics 2025-09-18 01:14:10 +02:00
Qubasa
cdceb2a211 clanServices: init vars for telegraf 2025-09-17 21:18:51 +02:00
Qubasa
6546f8a952 clanServices: init test clan_lib.metrics.version::get_nixos_systems 2025-09-17 18:21:19 +02:00
clan-bot
b7798f5466 Merge pull request 'Update nix-darwin' (#5192) from update-nix-darwin into main 2025-09-17 15:06:05 +00:00
clan-bot
132728d757 Merge pull request 'Update nixpkgs-dev in devFlake' (#5193) from update-devFlake-nixpkgs-dev into main 2025-09-17 15:05:57 +00:00
clan-bot
2a52548120 Update nixpkgs-dev in devFlake 2025-09-17 15:01:36 +00:00
clan-bot
71533f118f Update nix-darwin 2025-09-17 15:00:41 +00:00
hsjobeki
c9ab0a42ac Merge pull request 'docs: bring back structured clan options' (#5191) from docs-clan-options into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5191
2025-09-17 13:20:42 +00:00
Johannes Kirschbauer
e7fe50fd6e docs: rename tab to 'search clan options' 2025-09-17 15:17:25 +02:00
Johannes Kirschbauer
757f2412a6 docs: bring back structured clan options 2025-09-17 15:15:32 +02:00
Kenji Berthold
f8d153b318 Merge pull request 'docs: Fix erroneous NixOS spelling' (#5189) from kenji/ke-fix-nixos-rebuild into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5189
2025-09-17 11:20:03 +00:00
a-kenji
782a9375bf docs: Fix erroneous NixOS spelling 2025-09-17 12:40:43 +02:00
Michael Hoang
e332ae9059 Merge pull request 'cli: don't commit the target host for privacy' (#5188) from push-yvrxxtxymrsr into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5188
2025-09-17 10:15:02 +00:00
Michael Hoang
9a9d6bf22d cli: don't commit the target host for privacy 2025-09-17 12:09:26 +02:00
Luis Hebendanz
593c2d3d5b Merge pull request 'docs: dedup vars' (#5187) from Qubasa/clan-core:dedup_docs into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5187
2025-09-17 09:31:53 +00:00
Qubasa
59c463f326 docs: dedup vars 2025-09-17 11:29:43 +02:00
hsjobeki
f1416bdcba Merge pull request 'lib/types: add docs for custom type' (#5186) from lib-1 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5186
2025-09-17 09:07:45 +00:00
Johannes Kirschbauer
7a38e976a4 lib/types: add docs for custom type 2025-09-17 11:03:08 +02:00
clan-bot
ae28196039 Merge pull request 'Update nixpkgs' (#5179) from update-nixpkgs into main 2025-09-17 05:07:50 +00:00
clan-bot
a1b7c4f8f7 Update nixpkgs 2025-09-17 05:01:06 +00:00
Luis Hebendanz
66b6290d32 Merge pull request 'feat: add zerotier to network cli' (#5178) from Qubasa/clan-core:zerotier_network into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5178
2025-09-16 19:17:48 +00:00
Qubasa
4aff2a9d40 vars: add machine name to errors 2025-09-16 21:13:54 +02:00
Qubasa
9b39ca42e0 clan_lib: implement check_zerotier_running for network overview 2025-09-16 21:13:54 +02:00
Qubasa
104058b79c zerotier: increase network prio 2025-09-16 21:13:54 +02:00
Mic92
5dd30a8edd Merge pull request 'clanServices/wifi: allow WPA3 and other key management settings' (#5159) from nim65s/clan-core:wpa3 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5159
Reviewed-by: Kenji Berthold <aks.kenji@protonmail.com>
2025-09-16 15:53:44 +00:00
clan-bot
5127a74515 Merge pull request 'Update nixpkgs' (#5174) from update-nixpkgs into main 2025-09-16 15:51:24 +00:00
clan-bot
fd1c0dfabc Update nixpkgs 2025-09-16 15:47:29 +00:00
Moritz Böhme
3d8fab062d feat: add zerotier to network cli 2025-09-16 17:24:11 +02:00
Luis Hebendanz
559c13f41b Merge pull request 'kurogeek-flakeModules-clan-nixos-test' (#5177) from Qubasa/clan-core:kurogeek-flakeModules-clan-nixos-test into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5177
2025-09-16 15:20:16 +00:00
hsjobeki
3afe48f9cf Merge pull request 'lib/jsonschema: remove unused arguments' (#5176) from lib-1 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5176
2025-09-16 15:15:56 +00:00
Qubasa
555c2e1bc9 clan-core: use importApply for testModule export 2025-09-16 17:14:33 +02:00
Johannes Kirschbauer
80bc3daf96 lib/jsonschema: remove unused arguments 2025-09-16 17:11:19 +02:00
clan-bot
fc1a68b99c Merge pull request 'Update nixpkgs-dev in devFlake' (#5175) from update-devFlake-nixpkgs-dev into main 2025-09-16 15:09:01 +00:00
kurogeek
cbdf8745eb nixosTests option is exposed via flakeModules.testModule 2025-09-16 17:03:31 +02:00
clan-bot
b08f9743f0 Update nixpkgs-dev in devFlake 2025-09-16 15:01:32 +00:00
Luis Hebendanz
50239028b6 Merge pull request 'docs: fix small nitpicks' (#5173) from Qubasa/clan-core:improve_vars_docs2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5173
2025-09-16 15:00:52 +00:00
Qubasa
0f0cfbc7e0 docs: fix small nitpicks 2025-09-16 16:57:40 +02:00
Luis Hebendanz
d4e601586d Merge pull request 'docs: init new structure' (#5157) from improve_vars_docs2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5157
2025-09-16 14:48:15 +00:00
Qubasa
ada80be417 docs: re-add nixos rebuild
docs: fix strict errors
2025-09-16 16:45:09 +02:00
clan-bot
e4b316c14a Merge pull request 'Update nixpkgs' (#4821) from update-nixpkgs into main 2025-09-16 14:19:39 +00:00
hsjobeki
a0fda9b819 Merge pull request 'docs: remove unused plugin' (#5172) from doc-98 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5172
2025-09-16 14:13:10 +00:00
Luis Hebendanz
125a882938 Merge pull request 'bundle nix packagemanager by default' (#5166) from nix into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5166
2025-09-16 14:10:29 +00:00
Luis Hebendanz
fc223939ec Merge pull request 'simplify_http_backend' (#5167) from Qubasa/clan-core:simplify_http_backend into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5167
2025-09-16 14:09:27 +00:00
Michael Hoang
2152646df6 cli: don't hardcode system for flash list 2025-09-16 16:07:54 +02:00
Michael Hoang
1f9b44a4ad syncthing: fix vars generator not working with latest Syncthing 2025-09-16 16:07:54 +02:00
Michael Hoang
8a1f924f72 treewide: reformat 2025-09-16 16:07:54 +02:00
Michael Hoang
e43779f8d6 clanServices: remove useless importApply 2025-09-16 16:07:54 +02:00
Michael Hoang
69b0c36381 docs: use manifest.readme instead of path manipulation 2025-09-16 16:07:54 +02:00
Michael Hoang
479d7d536e cli/persist: explicitly annotate type to assist mypy 2025-09-16 16:07:54 +02:00
Michael Hoang
19a209c75a cli/templates: only catch ClanError 2025-09-16 16:07:54 +02:00
clan-bot
c249994e18 Update nixpkgs 2025-09-16 16:07:54 +02:00
hsjobeki
6910620629 Merge pull request 'docs: remove references to buildClan' (#5170) from docs-99 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5170
2025-09-16 14:07:43 +00:00
Johannes Kirschbauer
3f17a6c121 docs: remove unused plugin 2025-09-16 16:07:36 +02:00
Qubasa
864b131010 clan-app: Move middleware to it's own folder 2025-09-16 16:06:16 +02:00
Johannes Kirschbauer
50c8df7e40 flake: keep imports sorted 2025-09-16 16:02:10 +02:00
Johannes Kirschbauer
a80df32c59 lib: cleanup readme 2025-09-16 16:02:10 +02:00
Johannes Kirschbauer
b1e3e3616e docs: remove unused export 2025-09-16 16:02:10 +02:00
Johannes Kirschbauer
3d680bcc5f docs: remove references to buildClan 2025-09-16 16:02:05 +02:00
Qubasa
3f5bf8e171 docs: remove stale link
docs: revert nuschtos changes
2025-09-16 16:01:03 +02:00
Qubasa
31ff7b903c docs: add next step button to physical machine 2025-09-16 16:01:03 +02:00
Qubasa
62eb42ae5b docs: Add a what is clan extendable to homepage 2025-09-16 16:01:03 +02:00
Qubasa
d25818580d docs: Fixup stale references 2025-09-16 16:01:03 +02:00
Johannes Kirschbauer
13eba4d7c5 docs: changes from johannes
WIP
2025-09-16 16:01:03 +02:00
Qubasa
86c4555bc0 docs: init new structure 2025-09-16 16:00:40 +02:00
hsjobeki
39eb13eebb Merge pull request 'lib: move clan out of lib into flake' (#5169) from inv-1 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5169
2025-09-16 13:33:45 +00:00
Johannes Kirschbauer
daea2da358 lib: move clan out of lib into flake
This allows clanLib to stay agnostic and be more testable
2025-09-16 15:28:12 +02:00
hsjobeki
d995c0b118 Merge pull request 'inventory: remove deprecated frontmatter' (#5168) from inv-1 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5168
2025-09-16 13:05:46 +00:00
Johannes Kirschbauer
5e22830048 inventory: remove deprecated frontmatter 2025-09-16 14:59:39 +02:00
DavHau
15d117d06b Merge pull request 'generate_test_vars: fix + add tests' (#5163) from dave into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5163
2025-09-16 12:23:04 +00:00
DavHau
c936830bc6 generate_test_vars: add test 2025-09-16 19:16:53 +07:00
Jörg Thalheim
8e50ddc84b bundle nix packagemanager by default
detsys nix lazy-path seems to be incompatible with our caching and
deployment commands. By shipping nix, we can be sure to have binaries we
tested.
2025-09-16 13:25:06 +02:00
hsjobeki
f2134754c5 Merge pull request 'inventory: make resolve module a clanLib function' (#5165) from inv-1 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5165
2025-09-16 11:14:40 +00:00
Johannes Kirschbauer
f49df8d574 inventory: make resolve module a clanLib function
Unclutter inventory logic
2025-09-16 13:09:56 +02:00
Kenji Berthold
d873e667ba Merge pull request 'docs: Add information about nixos-rebuild' (#5000) from ke-docs-add-nixos-rebuild into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5000
2025-09-16 10:42:32 +00:00
hsjobeki
6c2fa3e4ed Merge pull request 'inventory: inline manifest module' (#5164) from inv-1 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5164
2025-09-16 10:42:17 +00:00
Johannes Kirschbauer
0bce953c2f inventory: inline manifest module
Reducing the clutter of files
Its sometimes better to have all the options in one place if reusing is not a concern
2025-09-16 12:36:58 +02:00
clan-bot
dd1f045022 Merge pull request 'Update sops-nix' (#5135) from update-sops-nix into main 2025-09-16 10:21:43 +00:00
clan-bot
f7cd8c8863 Update sops-nix 2025-09-16 10:01:09 +00:00
Qubasa
ee0f111fc9 clan-app: change ApiBridge ABC class to Protocol 2025-09-16 11:48:59 +02:00
DavHau
ea32fdbd93 generate_test_vars: move into clan_cli
Reduces overhead by not having to manage a separate package for this small tool
2025-09-16 16:37:41 +07:00
DavHau
1f3aa0075e generate_test_vars: fix script 2025-09-16 16:37:41 +07:00
DavHau
5d38824d8e cli/debug: fix web-pdb 2025-09-16 16:37:41 +07:00
a-kenji
5ee6156b29 docs: Add information about nixos-rebuild 2025-09-16 11:29:46 +02:00
hsjobeki
a90197cfd4 Merge pull request 'inventory: unify modules' (#5154) from inventory-unify into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5154
2025-09-16 09:02:24 +00:00
hsjobeki
cd1351cd6f Merge pull request 'lib: remove usages of flip' (#5155) from remove-flip into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5155
2025-09-16 09:01:27 +00:00
Mic92
1b193123b2 Merge pull request 'docs: Add missing space' (#5160) from hgl/clan-core:doc into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5160
Reviewed-by: Kenji Berthold <aks.kenji@protonmail.com>
2025-09-16 08:34:17 +00:00
Glen Huang
81126da053 docs: Add missing space 2025-09-16 15:07:32 +08:00
clan-bot
67795730a2 Merge pull request 'Update nixpkgs-dev in devFlake' (#5158) from update-devFlake-nixpkgs-dev into main 2025-09-16 00:07:39 +00:00
clan-bot
e6797c6f20 Update nixpkgs-dev in devFlake 2025-09-16 00:01:36 +00:00
Guilhem Saurel
8c42cc377c clanServices/wifi: allow WPA3 and other key management settings 2025-09-15 19:33:19 +02:00
Johannes Kirschbauer
5750ab8d3a lib: remove usages of flip
Makes the code more consistent to read.
Usage in 9 places is rather inconsistent style.
2025-09-15 13:17:09 +02:00
Johannes Kirschbauer
d3397af442 inventory: unify modules 2025-09-15 12:18:35 +02:00
pinpox
ea3818bb50 Remove function syntax from extraModules
Related: https://git.clan.lol/clan/clan-core/issues/5151
2025-09-15 09:52:07 +02:00
clan-bot
93280a9f98 Merge pull request 'Update data-mesher' (#5150) from update-data-mesher into main 2025-09-15 05:09:00 +00:00
clan-bot
d89ddfabec Update data-mesher 2025-09-15 05:00:39 +00:00
clan-bot
e2946615f0 Merge pull request 'Update nuschtos in devFlake' (#5149) from update-devFlake-nuschtos into main 2025-09-15 00:17:45 +00:00
clan-bot
bce9f9a747 Update nuschtos in devFlake 2025-09-15 00:01:49 +00:00
clan-bot
b494bdee21 Merge pull request 'Update nixpkgs-dev in devFlake' (#5148) from update-devFlake-nixpkgs-dev into main 2025-09-14 10:09:05 +00:00
clan-bot
13632ff659 Update nixpkgs-dev in devFlake 2025-09-14 10:01:35 +00:00
clan-bot
90ad8054d0 Merge pull request 'Update nixpkgs-dev in devFlake' (#5147) from update-devFlake-nixpkgs-dev into main 2025-09-13 15:10:47 +00:00
clan-bot
716d4a17f5 Update nixpkgs-dev in devFlake 2025-09-13 15:01:35 +00:00
clan-bot
dcd1273f3f Merge pull request 'Update nixpkgs-dev in devFlake' (#5145) from update-devFlake-nixpkgs-dev into main 2025-09-12 15:10:09 +00:00
clan-bot
899c9eed0e Update nixpkgs-dev in devFlake 2025-09-12 15:01:35 +00:00
Luis Hebendanz
af85041e5e Merge pull request 'docs: Move age plugins to vars/sops backend group. Improve age plugin documentation' (#5144) from Qubasa/clan-core:improve_vars_docs2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5144
2025-09-12 12:20:28 +00:00
Qubasa
6a96ce8679 docs: Move age plugins to vars/sops backend group. Improve age plugin documentation 2025-09-12 14:13:49 +02:00
Luis Hebendanz
60195f9614 Merge pull request 'docs: fix multiple format errors, improve readability of vars' (#5142) from Qubasa/clan-core:improve_vars_docs into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5142
2025-09-12 10:46:15 +00:00
Qubasa
447b0bf8ac docs: fix uml errors 2025-09-12 12:42:41 +02:00
clan-bot
fd162f6fc8 Merge pull request 'Update nuschtos in devFlake' (#5143) from update-devFlake-nuschtos into main 2025-09-12 00:10:15 +00:00
clan-bot
e4bf6523ad Update nuschtos in devFlake 2025-09-12 00:01:43 +00:00
Qubasa
5312799784 docs: fix multiple format errors, improve readability of vars 2025-09-11 19:45:16 +02:00
Luis Hebendanz
7d265a6156 Merge pull request 'Fix link in README and typo in zerotier service' (#5137) from ErinvanderVeen/clan-core:main into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5137
2025-09-11 13:02:07 +00:00
Luis Hebendanz
f8428947ca Merge pull request 'fix: (re)add missing tofu --host-key-check option' (#5140) from friedow/clan-core:fix/missing-host-key-check into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5140
2025-09-11 13:00:26 +00:00
Christian Friedow
196d7c95c0 fix: add missing --host-key-check option 2025-09-11 14:30:48 +02:00
clan-bot
6be40f6f79 Merge pull request 'Update nixpkgs-dev in devFlake' (#5139) from update-devFlake-nixpkgs-dev into main 2025-09-11 10:09:35 +00:00
clan-bot
3aefabd818 Update nixpkgs-dev in devFlake 2025-09-11 10:01:38 +00:00
clan-bot
230e7e6769 Merge pull request 'Update nixpkgs-dev in devFlake' (#5138) from update-devFlake-nixpkgs-dev into main 2025-09-11 05:10:22 +00:00
clan-bot
46bae67645 Update nixpkgs-dev in devFlake 2025-09-11 05:01:36 +00:00
Erin van der Veen
890e8c7003 chore(zerotier): fix stableEndpoint example 2025-09-10 20:48:50 +02:00
Erin van der Veen
0d3a62321a chore(readme): fix contributing link 2025-09-10 20:47:22 +02:00
clan-bot
ef82e07293 Merge pull request 'Update nixpkgs-dev in devFlake' (#5136) from update-devFlake-nixpkgs-dev into main 2025-09-10 15:13:31 +00:00
clan-bot
7c8c3811f4 Merge pull request 'Update disko' (#5134) from update-disko into main 2025-09-10 15:06:42 +00:00
clan-bot
9b2c97a855 Update nixpkgs-dev in devFlake 2025-09-10 15:01:50 +00:00
clan-bot
785f789628 Update disko 2025-09-10 15:00:51 +00:00
clan-bot
a034fefb51 Merge pull request 'Update sops-nix' (#5130) from update-sops-nix into main 2025-09-10 14:04:53 +00:00
clan-bot
bcd846fe5e Update sops-nix 2025-09-10 10:01:13 +00:00
clan-bot
a6214f431d Merge pull request 'Update nixpkgs-dev in devFlake' (#5131) from update-devFlake-nixpkgs-dev into main 2025-09-10 00:12:29 +00:00
clan-bot
b8890f6732 Update nixpkgs-dev in devFlake 2025-09-10 00:01:36 +00:00
Luis Hebendanz
370b4f535d Merge pull request 'vars: docs' (#4119) from vars-docs into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/4119
2025-09-09 20:59:52 +00:00
Qubasa
ef66c9b5be docs: vars ai fixups 2025-09-09 22:53:15 +02:00
Jörg Thalheim
79d44f7c30 vars: docs
re-add vars-backend.md

re-add vars-backend.md
2025-09-09 22:12:07 +02:00
clan-bot
e72e100965 Merge pull request 'Update nixpkgs-dev in devFlake' (#5129) from update-devFlake-nixpkgs-dev into main 2025-09-09 20:10:13 +00:00
clan-bot
180e2a601c Merge pull request 'Update nix-darwin' (#5128) from update-nix-darwin into main 2025-09-09 20:06:57 +00:00
clan-bot
90d265089b Update nixpkgs-dev in devFlake 2025-09-09 20:01:39 +00:00
clan-bot
a0fa52fded Update nix-darwin 2025-09-09 20:00:41 +00:00
Luis Hebendanz
af4e9e784b Merge pull request 'docs: Add secure boot info to disk encryption guide' (#5127) from docs_fix into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5127
2025-09-09 17:46:09 +00:00
Qubasa
cb162a53b8 docs: Add secure boot info to disk encryption guide
fix wrong link
2025-09-09 19:41:59 +02:00
Luis Hebendanz
16e506ea1a Merge pull request 'doc: use clan-core as inputs name' (#5126) from Mayeu-doc/clan-core-input2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5126
2025-09-09 17:29:06 +00:00
Mayeu
11ec94c17f doc: use clan-core as inputs name 2025-09-09 19:18:35 +02:00
clan-bot
8468b1ebaf Merge pull request 'Update nixpkgs-dev in devFlake' (#5123) from update-devFlake-nixpkgs-dev into main 2025-09-09 15:08:55 +00:00
clan-bot
ec83130fa4 Update nixpkgs-dev in devFlake 2025-09-09 15:01:38 +00:00
Luis Hebendanz
c1e41f8fd9 Merge pull request 'docs: update concepts/inventory to match new option structure' (#5121) from friedow/clan-core:docs/concept-inventory into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5121
2025-09-09 14:44:30 +00:00
Christian Friedow
3630e778ad docs: update concepts/inventory to match new option structure 2025-09-09 15:35:23 +02:00
Luis Hebendanz
916186c465 Merge pull request 'webview: update to support displaying app icon on macOS' (#5120) from Qubasa/clan-core:demo_fix into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5120
2025-09-09 10:12:56 +00:00
clan-bot
25e733b8d7 Merge pull request 'Update nixpkgs-dev in devFlake' (#5112) from update-devFlake-nixpkgs-dev into main 2025-09-09 10:11:14 +00:00
Luis Hebendanz
2599998b17 Merge pull request 'add apply "machine" as an alias to clan machines create' (#5005) from apply into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5005
2025-09-09 10:08:58 +00:00
clan-bot
56649b7fe2 Merge pull request 'Update data-mesher' (#5111) from update-data-mesher into main 2025-09-09 10:07:57 +00:00
Luis Hebendanz
fc85622e01 Merge pull request 'ui/imports: fix asset imports' (#5119) from fix-imports into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5119
2025-09-09 10:02:29 +00:00
clan-bot
c499c563bb Update nixpkgs-dev in devFlake 2025-09-09 10:02:19 +00:00
clan-bot
b255ba0367 Update data-mesher 2025-09-09 10:01:18 +00:00
Luis Hebendanz
493adebd7c Merge pull request 'docs: Fix minor typo' (#5110) from vorburger/clan-core:docs-typo into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5110
2025-09-09 09:59:21 +00:00
Qubasa
cac2866356 webview: update to support displaying app icon on macOS 2025-09-09 11:54:18 +02:00
Qubasa
981f6052ad zerotierone: Add restartUnit to vars generators 2025-09-09 09:49:38 +00:00
Michael Vorburger
6e888c38fa docs: Fix minor typo 2025-09-08 01:03:55 +02:00
clan-bot
e953f807de Merge pull request 'Update disko' (#5108) from update-disko into main 2025-09-07 15:07:42 +00:00
clan-bot
c2534e9a42 Update disko 2025-09-07 15:00:37 +00:00
clan-bot
b0feef1a40 Merge pull request 'Update nixpkgs-dev in devFlake' (#5101) from update-devFlake-nixpkgs-dev into main 2025-09-07 05:08:56 +00:00
clan-bot
d4c26087df Update nixpkgs-dev in devFlake 2025-09-07 05:01:56 +00:00
clan-bot
1a9bbab667 Merge pull request 'Update nix-darwin' (#5100) from update-nix-darwin into main 2025-09-06 05:08:32 +00:00
clan-bot
b23171f291 Update nix-darwin 2025-09-06 05:00:40 +00:00
clan-bot
087423597b Merge pull request 'Update nixpkgs-dev in devFlake' (#5099) from update-devFlake-nixpkgs-dev into main 2025-09-05 10:08:09 +00:00
clan-bot
602dc192f3 Update nixpkgs-dev in devFlake 2025-09-05 10:01:37 +00:00
clan-bot
dba166cc8a Merge pull request 'Update nixpkgs-dev in devFlake' (#5097) from update-devFlake-nixpkgs-dev into main 2025-09-05 00:09:56 +00:00
clan-bot
21b872a1c9 Merge pull request 'Update nix-darwin' (#5096) from update-nix-darwin into main 2025-09-05 00:07:04 +00:00
clan-bot
be48ffe724 Update nixpkgs-dev in devFlake 2025-09-05 00:01:40 +00:00
clan-bot
7673b72991 Update nix-darwin 2025-09-05 00:00:43 +00:00
Johannes Kirschbauer
42bbd7c5fd ui/imports: fix asset imports 2025-09-04 19:35:06 +02:00
clan-bot
823114435a Merge pull request 'Update nixpkgs-dev in devFlake' (#5095) from update-devFlake-nixpkgs-dev into main 2025-09-04 15:08:37 +00:00
clan-bot
e7efbb701b Update nixpkgs-dev in devFlake 2025-09-04 15:01:35 +00:00
hsjobeki
30d9c86015 Merge pull request 'ui/move: fix bug, with interleaving positions' (#5094) from ui/password-input-reveal into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5094
2025-09-03 20:00:53 +00:00
Johannes Kirschbauer
313b77be79 ui/move: fix bug, with interleaving positions 2025-09-03 21:57:27 +02:00
hsjobeki
6229e62281 Merge pull request 'ui/services: fix reactivity issue when switching between services' (#5093) from ui/password-input-reveal into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5093
2025-09-03 19:53:56 +00:00
Johannes Kirschbauer
49ff4da6be ui/services: fix reactivity issue when switching between services 2025-09-03 21:50:15 +02:00
hsjobeki
6d6521803d Merge pull request 'ui/move: fix bug, when long press without moving' (#5092) from ui/password-input-reveal into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5092
2025-09-03 19:44:14 +00:00
Johannes Kirschbauer
afd7bfc8c0 ui/move: fix bug, when long press without moving 2025-09-03 21:40:46 +02:00
hsjobeki
88fa3dff83 Merge pull request 'ui/3d-fonts: replace troika with 3d rendered default font' (#5091) from ui/password-input-reveal into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5091
2025-09-03 19:38:05 +00:00
Johannes Kirschbauer
629ef65ce5 ui/3d-fonts: replace troika with 3d rendered default font 2025-09-03 21:34:26 +02:00
Johannes Kirschbauer
92151331f3 ui/devShell: remove fonts directory if exists 2025-09-03 21:33:40 +02:00
Johannes Kirschbauer
67dcd45dd5 ui/services: simplify and sort 2025-09-03 21:15:06 +02:00
hsjobeki
95a4a69ffb Merge pull request 'ui/fieldset: use normal div, due to webkit layout bug for fieldsets' (#5090) from ui/password-input-reveal into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5090
2025-09-03 19:11:47 +00:00
Johannes Kirschbauer
88343ce523 ui/sidebar: remove spurious console.log 2025-09-03 21:05:58 +02:00
Johannes Kirschbauer
fd9dd6f872 ui/fieldset: use normal div, due to webkit layout bug for fieldsets 2025-09-03 21:05:35 +02:00
Brian McGee
aaaa310c7f feat(ui): refine input to allow start and end components 2025-09-03 21:05:35 +02:00
Luis Hebendanz
ffbf22eb60 Merge pull request 'docs: Fixup out of date networking docs' (#5089) from Qubasa/clan-core:fix_docs into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5089
2025-09-03 16:39:22 +00:00
Qubasa
8d3e0d2209 docs: Fixup out of date networking docs 2025-09-03 18:35:55 +02:00
Luis Hebendanz
c05a890d50 Merge pull request 'clanServices: telegraf -> fix telegraf-json failing because file does not yet exist' (#5088) from Qubasa/clan-core:telegraf_fix into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5088
2025-09-03 16:08:07 +00:00
Qubasa
03458ffbd8 clanServices: telegraf -> fix telegraf-json failing because file does not yet exist 2025-09-03 17:51:51 +02:00
clan-bot
ea098048c8 Merge pull request 'Update nixpkgs-dev in devFlake' (#5086) from update-devFlake-nixpkgs-dev into main 2025-09-03 15:07:41 +00:00
brianmcgee
838ed6ead7 Merge pull request 'feat(ui): refine input to allow start and end components' (#5080) from ui/password-input-reveal into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5080
2025-09-03 15:02:30 +00:00
clan-bot
7e7278b99b Update nixpkgs-dev in devFlake 2025-09-03 15:01:36 +00:00
Brian McGee
f4d7728f3f feat(ui): refine input to allow start and end components 2025-09-03 15:55:49 +01:00
brianmcgee
c9b71496eb Merge pull request 'feat(ui): improve placeholder to MachineTags' (#5085) from ui/improve-tags-placeholder into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5085
2025-09-03 14:42:14 +00:00
Brian McGee
cd1f9c5a8b feat(ui): improve placeholder to MachineTags 2025-09-03 15:38:57 +01:00
hsjobeki
56379510d0 Merge pull request 'ui/sidebar: max-width of section, scroll within sections' (#5083) from ui/update-machine into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5083
2025-09-03 12:49:22 +00:00
Johannes Kirschbauer
389299ac7d ui/refetch: don't block button clicks, move context out of modal 2025-09-03 14:45:55 +02:00
Johannes Kirschbauer
9cf04bcb5f ui/services: pass instance to ServiceRoute 2025-09-03 14:31:42 +02:00
Johannes Kirschbauer
c370598564 ui/sidebar: max-width of section, scroll within sections 2025-09-03 14:31:05 +02:00
brianmcgee
04001ff178 Merge pull request 'feat(ui): refresh state after machine install or update' (#5081) from ui/refresh-state into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5081
2025-09-03 11:22:15 +00:00
Brian McGee
194c3080ea feat(ui): refresh state after machine install or update
Closes #5071
2025-09-03 12:10:35 +01:00
hsjobeki
60d1e524ac Merge pull request 'ui/update: integrate with api' (#5079) from ui/update-machine into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5079
2025-09-03 10:46:45 +00:00
Johannes Kirschbauer
672af1c63d ui/update: fix cancel/close 2025-09-03 12:41:26 +02:00
Johannes Kirschbauer
6cb728a4ca ui/update: integrate with api 2025-09-03 12:29:23 +02:00
hsjobeki
a074650947 Merge pull request 'ui/install: vars fix loading screen' (#5077) from ui/update-machine into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5077
2025-09-03 06:34:29 +00:00
Johannes Kirschbauer
f169a40c69 ui/install: fix onClose not called 2025-09-03 08:30:57 +02:00
Johannes Kirschbauer
480d5ee18c ui/install: vars fix loading screen 2025-09-03 08:28:51 +02:00
hsjobeki
ba47d797e4 Merge pull request 'ui/update: init update machine' (#5076) from ui/update-machine into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5076
2025-09-02 20:18:01 +00:00
Johannes Kirschbauer
3e5f84dcb4 ui/update: init update machine 2025-09-02 22:14:34 +02:00
brianmcgee
e398d98b42 Merge pull request 'fix(ui): re-enable machine state query but disable polling' (#5075) from ui/fix-machine-status into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5075
2025-09-02 20:13:22 +00:00
Brian McGee
09e5f78aae fix(ui): re-enable machine state query but disable polling 2025-09-02 21:09:13 +01:00
clan-bot
ae1680a720 Merge pull request 'Update nixpkgs-dev in devFlake' (#5074) from update-devFlake-nixpkgs-dev into main 2025-09-02 20:07:56 +00:00
clan-bot
9abf557353 Update nixpkgs-dev in devFlake 2025-09-02 20:01:33 +00:00
brianmcgee
dc0ec3443e Merge pull request 'feat(ui): simplify machine status' (#5073) from ui/update-machine into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5073
2025-09-02 19:28:09 +00:00
Brian McGee
d6c6918f85 feat(ui): simplify machine status 2025-09-02 21:20:25 +02:00
hsjobeki
24756442c8 Merge pull request 'feat(ui): services in sidebar and sidebar pane' (#5072) from ui/list-services-sidebar into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5072
2025-09-02 19:16:49 +00:00
Johannes Kirschbauer
c61a0f0712 ui/services: wire up with sidebar and router 2025-09-02 21:13:10 +02:00
Johannes Kirschbauer
f05bfcb13d ui/services: refactor services 2025-09-02 20:41:51 +02:00
Brian McGee
6d8ea1f2c5 feat(ui): services in sidebar and sidebar pane 2025-09-02 20:39:24 +02:00
Luis Hebendanz
f1de0e28ff Merge pull request 'clan-app: Add password input' (#5068) from Qubasa/clan-core:password_prompt into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5068
2025-09-02 15:48:24 +00:00
Qubasa
53ce3cf53d clan-app: Add password input 2025-09-02 17:41:07 +02:00
brianmcgee
0ac6d7be87 Merge pull request 'fix(ui): add loader sizes' (#5067) from ui/fix-loader-scaling into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5067
2025-09-02 15:09:42 +00:00
Brian McGee
e55401ecd9 fix(ui): add loader sizes 2025-09-02 16:04:41 +01:00
DavHau
37a49a14f4 vars: fix re-generate behavior for dependencies of shared vars (#5001)
fixes https://git.clan.lol/clan/clan-core/issues/3791

This fixes multiple issues we had when re-generating shared vars.

Problem 1: shared vars are re-generated for each individual machine instead of just once (see #3791)

Problem 2: When a shared var was re-generated for one machine, dependent vars on other machines did not get re-generated, leading to broken state

Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5001
2025-09-02 14:54:24 +00:00
brianmcgee
7f68b10611 Merge pull request 'fix(ui): remove empty strings from add machine api call' (#5066) from ui/refine-add-machine-api-call into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5066
2025-09-02 14:43:57 +00:00
Brian McGee
a2867ba29d fix(ui): remove empty strings from add machine api call 2025-09-02 15:40:32 +01:00
pinpox
0817cf868b Merge pull request 'Change default coredns port' (#5065) from fixes-coredns into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5065
2025-09-02 13:28:57 +00:00
pinpox
018ffdaeeb Change default coredns port
This removes a conflict with systemd-resolved and provides an option to
set your own port
2025-09-02 15:23:12 +02:00
hsjobeki
eebb9b6a12 Merge pull request 'ui/fix: some more fixes' (#5063) from ui-more-3 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5063
2025-09-02 12:12:25 +00:00
Johannes Kirschbauer
36f73d40b3 ui/scene: fix double click on move 2025-09-02 14:09:16 +02:00
Johannes Kirschbauer
db84369000 ui/toolbar: shrink width avoid blocking interactions 2025-09-02 14:08:48 +02:00
Johannes Kirschbauer
359b2d4e7a ui/fix: move machine into starting position 2025-09-02 12:40:44 +02:00
Johannes Kirschbauer
2af9bd5003 ui/fix: frozen map after clicking machine 2025-09-02 12:40:23 +02:00
Johannes Kirschbauer
a8cbfcbd18 ui/toolbar: increase stacking index 2025-09-02 12:38:42 +02:00
Johannes Kirschbauer
dc17d62131 ui/contextMenu: prevent duplicate context menu 2025-09-02 12:38:15 +02:00
lassulus
f97e22e125 Merge pull request 'fix: network checking triggering fail2ban' (#5047) from MoritzBoehme/clan-core:fix-network-check into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5047
2025-09-02 09:49:33 +00:00
hsjobeki
1d9ad2ae54 Merge pull request 'ui/labels: fix font, bg radius' (#5061) from ui-more-3 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5061
2025-09-02 09:38:38 +00:00
pinpox
c266261d3b Merge pull request 'Add certificates service' (#4780) from certificates into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/4780
2025-09-02 09:36:18 +00:00
Johannes Kirschbauer
93c31d4c26 ui/labels: fix font, bg radius 2025-09-02 11:34:55 +02:00
brianmcgee
cf83833d8b Merge pull request 'fix(ui): reactivity within machine detail view' (#5060) from ui/fix-machine-detail into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5060
2025-09-02 08:05:03 +00:00
Brian McGee
494f79edb4 fix(ui): reactivity within machine detail view 2025-09-02 09:01:23 +01:00
clan-bot
de3102614a Merge pull request 'Update flake-parts' (#5059) from update-flake-parts into main 2025-09-02 00:06:18 +00:00
clan-bot
a6f0924c05 Update flake-parts 2025-09-02 00:00:42 +00:00
hsjobeki
5f2ad6432e Merge pull request 'ui/machines: some scenen improvements' (#5058) from ui-more-2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5058
2025-09-01 18:52:20 +00:00
Johannes Kirschbauer
f8c34caaab ui/machines: add background to 3d labels 2025-09-01 20:48:02 +02:00
hsjobeki
8c2399446b Merge pull request 'ui/machineTags: remove spurious console.logs' (#5056) from ui-more-2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5056
2025-09-01 18:39:11 +00:00
Johannes Kirschbauer
95c781bf4d ui/machines: move on long press 2025-09-01 19:14:32 +02:00
Johannes Kirschbauer
fe58de0997 ui/machineTags: remove spurious logging 2025-09-01 18:23:39 +02:00
hsjobeki
7582458bae Merge pull request 'ui/machineTags: fix keyboard and select logic' (#5055) from ui-more-2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5055
2025-09-01 16:20:37 +00:00
Johannes Kirschbauer
3a7d7afaab ui/machineTags: fix keyboard and select logic 2025-09-01 18:15:48 +02:00
Luis Hebendanz
321eeacff0 Merge pull request 'clan-app: Now displays runtime icon correctly in process overview' (#5019) from Qubasa/clan-core:fix_runtime_icon into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5019
2025-09-01 15:37:51 +00:00
Qubasa
8ae43ff9a0 clan-app: display runtime icon on macOS too 2025-09-01 17:34:30 +02:00
Qubasa
e6efd5e731 clan-app: display runtime icon correctly in process overview 2025-09-01 17:34:07 +02:00
clan-bot
7c1c8a5486 Merge pull request 'Update nuschtos in devFlake' (#5053) from update-devFlake-nuschtos into main 2025-09-01 15:10:50 +00:00
clan-bot
7932562fa6 Merge pull request 'Update nixpkgs-dev in devFlake' (#5052) from update-devFlake-nixpkgs-dev into main 2025-09-01 15:10:24 +00:00
clan-bot
ac22843abc Merge pull request 'Update disko' (#5051) from update-disko into main 2025-09-01 15:10:23 +00:00
clan-bot
eb83386098 Update nuschtos in devFlake 2025-09-01 15:01:33 +00:00
clan-bot
7877075847 Update nixpkgs-dev in devFlake 2025-09-01 15:01:30 +00:00
clan-bot
7206dd8219 Update disko 2025-09-01 15:00:34 +00:00
hsjobeki
f21e1e7641 Merge pull request 'api/machines: move configuration data into subattribute' (#5048) from api-list-machines into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/5048
2025-09-01 14:55:26 +00:00
Johannes Kirschbauer
c2a3f5e498 api/machines: populate instance_refs 2025-09-01 16:47:47 +02:00
Johannes Kirschbauer
727d4e70ae api/machines: move configuration data into subattribute
This helps to make room for 'instance_refs'
And potentially other metadata that we want to compute and expose
2025-09-01 14:42:12 +02:00
Moritz Böhme
261c5d2be8 fix: network checking triggering fail2ban 2025-09-01 14:17:10 +02:00
Jörg Thalheim
758eacd27e add apply "machine" as an alias to clan machines create
I was a bit confused that I was able to list templates but not
apply them. Turns out that "apply" only supported disk templates
2025-08-27 13:39:39 +00:00
445 changed files with 12844 additions and 6064 deletions

View File

@@ -8,6 +8,6 @@ jobs:
runs-on: nix
steps:
- uses: actions/checkout@v4
- run: nix run .#deploy-docs
- run: nix run --print-build-logs .#deploy-docs
env:
SSH_HOMEPAGE_KEY: ${{ secrets.SSH_HOMEPAGE_KEY }}

2
.gitignore vendored
View File

@@ -52,3 +52,5 @@ pkgs/clan-app/ui/.fonts
*.gif
*.mp4
*.mkv
.jj

View File

@@ -1,4 +0,0 @@
# Contributing to Clan
<!-- Local file: docs/CONTRIBUTING.md -->
Go to the Contributing guide at https://docs.clan.lol/guides/contributing/CONTRIBUTING

View File

@@ -30,7 +30,7 @@ In the Clan ecosystem, security is paramount. Learn how to handle secrets effect
The Clan project thrives on community contributions. We welcome everyone to contribute and collaborate:
- **Contribution Guidelines**: Make a meaningful impact by following the steps in [contributing](https://docs.clan.lol/contributing/contributing/)<!-- [contributing.md](docs/CONTRIBUTING.md) -->.
- **Contribution Guidelines**: Make a meaningful impact by following the steps in [contributing](https://docs.clan.lol/guides/contributing/CONTRIBUTING/)<!-- [contributing.md](docs/CONTRIBUTING.md) -->.
## Join the revolution

View File

@@ -1,6 +0,0 @@
{ fetchgit }:
fetchgit {
url = "https://git.clan.lol/clan/clan-core.git";
rev = "5d884cecc2585a29b6a3596681839d081b4de192";
sha256 = "09is1afmncamavb2q88qac37vmsijxzsy1iz1vr6gsyjq2rixaxc";
}

View File

@@ -12,7 +12,6 @@ let
elem
filter
filterAttrs
flip
genAttrs
hasPrefix
pathExists
@@ -45,7 +44,7 @@ in
flake.check = genAttrs [ "x86_64-linux" "aarch64-darwin" ] (
system:
let
checks = flip filterAttrs self.checks.${system} (
checks = filterAttrs (
name: _check:
!(hasPrefix "nixos-test-" name)
&& !(hasPrefix "nixos-" name)
@@ -57,7 +56,7 @@ in
"clan-core-for-checks"
"clan-deps"
])
);
) self.checks.${system};
in
inputs.nixpkgs.legacyPackages.${system}.runCommand "fast-flake-checks-${system}"
{ passthru.checks = checks; }

View File

@@ -13,8 +13,6 @@
fileSystems."/".device = lib.mkDefault "/dev/vda";
boot.loader.grub.device = lib.mkDefault "/dev/vda";
# We need to use `mkForce` because we inherit from `test-install-machine`
# which currently hardcodes `nixpkgs.hostPlatform`
nixpkgs.hostPlatform = lib.mkForce system;
imports = [ self.nixosModules.test-flash-machine ];
@@ -28,10 +26,24 @@
{
imports = [ self.nixosModules.test-install-machine-without-system ];
# We don't want our system to define any `vars` generators as these can't
# be generated as the flake is inside `/nix/store`.
clan.core.settings.state-version.enable = false;
clan.core.vars.generators.test = lib.mkForce { };
disko.devices.disk.main.preCreateHook = lib.mkForce "";
# Every option here should match the options set through `clan flash write`
# if you get a mass rebuild on the disko derivation, this means you need to
# adjust something here. Also make sure that the injected json in clan flash write
# is up to date.
i18n.defaultLocale = "de_DE.UTF-8";
console.keyMap = "de";
services.xserver.xkb.layout = "de";
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRWUusawhlIorx7VFeQJHmMkhl9X3QpnvOdhnV/bQNG root@target\n"
];
};
};
perSystem =
@@ -44,8 +56,11 @@
dependencies = [
pkgs.disko
pkgs.buildPackages.xorg.lndir
pkgs.glibcLocales
pkgs.kbd.out
self.nixosConfigurations."test-flash-machine-${pkgs.hostPlatform.system}".pkgs.perlPackages.ConfigIniFiles
self.nixosConfigurations."test-flash-machine-${pkgs.hostPlatform.system}".pkgs.perlPackages.FileSlurp
pkgs.bubblewrap
self.nixosConfigurations."test-flash-machine-${pkgs.hostPlatform.system}".config.system.build.toplevel
self.nixosConfigurations."test-flash-machine-${pkgs.hostPlatform.system}".config.system.build.diskoScript
@@ -73,7 +88,7 @@
substituters = lib.mkForce [ ];
hashed-mirrors = null;
connect-timeout = lib.mkForce 3;
flake-registry = pkgs.writeText "flake-registry" ''{"flakes":[],"version":2}'';
flake-registry = "";
experimental-features = [
"nix-command"
"flakes"
@@ -82,10 +97,10 @@
};
testScript = ''
start_all()
machine.succeed("echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRWUusawhlIorx7VFeQJHmMkhl9X3QpnvOdhnV/bQNG root@target' > ./test_id_ed25519.pub")
# Some distros like to automount disks with spaces
machine.succeed('mkdir -p "/mnt/with spaces" && mkfs.ext4 /dev/vdc && mount /dev/vdc "/mnt/with spaces"')
machine.succeed("clan flash write --debug --flake ${self.checks.x86_64-linux.clan-core-for-checks} --yes --disk main /dev/vdc test-flash-machine-${pkgs.hostPlatform.system}")
machine.succeed("clan flash write --ssh-pubkey ./test_id_ed25519.pub --keymap de --language de_DE.UTF-8 --debug --flake ${self.checks.x86_64-linux.clan-core-for-checks} --yes --disk main /dev/vdc test-flash-machine-${pkgs.hostPlatform.system}")
'';
} { inherit pkgs self; };
};

View File

@@ -1,8 +1,8 @@
{
config,
self,
lib,
privateInputs,
...
}:
{
@@ -14,31 +14,38 @@
# you can get a new one by adding
# client.fail("cat test-flake/machines/test-install-machine/facter.json >&2")
# to the installation test.
clan.machines.test-install-machine-without-system = {
fileSystems."/".device = lib.mkDefault "/dev/vda";
boot.loader.grub.device = lib.mkDefault "/dev/vda";
imports = [ self.nixosModules.test-install-machine-without-system ];
};
clan.machines.test-install-machine-with-system =
{ pkgs, ... }:
{
# https://git.clan.lol/clan/test-fixtures
facter.reportPath = builtins.fetchurl {
url = "https://git.clan.lol/clan/test-fixtures/raw/commit/4a2bc56d886578124b05060d3fb7eddc38c019f8/nixos-vm-facter-json/${pkgs.hostPlatform.system}.json";
sha256 =
{
aarch64-linux = "sha256:1rlfymk03rmfkm2qgrc8l5kj5i20srx79n1y1h4nzlpwaz0j7hh2";
x86_64-linux = "sha256:16myh0ll2gdwsiwkjw5ba4dl23ppwbsanxx214863j7nvzx42pws";
}
.${pkgs.hostPlatform.system};
};
clan.machines = {
test-install-machine-without-system = {
fileSystems."/".device = lib.mkDefault "/dev/vda";
boot.loader.grub.device = lib.mkDefault "/dev/vda";
imports = [ self.nixosModules.test-install-machine-without-system ];
imports = [
self.nixosModules.test-install-machine-without-system
];
};
}
// (lib.listToAttrs (
lib.map (
system:
lib.nameValuePair "test-install-machine-${system}" {
imports = [
self.nixosModules.test-install-machine-without-system
(
if privateInputs ? test-fixtures then
{
facter.reportPath = privateInputs.test-fixtures + /nixos-vm-facter-json/${system}.json;
}
else
{ nixpkgs.hostPlatform = system; }
)
];
fileSystems."/".device = lib.mkDefault "/dev/vda";
boot.loader.grub.device = lib.mkDefault "/dev/vda";
}
) (lib.filter (lib.hasSuffix "linux") config.systems)
));
flake.nixosModules = {
test-install-machine-without-system =
{ lib, modulesPath, ... }:
@@ -153,9 +160,9 @@
closureInfo = pkgs.closureInfo {
rootPaths = [
privateInputs.clan-core-for-checks
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.toplevel
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.initialRamdisk
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.diskoScript
self.nixosConfigurations."test-install-machine-${pkgs.hostPlatform.system}".config.system.build.toplevel
self.nixosConfigurations."test-install-machine-${pkgs.hostPlatform.system}".config.system.build.initialRamdisk
self.nixosConfigurations."test-install-machine-${pkgs.hostPlatform.system}".config.system.build.diskoScript
pkgs.stdenv.drvPath
pkgs.bash.drvPath
pkgs.buildPackages.xorg.lndir
@@ -208,7 +215,7 @@
# Prepare test flake and Nix store
flake_dir = prepare_test_flake(
temp_dir,
"${self.checks.x86_64-linux.clan-core-for-checks}",
"${self.checks.${pkgs.hostPlatform.system}.clan-core-for-checks}",
"${closureInfo}"
)
@@ -219,6 +226,22 @@
"${../assets/ssh/privkey}"
)
# Run clan install from host using port forwarding
clan_cmd = [
"${self.packages.${pkgs.system}.clan-cli-full}/bin/clan",
"machines",
"init-hardware-config",
"--debug",
"--flake", str(flake_dir),
"--yes", "test-install-machine-without-system",
"--host-key-check", "none",
"--target-host", f"nonrootuser@localhost:{ssh_conn.host_port}",
"-i", ssh_conn.ssh_key,
"--option", "store", os.environ['CLAN_TEST_STORE']
]
subprocess.run(clan_cmd, check=True)
# Run clan install from host using port forwarding
clan_cmd = [
"${self.packages.${pkgs.system}.clan-cli-full}/bin/clan",
@@ -273,7 +296,7 @@
# Prepare test flake and Nix store
flake_dir = prepare_test_flake(
temp_dir,
"${self.checks.x86_64-linux.clan-core-for-checks}",
"${self.checks.${pkgs.hostPlatform.system}.clan-core-for-checks}",
"${closureInfo}"
)

View File

@@ -147,28 +147,11 @@ let
];
doCheck = false;
};
# Common closure info
closureInfo = pkgs.closureInfo {
rootPaths = [
self.checks.x86_64-linux.clan-core-for-checks
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.toplevel
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.initialRamdisk
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.diskoScript
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.clan.deployment.file
pkgs.stdenv.drvPath
pkgs.bash.drvPath
pkgs.buildPackages.xorg.lndir
]
++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);
};
in
{
inherit
target
baseTestMachine
nixosTestLib
closureInfo
;
}

View File

@@ -29,32 +29,34 @@ nixosLib.runTest (
{ nodes, ... }:
''
import subprocess
from nixos_test_lib.nix_setup import setup_nix_in_nix # type: ignore[import-untyped]
import tempfile
from nixos_test_lib.nix_setup import setup_nix_in_nix
setup_nix_in_nix(None) # No closure info for this test
with tempfile.TemporaryDirectory() as temp_dir:
setup_nix_in_nix(temp_dir, None) # No closure info for this test
start_all()
admin1.wait_for_unit("multi-user.target")
peer1.wait_for_unit("multi-user.target")
start_all()
admin1.wait_for_unit("multi-user.target")
peer1.wait_for_unit("multi-user.target")
# peer1 should have the 'hello' file
peer1.succeed("cat ${nodes.peer1.clan.core.vars.generators.new-service.files.not-a-secret.path}")
# peer1 should have the 'hello' file
peer1.succeed("cat ${nodes.peer1.clan.core.vars.generators.new-service.files.not-a-secret.path}")
ls_out = peer1.succeed("ls -la ${nodes.peer1.clan.core.vars.generators.new-service.files.a-secret.path}")
# Check that the file is owned by 'nobody'
assert "nobody" in ls_out, f"File is not owned by 'nobody': {ls_out}"
# Check that the file is in the 'users' group
assert "users" in ls_out, f"File is not in the 'users' group: {ls_out}"
# Check that the file is in the '0644' mode
assert "-rw-r--r--" in ls_out, f"File is not in the '0644' mode: {ls_out}"
ls_out = peer1.succeed("ls -la ${nodes.peer1.clan.core.vars.generators.new-service.files.a-secret.path}")
# Check that the file is owned by 'nobody'
assert "nobody" in ls_out, f"File is not owned by 'nobody': {ls_out}"
# Check that the file is in the 'users' group
assert "users" in ls_out, f"File is not in the 'users' group: {ls_out}"
# Check that the file is in the '0644' mode
assert "-rw-r--r--" in ls_out, f"File is not in the '0644' mode: {ls_out}"
# Run clan command
result = subprocess.run(
["${
clan-core.packages.${hostPkgs.system}.clan-cli
}/bin/clan", "machines", "list", "--flake", "${config.clan.test.flakeForSandbox}"],
check=True
)
# Run clan command
result = subprocess.run(
["${
clan-core.packages.${hostPkgs.system}.clan-cli
}/bin/clan", "machines", "list", "--flake", "${config.clan.test.flakeForSandbox}"],
check=True
)
'';
}
)

View File

@@ -27,7 +27,9 @@
modules.new-service = {
_class = "clan.service";
manifest.name = "new-service";
roles.peer = { };
roles.peer = {
description = "A peer that uses the new-service to generate some files.";
};
perMachine = {
nixosModule = {
# This should be generated by:

View File

@@ -34,7 +34,9 @@ nixosLib.runTest (
modules.new-service = {
_class = "clan.service";
manifest.name = "new-service";
roles.peer = { };
roles.peer = {
description = "A peer that uses the new-service to generate some files.";
};
perMachine = {
nixosModule = {
# This should be generated by:

View File

@@ -67,6 +67,15 @@
];
};
nix.settings = {
flake-registry = "";
# required for setting the `flake-registry`
experimental-features = [
"nix-command"
"flakes"
];
};
# Define the mounts that exist in the container to prevent them from being stopped
fileSystems = {
"/" = {
@@ -106,12 +115,13 @@
let
closureInfo = pkgs.closureInfo {
rootPaths = [
self.packages.${pkgs.system}.clan-cli
self.checks.${pkgs.system}.clan-core-for-checks
self.packages.${pkgs.hostPlatform.system}.clan-cli
self.checks.${pkgs.hostPlatform.system}.clan-core-for-checks
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-update-machine.config.system.build.toplevel
pkgs.stdenv.drvPath
pkgs.bash.drvPath
pkgs.buildPackages.xorg.lndir
pkgs.bubblewrap
]
++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);
};
@@ -122,7 +132,7 @@
imports = [ self.nixosModules.test-update-machine ];
};
extraPythonPackages = _p: [
self.legacyPackages.${pkgs.system}.nixosTestLib
self.legacyPackages.${pkgs.hostPlatform.system}.nixosTestLib
];
testScript = ''
@@ -144,7 +154,7 @@
# Prepare test flake and Nix store
flake_dir = prepare_test_flake(
temp_dir,
"${self.checks.x86_64-linux.clan-core-for-checks}",
"${self.checks.${pkgs.hostPlatform.system}.clan-core-for-checks}",
"${closureInfo}"
)
(flake_dir / ".clan-flake").write_text("") # Ensure .clan-flake exists
@@ -211,12 +221,13 @@
[
"${pkgs.nix}/bin/nix",
"copy",
"--from",
f"{temp_dir}/store",
"--to",
"ssh://root@192.168.1.1",
"--no-check-sigs",
f"${self.packages.${pkgs.system}.clan-cli}",
f"${self.packages.${pkgs.hostPlatform.system}.clan-cli}",
"--extra-experimental-features", "nix-command flakes",
"--from", f"{os.environ["TMPDIR"]}/store"
],
check=True,
env={
@@ -231,7 +242,7 @@
"-o", "UserKnownHostsFile=/dev/null",
"-o", "StrictHostKeyChecking=no",
f"root@192.168.1.1",
"${self.packages.${pkgs.system}.clan-cli}/bin/clan",
"${self.packages.${pkgs.hostPlatform.system}.clan-cli}/bin/clan",
"machines",
"update",
"--debug",
@@ -259,7 +270,7 @@
# Run clan update command
subprocess.run([
"${self.packages.${pkgs.system}.clan-cli-full}/bin/clan",
"${self.packages.${pkgs.hostPlatform.system}.clan-cli-full}/bin/clan",
"machines",
"update",
"--debug",
@@ -286,7 +297,7 @@
# Run clan update command with --build-host
subprocess.run([
"${self.packages.${pkgs.system}.clan-cli-full}/bin/clan",
"${self.packages.${pkgs.hostPlatform.system}.clan-cli-full}/bin/clan",
"machines",
"update",
"--debug",

View File

@@ -1,15 +1,14 @@
{ ... }:
{
_class = "clan.service";
manifest.name = "clan-core/admin";
manifest.description = "Convenient Administration for the Clan App";
manifest.description = "Adds a root user with ssh access";
manifest.categories = [ "Utility" ];
roles.default = {
description = "Placeholder role to apply the admin service";
interface =
{ lib, ... }:
{
options = {
allowedKeys = lib.mkOption {
default = { };

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -5,11 +5,11 @@ inventory.instances = {
borgbackup = {
module = {
name = "borgbackup";
input = "clan";
input = "clan-core";
};
roles.client.machines."jon".settings = {
destinations."storagebox" = {
repo = "username@$hostname:/./borgbackup";
repo = "username@hostname:/./borgbackup";
rsh = ''ssh -oPort=23 -i /run/secrets/vars/borgbackup/borgbackup.ssh'';
};
};

View File

@@ -9,7 +9,7 @@
# TODO: a client can only be in one instance, add constraint
roles.server = {
description = "A borgbackup server that stores the backups of clients.";
interface =
{ lib, ... }:
{
@@ -54,7 +54,7 @@
authorizedKeys = [ (builtins.readFile (borgbackupIpMachinePath machineName)) ];
# };
# }) machinesWithKey;
}) roles.client.machines;
}) (roles.client.machines or { });
in
hosts;
};
@@ -62,6 +62,7 @@
};
roles.client = {
description = "A borgbackup client that backs up to all borgbackup server roles.";
interface =
{
lib,
@@ -187,7 +188,7 @@
config.clan.core.vars.generators.borgbackup.files."borgbackup.ssh".path
} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=Yes";
};
}) (builtins.attrNames roles.server.machines);
}) (builtins.attrNames (roles.server.machines or { }));
in
(builtins.listToAttrs destinations);

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -2,12 +2,12 @@
{
_class = "clan.service";
manifest.name = "certificates";
manifest.description = "Sets up a certificates internal to your Clan";
manifest.description = "Sets up a PKI certificate chain using step-ca";
manifest.categories = [ "Network" ];
manifest.readme = builtins.readFile ./README.md;
roles.ca = {
description = "A certificate authority that issues and signs certificates for other machines.";
interface =
{ lib, ... }:
{
@@ -184,6 +184,7 @@
# Empty role, so we can add non-ca machins to the instance to trust the CA
roles.default = {
description = "A machine that trusts the CA and can get certificates issued by it.";
interface =
{ lib, ... }:
{

View File

@@ -1,12 +1,8 @@
{
self,
lib,
...
}:
let
module = lib.modules.importApply ./default.nix {
inherit (self) packages;
};
module = ./default.nix;
in
{
clan.modules.certificates = module;

View File

@@ -8,7 +8,7 @@ The service consists of two roles:
- A `server` role: This is the DNS-server that will be queried when trying to
resolve clan-internal services. It defines the top-level domain.
- A `default` role: This does two things. First, it sets up the nameservers so
thatclan-internal queries are resolved via the `server` machine, while
that clan-internal queries are resolved via the `server` machine, while
external queries are resolved as normal via DHCP. Second, it allows exposing
services (see example below).
@@ -45,13 +45,15 @@ inventory = {
# Add the default role to all machines, including `client`
roles.default.tags.all = { };
# DNS server
# DNS server queries to http://<name>.foo are resolved here
roles.server.machines."dnsserver".settings = {
ip = "192.168.1.2";
tld = "foo";
};
# First service
# Registers http://one.foo will resolve to 192.168.1.3
# underlying service runs on server01
roles.default.machines."server01".settings = {
ip = "192.168.1.3";
services = [ "one" ];

View File

@@ -1,4 +1,5 @@
{ ... }:
{
_class = "clan.service";
manifest.name = "coredns";
@@ -7,7 +8,7 @@
manifest.readme = builtins.readFile ./README.md;
roles.server = {
description = "A DNS server that resolves services in the clan network.";
interface =
{ lib, ... }:
{
@@ -25,6 +26,12 @@
# TODO: Set a default
description = "IP for the DNS to listen on";
};
options.dnsPort = lib.mkOption {
type = lib.types.int;
default = 1053;
description = "Port of the clan-internal DNS server";
};
};
perInstance =
@@ -42,8 +49,8 @@
}:
{
networking.firewall.allowedTCPPorts = [ 53 ];
networking.firewall.allowedUDPPorts = [ 53 ];
networking.firewall.allowedTCPPorts = [ settings.dnsPort ];
networking.firewall.allowedUDPPorts = [ settings.dnsPort ];
services.coredns =
let
@@ -74,22 +81,29 @@
in
{
enable = true;
config = ''
. {
forward . 1.1.1.1
cache 30
}
config =
${settings.tld} {
file ${zonefile}
}
'';
let
dnsPort = builtins.toString settings.dnsPort;
in
''
.:${dnsPort} {
forward . 1.1.1.1
cache 30
}
${settings.tld}:${dnsPort} {
file ${zonefile}
}
'';
};
};
};
};
roles.default = {
description = "A machine that registers the 'server' role as resolver and registers services under the configured TLD in the resolver.";
interface =
{ lib, ... }:
{
@@ -107,10 +121,16 @@
# TODO: Set a default
description = "IP on which the services will listen";
};
options.dnsPort = lib.mkOption {
type = lib.types.int;
default = 1053;
description = "Port of the clan-internal DNS server";
};
};
perInstance =
{ roles, ... }:
{ roles, settings, ... }:
{
nixosModule =
{ lib, ... }:
@@ -147,7 +167,7 @@
];
stub-zone = map (m: {
name = "${roles.server.machines.${m}.settings.tld}.";
stub-addr = "${roles.server.machines.${m}.settings.ip}";
stub-addr = "${roles.server.machines.${m}.settings.ip}@${builtins.toString settings.dnsPort}";
}) (lib.attrNames roles.server.machines);
};
};

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -95,18 +95,15 @@
for m in machines:
m.wait_for_unit("network-online.target")
# import time
# time.sleep(2333333)
# This should work, but is borken in tests i think? Instead we dig directly
# client.succeed("curl -k -v http://one.foo")
# client.succeed("curl -k -v http://two.foo")
answer = client.succeed("dig @192.168.1.2 one.foo")
answer = client.succeed("dig @192.168.1.2 -p 1053 one.foo")
assert "192.168.1.3" in answer, "IP not found"
answer = client.succeed("dig @192.168.1.2 two.foo")
answer = client.succeed("dig @192.168.1.2 -p 1053 two.foo")
assert "192.168.1.4" in answer, "IP not found"
'';

View File

@@ -101,6 +101,7 @@ in
manifest.readme = builtins.readFile ./README.md;
roles.admin = {
description = "A data-mesher admin node that bootstraps the network and can sign new nodes into the network.";
interface =
{ lib, ... }:
{
@@ -177,6 +178,7 @@ in
};
roles.signer = {
description = "A data-mesher signer node that can sign new nodes into the network.";
interface = sharedInterface;
perInstance =
{
@@ -208,6 +210,7 @@ in
};
roles.peer = {
description = "A data-mesher peer node that connects to the network.";
interface = sharedInterface;
perInstance =
{

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -2,11 +2,12 @@
{
_class = "clan.service";
manifest.name = "clan-core/dyndns";
manifest.description = "A dynamic DNS service to update domain IPs";
manifest.description = "A dynamic DNS service to auto update domain IPs";
manifest.categories = [ "Network" ];
manifest.readme = builtins.readFile ./README.md;
roles.default = {
description = "Placeholder role to apply the dyndns service";
interface =
{ lib, ... }:
{

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -2,31 +2,34 @@
{
_class = "clan.service";
manifest.name = "clan-core/emergency-access";
manifest.description = "Set recovery password for emergency access to machine";
manifest.description = "Set recovery password for emergency access to machine to debug boot issues";
manifest.categories = [ "System" ];
manifest.readme = builtins.readFile ./README.md;
roles.default.perInstance = {
nixosModule =
{ config, pkgs, ... }:
{
boot.initrd.systemd.emergencyAccess =
config.clan.core.vars.generators.emergency-access.files.password-hash.value;
roles.default = {
description = "Placeholder role to apply the emergency-access service";
perInstance = {
nixosModule =
{ config, pkgs, ... }:
{
boot.initrd.systemd.emergencyAccess =
config.clan.core.vars.generators.emergency-access.files.password-hash.value;
clan.core.vars.generators.emergency-access = {
runtimeInputs = [
pkgs.coreutils
pkgs.mkpasswd
pkgs.xkcdpass
];
files.password.deploy = false;
files.password-hash.secret = false;
clan.core.vars.generators.emergency-access = {
runtimeInputs = [
pkgs.coreutils
pkgs.mkpasswd
pkgs.xkcdpass
];
files.password.deploy = false;
files.password-hash.secret = false;
script = ''
xkcdpass --numwords 4 --delimiter - --count 1 | tr -d "\n" > $out/password
mkpasswd -s -m sha-512 < $out/password | tr -d "\n" > $out/password-hash
'';
script = ''
xkcdpass --numwords 4 --delimiter - --count 1 | tr -d "\n" > $out/password
mkpasswd -s -m sha-512 < $out/password | tr -d "\n" > $out/password-hash
'';
};
};
};
};
};
}

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
{
clan.modules = {
emergency-access = lib.modules.importApply ./default.nix { };
emergency-access = ./default.nix;
};
}

View File

@@ -6,7 +6,7 @@
manifest.categories = [ "System" ];
roles.default = {
description = "Placeholder role to apply the garage service";
perInstance.nixosModule =
{
config,

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -4,7 +4,6 @@
# The test for this module in ./tests/vm/default.nix shows an example of how
# the service is used.
{ packages }:
{ ... }:
{
_class = "clan.service";
@@ -15,6 +14,7 @@
# defined in this file directly (e.g. the "morning" role) or split up into a
# separate file (e.g. the "evening" role)
roles.morning = {
description = "A morning greeting machine";
interface =
{ lib, ... }:
{
@@ -34,20 +34,17 @@
settings,
# The name of this instance of the service
instanceName,
# The current machine
machine,
# All roles of this service, with their assigned machines
roles,
...
}:
{
# Analog to 'perSystem' of flake-parts.
# For every instance of this service we will add a nixosModule to a morning-machine
nixosModule =
{ config, ... }:
{ ... }:
{
# Interaction examples what you could do here:
# - Get some settings of this machine
@@ -71,6 +68,7 @@
# the interface here, so we can see all settings of the service in one place,
# but you can also move it to the respective file
roles.evening = {
description = "An evening greeting machine";
interface =
{ lib, ... }:
{

View File

@@ -5,9 +5,7 @@
...
}:
let
module = lib.modules.importApply ./default.nix {
inherit (self) packages;
};
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -6,5 +6,7 @@
manifest.categories = [ "Utility" ];
manifest.readme = builtins.readFile ./README.md;
roles.default = { };
roles.default = {
description = "Placeholder role to apply the importer service";
};
}

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
{
clan.modules = {
importer = lib.modules.importApply ./default.nix { };
importer = ./default.nix;
};
}

View File

@@ -2,12 +2,13 @@
{
_class = "clan.service";
manifest.name = "clan-core/internet";
manifest.description = "direct access (or via ssh jumphost) to machines";
manifest.description = "Part of the clan networking abstraction to define how to reach machines from outside the clan network over the internet, if defined has the highest priority";
manifest.categories = [
"System"
"Network"
];
roles.default = {
description = "Placeholder role to apply the internet service";
interface =
{ lib, ... }:
{
@@ -31,7 +32,6 @@
{
roles,
lib,
settings,
...
}:
{

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -2,11 +2,12 @@
{
_class = "clan.service";
manifest.name = "localbackup";
manifest.description = "Automatically backups current machine to local directory.";
manifest.description = "Automatically backups current machine to local directory or a mounted drive.";
manifest.categories = [ "System" ];
manifest.readme = builtins.readFile ./README.md;
roles.default = {
description = "Placeholder role to apply the localbackup service";
interface =
{ lib, ... }:
{

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules.localbackup = module;

View File

@@ -6,6 +6,7 @@
manifest.categories = [ "Social" ];
roles.default = {
description = "Placeholder role to apply the matrix-synapse service";
interface =
{ lib, ... }:
{
@@ -144,7 +145,7 @@
};
}
// lib.mapAttrs' (
name: user:
_name: user:
lib.nameValuePair "matrix-password-${user.name}" {
files."matrix-password-${user.name}" = { };
migrateFact = "matrix-password-${user.name}";

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules.matrix-synapse = module;

View File

@@ -1,4 +1,3 @@
{ packages }:
{ ... }:
{
_class = "clan.service";
@@ -7,19 +6,20 @@
manifest.readme = builtins.readFile ./README.md;
roles.telegraf = {
description = "Placeholder role to apply the telegraf monitoring agent";
interface =
{ lib, ... }:
{
options.allowAllInterfaces = lib.mkOption {
type = lib.types.bool;
default = false;
description = "If true, Telegraf will listen on all interfaces. Otherwise, it will only listen on the interfaces specified in `interfaces`";
type = lib.types.nullOr lib.types.bool;
default = null;
description = "Deprecated. Has no effect.";
};
options.interfaces = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ "zt+" ];
description = "List of interfaces to expose the metrics to";
type = lib.types.nullOr (lib.types.listOf lib.types.str);
default = null;
description = "Deprecated. Has no effect.";
};
};
};

View File

@@ -1,22 +1,24 @@
{
self,
lib,
self,
...
}:
let
module = lib.modules.importApply ./default.nix {
inherit (self) packages;
};
module = ./default.nix;
in
{
clan.modules.monitoring = module;
perSystem =
{ ... }:
{ pkgs, ... }:
{
clan.nixosTests.monitoring = {
imports = [ ./tests/vm/default.nix ];
imports = [
(lib.modules.importApply ./tests/vm/default.nix {
inherit (self) packages;
inherit pkgs;
})
];
clan.modules.monitoring = module;
};
};

View File

@@ -11,34 +11,54 @@
...
}:
let
jsonpath = "/tmp/telegraf.json";
auth_user = "prometheus";
in
{
warnings =
lib.optionals (settings.allowAllInterfaces != null) [
"monitoring.settings.allowAllInterfaces is deprecated and and has no effect. Please remove it from your inventory."
"The monitoring service will now always listen on all interfaces over https."
]
++ (lib.optionals (settings.interfaces != null) [
"monitoring.settings.interfaces is deprecated and and has no effect. Please remove it from your inventory."
"The monitoring service will now always listen on all interfaces over https."
]);
networking.firewall.interfaces = lib.mkIf (settings.allowAllInterfaces == false) (
builtins.listToAttrs (
map (name: {
inherit name;
value.allowedTCPPorts = [
9273
9990
];
}) settings.interfaces
)
);
networking.firewall.allowedTCPPorts = lib.mkIf (settings.allowAllInterfaces == true) [
networking.firewall.allowedTCPPorts = [
9273
9990
];
clan.core.vars.generators."telegraf" = {
clan.core.vars.generators."telegraf-certs" = {
files.crt = {
restartUnits = [ "telegraf.service" ];
deploy = true;
secret = false;
};
files.key = {
mode = "0600";
restartUnits = [ "telegraf.service" ];
};
runtimeInputs = [
pkgs.openssl
];
script = ''
openssl req -x509 -nodes -newkey rsa:4096 \
-keyout "$out"/key \
-out "$out"/crt \
-subj "/C=US/ST=CA/L=San Francisco/O=Example Corp/OU=IT/CN=example.com"
'';
};
clan.core.vars.generators."telegraf" = {
files.password.restartUnits = [ "telegraf.service" ];
files.password-env.restartUnits = [ "telegraf.service" ];
files.miniserve-auth.restartUnits = [ "telegraf.service" ];
dependencies = [ "telegraf-certs" ];
runtimeInputs = [
pkgs.coreutils
pkgs.xkcdpass
@@ -56,7 +76,38 @@
systemd.services.telegraf-json = {
enable = true;
wantedBy = [ "multi-user.target" ];
script = "${pkgs.miniserve}/bin/miniserve -p 9990 ${jsonpath} --auth-file ${config.clan.core.vars.generators.telegraf.files.miniserve-auth.path}";
after = [ "telegraf.service" ];
requires = [ "telegraf.service" ];
serviceConfig = {
LoadCredential = [
"auth_file_path:${config.clan.core.vars.generators.telegraf.files.miniserve-auth.path}"
"telegraf_crt_path:${config.clan.core.vars.generators.telegraf-certs.files.crt.path}"
"telegraf_key_path:${config.clan.core.vars.generators.telegraf-certs.files.key.path}"
];
Environment = [
"AUTH_FILE_PATH=%d/auth_file_path"
"CRT_PATH=%d/telegraf_crt_path"
"KEY_PATH=%d/telegraf_key_path"
];
Restart = "on-failure";
User = "telegraf";
Group = "telegraf";
RuntimeDirectory = "telegraf-www";
};
script = "${pkgs.miniserve}/bin/miniserve -p 9990 /run/telegraf-www --auth-file \"$AUTH_FILE_PATH\" --tls-cert \"$CRT_PATH\" --tls-key \"$KEY_PATH\"";
};
systemd.services.telegraf = {
serviceConfig = {
LoadCredential = [
"telegraf_crt_path:${config.clan.core.vars.generators.telegraf-certs.files.crt.path}"
"telegraf_key_path:${config.clan.core.vars.generators.telegraf-certs.files.key.path}"
];
Environment = [
"CRT_PATH=%d/telegraf_crt_path"
"KEY_PATH=%d/telegraf_key_path"
];
};
};
services.telegraf = {
@@ -64,6 +115,7 @@
environmentFiles = [
(builtins.toString config.clan.core.vars.generators.telegraf.files.password-env.path)
];
extraConfig = {
agent.interval = "60s";
inputs = {
@@ -99,10 +151,12 @@
metric_version = 2;
basic_username = "${auth_user}";
basic_password = "$${BASIC_AUTH_PWD}";
tls_cert = "$${CRT_PATH}";
tls_key = "$${KEY_PATH}";
};
outputs.file = {
files = [ jsonpath ];
files = [ "/run/telegraf-www/telegraf.json" ];
data_format = "json";
json_timestamp_units = "1s";
};

View File

@@ -1,24 +1,95 @@
{ ... }:
{
name = "monitoring";
clan = {
directory = ./.;
inventory = {
machines.peer1 = { };
machines.peer1 = {
deploy.targetHost = "[2001:db8:1::1]";
};
instances."test" = {
module.name = "monitoring";
module.input = "self";
roles.telegraf.machines.peer1 = { };
};
};
};
nodes = {
peer1 =
{ lib, ... }:
{
services.telegraf.extraConfig = {
agent.interval = lib.mkForce "1s";
outputs.prometheus_client = {
# BUG: We have to disable basic auth here because the prometheus_client
# output plugin will otherwise deadlock Telegraf on startup.
basic_password = lib.mkForce "";
basic_username = lib.mkForce "";
};
};
};
};
# !!! ANY CHANGES HERE MUST BE REFLECTED IN:
# clan_lib/metrics/telegraf.py::get_metrics
testScript =
{ ... }:
{ nodes, ... }:
''
import time
import os
import sys
import subprocess
import ssl
import json
import shlex
import urllib.request
from base64 import b64encode
start_all()
peer1.wait_for_unit("network-online.target")
peer1.wait_for_unit("telegraf.service")
peer1.wait_for_unit("telegraf-json.service")
# Fetch the basic auth password from the secret file
password = peer1.succeed("cat ${nodes.peer1.clan.core.vars.generators.telegraf.files.password.path}").strip()
credentials = f"prometheus:{password}"
print("Using credentials:", credentials)
peer1.succeed(f"curl -k -u {credentials} https://localhost:9990/telegraf.json")
peer1.succeed(f"curl -k -u {credentials} https://localhost:9273/metrics")
cert_path = "${nodes.peer1.clan.core.vars.generators.telegraf-certs.files.crt.path}"
url = "https://192.168.1.1:9990/telegraf.json" # HTTPS required
print("Waiting for /var/run/telegraf-www/telegraf.json to be bigger then 200 bytes")
peer1.wait_until_succeeds(f"test \"$(stat -c%s /var/run/telegraf-www/telegraf.json)\" -ge 200", timeout=30)
encoded_credentials = b64encode(credentials.encode("utf-8")).decode("utf-8")
headers = {"Authorization": f"Basic {encoded_credentials}"}
req = urllib.request.Request(url, headers=headers) # noqa: S310
# Trust the provided CA/server certificate
context = ssl.create_default_context(cafile=cert_path)
context.check_hostname = False
context.verify_mode = ssl.CERT_REQUIRED
found_system = False
with urllib.request.urlopen(req, context=context, timeout=5) as response:
for raw_line in response:
line_str = raw_line.decode("utf-8").strip()
if not line_str:
continue
obj = json.loads(line_str)
if obj.get("name") == "nixos_systems":
found_system = True
print("Found nixos_systems metric in json output")
break
assert found_system, "nixos_systems metric not found in json output"
'';
}

View File

@@ -0,0 +1,6 @@
[
{
"publickey": "age1ntpf7lqqw4zrk8swjvwtyfak7f2wg04uf7ggu6vk2yyt9qt74qkswn25ck",
"type": "age"
}
]

View File

@@ -0,0 +1,15 @@
{
"data": "ENC[AES256_GCM,data:ACFpRJRDIgVPurZwHYW0J1MnvyuiRGnXMeQj1nb9rDAIqHbZzZk8+E0Nu1+EdXwk78ziP6tHR1GQP2ILTtpLME4lXXRVjouW5Eo=,iv:ctR1HENO3XGIq1/gzYi47nateYzsSK317EKn92ptqDI=,tag:q1yuk/ZMx3nuORkiT/XXqg==,type:str]",
"sops": {
"age": [
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvMUtabnp3V0dzNFFYRzk0\nd0ZJbUtDMXRPRGxpRjhYR1MyQzdJYWdJTUFrCjBNV0pPTTlIOHBBbzlEQkFzVy92\ndENxcDdIZlNDSm1oZTNveUtIeVc3MXcKLS0tIGtocENjMFNYT0s1LzhYNy92QU5G\nREVEdjErb0xPSE1yb0g5bGlackh6bEUKwxBoDteD7+JfnlFF71CHx4oEdV/TFYcF\n3JPYUbTWAIyMtUu/CLbX+Pn9Mv+McrEIqhwT7TWL/YbELKVadX/k5Q==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-18T14:33:37Z",
"mac": "ENC[AES256_GCM,data:4631iJmioJ2vZ2PTFbdEJu7UqtyQbp43XBlgEbFAviGZdugb3weVI24rJ8m1Rdnxq8uciEeiX6YHBhURdWQY4JNm2wTGnjz7e2PwQ8FCwOmxCcIQPpdKKsziq/M4HArgD66eUxIWfTt1yJfHgBcUuuANbrbH8MirllT+hJTBhqE=,iv:rM8a/MpKbK7DlqjuR4BG77XDHLK11Q+E2rzZLDJalhk=,tag:bbGMn4anXrLHg4eLA0/CXA==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View File

@@ -0,0 +1 @@
../../../users/admin

View File

@@ -0,0 +1,4 @@
{
"publickey": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"type": "age"
}

View File

@@ -0,0 +1,33 @@
-----BEGIN CERTIFICATE-----
MIIFuTCCA6GgAwIBAgIUMXnA00bMrYvYSq0PjU5/HhXTpmcwDQYJKoZIhvcNAQEL
BQAwbDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRYwFAYDVQQHDA1TYW4gRnJh
bmNpc2NvMRUwEwYDVQQKDAxFeGFtcGxlIENvcnAxCzAJBgNVBAsMAklUMRQwEgYD
VQQDDAtleGFtcGxlLmNvbTAeFw0yNTA5MTgxNDMzMzZaFw0yNTEwMTgxNDMzMzZa
MGwxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEWMBQGA1UEBwwNU2FuIEZyYW5j
aXNjbzEVMBMGA1UECgwMRXhhbXBsZSBDb3JwMQswCQYDVQQLDAJJVDEUMBIGA1UE
AwwLZXhhbXBsZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC7
sdy27E/XMAyKrgeFcXY70R/vX0gx6EcZlWGp2vZSUVAfW1ni/Vq/LVC02sxGEGwv
10+42yP2yghi89doKo8oCoLsbVu+Pi+TmRsgAijy4jN8pHqbn9/Vk8M8utLa1u4z
VonSIx9pzCYd2+IIdwVuWoyPAAnK/JIKS3n0A8KWkZ/1lq6YDl2whj8iY4YF2Ekg
M0SWhquLZiaApAs7STTYvcP7iLfL4U6cH65dRAbwWMpMErPuLf/CedkXiSUp8Zqx
YIXXE5lf7wqt7tM6k6BHic9FEzAo1HnBWBXV5eB5fs1lX9M1VPmx43XINCfzKwxE
xODtIBrmvj+qOp6/ihBsu3LlOoOikxmL+T9Wgvf7fOuFC4BgmX85mGUV+EMZCDoJ
44jlwFF8wgrfG/ZawkP+opNsQLsdOm9DbAdWpx5+JYdgWBahjxuH4z2eIiBmMKgj
puqDgXdZzcERiYtOEEn0p0tvIkVLO3Tm2GjtHbmg1yF2nwsZjupGfcOGTVX4Zi5x
ZCs7vYgBtZy96kNAuyZcFl8eBUr/oVg//i3Zc9Vnw/UJryB7I6dvj228hlrSz0Ve
pGoeZXbcCzRv8NX2V0V1VTtrblSA3w5WRxVzK7UAVetPZ4dlJX+eyx3x2wiC3TiW
ZYH8haFubQqr1h9oXFHgDE5xYZKr51T3SRGfpn6KvQIDAQABo1MwUTAdBgNVHQ4E
FgQUJHOErJYWaGdla1XhxWha4XBKFYgwHwYDVR0jBBgwFoAUJHOErJYWaGdla1Xh
xWha4XBKFYgwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXqcg
DW6qzFccR+JTqNR5HBOneB07LxaUqfBTAzU5GTRljY3mVpnTa6vVvXlStChqdmwU
JJdRhWzTpzE4K92l4UKiYKy486PT1ff34aPLPX5BB9OzL4dgvC3gO0MYDJ84AFZl
6BN/MRTinioG+s14SsxmgcUTl+HXsxt75r3WKjXvqECqhONLPXEXDJ6TVmfb2yd5
X9cE6HLS2IXqfvs0EdXmQhSQVS7AlUQWZPDeoBTDUA1tT6ZKCcG0BuHEFnHxg4Yg
W9xp/wMJCEly+9eNJYZYzyK1AHRGnTMRCSifTJEybwI4A35v68FyRLfAC0lM2qVL
yQIGjj55+r4yGCK7bySSKjs59LLLxi6Px3S61OxAYq9KMT65nBLK9JAPFyTnikw9
q/xW208lL+kcRtG+ARo5ycx5QUjWdsHn7TCnqxnDhHznwSV4KGbJFaGQZTtgfcz0
g5a1GwxqHjEZ9IWiN38f2l4kpLLybKhwVQMYeG000s7rDa5hgjbh13qtQN6vUvI6
VozzZPnFcR1Rsa8RR9njDugxbVwlJQfGkoMiMZwNGgXnZRC2XaI6SCyPwqTPBuVP
ZR1eWv4qwsIGKJzJYcdChb5dimlTuVSfZmONpnrOP/4mhQLyaWr3XLqxxP3mIXsz
k1PNWTkgLsXO8DNkCudxcvPElXfmaw6zwaLrZys=
-----END CERTIFICATE-----

View File

@@ -0,0 +1 @@
../../../../../../sops/machines/peer1

View File

@@ -0,0 +1,19 @@
{
"data": "ENC[AES256_GCM,data:eWZyDgPQppMI/wNGSGsXowQ35I1KW1KH9p3GfxMFKNfoG2rnNwiBG11ARd9CDVMnY5OUt6RxL2sRKBlvqqjouCICDEEj3CWNnEpA55JGnmp3jj+kCRiA/te67F5vDXWus/mLGgI00apHwqUkwRkdck0URgniEIektncP9mQhcKDT7Lksm1S8oTHGDRcdiG4MxhrOq0qumVWdwS3qkAuwOvFMlYeCec6nfKBV5QTGeDxe8m8tijr7RTfM8cEaXrwaJDct1IIiHsl1U+V7+rz0KEvJ8ofeyOLP2zNSq4JfwM9rg/EwVuPsKf6LNmm6G/JdePlaCrwTaLchwb20/Tnf9nvrZu3P5w86IuniIyjFByvLR3bc6wKjxkWDU/+9UoTXfms5qKYNsgylFdg1xfqPjK0SgWiUL4IlxTBYPoPouNp/NZO+vzB+nkAcljCNGnYrfCz53F3gsTwBXIGmye2gvmNMvP+rs2/ySEt3XIzMEiWlBjDlurpAaYgqHhxVuc2jiqX56W8nu/QStopKP6sziPQbRqKDERSACxJ/WWumXTVO56dVJzqTpYnkqpq28tFoRd2yG7cJjlAbgqyxRuNkcLwnTEjGeGSSdVvmBeCqr4LuIh5qd2B4lrHQ6fR9xE/EHuJ2bcAH/x8ukOE7CZrACIEr6HfcpsnNhnpFYdA6gf4Gle21UJpK7hpY3+nCMNEPdfTjYkCvi/guzjG+X+UQPY466qbiVhUnNK4sg35axAJyNH1Jk6lK6+L/o4EVHBvnEUagLN2xFD5w0kXYMpzvQWEMaexyciDs6Natn7MzYVhmea8OfKXVE6dQz3Y5YFJ3uEQGGjuNO4fPyfnVgUULeaAs/IWkoPl2HV0x0KdxMEKGw2CAl7XuHYfV1rFTur+Wvf72rECUiiDmOgDU1g4plcBxQ6ocp34kize3lt1PdEL0R9lWg5c6l8LsqFhLqK8lpPV6neRdXX4UDzPjxnf3Ra/p1Hn283QSAv55pIwJQAo+kjWGckzr9CleUnLfPxQUKJQ7Jpjb/HtuhTQGA0mTsCbEHR6VWM/EYS4WzUd6opmfBstzSplD+kSBFIBoee+0dkUjfZcdFIWJRcabtjnn2TEsHHCK+dAguYY77OGeAh+tw7r66gONgtNlwjCN+KrzWH8cTu8BEaUoZH35lExs/wn+Ucj8IXDUXYLTTzGgokBybEeis+BDWFpDrhsZKFSwRE8tsrxfpgr7R1Ue9zMLoHnKeDZ6ndkm6fMinZ81OOchfE8bElRecCEzs9N/zU9nCtXKSAiYc86VntdbDFcPAm+bZ4hVkQpiRvQVGFYhgLuol7i9xhKD86TuIkqwMybEnT0ruqMNEVljxMWK7Cy+CAWg68w+hY2Pd54vXyC9ORndrYG7zbtVEe2dR7peeWTDTjU+5gVqIlC9lIhnIjgDprzvjszukHzc6TE98W9bnEKieSNGbQntm+YPohprg3CdVoPc1GfVueRqyXfXG0WVkLgfrhgfuLaJGKgwo438cUcRV8qH2wgCa7CGPMgvxzXJrK2dSRmZA/vPgZDpX9r78YlFGo+g/ghGhiNVonMYtMhohlSrzrQARA2AYuMgM91aXPnoKtqDy8+UL4g344bu7Jh3SKyGoqBo3TFLJyQgutzIx6EHG/eIDnTfc/I/3RgBtwo7RR/g+g899nhsiBLKVQId0/EZ+rKSndRTguCnFkjwCvXNW1z5uoiom/J5Q+J0xC1lqcjWF0zn9UwStQmvXDOABJUsGu+AZnj5l27MdRWvTfP2p3r12TXbyPEwOGuJa2LKSL/k4XmuaO8HkxSsfC1ImPOuPGbjgVkh62Y2oMqI90dtVrZ2HyosHwxv4tKzGAZbvH5vkK7TZXgoXCgAq+XwCPG9gtW2sIA2qoxw+SLOG5CEnHt6VlSgelLce9lU6kETdJ13fSqjMwZTQD07vXVnrtCHhsC6s+aY/7/2lJ2x8VmRBXVW7yREF56AdjYYVYgiAoHQqaQ0/OHpr6hacckqBTP0VzlNHLAzwm5zlgsZLDt3NxjTUZdgJEvFxF+rjzZHgyXwMA8hfzPbfVjftDW8hCMD1p8wJSY+CqaH+6/Ui9Q0X4F3YcZbhn/i9ZmMrB+CzBcjVzGrZIA0FLFoJWD2bFVPmMbcmDsT5ei0HafGBb2NBQ1gYvceGlN3WVQbTYCG54QavABNAyGFH+eQHvnk5jCg2DYspoCOPjEvIHjKM+gluIrozrnzMO2+hzp4Z+AscJCOm91LmL4PIFviyWzqy6AV1BLYPMLybdqrbEqUCFIzkXdFW3AZxV69hwhnBaZbLAaLeOG9YUz48o7oOITsDKVtuzUxkYDj+vBxI6zf7SvqjmopNXuZ2+4J+oa/p7xCpNUJTi0V4Ac38BZMiUcpXidu1V0pkGWbca4Dfqf2vBOzOcpLxrorizsyROv1SJAA7mR8KQut28HnkXgshIhB4cY99tnmKN/E1oiLGU0NkUHR6fCBtV2Ak8k7PNCVzhU0y6/NCJoSKqKQpuPEMVT+0QaKNfjtGvWgvZrvcchoMNAAGQa1OMSkmcZ4KdnAUaMROrS5LH3IBwpmSwtTBFkx9Shl3xMm2SpF6SdWnpweUbRAQqKNmRvSQLsXiEwOwxIO018mo8CgyiDyyIf4k0gFlNTapYyacwRO4vTMc3vfXjTcwK1LzUZVeG+e61WVDmmu2e6zls0JhXe7V58OkbnYWnzNzBSxWJluicno/P9h5vefBOHfysKe6SlGye/H0BO7piVG96cjqC0hTul8k1ysQoXtFgf4fbrlqs/D1kR9xVHcr3hAeWd9c4LwXEcSCeVuBd0bsoo2sYIeNSWNdJo9bSF0vb49snroh/RgbzntW3+geL94DEZaXMmf+RLujLEIgoNLlZ6r2jTMvlV6DWbSRE3cii6LFOXdQq53fmG/cI73R3hGNdQaLhZDaOi7hLnxbAMAjtEVQQOQg93a43d/BDGFzgNhKjYqyjZ9mM/Tk37DLlZ+xeIEJpALLIAaOguSG5cg3ALBrdGRec+SPf0r6M6DVkS1VHFz54kPx1eGkJQyQTotcykafNIt1Ahbqif0Z7U2bF0LxUbrZxcoldFteBNzihlXxa4zrY5Uj3BWEOrd6E8zHUIW97KwUAdttMTlNoOrMOgLY4790cVX+K7sa9ZPWz8Lts7o99sdcF7+dHoVxvfM0O3vXdzA/2O1opKqD6ZfPmU1UyWL/N2d4d9JerDhD6RFuBJP7nsv8osf2NHyWdHV9Luj0gOiBZvoOuSI4nvE05rPIXR/UEjXBw+1XaGHqcj8x/6rE6oTAma/1DH+E+N0j6mUd97vHFa48rbABCLWK4n9MrjXpQAVYNlXsSRgmEaVcq3S4RdRHKIp6yhhsUfNI8B8i8obQ3lBj7ktx1BNynnSJKTbQVOritYsQEY3t/+PvCdr4RKflftx0KzwcFTscVSrX22+aZZD+VrPZ3o8OUH8yxBWUsK5hdhuVOfNEjL6TpgDUZgbFUdlTDHmzPm5RxDxK6qGLxr0JwfLNm/+nYliKoyiTFKVKWFDE5Z+Rt0yKj+pDrWXBpKPySTfWX80VbioPW0curpiLt4tjVFfzhZ6V60vPfjcCjHlGz/pA5atUTGlZBP6DynDFJVV4QO0uhRYRfDvk+D6YOjZSHAX0e82IFg5l4d3fcF9WveqIfKRhJEVt3s4PLhCul/ESTWp45h1IA9ZfI4wvmuP0hCUvLgTOKx75QnwfVQRKJ5xa+R0e2Igywnobz63LaX9+yC8KJ23U8ZHS0Wc3E2NqTVEiP93ds98pMRMepoln20bsLUypcW2/py0WYb/YEGzlww9MxywAEQX+Pce8XhI7iylSfUzUmk863Y8cE1RMAiDeMFIQ8vZBT+LKwJ5zdik8jqJFED5XVGtYai7vEjj1tZKrfL+fR6CtDdQqyP1fWS+Xi5CZ7rdr2HiD943Vre1ZA8B7byozkMuahiYVzfTKIGI6lUMvXmmVNkdWXmj26YRy4l4X1KYM9L7f4NX8jRe61sUXanWJgcScxQTNKfGDOiKWRFQjo5UgCXOvjGtFCpRQyksY19TatFHRGrNdV2CmZhFTaaGbCbqD5QlfdoY1StT0Ko3x/YJR4/4Yoa2oCr2cVzNZ0/xPW0bC5NszLnKMjVI8Nj1nNFvMm4yZBpaz6YKk2REf9nndbkbhcppdrZN4Vt7wdt2gV2+5OpXRZ8OaxnegFpNiYuJb61gzXFYmYjWCkU6V9ncGV/71fXWMlxSlu4kLVhIQqD2+RI/VWAcS+cFEvb0Ntjft/gkyQcrLCeeFzdxXSNnlX1h5DigeRwyNtW4Mrk8vFQ6o2Oi3HiBKmvAD7sPkJg+lOJngQ/hI0477c0=,iv:q3j8EAokyyxiszf+wyRqxEr2igaD1bX7YnFx/NbsGg8=,tag:HKKYWRJEUwW2/TxL+5dSng==,type:str]",
"sops": {
"age": [
{
"recipient": "age1ntpf7lqqw4zrk8swjvwtyfak7f2wg04uf7ggu6vk2yyt9qt74qkswn25ck",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaeXRjU214aWk5ajl1aW9E\naGJlb1ViaVRmMTBHdkFDQUNDZS94WFZiNUNvCllmWTJBck9hR3U3V09VWDZwQ2xI\nd3ZEQnBIUG5ZSTVIdS8rQ2FMYVhyNk0KLS0tIEE1UG8rSzFyU01sVXhGVHpoaE9i\nSis4Qi9tMGFqbTNMTDZUVk1ZdXkrM28Km4VkfaOsZ69ckjvrg+os43H/O1IoWHzC\nt4LqZRz1Tk7/d1aLWavSPPjVYrCOMZeNBqGbQpGfjjuXrafClRNQdQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3R1RHTGViTnRLVVkyM3J0\nbm96cGVPTlo4NXBNL0g1eEVSNG9DUkgwVFRBCmRKVTlMRmV3Tmg2RTZIclBlWlcr\ndzI5MUxhcllzbE1IMDNxa08zVkpITmsKLS0tIG01Y2dyQkY3UmRudFk2d0p6bThn\nemlaWnZoS3p4VHhMTFFwTm9VN0ttYzQKVbLFgtK6NIRIiryWHeeOPD45iwUds4QD\n7b8xYYoxlo+DETggxK6Vz3IdT/BSK5bFtgAxl864b5gW+Aw4c6AO5w==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-18T14:33:37Z",
"mac": "ENC[AES256_GCM,data:XKCnd0QrAlOCECSeSvbLYHMLbmUh4fMRnLaTb5ARoP4Zc9joWGsCaRZxokc2/sG4BXA/6pkbQXHyIOudKbcBpVjjvs9E+6Mnzt53nfRoH/iOkYPbN2EO49okVZJXW0M1rlBxrxvGuiDlz2p2p6L7neKLy4EB482pYea5+dUr2Yw=,iv:oj/MkZCfkvCmAb79uzEvKwEAm1bKtWhS4rPRAWSgRgw=,tag:h5TPPILXkhJplnDT2Gqtfw==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View File

@@ -0,0 +1 @@
../../../../../../sops/users/admin

View File

@@ -0,0 +1 @@
../../../../../../sops/machines/peer1

View File

@@ -0,0 +1,19 @@
{
"data": "ENC[AES256_GCM,data:Q0Vn7J0nERccBYT8HZxHF0Zi5qxmMu40n0H1c+L2SCRF6vRLdURxXKDwvh8xtTU=,iv:ucExjoYDFYy19GsBbNNldJRPBSpT+L+x4PrwTG+m2K8=,tag:/Quupyy/nnUNZsDudEMmNA==,type:str]",
"sops": {
"age": [
{
"recipient": "age1ntpf7lqqw4zrk8swjvwtyfak7f2wg04uf7ggu6vk2yyt9qt74qkswn25ck",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQWWo5OEJ5N1RTR0xMaDhL\nQnlUV2RrRXIzM01OemhQWjVkd3FNZjRhR2dzCi9IeE56b3VZTkNkdW9DMzVia3Zx\nbklxWmFpenRjdEIrc0ZDTGdmSTAxRTQKLS0tIHZJdjdYUzhhY0YzQjRqS0psZmpI\nVHJpUjNZNHRpc2ZWSml1TVNNejhiT28K8TTP/J+XspXZ7TVYj9YaBhEodPIXjojB\nRLqAIgJXRaK4NCLukC6l0IMii6w5J/512RnO2ZBTGhKfbdLfyLOFqg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrZVc5b0FhbzNXcG1zUDlD\neEVWcWpSRkRCMkxBTHdBM3dCbjVpR3FBa0VjCitlTmx4eUJOMHlaU0dFZEhpK3ZD\nZzlMQXVuZWpnaUNmQW9kOGtOaGVDMU0KLS0tIFNlUi9LSzF0UEJCSVBiRlRSNFQz\nNHhMbmNlRXd4ZEJQWVcvTWdCRWEzMUkKls7RbmNOdPDx8z15F+7qay9qIWx6jNsN\nTahT+GgbG29t1aGQCb0yEzKuUyAp39maxxSWToPsfCgJSYJ8RYiUng==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-18T14:33:39Z",
"mac": "ENC[AES256_GCM,data:g+9/fRiqom2+W28ZpiF+oBj9V6ieq5Xz3sRz3GyzvHoLr6yw51JvpG2QuYNYANW0WCiUjFDkU0qPj/9gLHcuX52nc+gNaTzznb1QGPg7WCGSQI7xaMzyYsPxHpg/BOdj5CL8GyLiOWstD1ch0kc3bJmyu68sJUs04uGtHAADzsE=,iv:oASrYaZarEPDu0R3hd/jMazLgwG5r//hIdMyU/tN15o=,tag:o1fgf5oy+rlWXg88FN5Nfw==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View File

@@ -0,0 +1 @@
../../../../../../sops/users/admin

View File

@@ -0,0 +1 @@
../../../../../../sops/machines/peer1

View File

@@ -0,0 +1,19 @@
{
"data": "ENC[AES256_GCM,data:4NIUEK05kEQAKjR8F9mU3M/XvtZXw+X6CejVI0usMcb4WzagNz7XTVDhLWXZ9St5Ev0Y,iv:bD2+rDLMoWSqUAIZRJof0wRrJVya1xwZUTIJBdCs98I=,tag:g2s4byFHTzwU3ikcBGMElA==,type:str]",
"sops": {
"age": [
{
"recipient": "age1ntpf7lqqw4zrk8swjvwtyfak7f2wg04uf7ggu6vk2yyt9qt74qkswn25ck",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQeVh2M2tqSGlOVkpzNlhU\nd0pMd1R0c0tQWnZzdXViWmtxcjl1Wk1Ka0FNCnBUUWJVbjlyR1hSNGpXNWlPRHJB\nNnMzN3BMQ2NDamFBMlhHbVdJUEZ6cjQKLS0tIEJjWmI0ZDl1NXgrSW9uc0R0LzAr\neEwwOC9DdDg2RTJHQ0M3QTFlcVBaSE0K2Du4NguefdEyY1gS6OuVdO3gHga4omcR\n8B+K1wUfIQbArxZLawPxrj7WNDoW5d4mF9fA3MeV1DFyc4KwtYZmUw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvWkdBakVrMVR4RU8xdDlF\nRDkvL0Mrb3ltazhIMjRLZDVlSTVlaFY2ODBBCnlQM2s0SGEvZjFDN3dGWDhIN0dK\nenhQbjZ1ZS9QZzg5SE5XazZXS3dFSkkKLS0tIHJhKzhadGpjTXd4L3hOQkhpR0Fy\nYzhTN2dxVSt3OE5uZFpuWmVlYW4vd1kKwHOxP0C5mLcm4oIT/sGQtUsdsmu3LSN0\nSola5+N+IrAZ+HKnuZlDLZ5JmJSc5j/YhGNn7KR1xhkhfGSS1e3UZw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-18T14:33:39Z",
"mac": "ENC[AES256_GCM,data:ehbrYqTJcsBKGHUB25JHFnKXrJ6z3LkcElZ89xVr4XxLet+odbhsjIoP2FCcxex7PlXcegMduhHBpXwNGUbX+IUNAXTxlWA9CLDmYhWuS2WLiEVXrS11NE03/zUyHdVx/C38dbIPrWD9iaYSrAiuOyfqDTh9k/Bn7vehLTtadoE=,iv:Nk2WVuJydi5tfsb1Mib4A6NocBCDp9QoIbSadq3bIDI=,tag:IaoyfCv3SkmtemXMR9XnkA==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View File

@@ -0,0 +1 @@
../../../../../../sops/users/admin

View File

@@ -0,0 +1 @@
../../../../../../sops/machines/peer1

View File

@@ -0,0 +1,19 @@
{
"data": "ENC[AES256_GCM,data:0BmP+NwG/NGe6R5yU55/MdPEQ8E5u+VXWtvstHc4GpDtmBY=,iv:vo8XBcN7KcYjiyKvvp+XDOdP9yR9B7wJi0XlaiCdVbk=,tag:brK9ntAPSuOvw/C+oDo51g==,type:str]",
"sops": {
"age": [
{
"recipient": "age1ntpf7lqqw4zrk8swjvwtyfak7f2wg04uf7ggu6vk2yyt9qt74qkswn25ck",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4Tk1INGtybUVlejlNNlZE\nVms3TkdRVVF1T0E4TmV3NmxvYWVEL2U3WVhNCjJIaHhBcWVlMEYxRjg5bzJpTWdJ\neUhaRTNRTmtlTW0zUXQxTVZEMkQ2MFEKLS0tIFNGWDI4b2FXTE8xQ2xqb0cyK3FI\ncktHWnE5c1ZSVFpmQU1HZmU2VVB1QmcK/s1fVmwpMMg4BYkkAJzSY7hVQWae1F7g\nmfH8EGlr74mifWUNEbd49/K13nl8atQx6bcau83JIEQR+yyihuY4Jw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsL2FXVytUUVZnVU90bG5L\nYURiYjgwN3RuTldWMGl4clpUWmxkeUsrVzM0CkhKZFgwWHl4dWhNSWRQRXVPNDR6\na3hHNmp2RG9YNDhNM2MyV2FuOGY2UlUKLS0tIFpNU2tNOHdhRDRTdHhYWVh2NGZa\nU3J3S0hpclZzWGIwTlFyczdNZkZSZTAKXCZrLaIOVq90ejoKMaRiK0xNw8WOPcnm\nz2uxProEYvQhY8k29mhCFX5HCN0tGn1XTtHeDL7uHuKuFsnSG/fgYQ==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-18T14:33:39Z",
"mac": "ENC[AES256_GCM,data:QkGJKj/H+MI9Mr9Up5NDUToSddY5eTz47egc2+IatfxR8RebKJ2/mYaeLV26vPdmY60bIac4N/nZkoa6IVBhkHHMvsEHsx3nD6Lro9Wf/pWP8Zddzr90LF5p2+wusq25JutKQiPKOb2gmrcagmSsH/7V/UqI/my3PMeKmw6irhw=,iv:hOtHF/cDFdNfvqCKRhJsOwAHEiQmCPjENzsg23sKG+Q=,tag:K7qG9b4fQD0VbAV8OYp3vw==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View File

@@ -0,0 +1 @@
../../../../../../sops/users/admin

View File

@@ -2,13 +2,14 @@
{
_class = "clan.service";
manifest.name = "clan-core/mycelium";
manifest.description = "End-2-end encrypted IPv6 overlay network";
manifest.description = "End-2-end encrypted P2P IPv6 overlay network";
manifest.categories = [
"System"
"Network"
];
roles.peer = {
description = "A peer in the mycelium network";
interface =
{ lib, ... }:
{

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -8,6 +8,7 @@
];
roles.default = {
description = "Placeholder role to apply the packages service";
interface =
{ lib, ... }:
{

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -1,36 +1,91 @@
The `sshd` Clan service manages SSH to make it easy to securely access your machines over the internet. The service uses `vars` to store the SSH host keys for each machine to ensure they remain stable across deployments.
# Clan service: sshd
What it does
- Generates and persists SSH host keys via `vars`.
- Optionally issues CAsigned host certificates for servers.
- Installs the `server` CA public key into `clients` `known_hosts` for TOFUless verification.
`sshd` also generates SSH certificates for both servers and clients allowing for certificate-based authentication for SSH.
The service also disables password-based authentication over SSH, to access your machines you'll need to use public key authentication or certificate-based authentication.
When to use it
- ZeroTOFU SSH for dynamic fleets: admins/CI can connect to frequently rebuilt hosts (e.g., server-1.example.com) without prompts or perhost `known_hosts` churn.
## Usage
Roles
- Server: runs sshd, presents a CAsigned host certificate for `<machine>.<domain>`.
- Client: trusts the CA for the given domains to verify servers certificates.
Tip: assign both roles to a machine if it should both present a cert and verify others.
Quick start (with host certificates)
Useful if you never want to get a prompt about trusting the ssh fingerprint.
```nix
{
inventory.instances = {
sshd-with-certs = {
module = { name = "sshd"; input = "clan-core"; };
# Servers present certificates for <machine>.example.com
roles.server.tags.all = { };
roles.server.settings = {
certificate.searchDomains = [ "example.com" ];
# Optional: also add RSA host keys
# hostKeys.rsa.enable = true;
};
# Clients trust the CA for *.example.com
roles.client.tags.all = { };
roles.client.settings = {
certificate.searchDomains = [ "example.com" ];
};
};
};
}
```
Basic: only add persistent host keys (ed25519), no certificates
Useful if you want to get an ssh "trust this server" prompt once and then never again.
```nix
{
inventory.instances = {
# By default this service only generates ed25519 host keys
sshd-basic = {
module = {
name = "sshd";
input = "clan-core";
};
roles.server.tags.all = { };
roles.client.tags.all = { };
};
# Also generate RSA host keys for all servers
sshd-with-rsa = {
module = {
name = "sshd";
input = "clan-core";
};
roles.server.tags.all = { };
roles.server.settings = {
hostKeys.rsa.enable = true;
};
roles.client.tags.all = { };
};
};
}
```
Example: selective trust per environment
Admins should trust only production; CI should trust prod and staging. Servers are reachable under both domains.
```nix
{
inventory.instances = {
sshd-env-scoped = {
module = { name = "sshd"; input = "clan-core"; };
# Servers present certs for both prod and staging FQDNs
roles.server.tags.all = { };
roles.server.settings = {
certificate.searchDomains = [ "prod.example.com" "staging.example.com" ];
};
# Admin laptop: trust prod only
roles.client.machines."admin-laptop".settings = {
certificate.searchDomains = [ "prod.example.com" ];
};
# CI runner: trust prod and staging
roles.client.machines."ci-runner-1".settings = {
certificate.searchDomains = [ "prod.example.com" "staging.example.com" ];
};
};
};
}
```
- Admin -> server1.prod.example.com: zeroTOFU (verified via cert).
- Admin -> server1.staging.example.com: falls back to TOFU (or is blocked by policy).
- CI -> either prod or staging: zeroTOFU for both.
Note: server and client searchDomains dont have to be identical; they only need to overlap for the hostnames you actually use.
Notes
- Connect using a name that matches a cert principal (e.g., `server1.example.com`); wildcards are not allowed inside the certificate.
- CA private key stays in `vars` (not deployed); only the CA public key is distributed.
- Logins still require your user SSH keys on the server (passwords are disabled).

View File

@@ -10,6 +10,7 @@
manifest.readme = builtins.readFile ./README.md;
roles.client = {
description = "Installs the SSH CA public key into known_hosts for the configured domains, so this machine can verify servers host certificates without TOFU prompts.";
interface =
{ lib, ... }:
{
@@ -38,7 +39,6 @@
...
}:
{
clan.core.vars.generators.openssh-ca = lib.mkIf (settings.certificate.searchDomains != [ ]) {
share = true;
files.id_ed25519.deploy = false;
@@ -64,11 +64,12 @@
};
roles.server = {
description = "Runs sshd with persistent host keys and (if certificate.searchDomains is set) a CAsigned host certificate for <machine>.<domain>, enabling TOFUless verification by clients that trust the CA.";
interface =
{ lib, ... }:
{
options = {
hostKeys.rsa.enable = lib.mkEnableOption "Generate RSA host key";
hostKeys.rsa.enable = lib.mkEnableOption "generating a RSA host key";
certificate = {
searchDomains = lib.mkOption {
@@ -96,9 +97,7 @@
...
}:
{
clan.core.vars.generators = {
openssh-ca = lib.mkIf (settings.certificate.searchDomains != [ ]) {
share = true;
files.id_ed25519.deploy = false;

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -13,7 +13,7 @@
}
```
Now the folder `~/syncthing/documents` will be shared with all your machines.
Now the folder `~/syncthing/documents` will be shared and kept in sync with all your machines.
## Documentation

View File

@@ -11,6 +11,7 @@
manifest.readme = builtins.readFile ./README.md;
roles.peer = {
description = "A peer in the syncthing cluster that syncs files with other peers.";
interface =
{ lib, ... }:
{

View File

@@ -5,9 +5,7 @@
...
}:
let
module = lib.modules.importApply ./default.nix {
inherit (self) packages;
};
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -11,7 +11,9 @@
pkgs.syncthing
];
script = ''
syncthing generate --config "$out"
export TMPDIR=/tmp
TEMPORARY=$(mktemp -d)
syncthing generate --config "$out" --data "$TEMPORARY"
mv "$out"/key.pem "$out"/key
mv "$out"/cert.pem "$out"/cert
cat "$out"/config.xml | grep -oP '(?<=<device id=")[^"]+' | uniq > "$out"/id

View File

@@ -2,13 +2,17 @@
{
_class = "clan.service";
manifest.name = "clan-core/tor";
manifest.description = "Onion routing, use Hidden services to connect your machines";
manifest.description = "Part of the clan networking abstraction to define how to reach machines through the Tor network, if used has the lowest priority";
manifest.categories = [
"System"
"Network"
];
roles.client = {
description = ''
Enables a continuosly running Tor proxy on the machine, allowing access to other machines via the Tor network.
If not enabled, a Tor proxy will be started automatically when required.
'';
perInstance =
{
...
@@ -31,6 +35,7 @@
};
roles.server = {
description = "Sets up a Tor onion service for the machine, thus making it reachable over Tor.";
# interface =
# { lib, ... }:
# {
@@ -58,7 +63,7 @@
priority = lib.mkDefault 10;
# TODO add user space network support to clan-cli
module = "clan_lib.network.tor";
peers = lib.mapAttrs (name: machine: {
peers = lib.mapAttrs (name: _machine: {
host.var = {
machine = name;
generator = "tor_${instanceName}";

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules = {

View File

@@ -7,7 +7,7 @@ inventory.instances = {
clan-cache = {
module = {
name = "trusted-nix-caches";
input = "clan";
input = "clan-core";
};
roles.default.machines.draper = { };
};

View File

@@ -7,7 +7,7 @@
manifest.readme = builtins.readFile ./README.md;
roles.default = {
description = "Placeholder role to apply the trusted-nix-caches service";
perInstance =
{ ... }:
{

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules.trusted-nix-caches = module;

View File

@@ -8,7 +8,7 @@
user-alice = {
module = {
name = "users";
input = "clan";
input = "clan-core";
};
roles.default.tags.all = { };
roles.default.settings = {
@@ -35,7 +35,7 @@
user-bob = {
module = {
name = "users";
input = "clan";
input = "clan-core";
};
roles.default.machines.bobs-laptop = { };
roles.default.settings.user = "bob";

View File

@@ -10,6 +10,7 @@
manifest.readme = builtins.readFile ./README.md;
roles.default = {
description = "Placeholder role to apply the user service";
interface =
{ lib, ... }:
{

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules.users = module;

View File

@@ -0,0 +1,21 @@
This module allows you to pre-configure WiFi networks for automatic connection.
Each attribute in `settings.network` serves as an internal identifier, not the actual SSID.
After defining your networks, you will be prompted for the SSID and password for each one.
This module leverages NetworkManager for managing connections.
```nix
instances = {
wifi = {
module.name = "wifi";
module.input = "clan-core";
roles.default = {
machines."jon" = {
settings.networks.home = { };
settings.networks.work = { keyMgmt = "wpa-eap"; };
};
};
};
};
```

View File

@@ -1,4 +1,3 @@
{ packages }:
{ lib, ... }:
let
inherit (lib)
@@ -10,8 +9,11 @@ in
{
_class = "clan.service";
manifest.name = "wifi";
manifest.description = "Pre configure wifi networks to connect to";
manifest.readme = builtins.readFile ./README.md;
roles.default = {
description = "Placeholder role to apply the wifi service";
interface = {
options.networks = lib.mkOption {
type = lib.types.attrsOf (
@@ -29,12 +31,32 @@ in
default = true;
description = "Automatically try to join this wifi network";
};
keyMgmt = lib.mkOption {
type = lib.types.str;
default = "wpa-psk";
description = ''
Key management used for the connection.
One of "none" (WEP or no password protection), "ieee8021x" (Dynamic WEP), "owe" (Opportunistic Wireless Encryption), "wpa-psk" (WPA2 + WPA3 personal),
"sae" (WPA3 personal only), "wpa-eap" (WPA2 + WPA3 enterprise) or "wpa-eap-suite-b-192" (WPA3 enterprise only).
'';
};
};
}
)
);
default = { };
description = "Wifi networks to predefine";
example = {
home = { };
guest = {
autoConnect = false;
keyMgmt = "wpa-eap";
};
};
description = ''
List of wifi networks to configure for connection.
Each attribute name is an internal identifier (not the SSID).
For each network, you will be prompted to enter the SSID and password as secrets.
'';
};
};
@@ -50,7 +72,7 @@ in
ssid_path =
network_name: config.clan.core.vars.generators."wifi.${network_name}".files.network-name.path;
secret_generator = name: value: {
secret_generator = name: _value: {
name = "wifi.${name}";
value = {
prompts.network-name.type = "line";
@@ -80,7 +102,7 @@ in
wifi.mode = "infrastructure";
wifi.ssid = "$ssid_${name}";
wifi-security.psk = "$pw_${name}";
wifi-security.key-mgmt = "wpa-psk";
wifi-security.key-mgmt = networkCfg.keyMgmt;
}
);

View File

@@ -1,12 +1,8 @@
{
self,
lib,
...
}:
let
module = lib.modules.importApply ./default.nix {
inherit (self) packages;
};
module = ./default.nix;
in
{
clan.modules.wifi = module;

View File

@@ -146,6 +146,7 @@ in
# Peer options and configuration
roles.peer = {
description = "A peer that connects to one or more controllers.";
interface =
{ lib, ... }:
{
@@ -261,6 +262,7 @@ in
# Controller options and configuration
roles.controller = {
description = "A controller that routes peer traffic. Must be publicly reachable.";
interface =
{ lib, ... }:
{

View File

@@ -1,6 +1,6 @@
{ lib, ... }:
{ ... }:
let
module = lib.modules.importApply ./default.nix { };
module = ./default.nix;
in
{
clan.modules.wireguard = module;

View File

@@ -3,7 +3,7 @@ your clan.
Yggdrasil is designed to be a future-proof and decentralised alternative to
the structured routing protocols commonly used today on the internet. Inside
your clan, it will allow you reaching all of your machines.
your clan, it will allow you to reach all of your machines.
## Example Usage

View File

@@ -5,6 +5,7 @@
manifest.description = "Yggdrasil encrypted IPv6 routing overlay network";
roles.default = {
description = "Placeholder role to apply the yggdrasil service";
interface =
{ lib, ... }:
{
@@ -73,20 +74,29 @@
openssl pkey -in $out/privateKey -pubout -out $out/publicKey
# Derive IPv6 address from key
echo "{ \"PrivateKeyPath\": \"$out/privateKey\"}" | yggdrasil -useconf -address > $out/address
echo "{\"PrivateKeyPath\": \"$out/privateKey\"}" | yggdrasil -useconf -address | tr -d '\n' > $out/address
'';
};
systemd.services.yggdrasil.serviceConfig.BindReadOnlyPaths = [
"${config.clan.core.vars.generators.yggdrasil.files.privateKey.path}:/var/lib/yggdrasil/key"
"%d/key:/key"
];
systemd.services.yggdrasil.serviceConfig.LoadCredential =
"key:${config.clan.core.vars.generators.yggdrasil.files.privateKey.path}";
services.yggdrasil = {
enable = true;
openMulticastPort = true;
persistentKeys = true;
# We don't need this option, because we persist our keys with
# vars by ourselves. This option creates an unnecesary additional
# systemd service to save/load the keys and should be removed
# from the NixOS module entirely, as it can be replaced by the
# (at the time of writing undocumented) PrivateKeyPath= setting.
# See https://github.com/NixOS/nixpkgs/pull/440910#issuecomment-3301835895 for details.
persistentKeys = false;
settings = {
PrivateKeyPath = "/var/lib/yggdrasil/key";
PrivateKeyPath = "/key";
IfName = "ygg";
Peers = settings.peers;
MulticastInterfaces = [

View File

@@ -20,24 +20,6 @@
};
};
# TODO remove after testing, this is just to make @pinpox' life easier
nodes =
let
c =
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [ net-tools ];
console = {
font = "Lat2-Terminus16";
keyMap = "colemak";
};
};
in
{
peer1 = c;
peer2 = c;
};
testScript = ''
start_all()
@@ -48,12 +30,10 @@
# Check that yggdrasil service is running on both machines
peer1.wait_for_unit("yggdrasil")
peer2.wait_for_unit("yggdrasil")
peer1.succeed("systemctl is-active yggdrasil")
peer2.succeed("systemctl is-active yggdrasil")
# Check that both machines have yggdrasil network interfaces
# Yggdrasil creates a tun interface (usually tun0)
peer1.wait_until_succeeds("ip link show | grep -E 'ygg'", 30)
peer2.wait_until_succeeds("ip link show | grep -E 'ygg'", 30)
@@ -61,23 +41,18 @@
peer1_ygg_ip = peer1.succeed("yggdrasilctl -json getself | jq -r '.address'").strip()
peer2_ygg_ip = peer2.succeed("yggdrasilctl -json getself | jq -r '.address'").strip()
# TODO: enable this check. Values don't match up yet, but I can't
# update-vars to test, because the script is borken.
# Compare runtime addresses with saved addresses from vars
# expected_peer1_ip = "${builtins.readFile ./vars/per-machine/peer1/yggdrasil/address/value}"
# expected_peer2_ip = "${builtins.readFile ./vars/per-machine/peer2/yggdrasil/address/value}"
expected_peer1_ip = "${builtins.readFile ./vars/per-machine/peer1/yggdrasil/address/value}"
expected_peer2_ip = "${builtins.readFile ./vars/per-machine/peer2/yggdrasil/address/value}"
print(f"peer1 yggdrasil IP: {peer1_ygg_ip}")
print(f"peer2 yggdrasil IP: {peer2_ygg_ip}")
print(f"peer1 expected IP: {expected_peer1_ip}")
print(f"peer2 expected IP: {expected_peer2_ip}")
# print(f"peer1 expected IP: {expected_peer1_ip}")
# print(f"peer2 expected IP: {expected_peer2_ip}")
#
# # Verify that runtime addresses match expected addresses
# assert peer1_ygg_ip == expected_peer1_ip, f"peer1 runtime IP {peer1_ygg_ip} != expected IP {expected_peer1_ip}"
# assert peer2_ygg_ip == expected_peer2_ip, f"peer2 runtime IP {peer2_ygg_ip} != expected IP {expected_peer2_ip}"
# Verify that runtime addresses match expected addresses
assert peer1_ygg_ip == expected_peer1_ip, f"peer1 runtime IP {peer1_ygg_ip} != expected IP {expected_peer1_ip}"
assert peer2_ygg_ip == expected_peer2_ip, f"peer2 runtime IP {peer2_ygg_ip} != expected IP {expected_peer2_ip}"
# Wait a bit for the yggdrasil network to establish connectivity
import time
@@ -88,6 +63,5 @@
# Test connectivity: peer2 should be able to ping peer1 via yggdrasil
peer2.succeed(f"ping -6 -c 3 {peer1_ygg_ip}")
'';
}

View File

@@ -1,6 +1,6 @@
[
{
"publickey": "age1r264u9yngfq8qkrveh4tn0rhfes02jfgrtqufdx4n4m3hs4rla2qx0rk4d",
"publickey": "age1p8trv2dmpanl3gnzj294c4t5uysu7d6rfjncp5lmn6redyda8fns6p7kca",
"type": "age"
}
]
]

View File

@@ -1,6 +1,6 @@
[
{
"publickey": "age1p8kuf8s0nfekwreh4g38cgghp4nzszenx0fraeyky2me0nly2scstqunx8",
"publickey": "age107mprppm3r9u7f26e6t5mhtdny0h5ugfmfjy8kac2tw9nrh9a3ksex0xca",
"type": "age"
}
]
]

View File

@@ -1,14 +1,14 @@
{
"data": "ENC[AES256_GCM,data:3dolkgdLC4y5fps4gGb9hf4QhwkUUBodlMOKT+/+erO70FB/pzYBg0mQjQy/uqjINzfIiM32iwVDnx3/Yyz5BDRo2CK+83UGEi4=,iv:FRp1HqlU06JeyEXXFO5WxJWxeLnmUJRWGuFKcr4JFOM=,tag:rbi30HJuqPHdU/TqInGXmg==,type:str]",
"data": "ENC[AES256_GCM,data:jDEog7FFXl28Le3rh5VTiY0DFmLhIy2ZccFjuYWx+OQrKNEqTLI1fzaeMWIcgu6ln6wfGUk640d3IhmrF45MVZiJGkpkOU8UFx0=,iv:4oGaoxhFQwr9OQfdLL7y1N/gJo/uGkTPG/xicVprIAQ=,tag:Smu0/P2bQB66w+0J2Bjlxw==,type:str]",
"sops": {
"age": [
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoYXBxS1JuNW9NeC9YU0xY\nK2xQWDhUYjZ4VzZmeUw1aG9UN2trVnBGQ0J3Ckk0V3d0UFBkT0RnZjBoYjNRVEVW\nN2VEdCtUTUUwenhJSEErT0MyWDA2bHMKLS0tIHJJSzVtR3NCVXozbzREWjltN2ZG\nZm44Y1c4MWNIblcxbmt2YkdxVE10Z1UKmJKEjiYZ9U47QACkbacNTirQIcCvFjM/\nwVxSEVq524sK8LCyIEvsG4e3I3Kn0ybZjoth7J/jg7J4gb8MVw+leQ==\n-----END AGE ENCRYPTED FILE-----\n"
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpQ2hib2Mrb0plWUVwNWU5\nWmpxNlduaUVJckhuQlhQbUJpanloWGFLelJ3CjJJMlBGbGRTWEhGUHh2VVkzUzNa\nL3FGVkF3R3JJT051UTg4UlkwOHRNanMKLS0tIDVWcHU4NmFMUWp3STFTYmg5YmNp\nVzd1Uzg2Wkp5QnJ3V1Qyb2lwSXdBRDgK/V5lgw2TePhUC9ngW53ZapIMkcwPvJus\ns0jUYkStHXjsvEiN7BG8cG7/vRbLD8CnKXnmieM20mT6o7GHGfhHMg==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-16T08:13:06Z",
"mac": "ENC[AES256_GCM,data:6HJDkg0AWz+zx5niSIyBAGGaeemwPOqTCA/Fa6VjjyCh1wOav3OTzy/DRBOCze4V52hMGV3ULrI2V7G7DdvQy6LqiKBTQX5ZbWm3IxLASamJBjUJ1LvTm97WvyL54u/l2McYlaUIC8bYDl1UQUqDMo9pN4GwdjsRNCIl4O0Z7KY=,iv:zkWfYuhqwKpZk/16GlpKdAi2qS6LiPvadRJmxp2ZW+w=,tag:qz1gxVnT3OjWxKRKss5W8w==,type:str]",
"lastmodified": "2025-09-17T07:12:51Z",
"mac": "ENC[AES256_GCM,data:gy/1NFmpFz/tdhgU/Vr+xg46DUjy9ZbrAtCBnIxclwZLJ/fneBpblv8TFgdysY4Ay6jp1S/TOc8eyr+KLHMqcBlje09wd1ac/Y3ee6GccXitB+/c5ayuXX/ShVCdicsr/9COw7vfndAQPU8XIz6tdy0dbL7jgVTyViZW/P5CXEU=,iv:BQ/INwTTCshl5BVnJbVzHW8rwafERS6bKh2JAJsMv9s=,tag:QhsbjeEBivbl8fQLHjiKtQ==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}

View File

@@ -1,14 +1,14 @@
{
"data": "ENC[AES256_GCM,data:BW15ydnNpr0NIXu92nMsD/Y52BDEOsdZg2/fiM8lwSTJN3lEymrIBYsRrcPAnGpFb52d7oN8zdNz9WoW3f/Xwl136sWDz/sc0k4=,iv:7m77nOR/uXLMqXB5QmegtoYVqByJVFFqZIVOtlAonzg=,tag:8sUo9DRscNRajrk+CzHzHw==,type:str]",
"data": "ENC[AES256_GCM,data:1rVgSwg2qPHuXUOQCgOunaNYiBbsh99dZ2y0BV4TxzACwdb3lb6/XnLeDenLELOpKruZQoNJax/NziRr+VHzmh/TlQhNgTkS71A=,iv:Wi5/cFOETb1rhAYeyzkpppzSSm+S+8cCQYc7zkp74FY=,tag:JQHFZJwYMQH4jUqSw6Ld8Q==,type:str]",
"sops": {
"age": [
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLVWpnSlJOTVU4NWRMSCto\nS0RaR2RCTUJjT1J0VzRPVTdPL2N5Yjl3c0EwCmlabm1aSzdlV29nb3lrZFBEZXR6\nRjI2TGZUNW1KQ3pLbDFscUlKSnVBNWcKLS0tIDlLR1VFSTRHeWNiQ29XK1pUUnlr\nVkVHOXdJeHhpcldYNVhpK1V6Nng0eW8KSsqJejY1kll6bUBUngiolCB7OhjyI0Gc\nH+9OrORt/nLnc51eo/4Oh9vp/dvSZzuW9MOF9m0f6B3WOFRVMAbukQ==\n-----END AGE ENCRYPTED FILE-----\n"
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGV3ZLZmNrejlvTFF6NDZW\nYmljS0VXQUtCR3IzMG9tMksvSllVVkIxVTEwCi9Fd1dBbmFlYmF2cE1raVJoS3RR\nWmxQY3RwanRZUE5aN1Q2SzhJOFU1elEKLS0tIG9RMElDMEo3TFJjU0RvU3FMQk12\nT1pNc1VjeUliejk3YmJ6d29zUU15aDQKuZ62Q/ywLrpyu1jB34OCPKQEDd150qH6\nHzyw+MasUlzKNs0ZrALwfhnCKiNb/Pq0Lu660Dx5/sFxI/TAqC7NGg==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-16T08:13:15Z",
"mac": "ENC[AES256_GCM,data:dyLnGXBC4nGOgX2TrGhf8kI/+Et0PRy+Ppr228y3LYzgcmUunZl9R8+QXJN51OJSQ63gLun5TBw0v+3VnRVBodlhqTDtfACJ7eILCiArPJqeZoh5MR6HkF31yfqTRlXl1i6KHRPVWvjRIdwJ9yZVN1XNAUsxc7xovqS6kkkGPsA=,iv:7yXnpbU7Zf7GH1+Uimq8eXDUX1kO/nvTaGx4nmTrKdM=,tag:WNn9CUOdCAlksC0Qln5rVg==,type:str]",
"lastmodified": "2025-09-17T07:13:24Z",
"mac": "ENC[AES256_GCM,data:N7mmiEZxinOgWdd7QcZBAumnWaApjlQVww4EzAQ1/JH5i8r8CIfPh/7lGMQntlJj5ob+UgrS96nl6XKdvs3Bt7z34zPq7KV3c0mSmclEctRfcZiG4F+rZ0QIMIRJjq7xJL/M9WupSn8Lgms7qHJMdJyHdDkw47bmXz3MIw9c9zo=,iv:ZYPoo5jTIGnZ1HcAWlr26gloVhSjfhwbO/xH5YCbgF0=,tag:UKMVMGEfqyfo04cIkuKD0A==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}

View File

@@ -1 +1 @@
200:91bb:f1ec:c580:6d52:70b3:4d60:7bf2
200:fa3b:ad0e:6821:9a51:3ad5:62a4:9ab1

View File

@@ -1,18 +1,18 @@
{
"data": "ENC[AES256_GCM,data:/YoEoYY8CmqK4Yk4fmZieIHIvRn779aikoo3+6SWI5SxuU8TLJVY9+Q7mRmnbCso/8RPMICWkZMIkfbxYi6Dwc4UFmLwPqCoeAYsFBiHsJ6QUoTm1qtDDfXcruFs8Mo93ZmJb7oJIC0a+sVbB5L1NsGmG3g+a+g=,iv:KrMjRIQXutv9WdNzI5VWD6SMDnGzs9LFWcG2d9a6XDg=,tag:x5gQN9FaatRBcHOyS2cicw==,type:str]",
"data": "ENC[AES256_GCM,data:oLWxmCqCLyKCdN90eScYC4eMsY5mcpXexk03P+KfQX9hCUg7iOSv+BTujvAFuJA0z2Pgg7B/L0noYSImE3208gDC2exdZme+szpNwxD6oh1bBx5XuYGc/TDzEl7IdPrf1piuqCkWgD6wNb9aFVA9NB/CrNaszY8=,iv:pU8OGFwtqkxy0+iyhWaOnWdSVvaxYBUgnQwv89CTfKc=,tag:V/GVEvjEpeaf3Tl3XCVL7w==,type:str]",
"sops": {
"age": [
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwQ0FNU1c4RDNKTHRtMy8z\nSEtQRzFXTVFvcitMWjVlMURPVkxsZC9wU25nCmt4TS81bnJidzFVZkxEY0ovWUtm\nVk5PMjZEWVJCei9rVTJ2bG1ZNWJoZGMKLS0tIHgyTEhIdUQ3YnlKVi9lNVpUZ0dI\nd3BLL05oMXFldGVKbkpoaklscDJMR3MKpUl/KNPrtyt4/bu3xXUAQIkugQXWjlPf\nFqFc1Vnqxynd+wJkkd/zYs4XcOraogOUj/WIRXkqXgdDDoEqb/VIBg==\n-----END AGE ENCRYPTED FILE-----\n"
"recipient": "age1p8trv2dmpanl3gnzj294c4t5uysu7d6rfjncp5lmn6redyda8fns6p7kca",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBidXZxMVg2bkFCekFza3FV\naGVJTjRSSnQrVkgyTVU4Vk9YZFR2Nk1Xcnl3ClNTZnJsR2xZc3hGRFA0NGp2L2Uy\nU2w0N1ZON0xQRXRKL0NId1J3dWNSeXcKLS0tIFlKNk5walJrM2FGM0ozYTBUNVN1\nNHd0N3g2VWFjTUZtbHExdmsvSjJQUGMKDHgRMyTf4CuoIRdsfl6TmPLgcjxHdR4N\nzNmnSmT6QXJr4gBQ7e/3zpMdq4sKzyAOjJPkQra8nJ/KvhpFwXkdtg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1r264u9yngfq8qkrveh4tn0rhfes02jfgrtqufdx4n4m3hs4rla2qx0rk4d",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArOUdkd3VVSTU3NHZ6aURB\na2dYMXhyMmVLMDVlM0dzVHpxbUw3K3BFcVNzCm1LczFyd3BubGwvRVUwQ1Q0aWZR\nL1hlb1VpZ3JnTVQ4Zm9wVnlJYVNuL00KLS0tIHlMRVMyNW9rWG45bVVtczF3MVNq\nL2d2RXhEeVcyRVNmSUF6cks5VStxVkUKugI1iDei32852wNV/zPlyVwKJH1UXOlY\nFQq7dqMJMWI6a5F+z4UdaHvzyKxF2CWBG7DVnaUSpq7Q3uGmibsSOQ==\n-----END AGE ENCRYPTED FILE-----\n"
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1L3hBYnNTdEhTK1M0TEUx\nM1BFb3IwWDZPc2tkN0JUNXRPWkhEWHpXaFFNCkFlZ3Ixb1hhVWMvUmpKdCtjbW5h\nTVpLSkdxUXI4SVE3MW5LZkFVSmM3dDgKLS0tICtKWGYzbFQ1VGQydktHSDVadVQy\nM3JTSGc0NWVHWGl4akV2VUNNVjVvT00KKmbkGJ2KclTBb7NI0MamWZnlWMaXscws\nYO261RHc/j4s3KdbWATklh2KTicKpgta0mh294Y+hKYLGgBpnXjtOw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-16T08:13:07Z",
"mac": "ENC[AES256_GCM,data:LIlgQgiQt9aHXagpXphxSnpju+DOxuBvPpz5Rr43HSwgbWFgZ8tqlH2C1xo2xsJIexWkc823J9txpy+PLFXSm4/NbQGbKSymjHNEIYaU1tBSQ0KZ+s22X3/ku3Hug7/MkEKv5JsroTEcu3FK6Fv7Mo0VWqUggenl9AsJ5BocUO4=,iv:LGOnpWsod1ek4isWVrHrS+ZOCPrhwlPliPOTiMVY0zY=,tag:tRuHBSd9HxOswNcqjvzg0w==,type:str]",
"lastmodified": "2025-09-17T07:12:51Z",
"mac": "ENC[AES256_GCM,data:YG4k+PvsF0NVfjqKY/MBhCOwn9Kcn5orq8aD41X3NEPBT+wU5RlN0XqXhH2nkZ52ZHdCN84Ulbd4guwBcJcUtGvxqOpfE4SJ9RFE+SjYw+2+S9wlArQx5R5Zd+Sr+Rgtaip3moENbxETxHZazbEK3u5o0aXKrZvoXH2xgPRYUOg=,iv:lDnNELLpqykrsmoORMW7p6gF43C2QvPwf0PZep2pEo8=,tag:CZNOBx3Aeoq5WeDbANqFVw==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}

View File

@@ -1,3 +1,3 @@
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAtyIHCZ0/yVbHpllPwgaWIFQ3Kb4fYMcOujgVmttA7gM=
MCowBQYDK2VwAyEAguIpeMvvMtdilU6tsqdBClci2YUgBKEUPQ5ID55zOVY=
-----END PUBLIC KEY-----

View File

@@ -1 +1 @@
200:bb1f:6f1c:1852:173a:cb5e:5726:870
200:3975:b69f:fd15:f39a:bf24:f644:432b

View File

@@ -1,18 +1,18 @@
{
"data": "ENC[AES256_GCM,data:b1dbaJQGr8mnISch0iej+FhMnYOIFxOJYCvWDQseiczltXsBetbYr+89co5Sp7wmhQrH3tlWaih3HZe294Y9j8XvwpNUtmW3RZHsU/6EWA50LKcToFGFCcEBM/Nz9RStQXnjwLbRSLFuMlfoQttUATB2XYSm+Ng=,iv:YCeE3KbHaBhR0q10qO8Og1LBT5OUjsIDxfclpcLJh6I=,tag:M7y9HAC+fh8Fe8HoqQrnbg==,type:str]",
"data": "ENC[AES256_GCM,data:Ik+mzD41SwfGZrqGi5oy0u8ZS8qCKgV34aohIt7J/11S3ayhKKN8451cYPltGg+2i/+2DWRSkqYZsctgIahvthnvb30r91XHRUCtE3oT8iPOKwEuW2xnZBL2dK0qHrKFGn8B/o3Bl/+4cWuR5Jt9QHlN4oF3o50=,iv:a9mSIr7TT9im19P5XKiDGL71hMLfQE8IB6NV8WABZ+s=,tag:dVQ0HZdpbkcmFA37Il+VIw==,type:str]",
"sops": {
"age": [
{
"recipient": "age1p8kuf8s0nfekwreh4g38cgghp4nzszenx0fraeyky2me0nly2scstqunx8",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3NTVOT2MxaDJsTXloVVcv\nellUdnVxSVdnZ1NBUGEwLzBiTGoyZENJdm1RClp5eHY3dkdVSzVJYk52dWFCQnlG\nclIrQUJ5RXRYTythWTFHR1NhVHlyMVkKLS0tIEFza3YwcUNiYUV5VWJQcTljY2ZR\nUnc3U1VubmZRTCtTTC9rd1kydnNYa00KqdwV3eRHA6Y865JXQ7lxbS6aTIGf/kQM\nqDFdiUdvEDqo19Df3QBJ7amQ1YjPqSIRbO8CJNPI8JqQJKTaBOgm9g==\n-----END AGE ENCRYPTED FILE-----\n"
"recipient": "age107mprppm3r9u7f26e6t5mhtdny0h5ugfmfjy8kac2tw9nrh9a3ksex0xca",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3WEtncHIrd2YrbHduUm4y\nYkh1U0NERDR0MzRNQXZ0elNMZzl0ZmJPMlVVCnJ1UC9uNnk0dC9JVzdReUxLZmdR\nMGIwSjBKUW8yQmQ1R3dqU29ZM2czMEUKLS0tIFpMM3l6YnVFRUtLOFRvSTBXRXU0\nQUJWNk5obzBINS90dWwybXlXdEZFZjgKrZtViJwgPpKT+Bhx6ymEhf6QmnMmZ6Jf\n3kIxzDWxGbxrDTrrdXm33gYs9bRvtXsTACRT3TRAKIwSjIV/ycCUBA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1qm0p4vf9jvcnn43s6l4prk8zn6cx0ep9gzvevxecv729xz540v8qa742eg",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzTmV0Skd5Zzk1SXc4ZDc3\nRi9wTVdDM1lTc3N0MXpNNVZjUWJ6VDZHd3hzCkpRZnNtSU14clkybWxvSEhST2py\nR29jcHdXSCtFRE02ejB0dzN1eGVQZ1kKLS0tIE9YVjJBRTg1SGZ5S3lYdFRUM3RW\nOGZjUEhURnJIVTBnZG43UFpTZkdseFUKOgHC10Rqf/QnzfCHUMEPb1PVo9E6qlpo\nW/F1I8ZqkFI8sWh54nilXeR8i8w+QCthliBxsxdDTv2FSxdnKNHu3A==\n-----END AGE ENCRYPTED FILE-----\n"
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArY1A4blFZNjdTU3lGUFA3\nb1hscVhLVmtuQnJMS3VHZVVEOXBDRktXNVhjCkdLZEFFZXhubFJrZTU3RjRDN1lh\nVzgyd3E3a0NGTGh1N2lPQWZBVG9BaW8KLS0tIFN1eEhpMk5mUkNaL29MS2NlWDdP\nVXFtb3c0Y25MT3NLK0N2RStkY1R0MGsKLv8yOSl2iQx39JRJA/e0dOtIz7ZND0+o\nzmqxapD6pxbj8RGswj0szLrxaveWT6Vkmmy/a4fz35uw3xuF7uiJJA==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-09-16T08:13:15Z",
"mac": "ENC[AES256_GCM,data:0byytsY3tFK3r4qhM1+iYe9KYYKJ8cJO/HonYflbB0iTD+oRBnnDUuChPdBK50tQxH8aInlvgIGgi45OMk7IrFBtBYQRgFBUR5zDujzel9hJXQvpvqgvRMkzA542ngjxYmZ74mQB+pIuFhlVJCfdTN+smX6N4KyDRj9d8aKK0Qs=,iv:DC8nwgUAUSdOCr8TlgJX21SxOPOoJKYeNoYvwj5b9OI=,tag:cbJ8M+UzaghkvtEnRCp+GA==,type:str]",
"lastmodified": "2025-09-17T07:13:24Z",
"mac": "ENC[AES256_GCM,data:KCBHfavyg1U/Z1e3rr0jdHivUa5/rl42N/K6c0BR47srdYqcpAS+SWW6tH7kPI3EO+P7TgXVoGlmcXaKgrlRpe37eNzdAT6PJYm7rhe6rm2UgZ1yw/NFqA11p/i3dDbTzYHaHMNGGGg9t/BdT1tD0zCICfptGQnSSBx/BEmT3ak=,iv:GOk8/z1mLIVKxFX4ayt9HvA90gv0Af1KqcDbdJRUYu4=,tag:hJpOBFRESQXmE7iMqDqO6g==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}

Some files were not shown because too many files have changed in this diff Show More