My personal-knowledge-system, with deeply integrated task tracking and long term goal planning capabilities.

tui scaffolding #11

merged opened by suri.codes targeting main from tui
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:nxdjlcnomw44wvso6myag2e6/sh.tangled.repo.pull/3mgl5qimefq22
+5349 -12
Diff #2
+8
.config/config.kdl
··· 1 + 2 + keymap { 3 + Home { 4 + <q> Quit // Quit the application 5 + <Ctrl-c> Quit // Another way to quit 6 + <Ctrl-z> Suspend // Suspend the application 7 + } 8 + }
+50
.config/config_old.kdl
··· 1 + scroll_offset 4 2 + 3 + keybindings { 4 + Explorer { 5 + "<q>" Quit // Quit the application 6 + "<Ctrl-d>" Quit // Another way to quit 7 + "<Ctrl-c>" Quit // Yet another way to quit 8 + "<Ctrl-z>" Suspend // Suspend the application 9 + "<2>" switch-to="TodoList" 10 + "<3>" switch-to="Inspector" 11 + f ToggleShowFinished 12 + x Delete 13 + t NewTask 14 + g NewSubGroup 15 + "<Shift-g>" NewGroup 16 + j MoveDown 17 + k MoveUp 18 + l MoveInto 19 + h MoveOutOf 20 + } 21 + 22 + TodoList { 23 + "<q>" Quit // Quit the application 24 + "<Ctrl-d>" Quit // Another way to quit 25 + "<Ctrl-c>" Quit // Yet another way to quit 26 + "<Ctrl-z>" Suspend // Suspend the application 27 + "<1>" switch-to="Explorer" 28 + "<3>" switch-to="Inspector" 29 + j MoveDown 30 + k MoveUp 31 + } 32 + 33 + Inspector { 34 + "<q>" Quit // Quit the application 35 + "<Ctrl-d>" Quit // Another way to quit 36 + "<Ctrl-c>" Quit // Yet another way to quit 37 + "<Ctrl-z>" Suspend // Suspend the application 38 + "<1>" switch-to="Explorer" 39 + "<2>" switch-to="TodoList" 40 + r RandomColor 41 + n EditName 42 + c EditColor 43 + p EditPriority 44 + u EditDue 45 + d EditDescription 46 + f ToggleFinishTask 47 + t NewTask 48 + g NewSubGroup 49 + } 50 + }
+6
.harper-dictionary.txt
··· 1 + Implementers 1 2 Multi-Device 3 + OS 2 4 PKM 5 + clippy 6 + dir 7 + env 8 + eyre
+4088
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "addr2line" 7 + version = "0.25.1" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" 10 + dependencies = [ 11 + "gimli", 12 + ] 13 + 14 + [[package]] 15 + name = "adler2" 16 + version = "2.0.1" 17 + source = "registry+https://github.com/rust-lang/crates.io-index" 18 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 19 + 20 + [[package]] 21 + name = "aho-corasick" 22 + version = "1.1.4" 23 + source = "registry+https://github.com/rust-lang/crates.io-index" 24 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 25 + dependencies = [ 26 + "memchr", 27 + ] 28 + 29 + [[package]] 30 + name = "allocator-api2" 31 + version = "0.2.21" 32 + source = "registry+https://github.com/rust-lang/crates.io-index" 33 + checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 34 + 35 + [[package]] 36 + name = "anstream" 37 + version = "0.6.21" 38 + source = "registry+https://github.com/rust-lang/crates.io-index" 39 + checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" 40 + dependencies = [ 41 + "anstyle", 42 + "anstyle-parse", 43 + "anstyle-query", 44 + "anstyle-wincon", 45 + "colorchoice", 46 + "is_terminal_polyfill", 47 + "utf8parse", 48 + ] 49 + 50 + [[package]] 51 + name = "anstyle" 52 + version = "1.0.13" 53 + source = "registry+https://github.com/rust-lang/crates.io-index" 54 + checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" 55 + 56 + [[package]] 57 + name = "anstyle-parse" 58 + version = "0.2.7" 59 + source = "registry+https://github.com/rust-lang/crates.io-index" 60 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 61 + dependencies = [ 62 + "utf8parse", 63 + ] 64 + 65 + [[package]] 66 + name = "anstyle-query" 67 + version = "1.1.5" 68 + source = "registry+https://github.com/rust-lang/crates.io-index" 69 + checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" 70 + dependencies = [ 71 + "windows-sys 0.61.2", 72 + ] 73 + 74 + [[package]] 75 + name = "anstyle-wincon" 76 + version = "3.0.11" 77 + source = "registry+https://github.com/rust-lang/crates.io-index" 78 + checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" 79 + dependencies = [ 80 + "anstyle", 81 + "once_cell_polyfill", 82 + "windows-sys 0.61.2", 83 + ] 84 + 85 + [[package]] 86 + name = "anyhow" 87 + version = "1.0.102" 88 + source = "registry+https://github.com/rust-lang/crates.io-index" 89 + checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" 90 + 91 + [[package]] 92 + name = "arc-swap" 93 + version = "1.8.2" 94 + source = "registry+https://github.com/rust-lang/crates.io-index" 95 + checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" 96 + dependencies = [ 97 + "rustversion", 98 + ] 99 + 100 + [[package]] 101 + name = "atomic" 102 + version = "0.6.1" 103 + source = "registry+https://github.com/rust-lang/crates.io-index" 104 + checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" 105 + dependencies = [ 106 + "bytemuck", 107 + ] 108 + 109 + [[package]] 110 + name = "autocfg" 111 + version = "1.5.0" 112 + source = "registry+https://github.com/rust-lang/crates.io-index" 113 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 114 + 115 + [[package]] 116 + name = "backtrace" 117 + version = "0.3.76" 118 + source = "registry+https://github.com/rust-lang/crates.io-index" 119 + checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" 120 + dependencies = [ 121 + "addr2line", 122 + "cfg-if", 123 + "libc", 124 + "miniz_oxide", 125 + "object", 126 + "rustc-demangle", 127 + "windows-link 0.2.1", 128 + ] 129 + 130 + [[package]] 131 + name = "base64" 132 + version = "0.22.1" 133 + source = "registry+https://github.com/rust-lang/crates.io-index" 134 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 135 + 136 + [[package]] 137 + name = "better-panic" 138 + version = "0.3.0" 139 + source = "registry+https://github.com/rust-lang/crates.io-index" 140 + checksum = "6fa9e1d11a268684cbd90ed36370d7577afb6c62d912ddff5c15fc34343e5036" 141 + dependencies = [ 142 + "backtrace", 143 + "console", 144 + ] 145 + 146 + [[package]] 147 + name = "bit-set" 148 + version = "0.5.3" 149 + source = "registry+https://github.com/rust-lang/crates.io-index" 150 + checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 151 + dependencies = [ 152 + "bit-vec", 153 + ] 154 + 155 + [[package]] 156 + name = "bit-vec" 157 + version = "0.6.3" 158 + source = "registry+https://github.com/rust-lang/crates.io-index" 159 + checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 160 + 161 + [[package]] 162 + name = "bitflags" 163 + version = "1.3.2" 164 + source = "registry+https://github.com/rust-lang/crates.io-index" 165 + checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 166 + 167 + [[package]] 168 + name = "bitflags" 169 + version = "2.11.0" 170 + source = "registry+https://github.com/rust-lang/crates.io-index" 171 + checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" 172 + 173 + [[package]] 174 + name = "block-buffer" 175 + version = "0.10.4" 176 + source = "registry+https://github.com/rust-lang/crates.io-index" 177 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 178 + dependencies = [ 179 + "generic-array", 180 + ] 181 + 182 + [[package]] 183 + name = "bstr" 184 + version = "1.12.1" 185 + source = "registry+https://github.com/rust-lang/crates.io-index" 186 + checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" 187 + dependencies = [ 188 + "memchr", 189 + "regex-automata", 190 + "serde", 191 + ] 192 + 193 + [[package]] 194 + name = "bumpalo" 195 + version = "3.20.2" 196 + source = "registry+https://github.com/rust-lang/crates.io-index" 197 + checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" 198 + 199 + [[package]] 200 + name = "bytemuck" 201 + version = "1.25.0" 202 + source = "registry+https://github.com/rust-lang/crates.io-index" 203 + checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" 204 + 205 + [[package]] 206 + name = "byteorder" 207 + version = "1.5.0" 208 + source = "registry+https://github.com/rust-lang/crates.io-index" 209 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 210 + 211 + [[package]] 212 + name = "bytes" 213 + version = "1.11.1" 214 + source = "registry+https://github.com/rust-lang/crates.io-index" 215 + checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" 216 + 217 + [[package]] 218 + name = "camino" 219 + version = "1.2.2" 220 + source = "registry+https://github.com/rust-lang/crates.io-index" 221 + checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" 222 + dependencies = [ 223 + "serde_core", 224 + ] 225 + 226 + [[package]] 227 + name = "cargo-platform" 228 + version = "0.3.2" 229 + source = "registry+https://github.com/rust-lang/crates.io-index" 230 + checksum = "87a0c0e6148f11f01f32650a2ea02d532b2ad4e81d8bd41e6e565b5adc5e6082" 231 + dependencies = [ 232 + "serde", 233 + "serde_core", 234 + ] 235 + 236 + [[package]] 237 + name = "cargo_metadata" 238 + version = "0.23.1" 239 + source = "registry+https://github.com/rust-lang/crates.io-index" 240 + checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" 241 + dependencies = [ 242 + "camino", 243 + "cargo-platform", 244 + "semver", 245 + "serde", 246 + "serde_json", 247 + "thiserror 2.0.18", 248 + ] 249 + 250 + [[package]] 251 + name = "castaway" 252 + version = "0.2.4" 253 + source = "registry+https://github.com/rust-lang/crates.io-index" 254 + checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" 255 + dependencies = [ 256 + "rustversion", 257 + ] 258 + 259 + [[package]] 260 + name = "cfg-if" 261 + version = "1.0.4" 262 + source = "registry+https://github.com/rust-lang/crates.io-index" 263 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 264 + 265 + [[package]] 266 + name = "cfg_aliases" 267 + version = "0.2.1" 268 + source = "registry+https://github.com/rust-lang/crates.io-index" 269 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 270 + 271 + [[package]] 272 + name = "clap" 273 + version = "4.5.60" 274 + source = "registry+https://github.com/rust-lang/crates.io-index" 275 + checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" 276 + dependencies = [ 277 + "clap_builder", 278 + "clap_derive", 279 + ] 280 + 281 + [[package]] 282 + name = "clap_builder" 283 + version = "4.5.60" 284 + source = "registry+https://github.com/rust-lang/crates.io-index" 285 + checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" 286 + dependencies = [ 287 + "anstream", 288 + "anstyle", 289 + "clap_lex", 290 + "strsim", 291 + "terminal_size", 292 + "unicase", 293 + "unicode-width 0.2.2", 294 + ] 295 + 296 + [[package]] 297 + name = "clap_derive" 298 + version = "4.5.55" 299 + source = "registry+https://github.com/rust-lang/crates.io-index" 300 + checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" 301 + dependencies = [ 302 + "heck", 303 + "proc-macro2", 304 + "quote", 305 + "syn 2.0.117", 306 + ] 307 + 308 + [[package]] 309 + name = "clap_lex" 310 + version = "1.0.0" 311 + source = "registry+https://github.com/rust-lang/crates.io-index" 312 + checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" 313 + 314 + [[package]] 315 + name = "clru" 316 + version = "0.6.3" 317 + source = "registry+https://github.com/rust-lang/crates.io-index" 318 + checksum = "197fd99cb113a8d5d9b6376f3aa817f32c1078f2343b714fff7d2ca44fdf67d5" 319 + dependencies = [ 320 + "hashbrown 0.16.1", 321 + ] 322 + 323 + [[package]] 324 + name = "color-eyre" 325 + version = "0.6.5" 326 + source = "registry+https://github.com/rust-lang/crates.io-index" 327 + checksum = "e5920befb47832a6d61ee3a3a846565cfa39b331331e68a3b1d1116630f2f26d" 328 + dependencies = [ 329 + "backtrace", 330 + "color-spantrace", 331 + "eyre", 332 + "indenter", 333 + "once_cell", 334 + "owo-colors", 335 + "tracing-error", 336 + ] 337 + 338 + [[package]] 339 + name = "color-spantrace" 340 + version = "0.3.0" 341 + source = "registry+https://github.com/rust-lang/crates.io-index" 342 + checksum = "b8b88ea9df13354b55bc7234ebcce36e6ef896aca2e42a15de9e10edce01b427" 343 + dependencies = [ 344 + "once_cell", 345 + "owo-colors", 346 + "tracing-core", 347 + "tracing-error", 348 + ] 349 + 350 + [[package]] 351 + name = "colorchoice" 352 + version = "1.0.4" 353 + source = "registry+https://github.com/rust-lang/crates.io-index" 354 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 355 + 356 + [[package]] 357 + name = "compact_str" 358 + version = "0.9.0" 359 + source = "registry+https://github.com/rust-lang/crates.io-index" 360 + checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" 361 + dependencies = [ 362 + "castaway", 363 + "cfg-if", 364 + "itoa", 365 + "rustversion", 366 + "ryu", 367 + "static_assertions", 368 + ] 369 + 370 + [[package]] 371 + name = "console" 372 + version = "0.15.11" 373 + source = "registry+https://github.com/rust-lang/crates.io-index" 374 + checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" 375 + dependencies = [ 376 + "encode_unicode", 377 + "libc", 378 + "once_cell", 379 + "windows-sys 0.59.0", 380 + ] 381 + 382 + [[package]] 383 + name = "convert_case" 384 + version = "0.10.0" 385 + source = "registry+https://github.com/rust-lang/crates.io-index" 386 + checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" 387 + dependencies = [ 388 + "unicode-segmentation", 389 + ] 390 + 391 + [[package]] 392 + name = "cpufeatures" 393 + version = "0.2.17" 394 + source = "registry+https://github.com/rust-lang/crates.io-index" 395 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 396 + dependencies = [ 397 + "libc", 398 + ] 399 + 400 + [[package]] 401 + name = "crc32fast" 402 + version = "1.5.0" 403 + source = "registry+https://github.com/rust-lang/crates.io-index" 404 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 405 + dependencies = [ 406 + "cfg-if", 407 + ] 408 + 409 + [[package]] 410 + name = "crossbeam-utils" 411 + version = "0.8.21" 412 + source = "registry+https://github.com/rust-lang/crates.io-index" 413 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 414 + 415 + [[package]] 416 + name = "crossterm" 417 + version = "0.29.0" 418 + source = "registry+https://github.com/rust-lang/crates.io-index" 419 + checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" 420 + dependencies = [ 421 + "bitflags 2.11.0", 422 + "crossterm_winapi", 423 + "derive_more", 424 + "document-features", 425 + "futures-core", 426 + "mio", 427 + "parking_lot", 428 + "rustix", 429 + "signal-hook 0.3.18", 430 + "signal-hook-mio", 431 + "winapi", 432 + ] 433 + 434 + [[package]] 435 + name = "crossterm_winapi" 436 + version = "0.9.1" 437 + source = "registry+https://github.com/rust-lang/crates.io-index" 438 + checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 439 + dependencies = [ 440 + "winapi", 441 + ] 442 + 443 + [[package]] 444 + name = "crypto-common" 445 + version = "0.1.7" 446 + source = "registry+https://github.com/rust-lang/crates.io-index" 447 + checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" 448 + dependencies = [ 449 + "generic-array", 450 + "typenum", 451 + ] 452 + 453 + [[package]] 454 + name = "csscolorparser" 455 + version = "0.6.2" 456 + source = "registry+https://github.com/rust-lang/crates.io-index" 457 + checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" 458 + dependencies = [ 459 + "lab", 460 + "phf", 461 + ] 462 + 463 + [[package]] 464 + name = "darling" 465 + version = "0.20.11" 466 + source = "registry+https://github.com/rust-lang/crates.io-index" 467 + checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" 468 + dependencies = [ 469 + "darling_core 0.20.11", 470 + "darling_macro 0.20.11", 471 + ] 472 + 473 + [[package]] 474 + name = "darling" 475 + version = "0.23.0" 476 + source = "registry+https://github.com/rust-lang/crates.io-index" 477 + checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" 478 + dependencies = [ 479 + "darling_core 0.23.0", 480 + "darling_macro 0.23.0", 481 + ] 482 + 483 + [[package]] 484 + name = "darling_core" 485 + version = "0.20.11" 486 + source = "registry+https://github.com/rust-lang/crates.io-index" 487 + checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" 488 + dependencies = [ 489 + "fnv", 490 + "ident_case", 491 + "proc-macro2", 492 + "quote", 493 + "strsim", 494 + "syn 2.0.117", 495 + ] 496 + 497 + [[package]] 498 + name = "darling_core" 499 + version = "0.23.0" 500 + source = "registry+https://github.com/rust-lang/crates.io-index" 501 + checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" 502 + dependencies = [ 503 + "ident_case", 504 + "proc-macro2", 505 + "quote", 506 + "strsim", 507 + "syn 2.0.117", 508 + ] 509 + 510 + [[package]] 511 + name = "darling_macro" 512 + version = "0.20.11" 513 + source = "registry+https://github.com/rust-lang/crates.io-index" 514 + checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" 515 + dependencies = [ 516 + "darling_core 0.20.11", 517 + "quote", 518 + "syn 2.0.117", 519 + ] 520 + 521 + [[package]] 522 + name = "darling_macro" 523 + version = "0.23.0" 524 + source = "registry+https://github.com/rust-lang/crates.io-index" 525 + checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" 526 + dependencies = [ 527 + "darling_core 0.23.0", 528 + "quote", 529 + "syn 2.0.117", 530 + ] 531 + 532 + [[package]] 533 + name = "dashmap" 534 + version = "6.1.0" 535 + source = "registry+https://github.com/rust-lang/crates.io-index" 536 + checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 537 + dependencies = [ 538 + "cfg-if", 539 + "crossbeam-utils", 540 + "hashbrown 0.14.5", 541 + "lock_api", 542 + "once_cell", 543 + "parking_lot_core", 544 + ] 545 + 546 + [[package]] 547 + name = "deltae" 548 + version = "0.3.2" 549 + source = "registry+https://github.com/rust-lang/crates.io-index" 550 + checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" 551 + 552 + [[package]] 553 + name = "deranged" 554 + version = "0.5.8" 555 + source = "registry+https://github.com/rust-lang/crates.io-index" 556 + checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" 557 + dependencies = [ 558 + "powerfmt", 559 + ] 560 + 561 + [[package]] 562 + name = "derive_builder" 563 + version = "0.20.2" 564 + source = "registry+https://github.com/rust-lang/crates.io-index" 565 + checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" 566 + dependencies = [ 567 + "derive_builder_macro", 568 + ] 569 + 570 + [[package]] 571 + name = "derive_builder_core" 572 + version = "0.20.2" 573 + source = "registry+https://github.com/rust-lang/crates.io-index" 574 + checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" 575 + dependencies = [ 576 + "darling 0.20.11", 577 + "proc-macro2", 578 + "quote", 579 + "syn 2.0.117", 580 + ] 581 + 582 + [[package]] 583 + name = "derive_builder_macro" 584 + version = "0.20.2" 585 + source = "registry+https://github.com/rust-lang/crates.io-index" 586 + checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" 587 + dependencies = [ 588 + "derive_builder_core", 589 + "syn 2.0.117", 590 + ] 591 + 592 + [[package]] 593 + name = "derive_more" 594 + version = "2.1.1" 595 + source = "registry+https://github.com/rust-lang/crates.io-index" 596 + checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" 597 + dependencies = [ 598 + "derive_more-impl", 599 + ] 600 + 601 + [[package]] 602 + name = "derive_more-impl" 603 + version = "2.1.1" 604 + source = "registry+https://github.com/rust-lang/crates.io-index" 605 + checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" 606 + dependencies = [ 607 + "convert_case", 608 + "proc-macro2", 609 + "quote", 610 + "rustc_version", 611 + "syn 2.0.117", 612 + ] 613 + 614 + [[package]] 615 + name = "digest" 616 + version = "0.10.7" 617 + source = "registry+https://github.com/rust-lang/crates.io-index" 618 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 619 + dependencies = [ 620 + "block-buffer", 621 + "crypto-common", 622 + ] 623 + 624 + [[package]] 625 + name = "directories" 626 + version = "6.0.0" 627 + source = "registry+https://github.com/rust-lang/crates.io-index" 628 + checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" 629 + dependencies = [ 630 + "dirs-sys", 631 + ] 632 + 633 + [[package]] 634 + name = "dirs-sys" 635 + version = "0.5.0" 636 + source = "registry+https://github.com/rust-lang/crates.io-index" 637 + checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 638 + dependencies = [ 639 + "libc", 640 + "option-ext", 641 + "redox_users", 642 + "windows-sys 0.61.2", 643 + ] 644 + 645 + [[package]] 646 + name = "document-features" 647 + version = "0.2.12" 648 + source = "registry+https://github.com/rust-lang/crates.io-index" 649 + checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 650 + dependencies = [ 651 + "litrs", 652 + ] 653 + 654 + [[package]] 655 + name = "dunce" 656 + version = "1.0.5" 657 + source = "registry+https://github.com/rust-lang/crates.io-index" 658 + checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 659 + 660 + [[package]] 661 + name = "either" 662 + version = "1.15.0" 663 + source = "registry+https://github.com/rust-lang/crates.io-index" 664 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 665 + 666 + [[package]] 667 + name = "encode_unicode" 668 + version = "1.0.0" 669 + source = "registry+https://github.com/rust-lang/crates.io-index" 670 + checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" 671 + 672 + [[package]] 673 + name = "encoding_rs" 674 + version = "0.8.35" 675 + source = "registry+https://github.com/rust-lang/crates.io-index" 676 + checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 677 + dependencies = [ 678 + "cfg-if", 679 + ] 680 + 681 + [[package]] 682 + name = "equivalent" 683 + version = "1.0.2" 684 + source = "registry+https://github.com/rust-lang/crates.io-index" 685 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 686 + 687 + [[package]] 688 + name = "errno" 689 + version = "0.3.14" 690 + source = "registry+https://github.com/rust-lang/crates.io-index" 691 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 692 + dependencies = [ 693 + "libc", 694 + "windows-sys 0.61.2", 695 + ] 696 + 697 + [[package]] 698 + name = "euclid" 699 + version = "0.22.13" 700 + source = "registry+https://github.com/rust-lang/crates.io-index" 701 + checksum = "df61bf483e837f88d5c2291dcf55c67be7e676b3a51acc48db3a7b163b91ed63" 702 + dependencies = [ 703 + "num-traits", 704 + ] 705 + 706 + [[package]] 707 + name = "eyre" 708 + version = "0.6.12" 709 + source = "registry+https://github.com/rust-lang/crates.io-index" 710 + checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" 711 + dependencies = [ 712 + "indenter", 713 + "once_cell", 714 + ] 715 + 716 + [[package]] 717 + name = "fancy-regex" 718 + version = "0.11.0" 719 + source = "registry+https://github.com/rust-lang/crates.io-index" 720 + checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" 721 + dependencies = [ 722 + "bit-set", 723 + "regex", 724 + ] 725 + 726 + [[package]] 727 + name = "faster-hex" 728 + version = "0.10.0" 729 + source = "registry+https://github.com/rust-lang/crates.io-index" 730 + checksum = "7223ae2d2f179b803433d9c830478527e92b8117eab39460edae7f1614d9fb73" 731 + dependencies = [ 732 + "heapless", 733 + "serde", 734 + ] 735 + 736 + [[package]] 737 + name = "fastrand" 738 + version = "2.3.0" 739 + source = "registry+https://github.com/rust-lang/crates.io-index" 740 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 741 + 742 + [[package]] 743 + name = "filaments" 744 + version = "0.1.0" 745 + dependencies = [ 746 + "anyhow", 747 + "better-panic", 748 + "clap", 749 + "color-eyre", 750 + "crossterm", 751 + "directories", 752 + "futures", 753 + "human-panic", 754 + "kdl", 755 + "ratatui", 756 + "serde", 757 + "signal-hook 0.4.3", 758 + "strum 0.28.0", 759 + "tokio", 760 + "tokio-util", 761 + "tracing", 762 + "tracing-error", 763 + "tracing-subscriber", 764 + "vergen-gix", 765 + ] 766 + 767 + [[package]] 768 + name = "filedescriptor" 769 + version = "0.8.3" 770 + source = "registry+https://github.com/rust-lang/crates.io-index" 771 + checksum = "e40758ed24c9b2eeb76c35fb0aebc66c626084edd827e07e1552279814c6682d" 772 + dependencies = [ 773 + "libc", 774 + "thiserror 1.0.69", 775 + "winapi", 776 + ] 777 + 778 + [[package]] 779 + name = "filetime" 780 + version = "0.2.27" 781 + source = "registry+https://github.com/rust-lang/crates.io-index" 782 + checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" 783 + dependencies = [ 784 + "cfg-if", 785 + "libc", 786 + "libredox", 787 + ] 788 + 789 + [[package]] 790 + name = "finl_unicode" 791 + version = "1.4.0" 792 + source = "registry+https://github.com/rust-lang/crates.io-index" 793 + checksum = "9844ddc3a6e533d62bba727eb6c28b5d360921d5175e9ff0f1e621a5c590a4d5" 794 + 795 + [[package]] 796 + name = "fixedbitset" 797 + version = "0.4.2" 798 + source = "registry+https://github.com/rust-lang/crates.io-index" 799 + checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" 800 + 801 + [[package]] 802 + name = "fnv" 803 + version = "1.0.7" 804 + source = "registry+https://github.com/rust-lang/crates.io-index" 805 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 806 + 807 + [[package]] 808 + name = "foldhash" 809 + version = "0.1.5" 810 + source = "registry+https://github.com/rust-lang/crates.io-index" 811 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 812 + 813 + [[package]] 814 + name = "foldhash" 815 + version = "0.2.0" 816 + source = "registry+https://github.com/rust-lang/crates.io-index" 817 + checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 818 + 819 + [[package]] 820 + name = "futures" 821 + version = "0.3.32" 822 + source = "registry+https://github.com/rust-lang/crates.io-index" 823 + checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" 824 + dependencies = [ 825 + "futures-channel", 826 + "futures-core", 827 + "futures-executor", 828 + "futures-io", 829 + "futures-sink", 830 + "futures-task", 831 + "futures-util", 832 + ] 833 + 834 + [[package]] 835 + name = "futures-channel" 836 + version = "0.3.32" 837 + source = "registry+https://github.com/rust-lang/crates.io-index" 838 + checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" 839 + dependencies = [ 840 + "futures-core", 841 + "futures-sink", 842 + ] 843 + 844 + [[package]] 845 + name = "futures-core" 846 + version = "0.3.32" 847 + source = "registry+https://github.com/rust-lang/crates.io-index" 848 + checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" 849 + 850 + [[package]] 851 + name = "futures-executor" 852 + version = "0.3.32" 853 + source = "registry+https://github.com/rust-lang/crates.io-index" 854 + checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" 855 + dependencies = [ 856 + "futures-core", 857 + "futures-task", 858 + "futures-util", 859 + ] 860 + 861 + [[package]] 862 + name = "futures-io" 863 + version = "0.3.32" 864 + source = "registry+https://github.com/rust-lang/crates.io-index" 865 + checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" 866 + 867 + [[package]] 868 + name = "futures-macro" 869 + version = "0.3.32" 870 + source = "registry+https://github.com/rust-lang/crates.io-index" 871 + checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" 872 + dependencies = [ 873 + "proc-macro2", 874 + "quote", 875 + "syn 2.0.117", 876 + ] 877 + 878 + [[package]] 879 + name = "futures-sink" 880 + version = "0.3.32" 881 + source = "registry+https://github.com/rust-lang/crates.io-index" 882 + checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" 883 + 884 + [[package]] 885 + name = "futures-task" 886 + version = "0.3.32" 887 + source = "registry+https://github.com/rust-lang/crates.io-index" 888 + checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" 889 + 890 + [[package]] 891 + name = "futures-util" 892 + version = "0.3.32" 893 + source = "registry+https://github.com/rust-lang/crates.io-index" 894 + checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" 895 + dependencies = [ 896 + "futures-channel", 897 + "futures-core", 898 + "futures-io", 899 + "futures-macro", 900 + "futures-sink", 901 + "futures-task", 902 + "memchr", 903 + "pin-project-lite", 904 + "slab", 905 + ] 906 + 907 + [[package]] 908 + name = "generic-array" 909 + version = "0.14.7" 910 + source = "registry+https://github.com/rust-lang/crates.io-index" 911 + checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 912 + dependencies = [ 913 + "typenum", 914 + "version_check", 915 + ] 916 + 917 + [[package]] 918 + name = "getrandom" 919 + version = "0.2.17" 920 + source = "registry+https://github.com/rust-lang/crates.io-index" 921 + checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" 922 + dependencies = [ 923 + "cfg-if", 924 + "libc", 925 + "wasi", 926 + ] 927 + 928 + [[package]] 929 + name = "getrandom" 930 + version = "0.3.4" 931 + source = "registry+https://github.com/rust-lang/crates.io-index" 932 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 933 + dependencies = [ 934 + "cfg-if", 935 + "libc", 936 + "r-efi 5.3.0", 937 + "wasip2", 938 + ] 939 + 940 + [[package]] 941 + name = "getrandom" 942 + version = "0.4.2" 943 + source = "registry+https://github.com/rust-lang/crates.io-index" 944 + checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" 945 + dependencies = [ 946 + "cfg-if", 947 + "libc", 948 + "r-efi 6.0.0", 949 + "wasip2", 950 + "wasip3", 951 + ] 952 + 953 + [[package]] 954 + name = "gimli" 955 + version = "0.32.3" 956 + source = "registry+https://github.com/rust-lang/crates.io-index" 957 + checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" 958 + 959 + [[package]] 960 + name = "gix" 961 + version = "0.77.0" 962 + source = "registry+https://github.com/rust-lang/crates.io-index" 963 + checksum = "3d8284d86a2f5c0987fbf7219a128815cc04af5a18f5fd7eec6a76d83c2b78cc" 964 + dependencies = [ 965 + "gix-actor", 966 + "gix-attributes", 967 + "gix-command", 968 + "gix-commitgraph", 969 + "gix-config", 970 + "gix-date", 971 + "gix-diff", 972 + "gix-dir", 973 + "gix-discover", 974 + "gix-features", 975 + "gix-filter", 976 + "gix-fs", 977 + "gix-glob", 978 + "gix-hash", 979 + "gix-hashtable", 980 + "gix-ignore", 981 + "gix-index", 982 + "gix-lock", 983 + "gix-object", 984 + "gix-odb", 985 + "gix-pack", 986 + "gix-path", 987 + "gix-pathspec", 988 + "gix-protocol", 989 + "gix-ref", 990 + "gix-refspec", 991 + "gix-revision", 992 + "gix-revwalk", 993 + "gix-sec", 994 + "gix-shallow", 995 + "gix-status", 996 + "gix-submodule", 997 + "gix-tempfile", 998 + "gix-trace", 999 + "gix-traverse", 1000 + "gix-url", 1001 + "gix-utils", 1002 + "gix-validate", 1003 + "gix-worktree", 1004 + "parking_lot", 1005 + "signal-hook 0.3.18", 1006 + "smallvec", 1007 + "thiserror 2.0.18", 1008 + ] 1009 + 1010 + [[package]] 1011 + name = "gix-actor" 1012 + version = "0.37.1" 1013 + source = "registry+https://github.com/rust-lang/crates.io-index" 1014 + checksum = "c345528d405eab51d20f505f5fe1a4680973953694e0292c6bbe97827daa55c4" 1015 + dependencies = [ 1016 + "bstr", 1017 + "gix-date", 1018 + "gix-utils", 1019 + "itoa", 1020 + "thiserror 2.0.18", 1021 + "winnow 0.7.15", 1022 + ] 1023 + 1024 + [[package]] 1025 + name = "gix-attributes" 1026 + version = "0.29.0" 1027 + source = "registry+https://github.com/rust-lang/crates.io-index" 1028 + checksum = "f47dabf8a50f1558c3a55d978440c7c4f22f87ac897bef03b4edbc96f6115966" 1029 + dependencies = [ 1030 + "bstr", 1031 + "gix-glob", 1032 + "gix-path", 1033 + "gix-quote", 1034 + "gix-trace", 1035 + "kstring", 1036 + "smallvec", 1037 + "thiserror 2.0.18", 1038 + "unicode-bom", 1039 + ] 1040 + 1041 + [[package]] 1042 + name = "gix-bitmap" 1043 + version = "0.2.16" 1044 + source = "registry+https://github.com/rust-lang/crates.io-index" 1045 + checksum = "d982fc7ef0608e669851d0d2a6141dae74c60d5a27e8daa451f2a4857bbf41e2" 1046 + dependencies = [ 1047 + "thiserror 2.0.18", 1048 + ] 1049 + 1050 + [[package]] 1051 + name = "gix-chunk" 1052 + version = "0.4.12" 1053 + source = "registry+https://github.com/rust-lang/crates.io-index" 1054 + checksum = "5c356b3825677cb6ff579551bb8311a81821e184453cbd105e2fc5311b288eeb" 1055 + dependencies = [ 1056 + "thiserror 2.0.18", 1057 + ] 1058 + 1059 + [[package]] 1060 + name = "gix-command" 1061 + version = "0.6.5" 1062 + source = "registry+https://github.com/rust-lang/crates.io-index" 1063 + checksum = "46f9c425730a654835351e6da8c3c69ba1804f8b8d4e96d027254151138d5c64" 1064 + dependencies = [ 1065 + "bstr", 1066 + "gix-path", 1067 + "gix-quote", 1068 + "gix-trace", 1069 + "shell-words", 1070 + ] 1071 + 1072 + [[package]] 1073 + name = "gix-commitgraph" 1074 + version = "0.31.0" 1075 + source = "registry+https://github.com/rust-lang/crates.io-index" 1076 + checksum = "efdcba8048045baf15225daf949d597c3e6183d130245e22a7fbd27084abe63a" 1077 + dependencies = [ 1078 + "bstr", 1079 + "gix-chunk", 1080 + "gix-hash", 1081 + "memmap2", 1082 + "thiserror 2.0.18", 1083 + ] 1084 + 1085 + [[package]] 1086 + name = "gix-config" 1087 + version = "0.50.0" 1088 + source = "registry+https://github.com/rust-lang/crates.io-index" 1089 + checksum = "b58e2ff8eef96b71f2c5e260f02ca0475caff374027c5cc5a29bda69fac67404" 1090 + dependencies = [ 1091 + "bstr", 1092 + "gix-config-value", 1093 + "gix-features", 1094 + "gix-glob", 1095 + "gix-path", 1096 + "gix-ref", 1097 + "gix-sec", 1098 + "memchr", 1099 + "smallvec", 1100 + "thiserror 2.0.18", 1101 + "unicode-bom", 1102 + "winnow 0.7.15", 1103 + ] 1104 + 1105 + [[package]] 1106 + name = "gix-config-value" 1107 + version = "0.16.0" 1108 + source = "registry+https://github.com/rust-lang/crates.io-index" 1109 + checksum = "2409cffa4fe8b303847d5b6ba8df9da9ba65d302fc5ee474ea0cac5afde79840" 1110 + dependencies = [ 1111 + "bitflags 2.11.0", 1112 + "bstr", 1113 + "gix-path", 1114 + "libc", 1115 + "thiserror 2.0.18", 1116 + ] 1117 + 1118 + [[package]] 1119 + name = "gix-date" 1120 + version = "0.12.1" 1121 + source = "registry+https://github.com/rust-lang/crates.io-index" 1122 + checksum = "fe4a31bab8159e233094fa70d2e5fd3ec6f19e593f67e6ae01281daa48f8d8e7" 1123 + dependencies = [ 1124 + "bstr", 1125 + "itoa", 1126 + "jiff", 1127 + "smallvec", 1128 + "thiserror 2.0.18", 1129 + ] 1130 + 1131 + [[package]] 1132 + name = "gix-diff" 1133 + version = "0.57.1" 1134 + source = "registry+https://github.com/rust-lang/crates.io-index" 1135 + checksum = "3506936e63ce14cd54b5f28ed06c8e43b92ef9f41c2238cc0bc271a9259b4e90" 1136 + dependencies = [ 1137 + "bstr", 1138 + "gix-attributes", 1139 + "gix-command", 1140 + "gix-filter", 1141 + "gix-fs", 1142 + "gix-hash", 1143 + "gix-index", 1144 + "gix-object", 1145 + "gix-path", 1146 + "gix-pathspec", 1147 + "gix-tempfile", 1148 + "gix-trace", 1149 + "gix-traverse", 1150 + "gix-worktree", 1151 + "imara-diff", 1152 + "thiserror 2.0.18", 1153 + ] 1154 + 1155 + [[package]] 1156 + name = "gix-dir" 1157 + version = "0.19.0" 1158 + source = "registry+https://github.com/rust-lang/crates.io-index" 1159 + checksum = "709d9fad32d2eb8b0129850874246569e801b6d5877e0c41356c23e9e2501e06" 1160 + dependencies = [ 1161 + "bstr", 1162 + "gix-discover", 1163 + "gix-fs", 1164 + "gix-ignore", 1165 + "gix-index", 1166 + "gix-object", 1167 + "gix-path", 1168 + "gix-pathspec", 1169 + "gix-trace", 1170 + "gix-utils", 1171 + "gix-worktree", 1172 + "thiserror 2.0.18", 1173 + ] 1174 + 1175 + [[package]] 1176 + name = "gix-discover" 1177 + version = "0.45.0" 1178 + source = "registry+https://github.com/rust-lang/crates.io-index" 1179 + checksum = "42ce096dc132533802a09d6fd5d4008858f2038341dfe2e69e0d0239edb359de" 1180 + dependencies = [ 1181 + "bstr", 1182 + "dunce", 1183 + "gix-fs", 1184 + "gix-hash", 1185 + "gix-path", 1186 + "gix-ref", 1187 + "gix-sec", 1188 + "thiserror 2.0.18", 1189 + ] 1190 + 1191 + [[package]] 1192 + name = "gix-features" 1193 + version = "0.45.2" 1194 + source = "registry+https://github.com/rust-lang/crates.io-index" 1195 + checksum = "d56aad357ae016449434705033df644ac6253dfcf1281aad3af3af9e907560d1" 1196 + dependencies = [ 1197 + "crc32fast", 1198 + "gix-path", 1199 + "gix-trace", 1200 + "gix-utils", 1201 + "libc", 1202 + "once_cell", 1203 + "prodash", 1204 + "thiserror 2.0.18", 1205 + "walkdir", 1206 + "zlib-rs", 1207 + ] 1208 + 1209 + [[package]] 1210 + name = "gix-filter" 1211 + version = "0.24.1" 1212 + source = "registry+https://github.com/rust-lang/crates.io-index" 1213 + checksum = "10c02464962482570c1f94ad451a608c4391514f803e8074662d02c5629a25dc" 1214 + dependencies = [ 1215 + "bstr", 1216 + "encoding_rs", 1217 + "gix-attributes", 1218 + "gix-command", 1219 + "gix-hash", 1220 + "gix-object", 1221 + "gix-packetline", 1222 + "gix-path", 1223 + "gix-quote", 1224 + "gix-trace", 1225 + "gix-utils", 1226 + "smallvec", 1227 + "thiserror 2.0.18", 1228 + ] 1229 + 1230 + [[package]] 1231 + name = "gix-fs" 1232 + version = "0.18.2" 1233 + source = "registry+https://github.com/rust-lang/crates.io-index" 1234 + checksum = "785b9c499e46bc78d7b81c148c21b3fca18655379ee729a856ed19ce50d359ec" 1235 + dependencies = [ 1236 + "bstr", 1237 + "fastrand", 1238 + "gix-features", 1239 + "gix-path", 1240 + "gix-utils", 1241 + "thiserror 2.0.18", 1242 + ] 1243 + 1244 + [[package]] 1245 + name = "gix-glob" 1246 + version = "0.23.0" 1247 + source = "registry+https://github.com/rust-lang/crates.io-index" 1248 + checksum = "e8546300aee4c65c5862c22a3e321124a69b654a61a8b60de546a9284812b7e2" 1249 + dependencies = [ 1250 + "bitflags 2.11.0", 1251 + "bstr", 1252 + "gix-features", 1253 + "gix-path", 1254 + ] 1255 + 1256 + [[package]] 1257 + name = "gix-hash" 1258 + version = "0.21.2" 1259 + source = "registry+https://github.com/rust-lang/crates.io-index" 1260 + checksum = "e153930f42ccdab8a3306b1027cd524879f6a8996cd0c474d18b0e56cae7714d" 1261 + dependencies = [ 1262 + "faster-hex", 1263 + "gix-features", 1264 + "sha1-checked", 1265 + "thiserror 2.0.18", 1266 + ] 1267 + 1268 + [[package]] 1269 + name = "gix-hashtable" 1270 + version = "0.11.0" 1271 + source = "registry+https://github.com/rust-lang/crates.io-index" 1272 + checksum = "222f7428636020bef272a87ed833ea48bf5fb3193f99852ae16fbb5a602bd2f0" 1273 + dependencies = [ 1274 + "gix-hash", 1275 + "hashbrown 0.16.1", 1276 + "parking_lot", 1277 + ] 1278 + 1279 + [[package]] 1280 + name = "gix-ignore" 1281 + version = "0.18.0" 1282 + source = "registry+https://github.com/rust-lang/crates.io-index" 1283 + checksum = "dfa727fdf54fd9fb53fa3fbb1a5c17172d3073e8e336bf155f3cac3e25b81b21" 1284 + dependencies = [ 1285 + "bstr", 1286 + "gix-glob", 1287 + "gix-path", 1288 + "gix-trace", 1289 + "unicode-bom", 1290 + ] 1291 + 1292 + [[package]] 1293 + name = "gix-index" 1294 + version = "0.45.1" 1295 + source = "registry+https://github.com/rust-lang/crates.io-index" 1296 + checksum = "9ea6d3e9e11647ba49f441dea0782494cc6d2875ff43fa4ad9094e6957f42051" 1297 + dependencies = [ 1298 + "bitflags 2.11.0", 1299 + "bstr", 1300 + "filetime", 1301 + "fnv", 1302 + "gix-bitmap", 1303 + "gix-features", 1304 + "gix-fs", 1305 + "gix-hash", 1306 + "gix-lock", 1307 + "gix-object", 1308 + "gix-traverse", 1309 + "gix-utils", 1310 + "gix-validate", 1311 + "hashbrown 0.16.1", 1312 + "itoa", 1313 + "libc", 1314 + "memmap2", 1315 + "rustix", 1316 + "smallvec", 1317 + "thiserror 2.0.18", 1318 + ] 1319 + 1320 + [[package]] 1321 + name = "gix-lock" 1322 + version = "20.0.1" 1323 + source = "registry+https://github.com/rust-lang/crates.io-index" 1324 + checksum = "115268ae5e3b3b7bc7fc77260eecee05acca458e45318ca45d35467fa81a3ac5" 1325 + dependencies = [ 1326 + "gix-tempfile", 1327 + "gix-utils", 1328 + "thiserror 2.0.18", 1329 + ] 1330 + 1331 + [[package]] 1332 + name = "gix-object" 1333 + version = "0.54.1" 1334 + source = "registry+https://github.com/rust-lang/crates.io-index" 1335 + checksum = "363d6a879c52e4890180e0ffa7d8c9a364fd0b7e807caa368e860b80e8d0bc81" 1336 + dependencies = [ 1337 + "bstr", 1338 + "gix-actor", 1339 + "gix-date", 1340 + "gix-features", 1341 + "gix-hash", 1342 + "gix-hashtable", 1343 + "gix-path", 1344 + "gix-utils", 1345 + "gix-validate", 1346 + "itoa", 1347 + "smallvec", 1348 + "thiserror 2.0.18", 1349 + "winnow 0.7.15", 1350 + ] 1351 + 1352 + [[package]] 1353 + name = "gix-odb" 1354 + version = "0.74.0" 1355 + source = "registry+https://github.com/rust-lang/crates.io-index" 1356 + checksum = "165a907df369a12ed4330faf8baf7ae597aadb08cfacb4ed8649f93d90bcc0c5" 1357 + dependencies = [ 1358 + "arc-swap", 1359 + "gix-date", 1360 + "gix-features", 1361 + "gix-fs", 1362 + "gix-hash", 1363 + "gix-hashtable", 1364 + "gix-object", 1365 + "gix-pack", 1366 + "gix-path", 1367 + "gix-quote", 1368 + "parking_lot", 1369 + "tempfile", 1370 + "thiserror 2.0.18", 1371 + ] 1372 + 1373 + [[package]] 1374 + name = "gix-pack" 1375 + version = "0.64.1" 1376 + source = "registry+https://github.com/rust-lang/crates.io-index" 1377 + checksum = "b04a73d5ab07ea0faae55e2c0ae6f24e36e365ac8ce140394dee3a2c89cd4366" 1378 + dependencies = [ 1379 + "clru", 1380 + "gix-chunk", 1381 + "gix-features", 1382 + "gix-hash", 1383 + "gix-hashtable", 1384 + "gix-object", 1385 + "gix-path", 1386 + "memmap2", 1387 + "smallvec", 1388 + "thiserror 2.0.18", 1389 + ] 1390 + 1391 + [[package]] 1392 + name = "gix-packetline" 1393 + version = "0.20.0" 1394 + source = "registry+https://github.com/rust-lang/crates.io-index" 1395 + checksum = "fad0ffb982a289888087a165d3e849cbac724f2aa5431236b050dd2cb9c7de31" 1396 + dependencies = [ 1397 + "bstr", 1398 + "faster-hex", 1399 + "gix-trace", 1400 + "thiserror 2.0.18", 1401 + ] 1402 + 1403 + [[package]] 1404 + name = "gix-path" 1405 + version = "0.10.22" 1406 + source = "registry+https://github.com/rust-lang/crates.io-index" 1407 + checksum = "7cb06c3e4f8eed6e24fd915fa93145e28a511f4ea0e768bae16673e05ed3f366" 1408 + dependencies = [ 1409 + "bstr", 1410 + "gix-trace", 1411 + "gix-validate", 1412 + "thiserror 2.0.18", 1413 + ] 1414 + 1415 + [[package]] 1416 + name = "gix-pathspec" 1417 + version = "0.14.0" 1418 + source = "registry+https://github.com/rust-lang/crates.io-index" 1419 + checksum = "ed9e0c881933c37a7ef45288d6c5779c4a7b3ad240b4c37657e1d9829eb90085" 1420 + dependencies = [ 1421 + "bitflags 2.11.0", 1422 + "bstr", 1423 + "gix-attributes", 1424 + "gix-config-value", 1425 + "gix-glob", 1426 + "gix-path", 1427 + "thiserror 2.0.18", 1428 + ] 1429 + 1430 + [[package]] 1431 + name = "gix-protocol" 1432 + version = "0.55.0" 1433 + source = "registry+https://github.com/rust-lang/crates.io-index" 1434 + checksum = "02c5dfd068789442c5709e702ef42d851765f2c09a11bf0a13749d24363f4d07" 1435 + dependencies = [ 1436 + "bstr", 1437 + "gix-date", 1438 + "gix-features", 1439 + "gix-hash", 1440 + "gix-ref", 1441 + "gix-shallow", 1442 + "gix-transport", 1443 + "gix-utils", 1444 + "maybe-async", 1445 + "thiserror 2.0.18", 1446 + "winnow 0.7.15", 1447 + ] 1448 + 1449 + [[package]] 1450 + name = "gix-quote" 1451 + version = "0.6.2" 1452 + source = "registry+https://github.com/rust-lang/crates.io-index" 1453 + checksum = "96fc2ff2ec8cc0c92807f02eab1f00eb02619fc2810d13dc42679492fcc36757" 1454 + dependencies = [ 1455 + "bstr", 1456 + "gix-utils", 1457 + "thiserror 2.0.18", 1458 + ] 1459 + 1460 + [[package]] 1461 + name = "gix-ref" 1462 + version = "0.57.0" 1463 + source = "registry+https://github.com/rust-lang/crates.io-index" 1464 + checksum = "ccb33aa97006e37e9e83fde233569a66b02ed16fd4b0406cdf35834b06cf8a63" 1465 + dependencies = [ 1466 + "gix-actor", 1467 + "gix-features", 1468 + "gix-fs", 1469 + "gix-hash", 1470 + "gix-lock", 1471 + "gix-object", 1472 + "gix-path", 1473 + "gix-tempfile", 1474 + "gix-utils", 1475 + "gix-validate", 1476 + "memmap2", 1477 + "thiserror 2.0.18", 1478 + "winnow 0.7.15", 1479 + ] 1480 + 1481 + [[package]] 1482 + name = "gix-refspec" 1483 + version = "0.35.0" 1484 + source = "registry+https://github.com/rust-lang/crates.io-index" 1485 + checksum = "dcbba6ae5389f4021f73a2d62a4195aace7db1e8bb684b25521d3d685f57da02" 1486 + dependencies = [ 1487 + "bstr", 1488 + "gix-glob", 1489 + "gix-hash", 1490 + "gix-revision", 1491 + "gix-validate", 1492 + "smallvec", 1493 + "thiserror 2.0.18", 1494 + ] 1495 + 1496 + [[package]] 1497 + name = "gix-revision" 1498 + version = "0.39.0" 1499 + source = "registry+https://github.com/rust-lang/crates.io-index" 1500 + checksum = "91898c83b18c635696f7355d171cfa74a52f38022ff89581f567768935ebc4c8" 1501 + dependencies = [ 1502 + "bitflags 2.11.0", 1503 + "bstr", 1504 + "gix-commitgraph", 1505 + "gix-date", 1506 + "gix-hash", 1507 + "gix-hashtable", 1508 + "gix-object", 1509 + "gix-revwalk", 1510 + "gix-trace", 1511 + "thiserror 2.0.18", 1512 + ] 1513 + 1514 + [[package]] 1515 + name = "gix-revwalk" 1516 + version = "0.25.0" 1517 + source = "registry+https://github.com/rust-lang/crates.io-index" 1518 + checksum = "0d063699278485016863d0d2bb0db7609fd2e8ba9a89379717bf06fd96949eb2" 1519 + dependencies = [ 1520 + "gix-commitgraph", 1521 + "gix-date", 1522 + "gix-hash", 1523 + "gix-hashtable", 1524 + "gix-object", 1525 + "smallvec", 1526 + "thiserror 2.0.18", 1527 + ] 1528 + 1529 + [[package]] 1530 + name = "gix-sec" 1531 + version = "0.12.2" 1532 + source = "registry+https://github.com/rust-lang/crates.io-index" 1533 + checksum = "ea9962ed6d9114f7f100efe038752f41283c225bb507a2888903ac593dffa6be" 1534 + dependencies = [ 1535 + "bitflags 2.11.0", 1536 + "gix-path", 1537 + "libc", 1538 + "windows-sys 0.61.2", 1539 + ] 1540 + 1541 + [[package]] 1542 + name = "gix-shallow" 1543 + version = "0.7.0" 1544 + source = "registry+https://github.com/rust-lang/crates.io-index" 1545 + checksum = "9c1c467fb9f7ec1d33613c2ea5482de514bcb84b8222a793cdc4c71955832356" 1546 + dependencies = [ 1547 + "bstr", 1548 + "gix-hash", 1549 + "gix-lock", 1550 + "thiserror 2.0.18", 1551 + ] 1552 + 1553 + [[package]] 1554 + name = "gix-status" 1555 + version = "0.24.0" 1556 + source = "registry+https://github.com/rust-lang/crates.io-index" 1557 + checksum = "ed0d94c685a831c679ca5454c22f350e8c233f50dcf377ca00d858bcba9696d2" 1558 + dependencies = [ 1559 + "bstr", 1560 + "filetime", 1561 + "gix-diff", 1562 + "gix-dir", 1563 + "gix-features", 1564 + "gix-filter", 1565 + "gix-fs", 1566 + "gix-hash", 1567 + "gix-index", 1568 + "gix-object", 1569 + "gix-path", 1570 + "gix-pathspec", 1571 + "gix-worktree", 1572 + "portable-atomic", 1573 + "thiserror 2.0.18", 1574 + ] 1575 + 1576 + [[package]] 1577 + name = "gix-submodule" 1578 + version = "0.24.0" 1579 + source = "registry+https://github.com/rust-lang/crates.io-index" 1580 + checksum = "efee2a61198413d80de10028aa507344537827d776ade781760130721bec2419" 1581 + dependencies = [ 1582 + "bstr", 1583 + "gix-config", 1584 + "gix-path", 1585 + "gix-pathspec", 1586 + "gix-refspec", 1587 + "gix-url", 1588 + "thiserror 2.0.18", 1589 + ] 1590 + 1591 + [[package]] 1592 + name = "gix-tempfile" 1593 + version = "20.0.1" 1594 + source = "registry+https://github.com/rust-lang/crates.io-index" 1595 + checksum = "ad89218e74850f42d364ed3877c7291f0474c8533502df91bb877ecc5cb0dd40" 1596 + dependencies = [ 1597 + "dashmap", 1598 + "gix-fs", 1599 + "libc", 1600 + "parking_lot", 1601 + "signal-hook 0.4.3", 1602 + "signal-hook-registry", 1603 + "tempfile", 1604 + ] 1605 + 1606 + [[package]] 1607 + name = "gix-trace" 1608 + version = "0.1.18" 1609 + source = "registry+https://github.com/rust-lang/crates.io-index" 1610 + checksum = "f69a13643b8437d4ca6845e08143e847a36ca82903eed13303475d0ae8b162e0" 1611 + 1612 + [[package]] 1613 + name = "gix-transport" 1614 + version = "0.52.1" 1615 + source = "registry+https://github.com/rust-lang/crates.io-index" 1616 + checksum = "a4d4ed02a2ebe771a26111896ecda0b98b58ed35e1d9c0ccf07251c1abb4918d" 1617 + dependencies = [ 1618 + "bstr", 1619 + "gix-command", 1620 + "gix-features", 1621 + "gix-packetline", 1622 + "gix-quote", 1623 + "gix-sec", 1624 + "gix-url", 1625 + "thiserror 2.0.18", 1626 + ] 1627 + 1628 + [[package]] 1629 + name = "gix-traverse" 1630 + version = "0.51.1" 1631 + source = "registry+https://github.com/rust-lang/crates.io-index" 1632 + checksum = "d052b83d1d1744be95ac6448ac02f95f370a8f6720e466be9ce57146e39f5280" 1633 + dependencies = [ 1634 + "bitflags 2.11.0", 1635 + "gix-commitgraph", 1636 + "gix-date", 1637 + "gix-hash", 1638 + "gix-hashtable", 1639 + "gix-object", 1640 + "gix-revwalk", 1641 + "smallvec", 1642 + "thiserror 2.0.18", 1643 + ] 1644 + 1645 + [[package]] 1646 + name = "gix-url" 1647 + version = "0.34.0" 1648 + source = "registry+https://github.com/rust-lang/crates.io-index" 1649 + checksum = "cff1996dfb9430b3699d89224c674169c1ae355eacc52bf30a03c0b8bffe73d9" 1650 + dependencies = [ 1651 + "bstr", 1652 + "gix-features", 1653 + "gix-path", 1654 + "percent-encoding", 1655 + "thiserror 2.0.18", 1656 + ] 1657 + 1658 + [[package]] 1659 + name = "gix-utils" 1660 + version = "0.3.1" 1661 + source = "registry+https://github.com/rust-lang/crates.io-index" 1662 + checksum = "befcdbdfb1238d2854591f760a48711bed85e72d80a10e8f2f93f656746ef7c5" 1663 + dependencies = [ 1664 + "bstr", 1665 + "fastrand", 1666 + "unicode-normalization", 1667 + ] 1668 + 1669 + [[package]] 1670 + name = "gix-validate" 1671 + version = "0.10.1" 1672 + source = "registry+https://github.com/rust-lang/crates.io-index" 1673 + checksum = "5b1e63a5b516e970a594f870ed4571a8fdcb8a344e7bd407a20db8bd61dbfde4" 1674 + dependencies = [ 1675 + "bstr", 1676 + "thiserror 2.0.18", 1677 + ] 1678 + 1679 + [[package]] 1680 + name = "gix-worktree" 1681 + version = "0.46.0" 1682 + source = "registry+https://github.com/rust-lang/crates.io-index" 1683 + checksum = "1cfb7ce8cdbfe06117d335d1ad329351468d20331e0aafd108ceb647c1326aca" 1684 + dependencies = [ 1685 + "bstr", 1686 + "gix-attributes", 1687 + "gix-features", 1688 + "gix-fs", 1689 + "gix-glob", 1690 + "gix-hash", 1691 + "gix-ignore", 1692 + "gix-index", 1693 + "gix-object", 1694 + "gix-path", 1695 + "gix-validate", 1696 + ] 1697 + 1698 + [[package]] 1699 + name = "hash32" 1700 + version = "0.3.1" 1701 + source = "registry+https://github.com/rust-lang/crates.io-index" 1702 + checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" 1703 + dependencies = [ 1704 + "byteorder", 1705 + ] 1706 + 1707 + [[package]] 1708 + name = "hashbrown" 1709 + version = "0.14.5" 1710 + source = "registry+https://github.com/rust-lang/crates.io-index" 1711 + checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1712 + 1713 + [[package]] 1714 + name = "hashbrown" 1715 + version = "0.15.5" 1716 + source = "registry+https://github.com/rust-lang/crates.io-index" 1717 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1718 + dependencies = [ 1719 + "foldhash 0.1.5", 1720 + ] 1721 + 1722 + [[package]] 1723 + name = "hashbrown" 1724 + version = "0.16.1" 1725 + source = "registry+https://github.com/rust-lang/crates.io-index" 1726 + checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" 1727 + dependencies = [ 1728 + "allocator-api2", 1729 + "equivalent", 1730 + "foldhash 0.2.0", 1731 + ] 1732 + 1733 + [[package]] 1734 + name = "heapless" 1735 + version = "0.8.0" 1736 + source = "registry+https://github.com/rust-lang/crates.io-index" 1737 + checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" 1738 + dependencies = [ 1739 + "hash32", 1740 + "stable_deref_trait", 1741 + ] 1742 + 1743 + [[package]] 1744 + name = "heck" 1745 + version = "0.5.0" 1746 + source = "registry+https://github.com/rust-lang/crates.io-index" 1747 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1748 + 1749 + [[package]] 1750 + name = "hex" 1751 + version = "0.4.3" 1752 + source = "registry+https://github.com/rust-lang/crates.io-index" 1753 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1754 + 1755 + [[package]] 1756 + name = "human-panic" 1757 + version = "2.0.6" 1758 + source = "registry+https://github.com/rust-lang/crates.io-index" 1759 + checksum = "075e8747af11abcff07d55d98297c9c6c70eb5d6365b25e7b12f02e484935191" 1760 + dependencies = [ 1761 + "anstream", 1762 + "anstyle", 1763 + "backtrace", 1764 + "serde", 1765 + "serde_derive", 1766 + "sysinfo", 1767 + "toml", 1768 + "uuid", 1769 + ] 1770 + 1771 + [[package]] 1772 + name = "id-arena" 1773 + version = "2.3.0" 1774 + source = "registry+https://github.com/rust-lang/crates.io-index" 1775 + checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" 1776 + 1777 + [[package]] 1778 + name = "ident_case" 1779 + version = "1.0.1" 1780 + source = "registry+https://github.com/rust-lang/crates.io-index" 1781 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1782 + 1783 + [[package]] 1784 + name = "imara-diff" 1785 + version = "0.1.8" 1786 + source = "registry+https://github.com/rust-lang/crates.io-index" 1787 + checksum = "17d34b7d42178945f775e84bc4c36dde7c1c6cdfea656d3354d009056f2bb3d2" 1788 + dependencies = [ 1789 + "hashbrown 0.15.5", 1790 + ] 1791 + 1792 + [[package]] 1793 + name = "indenter" 1794 + version = "0.3.4" 1795 + source = "registry+https://github.com/rust-lang/crates.io-index" 1796 + checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" 1797 + 1798 + [[package]] 1799 + name = "indexmap" 1800 + version = "2.13.0" 1801 + source = "registry+https://github.com/rust-lang/crates.io-index" 1802 + checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" 1803 + dependencies = [ 1804 + "equivalent", 1805 + "hashbrown 0.16.1", 1806 + "serde", 1807 + "serde_core", 1808 + ] 1809 + 1810 + [[package]] 1811 + name = "indoc" 1812 + version = "2.0.7" 1813 + source = "registry+https://github.com/rust-lang/crates.io-index" 1814 + checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" 1815 + dependencies = [ 1816 + "rustversion", 1817 + ] 1818 + 1819 + [[package]] 1820 + name = "instability" 1821 + version = "0.3.11" 1822 + source = "registry+https://github.com/rust-lang/crates.io-index" 1823 + checksum = "357b7205c6cd18dd2c86ed312d1e70add149aea98e7ef72b9fdf0270e555c11d" 1824 + dependencies = [ 1825 + "darling 0.23.0", 1826 + "indoc", 1827 + "proc-macro2", 1828 + "quote", 1829 + "syn 2.0.117", 1830 + ] 1831 + 1832 + [[package]] 1833 + name = "is_terminal_polyfill" 1834 + version = "1.70.2" 1835 + source = "registry+https://github.com/rust-lang/crates.io-index" 1836 + checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 1837 + 1838 + [[package]] 1839 + name = "itertools" 1840 + version = "0.14.0" 1841 + source = "registry+https://github.com/rust-lang/crates.io-index" 1842 + checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 1843 + dependencies = [ 1844 + "either", 1845 + ] 1846 + 1847 + [[package]] 1848 + name = "itoa" 1849 + version = "1.0.17" 1850 + source = "registry+https://github.com/rust-lang/crates.io-index" 1851 + checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" 1852 + 1853 + [[package]] 1854 + name = "jiff" 1855 + version = "0.2.23" 1856 + source = "registry+https://github.com/rust-lang/crates.io-index" 1857 + checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" 1858 + dependencies = [ 1859 + "jiff-static", 1860 + "jiff-tzdb-platform", 1861 + "log", 1862 + "portable-atomic", 1863 + "portable-atomic-util", 1864 + "serde_core", 1865 + "windows-sys 0.61.2", 1866 + ] 1867 + 1868 + [[package]] 1869 + name = "jiff-static" 1870 + version = "0.2.23" 1871 + source = "registry+https://github.com/rust-lang/crates.io-index" 1872 + checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" 1873 + dependencies = [ 1874 + "proc-macro2", 1875 + "quote", 1876 + "syn 2.0.117", 1877 + ] 1878 + 1879 + [[package]] 1880 + name = "jiff-tzdb" 1881 + version = "0.1.6" 1882 + source = "registry+https://github.com/rust-lang/crates.io-index" 1883 + checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" 1884 + 1885 + [[package]] 1886 + name = "jiff-tzdb-platform" 1887 + version = "0.1.3" 1888 + source = "registry+https://github.com/rust-lang/crates.io-index" 1889 + checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" 1890 + dependencies = [ 1891 + "jiff-tzdb", 1892 + ] 1893 + 1894 + [[package]] 1895 + name = "js-sys" 1896 + version = "0.3.91" 1897 + source = "registry+https://github.com/rust-lang/crates.io-index" 1898 + checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" 1899 + dependencies = [ 1900 + "once_cell", 1901 + "wasm-bindgen", 1902 + ] 1903 + 1904 + [[package]] 1905 + name = "kasuari" 1906 + version = "0.4.11" 1907 + source = "registry+https://github.com/rust-lang/crates.io-index" 1908 + checksum = "8fe90c1150662e858c7d5f945089b7517b0a80d8bf7ba4b1b5ffc984e7230a5b" 1909 + dependencies = [ 1910 + "hashbrown 0.16.1", 1911 + "portable-atomic", 1912 + "thiserror 2.0.18", 1913 + ] 1914 + 1915 + [[package]] 1916 + name = "kdl" 1917 + version = "6.5.0" 1918 + source = "registry+https://github.com/rust-lang/crates.io-index" 1919 + checksum = "81a29e7b50079ff44549f68c0becb1c73d7f6de2a4ea952da77966daf3d4761e" 1920 + dependencies = [ 1921 + "miette", 1922 + "num", 1923 + "winnow 0.6.24", 1924 + ] 1925 + 1926 + [[package]] 1927 + name = "kstring" 1928 + version = "2.0.2" 1929 + source = "registry+https://github.com/rust-lang/crates.io-index" 1930 + checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" 1931 + dependencies = [ 1932 + "static_assertions", 1933 + ] 1934 + 1935 + [[package]] 1936 + name = "lab" 1937 + version = "0.11.0" 1938 + source = "registry+https://github.com/rust-lang/crates.io-index" 1939 + checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" 1940 + 1941 + [[package]] 1942 + name = "lazy_static" 1943 + version = "1.5.0" 1944 + source = "registry+https://github.com/rust-lang/crates.io-index" 1945 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1946 + 1947 + [[package]] 1948 + name = "leb128fmt" 1949 + version = "0.1.0" 1950 + source = "registry+https://github.com/rust-lang/crates.io-index" 1951 + checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" 1952 + 1953 + [[package]] 1954 + name = "libc" 1955 + version = "0.2.182" 1956 + source = "registry+https://github.com/rust-lang/crates.io-index" 1957 + checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" 1958 + 1959 + [[package]] 1960 + name = "libredox" 1961 + version = "0.1.14" 1962 + source = "registry+https://github.com/rust-lang/crates.io-index" 1963 + checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" 1964 + dependencies = [ 1965 + "bitflags 2.11.0", 1966 + "libc", 1967 + "plain", 1968 + "redox_syscall 0.7.3", 1969 + ] 1970 + 1971 + [[package]] 1972 + name = "line-clipping" 1973 + version = "0.3.5" 1974 + source = "registry+https://github.com/rust-lang/crates.io-index" 1975 + checksum = "5f4de44e98ddbf09375cbf4d17714d18f39195f4f4894e8524501726fd9a8a4a" 1976 + dependencies = [ 1977 + "bitflags 2.11.0", 1978 + ] 1979 + 1980 + [[package]] 1981 + name = "linux-raw-sys" 1982 + version = "0.12.1" 1983 + source = "registry+https://github.com/rust-lang/crates.io-index" 1984 + checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" 1985 + 1986 + [[package]] 1987 + name = "litrs" 1988 + version = "1.0.0" 1989 + source = "registry+https://github.com/rust-lang/crates.io-index" 1990 + checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 1991 + 1992 + [[package]] 1993 + name = "lock_api" 1994 + version = "0.4.14" 1995 + source = "registry+https://github.com/rust-lang/crates.io-index" 1996 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 1997 + dependencies = [ 1998 + "scopeguard", 1999 + ] 2000 + 2001 + [[package]] 2002 + name = "log" 2003 + version = "0.4.29" 2004 + source = "registry+https://github.com/rust-lang/crates.io-index" 2005 + checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 2006 + 2007 + [[package]] 2008 + name = "lru" 2009 + version = "0.16.3" 2010 + source = "registry+https://github.com/rust-lang/crates.io-index" 2011 + checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" 2012 + dependencies = [ 2013 + "hashbrown 0.16.1", 2014 + ] 2015 + 2016 + [[package]] 2017 + name = "mac_address" 2018 + version = "1.1.8" 2019 + source = "registry+https://github.com/rust-lang/crates.io-index" 2020 + checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" 2021 + dependencies = [ 2022 + "nix", 2023 + "winapi", 2024 + ] 2025 + 2026 + [[package]] 2027 + name = "matchers" 2028 + version = "0.2.0" 2029 + source = "registry+https://github.com/rust-lang/crates.io-index" 2030 + checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" 2031 + dependencies = [ 2032 + "regex-automata", 2033 + ] 2034 + 2035 + [[package]] 2036 + name = "maybe-async" 2037 + version = "0.2.10" 2038 + source = "registry+https://github.com/rust-lang/crates.io-index" 2039 + checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" 2040 + dependencies = [ 2041 + "proc-macro2", 2042 + "quote", 2043 + "syn 2.0.117", 2044 + ] 2045 + 2046 + [[package]] 2047 + name = "memchr" 2048 + version = "2.8.0" 2049 + source = "registry+https://github.com/rust-lang/crates.io-index" 2050 + checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" 2051 + 2052 + [[package]] 2053 + name = "memmap2" 2054 + version = "0.9.10" 2055 + source = "registry+https://github.com/rust-lang/crates.io-index" 2056 + checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" 2057 + dependencies = [ 2058 + "libc", 2059 + ] 2060 + 2061 + [[package]] 2062 + name = "memmem" 2063 + version = "0.1.1" 2064 + source = "registry+https://github.com/rust-lang/crates.io-index" 2065 + checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" 2066 + 2067 + [[package]] 2068 + name = "memoffset" 2069 + version = "0.9.1" 2070 + source = "registry+https://github.com/rust-lang/crates.io-index" 2071 + checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 2072 + dependencies = [ 2073 + "autocfg", 2074 + ] 2075 + 2076 + [[package]] 2077 + name = "miette" 2078 + version = "7.6.0" 2079 + source = "registry+https://github.com/rust-lang/crates.io-index" 2080 + checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" 2081 + dependencies = [ 2082 + "cfg-if", 2083 + "unicode-width 0.1.14", 2084 + ] 2085 + 2086 + [[package]] 2087 + name = "minimal-lexical" 2088 + version = "0.2.1" 2089 + source = "registry+https://github.com/rust-lang/crates.io-index" 2090 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2091 + 2092 + [[package]] 2093 + name = "miniz_oxide" 2094 + version = "0.8.9" 2095 + source = "registry+https://github.com/rust-lang/crates.io-index" 2096 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 2097 + dependencies = [ 2098 + "adler2", 2099 + ] 2100 + 2101 + [[package]] 2102 + name = "mio" 2103 + version = "1.1.1" 2104 + source = "registry+https://github.com/rust-lang/crates.io-index" 2105 + checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" 2106 + dependencies = [ 2107 + "libc", 2108 + "log", 2109 + "wasi", 2110 + "windows-sys 0.61.2", 2111 + ] 2112 + 2113 + [[package]] 2114 + name = "nix" 2115 + version = "0.29.0" 2116 + source = "registry+https://github.com/rust-lang/crates.io-index" 2117 + checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 2118 + dependencies = [ 2119 + "bitflags 2.11.0", 2120 + "cfg-if", 2121 + "cfg_aliases", 2122 + "libc", 2123 + "memoffset", 2124 + ] 2125 + 2126 + [[package]] 2127 + name = "nom" 2128 + version = "7.1.3" 2129 + source = "registry+https://github.com/rust-lang/crates.io-index" 2130 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2131 + dependencies = [ 2132 + "memchr", 2133 + "minimal-lexical", 2134 + ] 2135 + 2136 + [[package]] 2137 + name = "ntapi" 2138 + version = "0.4.3" 2139 + source = "registry+https://github.com/rust-lang/crates.io-index" 2140 + checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" 2141 + dependencies = [ 2142 + "winapi", 2143 + ] 2144 + 2145 + [[package]] 2146 + name = "nu-ansi-term" 2147 + version = "0.50.3" 2148 + source = "registry+https://github.com/rust-lang/crates.io-index" 2149 + checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" 2150 + dependencies = [ 2151 + "windows-sys 0.61.2", 2152 + ] 2153 + 2154 + [[package]] 2155 + name = "num" 2156 + version = "0.4.3" 2157 + source = "registry+https://github.com/rust-lang/crates.io-index" 2158 + checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" 2159 + dependencies = [ 2160 + "num-bigint", 2161 + "num-complex", 2162 + "num-integer", 2163 + "num-iter", 2164 + "num-rational", 2165 + "num-traits", 2166 + ] 2167 + 2168 + [[package]] 2169 + name = "num-bigint" 2170 + version = "0.4.6" 2171 + source = "registry+https://github.com/rust-lang/crates.io-index" 2172 + checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 2173 + dependencies = [ 2174 + "num-integer", 2175 + "num-traits", 2176 + ] 2177 + 2178 + [[package]] 2179 + name = "num-complex" 2180 + version = "0.4.6" 2181 + source = "registry+https://github.com/rust-lang/crates.io-index" 2182 + checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" 2183 + dependencies = [ 2184 + "num-traits", 2185 + ] 2186 + 2187 + [[package]] 2188 + name = "num-conv" 2189 + version = "0.2.0" 2190 + source = "registry+https://github.com/rust-lang/crates.io-index" 2191 + checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" 2192 + 2193 + [[package]] 2194 + name = "num-derive" 2195 + version = "0.4.2" 2196 + source = "registry+https://github.com/rust-lang/crates.io-index" 2197 + checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" 2198 + dependencies = [ 2199 + "proc-macro2", 2200 + "quote", 2201 + "syn 2.0.117", 2202 + ] 2203 + 2204 + [[package]] 2205 + name = "num-integer" 2206 + version = "0.1.46" 2207 + source = "registry+https://github.com/rust-lang/crates.io-index" 2208 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 2209 + dependencies = [ 2210 + "num-traits", 2211 + ] 2212 + 2213 + [[package]] 2214 + name = "num-iter" 2215 + version = "0.1.45" 2216 + source = "registry+https://github.com/rust-lang/crates.io-index" 2217 + checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 2218 + dependencies = [ 2219 + "autocfg", 2220 + "num-integer", 2221 + "num-traits", 2222 + ] 2223 + 2224 + [[package]] 2225 + name = "num-rational" 2226 + version = "0.4.2" 2227 + source = "registry+https://github.com/rust-lang/crates.io-index" 2228 + checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" 2229 + dependencies = [ 2230 + "num-bigint", 2231 + "num-integer", 2232 + "num-traits", 2233 + ] 2234 + 2235 + [[package]] 2236 + name = "num-traits" 2237 + version = "0.2.19" 2238 + source = "registry+https://github.com/rust-lang/crates.io-index" 2239 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2240 + dependencies = [ 2241 + "autocfg", 2242 + ] 2243 + 2244 + [[package]] 2245 + name = "num_threads" 2246 + version = "0.1.7" 2247 + source = "registry+https://github.com/rust-lang/crates.io-index" 2248 + checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 2249 + dependencies = [ 2250 + "libc", 2251 + ] 2252 + 2253 + [[package]] 2254 + name = "objc2-core-foundation" 2255 + version = "0.3.2" 2256 + source = "registry+https://github.com/rust-lang/crates.io-index" 2257 + checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" 2258 + dependencies = [ 2259 + "bitflags 2.11.0", 2260 + ] 2261 + 2262 + [[package]] 2263 + name = "objc2-io-kit" 2264 + version = "0.3.2" 2265 + source = "registry+https://github.com/rust-lang/crates.io-index" 2266 + checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" 2267 + dependencies = [ 2268 + "libc", 2269 + "objc2-core-foundation", 2270 + ] 2271 + 2272 + [[package]] 2273 + name = "object" 2274 + version = "0.37.3" 2275 + source = "registry+https://github.com/rust-lang/crates.io-index" 2276 + checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" 2277 + dependencies = [ 2278 + "memchr", 2279 + ] 2280 + 2281 + [[package]] 2282 + name = "once_cell" 2283 + version = "1.21.3" 2284 + source = "registry+https://github.com/rust-lang/crates.io-index" 2285 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2286 + 2287 + [[package]] 2288 + name = "once_cell_polyfill" 2289 + version = "1.70.2" 2290 + source = "registry+https://github.com/rust-lang/crates.io-index" 2291 + checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 2292 + 2293 + [[package]] 2294 + name = "option-ext" 2295 + version = "0.2.0" 2296 + source = "registry+https://github.com/rust-lang/crates.io-index" 2297 + checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 2298 + 2299 + [[package]] 2300 + name = "ordered-float" 2301 + version = "4.6.0" 2302 + source = "registry+https://github.com/rust-lang/crates.io-index" 2303 + checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" 2304 + dependencies = [ 2305 + "num-traits", 2306 + ] 2307 + 2308 + [[package]] 2309 + name = "owo-colors" 2310 + version = "4.3.0" 2311 + source = "registry+https://github.com/rust-lang/crates.io-index" 2312 + checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" 2313 + 2314 + [[package]] 2315 + name = "parking_lot" 2316 + version = "0.12.5" 2317 + source = "registry+https://github.com/rust-lang/crates.io-index" 2318 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 2319 + dependencies = [ 2320 + "lock_api", 2321 + "parking_lot_core", 2322 + ] 2323 + 2324 + [[package]] 2325 + name = "parking_lot_core" 2326 + version = "0.9.12" 2327 + source = "registry+https://github.com/rust-lang/crates.io-index" 2328 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 2329 + dependencies = [ 2330 + "cfg-if", 2331 + "libc", 2332 + "redox_syscall 0.5.18", 2333 + "smallvec", 2334 + "windows-link 0.2.1", 2335 + ] 2336 + 2337 + [[package]] 2338 + name = "percent-encoding" 2339 + version = "2.3.2" 2340 + source = "registry+https://github.com/rust-lang/crates.io-index" 2341 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2342 + 2343 + [[package]] 2344 + name = "pest" 2345 + version = "2.8.6" 2346 + source = "registry+https://github.com/rust-lang/crates.io-index" 2347 + checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" 2348 + dependencies = [ 2349 + "memchr", 2350 + "ucd-trie", 2351 + ] 2352 + 2353 + [[package]] 2354 + name = "pest_derive" 2355 + version = "2.8.6" 2356 + source = "registry+https://github.com/rust-lang/crates.io-index" 2357 + checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" 2358 + dependencies = [ 2359 + "pest", 2360 + "pest_generator", 2361 + ] 2362 + 2363 + [[package]] 2364 + name = "pest_generator" 2365 + version = "2.8.6" 2366 + source = "registry+https://github.com/rust-lang/crates.io-index" 2367 + checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" 2368 + dependencies = [ 2369 + "pest", 2370 + "pest_meta", 2371 + "proc-macro2", 2372 + "quote", 2373 + "syn 2.0.117", 2374 + ] 2375 + 2376 + [[package]] 2377 + name = "pest_meta" 2378 + version = "2.8.6" 2379 + source = "registry+https://github.com/rust-lang/crates.io-index" 2380 + checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" 2381 + dependencies = [ 2382 + "pest", 2383 + "sha2", 2384 + ] 2385 + 2386 + [[package]] 2387 + name = "phf" 2388 + version = "0.11.3" 2389 + source = "registry+https://github.com/rust-lang/crates.io-index" 2390 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 2391 + dependencies = [ 2392 + "phf_macros", 2393 + "phf_shared", 2394 + ] 2395 + 2396 + [[package]] 2397 + name = "phf_codegen" 2398 + version = "0.11.3" 2399 + source = "registry+https://github.com/rust-lang/crates.io-index" 2400 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 2401 + dependencies = [ 2402 + "phf_generator", 2403 + "phf_shared", 2404 + ] 2405 + 2406 + [[package]] 2407 + name = "phf_generator" 2408 + version = "0.11.3" 2409 + source = "registry+https://github.com/rust-lang/crates.io-index" 2410 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 2411 + dependencies = [ 2412 + "phf_shared", 2413 + "rand", 2414 + ] 2415 + 2416 + [[package]] 2417 + name = "phf_macros" 2418 + version = "0.11.3" 2419 + source = "registry+https://github.com/rust-lang/crates.io-index" 2420 + checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" 2421 + dependencies = [ 2422 + "phf_generator", 2423 + "phf_shared", 2424 + "proc-macro2", 2425 + "quote", 2426 + "syn 2.0.117", 2427 + ] 2428 + 2429 + [[package]] 2430 + name = "phf_shared" 2431 + version = "0.11.3" 2432 + source = "registry+https://github.com/rust-lang/crates.io-index" 2433 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 2434 + dependencies = [ 2435 + "siphasher", 2436 + ] 2437 + 2438 + [[package]] 2439 + name = "pin-project-lite" 2440 + version = "0.2.17" 2441 + source = "registry+https://github.com/rust-lang/crates.io-index" 2442 + checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" 2443 + 2444 + [[package]] 2445 + name = "plain" 2446 + version = "0.2.3" 2447 + source = "registry+https://github.com/rust-lang/crates.io-index" 2448 + checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" 2449 + 2450 + [[package]] 2451 + name = "portable-atomic" 2452 + version = "1.13.1" 2453 + source = "registry+https://github.com/rust-lang/crates.io-index" 2454 + checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" 2455 + 2456 + [[package]] 2457 + name = "portable-atomic-util" 2458 + version = "0.2.5" 2459 + source = "registry+https://github.com/rust-lang/crates.io-index" 2460 + checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" 2461 + dependencies = [ 2462 + "portable-atomic", 2463 + ] 2464 + 2465 + [[package]] 2466 + name = "powerfmt" 2467 + version = "0.2.0" 2468 + source = "registry+https://github.com/rust-lang/crates.io-index" 2469 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2470 + 2471 + [[package]] 2472 + name = "prettyplease" 2473 + version = "0.2.37" 2474 + source = "registry+https://github.com/rust-lang/crates.io-index" 2475 + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2476 + dependencies = [ 2477 + "proc-macro2", 2478 + "syn 2.0.117", 2479 + ] 2480 + 2481 + [[package]] 2482 + name = "proc-macro2" 2483 + version = "1.0.106" 2484 + source = "registry+https://github.com/rust-lang/crates.io-index" 2485 + checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" 2486 + dependencies = [ 2487 + "unicode-ident", 2488 + ] 2489 + 2490 + [[package]] 2491 + name = "prodash" 2492 + version = "30.0.1" 2493 + source = "registry+https://github.com/rust-lang/crates.io-index" 2494 + checksum = "5a6efc566849d3d9d737c5cb06cc50e48950ebe3d3f9d70631490fff3a07b139" 2495 + dependencies = [ 2496 + "parking_lot", 2497 + ] 2498 + 2499 + [[package]] 2500 + name = "quote" 2501 + version = "1.0.45" 2502 + source = "registry+https://github.com/rust-lang/crates.io-index" 2503 + checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" 2504 + dependencies = [ 2505 + "proc-macro2", 2506 + ] 2507 + 2508 + [[package]] 2509 + name = "r-efi" 2510 + version = "5.3.0" 2511 + source = "registry+https://github.com/rust-lang/crates.io-index" 2512 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2513 + 2514 + [[package]] 2515 + name = "r-efi" 2516 + version = "6.0.0" 2517 + source = "registry+https://github.com/rust-lang/crates.io-index" 2518 + checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" 2519 + 2520 + [[package]] 2521 + name = "rand" 2522 + version = "0.8.5" 2523 + source = "registry+https://github.com/rust-lang/crates.io-index" 2524 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2525 + dependencies = [ 2526 + "rand_core", 2527 + ] 2528 + 2529 + [[package]] 2530 + name = "rand_core" 2531 + version = "0.6.4" 2532 + source = "registry+https://github.com/rust-lang/crates.io-index" 2533 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2534 + 2535 + [[package]] 2536 + name = "ratatui" 2537 + version = "0.30.0" 2538 + source = "registry+https://github.com/rust-lang/crates.io-index" 2539 + checksum = "d1ce67fb8ba4446454d1c8dbaeda0557ff5e94d39d5e5ed7f10a65eb4c8266bc" 2540 + dependencies = [ 2541 + "instability", 2542 + "ratatui-core", 2543 + "ratatui-crossterm", 2544 + "ratatui-macros", 2545 + "ratatui-termwiz", 2546 + "ratatui-widgets", 2547 + ] 2548 + 2549 + [[package]] 2550 + name = "ratatui-core" 2551 + version = "0.1.0" 2552 + source = "registry+https://github.com/rust-lang/crates.io-index" 2553 + checksum = "5ef8dea09a92caaf73bff7adb70b76162e5937524058a7e5bff37869cbbec293" 2554 + dependencies = [ 2555 + "bitflags 2.11.0", 2556 + "compact_str", 2557 + "hashbrown 0.16.1", 2558 + "indoc", 2559 + "itertools", 2560 + "kasuari", 2561 + "lru", 2562 + "strum 0.27.2", 2563 + "thiserror 2.0.18", 2564 + "unicode-segmentation", 2565 + "unicode-truncate", 2566 + "unicode-width 0.2.2", 2567 + ] 2568 + 2569 + [[package]] 2570 + name = "ratatui-crossterm" 2571 + version = "0.1.0" 2572 + source = "registry+https://github.com/rust-lang/crates.io-index" 2573 + checksum = "577c9b9f652b4c121fb25c6a391dd06406d3b092ba68827e6d2f09550edc54b3" 2574 + dependencies = [ 2575 + "cfg-if", 2576 + "crossterm", 2577 + "instability", 2578 + "ratatui-core", 2579 + ] 2580 + 2581 + [[package]] 2582 + name = "ratatui-macros" 2583 + version = "0.7.0" 2584 + source = "registry+https://github.com/rust-lang/crates.io-index" 2585 + checksum = "a7f1342a13e83e4bb9d0b793d0ea762be633f9582048c892ae9041ef39c936f4" 2586 + dependencies = [ 2587 + "ratatui-core", 2588 + "ratatui-widgets", 2589 + ] 2590 + 2591 + [[package]] 2592 + name = "ratatui-termwiz" 2593 + version = "0.1.0" 2594 + source = "registry+https://github.com/rust-lang/crates.io-index" 2595 + checksum = "0f76fe0bd0ed4295f0321b1676732e2454024c15a35d01904ddb315afd3d545c" 2596 + dependencies = [ 2597 + "ratatui-core", 2598 + "termwiz", 2599 + ] 2600 + 2601 + [[package]] 2602 + name = "ratatui-widgets" 2603 + version = "0.3.0" 2604 + source = "registry+https://github.com/rust-lang/crates.io-index" 2605 + checksum = "d7dbfa023cd4e604c2553483820c5fe8aa9d71a42eea5aa77c6e7f35756612db" 2606 + dependencies = [ 2607 + "bitflags 2.11.0", 2608 + "hashbrown 0.16.1", 2609 + "indoc", 2610 + "instability", 2611 + "itertools", 2612 + "line-clipping", 2613 + "ratatui-core", 2614 + "strum 0.27.2", 2615 + "time", 2616 + "unicode-segmentation", 2617 + "unicode-width 0.2.2", 2618 + ] 2619 + 2620 + [[package]] 2621 + name = "redox_syscall" 2622 + version = "0.5.18" 2623 + source = "registry+https://github.com/rust-lang/crates.io-index" 2624 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 2625 + dependencies = [ 2626 + "bitflags 2.11.0", 2627 + ] 2628 + 2629 + [[package]] 2630 + name = "redox_syscall" 2631 + version = "0.7.3" 2632 + source = "registry+https://github.com/rust-lang/crates.io-index" 2633 + checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" 2634 + dependencies = [ 2635 + "bitflags 2.11.0", 2636 + ] 2637 + 2638 + [[package]] 2639 + name = "redox_users" 2640 + version = "0.5.2" 2641 + source = "registry+https://github.com/rust-lang/crates.io-index" 2642 + checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" 2643 + dependencies = [ 2644 + "getrandom 0.2.17", 2645 + "libredox", 2646 + "thiserror 2.0.18", 2647 + ] 2648 + 2649 + [[package]] 2650 + name = "regex" 2651 + version = "1.12.3" 2652 + source = "registry+https://github.com/rust-lang/crates.io-index" 2653 + checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" 2654 + dependencies = [ 2655 + "aho-corasick", 2656 + "memchr", 2657 + "regex-automata", 2658 + "regex-syntax", 2659 + ] 2660 + 2661 + [[package]] 2662 + name = "regex-automata" 2663 + version = "0.4.14" 2664 + source = "registry+https://github.com/rust-lang/crates.io-index" 2665 + checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" 2666 + dependencies = [ 2667 + "aho-corasick", 2668 + "memchr", 2669 + "regex-syntax", 2670 + ] 2671 + 2672 + [[package]] 2673 + name = "regex-syntax" 2674 + version = "0.8.10" 2675 + source = "registry+https://github.com/rust-lang/crates.io-index" 2676 + checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" 2677 + 2678 + [[package]] 2679 + name = "rustc-demangle" 2680 + version = "0.1.27" 2681 + source = "registry+https://github.com/rust-lang/crates.io-index" 2682 + checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" 2683 + 2684 + [[package]] 2685 + name = "rustc_version" 2686 + version = "0.4.1" 2687 + source = "registry+https://github.com/rust-lang/crates.io-index" 2688 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 2689 + dependencies = [ 2690 + "semver", 2691 + ] 2692 + 2693 + [[package]] 2694 + name = "rustix" 2695 + version = "1.1.4" 2696 + source = "registry+https://github.com/rust-lang/crates.io-index" 2697 + checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" 2698 + dependencies = [ 2699 + "bitflags 2.11.0", 2700 + "errno", 2701 + "libc", 2702 + "linux-raw-sys", 2703 + "windows-sys 0.61.2", 2704 + ] 2705 + 2706 + [[package]] 2707 + name = "rustversion" 2708 + version = "1.0.22" 2709 + source = "registry+https://github.com/rust-lang/crates.io-index" 2710 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 2711 + 2712 + [[package]] 2713 + name = "ryu" 2714 + version = "1.0.23" 2715 + source = "registry+https://github.com/rust-lang/crates.io-index" 2716 + checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" 2717 + 2718 + [[package]] 2719 + name = "same-file" 2720 + version = "1.0.6" 2721 + source = "registry+https://github.com/rust-lang/crates.io-index" 2722 + checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2723 + dependencies = [ 2724 + "winapi-util", 2725 + ] 2726 + 2727 + [[package]] 2728 + name = "scopeguard" 2729 + version = "1.2.0" 2730 + source = "registry+https://github.com/rust-lang/crates.io-index" 2731 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2732 + 2733 + [[package]] 2734 + name = "semver" 2735 + version = "1.0.27" 2736 + source = "registry+https://github.com/rust-lang/crates.io-index" 2737 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 2738 + dependencies = [ 2739 + "serde", 2740 + "serde_core", 2741 + ] 2742 + 2743 + [[package]] 2744 + name = "serde" 2745 + version = "1.0.228" 2746 + source = "registry+https://github.com/rust-lang/crates.io-index" 2747 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 2748 + dependencies = [ 2749 + "serde_core", 2750 + "serde_derive", 2751 + ] 2752 + 2753 + [[package]] 2754 + name = "serde_core" 2755 + version = "1.0.228" 2756 + source = "registry+https://github.com/rust-lang/crates.io-index" 2757 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 2758 + dependencies = [ 2759 + "serde_derive", 2760 + ] 2761 + 2762 + [[package]] 2763 + name = "serde_derive" 2764 + version = "1.0.228" 2765 + source = "registry+https://github.com/rust-lang/crates.io-index" 2766 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 2767 + dependencies = [ 2768 + "proc-macro2", 2769 + "quote", 2770 + "syn 2.0.117", 2771 + ] 2772 + 2773 + [[package]] 2774 + name = "serde_json" 2775 + version = "1.0.149" 2776 + source = "registry+https://github.com/rust-lang/crates.io-index" 2777 + checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" 2778 + dependencies = [ 2779 + "itoa", 2780 + "memchr", 2781 + "serde", 2782 + "serde_core", 2783 + "zmij", 2784 + ] 2785 + 2786 + [[package]] 2787 + name = "serde_spanned" 2788 + version = "1.0.4" 2789 + source = "registry+https://github.com/rust-lang/crates.io-index" 2790 + checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" 2791 + dependencies = [ 2792 + "serde_core", 2793 + ] 2794 + 2795 + [[package]] 2796 + name = "sha1" 2797 + version = "0.10.6" 2798 + source = "registry+https://github.com/rust-lang/crates.io-index" 2799 + checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 2800 + dependencies = [ 2801 + "cfg-if", 2802 + "cpufeatures", 2803 + "digest", 2804 + ] 2805 + 2806 + [[package]] 2807 + name = "sha1-checked" 2808 + version = "0.10.0" 2809 + source = "registry+https://github.com/rust-lang/crates.io-index" 2810 + checksum = "89f599ac0c323ebb1c6082821a54962b839832b03984598375bff3975b804423" 2811 + dependencies = [ 2812 + "digest", 2813 + "sha1", 2814 + ] 2815 + 2816 + [[package]] 2817 + name = "sha2" 2818 + version = "0.10.9" 2819 + source = "registry+https://github.com/rust-lang/crates.io-index" 2820 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 2821 + dependencies = [ 2822 + "cfg-if", 2823 + "cpufeatures", 2824 + "digest", 2825 + ] 2826 + 2827 + [[package]] 2828 + name = "sharded-slab" 2829 + version = "0.1.7" 2830 + source = "registry+https://github.com/rust-lang/crates.io-index" 2831 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2832 + dependencies = [ 2833 + "lazy_static", 2834 + ] 2835 + 2836 + [[package]] 2837 + name = "shell-words" 2838 + version = "1.1.1" 2839 + source = "registry+https://github.com/rust-lang/crates.io-index" 2840 + checksum = "dc6fe69c597f9c37bfeeeeeb33da3530379845f10be461a66d16d03eca2ded77" 2841 + 2842 + [[package]] 2843 + name = "signal-hook" 2844 + version = "0.3.18" 2845 + source = "registry+https://github.com/rust-lang/crates.io-index" 2846 + checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" 2847 + dependencies = [ 2848 + "libc", 2849 + "signal-hook-registry", 2850 + ] 2851 + 2852 + [[package]] 2853 + name = "signal-hook" 2854 + version = "0.4.3" 2855 + source = "registry+https://github.com/rust-lang/crates.io-index" 2856 + checksum = "3b57709da74f9ff9f4a27dce9526eec25ca8407c45a7887243b031a58935fb8e" 2857 + dependencies = [ 2858 + "libc", 2859 + "signal-hook-registry", 2860 + ] 2861 + 2862 + [[package]] 2863 + name = "signal-hook-mio" 2864 + version = "0.2.5" 2865 + source = "registry+https://github.com/rust-lang/crates.io-index" 2866 + checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" 2867 + dependencies = [ 2868 + "libc", 2869 + "mio", 2870 + "signal-hook 0.3.18", 2871 + ] 2872 + 2873 + [[package]] 2874 + name = "signal-hook-registry" 2875 + version = "1.4.8" 2876 + source = "registry+https://github.com/rust-lang/crates.io-index" 2877 + checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" 2878 + dependencies = [ 2879 + "errno", 2880 + "libc", 2881 + ] 2882 + 2883 + [[package]] 2884 + name = "siphasher" 2885 + version = "1.0.2" 2886 + source = "registry+https://github.com/rust-lang/crates.io-index" 2887 + checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" 2888 + 2889 + [[package]] 2890 + name = "slab" 2891 + version = "0.4.12" 2892 + source = "registry+https://github.com/rust-lang/crates.io-index" 2893 + checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" 2894 + 2895 + [[package]] 2896 + name = "smallvec" 2897 + version = "1.15.1" 2898 + source = "registry+https://github.com/rust-lang/crates.io-index" 2899 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2900 + 2901 + [[package]] 2902 + name = "socket2" 2903 + version = "0.6.2" 2904 + source = "registry+https://github.com/rust-lang/crates.io-index" 2905 + checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" 2906 + dependencies = [ 2907 + "libc", 2908 + "windows-sys 0.60.2", 2909 + ] 2910 + 2911 + [[package]] 2912 + name = "stable_deref_trait" 2913 + version = "1.2.1" 2914 + source = "registry+https://github.com/rust-lang/crates.io-index" 2915 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 2916 + 2917 + [[package]] 2918 + name = "static_assertions" 2919 + version = "1.1.0" 2920 + source = "registry+https://github.com/rust-lang/crates.io-index" 2921 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2922 + 2923 + [[package]] 2924 + name = "strsim" 2925 + version = "0.11.1" 2926 + source = "registry+https://github.com/rust-lang/crates.io-index" 2927 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2928 + 2929 + [[package]] 2930 + name = "strum" 2931 + version = "0.27.2" 2932 + source = "registry+https://github.com/rust-lang/crates.io-index" 2933 + checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" 2934 + dependencies = [ 2935 + "strum_macros 0.27.2", 2936 + ] 2937 + 2938 + [[package]] 2939 + name = "strum" 2940 + version = "0.28.0" 2941 + source = "registry+https://github.com/rust-lang/crates.io-index" 2942 + checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" 2943 + dependencies = [ 2944 + "strum_macros 0.28.0", 2945 + ] 2946 + 2947 + [[package]] 2948 + name = "strum_macros" 2949 + version = "0.27.2" 2950 + source = "registry+https://github.com/rust-lang/crates.io-index" 2951 + checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" 2952 + dependencies = [ 2953 + "heck", 2954 + "proc-macro2", 2955 + "quote", 2956 + "syn 2.0.117", 2957 + ] 2958 + 2959 + [[package]] 2960 + name = "strum_macros" 2961 + version = "0.28.0" 2962 + source = "registry+https://github.com/rust-lang/crates.io-index" 2963 + checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" 2964 + dependencies = [ 2965 + "heck", 2966 + "proc-macro2", 2967 + "quote", 2968 + "syn 2.0.117", 2969 + ] 2970 + 2971 + [[package]] 2972 + name = "syn" 2973 + version = "1.0.109" 2974 + source = "registry+https://github.com/rust-lang/crates.io-index" 2975 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2976 + dependencies = [ 2977 + "proc-macro2", 2978 + "quote", 2979 + "unicode-ident", 2980 + ] 2981 + 2982 + [[package]] 2983 + name = "syn" 2984 + version = "2.0.117" 2985 + source = "registry+https://github.com/rust-lang/crates.io-index" 2986 + checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" 2987 + dependencies = [ 2988 + "proc-macro2", 2989 + "quote", 2990 + "unicode-ident", 2991 + ] 2992 + 2993 + [[package]] 2994 + name = "sysinfo" 2995 + version = "0.37.2" 2996 + source = "registry+https://github.com/rust-lang/crates.io-index" 2997 + checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" 2998 + dependencies = [ 2999 + "libc", 3000 + "memchr", 3001 + "ntapi", 3002 + "objc2-core-foundation", 3003 + "objc2-io-kit", 3004 + "windows", 3005 + ] 3006 + 3007 + [[package]] 3008 + name = "tempfile" 3009 + version = "3.26.0" 3010 + source = "registry+https://github.com/rust-lang/crates.io-index" 3011 + checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" 3012 + dependencies = [ 3013 + "fastrand", 3014 + "getrandom 0.4.2", 3015 + "once_cell", 3016 + "rustix", 3017 + "windows-sys 0.61.2", 3018 + ] 3019 + 3020 + [[package]] 3021 + name = "terminal_size" 3022 + version = "0.4.3" 3023 + source = "registry+https://github.com/rust-lang/crates.io-index" 3024 + checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" 3025 + dependencies = [ 3026 + "rustix", 3027 + "windows-sys 0.60.2", 3028 + ] 3029 + 3030 + [[package]] 3031 + name = "terminfo" 3032 + version = "0.9.0" 3033 + source = "registry+https://github.com/rust-lang/crates.io-index" 3034 + checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" 3035 + dependencies = [ 3036 + "fnv", 3037 + "nom", 3038 + "phf", 3039 + "phf_codegen", 3040 + ] 3041 + 3042 + [[package]] 3043 + name = "termios" 3044 + version = "0.3.3" 3045 + source = "registry+https://github.com/rust-lang/crates.io-index" 3046 + checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b" 3047 + dependencies = [ 3048 + "libc", 3049 + ] 3050 + 3051 + [[package]] 3052 + name = "termwiz" 3053 + version = "0.23.3" 3054 + source = "registry+https://github.com/rust-lang/crates.io-index" 3055 + checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7" 3056 + dependencies = [ 3057 + "anyhow", 3058 + "base64", 3059 + "bitflags 2.11.0", 3060 + "fancy-regex", 3061 + "filedescriptor", 3062 + "finl_unicode", 3063 + "fixedbitset", 3064 + "hex", 3065 + "lazy_static", 3066 + "libc", 3067 + "log", 3068 + "memmem", 3069 + "nix", 3070 + "num-derive", 3071 + "num-traits", 3072 + "ordered-float", 3073 + "pest", 3074 + "pest_derive", 3075 + "phf", 3076 + "sha2", 3077 + "signal-hook 0.3.18", 3078 + "siphasher", 3079 + "terminfo", 3080 + "termios", 3081 + "thiserror 1.0.69", 3082 + "ucd-trie", 3083 + "unicode-segmentation", 3084 + "vtparse", 3085 + "wezterm-bidi", 3086 + "wezterm-blob-leases", 3087 + "wezterm-color-types", 3088 + "wezterm-dynamic", 3089 + "wezterm-input-types", 3090 + "winapi", 3091 + ] 3092 + 3093 + [[package]] 3094 + name = "thiserror" 3095 + version = "1.0.69" 3096 + source = "registry+https://github.com/rust-lang/crates.io-index" 3097 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 3098 + dependencies = [ 3099 + "thiserror-impl 1.0.69", 3100 + ] 3101 + 3102 + [[package]] 3103 + name = "thiserror" 3104 + version = "2.0.18" 3105 + source = "registry+https://github.com/rust-lang/crates.io-index" 3106 + checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" 3107 + dependencies = [ 3108 + "thiserror-impl 2.0.18", 3109 + ] 3110 + 3111 + [[package]] 3112 + name = "thiserror-impl" 3113 + version = "1.0.69" 3114 + source = "registry+https://github.com/rust-lang/crates.io-index" 3115 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 3116 + dependencies = [ 3117 + "proc-macro2", 3118 + "quote", 3119 + "syn 2.0.117", 3120 + ] 3121 + 3122 + [[package]] 3123 + name = "thiserror-impl" 3124 + version = "2.0.18" 3125 + source = "registry+https://github.com/rust-lang/crates.io-index" 3126 + checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" 3127 + dependencies = [ 3128 + "proc-macro2", 3129 + "quote", 3130 + "syn 2.0.117", 3131 + ] 3132 + 3133 + [[package]] 3134 + name = "thread_local" 3135 + version = "1.1.9" 3136 + source = "registry+https://github.com/rust-lang/crates.io-index" 3137 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 3138 + dependencies = [ 3139 + "cfg-if", 3140 + ] 3141 + 3142 + [[package]] 3143 + name = "time" 3144 + version = "0.3.47" 3145 + source = "registry+https://github.com/rust-lang/crates.io-index" 3146 + checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" 3147 + dependencies = [ 3148 + "deranged", 3149 + "itoa", 3150 + "libc", 3151 + "num-conv", 3152 + "num_threads", 3153 + "powerfmt", 3154 + "serde_core", 3155 + "time-core", 3156 + "time-macros", 3157 + ] 3158 + 3159 + [[package]] 3160 + name = "time-core" 3161 + version = "0.1.8" 3162 + source = "registry+https://github.com/rust-lang/crates.io-index" 3163 + checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" 3164 + 3165 + [[package]] 3166 + name = "time-macros" 3167 + version = "0.2.27" 3168 + source = "registry+https://github.com/rust-lang/crates.io-index" 3169 + checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" 3170 + dependencies = [ 3171 + "num-conv", 3172 + "time-core", 3173 + ] 3174 + 3175 + [[package]] 3176 + name = "tinyvec" 3177 + version = "1.10.0" 3178 + source = "registry+https://github.com/rust-lang/crates.io-index" 3179 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 3180 + dependencies = [ 3181 + "tinyvec_macros", 3182 + ] 3183 + 3184 + [[package]] 3185 + name = "tinyvec_macros" 3186 + version = "0.1.1" 3187 + source = "registry+https://github.com/rust-lang/crates.io-index" 3188 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 3189 + 3190 + [[package]] 3191 + name = "tokio" 3192 + version = "1.50.0" 3193 + source = "registry+https://github.com/rust-lang/crates.io-index" 3194 + checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" 3195 + dependencies = [ 3196 + "bytes", 3197 + "libc", 3198 + "mio", 3199 + "parking_lot", 3200 + "pin-project-lite", 3201 + "signal-hook-registry", 3202 + "socket2", 3203 + "tokio-macros", 3204 + "windows-sys 0.61.2", 3205 + ] 3206 + 3207 + [[package]] 3208 + name = "tokio-macros" 3209 + version = "2.6.0" 3210 + source = "registry+https://github.com/rust-lang/crates.io-index" 3211 + checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" 3212 + dependencies = [ 3213 + "proc-macro2", 3214 + "quote", 3215 + "syn 2.0.117", 3216 + ] 3217 + 3218 + [[package]] 3219 + name = "tokio-util" 3220 + version = "0.7.18" 3221 + source = "registry+https://github.com/rust-lang/crates.io-index" 3222 + checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" 3223 + dependencies = [ 3224 + "bytes", 3225 + "futures-core", 3226 + "futures-sink", 3227 + "pin-project-lite", 3228 + "tokio", 3229 + ] 3230 + 3231 + [[package]] 3232 + name = "toml" 3233 + version = "0.9.12+spec-1.1.0" 3234 + source = "registry+https://github.com/rust-lang/crates.io-index" 3235 + checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" 3236 + dependencies = [ 3237 + "serde_core", 3238 + "serde_spanned", 3239 + "toml_datetime", 3240 + "toml_writer", 3241 + ] 3242 + 3243 + [[package]] 3244 + name = "toml_datetime" 3245 + version = "0.7.5+spec-1.1.0" 3246 + source = "registry+https://github.com/rust-lang/crates.io-index" 3247 + checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" 3248 + dependencies = [ 3249 + "serde_core", 3250 + ] 3251 + 3252 + [[package]] 3253 + name = "toml_writer" 3254 + version = "1.0.6+spec-1.1.0" 3255 + source = "registry+https://github.com/rust-lang/crates.io-index" 3256 + checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" 3257 + 3258 + [[package]] 3259 + name = "tracing" 3260 + version = "0.1.44" 3261 + source = "registry+https://github.com/rust-lang/crates.io-index" 3262 + checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" 3263 + dependencies = [ 3264 + "pin-project-lite", 3265 + "tracing-attributes", 3266 + "tracing-core", 3267 + ] 3268 + 3269 + [[package]] 3270 + name = "tracing-attributes" 3271 + version = "0.1.31" 3272 + source = "registry+https://github.com/rust-lang/crates.io-index" 3273 + checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" 3274 + dependencies = [ 3275 + "proc-macro2", 3276 + "quote", 3277 + "syn 2.0.117", 3278 + ] 3279 + 3280 + [[package]] 3281 + name = "tracing-core" 3282 + version = "0.1.36" 3283 + source = "registry+https://github.com/rust-lang/crates.io-index" 3284 + checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" 3285 + dependencies = [ 3286 + "once_cell", 3287 + "valuable", 3288 + ] 3289 + 3290 + [[package]] 3291 + name = "tracing-error" 3292 + version = "0.2.1" 3293 + source = "registry+https://github.com/rust-lang/crates.io-index" 3294 + checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" 3295 + dependencies = [ 3296 + "tracing", 3297 + "tracing-subscriber", 3298 + ] 3299 + 3300 + [[package]] 3301 + name = "tracing-log" 3302 + version = "0.2.0" 3303 + source = "registry+https://github.com/rust-lang/crates.io-index" 3304 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3305 + dependencies = [ 3306 + "log", 3307 + "once_cell", 3308 + "tracing-core", 3309 + ] 3310 + 3311 + [[package]] 3312 + name = "tracing-subscriber" 3313 + version = "0.3.22" 3314 + source = "registry+https://github.com/rust-lang/crates.io-index" 3315 + checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" 3316 + dependencies = [ 3317 + "matchers", 3318 + "nu-ansi-term", 3319 + "once_cell", 3320 + "regex-automata", 3321 + "sharded-slab", 3322 + "smallvec", 3323 + "thread_local", 3324 + "tracing", 3325 + "tracing-core", 3326 + "tracing-log", 3327 + ] 3328 + 3329 + [[package]] 3330 + name = "typenum" 3331 + version = "1.19.0" 3332 + source = "registry+https://github.com/rust-lang/crates.io-index" 3333 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 3334 + 3335 + [[package]] 3336 + name = "ucd-trie" 3337 + version = "0.1.7" 3338 + source = "registry+https://github.com/rust-lang/crates.io-index" 3339 + checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 3340 + 3341 + [[package]] 3342 + name = "unicase" 3343 + version = "2.9.0" 3344 + source = "registry+https://github.com/rust-lang/crates.io-index" 3345 + checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" 3346 + 3347 + [[package]] 3348 + name = "unicode-bom" 3349 + version = "2.0.3" 3350 + source = "registry+https://github.com/rust-lang/crates.io-index" 3351 + checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" 3352 + 3353 + [[package]] 3354 + name = "unicode-ident" 3355 + version = "1.0.24" 3356 + source = "registry+https://github.com/rust-lang/crates.io-index" 3357 + checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" 3358 + 3359 + [[package]] 3360 + name = "unicode-normalization" 3361 + version = "0.1.25" 3362 + source = "registry+https://github.com/rust-lang/crates.io-index" 3363 + checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" 3364 + dependencies = [ 3365 + "tinyvec", 3366 + ] 3367 + 3368 + [[package]] 3369 + name = "unicode-segmentation" 3370 + version = "1.12.0" 3371 + source = "registry+https://github.com/rust-lang/crates.io-index" 3372 + checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3373 + 3374 + [[package]] 3375 + name = "unicode-truncate" 3376 + version = "2.0.1" 3377 + source = "registry+https://github.com/rust-lang/crates.io-index" 3378 + checksum = "16b380a1238663e5f8a691f9039c73e1cdae598a30e9855f541d29b08b53e9a5" 3379 + dependencies = [ 3380 + "itertools", 3381 + "unicode-segmentation", 3382 + "unicode-width 0.2.2", 3383 + ] 3384 + 3385 + [[package]] 3386 + name = "unicode-width" 3387 + version = "0.1.14" 3388 + source = "registry+https://github.com/rust-lang/crates.io-index" 3389 + checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 3390 + 3391 + [[package]] 3392 + name = "unicode-width" 3393 + version = "0.2.2" 3394 + source = "registry+https://github.com/rust-lang/crates.io-index" 3395 + checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 3396 + 3397 + [[package]] 3398 + name = "unicode-xid" 3399 + version = "0.2.6" 3400 + source = "registry+https://github.com/rust-lang/crates.io-index" 3401 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3402 + 3403 + [[package]] 3404 + name = "utf8parse" 3405 + version = "0.2.2" 3406 + source = "registry+https://github.com/rust-lang/crates.io-index" 3407 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 3408 + 3409 + [[package]] 3410 + name = "uuid" 3411 + version = "1.21.0" 3412 + source = "registry+https://github.com/rust-lang/crates.io-index" 3413 + checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" 3414 + dependencies = [ 3415 + "atomic", 3416 + "getrandom 0.4.2", 3417 + "js-sys", 3418 + "wasm-bindgen", 3419 + ] 3420 + 3421 + [[package]] 3422 + name = "valuable" 3423 + version = "0.1.1" 3424 + source = "registry+https://github.com/rust-lang/crates.io-index" 3425 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3426 + 3427 + [[package]] 3428 + name = "vergen" 3429 + version = "9.1.0" 3430 + source = "registry+https://github.com/rust-lang/crates.io-index" 3431 + checksum = "b849a1f6d8639e8de261e81ee0fc881e3e3620db1af9f2e0da015d4382ceaf75" 3432 + dependencies = [ 3433 + "anyhow", 3434 + "cargo_metadata", 3435 + "derive_builder", 3436 + "regex", 3437 + "rustversion", 3438 + "time", 3439 + "vergen-lib", 3440 + ] 3441 + 3442 + [[package]] 3443 + name = "vergen-gix" 3444 + version = "9.1.0" 3445 + source = "registry+https://github.com/rust-lang/crates.io-index" 3446 + checksum = "24433912be6b84c6f8f41907edfaad852deaa666f59da5f46621b0ef58b644f0" 3447 + dependencies = [ 3448 + "anyhow", 3449 + "derive_builder", 3450 + "gix", 3451 + "rustversion", 3452 + "time", 3453 + "vergen", 3454 + "vergen-lib", 3455 + ] 3456 + 3457 + [[package]] 3458 + name = "vergen-lib" 3459 + version = "9.1.0" 3460 + source = "registry+https://github.com/rust-lang/crates.io-index" 3461 + checksum = "b34a29ba7e9c59e62f229ae1932fb1b8fb8a6fdcc99215a641913f5f5a59a569" 3462 + dependencies = [ 3463 + "anyhow", 3464 + "derive_builder", 3465 + "rustversion", 3466 + ] 3467 + 3468 + [[package]] 3469 + name = "version_check" 3470 + version = "0.9.5" 3471 + source = "registry+https://github.com/rust-lang/crates.io-index" 3472 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3473 + 3474 + [[package]] 3475 + name = "vtparse" 3476 + version = "0.6.2" 3477 + source = "registry+https://github.com/rust-lang/crates.io-index" 3478 + checksum = "6d9b2acfb050df409c972a37d3b8e08cdea3bddb0c09db9d53137e504cfabed0" 3479 + dependencies = [ 3480 + "utf8parse", 3481 + ] 3482 + 3483 + [[package]] 3484 + name = "walkdir" 3485 + version = "2.5.0" 3486 + source = "registry+https://github.com/rust-lang/crates.io-index" 3487 + checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3488 + dependencies = [ 3489 + "same-file", 3490 + "winapi-util", 3491 + ] 3492 + 3493 + [[package]] 3494 + name = "wasi" 3495 + version = "0.11.1+wasi-snapshot-preview1" 3496 + source = "registry+https://github.com/rust-lang/crates.io-index" 3497 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 3498 + 3499 + [[package]] 3500 + name = "wasip2" 3501 + version = "1.0.2+wasi-0.2.9" 3502 + source = "registry+https://github.com/rust-lang/crates.io-index" 3503 + checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" 3504 + dependencies = [ 3505 + "wit-bindgen", 3506 + ] 3507 + 3508 + [[package]] 3509 + name = "wasip3" 3510 + version = "0.4.0+wasi-0.3.0-rc-2026-01-06" 3511 + source = "registry+https://github.com/rust-lang/crates.io-index" 3512 + checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" 3513 + dependencies = [ 3514 + "wit-bindgen", 3515 + ] 3516 + 3517 + [[package]] 3518 + name = "wasm-bindgen" 3519 + version = "0.2.114" 3520 + source = "registry+https://github.com/rust-lang/crates.io-index" 3521 + checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" 3522 + dependencies = [ 3523 + "cfg-if", 3524 + "once_cell", 3525 + "rustversion", 3526 + "wasm-bindgen-macro", 3527 + "wasm-bindgen-shared", 3528 + ] 3529 + 3530 + [[package]] 3531 + name = "wasm-bindgen-macro" 3532 + version = "0.2.114" 3533 + source = "registry+https://github.com/rust-lang/crates.io-index" 3534 + checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" 3535 + dependencies = [ 3536 + "quote", 3537 + "wasm-bindgen-macro-support", 3538 + ] 3539 + 3540 + [[package]] 3541 + name = "wasm-bindgen-macro-support" 3542 + version = "0.2.114" 3543 + source = "registry+https://github.com/rust-lang/crates.io-index" 3544 + checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" 3545 + dependencies = [ 3546 + "bumpalo", 3547 + "proc-macro2", 3548 + "quote", 3549 + "syn 2.0.117", 3550 + "wasm-bindgen-shared", 3551 + ] 3552 + 3553 + [[package]] 3554 + name = "wasm-bindgen-shared" 3555 + version = "0.2.114" 3556 + source = "registry+https://github.com/rust-lang/crates.io-index" 3557 + checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" 3558 + dependencies = [ 3559 + "unicode-ident", 3560 + ] 3561 + 3562 + [[package]] 3563 + name = "wasm-encoder" 3564 + version = "0.244.0" 3565 + source = "registry+https://github.com/rust-lang/crates.io-index" 3566 + checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" 3567 + dependencies = [ 3568 + "leb128fmt", 3569 + "wasmparser", 3570 + ] 3571 + 3572 + [[package]] 3573 + name = "wasm-metadata" 3574 + version = "0.244.0" 3575 + source = "registry+https://github.com/rust-lang/crates.io-index" 3576 + checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" 3577 + dependencies = [ 3578 + "anyhow", 3579 + "indexmap", 3580 + "wasm-encoder", 3581 + "wasmparser", 3582 + ] 3583 + 3584 + [[package]] 3585 + name = "wasmparser" 3586 + version = "0.244.0" 3587 + source = "registry+https://github.com/rust-lang/crates.io-index" 3588 + checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" 3589 + dependencies = [ 3590 + "bitflags 2.11.0", 3591 + "hashbrown 0.15.5", 3592 + "indexmap", 3593 + "semver", 3594 + ] 3595 + 3596 + [[package]] 3597 + name = "wezterm-bidi" 3598 + version = "0.2.3" 3599 + source = "registry+https://github.com/rust-lang/crates.io-index" 3600 + checksum = "0c0a6e355560527dd2d1cf7890652f4f09bb3433b6aadade4c9b5ed76de5f3ec" 3601 + dependencies = [ 3602 + "log", 3603 + "wezterm-dynamic", 3604 + ] 3605 + 3606 + [[package]] 3607 + name = "wezterm-blob-leases" 3608 + version = "0.1.1" 3609 + source = "registry+https://github.com/rust-lang/crates.io-index" 3610 + checksum = "692daff6d93d94e29e4114544ef6d5c942a7ed998b37abdc19b17136ea428eb7" 3611 + dependencies = [ 3612 + "getrandom 0.3.4", 3613 + "mac_address", 3614 + "sha2", 3615 + "thiserror 1.0.69", 3616 + "uuid", 3617 + ] 3618 + 3619 + [[package]] 3620 + name = "wezterm-color-types" 3621 + version = "0.3.0" 3622 + source = "registry+https://github.com/rust-lang/crates.io-index" 3623 + checksum = "7de81ef35c9010270d63772bebef2f2d6d1f2d20a983d27505ac850b8c4b4296" 3624 + dependencies = [ 3625 + "csscolorparser", 3626 + "deltae", 3627 + "lazy_static", 3628 + "wezterm-dynamic", 3629 + ] 3630 + 3631 + [[package]] 3632 + name = "wezterm-dynamic" 3633 + version = "0.2.1" 3634 + source = "registry+https://github.com/rust-lang/crates.io-index" 3635 + checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" 3636 + dependencies = [ 3637 + "log", 3638 + "ordered-float", 3639 + "strsim", 3640 + "thiserror 1.0.69", 3641 + "wezterm-dynamic-derive", 3642 + ] 3643 + 3644 + [[package]] 3645 + name = "wezterm-dynamic-derive" 3646 + version = "0.1.1" 3647 + source = "registry+https://github.com/rust-lang/crates.io-index" 3648 + checksum = "46c0cf2d539c645b448eaffec9ec494b8b19bd5077d9e58cb1ae7efece8d575b" 3649 + dependencies = [ 3650 + "proc-macro2", 3651 + "quote", 3652 + "syn 1.0.109", 3653 + ] 3654 + 3655 + [[package]] 3656 + name = "wezterm-input-types" 3657 + version = "0.1.0" 3658 + source = "registry+https://github.com/rust-lang/crates.io-index" 3659 + checksum = "7012add459f951456ec9d6c7e6fc340b1ce15d6fc9629f8c42853412c029e57e" 3660 + dependencies = [ 3661 + "bitflags 1.3.2", 3662 + "euclid", 3663 + "lazy_static", 3664 + "serde", 3665 + "wezterm-dynamic", 3666 + ] 3667 + 3668 + [[package]] 3669 + name = "winapi" 3670 + version = "0.3.9" 3671 + source = "registry+https://github.com/rust-lang/crates.io-index" 3672 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3673 + dependencies = [ 3674 + "winapi-i686-pc-windows-gnu", 3675 + "winapi-x86_64-pc-windows-gnu", 3676 + ] 3677 + 3678 + [[package]] 3679 + name = "winapi-i686-pc-windows-gnu" 3680 + version = "0.4.0" 3681 + source = "registry+https://github.com/rust-lang/crates.io-index" 3682 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3683 + 3684 + [[package]] 3685 + name = "winapi-util" 3686 + version = "0.1.11" 3687 + source = "registry+https://github.com/rust-lang/crates.io-index" 3688 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 3689 + dependencies = [ 3690 + "windows-sys 0.61.2", 3691 + ] 3692 + 3693 + [[package]] 3694 + name = "winapi-x86_64-pc-windows-gnu" 3695 + version = "0.4.0" 3696 + source = "registry+https://github.com/rust-lang/crates.io-index" 3697 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3698 + 3699 + [[package]] 3700 + name = "windows" 3701 + version = "0.61.3" 3702 + source = "registry+https://github.com/rust-lang/crates.io-index" 3703 + checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 3704 + dependencies = [ 3705 + "windows-collections", 3706 + "windows-core", 3707 + "windows-future", 3708 + "windows-link 0.1.3", 3709 + "windows-numerics", 3710 + ] 3711 + 3712 + [[package]] 3713 + name = "windows-collections" 3714 + version = "0.2.0" 3715 + source = "registry+https://github.com/rust-lang/crates.io-index" 3716 + checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 3717 + dependencies = [ 3718 + "windows-core", 3719 + ] 3720 + 3721 + [[package]] 3722 + name = "windows-core" 3723 + version = "0.61.2" 3724 + source = "registry+https://github.com/rust-lang/crates.io-index" 3725 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 3726 + dependencies = [ 3727 + "windows-implement", 3728 + "windows-interface", 3729 + "windows-link 0.1.3", 3730 + "windows-result", 3731 + "windows-strings", 3732 + ] 3733 + 3734 + [[package]] 3735 + name = "windows-future" 3736 + version = "0.2.1" 3737 + source = "registry+https://github.com/rust-lang/crates.io-index" 3738 + checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 3739 + dependencies = [ 3740 + "windows-core", 3741 + "windows-link 0.1.3", 3742 + "windows-threading", 3743 + ] 3744 + 3745 + [[package]] 3746 + name = "windows-implement" 3747 + version = "0.60.2" 3748 + source = "registry+https://github.com/rust-lang/crates.io-index" 3749 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 3750 + dependencies = [ 3751 + "proc-macro2", 3752 + "quote", 3753 + "syn 2.0.117", 3754 + ] 3755 + 3756 + [[package]] 3757 + name = "windows-interface" 3758 + version = "0.59.3" 3759 + source = "registry+https://github.com/rust-lang/crates.io-index" 3760 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 3761 + dependencies = [ 3762 + "proc-macro2", 3763 + "quote", 3764 + "syn 2.0.117", 3765 + ] 3766 + 3767 + [[package]] 3768 + name = "windows-link" 3769 + version = "0.1.3" 3770 + source = "registry+https://github.com/rust-lang/crates.io-index" 3771 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 3772 + 3773 + [[package]] 3774 + name = "windows-link" 3775 + version = "0.2.1" 3776 + source = "registry+https://github.com/rust-lang/crates.io-index" 3777 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 3778 + 3779 + [[package]] 3780 + name = "windows-numerics" 3781 + version = "0.2.0" 3782 + source = "registry+https://github.com/rust-lang/crates.io-index" 3783 + checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 3784 + dependencies = [ 3785 + "windows-core", 3786 + "windows-link 0.1.3", 3787 + ] 3788 + 3789 + [[package]] 3790 + name = "windows-result" 3791 + version = "0.3.4" 3792 + source = "registry+https://github.com/rust-lang/crates.io-index" 3793 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 3794 + dependencies = [ 3795 + "windows-link 0.1.3", 3796 + ] 3797 + 3798 + [[package]] 3799 + name = "windows-strings" 3800 + version = "0.4.2" 3801 + source = "registry+https://github.com/rust-lang/crates.io-index" 3802 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 3803 + dependencies = [ 3804 + "windows-link 0.1.3", 3805 + ] 3806 + 3807 + [[package]] 3808 + name = "windows-sys" 3809 + version = "0.59.0" 3810 + source = "registry+https://github.com/rust-lang/crates.io-index" 3811 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3812 + dependencies = [ 3813 + "windows-targets 0.52.6", 3814 + ] 3815 + 3816 + [[package]] 3817 + name = "windows-sys" 3818 + version = "0.60.2" 3819 + source = "registry+https://github.com/rust-lang/crates.io-index" 3820 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 3821 + dependencies = [ 3822 + "windows-targets 0.53.5", 3823 + ] 3824 + 3825 + [[package]] 3826 + name = "windows-sys" 3827 + version = "0.61.2" 3828 + source = "registry+https://github.com/rust-lang/crates.io-index" 3829 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 3830 + dependencies = [ 3831 + "windows-link 0.2.1", 3832 + ] 3833 + 3834 + [[package]] 3835 + name = "windows-targets" 3836 + version = "0.52.6" 3837 + source = "registry+https://github.com/rust-lang/crates.io-index" 3838 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3839 + dependencies = [ 3840 + "windows_aarch64_gnullvm 0.52.6", 3841 + "windows_aarch64_msvc 0.52.6", 3842 + "windows_i686_gnu 0.52.6", 3843 + "windows_i686_gnullvm 0.52.6", 3844 + "windows_i686_msvc 0.52.6", 3845 + "windows_x86_64_gnu 0.52.6", 3846 + "windows_x86_64_gnullvm 0.52.6", 3847 + "windows_x86_64_msvc 0.52.6", 3848 + ] 3849 + 3850 + [[package]] 3851 + name = "windows-targets" 3852 + version = "0.53.5" 3853 + source = "registry+https://github.com/rust-lang/crates.io-index" 3854 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 3855 + dependencies = [ 3856 + "windows-link 0.2.1", 3857 + "windows_aarch64_gnullvm 0.53.1", 3858 + "windows_aarch64_msvc 0.53.1", 3859 + "windows_i686_gnu 0.53.1", 3860 + "windows_i686_gnullvm 0.53.1", 3861 + "windows_i686_msvc 0.53.1", 3862 + "windows_x86_64_gnu 0.53.1", 3863 + "windows_x86_64_gnullvm 0.53.1", 3864 + "windows_x86_64_msvc 0.53.1", 3865 + ] 3866 + 3867 + [[package]] 3868 + name = "windows-threading" 3869 + version = "0.1.0" 3870 + source = "registry+https://github.com/rust-lang/crates.io-index" 3871 + checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 3872 + dependencies = [ 3873 + "windows-link 0.1.3", 3874 + ] 3875 + 3876 + [[package]] 3877 + name = "windows_aarch64_gnullvm" 3878 + version = "0.52.6" 3879 + source = "registry+https://github.com/rust-lang/crates.io-index" 3880 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3881 + 3882 + [[package]] 3883 + name = "windows_aarch64_gnullvm" 3884 + version = "0.53.1" 3885 + source = "registry+https://github.com/rust-lang/crates.io-index" 3886 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 3887 + 3888 + [[package]] 3889 + name = "windows_aarch64_msvc" 3890 + version = "0.52.6" 3891 + source = "registry+https://github.com/rust-lang/crates.io-index" 3892 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3893 + 3894 + [[package]] 3895 + name = "windows_aarch64_msvc" 3896 + version = "0.53.1" 3897 + source = "registry+https://github.com/rust-lang/crates.io-index" 3898 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 3899 + 3900 + [[package]] 3901 + name = "windows_i686_gnu" 3902 + version = "0.52.6" 3903 + source = "registry+https://github.com/rust-lang/crates.io-index" 3904 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3905 + 3906 + [[package]] 3907 + name = "windows_i686_gnu" 3908 + version = "0.53.1" 3909 + source = "registry+https://github.com/rust-lang/crates.io-index" 3910 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 3911 + 3912 + [[package]] 3913 + name = "windows_i686_gnullvm" 3914 + version = "0.52.6" 3915 + source = "registry+https://github.com/rust-lang/crates.io-index" 3916 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3917 + 3918 + [[package]] 3919 + name = "windows_i686_gnullvm" 3920 + version = "0.53.1" 3921 + source = "registry+https://github.com/rust-lang/crates.io-index" 3922 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 3923 + 3924 + [[package]] 3925 + name = "windows_i686_msvc" 3926 + version = "0.52.6" 3927 + source = "registry+https://github.com/rust-lang/crates.io-index" 3928 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3929 + 3930 + [[package]] 3931 + name = "windows_i686_msvc" 3932 + version = "0.53.1" 3933 + source = "registry+https://github.com/rust-lang/crates.io-index" 3934 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 3935 + 3936 + [[package]] 3937 + name = "windows_x86_64_gnu" 3938 + version = "0.52.6" 3939 + source = "registry+https://github.com/rust-lang/crates.io-index" 3940 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3941 + 3942 + [[package]] 3943 + name = "windows_x86_64_gnu" 3944 + version = "0.53.1" 3945 + source = "registry+https://github.com/rust-lang/crates.io-index" 3946 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 3947 + 3948 + [[package]] 3949 + name = "windows_x86_64_gnullvm" 3950 + version = "0.52.6" 3951 + source = "registry+https://github.com/rust-lang/crates.io-index" 3952 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3953 + 3954 + [[package]] 3955 + name = "windows_x86_64_gnullvm" 3956 + version = "0.53.1" 3957 + source = "registry+https://github.com/rust-lang/crates.io-index" 3958 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 3959 + 3960 + [[package]] 3961 + name = "windows_x86_64_msvc" 3962 + version = "0.52.6" 3963 + source = "registry+https://github.com/rust-lang/crates.io-index" 3964 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3965 + 3966 + [[package]] 3967 + name = "windows_x86_64_msvc" 3968 + version = "0.53.1" 3969 + source = "registry+https://github.com/rust-lang/crates.io-index" 3970 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 3971 + 3972 + [[package]] 3973 + name = "winnow" 3974 + version = "0.6.24" 3975 + source = "registry+https://github.com/rust-lang/crates.io-index" 3976 + checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" 3977 + dependencies = [ 3978 + "memchr", 3979 + ] 3980 + 3981 + [[package]] 3982 + name = "winnow" 3983 + version = "0.7.15" 3984 + source = "registry+https://github.com/rust-lang/crates.io-index" 3985 + checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" 3986 + dependencies = [ 3987 + "memchr", 3988 + ] 3989 + 3990 + [[package]] 3991 + name = "wit-bindgen" 3992 + version = "0.51.0" 3993 + source = "registry+https://github.com/rust-lang/crates.io-index" 3994 + checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" 3995 + dependencies = [ 3996 + "wit-bindgen-rust-macro", 3997 + ] 3998 + 3999 + [[package]] 4000 + name = "wit-bindgen-core" 4001 + version = "0.51.0" 4002 + source = "registry+https://github.com/rust-lang/crates.io-index" 4003 + checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" 4004 + dependencies = [ 4005 + "anyhow", 4006 + "heck", 4007 + "wit-parser", 4008 + ] 4009 + 4010 + [[package]] 4011 + name = "wit-bindgen-rust" 4012 + version = "0.51.0" 4013 + source = "registry+https://github.com/rust-lang/crates.io-index" 4014 + checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" 4015 + dependencies = [ 4016 + "anyhow", 4017 + "heck", 4018 + "indexmap", 4019 + "prettyplease", 4020 + "syn 2.0.117", 4021 + "wasm-metadata", 4022 + "wit-bindgen-core", 4023 + "wit-component", 4024 + ] 4025 + 4026 + [[package]] 4027 + name = "wit-bindgen-rust-macro" 4028 + version = "0.51.0" 4029 + source = "registry+https://github.com/rust-lang/crates.io-index" 4030 + checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" 4031 + dependencies = [ 4032 + "anyhow", 4033 + "prettyplease", 4034 + "proc-macro2", 4035 + "quote", 4036 + "syn 2.0.117", 4037 + "wit-bindgen-core", 4038 + "wit-bindgen-rust", 4039 + ] 4040 + 4041 + [[package]] 4042 + name = "wit-component" 4043 + version = "0.244.0" 4044 + source = "registry+https://github.com/rust-lang/crates.io-index" 4045 + checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" 4046 + dependencies = [ 4047 + "anyhow", 4048 + "bitflags 2.11.0", 4049 + "indexmap", 4050 + "log", 4051 + "serde", 4052 + "serde_derive", 4053 + "serde_json", 4054 + "wasm-encoder", 4055 + "wasm-metadata", 4056 + "wasmparser", 4057 + "wit-parser", 4058 + ] 4059 + 4060 + [[package]] 4061 + name = "wit-parser" 4062 + version = "0.244.0" 4063 + source = "registry+https://github.com/rust-lang/crates.io-index" 4064 + checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" 4065 + dependencies = [ 4066 + "anyhow", 4067 + "id-arena", 4068 + "indexmap", 4069 + "log", 4070 + "semver", 4071 + "serde", 4072 + "serde_derive", 4073 + "serde_json", 4074 + "unicode-xid", 4075 + "wasmparser", 4076 + ] 4077 + 4078 + [[package]] 4079 + name = "zlib-rs" 4080 + version = "0.5.5" 4081 + source = "registry+https://github.com/rust-lang/crates.io-index" 4082 + checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" 4083 + 4084 + [[package]] 4085 + name = "zmij" 4086 + version = "1.0.21" 4087 + source = "registry+https://github.com/rust-lang/crates.io-index" 4088 + checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
+30 -1
Cargo.toml
··· 14 14 # documentation = "" 15 15 readme = "README.md" 16 16 keywords = ["PKS", "todo", "personal tools"] 17 + rust-version = "1.94.0" 17 18 18 19 [workspace.lints.rust] 19 20 unsafe_code = "forbid" ··· 24 25 nursery = "deny" 25 26 26 27 [workspace.dependencies] 27 - 28 + snafu = "0.9.0" 29 + tracing = "0.1.44" 28 30 29 31 [package] 30 32 name = "filaments" ··· 43 45 workspace = true 44 46 45 47 [dependencies] 48 + tracing.workspace = true 49 + color-eyre = "0.6.5" 50 + human-panic = "2.0.6" 51 + better-panic = "0.3.0" 52 + crossterm = { version = "0.29.0", features = ["event-stream"] } 53 + futures = "0.3.32" 54 + ratatui = "0.30.0" 55 + serde = { version = "1.0.228", features = ["derive"] } 56 + tokio = { version = "1.50.0", features = ["full"] } 57 + tokio-util = "0.7.18" 58 + signal-hook = "0.4.3" 59 + strum = { version = "0.28.0", features = ["derive"] } 60 + directories = "6.0.0" 61 + tracing-subscriber = { version = "0.3.22", features = ["env-filter"] } 62 + tracing-error = "0.2.1" 63 + clap = { version = "4.5.60", features = ["derive", "cargo", "wrap_help", "unicode", "string", "unstable-styles"] } 64 + kdl = "6.5.0" 65 + 66 + [build-dependencies] 67 + anyhow = "1.0.102" 68 + vergen-gix = {version = "9.1.0", features = ["build", "cargo"]} 69 + 70 + [profile.release] 71 + codegen-units = 1 72 + lto = true 73 + opt-level = "s" 74 + strip = true 46 75
+16
build.rs
··· 1 + //! Build script for filaments 2 + //! populates rustc environment variables with metadata about 3 + //! the crate, such as author, commit, etc 4 + use anyhow::Result; 5 + use vergen_gix::{BuildBuilder, CargoBuilder, Emitter, GixBuilder}; 6 + 7 + fn main() -> Result<()> { 8 + let build = BuildBuilder::all_build()?; 9 + let gix = GixBuilder::all_git()?; 10 + let cargo = CargoBuilder::all_cargo()?; 11 + Emitter::default() 12 + .add_instructions(&build)? 13 + .add_instructions(&gix)? 14 + .add_instructions(&cargo)? 15 + .emit() 16 + }
+5 -5
flake.lock
··· 22 22 }, 23 23 "nixpkgs": { 24 24 "locked": { 25 - "lastModified": 1772542754, 26 - "narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=", 27 - "rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4", 28 - "revCount": 957538, 25 + "lastModified": 1772773019, 26 + "narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=", 27 + "rev": "aca4d95fce4914b3892661bcb80b8087293536c6", 28 + "revCount": 958961, 29 29 "type": "tarball", 30 - "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.957538%2Brev-8c809a146a140c5c8806f13399592dbcb1bb5dc4/019cb563-81c1-72cf-aec2-46679a968011/source.tar.gz" 30 + "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.958961%2Brev-aca4d95fce4914b3892661bcb80b8087293536c6/019cc7ad-65c5-7d4e-9860-842d09d8f4fa/source.tar.gz" 31 31 }, 32 32 "original": { 33 33 "type": "tarball",
+1 -1
flake.nix
··· 1 1 { 2 - description = "An empty flake template that you can adapt to your own environment"; 2 + description = "Filaments dev flake"; 3 3 4 4 # Flake inputs 5 5 inputs = {
+14 -3
justfile
··· 3 3 default: 4 4 @just --list 5 5 6 + # release mode by default 7 + mode := "debug" 8 + 9 + _cargo_flags := if mode == "release" { "--release" } else { "" } 10 + 11 + # Builds everything in the workspace 6 12 build: 7 - cargo build 13 + cargo build {{_cargo_flags}} 14 + 15 + # Runs Filaments 16 + run: 17 + cargo run {{_cargo_flags}} 8 18 9 - test: 10 - cargo test 19 + # Run all tests 20 + test: 21 + cargo test {{_cargo_flags}}
+203
src/app.rs
··· 1 + use color_eyre::eyre::Result; 2 + use crossterm::event::KeyEvent; 3 + use ratatui::layout::Rect; 4 + use serde::{Deserialize, Serialize}; 5 + use strum::{Display, EnumIter}; 6 + use tokio::sync::mpsc::{self, UnboundedReceiver, UnboundedSender}; 7 + use tracing::debug; 8 + 9 + use crate::{ 10 + components::Component, 11 + config::Config, 12 + signal::Signal, 13 + tui::{Event, Tui}, 14 + }; 15 + 16 + pub struct App { 17 + config: Config, 18 + tick_rate: f64, 19 + frame_rate: f64, 20 + components: Vec<Box<dyn Component>>, 21 + should_quit: bool, 22 + should_suspend: bool, 23 + #[allow(dead_code)] 24 + region: Region, 25 + last_tick_key_events: Vec<KeyEvent>, 26 + signal_tx: UnboundedSender<Signal>, 27 + signal_rx: UnboundedReceiver<Signal>, 28 + } 29 + 30 + /// The different regions of the application that the user can 31 + /// be interacting with. Think of these kind of like the highest class of 32 + /// components. 33 + #[derive( 34 + Default, Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, EnumIter, Display, 35 + )] 36 + pub enum Region { 37 + #[default] 38 + Home, 39 + } 40 + 41 + impl App { 42 + /// Construct a new `App` instance. 43 + pub fn new(tick_rate: f64, frame_rate: f64) -> Self { 44 + let (signal_tx, signal_rx) = mpsc::unbounded_channel(); 45 + 46 + Self { 47 + tick_rate, 48 + frame_rate, 49 + components: vec![], 50 + should_quit: false, 51 + should_suspend: false, 52 + config: Config::new(), 53 + region: Region::default(), 54 + last_tick_key_events: Vec::new(), 55 + signal_tx, 56 + signal_rx, 57 + } 58 + } 59 + 60 + pub async fn run(&mut self) -> Result<()> { 61 + let mut tui = Tui::new()? 62 + .with_tick_rate(self.tick_rate) 63 + .with_frame_rate(self.frame_rate); 64 + tui.enter()?; 65 + 66 + for component in &mut self.components { 67 + component.register_signal_handler(self.signal_tx.clone())?; 68 + } 69 + for component in &mut self.components { 70 + component.register_config_handler(self.config.clone())?; 71 + } 72 + 73 + for component in &mut self.components { 74 + component.init(tui.size()?)?; 75 + } 76 + 77 + let signal_tx = self.signal_tx.clone(); 78 + 79 + loop { 80 + self.handle_events(&mut tui).await?; 81 + self.handle_signals(&mut tui)?; 82 + if self.should_suspend { 83 + tui.suspend()?; 84 + 85 + // We are sending resume here because once its done suspending, 86 + // it will continue execution here. 87 + signal_tx.send(Signal::Resume)?; 88 + signal_tx.send(Signal::ClearScreen)?; 89 + tui.enter()?; 90 + } else if self.should_quit { 91 + tui.stop(); 92 + break; 93 + } 94 + } 95 + 96 + tui.exit()?; 97 + 98 + Ok(()) 99 + } 100 + 101 + async fn handle_events(&mut self, tui: &mut Tui) -> Result<()> { 102 + let Some(event) = tui.next_event().await else { 103 + return Ok(()); 104 + }; 105 + 106 + debug!("received event: {event:?}"); 107 + 108 + let signal_tx = self.signal_tx.clone(); 109 + 110 + match event { 111 + Event::Quit => signal_tx.send(Signal::Quit)?, 112 + Event::Tick => signal_tx.send(Signal::Tick)?, 113 + Event::Render => signal_tx.send(Signal::Render)?, 114 + Event::Resize(x, y) => signal_tx.send(Signal::Resize(x, y))?, 115 + Event::Key(key) => self.handle_key_event(key)?, 116 + 117 + _ => {} 118 + } 119 + 120 + for component in &mut self.components { 121 + if let Some(signal) = component.handle_events(Some(event.clone()))? { 122 + signal_tx.send(signal)?; 123 + } 124 + } 125 + 126 + Ok(()) 127 + } 128 + 129 + fn handle_key_event(&mut self, key: KeyEvent) -> Result<()> { 130 + debug!("key received: {key:#?}"); 131 + 132 + let signal_tx = self.signal_tx.clone(); 133 + 134 + let Some(region_keymap) = self.config.keymap.get(&self.region) else { 135 + return Ok(()); 136 + }; 137 + 138 + if let Some(signal) = region_keymap.get(&vec![key]) { 139 + signal_tx.send(signal.clone())?; 140 + } else { 141 + self.last_tick_key_events.push(key); 142 + if let Some(signal) = region_keymap.get(&self.last_tick_key_events) { 143 + debug!("Got signal: {signal:?}"); 144 + signal_tx.send(signal.clone())?; 145 + } 146 + } 147 + 148 + Ok(()) 149 + } 150 + 151 + fn handle_signals(&mut self, tui: &mut Tui) -> Result<()> { 152 + while let Ok(signal) = self.signal_rx.try_recv() { 153 + if signal != Signal::Tick && signal != Signal::Render { 154 + debug!("handling signal: {signal:?}"); 155 + } 156 + 157 + match signal { 158 + Signal::Tick => { 159 + self.last_tick_key_events.drain(..); 160 + } 161 + 162 + Signal::Quit => self.should_quit = true, 163 + 164 + Signal::Suspend => self.should_suspend = true, 165 + 166 + Signal::Resume => self.should_suspend = false, 167 + 168 + Signal::ClearScreen => tui.terminal.clear()?, 169 + Signal::Resize(x, y) => self.handle_resize(tui, x, y)?, 170 + Signal::Render => self.render(tui)?, 171 + _ => {} 172 + } 173 + 174 + for component in &mut self.components { 175 + if let Some(signal) = component.update(signal.clone())? { 176 + self.signal_tx.send(signal)?; 177 + } 178 + } 179 + } 180 + Ok(()) 181 + } 182 + 183 + fn handle_resize(&mut self, tui: &mut Tui, w: u16, h: u16) -> Result<()> { 184 + tui.resize(Rect::new(0, 0, w, h))?; 185 + 186 + self.render(tui)?; 187 + Ok(()) 188 + } 189 + 190 + fn render(&mut self, tui: &mut Tui) -> Result<()> { 191 + tui.draw(|frame| { 192 + for component in &mut self.components { 193 + if let Err(err) = component.draw(frame, frame.area()) { 194 + let _ = self 195 + .signal_tx 196 + .send(Signal::Error(format!("Failed to draw: {err:?}"))); 197 + } 198 + } 199 + })?; 200 + 201 + Ok(()) 202 + } 203 + }
+42
src/cli.rs
··· 1 + use clap::Parser; 2 + 3 + use crate::config::{get_config_dir, get_data_dir}; 4 + 5 + #[derive(Parser, Debug)] 6 + #[command(author, version = version(), about)] 7 + pub struct Cli { 8 + /// Tick rate, i.e. number of ticks per second 9 + #[arg(short, long, value_name = "FLOAT", default_value_t = 4.0)] 10 + pub tick_rate: f64, 11 + 12 + /// Frame rate, i.e. number of frames per second 13 + #[arg(short, long, value_name = "FLOAT", default_value_t = 60.0)] 14 + pub frame_rate: f64, 15 + } 16 + 17 + const VERSION_MESSAGE: &str = concat!( 18 + env!("CARGO_PKG_VERSION"), 19 + "-", 20 + env!("VERGEN_GIT_DESCRIBE"), 21 + " (", 22 + env!("VERGEN_BUILD_DATE"), 23 + ")" 24 + ); 25 + 26 + pub fn version() -> String { 27 + let author = clap::crate_authors!(); 28 + 29 + // let current_exe_path = PathBuf::from(clap::crate_name!()).display().to_string(); 30 + let config_dir_path = get_config_dir().display().to_string(); 31 + let data_dir_path = get_data_dir().display().to_string(); 32 + 33 + format!( 34 + "\ 35 + {VERSION_MESSAGE} 36 + 37 + Authors: {author} 38 + 39 + Config directory: {config_dir_path} 40 + Data directory: {data_dir_path}" 41 + ) 42 + }
+119
src/components/mod.rs
··· 1 + use crossterm::event::{KeyEvent, MouseEvent}; 2 + use ratatui::{ 3 + Frame, 4 + layout::{Rect, Size}, 5 + }; 6 + use tokio::sync::mpsc::UnboundedSender; 7 + 8 + use crate::{config::Config, signal::Signal, tui::Event}; 9 + 10 + /// `Component` is a trait that represents a visual and interactive element of the user interface. 11 + /// 12 + /// Implementers of this trait can be registered with the main application loop and will be able to 13 + /// receive events, update state, and be rendered on the screen. 14 + pub trait Component: Send { 15 + /// Register a signal handler that can send signals for processing if necessary. 16 + /// 17 + /// # Arguments 18 + /// 19 + /// * `tx` - An unbounded sender that can send signals. 20 + /// 21 + /// # Returns 22 + /// 23 + /// * [`color_eyre::Result<()>`] - An Ok result or an error. 24 + fn register_signal_handler(&mut self, tx: UnboundedSender<Signal>) -> color_eyre::Result<()> { 25 + let _ = tx; // to appease clippy 26 + Ok(()) 27 + } 28 + /// Register a configuration handler that provides configuration settings if necessary. 29 + /// 30 + /// # Arguments 31 + /// 32 + /// * `config` - Configuration settings. 33 + /// 34 + /// # Returns 35 + /// 36 + /// * [`color_eyre::Result<()>`] - An Ok result or an error. 37 + fn register_config_handler(&mut self, config: Config) -> color_eyre::Result<()> { 38 + let _ = config; // to appease clippy 39 + Ok(()) 40 + } 41 + /// Initialize the component with a specified area if necessary. 42 + /// 43 + /// # Arguments 44 + /// 45 + /// * `area` - Rectangular area to initialize the component within. 46 + /// 47 + /// # Returns 48 + /// 49 + /// * [`color_eyre::Result<()>`] - An Ok result or an error. 50 + fn init(&mut self, area: Size) -> color_eyre::Result<()> { 51 + let _ = area; // to appease clippy 52 + Ok(()) 53 + } 54 + /// Handle incoming events and produce signals if necessary. 55 + /// 56 + /// # Arguments 57 + /// 58 + /// * `event` - An optional event to be processed. 59 + /// 60 + /// # Returns 61 + /// 62 + /// * [`color_eyre::Result<Option<signal>>`] - A signal to be processed or none. 63 + fn handle_events(&mut self, event: Option<Event>) -> color_eyre::Result<Option<Signal>> { 64 + let signal = match event { 65 + Some(Event::Key(key_event)) => self.handle_key_event(key_event)?, 66 + Some(Event::Mouse(mouse_event)) => self.handle_mouse_event(mouse_event)?, 67 + _ => None, 68 + }; 69 + Ok(signal) 70 + } 71 + /// Handle key events and produce signals if necessary. 72 + /// 73 + /// # Arguments 74 + /// 75 + /// * `key` - A key event to be processed. 76 + /// 77 + /// # Returns 78 + /// 79 + /// * [`color_eyre::Result<Option<signal>>`] - A signal to be processed or none. 80 + fn handle_key_event(&mut self, key: KeyEvent) -> color_eyre::Result<Option<Signal>> { 81 + let _ = key; // to appease clippy 82 + Ok(None) 83 + } 84 + /// Handle mouse events and produce signals if necessary. 85 + /// 86 + /// # Arguments 87 + /// 88 + /// * `mouse` - A mouse event to be processed. 89 + /// 90 + /// # Returns 91 + /// 92 + /// * [`color_eyre::Result<Option<signal>>`] - A signal to be processed or none. 93 + fn handle_mouse_event(&mut self, mouse: MouseEvent) -> color_eyre::Result<Option<Signal>> { 94 + let _ = mouse; // to appease clippy 95 + Ok(None) 96 + } 97 + /// Update the state of the component based on a received signal. (REQUIRED) 98 + /// 99 + /// # Arguments 100 + /// 101 + /// * `signal` - A signal that may modify the state of the component. 102 + /// 103 + /// # Returns 104 + /// 105 + /// * [`color_eyre::Result<Option<signal>>`] - A signal to be processed or none. 106 + fn update(&mut self, signal: Signal) -> color_eyre::Result<Option<Signal>>; 107 + 108 + /// Render the component on the screen. (REQUIRED) 109 + /// 110 + /// # Arguments 111 + /// 112 + /// * `f` - A frame used for rendering. 113 + /// * `area` - The area in which the component should be drawn. 114 + /// 115 + /// # Returns 116 + /// 117 + /// * [`color_eyre::Result<()>`] - An Ok result or an error. 118 + fn draw(&mut self, frame: &mut Frame, area: Rect) -> color_eyre::Result<()>; 119 + }
+92
src/config.rs
··· 1 + use directories::ProjectDirs; 2 + use kdl::KdlDocument; 3 + use serde::Deserialize; 4 + use std::{env, path::PathBuf, sync::LazyLock}; 5 + 6 + use crate::keymap::KeyMap; 7 + 8 + /// Project Name: Filaments 9 + pub static PROJECT_NAME: LazyLock<String> = 10 + LazyLock::new(|| env!("CARGO_CRATE_NAME").to_uppercase()); 11 + 12 + /// The OS-agnostic data directory for the project. 13 + pub static DATA_DIRECTORY: LazyLock<Option<PathBuf>> = LazyLock::new(|| { 14 + env::var(format!("{}_DATA", PROJECT_NAME.clone())) 15 + .ok() 16 + .map(PathBuf::from) 17 + }); 18 + 19 + /// The OS-agnostic config directory for the project. 20 + pub static CONFIG_DIRECTORY: LazyLock<Option<PathBuf>> = LazyLock::new(|| { 21 + env::var(format!("{}_CONFIG", PROJECT_NAME.clone())) 22 + .ok() 23 + .map(PathBuf::from) 24 + }); 25 + 26 + const DEFAULT_CONFIG: &str = include_str!("../.config/config.kdl"); 27 + 28 + /// The App Config and Data locations. 29 + #[derive(Clone, Debug, Deserialize, Default)] 30 + #[expect(dead_code)] 31 + pub struct AppConfig { 32 + #[serde(default)] 33 + pub data_dir: PathBuf, 34 + #[serde(default)] 35 + pub config_dir: PathBuf, 36 + } 37 + 38 + /// Configuration for the App 39 + #[expect(dead_code)] 40 + #[derive(Debug, Clone)] 41 + pub struct Config { 42 + pub app_config: AppConfig, 43 + pub keymap: KeyMap, 44 + // pub styles: Styles, 45 + } 46 + 47 + impl Config { 48 + pub fn new() -> Self { 49 + let default_config: KdlDocument = DEFAULT_CONFIG 50 + .parse() 51 + .expect("Default config should always be a valid KDL document."); 52 + 53 + let keymap_node = default_config 54 + .get("keymap") 55 + .expect("Config::new Keymap must exist in default config."); 56 + 57 + let keymap = 58 + KeyMap::try_from(keymap_node).expect("default config should always be a valid keymap"); 59 + 60 + Self { 61 + app_config: AppConfig { 62 + data_dir: get_data_dir(), 63 + config_dir: get_config_dir(), 64 + }, 65 + keymap, 66 + } 67 + } 68 + } 69 + 70 + /// Returns the path to the OS-agnostic data directory. 71 + pub fn get_data_dir() -> PathBuf { 72 + DATA_DIRECTORY.clone().unwrap_or_else(|| { 73 + project_directory().map_or_else( 74 + || PathBuf::from(".").join(".data"), 75 + |proj_dirs| proj_dirs.data_local_dir().to_path_buf(), 76 + ) 77 + }) 78 + } 79 + 80 + /// Returns the path to the OS-agnostic config directory. 81 + pub fn get_config_dir() -> PathBuf { 82 + CONFIG_DIRECTORY.clone().unwrap_or_else(|| { 83 + project_directory().map_or_else( 84 + || PathBuf::from(".").join(".config"), 85 + |proj_dirs| proj_dirs.config_local_dir().to_path_buf(), 86 + ) 87 + }) 88 + } 89 + 90 + fn project_directory() -> Option<ProjectDirs> { 91 + ProjectDirs::from("com", "suri-codes", env!("CARGO_PKG_NAME")) 92 + }
+74
src/errors.rs
··· 1 + /// Sets the panic-hook to be customized color-eyre `panic_hook`. 2 + /// 3 + /// Additionally the panic handler prints different information 4 + /// based on debug / release builds. 5 + pub fn init() -> color_eyre::Result<()> { 6 + let (_panic_hook, eyre_hook) = color_eyre::config::HookBuilder::default() 7 + .panic_section(format!( 8 + "This is a bug. Please report it at {}", 9 + env!("CARGO_PKG_REPOSITORY") 10 + )) 11 + .capture_span_trace_by_default(false) 12 + .display_location_section(false) 13 + .display_env_section(false) 14 + .into_hooks(); 15 + 16 + eyre_hook.install()?; 17 + std::panic::set_hook(Box::new(move |panic_info| { 18 + //TODO: exit from terminal if the app is in a terminal 19 + 20 + // in release mode, do human_panic printing 21 + #[cfg(not(debug_assertions))] 22 + { 23 + use human_panic::{handle_dump, metadata, print_msg}; 24 + let metadata = metadata!(); 25 + let file_path = handle_dump(&metadata, panic_info); 26 + print_msg(file_path, &metadata) 27 + .expect("human-panic: printing error message to console failed"); 28 + eprintln!("{}", _panic_hook.panic_report(panic_info)); 29 + } 30 + 31 + // in debug mode do better panic printing 32 + #[cfg(debug_assertions)] 33 + { 34 + better_panic::Settings::auto() 35 + .most_recent_first(false) 36 + .lineno_suffix(true) 37 + .verbosity(better_panic::Verbosity::Full) 38 + .create_panic_handler()(panic_info); 39 + } 40 + 41 + // 1 = failure 42 + std::process::exit(1) 43 + })); 44 + 45 + Ok(()) 46 + } 47 + 48 + /// Akin to `dbg!` macro, except that it generates `tracing::Event`s instead 49 + /// of printing to standard error. 50 + /// 51 + /// Can customize level by providing a `tracing::Level`, but its debug by default. 52 + #[macro_export] 53 + macro_rules! trace_dbg { 54 + (target: $target:expr, level: $level:expr, $ex:expr) => { 55 + { 56 + match $ex { 57 + value => { 58 + tracing::event!(target: $target, $level, ?value, stringify!($ex)); 59 + value 60 + } 61 + } 62 + } 63 + }; 64 + (level: $level:expr, $ex:expr) => { 65 + trace_dbg!(target: module_path!(), level: $level, $ex) 66 + }; 67 + 68 + (target: $target:expr, $ex:expr) => { 69 + trace_dbg!(target: $target, level: tracing::Level::DEBUG, $ex) 70 + }; 71 + ($ex:expr) => { 72 + trace_dbg!(level: tracing::Level::DEBUG, $ex) 73 + }; 74 + }
+209
src/keymap.rs
··· 1 + use std::{ 2 + collections::HashMap, 3 + ops::{Deref, DerefMut}, 4 + }; 5 + 6 + use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; 7 + use kdl::KdlNode; 8 + use strum::IntoEnumIterator; 9 + 10 + use crate::{app::Region, signal::Signal}; 11 + 12 + #[derive(Debug, Clone)] 13 + pub struct KeyMap(pub HashMap<Region, HashMap<Vec<KeyEvent>, Signal>>); 14 + 15 + impl TryFrom<&KdlNode> for KeyMap { 16 + type Error = color_eyre::Report; 17 + 18 + fn try_from(value: &KdlNode) -> std::result::Result<Self, Self::Error> { 19 + let mut all_binds = HashMap::new(); 20 + 21 + for region in Region::iter() { 22 + let mut region_binds = HashMap::new(); 23 + let Some(binds) = value 24 + .children() 25 + .expect("Keymap must have children.") 26 + .get(&region.to_string()) 27 + else { 28 + continue; 29 + }; 30 + 31 + // now we iter through the things children 32 + for child in binds.iter_children() { 33 + let key_combo_str = child.name().to_string(); 34 + let key_combo_str = key_combo_str.trim(); 35 + 36 + let signal_str = child 37 + .entries() 38 + .first() 39 + .expect("A bind must map to an entry") 40 + .to_string(); 41 + let signal_str = signal_str.trim(); 42 + 43 + let signal: Signal = signal_str.parse().expect("Must be a \"bindable\" Signal"); 44 + let key_combo = parse_key_sequence(key_combo_str).unwrap(); 45 + 46 + let _ = region_binds.insert(key_combo, signal); 47 + } 48 + 49 + let _ = all_binds.insert(region, region_binds); 50 + } 51 + 52 + Ok(Self(all_binds)) 53 + } 54 + } 55 + 56 + impl Deref for KeyMap { 57 + type Target = HashMap<Region, HashMap<Vec<KeyEvent>, Signal>>; 58 + 59 + fn deref(&self) -> &Self::Target { 60 + &self.0 61 + } 62 + } 63 + 64 + impl DerefMut for KeyMap { 65 + fn deref_mut(&mut self) -> &mut Self::Target { 66 + &mut self.0 67 + } 68 + } 69 + 70 + pub fn parse_key_sequence(raw: &str) -> color_eyre::Result<Vec<KeyEvent>, String> { 71 + if raw.chars().filter(|c| *c == '>').count() != raw.chars().filter(|c| *c == '<').count() { 72 + return Err(format!("Unable to parse `{raw}`")); 73 + } 74 + let raw = if raw.contains("><") { 75 + raw 76 + } else { 77 + let raw = raw.strip_prefix('<').unwrap_or(raw); 78 + 79 + raw.strip_prefix('>').unwrap_or(raw) 80 + }; 81 + 82 + raw.split("><") 83 + .map(|seq| { 84 + seq.strip_prefix('<') 85 + .unwrap_or_else(|| seq.strip_suffix('>').map_or(seq, |s| s)) 86 + }) 87 + .map(parse_key_event) 88 + .collect() 89 + } 90 + 91 + fn parse_key_event(raw: &str) -> color_eyre::Result<KeyEvent, String> { 92 + let raw_lower = raw.to_ascii_lowercase(); 93 + let (remaining, modifiers) = extract_modifiers(&raw_lower); 94 + parse_key_code_with_modifiers(remaining, modifiers) 95 + } 96 + 97 + fn extract_modifiers(raw: &str) -> (&str, KeyModifiers) { 98 + let mut modifiers = KeyModifiers::empty(); 99 + let mut current = raw; 100 + 101 + loop { 102 + match current { 103 + rest if rest.starts_with("ctrl-") => { 104 + modifiers.insert(KeyModifiers::CONTROL); 105 + current = &rest[5..]; 106 + } 107 + rest if rest.starts_with("alt-") => { 108 + modifiers.insert(KeyModifiers::ALT); 109 + current = &rest[4..]; 110 + } 111 + rest if rest.starts_with("shift-") => { 112 + modifiers.insert(KeyModifiers::SHIFT); 113 + current = &rest[6..]; 114 + } 115 + _ => break, // break out of the loop if no known prefix is detected 116 + } 117 + } 118 + 119 + (current, modifiers) 120 + } 121 + 122 + fn parse_key_code_with_modifiers( 123 + raw: &str, 124 + mut modifiers: KeyModifiers, 125 + ) -> color_eyre::Result<KeyEvent, String> { 126 + let c = match raw { 127 + "esc" => KeyCode::Esc, 128 + "enter" => KeyCode::Enter, 129 + "left" => KeyCode::Left, 130 + "right" => KeyCode::Right, 131 + "up" => KeyCode::Up, 132 + "down" => KeyCode::Down, 133 + "home" => KeyCode::Home, 134 + "end" => KeyCode::End, 135 + "pageup" => KeyCode::PageUp, 136 + "pagedown" => KeyCode::PageDown, 137 + "backtab" => { 138 + modifiers.insert(KeyModifiers::SHIFT); 139 + KeyCode::BackTab 140 + } 141 + "backspace" => KeyCode::Backspace, 142 + "delete" => KeyCode::Delete, 143 + "insert" => KeyCode::Insert, 144 + "f1" => KeyCode::F(1), 145 + "f2" => KeyCode::F(2), 146 + "f3" => KeyCode::F(3), 147 + "f4" => KeyCode::F(4), 148 + "f5" => KeyCode::F(5), 149 + "f6" => KeyCode::F(6), 150 + "f7" => KeyCode::F(7), 151 + "f8" => KeyCode::F(8), 152 + "f9" => KeyCode::F(9), 153 + "f10" => KeyCode::F(10), 154 + "f11" => KeyCode::F(11), 155 + "f12" => KeyCode::F(12), 156 + "space" => KeyCode::Char(' '), 157 + "hyphen" | "minuc" => KeyCode::Char('-'), 158 + "tab" => KeyCode::Tab, 159 + c if c.len() == 1 => { 160 + let mut c = c.chars().next().unwrap(); 161 + if modifiers.contains(KeyModifiers::SHIFT) { 162 + c = c.to_ascii_uppercase(); 163 + } 164 + KeyCode::Char(c) 165 + } 166 + _ => return Err(format!("Unable to parse {raw}")), 167 + }; 168 + Ok(KeyEvent::new(c, modifiers)) 169 + } 170 + 171 + #[cfg(test)] 172 + mod test { 173 + use crossterm::event::{KeyEvent, KeyModifiers}; 174 + use kdl::KdlNode; 175 + 176 + use crate::{keymap::KeyMap, signal::Signal}; 177 + 178 + #[test] 179 + fn test_quit_in_home_region() { 180 + let keymap_str = " 181 + keymap { 182 + Home { 183 + q Quit 184 + <Ctrl-C> Quit 185 + } 186 + } 187 + "; 188 + 189 + let kdl: &KdlNode = &keymap_str 190 + .parse() 191 + .expect("Keymap_str should be a valid KDL document"); 192 + 193 + let keymap: KeyMap = kdl.try_into().expect("Must be a valid keymap"); 194 + 195 + let map = keymap 196 + .get(&crate::app::Region::Home) 197 + .expect("Home region must exist in keymap"); 198 + 199 + let signal = map 200 + .get(&vec![KeyEvent::new_with_kind( 201 + crossterm::event::KeyCode::Char('q'), 202 + KeyModifiers::empty(), 203 + crossterm::event::KeyEventKind::Press, 204 + )]) 205 + .expect("Must resolve to a signal"); 206 + 207 + assert_eq!(*signal, Signal::Quit); 208 + } 209 + }
+52
src/logging.rs
··· 1 + use std::{ 2 + fs::{File, create_dir_all}, 3 + sync::LazyLock, 4 + }; 5 + 6 + use color_eyre::eyre::Result; 7 + use tracing::Level; 8 + use tracing_error::ErrorLayer; 9 + use tracing_subscriber::{EnvFilter, Layer, fmt, layer::SubscriberExt, util::SubscriberInitExt}; 10 + 11 + use crate::config; 12 + 13 + /// The user-set log level if it exists. 14 + pub static LOG_LEVEL_ENV: LazyLock<String> = 15 + LazyLock::new(|| format!("{}_LOG_LEVEL", config::PROJECT_NAME.clone())); 16 + 17 + /// The logfile name set by our package name. 18 + pub static LOG_FILE: LazyLock<String> = LazyLock::new(|| format!("{}.log", env!("CARGO_PKG_NAME"))); 19 + 20 + /// Initializes the logger, which writes logs to a `log_file` in the data dir. 21 + /// 22 + /// NOTE: log level is configurable via the `RUST_LOG` env var or the 23 + /// `FILAMENTS_LOG_LEVEL` env var 24 + pub fn init() -> Result<()> { 25 + let directory = config::get_data_dir(); 26 + 27 + create_dir_all(&directory)?; 28 + 29 + let log_path = directory.join(LOG_FILE.clone()); 30 + let log_file = File::create(log_path)?; 31 + 32 + let env_filter = EnvFilter::builder().with_default_directive(Level::INFO.into()); 33 + 34 + // If `RUST_LOG` is set, use that as default,, or use value of `LOG_ENV` variable. 35 + let env_filter = env_filter 36 + .try_from_env() 37 + .or_else(|_| env_filter.with_env_var(LOG_LEVEL_ENV.clone()).from_env())?; 38 + 39 + let file_subscriber = fmt::layer() 40 + .with_file(true) 41 + .with_line_number(true) 42 + .with_writer(log_file) 43 + .with_target(false) 44 + .with_ansi(false) 45 + .with_filter(env_filter); 46 + tracing_subscriber::registry() 47 + .with(file_subscriber) 48 + .with(ErrorLayer::default()) 49 + .try_init()?; 50 + 51 + Ok(()) 52 + }
+24 -2
src/main.rs
··· 2 2 //! My (suri.codes) personal-knowledge-system, with deeply integrated task tracking and long term goal planning capabilities. 3 3 //! 4 4 5 - fn main() { 6 - println!("Hello, world!"); 5 + use clap::Parser; 6 + use crate::{app::App, cli::Cli}; 7 + 8 + mod app; 9 + mod cli; 10 + mod components; 11 + mod config; 12 + mod errors; 13 + mod keymap; 14 + mod logging; 15 + mod signal; 16 + mod tui; 17 + 18 + #[tokio::main] 19 + async fn main() -> color_eyre::Result<()> { 20 + errors::init()?; 21 + logging::init()?; 22 + 23 + let args = Cli::parse(); 24 + let mut app = App::new(args.tick_rate, args.frame_rate); 25 + 26 + app.run().await?; 27 + 28 + Ok(()) 7 29 }
+37
src/signal.rs
··· 1 + use std::str::FromStr; 2 + 3 + use color_eyre::eyre::eyre; 4 + use strum::Display; 5 + 6 + use serde::{Deserialize, Serialize}; 7 + 8 + /// The varying signals that can be emitted. 9 + #[derive(Debug, Clone, PartialEq, Eq, Display, Serialize, Deserialize)] 10 + pub enum Signal { 11 + Tick, 12 + Render, 13 + Resize(u16, u16), 14 + Suspend, 15 + Resume, 16 + Quit, 17 + ClearScreen, 18 + Error(String), 19 + Help, 20 + } 21 + 22 + impl FromStr for Signal { 23 + type Err = color_eyre::Report; 24 + 25 + fn from_str(s: &str) -> Result<Self, Self::Err> { 26 + Ok(match s.to_lowercase().as_str() { 27 + "suspend" => Self::Suspend, 28 + "resume" => Self::Resume, 29 + "quit" => Self::Quit, 30 + _ => { 31 + return Err(eyre!(format!( 32 + "Attempt to construct a non-user Signal from str: {s}" 33 + ))); 34 + } 35 + }) 36 + } 37 + }
+279
src/tui.rs
··· 1 + use std::{ 2 + io::{Stdout, stdout}, 3 + ops::{Deref, DerefMut}, 4 + time::Duration, 5 + }; 6 + 7 + use color_eyre::eyre::Result; 8 + use crossterm::{ 9 + cursor, 10 + event::{ 11 + DisableBracketedPaste, DisableMouseCapture, EnableBracketedPaste, EnableMouseCapture, 12 + EventStream, KeyEvent, KeyEventKind, MouseEvent, 13 + }, 14 + terminal::{EnterAlternateScreen, LeaveAlternateScreen, enable_raw_mode}, 15 + }; 16 + use futures::{FutureExt as _, StreamExt as _}; 17 + use ratatui::{Terminal, prelude::CrosstermBackend}; 18 + use tokio::{ 19 + sync::mpsc::{self, UnboundedReceiver, UnboundedSender}, 20 + task::JoinHandle, 21 + time::interval, 22 + }; 23 + use tokio_util::sync::CancellationToken; 24 + use tracing::error; 25 + 26 + /// Events processed by the whole application. 27 + #[expect(dead_code)] 28 + #[derive(Debug, Clone)] 29 + pub enum Event { 30 + /// Application initialized 31 + Init, 32 + 33 + /// Application quit 34 + Quit, 35 + 36 + /// Application error 37 + Error, 38 + 39 + /// Application closed 40 + Closed, 41 + 42 + /// Tick = input refresh rate 43 + Tick, 44 + 45 + /// Render application 46 + Render, 47 + 48 + /// User enters application 49 + FocusGained, 50 + 51 + /// User leaves application 52 + FocusLost, 53 + 54 + /// Paste buffer 55 + Paste(String), 56 + 57 + /// any key event 58 + Key(KeyEvent), 59 + 60 + /// any mouse event 61 + Mouse(MouseEvent), 62 + 63 + /// Application resize 64 + Resize(u16, u16), 65 + } 66 + 67 + /// A TUI which supports the general things you would want out of a TUI abstraction. 68 + pub struct Tui { 69 + pub terminal: Terminal<CrosstermBackend<Stdout>>, 70 + pub task: JoinHandle<()>, 71 + pub cancellation_token: CancellationToken, 72 + pub event_rx: UnboundedReceiver<Event>, 73 + pub event_tx: UnboundedSender<Event>, 74 + pub frame_rate: f64, 75 + pub tick_rate: f64, 76 + pub mouse_enabled: bool, 77 + pub paste_enabled: bool, 78 + } 79 + 80 + #[expect(dead_code)] 81 + impl Tui { 82 + /// Creates a new TUI. 83 + pub fn new() -> Result<Self> { 84 + let (event_tx, event_rx) = mpsc::unbounded_channel(); 85 + Ok(Self { 86 + terminal: Terminal::new(CrosstermBackend::new(stdout()))?, 87 + task: tokio::spawn(async {}), 88 + cancellation_token: CancellationToken::new(), 89 + event_rx, 90 + event_tx, 91 + frame_rate: 60.0, 92 + tick_rate: 4.0, 93 + mouse_enabled: false, 94 + paste_enabled: false, 95 + }) 96 + } 97 + 98 + /// Set the tick rate, which is how often the TUI should 99 + /// source events per second. 100 + pub const fn with_tick_rate(mut self, tick_rate: f64) -> Self { 101 + self.tick_rate = tick_rate; 102 + self 103 + } 104 + 105 + /// Set the frame rate. 106 + pub const fn with_frame_rate(mut self, frame_rate: f64) -> Self { 107 + self.frame_rate = frame_rate; 108 + self 109 + } 110 + 111 + /// Enable mouse interactions. 112 + pub const fn set_mouse_enable(mut self, mouse_enabled: bool) -> Self { 113 + self.mouse_enabled = mouse_enabled; 114 + self 115 + } 116 + 117 + /// Enable pasting into the TUI. 118 + pub const fn set_paste_enabled(mut self, paste_enabled: bool) -> Self { 119 + self.paste_enabled = paste_enabled; 120 + self 121 + } 122 + 123 + /// Begin the TUI event loop 124 + pub fn start(&mut self) { 125 + self.cancel(); 126 + 127 + self.cancellation_token = CancellationToken::new(); 128 + let event_loop = Self::event_loop( 129 + self.event_tx.clone(), 130 + self.cancellation_token.clone(), 131 + self.tick_rate, 132 + self.frame_rate, 133 + ); 134 + self.task = tokio::spawn(async { 135 + event_loop.await; 136 + }); 137 + } 138 + 139 + /// The event-loop for the TUI which sources events from crossterm. 140 + async fn event_loop( 141 + event_tx: UnboundedSender<Event>, 142 + cancellation_token: CancellationToken, 143 + tick_rate: f64, 144 + frame_rate: f64, 145 + ) { 146 + use crossterm::event::Event as CrosstermEvent; 147 + 148 + let mut event_stream = EventStream::new(); 149 + let mut tick_interval = interval(Duration::from_secs_f64(1.0 / tick_rate)); 150 + let mut render_interval = interval(Duration::from_secs_f64(1.0 / frame_rate)); 151 + 152 + event_tx 153 + .send(Event::Init) 154 + .expect("Tui::event_loop: Failed to send init event."); 155 + loop { 156 + let event = tokio::select! { 157 + () = cancellation_token.cancelled() => { 158 + break; 159 + } 160 + _ = tick_interval.tick() => Event::Tick, 161 + _ = render_interval.tick() => Event::Render, 162 + crossterm_event = event_stream.next().fuse() => match crossterm_event { 163 + Some(Ok(event)) => match event { 164 + // we only care about press down events, 165 + // not doing anything related to up / down keypresses 166 + CrosstermEvent::Key(key) if key.kind == KeyEventKind::Press => Event::Key(key), 167 + CrosstermEvent::Key(_) => continue, 168 + CrosstermEvent::Mouse(mouse) => Event::Mouse(mouse), 169 + CrosstermEvent::Resize(x, y) => Event::Resize(x, y), 170 + CrosstermEvent::FocusLost => {Event::FocusLost }, 171 + CrosstermEvent::FocusGained => {Event::FocusGained }, 172 + CrosstermEvent::Paste(s)=> {Event::Paste(s)}, 173 + 174 + } 175 + Some(Err(_)) => Event::Error, 176 + None => break, 177 + } 178 + }; 179 + 180 + if event_tx.send(event).is_err() { 181 + break; 182 + } 183 + } 184 + 185 + cancellation_token.cancel(); 186 + } 187 + 188 + /// Stops the TUI by canceling the event-loop. 189 + pub fn stop(&self) { 190 + self.cancel(); 191 + let mut counter = 0; 192 + while !self.task.is_finished() { 193 + std::thread::sleep(Duration::from_millis(1)); 194 + counter += 1; 195 + if counter > 50 { 196 + self.task.abort(); 197 + } 198 + if counter > 100 { 199 + error!("Failed to abort task in 100 milliseconds for some reason"); 200 + break; 201 + } 202 + } 203 + } 204 + 205 + // Enters into the TUI by enabling alternate screen and starting event-loop. 206 + pub fn enter(&mut self) -> Result<()> { 207 + enable_raw_mode()?; 208 + crossterm::execute!(stdout(), EnterAlternateScreen, cursor::Hide)?; 209 + if self.mouse_enabled { 210 + crossterm::execute!(stdout(), EnableMouseCapture)?; 211 + } 212 + if self.paste_enabled { 213 + crossterm::execute!(stdout(), EnableBracketedPaste)?; 214 + } 215 + self.start(); 216 + Ok(()) 217 + } 218 + 219 + /// Exits the tui, by leaving alternate screen. 220 + pub fn exit(&mut self) -> color_eyre::Result<()> { 221 + self.stop(); 222 + if crossterm::terminal::is_raw_mode_enabled()? { 223 + self.flush()?; 224 + if self.paste_enabled { 225 + crossterm::execute!(stdout(), DisableBracketedPaste)?; 226 + } 227 + if self.mouse_enabled { 228 + crossterm::execute!(stdout(), DisableMouseCapture)?; 229 + } 230 + crossterm::execute!(stdout(), LeaveAlternateScreen, cursor::Show)?; 231 + crossterm::terminal::disable_raw_mode()?; 232 + } 233 + Ok(()) 234 + } 235 + 236 + /// Cancel the internal event-loop. 237 + pub fn cancel(&self) { 238 + self.cancellation_token.cancel(); 239 + } 240 + 241 + /// Suspend the TUI. 242 + pub fn suspend(&mut self) -> color_eyre::Result<()> { 243 + self.exit()?; 244 + #[cfg(not(windows))] 245 + signal_hook::low_level::raise(signal_hook::consts::signal::SIGTSTP)?; 246 + Ok(()) 247 + } 248 + 249 + /// Resume the TUI. 250 + pub fn resume(&mut self) -> color_eyre::Result<()> { 251 + self.enter()?; 252 + Ok(()) 253 + } 254 + 255 + /// Get the next event. 256 + pub async fn next_event(&mut self) -> Option<Event> { 257 + self.event_rx.recv().await 258 + } 259 + } 260 + 261 + impl Deref for Tui { 262 + type Target = ratatui::Terminal<CrosstermBackend<Stdout>>; 263 + 264 + fn deref(&self) -> &Self::Target { 265 + &self.terminal 266 + } 267 + } 268 + 269 + impl DerefMut for Tui { 270 + fn deref_mut(&mut self) -> &mut Self::Target { 271 + &mut self.terminal 272 + } 273 + } 274 + 275 + impl Drop for Tui { 276 + fn drop(&mut self) { 277 + self.exit().unwrap(); 278 + } 279 + }

History

3 rounds 2 comments
sign up or login to add to the discussion
9 commits
expand
feat: panic_handler
feat/tui: create TUI abstraction
feat/tui: signals + bare config
feat/tui: Component trait
feat/tui: init logging
feat/tui: init app
feat: add build.rs using vergen_gix for metadata
feat/tui: init cli & running tui
feat/config: Keymap + kdl config
2/2 success
expand
expand 0 comments
pull request successfully merged
9 commits
expand
feat: panic_handler
feat/tui: create TUI abstraction
feat/tui: signals + bare config
feat/tui: Component trait
feat/tui: init logging
feat/tui: init app
feat: add build.rs using vergen_gix for metadata
feat/tui: init cli & running tui
feat/config: Keymap + kdl config
2/2 success
expand
expand 1 comment

app should not emit handling signal on debug

8 commits
expand
feat: panic_handler
feat/tui: create TUI abstraction
feat/tui: signals + bare config
feat/tui: Component trait
feat/tui: init logging
feat/tui: init app
feat: add build.rs using vergen_gix for metadata
feat/tui: init cli & running tui
expand 1 comment

actually have parsing of the config.kdl and interpret it as keybinds. remove all the unused bindings