├── .envrc
├── .github
└── workflows
│ └── pages.yaml
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── README.md
├── doc
├── .vitepress
│ └── config.ts
├── am.data.js
├── index.md
└── options.md
├── flake.lock
├── flake.nix
├── nix
├── home
│ ├── core.nix
│ ├── default.nix
│ └── nixos-module.nix
└── package.nix
├── package.json
├── pnpm-lock.yaml
├── src
├── api.rs
├── exec.rs
├── exec_node.rs
├── gsettings.rs
├── main.rs
└── node.rs
└── test
├── main.lua
├── main.nix
└── nixos.nix
/.envrc:
--------------------------------------------------------------------------------
1 | use flake
2 |
3 | export AM_LOG=trace
4 |
--------------------------------------------------------------------------------
/.github/workflows/pages.yaml:
--------------------------------------------------------------------------------
1 | name: site
2 |
3 | permissions:
4 | id-token: write
5 | pages: write
6 |
7 | on:
8 | push:
9 | branches:
10 | - master
11 |
12 |
13 | jobs:
14 | build:
15 | runs-on: ubuntu-latest
16 | environment:
17 | name: github-pages
18 |
19 | steps:
20 | - name: Checkout
21 | uses: actions/checkout@v4
22 | - name: Install Nix
23 | uses: DeterminateSystems/nix-installer-action@main
24 | with:
25 | extra-conf: |
26 | extra-experimental-features = pipe-operators
27 | - name: Build page
28 | run: |
29 | eval "$(nix print-dev-env)"
30 | pnpm install
31 | pnpm build
32 | - name: Upload artifacts
33 | id: deployment
34 | uses: actions/upload-pages-artifact@v3
35 | with:
36 | path: doc/.vitepress/dist
37 |
38 | deploy:
39 | environment:
40 | name: github-pages
41 | url: ${{ steps.deployment.outputs.page_url }}
42 | runs-on: ubuntu-latest
43 | needs: build
44 | steps:
45 | - name: Deploy to GitHub Pages
46 | id: deployment
47 | uses: actions/deploy-pages@v4
48 |
49 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | .direnv
3 | *result*
4 | *.qcow2
5 | node_modules
6 | .astro
7 | dist
8 | cache
9 |
--------------------------------------------------------------------------------
/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 4
4 |
5 | [[package]]
6 | name = "activation-manager"
7 | version = "0.1.0"
8 | dependencies = [
9 | "base16",
10 | "clap",
11 | "color-eyre",
12 | "eyre",
13 | "mlua",
14 | "once_cell",
15 | "owo-colors 4.1.0",
16 | "serde",
17 | "sha2",
18 | "tracing",
19 | "tracing-subscriber",
20 | ]
21 |
22 | [[package]]
23 | name = "addr2line"
24 | version = "0.21.0"
25 | source = "registry+https://github.com/rust-lang/crates.io-index"
26 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
27 | dependencies = [
28 | "gimli",
29 | ]
30 |
31 | [[package]]
32 | name = "adler"
33 | version = "1.0.2"
34 | source = "registry+https://github.com/rust-lang/crates.io-index"
35 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
36 |
37 | [[package]]
38 | name = "aho-corasick"
39 | version = "1.1.3"
40 | source = "registry+https://github.com/rust-lang/crates.io-index"
41 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
42 | dependencies = [
43 | "memchr",
44 | ]
45 |
46 | [[package]]
47 | name = "anstream"
48 | version = "0.6.18"
49 | source = "registry+https://github.com/rust-lang/crates.io-index"
50 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
51 | dependencies = [
52 | "anstyle",
53 | "anstyle-parse",
54 | "anstyle-query",
55 | "anstyle-wincon",
56 | "colorchoice",
57 | "is_terminal_polyfill",
58 | "utf8parse",
59 | ]
60 |
61 | [[package]]
62 | name = "anstyle"
63 | version = "1.0.10"
64 | source = "registry+https://github.com/rust-lang/crates.io-index"
65 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
66 |
67 | [[package]]
68 | name = "anstyle-parse"
69 | version = "0.2.6"
70 | source = "registry+https://github.com/rust-lang/crates.io-index"
71 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
72 | dependencies = [
73 | "utf8parse",
74 | ]
75 |
76 | [[package]]
77 | name = "anstyle-query"
78 | version = "1.1.2"
79 | source = "registry+https://github.com/rust-lang/crates.io-index"
80 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
81 | dependencies = [
82 | "windows-sys",
83 | ]
84 |
85 | [[package]]
86 | name = "anstyle-wincon"
87 | version = "3.0.7"
88 | source = "registry+https://github.com/rust-lang/crates.io-index"
89 | checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
90 | dependencies = [
91 | "anstyle",
92 | "once_cell",
93 | "windows-sys",
94 | ]
95 |
96 | [[package]]
97 | name = "autocfg"
98 | version = "1.4.0"
99 | source = "registry+https://github.com/rust-lang/crates.io-index"
100 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
101 |
102 | [[package]]
103 | name = "backtrace"
104 | version = "0.3.71"
105 | source = "registry+https://github.com/rust-lang/crates.io-index"
106 | checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d"
107 | dependencies = [
108 | "addr2line",
109 | "cc",
110 | "cfg-if",
111 | "libc",
112 | "miniz_oxide",
113 | "object",
114 | "rustc-demangle",
115 | ]
116 |
117 | [[package]]
118 | name = "base16"
119 | version = "0.2.1"
120 | source = "registry+https://github.com/rust-lang/crates.io-index"
121 | checksum = "d27c3610c36aee21ce8ac510e6224498de4228ad772a171ed65643a24693a5a8"
122 |
123 | [[package]]
124 | name = "bitflags"
125 | version = "2.8.0"
126 | source = "registry+https://github.com/rust-lang/crates.io-index"
127 | checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
128 |
129 | [[package]]
130 | name = "block-buffer"
131 | version = "0.10.4"
132 | source = "registry+https://github.com/rust-lang/crates.io-index"
133 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
134 | dependencies = [
135 | "generic-array",
136 | ]
137 |
138 | [[package]]
139 | name = "bstr"
140 | version = "1.11.3"
141 | source = "registry+https://github.com/rust-lang/crates.io-index"
142 | checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0"
143 | dependencies = [
144 | "memchr",
145 | "serde",
146 | ]
147 |
148 | [[package]]
149 | name = "cc"
150 | version = "1.2.13"
151 | source = "registry+https://github.com/rust-lang/crates.io-index"
152 | checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda"
153 | dependencies = [
154 | "shlex",
155 | ]
156 |
157 | [[package]]
158 | name = "cfg-if"
159 | version = "1.0.0"
160 | source = "registry+https://github.com/rust-lang/crates.io-index"
161 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
162 |
163 | [[package]]
164 | name = "clap"
165 | version = "4.5.28"
166 | source = "registry+https://github.com/rust-lang/crates.io-index"
167 | checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff"
168 | dependencies = [
169 | "clap_builder",
170 | "clap_derive",
171 | ]
172 |
173 | [[package]]
174 | name = "clap_builder"
175 | version = "4.5.27"
176 | source = "registry+https://github.com/rust-lang/crates.io-index"
177 | checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7"
178 | dependencies = [
179 | "anstream",
180 | "anstyle",
181 | "clap_lex",
182 | "strsim",
183 | ]
184 |
185 | [[package]]
186 | name = "clap_derive"
187 | version = "4.5.28"
188 | source = "registry+https://github.com/rust-lang/crates.io-index"
189 | checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
190 | dependencies = [
191 | "heck",
192 | "proc-macro2",
193 | "quote",
194 | "syn",
195 | ]
196 |
197 | [[package]]
198 | name = "clap_lex"
199 | version = "0.7.4"
200 | source = "registry+https://github.com/rust-lang/crates.io-index"
201 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
202 |
203 | [[package]]
204 | name = "color-eyre"
205 | version = "0.6.3"
206 | source = "registry+https://github.com/rust-lang/crates.io-index"
207 | checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5"
208 | dependencies = [
209 | "backtrace",
210 | "color-spantrace",
211 | "eyre",
212 | "indenter",
213 | "once_cell",
214 | "owo-colors 3.5.0",
215 | "tracing-error",
216 | ]
217 |
218 | [[package]]
219 | name = "color-spantrace"
220 | version = "0.2.1"
221 | source = "registry+https://github.com/rust-lang/crates.io-index"
222 | checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2"
223 | dependencies = [
224 | "once_cell",
225 | "owo-colors 3.5.0",
226 | "tracing-core",
227 | "tracing-error",
228 | ]
229 |
230 | [[package]]
231 | name = "colorchoice"
232 | version = "1.0.3"
233 | source = "registry+https://github.com/rust-lang/crates.io-index"
234 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
235 |
236 | [[package]]
237 | name = "cpufeatures"
238 | version = "0.2.17"
239 | source = "registry+https://github.com/rust-lang/crates.io-index"
240 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
241 | dependencies = [
242 | "libc",
243 | ]
244 |
245 | [[package]]
246 | name = "crypto-common"
247 | version = "0.1.6"
248 | source = "registry+https://github.com/rust-lang/crates.io-index"
249 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
250 | dependencies = [
251 | "generic-array",
252 | "typenum",
253 | ]
254 |
255 | [[package]]
256 | name = "digest"
257 | version = "0.10.7"
258 | source = "registry+https://github.com/rust-lang/crates.io-index"
259 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
260 | dependencies = [
261 | "block-buffer",
262 | "crypto-common",
263 | ]
264 |
265 | [[package]]
266 | name = "either"
267 | version = "1.13.0"
268 | source = "registry+https://github.com/rust-lang/crates.io-index"
269 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
270 |
271 | [[package]]
272 | name = "erased-serde"
273 | version = "0.4.5"
274 | source = "registry+https://github.com/rust-lang/crates.io-index"
275 | checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d"
276 | dependencies = [
277 | "serde",
278 | "typeid",
279 | ]
280 |
281 | [[package]]
282 | name = "eyre"
283 | version = "0.6.12"
284 | source = "registry+https://github.com/rust-lang/crates.io-index"
285 | checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec"
286 | dependencies = [
287 | "indenter",
288 | "once_cell",
289 | ]
290 |
291 | [[package]]
292 | name = "generic-array"
293 | version = "0.14.7"
294 | source = "registry+https://github.com/rust-lang/crates.io-index"
295 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
296 | dependencies = [
297 | "typenum",
298 | "version_check",
299 | ]
300 |
301 | [[package]]
302 | name = "gimli"
303 | version = "0.28.1"
304 | source = "registry+https://github.com/rust-lang/crates.io-index"
305 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
306 |
307 | [[package]]
308 | name = "heck"
309 | version = "0.5.0"
310 | source = "registry+https://github.com/rust-lang/crates.io-index"
311 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
312 |
313 | [[package]]
314 | name = "indenter"
315 | version = "0.3.3"
316 | source = "registry+https://github.com/rust-lang/crates.io-index"
317 | checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
318 |
319 | [[package]]
320 | name = "is_terminal_polyfill"
321 | version = "1.70.1"
322 | source = "registry+https://github.com/rust-lang/crates.io-index"
323 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
324 |
325 | [[package]]
326 | name = "lazy_static"
327 | version = "1.5.0"
328 | source = "registry+https://github.com/rust-lang/crates.io-index"
329 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
330 |
331 | [[package]]
332 | name = "libc"
333 | version = "0.2.169"
334 | source = "registry+https://github.com/rust-lang/crates.io-index"
335 | checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
336 |
337 | [[package]]
338 | name = "lock_api"
339 | version = "0.4.12"
340 | source = "registry+https://github.com/rust-lang/crates.io-index"
341 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
342 | dependencies = [
343 | "autocfg",
344 | "scopeguard",
345 | ]
346 |
347 | [[package]]
348 | name = "log"
349 | version = "0.4.25"
350 | source = "registry+https://github.com/rust-lang/crates.io-index"
351 | checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f"
352 |
353 | [[package]]
354 | name = "matchers"
355 | version = "0.1.0"
356 | source = "registry+https://github.com/rust-lang/crates.io-index"
357 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
358 | dependencies = [
359 | "regex-automata 0.1.10",
360 | ]
361 |
362 | [[package]]
363 | name = "memchr"
364 | version = "2.7.4"
365 | source = "registry+https://github.com/rust-lang/crates.io-index"
366 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
367 |
368 | [[package]]
369 | name = "miniz_oxide"
370 | version = "0.7.4"
371 | source = "registry+https://github.com/rust-lang/crates.io-index"
372 | checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
373 | dependencies = [
374 | "adler",
375 | ]
376 |
377 | [[package]]
378 | name = "mlua"
379 | version = "0.10.3"
380 | source = "registry+https://github.com/rust-lang/crates.io-index"
381 | checksum = "d3f763c1041eff92ffb5d7169968a327e1ed2ebfe425dac0ee5a35f29082534b"
382 | dependencies = [
383 | "bstr",
384 | "either",
385 | "erased-serde",
386 | "mlua-sys",
387 | "num-traits",
388 | "parking_lot",
389 | "rustc-hash",
390 | "serde",
391 | "serde-value",
392 | ]
393 |
394 | [[package]]
395 | name = "mlua-sys"
396 | version = "0.6.7"
397 | source = "registry+https://github.com/rust-lang/crates.io-index"
398 | checksum = "1901c1a635a22fe9250ffcc4fcc937c16b47c2e9e71adba8784af8bca1f69594"
399 | dependencies = [
400 | "cc",
401 | "cfg-if",
402 | "pkg-config",
403 | ]
404 |
405 | [[package]]
406 | name = "nu-ansi-term"
407 | version = "0.46.0"
408 | source = "registry+https://github.com/rust-lang/crates.io-index"
409 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
410 | dependencies = [
411 | "overload",
412 | "winapi",
413 | ]
414 |
415 | [[package]]
416 | name = "num-traits"
417 | version = "0.2.19"
418 | source = "registry+https://github.com/rust-lang/crates.io-index"
419 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
420 | dependencies = [
421 | "autocfg",
422 | ]
423 |
424 | [[package]]
425 | name = "object"
426 | version = "0.32.2"
427 | source = "registry+https://github.com/rust-lang/crates.io-index"
428 | checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
429 | dependencies = [
430 | "memchr",
431 | ]
432 |
433 | [[package]]
434 | name = "once_cell"
435 | version = "1.20.3"
436 | source = "registry+https://github.com/rust-lang/crates.io-index"
437 | checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
438 |
439 | [[package]]
440 | name = "ordered-float"
441 | version = "2.10.1"
442 | source = "registry+https://github.com/rust-lang/crates.io-index"
443 | checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
444 | dependencies = [
445 | "num-traits",
446 | ]
447 |
448 | [[package]]
449 | name = "overload"
450 | version = "0.1.1"
451 | source = "registry+https://github.com/rust-lang/crates.io-index"
452 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
453 |
454 | [[package]]
455 | name = "owo-colors"
456 | version = "3.5.0"
457 | source = "registry+https://github.com/rust-lang/crates.io-index"
458 | checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
459 |
460 | [[package]]
461 | name = "owo-colors"
462 | version = "4.1.0"
463 | source = "registry+https://github.com/rust-lang/crates.io-index"
464 | checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56"
465 |
466 | [[package]]
467 | name = "parking_lot"
468 | version = "0.12.3"
469 | source = "registry+https://github.com/rust-lang/crates.io-index"
470 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
471 | dependencies = [
472 | "lock_api",
473 | "parking_lot_core",
474 | ]
475 |
476 | [[package]]
477 | name = "parking_lot_core"
478 | version = "0.9.10"
479 | source = "registry+https://github.com/rust-lang/crates.io-index"
480 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
481 | dependencies = [
482 | "cfg-if",
483 | "libc",
484 | "redox_syscall",
485 | "smallvec",
486 | "windows-targets",
487 | ]
488 |
489 | [[package]]
490 | name = "pin-project-lite"
491 | version = "0.2.16"
492 | source = "registry+https://github.com/rust-lang/crates.io-index"
493 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
494 |
495 | [[package]]
496 | name = "pkg-config"
497 | version = "0.3.31"
498 | source = "registry+https://github.com/rust-lang/crates.io-index"
499 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
500 |
501 | [[package]]
502 | name = "proc-macro2"
503 | version = "1.0.93"
504 | source = "registry+https://github.com/rust-lang/crates.io-index"
505 | checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
506 | dependencies = [
507 | "unicode-ident",
508 | ]
509 |
510 | [[package]]
511 | name = "quote"
512 | version = "1.0.38"
513 | source = "registry+https://github.com/rust-lang/crates.io-index"
514 | checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc"
515 | dependencies = [
516 | "proc-macro2",
517 | ]
518 |
519 | [[package]]
520 | name = "redox_syscall"
521 | version = "0.5.8"
522 | source = "registry+https://github.com/rust-lang/crates.io-index"
523 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
524 | dependencies = [
525 | "bitflags",
526 | ]
527 |
528 | [[package]]
529 | name = "regex"
530 | version = "1.11.1"
531 | source = "registry+https://github.com/rust-lang/crates.io-index"
532 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
533 | dependencies = [
534 | "aho-corasick",
535 | "memchr",
536 | "regex-automata 0.4.9",
537 | "regex-syntax 0.8.5",
538 | ]
539 |
540 | [[package]]
541 | name = "regex-automata"
542 | version = "0.1.10"
543 | source = "registry+https://github.com/rust-lang/crates.io-index"
544 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
545 | dependencies = [
546 | "regex-syntax 0.6.29",
547 | ]
548 |
549 | [[package]]
550 | name = "regex-automata"
551 | version = "0.4.9"
552 | source = "registry+https://github.com/rust-lang/crates.io-index"
553 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
554 | dependencies = [
555 | "aho-corasick",
556 | "memchr",
557 | "regex-syntax 0.8.5",
558 | ]
559 |
560 | [[package]]
561 | name = "regex-syntax"
562 | version = "0.6.29"
563 | source = "registry+https://github.com/rust-lang/crates.io-index"
564 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
565 |
566 | [[package]]
567 | name = "regex-syntax"
568 | version = "0.8.5"
569 | source = "registry+https://github.com/rust-lang/crates.io-index"
570 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
571 |
572 | [[package]]
573 | name = "rustc-demangle"
574 | version = "0.1.24"
575 | source = "registry+https://github.com/rust-lang/crates.io-index"
576 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
577 |
578 | [[package]]
579 | name = "rustc-hash"
580 | version = "2.1.1"
581 | source = "registry+https://github.com/rust-lang/crates.io-index"
582 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
583 |
584 | [[package]]
585 | name = "scopeguard"
586 | version = "1.2.0"
587 | source = "registry+https://github.com/rust-lang/crates.io-index"
588 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
589 |
590 | [[package]]
591 | name = "serde"
592 | version = "1.0.217"
593 | source = "registry+https://github.com/rust-lang/crates.io-index"
594 | checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70"
595 | dependencies = [
596 | "serde_derive",
597 | ]
598 |
599 | [[package]]
600 | name = "serde-value"
601 | version = "0.7.0"
602 | source = "registry+https://github.com/rust-lang/crates.io-index"
603 | checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
604 | dependencies = [
605 | "ordered-float",
606 | "serde",
607 | ]
608 |
609 | [[package]]
610 | name = "serde_derive"
611 | version = "1.0.217"
612 | source = "registry+https://github.com/rust-lang/crates.io-index"
613 | checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
614 | dependencies = [
615 | "proc-macro2",
616 | "quote",
617 | "syn",
618 | ]
619 |
620 | [[package]]
621 | name = "sha2"
622 | version = "0.10.8"
623 | source = "registry+https://github.com/rust-lang/crates.io-index"
624 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
625 | dependencies = [
626 | "cfg-if",
627 | "cpufeatures",
628 | "digest",
629 | ]
630 |
631 | [[package]]
632 | name = "sharded-slab"
633 | version = "0.1.7"
634 | source = "registry+https://github.com/rust-lang/crates.io-index"
635 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
636 | dependencies = [
637 | "lazy_static",
638 | ]
639 |
640 | [[package]]
641 | name = "shlex"
642 | version = "1.3.0"
643 | source = "registry+https://github.com/rust-lang/crates.io-index"
644 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
645 |
646 | [[package]]
647 | name = "smallvec"
648 | version = "1.13.2"
649 | source = "registry+https://github.com/rust-lang/crates.io-index"
650 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
651 |
652 | [[package]]
653 | name = "strsim"
654 | version = "0.11.1"
655 | source = "registry+https://github.com/rust-lang/crates.io-index"
656 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
657 |
658 | [[package]]
659 | name = "syn"
660 | version = "2.0.98"
661 | source = "registry+https://github.com/rust-lang/crates.io-index"
662 | checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
663 | dependencies = [
664 | "proc-macro2",
665 | "quote",
666 | "unicode-ident",
667 | ]
668 |
669 | [[package]]
670 | name = "thread_local"
671 | version = "1.1.8"
672 | source = "registry+https://github.com/rust-lang/crates.io-index"
673 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
674 | dependencies = [
675 | "cfg-if",
676 | "once_cell",
677 | ]
678 |
679 | [[package]]
680 | name = "tracing"
681 | version = "0.1.41"
682 | source = "registry+https://github.com/rust-lang/crates.io-index"
683 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
684 | dependencies = [
685 | "pin-project-lite",
686 | "tracing-attributes",
687 | "tracing-core",
688 | ]
689 |
690 | [[package]]
691 | name = "tracing-attributes"
692 | version = "0.1.28"
693 | source = "registry+https://github.com/rust-lang/crates.io-index"
694 | checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
695 | dependencies = [
696 | "proc-macro2",
697 | "quote",
698 | "syn",
699 | ]
700 |
701 | [[package]]
702 | name = "tracing-core"
703 | version = "0.1.33"
704 | source = "registry+https://github.com/rust-lang/crates.io-index"
705 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
706 | dependencies = [
707 | "once_cell",
708 | "valuable",
709 | ]
710 |
711 | [[package]]
712 | name = "tracing-error"
713 | version = "0.2.1"
714 | source = "registry+https://github.com/rust-lang/crates.io-index"
715 | checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db"
716 | dependencies = [
717 | "tracing",
718 | "tracing-subscriber",
719 | ]
720 |
721 | [[package]]
722 | name = "tracing-log"
723 | version = "0.2.0"
724 | source = "registry+https://github.com/rust-lang/crates.io-index"
725 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
726 | dependencies = [
727 | "log",
728 | "once_cell",
729 | "tracing-core",
730 | ]
731 |
732 | [[package]]
733 | name = "tracing-subscriber"
734 | version = "0.3.19"
735 | source = "registry+https://github.com/rust-lang/crates.io-index"
736 | checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
737 | dependencies = [
738 | "matchers",
739 | "nu-ansi-term",
740 | "once_cell",
741 | "regex",
742 | "sharded-slab",
743 | "smallvec",
744 | "thread_local",
745 | "tracing",
746 | "tracing-core",
747 | "tracing-log",
748 | ]
749 |
750 | [[package]]
751 | name = "typeid"
752 | version = "1.0.2"
753 | source = "registry+https://github.com/rust-lang/crates.io-index"
754 | checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e"
755 |
756 | [[package]]
757 | name = "typenum"
758 | version = "1.17.0"
759 | source = "registry+https://github.com/rust-lang/crates.io-index"
760 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
761 |
762 | [[package]]
763 | name = "unicode-ident"
764 | version = "1.0.16"
765 | source = "registry+https://github.com/rust-lang/crates.io-index"
766 | checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034"
767 |
768 | [[package]]
769 | name = "utf8parse"
770 | version = "0.2.2"
771 | source = "registry+https://github.com/rust-lang/crates.io-index"
772 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
773 |
774 | [[package]]
775 | name = "valuable"
776 | version = "0.1.1"
777 | source = "registry+https://github.com/rust-lang/crates.io-index"
778 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
779 |
780 | [[package]]
781 | name = "version_check"
782 | version = "0.9.5"
783 | source = "registry+https://github.com/rust-lang/crates.io-index"
784 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
785 |
786 | [[package]]
787 | name = "winapi"
788 | version = "0.3.9"
789 | source = "registry+https://github.com/rust-lang/crates.io-index"
790 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
791 | dependencies = [
792 | "winapi-i686-pc-windows-gnu",
793 | "winapi-x86_64-pc-windows-gnu",
794 | ]
795 |
796 | [[package]]
797 | name = "winapi-i686-pc-windows-gnu"
798 | version = "0.4.0"
799 | source = "registry+https://github.com/rust-lang/crates.io-index"
800 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
801 |
802 | [[package]]
803 | name = "winapi-x86_64-pc-windows-gnu"
804 | version = "0.4.0"
805 | source = "registry+https://github.com/rust-lang/crates.io-index"
806 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
807 |
808 | [[package]]
809 | name = "windows-sys"
810 | version = "0.59.0"
811 | source = "registry+https://github.com/rust-lang/crates.io-index"
812 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
813 | dependencies = [
814 | "windows-targets",
815 | ]
816 |
817 | [[package]]
818 | name = "windows-targets"
819 | version = "0.52.6"
820 | source = "registry+https://github.com/rust-lang/crates.io-index"
821 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
822 | dependencies = [
823 | "windows_aarch64_gnullvm",
824 | "windows_aarch64_msvc",
825 | "windows_i686_gnu",
826 | "windows_i686_gnullvm",
827 | "windows_i686_msvc",
828 | "windows_x86_64_gnu",
829 | "windows_x86_64_gnullvm",
830 | "windows_x86_64_msvc",
831 | ]
832 |
833 | [[package]]
834 | name = "windows_aarch64_gnullvm"
835 | version = "0.52.6"
836 | source = "registry+https://github.com/rust-lang/crates.io-index"
837 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
838 |
839 | [[package]]
840 | name = "windows_aarch64_msvc"
841 | version = "0.52.6"
842 | source = "registry+https://github.com/rust-lang/crates.io-index"
843 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
844 |
845 | [[package]]
846 | name = "windows_i686_gnu"
847 | version = "0.52.6"
848 | source = "registry+https://github.com/rust-lang/crates.io-index"
849 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
850 |
851 | [[package]]
852 | name = "windows_i686_gnullvm"
853 | version = "0.52.6"
854 | source = "registry+https://github.com/rust-lang/crates.io-index"
855 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
856 |
857 | [[package]]
858 | name = "windows_i686_msvc"
859 | version = "0.52.6"
860 | source = "registry+https://github.com/rust-lang/crates.io-index"
861 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
862 |
863 | [[package]]
864 | name = "windows_x86_64_gnu"
865 | version = "0.52.6"
866 | source = "registry+https://github.com/rust-lang/crates.io-index"
867 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
868 |
869 | [[package]]
870 | name = "windows_x86_64_gnullvm"
871 | version = "0.52.6"
872 | source = "registry+https://github.com/rust-lang/crates.io-index"
873 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
874 |
875 | [[package]]
876 | name = "windows_x86_64_msvc"
877 | version = "0.52.6"
878 | source = "registry+https://github.com/rust-lang/crates.io-index"
879 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
880 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "activation-manager"
3 | version = "0.1.0"
4 | edition = "2021"
5 |
6 | [dependencies]
7 | base16 = "0.2.1"
8 | clap = { version = "4.5.28", features = ["derive"] }
9 | color-eyre = "0.6.3"
10 | eyre = "0.6.12"
11 | mlua = { version = "0.10.3", features = ["lua54", "error-send", "serialize"] }
12 | once_cell = "1.20.3"
13 | owo-colors = "4.1.0"
14 | serde = { version = "1.0.217", features = ["derive"] }
15 | sha2 = "0.10.8"
16 | tracing = "0.1.41"
17 | tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
18 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Development has moved to https://github.com/viperML/nix-maid
2 |
--------------------------------------------------------------------------------
/doc/.vitepress/config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vitepress'
2 |
3 | // https://vitepress.dev/reference/site-config
4 | export default defineConfig({
5 | title: "Activation-Manager",
6 | description: "A VitePress Site",
7 | base: "/activation-manager/",
8 | themeConfig: {
9 | // https://vitepress.dev/reference/default-theme-config
10 | nav: [
11 | // { text: 'Home', link: '/' },
12 | // { text: 'Examples', link: '/markdown-examples' }
13 | ],
14 |
15 | sidebar: [
16 | {
17 | text: 'Examples',
18 | items: [
19 | { text: 'Options', link: '/options' },
20 | ]
21 | }
22 | ],
23 |
24 | socialLinks: [
25 | { icon: 'github', link: 'https://github.com/viperML/activation-manager' }
26 | ]
27 | },
28 | vite: {
29 | ssr: {
30 | noExternal: 'easy-nix-documentation',
31 | }
32 | }
33 | })
34 |
--------------------------------------------------------------------------------
/doc/am.data.js:
--------------------------------------------------------------------------------
1 | import { loadOptions, stripNixStore } from "easy-nix-documentation/loader"
2 | export default {
3 | async load() {
4 | const optionsJSON = process.env.OPTIONS_JSON
5 | if (optionsJSON === undefined) {
6 | console.log("OPTIONS_JSON is undefined");
7 | exit(1)
8 | }
9 | return await loadOptions(optionsJSON, {
10 | mapDeclarations: declaration => {
11 | const relDecl = stripNixStore(declaration);
12 | return `<activation-manager/${relDecl}>`
13 | },
14 | })
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/doc/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | # https://vitepress.dev/reference/default-theme-home-page
3 | layout: home
4 |
5 | hero:
6 | name: "Activation-Manager"
7 | text: "Post-modern configuration management"
8 | # tagline: My great project tagline
9 | actions:
10 | - theme: brand
11 | text: Options
12 | link: /options
13 | - theme: alt
14 | text: GitHub
15 | link: https://github.com/viperML/activation-manager
16 |
17 | # features:
18 | # - title: Feature A
19 | # details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
20 | # - title: Feature B
21 | # details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
22 | # - title: Feature C
23 | # details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
24 | ---
25 |
26 |
--------------------------------------------------------------------------------
/doc/options.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Options
3 | ---
4 |
5 | # {{ $frontmatter.title }}
6 |
7 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/flake.lock:
--------------------------------------------------------------------------------
1 | {
2 | "nodes": {
3 | "nixpkgs": {
4 | "locked": {
5 | "lastModified": 1739446958,
6 | "narHash": "sha256-+/bYK3DbPxMIvSL4zArkMX0LQvS7rzBKXnDXLfKyRVc=",
7 | "owner": "NixOS",
8 | "repo": "nixpkgs",
9 | "rev": "2ff53fe64443980e139eaa286017f53f88336dd0",
10 | "type": "github"
11 | },
12 | "original": {
13 | "owner": "NixOS",
14 | "ref": "nixos-unstable",
15 | "repo": "nixpkgs",
16 | "type": "github"
17 | }
18 | },
19 | "root": {
20 | "inputs": {
21 | "nixpkgs": "nixpkgs"
22 | }
23 | }
24 | },
25 | "root": "root",
26 | "version": 7
27 | }
28 |
--------------------------------------------------------------------------------
/flake.nix:
--------------------------------------------------------------------------------
1 | {
2 | inputs = {
3 | nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";
4 | };
5 |
6 | outputs =
7 | { self, nixpkgs }:
8 | let
9 | forAllSystems =
10 | function:
11 | nixpkgs.lib.genAttrs [
12 | "x86_64-linux"
13 | "aarch64-linux"
14 | ] (system: function nixpkgs.legacyPackages.${system});
15 | in
16 | {
17 | lib = {
18 | home = import ./nix/home/default.nix;
19 | homeBundle = args: (self.lib.home args).config.build.bundle;
20 | };
21 |
22 | nixosModules.home = ./nix/home/nixos-module.nix;
23 |
24 | packages = forAllSystems (pkgs: {
25 | default = pkgs.callPackage ./nix/package.nix { };
26 | optionsJSON =
27 | (pkgs.nixosOptionsDoc {
28 | options =
29 | (self.lib.home {
30 | inherit pkgs;
31 | }).options;
32 | }).optionsJSON;
33 | });
34 |
35 | devShells = forAllSystems (pkgs: {
36 | default =
37 | with pkgs;
38 | mkShell {
39 | packages = [
40 | pkgs.cargo
41 | pkgs.rustc
42 | pkgs.clippy
43 |
44 | pkgs.rust-analyzer
45 | pkgs.rustfmt
46 | pkgs.yaml-language-server
47 |
48 | # If the dependencies need system libs, you usually need pkg-config + the lib
49 | pkgs.pkg-config
50 | lua54Packages.lua
51 | lua-language-server
52 |
53 | (pkgs.nodejs.override { enableNpm = false; })
54 | pkgs.pnpm
55 | ];
56 | env = {
57 | RUST_BACKTRACE = "full";
58 | RUST_SRC_PATH = "${rustPlatform.rustLibSrc}";
59 | OPTIONS_JSON = self.packages.${system}.optionsJSON;
60 | };
61 | };
62 | });
63 | };
64 | }
65 |
--------------------------------------------------------------------------------
/nix/home/core.nix:
--------------------------------------------------------------------------------
1 | {
2 | pkgs,
3 | config,
4 | options,
5 | lib,
6 | ...
7 | }:
8 | let
9 | inherit (lib) mkOption types;
10 |
11 | fileSubmodule =
12 | { name, ... }:
13 | {
14 | options = {
15 | target = mkOption {
16 | type = types.str;
17 | description = ''
18 | File that the link will point to.
19 | '';
20 | };
21 | link = mkOption {
22 | type = types.str;
23 | default = name;
24 | description = ''
25 | Location of the link.
26 | '';
27 | };
28 | };
29 | };
30 | in
31 | {
32 | options = {
33 | build = {
34 | package = mkOption {
35 | type = types.package;
36 | default = pkgs.callPackage ../package.nix { };
37 | description = "FIXME";
38 | };
39 |
40 | manifest = mkOption {
41 | type = types.package;
42 | description = "FIXME";
43 | };
44 |
45 | bundle = mkOption {
46 | type = types.package;
47 | description = "FIXME";
48 | };
49 |
50 | optionsDoc = mkOption {
51 | type = types.attrsOf types.package;
52 | visible = false;
53 | default = pkgs.nixosOptionsDoc {
54 | inherit options;
55 | };
56 | readOnly = true;
57 | description = "FIXME";
58 | };
59 | };
60 |
61 | home = {
62 | file = mkOption {
63 | default = { };
64 | type = types.attrsOf (types.submodule fileSubmodule);
65 | description = ''
66 | Create a symlink declaratively by specifying its target link and its location.
67 | '';
68 | };
69 | };
70 |
71 | dconf = {
72 | settings = mkOption {
73 | default = { };
74 | type = types.attrsOf (types.anything);
75 | example = {
76 | "/org/gnome/desktop/interface/color-scheme" = "prefer-dark";
77 | };
78 | description = ''
79 | Pairs of dconf key path and its value.
80 | '';
81 | };
82 | };
83 | };
84 |
85 | config = {
86 | build.manifest =
87 | pkgs.writeText "manifest.lua"
88 | # lua
89 | ''
90 | local am = require("am")
91 | local os = require("os")
92 | local home = os.getenv("HOME")
93 |
94 | local static = home .. "/.local/state/activation-manager/static"
95 | local static_new = static .. "-" .. os.time()
96 |
97 | ${
98 | config.home.file
99 | |> builtins.attrValues
100 | |> (map (node:
101 | # lua
102 | ''
103 | am.file {
104 | link = home .. "/${node.link}",
105 | target = static .. "/${node.link}",
106 | }
107 |
108 | am.file {
109 | link = static_new .. "/${node.link}",
110 | target = home .. "/${node.target}",
111 | }
112 | ''))
113 | |> builtins.concatStringsSep "\n"
114 | }
115 |
116 | am.file {
117 | link = static,
118 | target = static_new,
119 | }
120 |
121 | ${
122 | config.dconf.settings
123 | |> lib.attrsToList
124 | |> map (
125 | { name, value }:
126 | # lua
127 | "am.dconf ${
128 | lib.generators.toLua { } {
129 | inherit value;
130 | key = name;
131 | }
132 | }"
133 | )
134 | |> builtins.concatStringsSep "\n"
135 | }
136 | '';
137 |
138 | build.bundle =
139 | pkgs.runCommandLocal "am-bundle"
140 | {
141 | nativeBuildInputs = [ pkgs.makeWrapper ];
142 | meta.mainProgram = "activate";
143 | }
144 | ''
145 | mkdir -p $out/bin
146 | makeWrapper ${lib.getExe config.build.package} $out/bin/activate \
147 | --append-flags ${config.build.manifest}
148 | '';
149 | };
150 |
151 | }
152 |
--------------------------------------------------------------------------------
/nix/home/default.nix:
--------------------------------------------------------------------------------
1 | {
2 | pkgs ? import { },
3 | lib ? pkgs.lib,
4 | modules ? [ ],
5 | ...
6 | }:
7 | lib.evalModules {
8 | modules = [ ./core.nix ] ++ modules;
9 | specialArgs = { inherit pkgs; };
10 | }
11 |
--------------------------------------------------------------------------------
/nix/home/nixos-module.nix:
--------------------------------------------------------------------------------
1 | {
2 | pkgs,
3 | lib,
4 | ...
5 | }:
6 | let
7 | inherit (lib) mkOption types;
8 |
9 | in
10 | {
11 |
12 | options.activation-manager = {
13 | mkHome = mkOption {
14 | type = types.functionTo types.package;
15 | readOnly = true;
16 | };
17 | };
18 |
19 | config = {
20 | systemd.user.services."activation-manager" = {
21 | wantedBy = [ "default.target" ];
22 | script = ''
23 | activate="/etc/profiles/per-user/$USER/bin/activate"
24 | if [[ -f "$activate" ]]; then
25 | exec "$activate"
26 | else
27 | echo ":: Activation-manager not installed for this user"
28 | fi
29 | '';
30 | };
31 |
32 | activation-manager.mkHome =
33 | module:
34 | (import ./default.nix {
35 | inherit pkgs lib;
36 | modules = [ module ];
37 | }).config.build.bundle;
38 | };
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/nix/package.nix:
--------------------------------------------------------------------------------
1 | {
2 | rustPlatform,
3 | lib,
4 | pkg-config,
5 | lua54Packages,
6 | }:
7 | let
8 | cargoToml = builtins.fromTOML (builtins.readFile ../Cargo.toml);
9 | in
10 | rustPlatform.buildRustPackage {
11 | pname = cargoToml.package.name;
12 | version = cargoToml.package.version;
13 |
14 | src = lib.fileset.toSource {
15 | root = ../.;
16 | fileset = lib.fileset.intersection (lib.fileset.fromSource (lib.sources.cleanSource ../.)) (
17 | lib.fileset.unions [
18 | ../src
19 | ../Cargo.toml
20 | ../Cargo.lock
21 | ]
22 | );
23 | };
24 |
25 | cargoLock.lockFile = ../Cargo.lock;
26 |
27 | nativeBuildInputs = [
28 | pkg-config
29 | ];
30 |
31 | buildInputs = [
32 | lua54Packages.lua
33 | ];
34 |
35 | meta.mainProgram = cargoToml.package.name;
36 | }
37 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "activation-manager-documentation",
3 | "type": "module",
4 | "scripts": {
5 | "build": "vitepress build doc",
6 | "dev": "vitepress dev doc"
7 | },
8 | "packageManager": "pnpm@10.4.1",
9 | "devDependencies": {
10 | "easy-nix-documentation": "^1.0.7",
11 | "vitepress": "^1.6.3"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | devDependencies:
11 | easy-nix-documentation:
12 | specifier: ^1.0.7
13 | version: 1.0.7(@algolia/client-search@5.20.4)(postcss@8.5.3)(search-insights@2.17.3)
14 | vitepress:
15 | specifier: ^1.6.3
16 | version: 1.6.3(@algolia/client-search@5.20.4)(@types/node@22.13.10)(postcss@8.5.3)(search-insights@2.17.3)
17 |
18 | packages:
19 |
20 | '@algolia/autocomplete-core@1.17.7':
21 | resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==}
22 |
23 | '@algolia/autocomplete-plugin-algolia-insights@1.17.7':
24 | resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==}
25 | peerDependencies:
26 | search-insights: '>= 1 < 3'
27 |
28 | '@algolia/autocomplete-preset-algolia@1.17.7':
29 | resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==}
30 | peerDependencies:
31 | '@algolia/client-search': '>= 4.9.1 < 6'
32 | algoliasearch: '>= 4.9.1 < 6'
33 |
34 | '@algolia/autocomplete-shared@1.17.7':
35 | resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==}
36 | peerDependencies:
37 | '@algolia/client-search': '>= 4.9.1 < 6'
38 | algoliasearch: '>= 4.9.1 < 6'
39 |
40 | '@algolia/client-abtesting@5.20.4':
41 | resolution: {integrity: sha512-OZ3Xvvf+k7NMcwmmioIVX+76E/KKtN607NCMNsBEKe+uHqktZ+I5bmi/EVr2m5VF59Gnh9MTlJCdXtBiGjruxw==}
42 | engines: {node: '>= 14.0.0'}
43 |
44 | '@algolia/client-analytics@5.20.4':
45 | resolution: {integrity: sha512-8pM5zQpHonCIBxKmMyBLgQoaSKUNBE5u741VEIjn2ArujolhoKRXempRAlLwEg5hrORKl9XIlit00ff4g6LWvA==}
46 | engines: {node: '>= 14.0.0'}
47 |
48 | '@algolia/client-common@5.20.4':
49 | resolution: {integrity: sha512-OCGa8hKAP6kQKBwi+tu9flTXshz4qeCK5P8J6bI1qq8KYs+/TU1xSotT+E7hO+uyDanGU6dT6soiMSi4A38JgA==}
50 | engines: {node: '>= 14.0.0'}
51 |
52 | '@algolia/client-insights@5.20.4':
53 | resolution: {integrity: sha512-MroyJStJFLf/cYeCbguCRdrA2U6miDVqbi3t9ZGovBWWTef7BZwVQG0mLyInzp4MIjBfwqu3xTrhxsiiOavX3A==}
54 | engines: {node: '>= 14.0.0'}
55 |
56 | '@algolia/client-personalization@5.20.4':
57 | resolution: {integrity: sha512-bVR5sxFfgCQ+G0ZegGVhBqtaDd7jCfr33m5mGuT43U+bH//xeqAHQyIS4abcmRulwqeIAHNm5Yl2J7grT3z//A==}
58 | engines: {node: '>= 14.0.0'}
59 |
60 | '@algolia/client-query-suggestions@5.20.4':
61 | resolution: {integrity: sha512-ZHsV0vceNDR87wIVaz7VjxilwCUCkzbuy4QnqIdnQs3NnC43is7KKbEtKueuNw+YGMdx+wmD5kRI2XKip1R93A==}
62 | engines: {node: '>= 14.0.0'}
63 |
64 | '@algolia/client-search@5.20.4':
65 | resolution: {integrity: sha512-hXM2LpwTzG5kGQSyq3feIijzzl6vkjYPP+LF3ru1relNUIh7fWJ4uYQay2NMNbWX5LWQzF8Vr9qlIA139doQXg==}
66 | engines: {node: '>= 14.0.0'}
67 |
68 | '@algolia/ingestion@1.20.4':
69 | resolution: {integrity: sha512-idAe53XsTlLSSQ7pJcjscUEmc67vEM+VohYkr78Ebfb43vtfKH0ik8ux9OGQpLRNGntaHqpe/lfU5PDRi5/92w==}
70 | engines: {node: '>= 14.0.0'}
71 |
72 | '@algolia/monitoring@1.20.4':
73 | resolution: {integrity: sha512-O6HjdSWtyu5LhHR7gdU83oWbl1vVVRwoTxkENHF61Ar7l9C1Ok91VtnK7RtXB9pJL1kpIMDExwZOT5sEN2Ppfw==}
74 | engines: {node: '>= 14.0.0'}
75 |
76 | '@algolia/recommend@5.20.4':
77 | resolution: {integrity: sha512-p8M78pQjPrN6PudO2TnkWiOJbyp/IPhgCFBW8aZrLshhZpPkV9N4u0YsU/w6OoeYDKSxmXntWQrKYiU1dVRWfg==}
78 | engines: {node: '>= 14.0.0'}
79 |
80 | '@algolia/requester-browser-xhr@5.20.4':
81 | resolution: {integrity: sha512-Y8GThjDVdhFUurZKKDdzAML/LNKOA/BOydEcaFeb/g4Iv4Iq0qQJs6aIbtdsngUU6cu74qH/2P84kr2h16uVvQ==}
82 | engines: {node: '>= 14.0.0'}
83 |
84 | '@algolia/requester-fetch@5.20.4':
85 | resolution: {integrity: sha512-OrAUSrvbFi46U7AxOXkyl9QQiaW21XWpixWmcx3D2S65P/DCIGOVE6K2741ZE+WiKIqp+RSYkyDFj3BiFHzLTg==}
86 | engines: {node: '>= 14.0.0'}
87 |
88 | '@algolia/requester-node-http@5.20.4':
89 | resolution: {integrity: sha512-Jc/bofGBw4P9nBii4oCzCqqusv8DAFFORfUD2Ce1cZk3fvUPk+q/Qnu7i9JpTSHjMc0MWzqApLdq7Nwh1gelLg==}
90 | engines: {node: '>= 14.0.0'}
91 |
92 | '@babel/helper-string-parser@7.25.9':
93 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
94 | engines: {node: '>=6.9.0'}
95 |
96 | '@babel/helper-validator-identifier@7.25.9':
97 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
98 | engines: {node: '>=6.9.0'}
99 |
100 | '@babel/parser@7.26.9':
101 | resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==}
102 | engines: {node: '>=6.0.0'}
103 | hasBin: true
104 |
105 | '@babel/types@7.26.9':
106 | resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==}
107 | engines: {node: '>=6.9.0'}
108 |
109 | '@docsearch/css@3.8.2':
110 | resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==}
111 |
112 | '@docsearch/js@3.8.2':
113 | resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==}
114 |
115 | '@docsearch/react@3.8.2':
116 | resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==}
117 | peerDependencies:
118 | '@types/react': '>= 16.8.0 < 19.0.0'
119 | react: '>= 16.8.0 < 19.0.0'
120 | react-dom: '>= 16.8.0 < 19.0.0'
121 | search-insights: '>= 1 < 3'
122 | peerDependenciesMeta:
123 | '@types/react':
124 | optional: true
125 | react:
126 | optional: true
127 | react-dom:
128 | optional: true
129 | search-insights:
130 | optional: true
131 |
132 | '@esbuild/aix-ppc64@0.21.5':
133 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
134 | engines: {node: '>=12'}
135 | cpu: [ppc64]
136 | os: [aix]
137 |
138 | '@esbuild/android-arm64@0.21.5':
139 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
140 | engines: {node: '>=12'}
141 | cpu: [arm64]
142 | os: [android]
143 |
144 | '@esbuild/android-arm@0.21.5':
145 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
146 | engines: {node: '>=12'}
147 | cpu: [arm]
148 | os: [android]
149 |
150 | '@esbuild/android-x64@0.21.5':
151 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
152 | engines: {node: '>=12'}
153 | cpu: [x64]
154 | os: [android]
155 |
156 | '@esbuild/darwin-arm64@0.21.5':
157 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
158 | engines: {node: '>=12'}
159 | cpu: [arm64]
160 | os: [darwin]
161 |
162 | '@esbuild/darwin-x64@0.21.5':
163 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
164 | engines: {node: '>=12'}
165 | cpu: [x64]
166 | os: [darwin]
167 |
168 | '@esbuild/freebsd-arm64@0.21.5':
169 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
170 | engines: {node: '>=12'}
171 | cpu: [arm64]
172 | os: [freebsd]
173 |
174 | '@esbuild/freebsd-x64@0.21.5':
175 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
176 | engines: {node: '>=12'}
177 | cpu: [x64]
178 | os: [freebsd]
179 |
180 | '@esbuild/linux-arm64@0.21.5':
181 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
182 | engines: {node: '>=12'}
183 | cpu: [arm64]
184 | os: [linux]
185 |
186 | '@esbuild/linux-arm@0.21.5':
187 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
188 | engines: {node: '>=12'}
189 | cpu: [arm]
190 | os: [linux]
191 |
192 | '@esbuild/linux-ia32@0.21.5':
193 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
194 | engines: {node: '>=12'}
195 | cpu: [ia32]
196 | os: [linux]
197 |
198 | '@esbuild/linux-loong64@0.21.5':
199 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
200 | engines: {node: '>=12'}
201 | cpu: [loong64]
202 | os: [linux]
203 |
204 | '@esbuild/linux-mips64el@0.21.5':
205 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
206 | engines: {node: '>=12'}
207 | cpu: [mips64el]
208 | os: [linux]
209 |
210 | '@esbuild/linux-ppc64@0.21.5':
211 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
212 | engines: {node: '>=12'}
213 | cpu: [ppc64]
214 | os: [linux]
215 |
216 | '@esbuild/linux-riscv64@0.21.5':
217 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
218 | engines: {node: '>=12'}
219 | cpu: [riscv64]
220 | os: [linux]
221 |
222 | '@esbuild/linux-s390x@0.21.5':
223 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
224 | engines: {node: '>=12'}
225 | cpu: [s390x]
226 | os: [linux]
227 |
228 | '@esbuild/linux-x64@0.21.5':
229 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
230 | engines: {node: '>=12'}
231 | cpu: [x64]
232 | os: [linux]
233 |
234 | '@esbuild/netbsd-x64@0.21.5':
235 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
236 | engines: {node: '>=12'}
237 | cpu: [x64]
238 | os: [netbsd]
239 |
240 | '@esbuild/openbsd-x64@0.21.5':
241 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
242 | engines: {node: '>=12'}
243 | cpu: [x64]
244 | os: [openbsd]
245 |
246 | '@esbuild/sunos-x64@0.21.5':
247 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
248 | engines: {node: '>=12'}
249 | cpu: [x64]
250 | os: [sunos]
251 |
252 | '@esbuild/win32-arm64@0.21.5':
253 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
254 | engines: {node: '>=12'}
255 | cpu: [arm64]
256 | os: [win32]
257 |
258 | '@esbuild/win32-ia32@0.21.5':
259 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
260 | engines: {node: '>=12'}
261 | cpu: [ia32]
262 | os: [win32]
263 |
264 | '@esbuild/win32-x64@0.21.5':
265 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
266 | engines: {node: '>=12'}
267 | cpu: [x64]
268 | os: [win32]
269 |
270 | '@iconify-json/simple-icons@1.2.27':
271 | resolution: {integrity: sha512-FtZwp/H7ih5rY9FPfDR+k6toOo/cuwpHWY8faNhxLs5O5uW6Q8TeqdNWfjVfgFtrs5tUUzWysjqNGL234v8EMA==}
272 |
273 | '@iconify/types@2.0.0':
274 | resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
275 |
276 | '@jridgewell/sourcemap-codec@1.5.0':
277 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
278 |
279 | '@rollup/rollup-android-arm-eabi@4.35.0':
280 | resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==}
281 | cpu: [arm]
282 | os: [android]
283 |
284 | '@rollup/rollup-android-arm64@4.35.0':
285 | resolution: {integrity: sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==}
286 | cpu: [arm64]
287 | os: [android]
288 |
289 | '@rollup/rollup-darwin-arm64@4.35.0':
290 | resolution: {integrity: sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==}
291 | cpu: [arm64]
292 | os: [darwin]
293 |
294 | '@rollup/rollup-darwin-x64@4.35.0':
295 | resolution: {integrity: sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==}
296 | cpu: [x64]
297 | os: [darwin]
298 |
299 | '@rollup/rollup-freebsd-arm64@4.35.0':
300 | resolution: {integrity: sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==}
301 | cpu: [arm64]
302 | os: [freebsd]
303 |
304 | '@rollup/rollup-freebsd-x64@4.35.0':
305 | resolution: {integrity: sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==}
306 | cpu: [x64]
307 | os: [freebsd]
308 |
309 | '@rollup/rollup-linux-arm-gnueabihf@4.35.0':
310 | resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==}
311 | cpu: [arm]
312 | os: [linux]
313 |
314 | '@rollup/rollup-linux-arm-musleabihf@4.35.0':
315 | resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==}
316 | cpu: [arm]
317 | os: [linux]
318 |
319 | '@rollup/rollup-linux-arm64-gnu@4.35.0':
320 | resolution: {integrity: sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==}
321 | cpu: [arm64]
322 | os: [linux]
323 |
324 | '@rollup/rollup-linux-arm64-musl@4.35.0':
325 | resolution: {integrity: sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==}
326 | cpu: [arm64]
327 | os: [linux]
328 |
329 | '@rollup/rollup-linux-loongarch64-gnu@4.35.0':
330 | resolution: {integrity: sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==}
331 | cpu: [loong64]
332 | os: [linux]
333 |
334 | '@rollup/rollup-linux-powerpc64le-gnu@4.35.0':
335 | resolution: {integrity: sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==}
336 | cpu: [ppc64]
337 | os: [linux]
338 |
339 | '@rollup/rollup-linux-riscv64-gnu@4.35.0':
340 | resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==}
341 | cpu: [riscv64]
342 | os: [linux]
343 |
344 | '@rollup/rollup-linux-s390x-gnu@4.35.0':
345 | resolution: {integrity: sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==}
346 | cpu: [s390x]
347 | os: [linux]
348 |
349 | '@rollup/rollup-linux-x64-gnu@4.35.0':
350 | resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==}
351 | cpu: [x64]
352 | os: [linux]
353 |
354 | '@rollup/rollup-linux-x64-musl@4.35.0':
355 | resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==}
356 | cpu: [x64]
357 | os: [linux]
358 |
359 | '@rollup/rollup-win32-arm64-msvc@4.35.0':
360 | resolution: {integrity: sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==}
361 | cpu: [arm64]
362 | os: [win32]
363 |
364 | '@rollup/rollup-win32-ia32-msvc@4.35.0':
365 | resolution: {integrity: sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==}
366 | cpu: [ia32]
367 | os: [win32]
368 |
369 | '@rollup/rollup-win32-x64-msvc@4.35.0':
370 | resolution: {integrity: sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==}
371 | cpu: [x64]
372 | os: [win32]
373 |
374 | '@shikijs/core@2.5.0':
375 | resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==}
376 |
377 | '@shikijs/engine-javascript@2.5.0':
378 | resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==}
379 |
380 | '@shikijs/engine-oniguruma@2.5.0':
381 | resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==}
382 |
383 | '@shikijs/langs@2.5.0':
384 | resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==}
385 |
386 | '@shikijs/themes@2.5.0':
387 | resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==}
388 |
389 | '@shikijs/transformers@2.5.0':
390 | resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==}
391 |
392 | '@shikijs/types@2.5.0':
393 | resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==}
394 |
395 | '@shikijs/vscode-textmate@10.0.2':
396 | resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
397 |
398 | '@types/estree@1.0.6':
399 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
400 |
401 | '@types/hast@3.0.4':
402 | resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
403 |
404 | '@types/linkify-it@5.0.0':
405 | resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
406 |
407 | '@types/markdown-it@14.1.2':
408 | resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
409 |
410 | '@types/mdast@4.0.4':
411 | resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
412 |
413 | '@types/mdurl@2.0.0':
414 | resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
415 |
416 | '@types/node@22.13.10':
417 | resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==}
418 |
419 | '@types/unist@3.0.3':
420 | resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
421 |
422 | '@types/web-bluetooth@0.0.21':
423 | resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
424 |
425 | '@ungap/structured-clone@1.3.0':
426 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
427 |
428 | '@vitejs/plugin-vue@5.2.1':
429 | resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==}
430 | engines: {node: ^18.0.0 || >=20.0.0}
431 | peerDependencies:
432 | vite: ^5.0.0 || ^6.0.0
433 | vue: ^3.2.25
434 |
435 | '@vue/compiler-core@3.5.13':
436 | resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
437 |
438 | '@vue/compiler-dom@3.5.13':
439 | resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
440 |
441 | '@vue/compiler-sfc@3.5.13':
442 | resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
443 |
444 | '@vue/compiler-ssr@3.5.13':
445 | resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
446 |
447 | '@vue/devtools-api@7.7.2':
448 | resolution: {integrity: sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==}
449 |
450 | '@vue/devtools-kit@7.7.2':
451 | resolution: {integrity: sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==}
452 |
453 | '@vue/devtools-shared@7.7.2':
454 | resolution: {integrity: sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==}
455 |
456 | '@vue/reactivity@3.5.13':
457 | resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
458 |
459 | '@vue/runtime-core@3.5.13':
460 | resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
461 |
462 | '@vue/runtime-dom@3.5.13':
463 | resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
464 |
465 | '@vue/server-renderer@3.5.13':
466 | resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
467 | peerDependencies:
468 | vue: 3.5.13
469 |
470 | '@vue/shared@3.5.13':
471 | resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
472 |
473 | '@vueuse/core@12.8.2':
474 | resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
475 |
476 | '@vueuse/integrations@12.8.2':
477 | resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==}
478 | peerDependencies:
479 | async-validator: ^4
480 | axios: ^1
481 | change-case: ^5
482 | drauu: ^0.4
483 | focus-trap: ^7
484 | fuse.js: ^7
485 | idb-keyval: ^6
486 | jwt-decode: ^4
487 | nprogress: ^0.2
488 | qrcode: ^1.5
489 | sortablejs: ^1
490 | universal-cookie: ^7
491 | peerDependenciesMeta:
492 | async-validator:
493 | optional: true
494 | axios:
495 | optional: true
496 | change-case:
497 | optional: true
498 | drauu:
499 | optional: true
500 | focus-trap:
501 | optional: true
502 | fuse.js:
503 | optional: true
504 | idb-keyval:
505 | optional: true
506 | jwt-decode:
507 | optional: true
508 | nprogress:
509 | optional: true
510 | qrcode:
511 | optional: true
512 | sortablejs:
513 | optional: true
514 | universal-cookie:
515 | optional: true
516 |
517 | '@vueuse/metadata@12.8.2':
518 | resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==}
519 |
520 | '@vueuse/shared@12.8.2':
521 | resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
522 |
523 | algoliasearch@5.20.4:
524 | resolution: {integrity: sha512-wjfzqruxovJyDqga8M6Xk5XtfuVg3igrWjhjgkRya87+WwfEa1kg+IluujBLzgAiMSd6rO6jqRb7czjgeeSYgQ==}
525 | engines: {node: '>= 14.0.0'}
526 |
527 | birpc@0.2.19:
528 | resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==}
529 |
530 | ccount@2.0.1:
531 | resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
532 |
533 | character-entities-html4@2.1.0:
534 | resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
535 |
536 | character-entities-legacy@3.0.0:
537 | resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
538 |
539 | comma-separated-tokens@2.0.3:
540 | resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
541 |
542 | copy-anything@3.0.5:
543 | resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
544 | engines: {node: '>=12.13'}
545 |
546 | csstype@3.1.3:
547 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
548 |
549 | dequal@2.0.3:
550 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
551 | engines: {node: '>=6'}
552 |
553 | devlop@1.1.0:
554 | resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
555 |
556 | easy-nix-documentation@1.0.7:
557 | resolution: {integrity: sha512-WyU4Keopd9W/MmKjoejD9l4SsJA9o6mNTbMLEOgy8TrzqUaaqJnL64r95LCgEScwq2WKdW0oeB8aHvQY+5cCNA==}
558 |
559 | emoji-regex-xs@1.0.0:
560 | resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
561 |
562 | entities@4.5.0:
563 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
564 | engines: {node: '>=0.12'}
565 |
566 | esbuild@0.21.5:
567 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
568 | engines: {node: '>=12'}
569 | hasBin: true
570 |
571 | estree-walker@2.0.2:
572 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
573 |
574 | focus-trap@7.6.4:
575 | resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==}
576 |
577 | fsevents@2.3.3:
578 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
579 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
580 | os: [darwin]
581 |
582 | hast-util-to-html@9.0.5:
583 | resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
584 |
585 | hast-util-whitespace@3.0.0:
586 | resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
587 |
588 | hookable@5.5.3:
589 | resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
590 |
591 | html-void-elements@3.0.0:
592 | resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
593 |
594 | is-what@4.1.16:
595 | resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
596 | engines: {node: '>=12.13'}
597 |
598 | magic-string@0.30.17:
599 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
600 |
601 | mark.js@8.11.1:
602 | resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
603 |
604 | mdast-util-to-hast@13.2.0:
605 | resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
606 |
607 | micromark-util-character@2.1.1:
608 | resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
609 |
610 | micromark-util-encode@2.0.1:
611 | resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
612 |
613 | micromark-util-sanitize-uri@2.0.1:
614 | resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
615 |
616 | micromark-util-symbol@2.0.1:
617 | resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
618 |
619 | micromark-util-types@2.0.2:
620 | resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
621 |
622 | minisearch@7.1.2:
623 | resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==}
624 |
625 | mitt@3.0.1:
626 | resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
627 |
628 | nanoid@3.3.9:
629 | resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==}
630 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
631 | hasBin: true
632 |
633 | oniguruma-to-es@3.1.1:
634 | resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==}
635 |
636 | perfect-debounce@1.0.0:
637 | resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
638 |
639 | picocolors@1.1.1:
640 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
641 |
642 | postcss@8.5.3:
643 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
644 | engines: {node: ^10 || ^12 || >=14}
645 |
646 | preact@10.26.4:
647 | resolution: {integrity: sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==}
648 |
649 | property-information@7.0.0:
650 | resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==}
651 |
652 | regex-recursion@6.0.2:
653 | resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
654 |
655 | regex-utilities@2.3.0:
656 | resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
657 |
658 | regex@6.0.1:
659 | resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==}
660 |
661 | rfdc@1.4.1:
662 | resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
663 |
664 | rollup@4.35.0:
665 | resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==}
666 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
667 | hasBin: true
668 |
669 | search-insights@2.17.3:
670 | resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==}
671 |
672 | shiki@2.5.0:
673 | resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==}
674 |
675 | source-map-js@1.2.1:
676 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
677 | engines: {node: '>=0.10.0'}
678 |
679 | space-separated-tokens@2.0.2:
680 | resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
681 |
682 | speakingurl@14.0.1:
683 | resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
684 | engines: {node: '>=0.10.0'}
685 |
686 | stringify-entities@4.0.4:
687 | resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
688 |
689 | superjson@2.2.2:
690 | resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==}
691 | engines: {node: '>=16'}
692 |
693 | tabbable@6.2.0:
694 | resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
695 |
696 | trim-lines@3.0.1:
697 | resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
698 |
699 | undici-types@6.20.0:
700 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
701 |
702 | unist-util-is@6.0.0:
703 | resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
704 |
705 | unist-util-position@5.0.0:
706 | resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
707 |
708 | unist-util-stringify-position@4.0.0:
709 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
710 |
711 | unist-util-visit-parents@6.0.1:
712 | resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
713 |
714 | unist-util-visit@5.0.0:
715 | resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
716 |
717 | vfile-message@4.0.2:
718 | resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
719 |
720 | vfile@6.0.3:
721 | resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
722 |
723 | vite@5.4.14:
724 | resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==}
725 | engines: {node: ^18.0.0 || >=20.0.0}
726 | hasBin: true
727 | peerDependencies:
728 | '@types/node': ^18.0.0 || >=20.0.0
729 | less: '*'
730 | lightningcss: ^1.21.0
731 | sass: '*'
732 | sass-embedded: '*'
733 | stylus: '*'
734 | sugarss: '*'
735 | terser: ^5.4.0
736 | peerDependenciesMeta:
737 | '@types/node':
738 | optional: true
739 | less:
740 | optional: true
741 | lightningcss:
742 | optional: true
743 | sass:
744 | optional: true
745 | sass-embedded:
746 | optional: true
747 | stylus:
748 | optional: true
749 | sugarss:
750 | optional: true
751 | terser:
752 | optional: true
753 |
754 | vitepress@1.6.3:
755 | resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==}
756 | hasBin: true
757 | peerDependencies:
758 | markdown-it-mathjax3: ^4
759 | postcss: ^8
760 | peerDependenciesMeta:
761 | markdown-it-mathjax3:
762 | optional: true
763 | postcss:
764 | optional: true
765 |
766 | vue@3.5.13:
767 | resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
768 | peerDependencies:
769 | typescript: '*'
770 | peerDependenciesMeta:
771 | typescript:
772 | optional: true
773 |
774 | zwitch@2.0.4:
775 | resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
776 |
777 | snapshots:
778 |
779 | '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)(search-insights@2.17.3)':
780 | dependencies:
781 | '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)(search-insights@2.17.3)
782 | '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)
783 | transitivePeerDependencies:
784 | - '@algolia/client-search'
785 | - algoliasearch
786 | - search-insights
787 |
788 | '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)(search-insights@2.17.3)':
789 | dependencies:
790 | '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)
791 | search-insights: 2.17.3
792 | transitivePeerDependencies:
793 | - '@algolia/client-search'
794 | - algoliasearch
795 |
796 | '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)':
797 | dependencies:
798 | '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)
799 | '@algolia/client-search': 5.20.4
800 | algoliasearch: 5.20.4
801 |
802 | '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)':
803 | dependencies:
804 | '@algolia/client-search': 5.20.4
805 | algoliasearch: 5.20.4
806 |
807 | '@algolia/client-abtesting@5.20.4':
808 | dependencies:
809 | '@algolia/client-common': 5.20.4
810 | '@algolia/requester-browser-xhr': 5.20.4
811 | '@algolia/requester-fetch': 5.20.4
812 | '@algolia/requester-node-http': 5.20.4
813 |
814 | '@algolia/client-analytics@5.20.4':
815 | dependencies:
816 | '@algolia/client-common': 5.20.4
817 | '@algolia/requester-browser-xhr': 5.20.4
818 | '@algolia/requester-fetch': 5.20.4
819 | '@algolia/requester-node-http': 5.20.4
820 |
821 | '@algolia/client-common@5.20.4': {}
822 |
823 | '@algolia/client-insights@5.20.4':
824 | dependencies:
825 | '@algolia/client-common': 5.20.4
826 | '@algolia/requester-browser-xhr': 5.20.4
827 | '@algolia/requester-fetch': 5.20.4
828 | '@algolia/requester-node-http': 5.20.4
829 |
830 | '@algolia/client-personalization@5.20.4':
831 | dependencies:
832 | '@algolia/client-common': 5.20.4
833 | '@algolia/requester-browser-xhr': 5.20.4
834 | '@algolia/requester-fetch': 5.20.4
835 | '@algolia/requester-node-http': 5.20.4
836 |
837 | '@algolia/client-query-suggestions@5.20.4':
838 | dependencies:
839 | '@algolia/client-common': 5.20.4
840 | '@algolia/requester-browser-xhr': 5.20.4
841 | '@algolia/requester-fetch': 5.20.4
842 | '@algolia/requester-node-http': 5.20.4
843 |
844 | '@algolia/client-search@5.20.4':
845 | dependencies:
846 | '@algolia/client-common': 5.20.4
847 | '@algolia/requester-browser-xhr': 5.20.4
848 | '@algolia/requester-fetch': 5.20.4
849 | '@algolia/requester-node-http': 5.20.4
850 |
851 | '@algolia/ingestion@1.20.4':
852 | dependencies:
853 | '@algolia/client-common': 5.20.4
854 | '@algolia/requester-browser-xhr': 5.20.4
855 | '@algolia/requester-fetch': 5.20.4
856 | '@algolia/requester-node-http': 5.20.4
857 |
858 | '@algolia/monitoring@1.20.4':
859 | dependencies:
860 | '@algolia/client-common': 5.20.4
861 | '@algolia/requester-browser-xhr': 5.20.4
862 | '@algolia/requester-fetch': 5.20.4
863 | '@algolia/requester-node-http': 5.20.4
864 |
865 | '@algolia/recommend@5.20.4':
866 | dependencies:
867 | '@algolia/client-common': 5.20.4
868 | '@algolia/requester-browser-xhr': 5.20.4
869 | '@algolia/requester-fetch': 5.20.4
870 | '@algolia/requester-node-http': 5.20.4
871 |
872 | '@algolia/requester-browser-xhr@5.20.4':
873 | dependencies:
874 | '@algolia/client-common': 5.20.4
875 |
876 | '@algolia/requester-fetch@5.20.4':
877 | dependencies:
878 | '@algolia/client-common': 5.20.4
879 |
880 | '@algolia/requester-node-http@5.20.4':
881 | dependencies:
882 | '@algolia/client-common': 5.20.4
883 |
884 | '@babel/helper-string-parser@7.25.9': {}
885 |
886 | '@babel/helper-validator-identifier@7.25.9': {}
887 |
888 | '@babel/parser@7.26.9':
889 | dependencies:
890 | '@babel/types': 7.26.9
891 |
892 | '@babel/types@7.26.9':
893 | dependencies:
894 | '@babel/helper-string-parser': 7.25.9
895 | '@babel/helper-validator-identifier': 7.25.9
896 |
897 | '@docsearch/css@3.8.2': {}
898 |
899 | '@docsearch/js@3.8.2(@algolia/client-search@5.20.4)(search-insights@2.17.3)':
900 | dependencies:
901 | '@docsearch/react': 3.8.2(@algolia/client-search@5.20.4)(search-insights@2.17.3)
902 | preact: 10.26.4
903 | transitivePeerDependencies:
904 | - '@algolia/client-search'
905 | - '@types/react'
906 | - react
907 | - react-dom
908 | - search-insights
909 |
910 | '@docsearch/react@3.8.2(@algolia/client-search@5.20.4)(search-insights@2.17.3)':
911 | dependencies:
912 | '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)(search-insights@2.17.3)
913 | '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)
914 | '@docsearch/css': 3.8.2
915 | algoliasearch: 5.20.4
916 | optionalDependencies:
917 | search-insights: 2.17.3
918 | transitivePeerDependencies:
919 | - '@algolia/client-search'
920 |
921 | '@esbuild/aix-ppc64@0.21.5':
922 | optional: true
923 |
924 | '@esbuild/android-arm64@0.21.5':
925 | optional: true
926 |
927 | '@esbuild/android-arm@0.21.5':
928 | optional: true
929 |
930 | '@esbuild/android-x64@0.21.5':
931 | optional: true
932 |
933 | '@esbuild/darwin-arm64@0.21.5':
934 | optional: true
935 |
936 | '@esbuild/darwin-x64@0.21.5':
937 | optional: true
938 |
939 | '@esbuild/freebsd-arm64@0.21.5':
940 | optional: true
941 |
942 | '@esbuild/freebsd-x64@0.21.5':
943 | optional: true
944 |
945 | '@esbuild/linux-arm64@0.21.5':
946 | optional: true
947 |
948 | '@esbuild/linux-arm@0.21.5':
949 | optional: true
950 |
951 | '@esbuild/linux-ia32@0.21.5':
952 | optional: true
953 |
954 | '@esbuild/linux-loong64@0.21.5':
955 | optional: true
956 |
957 | '@esbuild/linux-mips64el@0.21.5':
958 | optional: true
959 |
960 | '@esbuild/linux-ppc64@0.21.5':
961 | optional: true
962 |
963 | '@esbuild/linux-riscv64@0.21.5':
964 | optional: true
965 |
966 | '@esbuild/linux-s390x@0.21.5':
967 | optional: true
968 |
969 | '@esbuild/linux-x64@0.21.5':
970 | optional: true
971 |
972 | '@esbuild/netbsd-x64@0.21.5':
973 | optional: true
974 |
975 | '@esbuild/openbsd-x64@0.21.5':
976 | optional: true
977 |
978 | '@esbuild/sunos-x64@0.21.5':
979 | optional: true
980 |
981 | '@esbuild/win32-arm64@0.21.5':
982 | optional: true
983 |
984 | '@esbuild/win32-ia32@0.21.5':
985 | optional: true
986 |
987 | '@esbuild/win32-x64@0.21.5':
988 | optional: true
989 |
990 | '@iconify-json/simple-icons@1.2.27':
991 | dependencies:
992 | '@iconify/types': 2.0.0
993 |
994 | '@iconify/types@2.0.0': {}
995 |
996 | '@jridgewell/sourcemap-codec@1.5.0': {}
997 |
998 | '@rollup/rollup-android-arm-eabi@4.35.0':
999 | optional: true
1000 |
1001 | '@rollup/rollup-android-arm64@4.35.0':
1002 | optional: true
1003 |
1004 | '@rollup/rollup-darwin-arm64@4.35.0':
1005 | optional: true
1006 |
1007 | '@rollup/rollup-darwin-x64@4.35.0':
1008 | optional: true
1009 |
1010 | '@rollup/rollup-freebsd-arm64@4.35.0':
1011 | optional: true
1012 |
1013 | '@rollup/rollup-freebsd-x64@4.35.0':
1014 | optional: true
1015 |
1016 | '@rollup/rollup-linux-arm-gnueabihf@4.35.0':
1017 | optional: true
1018 |
1019 | '@rollup/rollup-linux-arm-musleabihf@4.35.0':
1020 | optional: true
1021 |
1022 | '@rollup/rollup-linux-arm64-gnu@4.35.0':
1023 | optional: true
1024 |
1025 | '@rollup/rollup-linux-arm64-musl@4.35.0':
1026 | optional: true
1027 |
1028 | '@rollup/rollup-linux-loongarch64-gnu@4.35.0':
1029 | optional: true
1030 |
1031 | '@rollup/rollup-linux-powerpc64le-gnu@4.35.0':
1032 | optional: true
1033 |
1034 | '@rollup/rollup-linux-riscv64-gnu@4.35.0':
1035 | optional: true
1036 |
1037 | '@rollup/rollup-linux-s390x-gnu@4.35.0':
1038 | optional: true
1039 |
1040 | '@rollup/rollup-linux-x64-gnu@4.35.0':
1041 | optional: true
1042 |
1043 | '@rollup/rollup-linux-x64-musl@4.35.0':
1044 | optional: true
1045 |
1046 | '@rollup/rollup-win32-arm64-msvc@4.35.0':
1047 | optional: true
1048 |
1049 | '@rollup/rollup-win32-ia32-msvc@4.35.0':
1050 | optional: true
1051 |
1052 | '@rollup/rollup-win32-x64-msvc@4.35.0':
1053 | optional: true
1054 |
1055 | '@shikijs/core@2.5.0':
1056 | dependencies:
1057 | '@shikijs/engine-javascript': 2.5.0
1058 | '@shikijs/engine-oniguruma': 2.5.0
1059 | '@shikijs/types': 2.5.0
1060 | '@shikijs/vscode-textmate': 10.0.2
1061 | '@types/hast': 3.0.4
1062 | hast-util-to-html: 9.0.5
1063 |
1064 | '@shikijs/engine-javascript@2.5.0':
1065 | dependencies:
1066 | '@shikijs/types': 2.5.0
1067 | '@shikijs/vscode-textmate': 10.0.2
1068 | oniguruma-to-es: 3.1.1
1069 |
1070 | '@shikijs/engine-oniguruma@2.5.0':
1071 | dependencies:
1072 | '@shikijs/types': 2.5.0
1073 | '@shikijs/vscode-textmate': 10.0.2
1074 |
1075 | '@shikijs/langs@2.5.0':
1076 | dependencies:
1077 | '@shikijs/types': 2.5.0
1078 |
1079 | '@shikijs/themes@2.5.0':
1080 | dependencies:
1081 | '@shikijs/types': 2.5.0
1082 |
1083 | '@shikijs/transformers@2.5.0':
1084 | dependencies:
1085 | '@shikijs/core': 2.5.0
1086 | '@shikijs/types': 2.5.0
1087 |
1088 | '@shikijs/types@2.5.0':
1089 | dependencies:
1090 | '@shikijs/vscode-textmate': 10.0.2
1091 | '@types/hast': 3.0.4
1092 |
1093 | '@shikijs/vscode-textmate@10.0.2': {}
1094 |
1095 | '@types/estree@1.0.6': {}
1096 |
1097 | '@types/hast@3.0.4':
1098 | dependencies:
1099 | '@types/unist': 3.0.3
1100 |
1101 | '@types/linkify-it@5.0.0': {}
1102 |
1103 | '@types/markdown-it@14.1.2':
1104 | dependencies:
1105 | '@types/linkify-it': 5.0.0
1106 | '@types/mdurl': 2.0.0
1107 |
1108 | '@types/mdast@4.0.4':
1109 | dependencies:
1110 | '@types/unist': 3.0.3
1111 |
1112 | '@types/mdurl@2.0.0': {}
1113 |
1114 | '@types/node@22.13.10':
1115 | dependencies:
1116 | undici-types: 6.20.0
1117 |
1118 | '@types/unist@3.0.3': {}
1119 |
1120 | '@types/web-bluetooth@0.0.21': {}
1121 |
1122 | '@ungap/structured-clone@1.3.0': {}
1123 |
1124 | '@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@22.13.10))(vue@3.5.13)':
1125 | dependencies:
1126 | vite: 5.4.14(@types/node@22.13.10)
1127 | vue: 3.5.13
1128 |
1129 | '@vue/compiler-core@3.5.13':
1130 | dependencies:
1131 | '@babel/parser': 7.26.9
1132 | '@vue/shared': 3.5.13
1133 | entities: 4.5.0
1134 | estree-walker: 2.0.2
1135 | source-map-js: 1.2.1
1136 |
1137 | '@vue/compiler-dom@3.5.13':
1138 | dependencies:
1139 | '@vue/compiler-core': 3.5.13
1140 | '@vue/shared': 3.5.13
1141 |
1142 | '@vue/compiler-sfc@3.5.13':
1143 | dependencies:
1144 | '@babel/parser': 7.26.9
1145 | '@vue/compiler-core': 3.5.13
1146 | '@vue/compiler-dom': 3.5.13
1147 | '@vue/compiler-ssr': 3.5.13
1148 | '@vue/shared': 3.5.13
1149 | estree-walker: 2.0.2
1150 | magic-string: 0.30.17
1151 | postcss: 8.5.3
1152 | source-map-js: 1.2.1
1153 |
1154 | '@vue/compiler-ssr@3.5.13':
1155 | dependencies:
1156 | '@vue/compiler-dom': 3.5.13
1157 | '@vue/shared': 3.5.13
1158 |
1159 | '@vue/devtools-api@7.7.2':
1160 | dependencies:
1161 | '@vue/devtools-kit': 7.7.2
1162 |
1163 | '@vue/devtools-kit@7.7.2':
1164 | dependencies:
1165 | '@vue/devtools-shared': 7.7.2
1166 | birpc: 0.2.19
1167 | hookable: 5.5.3
1168 | mitt: 3.0.1
1169 | perfect-debounce: 1.0.0
1170 | speakingurl: 14.0.1
1171 | superjson: 2.2.2
1172 |
1173 | '@vue/devtools-shared@7.7.2':
1174 | dependencies:
1175 | rfdc: 1.4.1
1176 |
1177 | '@vue/reactivity@3.5.13':
1178 | dependencies:
1179 | '@vue/shared': 3.5.13
1180 |
1181 | '@vue/runtime-core@3.5.13':
1182 | dependencies:
1183 | '@vue/reactivity': 3.5.13
1184 | '@vue/shared': 3.5.13
1185 |
1186 | '@vue/runtime-dom@3.5.13':
1187 | dependencies:
1188 | '@vue/reactivity': 3.5.13
1189 | '@vue/runtime-core': 3.5.13
1190 | '@vue/shared': 3.5.13
1191 | csstype: 3.1.3
1192 |
1193 | '@vue/server-renderer@3.5.13(vue@3.5.13)':
1194 | dependencies:
1195 | '@vue/compiler-ssr': 3.5.13
1196 | '@vue/shared': 3.5.13
1197 | vue: 3.5.13
1198 |
1199 | '@vue/shared@3.5.13': {}
1200 |
1201 | '@vueuse/core@12.8.2':
1202 | dependencies:
1203 | '@types/web-bluetooth': 0.0.21
1204 | '@vueuse/metadata': 12.8.2
1205 | '@vueuse/shared': 12.8.2
1206 | vue: 3.5.13
1207 | transitivePeerDependencies:
1208 | - typescript
1209 |
1210 | '@vueuse/integrations@12.8.2(focus-trap@7.6.4)':
1211 | dependencies:
1212 | '@vueuse/core': 12.8.2
1213 | '@vueuse/shared': 12.8.2
1214 | vue: 3.5.13
1215 | optionalDependencies:
1216 | focus-trap: 7.6.4
1217 | transitivePeerDependencies:
1218 | - typescript
1219 |
1220 | '@vueuse/metadata@12.8.2': {}
1221 |
1222 | '@vueuse/shared@12.8.2':
1223 | dependencies:
1224 | vue: 3.5.13
1225 | transitivePeerDependencies:
1226 | - typescript
1227 |
1228 | algoliasearch@5.20.4:
1229 | dependencies:
1230 | '@algolia/client-abtesting': 5.20.4
1231 | '@algolia/client-analytics': 5.20.4
1232 | '@algolia/client-common': 5.20.4
1233 | '@algolia/client-insights': 5.20.4
1234 | '@algolia/client-personalization': 5.20.4
1235 | '@algolia/client-query-suggestions': 5.20.4
1236 | '@algolia/client-search': 5.20.4
1237 | '@algolia/ingestion': 1.20.4
1238 | '@algolia/monitoring': 1.20.4
1239 | '@algolia/recommend': 5.20.4
1240 | '@algolia/requester-browser-xhr': 5.20.4
1241 | '@algolia/requester-fetch': 5.20.4
1242 | '@algolia/requester-node-http': 5.20.4
1243 |
1244 | birpc@0.2.19: {}
1245 |
1246 | ccount@2.0.1: {}
1247 |
1248 | character-entities-html4@2.1.0: {}
1249 |
1250 | character-entities-legacy@3.0.0: {}
1251 |
1252 | comma-separated-tokens@2.0.3: {}
1253 |
1254 | copy-anything@3.0.5:
1255 | dependencies:
1256 | is-what: 4.1.16
1257 |
1258 | csstype@3.1.3: {}
1259 |
1260 | dequal@2.0.3: {}
1261 |
1262 | devlop@1.1.0:
1263 | dependencies:
1264 | dequal: 2.0.3
1265 |
1266 | easy-nix-documentation@1.0.7(@algolia/client-search@5.20.4)(postcss@8.5.3)(search-insights@2.17.3):
1267 | dependencies:
1268 | '@types/node': 22.13.10
1269 | vitepress: 1.6.3(@algolia/client-search@5.20.4)(@types/node@22.13.10)(postcss@8.5.3)(search-insights@2.17.3)
1270 | vue: 3.5.13
1271 | transitivePeerDependencies:
1272 | - '@algolia/client-search'
1273 | - '@types/react'
1274 | - async-validator
1275 | - axios
1276 | - change-case
1277 | - drauu
1278 | - fuse.js
1279 | - idb-keyval
1280 | - jwt-decode
1281 | - less
1282 | - lightningcss
1283 | - markdown-it-mathjax3
1284 | - nprogress
1285 | - postcss
1286 | - qrcode
1287 | - react
1288 | - react-dom
1289 | - sass
1290 | - sass-embedded
1291 | - search-insights
1292 | - sortablejs
1293 | - stylus
1294 | - sugarss
1295 | - terser
1296 | - typescript
1297 | - universal-cookie
1298 |
1299 | emoji-regex-xs@1.0.0: {}
1300 |
1301 | entities@4.5.0: {}
1302 |
1303 | esbuild@0.21.5:
1304 | optionalDependencies:
1305 | '@esbuild/aix-ppc64': 0.21.5
1306 | '@esbuild/android-arm': 0.21.5
1307 | '@esbuild/android-arm64': 0.21.5
1308 | '@esbuild/android-x64': 0.21.5
1309 | '@esbuild/darwin-arm64': 0.21.5
1310 | '@esbuild/darwin-x64': 0.21.5
1311 | '@esbuild/freebsd-arm64': 0.21.5
1312 | '@esbuild/freebsd-x64': 0.21.5
1313 | '@esbuild/linux-arm': 0.21.5
1314 | '@esbuild/linux-arm64': 0.21.5
1315 | '@esbuild/linux-ia32': 0.21.5
1316 | '@esbuild/linux-loong64': 0.21.5
1317 | '@esbuild/linux-mips64el': 0.21.5
1318 | '@esbuild/linux-ppc64': 0.21.5
1319 | '@esbuild/linux-riscv64': 0.21.5
1320 | '@esbuild/linux-s390x': 0.21.5
1321 | '@esbuild/linux-x64': 0.21.5
1322 | '@esbuild/netbsd-x64': 0.21.5
1323 | '@esbuild/openbsd-x64': 0.21.5
1324 | '@esbuild/sunos-x64': 0.21.5
1325 | '@esbuild/win32-arm64': 0.21.5
1326 | '@esbuild/win32-ia32': 0.21.5
1327 | '@esbuild/win32-x64': 0.21.5
1328 |
1329 | estree-walker@2.0.2: {}
1330 |
1331 | focus-trap@7.6.4:
1332 | dependencies:
1333 | tabbable: 6.2.0
1334 |
1335 | fsevents@2.3.3:
1336 | optional: true
1337 |
1338 | hast-util-to-html@9.0.5:
1339 | dependencies:
1340 | '@types/hast': 3.0.4
1341 | '@types/unist': 3.0.3
1342 | ccount: 2.0.1
1343 | comma-separated-tokens: 2.0.3
1344 | hast-util-whitespace: 3.0.0
1345 | html-void-elements: 3.0.0
1346 | mdast-util-to-hast: 13.2.0
1347 | property-information: 7.0.0
1348 | space-separated-tokens: 2.0.2
1349 | stringify-entities: 4.0.4
1350 | zwitch: 2.0.4
1351 |
1352 | hast-util-whitespace@3.0.0:
1353 | dependencies:
1354 | '@types/hast': 3.0.4
1355 |
1356 | hookable@5.5.3: {}
1357 |
1358 | html-void-elements@3.0.0: {}
1359 |
1360 | is-what@4.1.16: {}
1361 |
1362 | magic-string@0.30.17:
1363 | dependencies:
1364 | '@jridgewell/sourcemap-codec': 1.5.0
1365 |
1366 | mark.js@8.11.1: {}
1367 |
1368 | mdast-util-to-hast@13.2.0:
1369 | dependencies:
1370 | '@types/hast': 3.0.4
1371 | '@types/mdast': 4.0.4
1372 | '@ungap/structured-clone': 1.3.0
1373 | devlop: 1.1.0
1374 | micromark-util-sanitize-uri: 2.0.1
1375 | trim-lines: 3.0.1
1376 | unist-util-position: 5.0.0
1377 | unist-util-visit: 5.0.0
1378 | vfile: 6.0.3
1379 |
1380 | micromark-util-character@2.1.1:
1381 | dependencies:
1382 | micromark-util-symbol: 2.0.1
1383 | micromark-util-types: 2.0.2
1384 |
1385 | micromark-util-encode@2.0.1: {}
1386 |
1387 | micromark-util-sanitize-uri@2.0.1:
1388 | dependencies:
1389 | micromark-util-character: 2.1.1
1390 | micromark-util-encode: 2.0.1
1391 | micromark-util-symbol: 2.0.1
1392 |
1393 | micromark-util-symbol@2.0.1: {}
1394 |
1395 | micromark-util-types@2.0.2: {}
1396 |
1397 | minisearch@7.1.2: {}
1398 |
1399 | mitt@3.0.1: {}
1400 |
1401 | nanoid@3.3.9: {}
1402 |
1403 | oniguruma-to-es@3.1.1:
1404 | dependencies:
1405 | emoji-regex-xs: 1.0.0
1406 | regex: 6.0.1
1407 | regex-recursion: 6.0.2
1408 |
1409 | perfect-debounce@1.0.0: {}
1410 |
1411 | picocolors@1.1.1: {}
1412 |
1413 | postcss@8.5.3:
1414 | dependencies:
1415 | nanoid: 3.3.9
1416 | picocolors: 1.1.1
1417 | source-map-js: 1.2.1
1418 |
1419 | preact@10.26.4: {}
1420 |
1421 | property-information@7.0.0: {}
1422 |
1423 | regex-recursion@6.0.2:
1424 | dependencies:
1425 | regex-utilities: 2.3.0
1426 |
1427 | regex-utilities@2.3.0: {}
1428 |
1429 | regex@6.0.1:
1430 | dependencies:
1431 | regex-utilities: 2.3.0
1432 |
1433 | rfdc@1.4.1: {}
1434 |
1435 | rollup@4.35.0:
1436 | dependencies:
1437 | '@types/estree': 1.0.6
1438 | optionalDependencies:
1439 | '@rollup/rollup-android-arm-eabi': 4.35.0
1440 | '@rollup/rollup-android-arm64': 4.35.0
1441 | '@rollup/rollup-darwin-arm64': 4.35.0
1442 | '@rollup/rollup-darwin-x64': 4.35.0
1443 | '@rollup/rollup-freebsd-arm64': 4.35.0
1444 | '@rollup/rollup-freebsd-x64': 4.35.0
1445 | '@rollup/rollup-linux-arm-gnueabihf': 4.35.0
1446 | '@rollup/rollup-linux-arm-musleabihf': 4.35.0
1447 | '@rollup/rollup-linux-arm64-gnu': 4.35.0
1448 | '@rollup/rollup-linux-arm64-musl': 4.35.0
1449 | '@rollup/rollup-linux-loongarch64-gnu': 4.35.0
1450 | '@rollup/rollup-linux-powerpc64le-gnu': 4.35.0
1451 | '@rollup/rollup-linux-riscv64-gnu': 4.35.0
1452 | '@rollup/rollup-linux-s390x-gnu': 4.35.0
1453 | '@rollup/rollup-linux-x64-gnu': 4.35.0
1454 | '@rollup/rollup-linux-x64-musl': 4.35.0
1455 | '@rollup/rollup-win32-arm64-msvc': 4.35.0
1456 | '@rollup/rollup-win32-ia32-msvc': 4.35.0
1457 | '@rollup/rollup-win32-x64-msvc': 4.35.0
1458 | fsevents: 2.3.3
1459 |
1460 | search-insights@2.17.3: {}
1461 |
1462 | shiki@2.5.0:
1463 | dependencies:
1464 | '@shikijs/core': 2.5.0
1465 | '@shikijs/engine-javascript': 2.5.0
1466 | '@shikijs/engine-oniguruma': 2.5.0
1467 | '@shikijs/langs': 2.5.0
1468 | '@shikijs/themes': 2.5.0
1469 | '@shikijs/types': 2.5.0
1470 | '@shikijs/vscode-textmate': 10.0.2
1471 | '@types/hast': 3.0.4
1472 |
1473 | source-map-js@1.2.1: {}
1474 |
1475 | space-separated-tokens@2.0.2: {}
1476 |
1477 | speakingurl@14.0.1: {}
1478 |
1479 | stringify-entities@4.0.4:
1480 | dependencies:
1481 | character-entities-html4: 2.1.0
1482 | character-entities-legacy: 3.0.0
1483 |
1484 | superjson@2.2.2:
1485 | dependencies:
1486 | copy-anything: 3.0.5
1487 |
1488 | tabbable@6.2.0: {}
1489 |
1490 | trim-lines@3.0.1: {}
1491 |
1492 | undici-types@6.20.0: {}
1493 |
1494 | unist-util-is@6.0.0:
1495 | dependencies:
1496 | '@types/unist': 3.0.3
1497 |
1498 | unist-util-position@5.0.0:
1499 | dependencies:
1500 | '@types/unist': 3.0.3
1501 |
1502 | unist-util-stringify-position@4.0.0:
1503 | dependencies:
1504 | '@types/unist': 3.0.3
1505 |
1506 | unist-util-visit-parents@6.0.1:
1507 | dependencies:
1508 | '@types/unist': 3.0.3
1509 | unist-util-is: 6.0.0
1510 |
1511 | unist-util-visit@5.0.0:
1512 | dependencies:
1513 | '@types/unist': 3.0.3
1514 | unist-util-is: 6.0.0
1515 | unist-util-visit-parents: 6.0.1
1516 |
1517 | vfile-message@4.0.2:
1518 | dependencies:
1519 | '@types/unist': 3.0.3
1520 | unist-util-stringify-position: 4.0.0
1521 |
1522 | vfile@6.0.3:
1523 | dependencies:
1524 | '@types/unist': 3.0.3
1525 | vfile-message: 4.0.2
1526 |
1527 | vite@5.4.14(@types/node@22.13.10):
1528 | dependencies:
1529 | esbuild: 0.21.5
1530 | postcss: 8.5.3
1531 | rollup: 4.35.0
1532 | optionalDependencies:
1533 | '@types/node': 22.13.10
1534 | fsevents: 2.3.3
1535 |
1536 | vitepress@1.6.3(@algolia/client-search@5.20.4)(@types/node@22.13.10)(postcss@8.5.3)(search-insights@2.17.3):
1537 | dependencies:
1538 | '@docsearch/css': 3.8.2
1539 | '@docsearch/js': 3.8.2(@algolia/client-search@5.20.4)(search-insights@2.17.3)
1540 | '@iconify-json/simple-icons': 1.2.27
1541 | '@shikijs/core': 2.5.0
1542 | '@shikijs/transformers': 2.5.0
1543 | '@shikijs/types': 2.5.0
1544 | '@types/markdown-it': 14.1.2
1545 | '@vitejs/plugin-vue': 5.2.1(vite@5.4.14(@types/node@22.13.10))(vue@3.5.13)
1546 | '@vue/devtools-api': 7.7.2
1547 | '@vue/shared': 3.5.13
1548 | '@vueuse/core': 12.8.2
1549 | '@vueuse/integrations': 12.8.2(focus-trap@7.6.4)
1550 | focus-trap: 7.6.4
1551 | mark.js: 8.11.1
1552 | minisearch: 7.1.2
1553 | shiki: 2.5.0
1554 | vite: 5.4.14(@types/node@22.13.10)
1555 | vue: 3.5.13
1556 | optionalDependencies:
1557 | postcss: 8.5.3
1558 | transitivePeerDependencies:
1559 | - '@algolia/client-search'
1560 | - '@types/node'
1561 | - '@types/react'
1562 | - async-validator
1563 | - axios
1564 | - change-case
1565 | - drauu
1566 | - fuse.js
1567 | - idb-keyval
1568 | - jwt-decode
1569 | - less
1570 | - lightningcss
1571 | - nprogress
1572 | - qrcode
1573 | - react
1574 | - react-dom
1575 | - sass
1576 | - sass-embedded
1577 | - search-insights
1578 | - sortablejs
1579 | - stylus
1580 | - sugarss
1581 | - terser
1582 | - typescript
1583 | - universal-cookie
1584 |
1585 | vue@3.5.13:
1586 | dependencies:
1587 | '@vue/compiler-dom': 3.5.13
1588 | '@vue/compiler-sfc': 3.5.13
1589 | '@vue/runtime-dom': 3.5.13
1590 | '@vue/server-renderer': 3.5.13(vue@3.5.13)
1591 | '@vue/shared': 3.5.13
1592 |
1593 | zwitch@2.0.4: {}
1594 |
--------------------------------------------------------------------------------
/src/api.rs:
--------------------------------------------------------------------------------
1 | use std::path::PathBuf;
2 | use std::sync::mpsc;
3 |
4 | use mlua::prelude::*;
5 | use mlua::Table;
6 |
7 | use tracing::debug;
8 | use tracing::trace;
9 | use tracing::Callsite;
10 |
11 | #[derive(Debug, clap::Parser)]
12 | struct Args {
13 | file: PathBuf,
14 |
15 | #[arg(short = 'n', long)]
16 | dry: bool,
17 | }
18 |
19 | fn load_module>(lua: &Lua, name: S, module: &Table) -> LuaResult<()> {
20 | let name = name.as_ref();
21 | let globals = lua.globals();
22 | let package: Table = globals.get("package")?;
23 | let loaded: Table = package.get("loaded")?;
24 | loaded.set(name, module)?;
25 | Ok(())
26 | }
27 |
28 | pub fn main() -> eyre::Result<()> {
29 | let args = ::parse();
30 | trace!(?args);
31 |
32 | let lua = Lua::new();
33 |
34 | let module = lua.create_table()?;
35 |
36 | let (tx, rx) = mpsc::channel();
37 |
38 | let txx = tx.clone();
39 | module.set(
40 | "file",
41 | lua.create_function(move |_, input: Table| {
42 | let node = crate::node::file_from_lua(input)?;
43 | // let id = node.id.clone();
44 | txx.send(node).unwrap();
45 | Ok(())
46 | })?,
47 | )?;
48 |
49 | module.set(
50 | "debug",
51 | lua.create_function(|lua, input: LuaValue| {
52 | debug!("{input:?}");
53 | Ok(())
54 | })?,
55 | )?;
56 |
57 | let txx = tx.clone();
58 | module.set(
59 | "dconf",
60 | lua.create_function(move |_, input: Table| {
61 | let node = crate::gsettings::dconf_node(input)?;
62 | // let id = node.id.clone();
63 | txx.send(node).unwrap();
64 | Ok(())
65 | })?,
66 | )?;
67 |
68 | let txx = tx.clone();
69 | module.set(
70 | "exec",
71 | lua.create_function(move |_, input: Table| {
72 | let node = crate::exec_node::lua_to_exec(input)?;
73 | let id = node.metadata.id.clone();
74 | txx.send(node).unwrap();
75 | Ok(id)
76 | })?,
77 | )?;
78 |
79 | load_module(&lua, "am", &module)?;
80 |
81 | lua.load(args.file.as_path()).exec()?;
82 |
83 | let mut nodes = Vec::new();
84 | while let Ok(next) = rx.try_recv() {
85 | nodes.push(next);
86 | }
87 | trace!("{nodes:#?}");
88 |
89 | crate::exec::run_graph(&nodes, args.dry)?;
90 |
91 | Ok(())
92 | }
93 |
--------------------------------------------------------------------------------
/src/exec.rs:
--------------------------------------------------------------------------------
1 | use color_eyre::owo_colors::OwoColorize;
2 | use tracing::error;
3 |
4 | use crate::node::Node;
5 |
6 | pub fn run_graph(nodes: &Vec, dry: bool) -> eyre::Result<()> {
7 | for node in nodes {
8 | print!("{} Activating: ", ">".green());
9 | if let Some(desc) = &node.metadata.description {
10 | println!("{}", desc.bright_black());
11 | }
12 |
13 | if !dry {
14 | let result = node.kind.exec();
15 |
16 | if let Err(report) = result {
17 | error!("{:#}", report);
18 | }
19 | }
20 | }
21 |
22 | Ok(())
23 | }
24 |
--------------------------------------------------------------------------------
/src/exec_node.rs:
--------------------------------------------------------------------------------
1 | use std::process::Stdio;
2 |
3 | use eyre::bail;
4 |
5 | use crate::node::{Node, NodeExec, NodeMetadata};
6 |
7 | #[derive(Debug)]
8 | pub struct ExecNode {
9 | command: Vec,
10 | }
11 |
12 | impl NodeExec for ExecNode {
13 | fn exec(&self) -> eyre::Result<()> {
14 | let mut _command = self.command.clone().into_iter();
15 | let out = std::process::Command::new(_command.next().unwrap())
16 | .args(_command)
17 | .stdout(Stdio::inherit())
18 | .stderr(Stdio::inherit())
19 | .output()?;
20 |
21 | if !out.status.success() {
22 | bail!("Failed to execute command!");
23 | }
24 |
25 | //
26 | Ok(())
27 | }
28 | }
29 |
30 | pub(crate) fn lua_to_exec(input: mlua::Table) -> mlua::Result {
31 | let command: Vec = input.get("command")?;
32 | let mut metadata = NodeMetadata::from_table(&input);
33 |
34 | let kind = ExecNode { command };
35 | metadata.description = metadata
36 | .description
37 | .or_else(|| Some(kind.command.join(" ")));
38 |
39 | Ok(Node {
40 | metadata,
41 | kind: Box::new(kind),
42 | })
43 | }
44 |
--------------------------------------------------------------------------------
/src/gsettings.rs:
--------------------------------------------------------------------------------
1 | use std::collections::HashMap;
2 | use std::process::Command;
3 |
4 | use eyre::bail;
5 | use mlua::Table;
6 | use once_cell::sync::Lazy;
7 | use tracing::trace;
8 |
9 | use crate::node::{Node, NodeExec};
10 |
11 | #[derive(Debug)]
12 | pub struct GsettingsNode {
13 | pub schema: Vec,
14 | pub key: String,
15 | pub value: String,
16 | }
17 |
18 | #[derive(Debug)]
19 | pub struct DconfNode {
20 | pub key: String,
21 | pub value: String,
22 | }
23 |
24 | static SCHEMAS: Lazy>>> = Lazy::new(|| {
25 | let out = Command::new("gsettings")
26 | .args(["list-schemas", "--print-paths"])
27 | .output()?;
28 | if !out.status.success() {
29 | bail!("Command failed");
30 | }
31 |
32 | let stdout = String::from_utf8(out.stdout)?;
33 |
34 | let mut mappings = HashMap::new();
35 |
36 | for line in stdout.lines() {
37 | let (key, path) = line.split_once(" ").unwrap();
38 | let k = key.split(".").map(|s| s.to_owned()).collect::>();
39 |
40 | mappings.insert(path.to_string(), k);
41 | }
42 |
43 | Ok(mappings)
44 | });
45 |
46 | impl NodeExec for GsettingsNode {
47 | fn exec(&self) -> eyre::Result<()> {
48 | let schemas = match Lazy::<_>::force(&SCHEMAS) {
49 | Ok(ok) => ok,
50 | Err(err) => bail!(err),
51 | };
52 | trace!("{schemas:#?}");
53 |
54 | let out = std::process::Command::new("gsettings")
55 | .arg("set")
56 | .arg(self.schema.join("."))
57 | .arg(&self.key)
58 | .arg(&self.value)
59 | .output()?;
60 |
61 | if !out.status.success() {
62 | bail!("Command failed");
63 | }
64 |
65 | trace!(?out);
66 |
67 | Ok(())
68 | }
69 | }
70 |
71 | pub fn dconf_node(input: Table) -> mlua::Result {
72 | // let (before, after) = before_after(&input);
73 | // let dconf_key: String = input.get("key")?;
74 | // let value: String = input.get("value")?;
75 | //
76 | // let mut schema = vec![];
77 | // for elem in dconf_key.strip_prefix("/").unwrap().split("/") {
78 | // schema.push(elem.to_string());
79 | // }
80 | // let key = schema.pop().unwrap();
81 | //
82 | // let kind = GsettingsNode { key, schema, value };
83 | //
84 | // let description = Some(format!("{dconf_key} => {}", kind.value));
85 | //
86 | // Ok(Node {
87 | // // id: format!("FIXME"),
88 | // before,
89 | // after,
90 | // kind: Box::new(kind),
91 | // description,
92 | // })
93 |
94 | todo!();
95 | }
96 |
--------------------------------------------------------------------------------
/src/main.rs:
--------------------------------------------------------------------------------
1 | #![allow(dead_code)]
2 |
3 | mod api;
4 | mod exec;
5 | mod exec_node;
6 | mod gsettings;
7 | mod node;
8 |
9 | fn main() -> eyre::Result<()> {
10 | use std::str::FromStr;
11 | use tracing_subscriber::{fmt, prelude::*, EnvFilter};
12 |
13 | let level = std::env::var("AM_LOG").unwrap_or(String::from("warn"));
14 |
15 | tracing_subscriber::registry()
16 | .with(fmt::layer().without_time())
17 | .with(EnvFilter::from_str(&level)?)
18 | .init();
19 |
20 | tracing::trace!(?level);
21 |
22 | color_eyre::install()?;
23 |
24 | api::main()?;
25 |
26 | Ok(())
27 | }
28 |
--------------------------------------------------------------------------------
/src/node.rs:
--------------------------------------------------------------------------------
1 | use std::fmt;
2 | use std::fs;
3 | use std::os::unix;
4 | use std::path::PathBuf;
5 | use std::sync::Mutex;
6 |
7 | use eyre::ContextCompat;
8 | use mlua::prelude::*;
9 | use mlua::Table;
10 | use once_cell::sync::Lazy;
11 | use sha2::{Digest, Sha256};
12 |
13 | #[derive(Debug)]
14 | pub struct Node {
15 | pub metadata: NodeMetadata,
16 | pub kind: Box,
17 | }
18 |
19 | #[derive(Debug)]
20 | pub struct NodeMetadata {
21 | pub id: String,
22 | pub before: Vec,
23 | pub after: Vec,
24 | pub description: Option,
25 | }
26 |
27 | pub trait NodeExec: fmt::Debug {
28 | fn exec(&self) -> eyre::Result<()>;
29 | }
30 |
31 | #[derive(Debug)]
32 | pub struct FileNodeKind {
33 | link: String,
34 | target: String,
35 | }
36 |
37 | impl NodeExec for FileNodeKind {
38 | fn exec(&self) -> eyre::Result<()> {
39 | if let Ok(meta) = fs::symlink_metadata(&self.link) {
40 | if meta.is_symlink() {
41 | fs::remove_file(&self.link)?;
42 | }
43 | }
44 | let link = PathBuf::from(&self.link);
45 | let parent = link.parent().wrap_err("Failed to get parent")?;
46 | fs::create_dir_all(parent)?;
47 | unix::fs::symlink(&self.target, &self.link)?;
48 | Ok(())
49 | }
50 | }
51 |
52 | #[derive(Debug)]
53 | pub struct IdGenerator(Mutex);
54 |
55 | static ID_GENERATOR: Lazy = Lazy::new(|| IdGenerator(Mutex::new(0)));
56 |
57 | impl IdGenerator {
58 | fn get_next(&self) -> String {
59 | let mut x = self.0.lock().unwrap();
60 | *x = *x + 1;
61 | return format!("node-internal-{}", *x);
62 | }
63 | }
64 |
65 | impl NodeMetadata {
66 | pub fn from_table(table: &Table) -> Self {
67 | let before = table.get("before").unwrap_or_default();
68 | let after = table.get("after").unwrap_or_default();
69 | let description = table.get("description").unwrap_or_default();
70 |
71 | Self {
72 | id: ID_GENERATOR.get_next(),
73 | before,
74 | after,
75 | description,
76 | }
77 | }
78 | }
79 |
80 | pub fn file_from_lua(table: Table) -> LuaResult {
81 | let link: String = table.get("link")?;
82 | let target: String = table.get("target")?;
83 | let id: Option = table.get("id").ok();
84 | let mut meta = NodeMetadata::from_table(&table);
85 | let copy: bool = table.get("copy").ok().unwrap_or(false);
86 |
87 | let kind = FileNodeKind { link, target };
88 |
89 | let id = match id {
90 | Some(x) => x,
91 | None => {
92 | let mut hasher = Sha256::new();
93 | hasher.update(&kind.link);
94 | hasher.update(&kind.target);
95 | let hash = base16::encode_lower(&hasher.finalize());
96 | format!("node-{hash}")
97 | }
98 | };
99 |
100 | meta.description = meta
101 | .description
102 | .or_else(|| Some(format!("Symlink {} -> {}", kind.link, kind.target)));
103 |
104 | let node = Node {
105 | kind: Box::new(kind),
106 | metadata: meta,
107 | };
108 |
109 | Ok(node)
110 | }
111 |
--------------------------------------------------------------------------------
/test/main.lua:
--------------------------------------------------------------------------------
1 | local am = require("am")
2 | local os = require("os")
3 |
4 | local home = os.getenv("HOME")
5 |
6 | ---@type string
7 | -- local f1 = am.file {
8 | -- id = "f1",
9 | -- from = home .. "/foo",
10 | -- to = home .. "/bar",
11 | -- }
12 |
13 | -- am.dconf {
14 | -- key = "/org/gnome/desktop/peripherals/mouse/accel-profile",
15 | -- value = "flat",
16 | -- }
17 |
18 | local ls = am.exec {
19 | command = { "ls" },
20 | }
21 |
22 | am.debug(ls)
23 |
24 | am.exec {
25 | command = { "blhablah" },
26 | }
27 |
--------------------------------------------------------------------------------
/test/main.nix:
--------------------------------------------------------------------------------
1 | let
2 | mod =
3 | { pkgs, config, ... }:
4 | {
5 | home.file."foo" = {
6 | target = "hello";
7 | };
8 | dconf.settings = {
9 | "/org/gnome/desktop/peripherals/mouse/accel-profile" = "flat";
10 | };
11 | };
12 | in
13 | import ../nix/home {
14 | modules = [ mod ];
15 | }
16 |
--------------------------------------------------------------------------------
/test/nixos.nix:
--------------------------------------------------------------------------------
1 | { config, pkgs, ... }:
2 | {
3 | imports = [
4 | ../nix/home/nixos-module.nix
5 | ];
6 |
7 | users.users."nixos" = {
8 | isNormalUser = true;
9 | extraGroups = [ "wheel" ];
10 | packages = [
11 | (config.activation-manager.mkHome {
12 | home.file."foo".target = "bar";
13 | })
14 | ];
15 | };
16 |
17 | services.getty.autologinUser = "nixos";
18 | security.sudo.wheelNeedsPassword = false;
19 | }
20 |
--------------------------------------------------------------------------------