diff --git a/.github/workflows/upgrade.yml b/.github/workflows/upgrade.yml new file mode 100644 index 000000000..88d8f6409 --- /dev/null +++ b/.github/workflows/upgrade.yml @@ -0,0 +1,46 @@ +name: Upgrade +on: + schedule: + - cron: '0 2 * * *' + workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true +permissions: + contents: write + pull-requests: write +jobs: + upgrade: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Install Nix + uses: cachix/install-nix-action@v31 + with: + github_access_token: ${{ secrets.GITHUB_TOKEN }} + - name: Run Upgrade Overlays + run: ./scripts/upgrade-overlays.sh all + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Create Pull Request + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.PAT_TOKEN }} + commit-message: 'chore: upgrade overlays' + title: 'chore: upgrade overlays' + body: Automated overlay upgrade + branch: chore/upgrade-overlays + delete-branch: true + upgrade-check: + if: always() + needs: + - upgrade + runs-on: ubuntu-latest + timeout-minutes: 3 + steps: + - name: Alls Green + uses: re-actors/alls-green@release/v1 + with: + jobs: ${{ toJSON(needs) }} diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 000000000..692c3f7f1 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,2470 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi-escape-sequences" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afb74bb006f83a46d689f70e46ce3a9830db762134b3b585986fa9eab21f75d" +dependencies = [ + "regex", +] + +[[package]] +name = "ansi-str" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "060de1453b69f46304b28274f382132f4e72c55637cf362920926a70d090890d" +dependencies = [ + "ansitok", +] + +[[package]] +name = "ansitok" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0a8acea8c2f1c60f0a92a8cd26bf96ca97db56f10bbcab238bbe0cceba659ee" +dependencies = [ + "nom", + "vte 0.14.1", +] + +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "askama" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7125972258312e79827b60c9eb93938334100245081cf701a2dee981b17427" +dependencies = [ + "askama_macros", + "itoa", + "percent-encoding", + "serde", + "serde_json", +] + +[[package]] +name = "askama_derive" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba5e7259a1580c61571e3116ebaaa01e3c001b2132b17c4cc5c70780ca3e994" +dependencies = [ + "askama_parser", + "memchr", + "proc-macro2", + "quote", + "rustc-hash", + "syn", +] + +[[package]] +name = "askama_macros" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "236ce20b77cb13506eaf5024899f4af6e12e8825f390bd943c4c37fd8f322e46" +dependencies = [ + "askama_derive", +] + +[[package]] +name = "askama_parser" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c63392767bb2df6aa65a6e1e3b80fd89bb7af6d58359b924c0695620f1512e" +dependencies = [ + "rustc-hash", + "unicode-ident", + "winnow", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "bstr" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" + +[[package]] +name = "cc" +version = "1.2.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "char_index" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ef8669476802b7127a0a97612a0c34113e949ee65c695e4ac259f1f49aaa25" + +[[package]] +name = "chrono" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-link", +] + +[[package]] +name = "clap" +version = "4.5.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", + "terminal_size", +] + +[[package]] +name = "clap_complete" +version = "4.5.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "430b4dc2b5e3861848de79627b2bedc9f3342c7da5173a14eaa5d0f8dc18ae5d" +dependencies = [ + "clap", + "clap_lex", + "is_executable", + "shlex", +] + +[[package]] +name = "clap_derive" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +dependencies = [ + "anstyle", + "heck", + "proc-macro2", + "pulldown-cmark", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" + +[[package]] +name = "color-print" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3aa954171903797d5623e047d9ab69d91b493657917bdfb8c2c80ecaf9cdb6f4" +dependencies = [ + "color-print-proc-macro", +] + +[[package]] +name = "color-print-proc-macro" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692186b5ebe54007e45a59aea47ece9eb4108e141326c304cdc91699a7118a22" +dependencies = [ + "nom", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "config" +version = "0.15.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30fa8254caad766fc03cb0ccae691e14bf3bd72bfff27f72802ce729551b3d6" +dependencies = [ + "convert_case 0.6.0", + "pathdiff", + "serde_core", + "toml", + "winnow", +] + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "coolor" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "980c2afde4af43d6a05c5be738f9eae595cff86dce1f38f88b95058a98c027f3" +dependencies = [ + "crossterm", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "crokey" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51360853ebbeb3df20c76c82aecf43d387a62860f1a59ba65ab51f00eea85aad" +dependencies = [ + "crokey-proc_macros", + "crossterm", + "once_cell", + "serde", + "strict", +] + +[[package]] +name = "crokey-proc_macros" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf1a727caeb5ee5e0a0826a97f205a9cf84ee964b0b48239fef5214a00ae439" +dependencies = [ + "crossterm", + "proc-macro2", + "quote", + "strict", + "syn", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.10.0", + "crossterm_winapi", + "derive_more", + "document-features", + "mio", + "parking_lot", + "rustix", + "signal-hook 0.3.18", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "defer-drop" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f613ec9fa66a6b28cdb1842b27f9adf24f39f9afc4dcdd9fdecee4aca7945c57" +dependencies = [ + "crossbeam-channel", + "once_cell", +] + +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derive_builder" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" +dependencies = [ + "derive_builder_core", + "syn", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case 0.10.0", + "proc-macro2", + "quote", + "rustc_version", + "syn", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.2", + "windows-sys 0.61.2", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users 0.4.6", + "winapi", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "dotfiles" +version = "0.1.0" +dependencies = [ + "worktrunk", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "east-asian-width" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8c47de0fcde8bd09c98fc22e4ea10ed14b9c05bf02c309e1e743aee7d0d9f6" + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "env_filter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_home" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "etcetera" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de48cc4d1c1d97a20fd819def54b890cadde72ed3ad0c614822a0a433361be96" +dependencies = [ + "cfg-if", + "windows-sys 0.61.2", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "fuzzy-matcher" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" +dependencies = [ + "thread_local", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "globset" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "if_chain" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd62e6b5e86ea8eeeb8db1de02880a6abc01a397b2ebb64b5d74ac255318f5cb" + +[[package]] +name = "ignore" +version = "0.4.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "indexmap" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown 0.16.1", + "serde", + "serde_core", +] + +[[package]] +name = "is_executable" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baabb8b4867b26294d818bf3f651a454b6901431711abb96e296245888d6e8c4" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "jiff" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", +] + +[[package]] +name = "jiff-static" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "js-sys" +version = "0.3.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lazy-regex" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5c13b6857ade4c8ee05c3c3dc97d2ab5415d691213825b90d3211c425c1f907" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a95c68db5d41694cea563c86a4ba4dc02141c16ef64814108cb23def4d5438" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.180" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" + +[[package]] +name = "libredox" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +dependencies = [ + "bitflags 2.10.0", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "minijinja" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ea9ac0a51fb5112607099560fdf0f90366ab088a2a9e6e8ae176794e9806aa" +dependencies = [ + "serde", +] + +[[package]] +name = "minimad" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8b688969b16915f3ecadc7829d5b7779dee4977e503f767f34136803d5c06f" +dependencies = [ + "once_cell", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "mio" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "normalize-path" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5438dd2b2ff4c6df6e1ce22d825ed2fa93ee2922235cc45186991717f0a892d" + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "osc8" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2d2086a3a477709f0208181e65857a9c062064ab2b3bb9abaf64f17d148bf3" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "portable-atomic" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pulldown-cmark" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e8bbe1a966bd2f362681a44f6edce3c2310ac21e4d5067a6e7ec396297a6ea0" +dependencies = [ + "bitflags 2.10.0", + "memchr", + "unicase", +] + +[[package]] +name = "quote" +version = "1.0.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.10.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.18", +] + +[[package]] +name = "reflink-copy" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23bbed272e39c47a095a5242218a67412a220006842558b03fe2935e8f3d7b92" +dependencies = [ + "cfg-if", + "libc", + "rustix", + "windows", +] + +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags 2.10.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "indexmap", + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_spanned" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +dependencies = [ + "serde_core", +] + +[[package]] +name = "shell-escape" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" + +[[package]] +name = "shell-quote" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb502615975ae2365825521fa1529ca7648fd03ce0b0746604e0683856ecd7e4" +dependencies = [ + "bstr", +] + +[[package]] +name = "shellexpand" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1fdf65dd6331831494dd616b30351c38e96e45921a27745cf98490458b90bb" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a37d01603c37b5466f808de79f845c7116049b0579adb70a6b7d47c1fa3a952" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" +dependencies = [ + "libc", + "mio", + "signal-hook 0.3.18", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "skim" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60e10a7f70e8e532d8780d88210055e15e12d0df431bf5dab7bb1ed22b6fb4f2" +dependencies = [ + "beef", + "bitflags 1.3.2", + "chrono", + "clap", + "clap_complete", + "crossbeam", + "defer-drop", + "derive_builder", + "env_logger", + "fuzzy-matcher", + "indexmap", + "log", + "nix 0.29.0", + "rand", + "rayon", + "regex", + "shell-quote", + "shlex", + "skim-common", + "skim-tuikit", + "time", + "timer", + "unicode-width 0.2.2", + "vte 0.15.0", + "which 7.0.3", +] + +[[package]] +name = "skim-common" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8312ae7ca1a5883e68042b9c6bce05bfc12f06b814ecfda06c34abfb6c88175" + +[[package]] +name = "skim-tuikit" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb54242783b4234134359fea4d11f26879c49ace6c00c5d402fd04a5ab2ad7bd" +dependencies = [ + "bitflags 1.3.2", + "lazy_static", + "log", + "nix 0.29.0", + "skim-common", + "term", + "unicode-width 0.2.2", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" + +[[package]] +name = "strict" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42444fea5b87a39db4218d9422087e66a85d0e7a0963a439b07bcdf91804006" + +[[package]] +name = "string-width" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f00d94d660cfa7bf3669352ebe9e06cc0351e0c9e696a31d051a54fa4bbb2b5" +dependencies = [ + "east-asian-width", + "regex", + "strip-ansi-escapes", + "unicode-segmentation", +] + +[[package]] +name = "strip-ansi-escapes" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" +dependencies = [ + "vte 0.14.1", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "supports-hyperlinks" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e396b6523b11ccb83120b115a0b7366de372751aa6edf19844dfb13a6af97e91" + +[[package]] +name = "syn" +version = "2.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synoptic" +version = "2.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3961017ab3836f3d19579098fae565969c5e7c32c66d746bc706cfbbb047e080" +dependencies = [ + "char_index", + "if_chain", + "nohash-hasher", + "regex", + "unicode-width 0.2.2", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "termimad" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "889a9370996b74cf46016ce35b96c248a9ac36d69aab1d112b3e09bc33affa49" +dependencies = [ + "coolor", + "crokey", + "crossbeam", + "lazy-regex", + "minimad", + "serde", + "thiserror 2.0.18", + "unicode-width 0.1.14", +] + +[[package]] +name = "terminal_size" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" +dependencies = [ + "rustix", + "windows-sys 0.60.2", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "time" +version = "0.3.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9e442fc33d7fdb45aa9bfeb312c095964abdf596f7567261062b2a7107aaabd" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b36ee98fd31ec7426d599183e8fe26932a8dc1fb76ddb6214d05493377d34ca" + +[[package]] +name = "time-macros" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e552d1249bf61ac2a52db88179fd0673def1e1ad8243a00d9ec9ed71fee3dd" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "timer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31d42176308937165701f50638db1c31586f183f1aab416268216577aec7306b" +dependencies = [ + "chrono", +] + +[[package]] +name = "toml" +version = "0.9.11+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" +dependencies = [ + "indexmap", + "serde_core", + "serde_spanned", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.24.0+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c740b185920170a6d9191122cafef7010bd6270a3824594bff6784c04d7f09e" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.6+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +dependencies = [ + "winnow", +] + +[[package]] +name = "toml_writer" +version = "1.0.6+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" + +[[package]] +name = "tree-sitter" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78f873475d258561b06f1c595d93308a7ed124d9977cb26b148c2084a4a3cc87" +dependencies = [ + "cc", + "regex", + "regex-syntax", + "serde_json", + "streaming-iterator", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-bash" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5ec769279cc91b561d3df0d8a5deb26b0ad40d183127f409494d6d8fc53062" +dependencies = [ + "cc", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-highlight" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc5f880ad8d8f94e88cb81c3557024cf1a8b75e3b504c50481ed4f5a6006ff3" +dependencies = [ + "regex", + "streaming-iterator", + "thiserror 2.0.18", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-language" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae62f7eae5eb549c71b76658648b72cc6111f2d87d24a1e31fa907f4943e3ce" + +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "vergen" +version = "9.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b849a1f6d8639e8de261e81ee0fc881e3e3620db1af9f2e0da015d4382ceaf75" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", + "time", + "vergen-lib 9.1.0", +] + +[[package]] +name = "vergen-gitcl" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9dfc1de6eb2e08a4ddf152f1b179529638bedc0ea95e6d667c014506377aefe" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", + "time", + "vergen", + "vergen-lib 0.1.6", +] + +[[package]] +name = "vergen-lib" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b07e6010c0f3e59fcb164e0163834597da68d1f864e2b8ca49f74de01e9c166" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", +] + +[[package]] +name = "vergen-lib" +version = "9.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b34a29ba7e9c59e62f229ae1932fb1b8fb8a6fdcc99215a641913f5f5a59a569" +dependencies = [ + "anyhow", + "derive_builder", + "rustversion", +] + +[[package]] +name = "vte" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" +dependencies = [ + "arrayvec", + "memchr", +] + +[[package]] +name = "vte" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5924018406ce0063cd67f8e008104968b74b563ee1b85dde3ed1f7cb87d3dbd" +dependencies = [ + "arrayvec", + "memchr", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "which" +version = "7.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d643ce3fd3e5b54854602a080f34fb10ab75e0b813ee32d00ca2b44fa74762" +dependencies = [ + "either", + "env_home", + "rustix", + "winsafe", +] + +[[package]] +name = "which" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" +dependencies = [ + "env_home", + "rustix", + "winsafe", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core", + "windows-link", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +dependencies = [ + "memchr", +] + +[[package]] +name = "winsafe" +version = "0.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" + +[[package]] +name = "worktrunk" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3be7945dc3956bdabf1f22a84388caf857d50bafdb87b372a7ae685854ed63a" +dependencies = [ + "ansi-str", + "anstream", + "anstyle", + "anyhow", + "askama", + "chrono", + "clap", + "clap_complete", + "color-print", + "config", + "crossbeam-channel", + "crossterm", + "dashmap", + "dirs", + "dunce", + "env_logger", + "etcetera", + "fs2", + "home", + "ignore", + "indexmap", + "log", + "minijinja", + "nix 0.30.1", + "normalize-path", + "once_cell", + "osc8", + "pathdiff", + "rayon", + "reflink-copy", + "regex", + "serde", + "serde_json", + "shell-escape", + "shellexpand", + "shlex", + "signal-hook 0.4.1", + "skim", + "strum", + "supports-hyperlinks", + "synoptic", + "termimad", + "terminal_size", + "toml", + "toml_edit", + "tree-sitter", + "tree-sitter-bash", + "tree-sitter-highlight", + "unicode-width 0.2.2", + "urlencoding", + "vergen-gitcl", + "which 8.0.0", + "wrap-ansi", +] + +[[package]] +name = "wrap-ansi" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "848bc403c11fc8f4d6597f2bad2ce43111fbf6757c7dd7d62590199e8dade5fd" +dependencies = [ + "ansi-escape-sequences", + "regex", + "string-width", + "thiserror 2.0.18", +] + +[[package]] +name = "zerocopy" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f63c051f4fe3c1509da62131a678643c5b6fbdc9273b2b79d4378ebda003d2" diff --git a/Cargo.toml b/Cargo.toml index 90af43a53..4ab30658a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,5 +3,8 @@ name = "dotfiles" version = "0.1.0" edition = "2021" +[lib] +path = "lib.rs" + [dependencies] worktrunk = "0.15.3" diff --git a/Makefile b/Makefile index b83bab1d6..d0c8243d1 100644 --- a/Makefile +++ b/Makefile @@ -162,6 +162,24 @@ test: neovim-test shell-test ## Run all tests (neovim + shell). .PHONY: update update: nix-update shell-update neovim-update ## Update Nix flake and configurations. +##@ Upgrade + +.PHONY: upgrade +upgrade: upgrade-overlays neovim-upgrade ## Upgrade overlays and Nix flake, then rebuild. + +.PHONY: upgrade-overlays +upgrade-overlays: ## Upgrade all custom overlays to latest versions. + @echo "🔄 Upgrading custom overlays..." + @if [ "$$CI" = "true" ] || [ "$$IN_DOCKER" = "true" ]; then \ + echo "⏭️ Skipping overlay upgrade in CI/Docker"; \ + else \ + ./scripts/upgrade-overlays.sh all; \ + fi + +.PHONY: upgrade-clawdbot +upgrade-clawdbot: ## Upgrade clawdbot overlay to latest release. + @./scripts/upgrade-overlays.sh clawdbot + .PHONY: dev dev: nix-develop ## Enter the Nix dev shell (alias for nix-develop). @@ -516,14 +534,14 @@ neovim-dev: ## Set up local Neovim development environment. @echo "✅ Local Neovim development environment ready" @echo "🚧 To restore the Nix-managed version, run 'make switch'" -.PHONY: neovim-update -neovim-update: ## Update Neovim plugins. +.PHONY: neovim-upgrade +neovim-upgrade: ## Update Neovim plugins. @echo "📦 Updating neovim plugins..." @nvim --headless +"lua vim.pack.update()" +qa @echo "✅ Neovim plugins updated" .PHONY: neovim-sync -neovim-sync: ## Sync Neovim plugins. +neovim-sync: neovim-upgrade ## Sync Neovim plugins. @echo "🔄 Syncing neovim plugins..." @nvim --headless +"lua vim.cmd('source ' .. vim.fn.stdpath('config') .. '/init.lua')" +qa @echo "✅ Neovim plugins synced" @@ -738,13 +756,16 @@ shell-test-dev: ## Run shell tests inside the Nix dev shell (mirrors CI). .PHONY: shell-check shell-check: ## Run ShellCheck on shell scripts. @echo "🔍 Running ShellCheck..." - @find . -name '*.sh' -not -path './node_modules/*' -not -path './.git/*' -not -path './result/*' | xargs shellcheck + @find . -name '*.sh' -not -path './node_modules/*' -not -path './.git/*' -not -path './result/*' -not -path './.venv/*' | xargs shellcheck .PHONY: shell-check-dev shell-check-dev: ## Run ShellCheck inside the Nix dev shell (mirrors CI). @echo "🔍 Running ShellCheck inside the Nix dev shell..." @DEVENV_ROOT=$(CURDIR) $(NIX_ALLOW_UNFREE) $(NIX_EXEC) develop $(NIX_FLAGS) .# --command $(MAKE) shell-check +.PHONY: shell-lint +shell-lint: shell-check ## Lint shell scripts (alias for shell-check). + ##@ Doppler .PHONY: doppler-sync diff --git a/config/claude/settings.json b/config/claude/settings.json index 93e5e3aab..5841da994 100644 --- a/config/claude/settings.json +++ b/config/claude/settings.json @@ -13,7 +13,8 @@ "typescript-lsp@claude-plugins-official": true, "plan-export@cc-marketplace": true, "safety-net@cc-marketplace": true, - "worktrunk@worktrunk": true + "worktrunk@worktrunk": true, + "claude-mem@claude-mem": true }, "extraKnownMarketplaces": { "cc-marketplace": { @@ -27,6 +28,12 @@ "source": "github", "repo": "max-sixty/worktrunk" } + }, + "claude-mem": { + "source": { + "source": "github", + "repo": "thedotmack/claude-mem" + } } }, "permissions": { diff --git a/dotagents b/dotagents index d134b741c..c705529f6 160000 --- a/dotagents +++ b/dotagents @@ -1 +1 @@ -Subproject commit d134b741c5e51b9779ffd7bb746c2bfab375027e +Subproject commit c705529f6a54d963507a4cfa092275ae32096e45 diff --git a/flake.lock b/flake.lock index 9cb992a7e..8605282dd 100644 --- a/flake.lock +++ b/flake.lock @@ -93,11 +93,11 @@ ] }, "locked": { - "lastModified": 1768597968, - "narHash": "sha256-WdkoFB2QyMkZOmsi/08394clBRyEtNseH+jYGUs9eDU=", + "lastModified": 1768815419, + "narHash": "sha256-Kpol6rStnF9X2AJ35x8A7/dMF6eiJatktRMM9MOtchQ=", "owner": "cachix", "repo": "devenv", - "rev": "92ad9c70fad164e8f4a3656dec91717a5c42cd98", + "rev": "81552494542f06f8eda3da2b1f0b08f3ce79fa60", "type": "github" }, "original": { @@ -291,11 +291,11 @@ ] }, "locked": { - "lastModified": 1768703115, - "narHash": "sha256-JAXjGiDWlQJSwniCYlnEwU/2KjI0bJ/lV0gpyD9UjxE=", + "lastModified": 1768836546, + "narHash": "sha256-nJZkTamcXXMW+SMYiGFB6lB8l0aJw0xjssfN8xYd/Fs=", "owner": "nix-community", "repo": "home-manager", - "rev": "05fd3bababe5924f9a6128285e7cf6c67d45f3c0", + "rev": "b56c5ad14fcf8b5bc887463552483bf000ca562a", "type": "github" }, "original": { @@ -349,11 +349,11 @@ ] }, "locked": { - "lastModified": 1768694683, - "narHash": "sha256-pB512IZ8jDu8BQ45gv3UoVCwLUoPDM82Tg5wIBb93bo=", + "lastModified": 1768781101, + "narHash": "sha256-p3guh/Vx4Pf+Ggk3X69SPTJot6emv6rgKpoBLNO61Ag=", "owner": "nix-community", "repo": "neovim-nightly-overlay", - "rev": "0dc0043f996b3583a21011765a53109db5a9d016", + "rev": "e90cb6d441572fc05ffb8769051d59f1d2d3269e", "type": "github" }, "original": { @@ -365,11 +365,11 @@ "neovim-src": { "flake": false, "locked": { - "lastModified": 1768656175, - "narHash": "sha256-qnBvj3GvyF757Z8qJLjcVk/NW5p1wldeLHLdQPbehOM=", + "lastModified": 1768778690, + "narHash": "sha256-XrWZBeH0GnvnQzE9Xmm69sesSGB2h5uVLuTmLA7k1p0=", "owner": "neovim", "repo": "neovim", - "rev": "a5e5ec8910ea35ebb86dcba7f58333d9d4caca47", + "rev": "30259d6af79e731491e6b12d815893b1b130b52b", "type": "github" }, "original": { @@ -428,11 +428,11 @@ ] }, "locked": { - "lastModified": 1768692677, - "narHash": "sha256-mQz7d+WDtGoZCs71RsNQ1WXNO/zhjf5pJTE7DCNCRuM=", + "lastModified": 1768844198, + "narHash": "sha256-3OrbUuA17OaQK8tK44zfmWP74wrexb9EG12oGQ+2XKI=", "owner": "clawdbot", "repo": "nix-clawdbot", - "rev": "9db24dde7db4f8d4d7b989effa4b1a23412121be", + "rev": "0f61d7b649490362627201484f98677e4082e19c", "type": "github" }, "original": { @@ -448,11 +448,11 @@ ] }, "locked": { - "lastModified": 1768561867, - "narHash": "sha256-prGOZ+w3pZfGTRxworKcJliCNsewF0L4HUPjgU/6eaw=", + "lastModified": 1768764703, + "narHash": "sha256-5ulSDyOG1U+1sJhkJHYsUOWEsmtLl97O0NTVMvgIVyc=", "owner": "LnL7", "repo": "nix-darwin", - "rev": "8b720b9662d4dd19048664b7e4216ce530591adc", + "rev": "0fc4e7ac670a0ed874abacf73c4b072a6a58064b", "type": "github" }, "original": { @@ -559,11 +559,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1768569498, - "narHash": "sha256-bB6Nt99Cj8Nu5nIUq0GLmpiErIT5KFshMQJGMZwgqUo=", + "lastModified": 1768783163, + "narHash": "sha256-tLj4KcRDLakrlpvboTJDKsrp6z2XLwyQ4Zmo+w8KsY4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "be5afa0fcb31f0a96bf9ecba05a516c66fcd8114", + "rev": "bde09022887110deb780067364a0818e89258968", "type": "github" }, "original": { @@ -581,11 +581,11 @@ ] }, "locked": { - "lastModified": 1768703026, - "narHash": "sha256-vVuhxXAllBRvEE8mwRPWBsdG75KQn55Y/JFSXbHZDAw=", + "lastModified": 1768840132, + "narHash": "sha256-G0ZqM/h33u+VcGiD0ym+/+Bce6UzVMqhOHfeWY3GZhQ=", "owner": "nix-community", "repo": "NUR", - "rev": "6b1c496bbc5d636862ac252b50ebd0a7cd2175a1", + "rev": "a895fe3dffae99b32a21bd4677a400e20660b5c6", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 48df53a83..820d95818 100644 --- a/flake.nix +++ b/flake.nix @@ -58,149 +58,160 @@ ... }@inputs: - flake-parts.lib.mkFlake { inherit inputs; } { - systems = [ - "aarch64-darwin" - "aarch64-linux" - "x86_64-linux" - ]; + let + inputsWithLib = inputs // { + env = import ./lib/env.nix; + host = import ./lib/host.nix; + }; + in + flake-parts.lib.mkFlake { inputs = inputsWithLib; } ( + let + inputs = inputsWithLib; + in + { + systems = [ + "aarch64-darwin" + "aarch64-linux" + "x86_64-linux" + ]; - imports = [ - treefmt-nix.flakeModule - devenv.flakeModule - ]; + imports = [ + treefmt-nix.flakeModule + devenv.flakeModule + ]; - flake = - let - mkDarwin = - args: - let - darwin-modules = import ./hosts/darwin ({ inherit inputs; } // args); - in - inputs.nix-darwin.lib.darwinSystem { - system = "aarch64-darwin"; - inherit (darwin-modules) specialArgs modules; - }; - in - { - darwinConfigurations = { - aarch64-darwin = mkDarwin { username = "shunkakinoki"; }; - runner = mkDarwin { - isRunner = true; - username = "runner"; - }; - galactica = import ./named-hosts/galactica { - inherit inputs; - username = "shunkakinoki"; - }; - }; - nixosConfigurations = { - x86_64-linux = import ./hosts/nixos { - inherit inputs; - username = "shunkakinoki"; - }; - runner = import ./hosts/nixos { - inherit inputs; - isRunner = true; - username = "runner"; - }; - }; - homeConfigurations = { - "ubuntu@x86_64-linux" = import ./hosts/linux { - inherit inputs; - username = "ubuntu"; - system = "x86_64-linux"; - }; - "root@x86_64-linux" = import ./hosts/linux { - inherit inputs; - username = "root"; - system = "x86_64-linux"; - }; - "root@aarch64-linux" = import ./hosts/linux { - inherit inputs; - username = "root"; - system = "aarch64-linux"; - }; - "runner@x86_64-linux" = import ./hosts/linux { - inherit inputs; - isRunner = true; - username = "runner"; - system = "x86_64-linux"; - }; - "runner@aarch64-linux" = import ./hosts/linux { - inherit inputs; - isRunner = true; - username = "runner"; - system = "aarch64-linux"; - }; - kyber = import ./named-hosts/kyber { - inherit inputs; - username = "ubuntu"; - system = "x86_64-linux"; + flake = + let + mkDarwin = + args: + let + darwin-modules = import ./hosts/darwin ({ inherit inputs; } // args); + in + inputs.nix-darwin.lib.darwinSystem { + system = "aarch64-darwin"; + inherit (darwin-modules) specialArgs modules; + }; + in + { + darwinConfigurations = { + aarch64-darwin = mkDarwin { username = "shunkakinoki"; }; + runner = mkDarwin { + isRunner = true; + username = "runner"; + }; + galactica = import ./named-hosts/galactica { + inherit inputs; + username = "shunkakinoki"; + }; }; - }; - }; - - perSystem = - { - config, - system, - ... - }: - let - inherit (inputs.nixpkgs) lib; - devenvRoot = - let - envRoot = builtins.getEnv "DEVENV_ROOT"; - in - if envRoot != "" then envRoot else builtins.toString ./.; - pkgs = import inputs.nixpkgs { - inherit system; - config = import ./lib/nixpkgs-config.nix { - nixpkgsLib = inputs.nixpkgs.lib; + nixosConfigurations = { + x86_64-linux = import ./hosts/nixos { + inherit inputs; + username = "shunkakinoki"; + }; + runner = import ./hosts/nixos { + inherit inputs; + isRunner = true; + username = "runner"; + }; }; - overlays = (import ./overlays) { inherit inputs; }; - }; - treefmtToml = builtins.fromTOML (builtins.readFile ./treefmt.toml); - treefmtSettings = lib.recursiveUpdate treefmtToml { - formatter = { - nix = (treefmtToml.formatter.nix or { }) // { - command = lib.getExe pkgs.nixfmt-rfc-style; + homeConfigurations = { + "ubuntu@x86_64-linux" = import ./hosts/linux { + inherit inputs; + username = "ubuntu"; + system = "x86_64-linux"; }; - biome = (treefmtToml.formatter.biome or { }) // { - command = lib.getExe pkgs.biome; + "root@x86_64-linux" = import ./hosts/linux { + inherit inputs; + username = "root"; + system = "x86_64-linux"; }; - json = (treefmtToml.formatter.json or { }) // { - command = lib.getExe pkgs.jsonfmt; + "root@aarch64-linux" = import ./hosts/linux { + inherit inputs; + username = "root"; + system = "aarch64-linux"; }; - shell = (treefmtToml.formatter.shell or { }) // { - command = lib.getExe pkgs.shfmt; + "runner@x86_64-linux" = import ./hosts/linux { + inherit inputs; + isRunner = true; + username = "runner"; + system = "x86_64-linux"; }; - lua = (treefmtToml.formatter.lua or { }) // { - command = lib.getExe pkgs.stylua; + "runner@aarch64-linux" = import ./hosts/linux { + inherit inputs; + isRunner = true; + username = "runner"; + system = "aarch64-linux"; + }; + kyber = import ./named-hosts/kyber { + inherit inputs; + username = "ubuntu"; + system = "x86_64-linux"; }; }; }; - in - { - # Force this attribute so devenv's deprecated helper packages don't surface during flake checks. - packages = inputs.nixpkgs.lib.mkForce { - # Use nixpkgs-provided binary to avoid rebuilding cachi. - devenv-cli = pkgs.devenv; - }; - devenv.shells.default = (import ./devenv.nix) { inherit pkgs; } // { - devenv.root = devenvRoot; - }; + perSystem = + { + config, + system, + ... + }: + let + inherit (inputs.nixpkgs) lib; + devenvRoot = + let + envRoot = builtins.getEnv "DEVENV_ROOT"; + in + if envRoot != "" then envRoot else builtins.toString ./.; + pkgs = import inputs.nixpkgs { + inherit system; + config = import ./lib/nixpkgs-config.nix { + nixpkgsLib = inputs.nixpkgs.lib; + }; + overlays = (import ./overlays) { inherit inputs; }; + }; + treefmtToml = builtins.fromTOML (builtins.readFile ./treefmt.toml); + treefmtSettings = lib.recursiveUpdate treefmtToml { + formatter = { + nix = (treefmtToml.formatter.nix or { }) // { + command = lib.getExe pkgs.nixfmt-rfc-style; + }; + biome = (treefmtToml.formatter.biome or { }) // { + command = lib.getExe pkgs.biome; + }; + json = (treefmtToml.formatter.json or { }) // { + command = lib.getExe pkgs.jsonfmt; + }; + shell = (treefmtToml.formatter.shell or { }) // { + command = lib.getExe pkgs.shfmt; + }; + lua = (treefmtToml.formatter.lua or { }) // { + command = lib.getExe pkgs.stylua; + }; + }; + }; + in + { + # Force this attribute so devenv's deprecated helper packages don't surface during flake checks. + packages = inputs.nixpkgs.lib.mkForce { + # Use nixpkgs-provided binary to avoid rebuilding cachi. + devenv-cli = pkgs.devenv; + }; - treefmt = { - projectRootFile = "flake.nix"; - programs = { - taplo.enable = true; - yamlfmt.enable = true; + devenv.shells.default = (import ./devenv.nix) { inherit pkgs; } // { + devenv.root = devenvRoot; + }; + + treefmt = { + projectRootFile = "flake.nix"; + programs = { + taplo.enable = true; + yamlfmt.enable = true; + }; + settings = treefmtSettings; }; - settings = treefmtSettings; }; - }; - }; + } + ); } diff --git a/home-manager/modules/cargo-globals/install-cargo-globals.sh b/home-manager/modules/cargo-globals/install-cargo-globals.sh index e071f15b1..b3cd5386c 100755 --- a/home-manager/modules/cargo-globals/install-cargo-globals.sh +++ b/home-manager/modules/cargo-globals/install-cargo-globals.sh @@ -29,8 +29,6 @@ if ! command -v jq &>/dev/null; then exit 0 fi -echo "Installing cargo global packages from Cargo.toml..." - # Parse dependencies from standard Cargo.toml format DEPS=$(dasel -f "$CARGO_TOML" -r toml -w json 'dependencies' 2>/dev/null | jq -r 'to_entries[] | "\(.key)@\(.value)"' 2>/dev/null || true) @@ -39,10 +37,18 @@ if [ -z "$DEPS" ]; then exit 0 fi +# Get currently installed packages (cargo's native cache) +INSTALLED=$(cargo install --list 2>/dev/null || true) + echo "$DEPS" | while read -r pkg; do CRATE=$(echo "$pkg" | cut -d'@' -f1) VERSION=$(echo "$pkg" | cut -d'@' -f2) if [ -n "$CRATE" ]; then + # Check if already installed at this version (format: "crate_name v1.2.3:") + if echo "$INSTALLED" | grep -q "^${CRATE} v${VERSION}:"; then + echo "$CRATE@$VERSION already installed, skipping" + continue + fi echo "Installing $CRATE@$VERSION..." cargo install "$CRATE" --version "$VERSION" --locked 2>/dev/null || cargo install "$CRATE" --version "$VERSION" 2>/dev/null || @@ -50,4 +56,4 @@ echo "$DEPS" | while read -r pkg; do fi done -echo "cargo globals installation complete" +echo "cargo globals check complete" diff --git a/home-manager/modules/clawdbot/default.nix b/home-manager/modules/clawdbot/default.nix index 873295219..8ffdd5628 100644 --- a/home-manager/modules/clawdbot/default.nix +++ b/home-manager/modules/clawdbot/default.nix @@ -1,12 +1,12 @@ { config, lib, + inputs, pkgs, ... }: let - env = import ../../../lib/env.nix; - host = import ../../../lib/host.nix; + inherit (inputs) env host; homeDir = config.home.homeDirectory; clawdbotDir = "${homeDir}/.config/clawdbot"; @@ -79,6 +79,23 @@ lib.mkIf (!env.isCI) { '' ); + # Clean stale port-guard entries on activation (macOS remote mode only) + # The Clawdbot.app has a bug where dead SSH tunnel PIDs remain in port-guard.json, + # preventing new tunnels from being created. This cleans up stale entries. + home.activation.clawdbotCleanPortGuard = + lib.mkIf (lib ? hm && lib.hm ? dag && pkgs.stdenv.isDarwin && !host.isKyber) + ( + lib.hm.dag.entryAfter [ "writeBoundary" ] '' + PORT_GUARD="${homeDir}/Library/Application Support/Clawdbot/port-guard.json" + if [ -f "$PORT_GUARD" ]; then + # Filter out entries for port 18789 (gateway) - our launchd tunnel handles this + ${pkgs.jq}/bin/jq '[.[] | select(.port != 18789)]' "$PORT_GUARD" > "$PORT_GUARD.tmp" && \ + ${pkgs.coreutils}/bin/mv "$PORT_GUARD.tmp" "$PORT_GUARD" + echo "Cleaned stale gateway entries from port-guard.json" + fi + '' + ); + # Auto-start Clawdbot.app on login (galactica only) # App is installed to /Applications/Nix Apps/ via nix-darwin launchd.agents.clawdbot-app = lib.mkIf (pkgs.stdenv.isDarwin && host.isGalactica) { @@ -95,6 +112,36 @@ lib.mkIf (!env.isCI) { }; }; + # SSH tunnel to kyber gateway for remote mode (non-kyber macOS only) + # The Clawdbot.app has a bug where it doesn't reliably create the gateway tunnel, + # so we maintain a persistent SSH tunnel via launchd as a workaround. + launchd.agents.clawdbot-tunnel = lib.mkIf (pkgs.stdenv.isDarwin && !host.isKyber) { + enable = true; + config = { + Label = "com.clawdbot.tunnel"; + ProgramArguments = [ + "/usr/bin/ssh" + "-N" + "-o" + "BatchMode=yes" + "-o" + "ExitOnForwardFailure=yes" + "-o" + "ServerAliveInterval=15" + "-o" + "ServerAliveCountMax=3" + "-L" + "18789:127.0.0.1:18789" + "-i" + "${homeDir}/.ssh/id_ed25519" + "ubuntu@kyber.tail950b36.ts.net" + ]; + RunAtLoad = true; + KeepAlive = true; + StandardErrorPath = "/tmp/clawdbot-tunnel.err.log"; + }; + }; + programs.clawdbot = { # App installed via nix-darwin to /Applications/Nix Apps/ installApp = false; diff --git a/home-manager/packages/default.nix b/home-manager/packages/default.nix index a2d74b2e1..04c6ff024 100644 --- a/home-manager/packages/default.nix +++ b/home-manager/packages/default.nix @@ -1,17 +1,17 @@ -let - inherit (import ../../lib/env.nix) isCI; -in { pkgs, inputs, }: +let + inherit (inputs.env) isCI; +in with pkgs; [ inputs.agenix.packages.${stdenv.hostPlatform.system}.default pkgs.nur.repos.charmbracelet.crush age aichat - # aider-chat # FIXME: pyarrow 20.0.0 has malloc issues on macOS, uncomment when fixed + aider-chat argocd ast-grep awscli @@ -69,7 +69,7 @@ with pkgs; navi postgresql procs - # qwen-code # FIXME: npmDepsHash is stale in nixpkgs, uncomment when fixed + qwen-code ripgrep sccache sd diff --git a/home-manager/programs/fish/functions/_coxe_function.fish b/home-manager/programs/fish/functions/_coxe_function.fish index 9a3892db7..e9a423b27 100644 --- a/home-manager/programs/fish/functions/_coxe_function.fish +++ b/home-manager/programs/fish/functions/_coxe_function.fish @@ -3,9 +3,9 @@ function _coxe_function --description "Run Codex with a free-form prompt" # Usage: cxe [] if test (count $argv) -eq 0 - codex --model 'gpt-5-codex' --full-auto -c model_reasoning_summary_format=experimental + codex --model 'gpt-5.2-codex' --full-auto -c model_reasoning_summary_format=experimental else set -l prompt (string join " " -- $argv) - codex --model 'gpt-5-codex' --full-auto -c model_reasoning_summary_format=experimental -- "$prompt" + codex --model 'gpt-5.2-codex' --full-auto -c model_reasoning_summary_format=experimental -- "$prompt" end end diff --git a/home-manager/programs/fish/functions/_coxeh_function.fish b/home-manager/programs/fish/functions/_coxeh_function.fish index 5a6b579d5..101cfa758 100644 --- a/home-manager/programs/fish/functions/_coxeh_function.fish +++ b/home-manager/programs/fish/functions/_coxeh_function.fish @@ -8,5 +8,5 @@ function _coxeh_function --description "Run Codex headlessly with a prompted inp return 1 end - codex --model 'gpt-5-codex' --full-auto -c model_reasoning_summary_format=experimental -- "$prompt" + codex --model 'gpt-5.2-codex' --full-auto -c model_reasoning_summary_format=experimental -- "$prompt" end diff --git a/hosts/nixos/default.nix b/hosts/nixos/default.nix index 50ddab6d7..64fd33521 100644 --- a/hosts/nixos/default.nix +++ b/hosts/nixos/default.nix @@ -120,6 +120,7 @@ nixpkgs.lib.nixosSystem { home-manager.nixosModules.home-manager { home-manager.backupFileExtension = "hm-backup"; + home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users."${username}" = import ../../home-manager { diff --git a/lib.rs b/lib.rs new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/lib.rs @@ -0,0 +1 @@ + diff --git a/nix-darwin/default.nix b/nix-darwin/default.nix index 9ed78773d..fb4c0c196 100644 --- a/nix-darwin/default.nix +++ b/nix-darwin/default.nix @@ -1,13 +1,13 @@ { pkgs, lib, + inputs, isRunner, username, ... }: let - env = import ../lib/env.nix; - host = import ../lib/host.nix; + inherit (inputs) env host; dock = import ./config/dock.nix; fonts = import ./config/fonts.nix { inherit pkgs; }; homebrew = import ./config/homebrew.nix { inherit isRunner; }; diff --git a/pyproject.toml b/pyproject.toml index 32ec077b1..ef9c02e26 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,7 +2,7 @@ name = "dotfiles" version = "0.1.0" requires-python = ">=3.14.2" -dependencies = ["ruff>=0.14.13"] +dependencies = ["mistral-vibe>=1.3.5", "ruff>=0.14.13"] [tool.uv] dev-dependencies = [] diff --git a/scripts/upgrade-overlays.sh b/scripts/upgrade-overlays.sh new file mode 100755 index 000000000..cfd905a52 --- /dev/null +++ b/scripts/upgrade-overlays.sh @@ -0,0 +1,210 @@ +#!/usr/bin/env bash +# Extensible overlay upgrade script +# Usage: ./scripts/upgrade-overlays.sh + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +OVERLAY_FILE="$REPO_ROOT/overlays/default.nix" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# --- Common utilities --- + +log_info() { + echo -e "${GREEN}$1${NC}" +} + +log_warn() { + echo -e "${YELLOW}$1${NC}" +} + +log_error() { + echo -e "${RED}$1${NC}" +} + +check_dependencies() { + local missing=() + for cmd in gh nix-prefetch-url nix jq; do + if ! command -v "$cmd" &>/dev/null; then + missing+=("$cmd") + fi + done + if [ ${#missing[@]} -ne 0 ]; then + log_error "Missing required dependencies: ${missing[*]}" + exit 1 + fi +} + +fetch_latest_release() { + local owner="$1" repo="$2" + gh api "repos/$owner/$repo/releases/latest" --jq '.tag_name' +} + +get_tag_commit() { + local owner="$1" repo="$2" tag="$3" + # First try to get the commit from the tag ref + local ref_type ref_sha + ref_type=$(gh api "repos/$owner/$repo/git/refs/tags/$tag" --jq '.object.type' 2>/dev/null || echo "") + ref_sha=$(gh api "repos/$owner/$repo/git/refs/tags/$tag" --jq '.object.sha' 2>/dev/null || echo "") + + if [ "$ref_type" = "commit" ]; then + echo "$ref_sha" + elif [ "$ref_type" = "tag" ]; then + # Annotated tag - need to dereference + gh api "repos/$owner/$repo/git/tags/$ref_sha" --jq '.object.sha' + else + log_error "Could not determine commit for tag $tag" + exit 1 + fi +} + +compute_source_hash() { + local url="$1" + nix-prefetch-url --unpack "$url" 2>/dev/null +} + +convert_to_sri() { + local hash="$1" + nix hash convert --hash-algo sha256 --to sri "$hash" +} + +# Platform-agnostic sed in-place +sed_inplace() { + if [[ $OSTYPE == "darwin"* ]]; then + sed -i '' "$@" + else + sed -i "$@" + fi +} + +# --- Clawdbot upgrade --- + +upgrade_clawdbot() { + log_info "📦 Fetching latest clawdbot release..." + + local tag version rev current_version + local tarball_url source_hash source_sri + local app_url app_hash app_sri + + # Get current version (macOS-compatible) + current_version=$(grep 'clawdbotVersion = "' "$OVERLAY_FILE" | head -1 | sed 's/.*clawdbotVersion = "\([^"]*\)".*/\1/' || echo "unknown") + echo " Current version: $current_version" + + # Fetch latest release + tag=$(fetch_latest_release "clawdbot" "clawdbot") + version="${tag#v}" # Remove 'v' prefix + + echo " Latest version: $version" + + if [ "$current_version" = "$version" ]; then + log_info "✅ Already on latest version ($version)" + return 0 + fi + + # Get commit SHA for the tag + echo " Fetching commit SHA for tag $tag..." + rev=$(get_tag_commit "clawdbot" "clawdbot" "$tag") + echo " Commit: $rev" + + # Compute source hash + tarball_url="https://github.com/clawdbot/clawdbot/archive/$rev.tar.gz" + echo " Computing source hash (this may take a moment)..." + source_hash=$(compute_source_hash "$tarball_url") + source_sri=$(convert_to_sri "$source_hash") + echo " Source hash: $source_sri" + + # Compute app bundle hash (macOS zip) + app_url="https://github.com/clawdbot/clawdbot/releases/download/$tag/Clawdbot-$version.zip" + echo " Computing app bundle hash..." + app_hash=$(nix-prefetch-url --unpack "$app_url" 2>/dev/null) + app_sri=$(convert_to_sri "$app_hash") + echo " App hash: $app_sri" + + # Update overlay file + echo " Updating overlays/default.nix..." + + # Update clawdbotSourceOverride + sed_inplace "s|rev = \"[^\"]*\";|rev = \"$rev\";|" "$OVERLAY_FILE" + sed_inplace "s|hash = \"sha256-[^\"]*\";|hash = \"$source_sri\";|" "$OVERLAY_FILE" + + # Update clawdbotAppOverride + sed_inplace "s|version = \"[0-9][^\"]*\";|version = \"$version\";|" "$OVERLAY_FILE" + sed_inplace "s|url = \"https://github.com/clawdbot/clawdbot/releases/download/[^\"]*\";|url = \"$app_url\";|" "$OVERLAY_FILE" + + # Update app hash (second hash in the file, after url) + # Use awk to update only the hash in clawdbotAppOverride block + awk -v new_hash="$app_sri" ' + /clawdbotAppOverride = \{/ { in_app_override = 1 } + in_app_override && /hash = "sha256-/ { + sub(/hash = "sha256-[^"]*"/, "hash = \"" new_hash "\"") + in_app_override = 0 + } + { print } + ' "$OVERLAY_FILE" >"$OVERLAY_FILE.tmp" && mv "$OVERLAY_FILE.tmp" "$OVERLAY_FILE" + + # Update clawdbotVersion + sed_inplace "s|clawdbotVersion = \"[^\"]*\";|clawdbotVersion = \"$version\";|" "$OVERLAY_FILE" + + # Update comment + sed_inplace "s|# Override clawdbot source to v[^ ]*|# Override clawdbot source to v$version|" "$OVERLAY_FILE" + sed_inplace "s|# Override clawdbot-app to v[^ ]* |# Override clawdbot-app to v$version |" "$OVERLAY_FILE" + + log_info "✅ clawdbot upgraded from $current_version to $version" + log_warn "⚠️ Note: pnpmDepsHash may need manual update after first build failure" + log_warn " Run 'make build' and check for hash mismatch errors" + echo "" + echo "📝 Review changes with 'git diff overlays/default.nix'" +} + +# --- Main --- + +usage() { + echo "Usage: $0 " + echo "" + echo "Available overlays:" + echo " clawdbot - Upgrade clawdbot overlay to latest release" + echo " all - Upgrade all overlays" + echo "" + echo "Examples:" + echo " $0 clawdbot" + echo " $0 all" +} + +main() { + local target="${1:-}" + + if [ -z "$target" ]; then + usage + exit 1 + fi + + check_dependencies + + case "$target" in + clawdbot) + upgrade_clawdbot + ;; + all) + upgrade_clawdbot + # Add more overlay upgrades here as needed: + # upgrade_other_overlay + ;; + -h | --help) + usage + ;; + *) + log_error "Unknown overlay: $target" + echo "" + usage + exit 1 + ;; + esac +} + +main "$@" diff --git a/spec/coverage_spec.sh b/spec/coverage_spec.sh index a8bf61c3a..af8da1a01 100644 --- a/spec/coverage_spec.sh +++ b/spec/coverage_spec.sh @@ -69,6 +69,10 @@ It 'has spec file for scripts/update-gitalias.sh' The path "spec/update_gitalias_spec.sh" should be exist End +It 'has spec file for scripts/upgrade-overlays.sh' +The path "spec/upgrade_overlays_spec.sh" should be exist +End + It 'has spec file for home-manager/modules/local-binaries/sync-local-binaries.sh' The path "spec/local_binaries_spec.sh" should be exist End @@ -129,7 +133,8 @@ home-manager/services/neverssl-keepalive/keepalive.sh install.sh named-hosts/kyber/rekey-galactica.sh named-hosts/kyber/setup.sh -scripts/update-gitalias.sh" +scripts/update-gitalias.sh +scripts/upgrade-overlays.sh" # Get actual scripts from git (excluding spec directory) actual_scripts=$(git ls-files '*.sh' 2>/dev/null | grep -v '^spec/' | sort) diff --git a/spec/upgrade_overlays_spec.sh b/spec/upgrade_overlays_spec.sh new file mode 100644 index 000000000..58db1a7d0 --- /dev/null +++ b/spec/upgrade_overlays_spec.sh @@ -0,0 +1,322 @@ +#!/usr/bin/env bash +# shellcheck disable=SC2329,SC2034 + +Describe 'upgrade-overlays.sh' +SCRIPT="$PWD/scripts/upgrade-overlays.sh" + +Describe 'usage and help' +It 'shows usage when called without arguments' +When run bash "$SCRIPT" +The output should include 'Usage:' +The output should include 'upgrade-overlays.sh' +The output should include 'clawdbot' +The output should include 'all' +The status should be failure +End + +It 'shows usage with --help flag' +When run bash "$SCRIPT" --help +The output should include 'Usage:' +The output should include 'Available overlays:' +The status should be success +End + +It 'shows usage with -h flag' +When run bash "$SCRIPT" -h +The output should include 'Usage:' +The status should be success +End +End + +Describe 'unknown overlay handling' +setup() { + mock_bin_setup gh nix-prefetch-url nix jq +} + +cleanup() { + mock_bin_cleanup +} + +Before 'setup' +After 'cleanup' + +It 'fails for unknown overlay' +When run bash "$SCRIPT" unknown-overlay +The output should include 'Unknown overlay: unknown-overlay' +The output should include 'Available overlays' +The status should be failure +End +End + +Describe 'dependency checking' +setup() { + TEMP_DIR=$(mktemp -d) + # Create a script that only has partial PATH + TEMP_SCRIPT="$TEMP_DIR/test-deps.sh" + cat >"$TEMP_SCRIPT" <<'SCRIPT' +#!/usr/bin/env bash +set -euo pipefail +# Override PATH to exclude tools +export PATH="/usr/bin:/bin" + +check_dependencies() { + local missing=() + for cmd in gh nix-prefetch-url nix jq; do + if ! command -v "$cmd" &>/dev/null; then + missing+=("$cmd") + fi + done + if [ ${#missing[@]} -ne 0 ]; then + echo "Missing required dependencies: ${missing[*]}" + exit 1 + fi +} +check_dependencies +SCRIPT + chmod +x "$TEMP_SCRIPT" +} + +cleanup() { + rm -rf "$TEMP_DIR" +} + +Before 'setup' +After 'cleanup' + +It 'reports missing dependencies' +When run bash "$TEMP_SCRIPT" +The output should include 'Missing required dependencies' +The status should be failure +End +End + +Describe 'clawdbot upgrade' +setup() { + mock_bin_setup gh nix-prefetch-url nix jq + TEMP_DIR=$(mktemp -d) + OVERLAY_FILE="$TEMP_DIR/overlays/default.nix" + mkdir -p "$TEMP_DIR/overlays" + + # Create a minimal overlay file with the expected structure + cat >"$OVERLAY_FILE" <<'NIX' +{ inputs }: +let + # Override clawdbot source to v2026.1.15 + clawdbotSourceOverride = { + owner = "clawdbot"; + repo = "clawdbot"; + rev = "abc123"; + hash = "sha256-OLDHASH1234567890="; + pnpmDepsHash = "sha256-PNPMHASH1234567890="; + }; + # Override clawdbot-app to v2026.1.15 (fixes broken app package) + clawdbotAppOverride = { + version = "2026.1.15"; + url = "https://github.com/clawdbot/clawdbot/releases/download/v2026.1.15/Clawdbot-2026.1.15.zip"; + hash = "sha256-OLDAPPHASH1234567890="; + }; +in +[ + ( + final: prev: + let + clawdbotVersion = "2026.1.15"; + in + {} + ) +] +NIX + + # Create a test script that uses our temp overlay file + TEMP_SCRIPT="$TEMP_DIR/upgrade-test.sh" + cat >"$TEMP_SCRIPT" <