├── .gitignore ├── 90-intel_backlight.rules ├── Cargo.lock ├── Cargo.toml ├── README.md ├── fwtb.desktop └── src ├── bin ├── auto_backlight.rs └── daemon.rs └── main.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .stignore 3 | -------------------------------------------------------------------------------- /90-intel_backlight.rules: -------------------------------------------------------------------------------- 1 | ACTION=="add", SUBSYSTEM=="backlight", RUN+="/bin/chgrp video /sys/class/backlight/intel_backlight/brightness" 2 | ACTION=="add", SUBSYSTEM=="backlight", RUN+="/bin/chmod g+w /sys/class/backlight/intel_backlight/brightness" 3 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "Inflector" 7 | version = "0.11.4" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" 10 | 11 | [[package]] 12 | name = "ab_glyph" 13 | version = "0.2.20" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "fe21446ad43aa56417a767f3e2f3d7c4ca522904de1dd640529a76e9c5c3b33c" 16 | dependencies = [ 17 | "ab_glyph_rasterizer", 18 | "owned_ttf_parser", 19 | ] 20 | 21 | [[package]] 22 | name = "ab_glyph_rasterizer" 23 | version = "0.1.8" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" 26 | 27 | [[package]] 28 | name = "adler" 29 | version = "1.0.2" 30 | source = "registry+https://github.com/rust-lang/crates.io-index" 31 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 32 | 33 | [[package]] 34 | name = "ahash" 35 | version = "0.7.6" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 38 | dependencies = [ 39 | "getrandom", 40 | "once_cell", 41 | "version_check", 42 | ] 43 | 44 | [[package]] 45 | name = "aliasable" 46 | version = "0.1.3" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" 49 | 50 | [[package]] 51 | name = "android_system_properties" 52 | version = "0.1.5" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 55 | dependencies = [ 56 | "libc", 57 | ] 58 | 59 | [[package]] 60 | name = "anyhow" 61 | version = "1.0.69" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" 64 | 65 | [[package]] 66 | name = "approx" 67 | version = "0.5.1" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" 70 | dependencies = [ 71 | "num-traits", 72 | ] 73 | 74 | [[package]] 75 | name = "arrayref" 76 | version = "0.3.6" 77 | source = "registry+https://github.com/rust-lang/crates.io-index" 78 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" 79 | 80 | [[package]] 81 | name = "arrayvec" 82 | version = "0.5.2" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" 85 | 86 | [[package]] 87 | name = "arrayvec" 88 | version = "0.7.2" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" 91 | 92 | [[package]] 93 | name = "ash" 94 | version = "0.37.2+1.3.238" 95 | source = "registry+https://github.com/rust-lang/crates.io-index" 96 | checksum = "28bf19c1f0a470be5fbf7522a308a05df06610252c5bcf5143e1b23f629a9a03" 97 | dependencies = [ 98 | "libloading", 99 | ] 100 | 101 | [[package]] 102 | name = "async-stream" 103 | version = "0.3.4" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" 106 | dependencies = [ 107 | "async-stream-impl", 108 | "futures-core", 109 | "pin-project-lite", 110 | ] 111 | 112 | [[package]] 113 | name = "async-stream-impl" 114 | version = "0.3.4" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" 117 | dependencies = [ 118 | "proc-macro2", 119 | "quote", 120 | "syn", 121 | ] 122 | 123 | [[package]] 124 | name = "async-trait" 125 | version = "0.1.66" 126 | source = "registry+https://github.com/rust-lang/crates.io-index" 127 | checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" 128 | dependencies = [ 129 | "proc-macro2", 130 | "quote", 131 | "syn", 132 | ] 133 | 134 | [[package]] 135 | name = "autocfg" 136 | version = "1.1.0" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 139 | 140 | [[package]] 141 | name = "axum" 142 | version = "0.6.11" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "13d8068b6ccb8b34db9de397c7043f91db8b4c66414952c6db944f238c4d3db3" 145 | dependencies = [ 146 | "async-trait", 147 | "axum-core", 148 | "bitflags", 149 | "bytes", 150 | "futures-util", 151 | "http", 152 | "http-body", 153 | "hyper", 154 | "itoa", 155 | "matchit", 156 | "memchr", 157 | "mime", 158 | "percent-encoding", 159 | "pin-project-lite", 160 | "rustversion", 161 | "serde", 162 | "sync_wrapper", 163 | "tower", 164 | "tower-layer", 165 | "tower-service", 166 | ] 167 | 168 | [[package]] 169 | name = "axum-core" 170 | version = "0.3.3" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e" 173 | dependencies = [ 174 | "async-trait", 175 | "bytes", 176 | "futures-util", 177 | "http", 178 | "http-body", 179 | "mime", 180 | "rustversion", 181 | "tower-layer", 182 | "tower-service", 183 | ] 184 | 185 | [[package]] 186 | name = "base64" 187 | version = "0.13.1" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 190 | 191 | [[package]] 192 | name = "bit-set" 193 | version = "0.5.3" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 196 | dependencies = [ 197 | "bit-vec", 198 | ] 199 | 200 | [[package]] 201 | name = "bit-vec" 202 | version = "0.6.3" 203 | source = "registry+https://github.com/rust-lang/crates.io-index" 204 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 205 | 206 | [[package]] 207 | name = "bitflags" 208 | version = "1.3.2" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 211 | 212 | [[package]] 213 | name = "block" 214 | version = "0.1.6" 215 | source = "registry+https://github.com/rust-lang/crates.io-index" 216 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 217 | 218 | [[package]] 219 | name = "bumpalo" 220 | version = "3.12.0" 221 | source = "registry+https://github.com/rust-lang/crates.io-index" 222 | checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" 223 | 224 | [[package]] 225 | name = "bytemuck" 226 | version = "1.13.0" 227 | source = "registry+https://github.com/rust-lang/crates.io-index" 228 | checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" 229 | dependencies = [ 230 | "bytemuck_derive", 231 | ] 232 | 233 | [[package]] 234 | name = "bytemuck_derive" 235 | version = "1.4.0" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" 238 | dependencies = [ 239 | "proc-macro2", 240 | "quote", 241 | "syn", 242 | ] 243 | 244 | [[package]] 245 | name = "byteorder" 246 | version = "1.4.3" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 249 | 250 | [[package]] 251 | name = "bytes" 252 | version = "1.4.0" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" 255 | 256 | [[package]] 257 | name = "calloop" 258 | version = "0.10.5" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "1a59225be45a478d772ce015d9743e49e92798ece9e34eda9a6aa2a6a7f40192" 261 | dependencies = [ 262 | "log", 263 | "nix 0.25.1", 264 | "slotmap", 265 | "thiserror", 266 | "vec_map", 267 | ] 268 | 269 | [[package]] 270 | name = "cc" 271 | version = "1.0.79" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" 274 | 275 | [[package]] 276 | name = "cfg-if" 277 | version = "1.0.0" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 280 | 281 | [[package]] 282 | name = "cfg_aliases" 283 | version = "0.1.1" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" 286 | 287 | [[package]] 288 | name = "clipboard-win" 289 | version = "4.5.0" 290 | source = "registry+https://github.com/rust-lang/crates.io-index" 291 | checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" 292 | dependencies = [ 293 | "error-code", 294 | "str-buf", 295 | "winapi", 296 | ] 297 | 298 | [[package]] 299 | name = "clipboard_macos" 300 | version = "0.1.0" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "145a7f9e9b89453bc0a5e32d166456405d389cea5b578f57f1274b1397588a95" 303 | dependencies = [ 304 | "objc", 305 | "objc-foundation", 306 | "objc_id", 307 | ] 308 | 309 | [[package]] 310 | name = "clipboard_wayland" 311 | version = "0.2.0" 312 | source = "registry+https://github.com/rust-lang/crates.io-index" 313 | checksum = "6f6364a9f7a66f2ac1a1a098aa1c7f6b686f2496c6ac5e5c0d773445df912747" 314 | dependencies = [ 315 | "smithay-clipboard", 316 | ] 317 | 318 | [[package]] 319 | name = "clipboard_x11" 320 | version = "0.4.0" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | checksum = "983a7010836ecd04dde2c6d27a0cb56ec5d21572177e782bdcb24a600124e921" 323 | dependencies = [ 324 | "thiserror", 325 | "x11rb", 326 | ] 327 | 328 | [[package]] 329 | name = "cmake" 330 | version = "0.1.49" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c" 333 | dependencies = [ 334 | "cc", 335 | ] 336 | 337 | [[package]] 338 | name = "cocoa" 339 | version = "0.24.1" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" 342 | dependencies = [ 343 | "bitflags", 344 | "block", 345 | "cocoa-foundation", 346 | "core-foundation", 347 | "core-graphics", 348 | "foreign-types 0.3.2", 349 | "libc", 350 | "objc", 351 | ] 352 | 353 | [[package]] 354 | name = "cocoa-foundation" 355 | version = "0.1.0" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" 358 | dependencies = [ 359 | "bitflags", 360 | "block", 361 | "core-foundation", 362 | "core-graphics-types", 363 | "foreign-types 0.3.2", 364 | "libc", 365 | "objc", 366 | ] 367 | 368 | [[package]] 369 | name = "codespan-reporting" 370 | version = "0.11.1" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" 373 | dependencies = [ 374 | "termcolor", 375 | "unicode-width", 376 | ] 377 | 378 | [[package]] 379 | name = "combine" 380 | version = "4.6.6" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" 383 | dependencies = [ 384 | "bytes", 385 | "memchr", 386 | ] 387 | 388 | [[package]] 389 | name = "console-api" 390 | version = "0.4.0" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | checksum = "e57ff02e8ad8e06ab9731d5dc72dc23bef9200778eae1a89d555d8c42e5d4a86" 393 | dependencies = [ 394 | "prost", 395 | "prost-types", 396 | "tonic", 397 | "tracing-core", 398 | ] 399 | 400 | [[package]] 401 | name = "console-subscriber" 402 | version = "0.1.8" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | checksum = "22a3a81dfaf6b66bce5d159eddae701e3a002f194d378cbf7be5f053c281d9be" 405 | dependencies = [ 406 | "console-api", 407 | "crossbeam-channel", 408 | "crossbeam-utils", 409 | "futures", 410 | "hdrhistogram", 411 | "humantime", 412 | "prost-types", 413 | "serde", 414 | "serde_json", 415 | "thread_local", 416 | "tokio", 417 | "tokio-stream", 418 | "tonic", 419 | "tracing", 420 | "tracing-core", 421 | "tracing-subscriber", 422 | ] 423 | 424 | [[package]] 425 | name = "const_panic" 426 | version = "0.2.7" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | checksum = "58baae561b85ca19b3122a9ddd35c8ec40c3bcd14fe89921824eae73f7baffbf" 429 | 430 | [[package]] 431 | name = "core-foundation" 432 | version = "0.9.3" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" 435 | dependencies = [ 436 | "core-foundation-sys", 437 | "libc", 438 | ] 439 | 440 | [[package]] 441 | name = "core-foundation-sys" 442 | version = "0.8.3" 443 | source = "registry+https://github.com/rust-lang/crates.io-index" 444 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" 445 | 446 | [[package]] 447 | name = "core-graphics" 448 | version = "0.22.3" 449 | source = "registry+https://github.com/rust-lang/crates.io-index" 450 | checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" 451 | dependencies = [ 452 | "bitflags", 453 | "core-foundation", 454 | "core-graphics-types", 455 | "foreign-types 0.3.2", 456 | "libc", 457 | ] 458 | 459 | [[package]] 460 | name = "core-graphics-types" 461 | version = "0.1.1" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" 464 | dependencies = [ 465 | "bitflags", 466 | "core-foundation", 467 | "foreign-types 0.3.2", 468 | "libc", 469 | ] 470 | 471 | [[package]] 472 | name = "core-text" 473 | version = "19.2.0" 474 | source = "registry+https://github.com/rust-lang/crates.io-index" 475 | checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25" 476 | dependencies = [ 477 | "core-foundation", 478 | "core-graphics", 479 | "foreign-types 0.3.2", 480 | "libc", 481 | ] 482 | 483 | [[package]] 484 | name = "crc32fast" 485 | version = "1.3.2" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" 488 | dependencies = [ 489 | "cfg-if", 490 | ] 491 | 492 | [[package]] 493 | name = "crossbeam-channel" 494 | version = "0.5.6" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" 497 | dependencies = [ 498 | "cfg-if", 499 | "crossbeam-utils", 500 | ] 501 | 502 | [[package]] 503 | name = "crossbeam-deque" 504 | version = "0.8.2" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" 507 | dependencies = [ 508 | "cfg-if", 509 | "crossbeam-epoch", 510 | "crossbeam-utils", 511 | ] 512 | 513 | [[package]] 514 | name = "crossbeam-epoch" 515 | version = "0.9.13" 516 | source = "registry+https://github.com/rust-lang/crates.io-index" 517 | checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" 518 | dependencies = [ 519 | "autocfg", 520 | "cfg-if", 521 | "crossbeam-utils", 522 | "memoffset 0.7.1", 523 | "scopeguard", 524 | ] 525 | 526 | [[package]] 527 | name = "crossbeam-utils" 528 | version = "0.8.14" 529 | source = "registry+https://github.com/rust-lang/crates.io-index" 530 | checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" 531 | dependencies = [ 532 | "cfg-if", 533 | ] 534 | 535 | [[package]] 536 | name = "crossfont" 537 | version = "0.5.1" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "21fd3add36ea31aba1520aa5288714dd63be506106753226d0eb387a93bc9c45" 540 | dependencies = [ 541 | "cocoa", 542 | "core-foundation", 543 | "core-foundation-sys", 544 | "core-graphics", 545 | "core-text", 546 | "dwrote", 547 | "foreign-types 0.5.0", 548 | "freetype-rs", 549 | "libc", 550 | "log", 551 | "objc", 552 | "once_cell", 553 | "pkg-config", 554 | "servo-fontconfig", 555 | "winapi", 556 | ] 557 | 558 | [[package]] 559 | name = "cty" 560 | version = "0.2.2" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" 563 | 564 | [[package]] 565 | name = "d3d12" 566 | version = "0.5.0" 567 | source = "registry+https://github.com/rust-lang/crates.io-index" 568 | checksum = "827914e1f53b1e0e025ecd3d967a7836b7bcb54520f90e21ef8df7b4d88a2759" 569 | dependencies = [ 570 | "bitflags", 571 | "libloading", 572 | "winapi", 573 | ] 574 | 575 | [[package]] 576 | name = "darling" 577 | version = "0.13.4" 578 | source = "registry+https://github.com/rust-lang/crates.io-index" 579 | checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" 580 | dependencies = [ 581 | "darling_core", 582 | "darling_macro", 583 | ] 584 | 585 | [[package]] 586 | name = "darling_core" 587 | version = "0.13.4" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" 590 | dependencies = [ 591 | "fnv", 592 | "ident_case", 593 | "proc-macro2", 594 | "quote", 595 | "strsim", 596 | "syn", 597 | ] 598 | 599 | [[package]] 600 | name = "darling_macro" 601 | version = "0.13.4" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" 604 | dependencies = [ 605 | "darling_core", 606 | "quote", 607 | "syn", 608 | ] 609 | 610 | [[package]] 611 | name = "dirs" 612 | version = "4.0.0" 613 | source = "registry+https://github.com/rust-lang/crates.io-index" 614 | checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" 615 | dependencies = [ 616 | "dirs-sys", 617 | ] 618 | 619 | [[package]] 620 | name = "dirs-sys" 621 | version = "0.3.7" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" 624 | dependencies = [ 625 | "libc", 626 | "redox_users", 627 | "winapi", 628 | ] 629 | 630 | [[package]] 631 | name = "dispatch" 632 | version = "0.2.0" 633 | source = "registry+https://github.com/rust-lang/crates.io-index" 634 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 635 | 636 | [[package]] 637 | name = "dlib" 638 | version = "0.5.0" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" 641 | dependencies = [ 642 | "libloading", 643 | ] 644 | 645 | [[package]] 646 | name = "downcast-rs" 647 | version = "1.2.0" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" 650 | 651 | [[package]] 652 | name = "dwrote" 653 | version = "0.11.0" 654 | source = "registry+https://github.com/rust-lang/crates.io-index" 655 | checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" 656 | dependencies = [ 657 | "lazy_static", 658 | "libc", 659 | "serde", 660 | "serde_derive", 661 | "winapi", 662 | "wio", 663 | ] 664 | 665 | [[package]] 666 | name = "either" 667 | version = "1.8.1" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" 670 | 671 | [[package]] 672 | name = "encase" 673 | version = "0.3.0" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "0a516181e9a36e8982cb37933c5e7dba638c42938cacde46ee4e5b4156f881b9" 676 | dependencies = [ 677 | "const_panic", 678 | "encase_derive", 679 | "glam", 680 | "thiserror", 681 | ] 682 | 683 | [[package]] 684 | name = "encase_derive" 685 | version = "0.3.0" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "f5b802412eea315f29f2bb2da3a5963cd6121f56eaa06aebcdc0c54eea578f22" 688 | dependencies = [ 689 | "encase_derive_impl", 690 | ] 691 | 692 | [[package]] 693 | name = "encase_derive_impl" 694 | version = "0.3.0" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "0f2f4de457d974f548d2c2a16f709ebd81013579e543bd1a9b19ced88132c2cf" 697 | dependencies = [ 698 | "proc-macro2", 699 | "quote", 700 | "syn", 701 | ] 702 | 703 | [[package]] 704 | name = "error-code" 705 | version = "2.3.1" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" 708 | dependencies = [ 709 | "libc", 710 | "str-buf", 711 | ] 712 | 713 | [[package]] 714 | name = "euclid" 715 | version = "0.22.7" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" 718 | dependencies = [ 719 | "num-traits", 720 | ] 721 | 722 | [[package]] 723 | name = "expat-sys" 724 | version = "2.1.6" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa" 727 | dependencies = [ 728 | "cmake", 729 | "pkg-config", 730 | ] 731 | 732 | [[package]] 733 | name = "find-crate" 734 | version = "0.6.3" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2" 737 | dependencies = [ 738 | "toml", 739 | ] 740 | 741 | [[package]] 742 | name = "flate2" 743 | version = "1.0.25" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" 746 | dependencies = [ 747 | "crc32fast", 748 | "miniz_oxide", 749 | ] 750 | 751 | [[package]] 752 | name = "fnv" 753 | version = "1.0.7" 754 | source = "registry+https://github.com/rust-lang/crates.io-index" 755 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 756 | 757 | [[package]] 758 | name = "foreign-types" 759 | version = "0.3.2" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 762 | dependencies = [ 763 | "foreign-types-shared 0.1.1", 764 | ] 765 | 766 | [[package]] 767 | name = "foreign-types" 768 | version = "0.5.0" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 771 | dependencies = [ 772 | "foreign-types-macros", 773 | "foreign-types-shared 0.3.1", 774 | ] 775 | 776 | [[package]] 777 | name = "foreign-types-macros" 778 | version = "0.2.2" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | checksum = "c8469d0d40519bc608ec6863f1cc88f3f1deee15913f2f3b3e573d81ed38cccc" 781 | dependencies = [ 782 | "proc-macro2", 783 | "quote", 784 | "syn", 785 | ] 786 | 787 | [[package]] 788 | name = "foreign-types-shared" 789 | version = "0.1.1" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 792 | 793 | [[package]] 794 | name = "foreign-types-shared" 795 | version = "0.3.1" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 798 | 799 | [[package]] 800 | name = "framework_toolbox" 801 | version = "0.6.0" 802 | dependencies = [ 803 | "anyhow", 804 | "console-subscriber", 805 | "dirs", 806 | "iced", 807 | "iced_lazy", 808 | "iced_native", 809 | "os_pipe", 810 | "serde", 811 | "splines", 812 | "tokio", 813 | "toml_edit 0.15.0", 814 | "tracing", 815 | ] 816 | 817 | [[package]] 818 | name = "freetype-rs" 819 | version = "0.26.0" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "74eadec9d0a5c28c54bb9882e54787275152a4e36ce206b45d7451384e5bf5fb" 822 | dependencies = [ 823 | "bitflags", 824 | "freetype-sys", 825 | "libc", 826 | ] 827 | 828 | [[package]] 829 | name = "freetype-sys" 830 | version = "0.13.1" 831 | source = "registry+https://github.com/rust-lang/crates.io-index" 832 | checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a" 833 | dependencies = [ 834 | "cmake", 835 | "libc", 836 | "pkg-config", 837 | ] 838 | 839 | [[package]] 840 | name = "futures" 841 | version = "0.3.26" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" 844 | dependencies = [ 845 | "futures-channel", 846 | "futures-core", 847 | "futures-executor", 848 | "futures-io", 849 | "futures-sink", 850 | "futures-task", 851 | "futures-util", 852 | ] 853 | 854 | [[package]] 855 | name = "futures-channel" 856 | version = "0.3.26" 857 | source = "registry+https://github.com/rust-lang/crates.io-index" 858 | checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" 859 | dependencies = [ 860 | "futures-core", 861 | "futures-sink", 862 | ] 863 | 864 | [[package]] 865 | name = "futures-core" 866 | version = "0.3.26" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" 869 | 870 | [[package]] 871 | name = "futures-executor" 872 | version = "0.3.26" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" 875 | dependencies = [ 876 | "futures-core", 877 | "futures-task", 878 | "futures-util", 879 | "num_cpus", 880 | ] 881 | 882 | [[package]] 883 | name = "futures-io" 884 | version = "0.3.26" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" 887 | 888 | [[package]] 889 | name = "futures-macro" 890 | version = "0.3.26" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" 893 | dependencies = [ 894 | "proc-macro2", 895 | "quote", 896 | "syn", 897 | ] 898 | 899 | [[package]] 900 | name = "futures-sink" 901 | version = "0.3.26" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" 904 | 905 | [[package]] 906 | name = "futures-task" 907 | version = "0.3.26" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" 910 | 911 | [[package]] 912 | name = "futures-util" 913 | version = "0.3.26" 914 | source = "registry+https://github.com/rust-lang/crates.io-index" 915 | checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" 916 | dependencies = [ 917 | "futures-channel", 918 | "futures-core", 919 | "futures-io", 920 | "futures-macro", 921 | "futures-sink", 922 | "futures-task", 923 | "memchr", 924 | "pin-project-lite", 925 | "pin-utils", 926 | "slab", 927 | ] 928 | 929 | [[package]] 930 | name = "fxhash" 931 | version = "0.2.1" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 934 | dependencies = [ 935 | "byteorder", 936 | ] 937 | 938 | [[package]] 939 | name = "gethostname" 940 | version = "0.2.3" 941 | source = "registry+https://github.com/rust-lang/crates.io-index" 942 | checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" 943 | dependencies = [ 944 | "libc", 945 | "winapi", 946 | ] 947 | 948 | [[package]] 949 | name = "getrandom" 950 | version = "0.2.8" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" 953 | dependencies = [ 954 | "cfg-if", 955 | "libc", 956 | "wasi", 957 | ] 958 | 959 | [[package]] 960 | name = "glam" 961 | version = "0.21.3" 962 | source = "registry+https://github.com/rust-lang/crates.io-index" 963 | checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" 964 | 965 | [[package]] 966 | name = "glow" 967 | version = "0.11.2" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" 970 | dependencies = [ 971 | "js-sys", 972 | "slotmap", 973 | "wasm-bindgen", 974 | "web-sys", 975 | ] 976 | 977 | [[package]] 978 | name = "glyph_brush" 979 | version = "0.7.7" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "4edefd123f28a0b1d41ec4a489c2b43020b369180800977801611084f342978d" 982 | dependencies = [ 983 | "glyph_brush_draw_cache", 984 | "glyph_brush_layout", 985 | "ordered-float", 986 | "rustc-hash", 987 | "twox-hash", 988 | ] 989 | 990 | [[package]] 991 | name = "glyph_brush_draw_cache" 992 | version = "0.1.5" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | checksum = "6010675390f6889e09a21e2c8b575b3ee25667ea8237a8d59423f73cb8c28610" 995 | dependencies = [ 996 | "ab_glyph", 997 | "crossbeam-channel", 998 | "crossbeam-deque", 999 | "linked-hash-map", 1000 | "rayon", 1001 | "rustc-hash", 1002 | ] 1003 | 1004 | [[package]] 1005 | name = "glyph_brush_layout" 1006 | version = "0.2.3" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" 1009 | dependencies = [ 1010 | "ab_glyph", 1011 | "approx", 1012 | "xi-unicode", 1013 | ] 1014 | 1015 | [[package]] 1016 | name = "gpu-alloc" 1017 | version = "0.5.3" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | checksum = "7fc59e5f710e310e76e6707f86c561dd646f69a8876da9131703b2f717de818d" 1020 | dependencies = [ 1021 | "bitflags", 1022 | "gpu-alloc-types", 1023 | ] 1024 | 1025 | [[package]] 1026 | name = "gpu-alloc-types" 1027 | version = "0.2.0" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5" 1030 | dependencies = [ 1031 | "bitflags", 1032 | ] 1033 | 1034 | [[package]] 1035 | name = "gpu-descriptor" 1036 | version = "0.2.3" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a" 1039 | dependencies = [ 1040 | "bitflags", 1041 | "gpu-descriptor-types", 1042 | "hashbrown", 1043 | ] 1044 | 1045 | [[package]] 1046 | name = "gpu-descriptor-types" 1047 | version = "0.1.1" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126" 1050 | dependencies = [ 1051 | "bitflags", 1052 | ] 1053 | 1054 | [[package]] 1055 | name = "guillotiere" 1056 | version = "0.6.2" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" 1059 | dependencies = [ 1060 | "euclid", 1061 | "svg_fmt", 1062 | ] 1063 | 1064 | [[package]] 1065 | name = "h2" 1066 | version = "0.3.16" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" 1069 | dependencies = [ 1070 | "bytes", 1071 | "fnv", 1072 | "futures-core", 1073 | "futures-sink", 1074 | "futures-util", 1075 | "http", 1076 | "indexmap", 1077 | "slab", 1078 | "tokio", 1079 | "tokio-util", 1080 | "tracing", 1081 | ] 1082 | 1083 | [[package]] 1084 | name = "hashbrown" 1085 | version = "0.12.3" 1086 | source = "registry+https://github.com/rust-lang/crates.io-index" 1087 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1088 | dependencies = [ 1089 | "ahash", 1090 | ] 1091 | 1092 | [[package]] 1093 | name = "hdrhistogram" 1094 | version = "7.5.2" 1095 | source = "registry+https://github.com/rust-lang/crates.io-index" 1096 | checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" 1097 | dependencies = [ 1098 | "base64", 1099 | "byteorder", 1100 | "flate2", 1101 | "nom", 1102 | "num-traits", 1103 | ] 1104 | 1105 | [[package]] 1106 | name = "hermit-abi" 1107 | version = "0.2.6" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" 1110 | dependencies = [ 1111 | "libc", 1112 | ] 1113 | 1114 | [[package]] 1115 | name = "hexf-parse" 1116 | version = "0.2.1" 1117 | source = "registry+https://github.com/rust-lang/crates.io-index" 1118 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 1119 | 1120 | [[package]] 1121 | name = "http" 1122 | version = "0.2.9" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" 1125 | dependencies = [ 1126 | "bytes", 1127 | "fnv", 1128 | "itoa", 1129 | ] 1130 | 1131 | [[package]] 1132 | name = "http-body" 1133 | version = "0.4.5" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" 1136 | dependencies = [ 1137 | "bytes", 1138 | "http", 1139 | "pin-project-lite", 1140 | ] 1141 | 1142 | [[package]] 1143 | name = "httparse" 1144 | version = "1.8.0" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 1147 | 1148 | [[package]] 1149 | name = "httpdate" 1150 | version = "1.0.2" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 1153 | 1154 | [[package]] 1155 | name = "humantime" 1156 | version = "2.1.0" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1159 | 1160 | [[package]] 1161 | name = "hyper" 1162 | version = "0.14.25" 1163 | source = "registry+https://github.com/rust-lang/crates.io-index" 1164 | checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" 1165 | dependencies = [ 1166 | "bytes", 1167 | "futures-channel", 1168 | "futures-core", 1169 | "futures-util", 1170 | "h2", 1171 | "http", 1172 | "http-body", 1173 | "httparse", 1174 | "httpdate", 1175 | "itoa", 1176 | "pin-project-lite", 1177 | "socket2", 1178 | "tokio", 1179 | "tower-service", 1180 | "tracing", 1181 | "want", 1182 | ] 1183 | 1184 | [[package]] 1185 | name = "hyper-timeout" 1186 | version = "0.4.1" 1187 | source = "registry+https://github.com/rust-lang/crates.io-index" 1188 | checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" 1189 | dependencies = [ 1190 | "hyper", 1191 | "pin-project-lite", 1192 | "tokio", 1193 | "tokio-io-timeout", 1194 | ] 1195 | 1196 | [[package]] 1197 | name = "iced" 1198 | version = "0.5.2" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | checksum = "139821b0929b3c00943b3b73405ee5ecf9a8863122c74622ddeda55a8553db1c" 1201 | dependencies = [ 1202 | "iced_core", 1203 | "iced_futures", 1204 | "iced_graphics", 1205 | "iced_native", 1206 | "iced_wgpu", 1207 | "iced_winit", 1208 | "thiserror", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "iced_core" 1213 | version = "0.6.2" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "232c723eecb8aef2fd69f7c618c17306ff10bdede19e44d6d9dc77f372966e80" 1216 | dependencies = [ 1217 | "bitflags", 1218 | "palette", 1219 | "wasm-timer", 1220 | ] 1221 | 1222 | [[package]] 1223 | name = "iced_futures" 1224 | version = "0.5.1" 1225 | source = "registry+https://github.com/rust-lang/crates.io-index" 1226 | checksum = "3cc3a9fd79b857228dde2a3e923a04ade4095abeda33248c6230e8c909749366" 1227 | dependencies = [ 1228 | "futures", 1229 | "log", 1230 | "tokio", 1231 | "wasm-bindgen-futures", 1232 | "wasm-timer", 1233 | ] 1234 | 1235 | [[package]] 1236 | name = "iced_graphics" 1237 | version = "0.4.0" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | checksum = "c0bed954a9e61e665c6c965b56a0152d87288088736d1ca99c96b166875c5707" 1240 | dependencies = [ 1241 | "bitflags", 1242 | "bytemuck", 1243 | "glam", 1244 | "iced_native", 1245 | "iced_style", 1246 | "log", 1247 | "raw-window-handle 0.5.0", 1248 | "thiserror", 1249 | ] 1250 | 1251 | [[package]] 1252 | name = "iced_lazy" 1253 | version = "0.2.0" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "59e7ac54f3f0272459d25b19a8daf71558e5737df83b6cacbd9c3b75cb40c47f" 1256 | dependencies = [ 1257 | "iced_native", 1258 | "ouroboros", 1259 | ] 1260 | 1261 | [[package]] 1262 | name = "iced_native" 1263 | version = "0.6.1" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "61964acdd967f58ee6194b0b746c5656826f1e4aafc8f12de28ad4f7ced8ec0b" 1266 | dependencies = [ 1267 | "iced_core", 1268 | "iced_futures", 1269 | "iced_style", 1270 | "num-traits", 1271 | "twox-hash", 1272 | "unicode-segmentation", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "iced_style" 1277 | version = "0.5.1" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "a2ffb763e34a898a1f597640718cf9308efa057a054282b7bfa627a574554f5b" 1280 | dependencies = [ 1281 | "iced_core", 1282 | "once_cell", 1283 | "palette", 1284 | ] 1285 | 1286 | [[package]] 1287 | name = "iced_wgpu" 1288 | version = "0.6.1" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | checksum = "132e359d07022fb1066cb48f6ab6aba9b1a48c2f51060e7a9929b09851ab45b7" 1291 | dependencies = [ 1292 | "bitflags", 1293 | "bytemuck", 1294 | "encase", 1295 | "futures", 1296 | "glam", 1297 | "glyph_brush", 1298 | "guillotiere", 1299 | "iced_graphics", 1300 | "iced_native", 1301 | "log", 1302 | "raw-window-handle 0.5.0", 1303 | "wgpu", 1304 | "wgpu_glyph", 1305 | ] 1306 | 1307 | [[package]] 1308 | name = "iced_winit" 1309 | version = "0.5.1" 1310 | source = "registry+https://github.com/rust-lang/crates.io-index" 1311 | checksum = "217f078cb38bedf1d4283eca4c82327e1ef0de8c78d2652187108ebd1e613a14" 1312 | dependencies = [ 1313 | "iced_futures", 1314 | "iced_graphics", 1315 | "iced_native", 1316 | "log", 1317 | "thiserror", 1318 | "web-sys", 1319 | "winapi", 1320 | "window_clipboard", 1321 | "winit", 1322 | ] 1323 | 1324 | [[package]] 1325 | name = "ident_case" 1326 | version = "1.0.1" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1329 | 1330 | [[package]] 1331 | name = "indexmap" 1332 | version = "1.9.2" 1333 | source = "registry+https://github.com/rust-lang/crates.io-index" 1334 | checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" 1335 | dependencies = [ 1336 | "autocfg", 1337 | "hashbrown", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "instant" 1342 | version = "0.1.12" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 1345 | dependencies = [ 1346 | "cfg-if", 1347 | "js-sys", 1348 | "wasm-bindgen", 1349 | "web-sys", 1350 | ] 1351 | 1352 | [[package]] 1353 | name = "itertools" 1354 | version = "0.10.5" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 1357 | dependencies = [ 1358 | "either", 1359 | ] 1360 | 1361 | [[package]] 1362 | name = "itoa" 1363 | version = "1.0.6" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" 1366 | 1367 | [[package]] 1368 | name = "jni-sys" 1369 | version = "0.3.0" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1372 | 1373 | [[package]] 1374 | name = "js-sys" 1375 | version = "0.3.61" 1376 | source = "registry+https://github.com/rust-lang/crates.io-index" 1377 | checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" 1378 | dependencies = [ 1379 | "wasm-bindgen", 1380 | ] 1381 | 1382 | [[package]] 1383 | name = "khronos-egl" 1384 | version = "4.1.0" 1385 | source = "registry+https://github.com/rust-lang/crates.io-index" 1386 | checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" 1387 | dependencies = [ 1388 | "libc", 1389 | "libloading", 1390 | "pkg-config", 1391 | ] 1392 | 1393 | [[package]] 1394 | name = "lazy_static" 1395 | version = "1.4.0" 1396 | source = "registry+https://github.com/rust-lang/crates.io-index" 1397 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1398 | 1399 | [[package]] 1400 | name = "libc" 1401 | version = "0.2.139" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" 1404 | 1405 | [[package]] 1406 | name = "libloading" 1407 | version = "0.7.4" 1408 | source = "registry+https://github.com/rust-lang/crates.io-index" 1409 | checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" 1410 | dependencies = [ 1411 | "cfg-if", 1412 | "winapi", 1413 | ] 1414 | 1415 | [[package]] 1416 | name = "linked-hash-map" 1417 | version = "0.5.6" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 1420 | 1421 | [[package]] 1422 | name = "lock_api" 1423 | version = "0.4.9" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" 1426 | dependencies = [ 1427 | "autocfg", 1428 | "scopeguard", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "log" 1433 | version = "0.4.17" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 1436 | dependencies = [ 1437 | "cfg-if", 1438 | ] 1439 | 1440 | [[package]] 1441 | name = "malloc_buf" 1442 | version = "0.0.6" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 1445 | dependencies = [ 1446 | "libc", 1447 | ] 1448 | 1449 | [[package]] 1450 | name = "matchers" 1451 | version = "0.1.0" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1454 | dependencies = [ 1455 | "regex-automata", 1456 | ] 1457 | 1458 | [[package]] 1459 | name = "matchit" 1460 | version = "0.7.0" 1461 | source = "registry+https://github.com/rust-lang/crates.io-index" 1462 | checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" 1463 | 1464 | [[package]] 1465 | name = "memchr" 1466 | version = "2.5.0" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 1469 | 1470 | [[package]] 1471 | name = "memmap2" 1472 | version = "0.5.10" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" 1475 | dependencies = [ 1476 | "libc", 1477 | ] 1478 | 1479 | [[package]] 1480 | name = "memoffset" 1481 | version = "0.6.5" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 1484 | dependencies = [ 1485 | "autocfg", 1486 | ] 1487 | 1488 | [[package]] 1489 | name = "memoffset" 1490 | version = "0.7.1" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" 1493 | dependencies = [ 1494 | "autocfg", 1495 | ] 1496 | 1497 | [[package]] 1498 | name = "metal" 1499 | version = "0.24.0" 1500 | source = "registry+https://github.com/rust-lang/crates.io-index" 1501 | checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060" 1502 | dependencies = [ 1503 | "bitflags", 1504 | "block", 1505 | "core-graphics-types", 1506 | "foreign-types 0.3.2", 1507 | "log", 1508 | "objc", 1509 | ] 1510 | 1511 | [[package]] 1512 | name = "mime" 1513 | version = "0.3.16" 1514 | source = "registry+https://github.com/rust-lang/crates.io-index" 1515 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 1516 | 1517 | [[package]] 1518 | name = "minimal-lexical" 1519 | version = "0.2.1" 1520 | source = "registry+https://github.com/rust-lang/crates.io-index" 1521 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1522 | 1523 | [[package]] 1524 | name = "miniz_oxide" 1525 | version = "0.6.2" 1526 | source = "registry+https://github.com/rust-lang/crates.io-index" 1527 | checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" 1528 | dependencies = [ 1529 | "adler", 1530 | ] 1531 | 1532 | [[package]] 1533 | name = "mio" 1534 | version = "0.8.6" 1535 | source = "registry+https://github.com/rust-lang/crates.io-index" 1536 | checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" 1537 | dependencies = [ 1538 | "libc", 1539 | "log", 1540 | "wasi", 1541 | "windows-sys 0.45.0", 1542 | ] 1543 | 1544 | [[package]] 1545 | name = "naga" 1546 | version = "0.10.0" 1547 | source = "registry+https://github.com/rust-lang/crates.io-index" 1548 | checksum = "262d2840e72dbe250e8cf2f522d080988dfca624c4112c096238a4845f591707" 1549 | dependencies = [ 1550 | "bit-set", 1551 | "bitflags", 1552 | "codespan-reporting", 1553 | "hexf-parse", 1554 | "indexmap", 1555 | "log", 1556 | "num-traits", 1557 | "rustc-hash", 1558 | "spirv", 1559 | "termcolor", 1560 | "thiserror", 1561 | "unicode-xid", 1562 | ] 1563 | 1564 | [[package]] 1565 | name = "ndk" 1566 | version = "0.7.0" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" 1569 | dependencies = [ 1570 | "bitflags", 1571 | "jni-sys", 1572 | "ndk-sys", 1573 | "num_enum", 1574 | "raw-window-handle 0.5.0", 1575 | "thiserror", 1576 | ] 1577 | 1578 | [[package]] 1579 | name = "ndk-context" 1580 | version = "0.1.1" 1581 | source = "registry+https://github.com/rust-lang/crates.io-index" 1582 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 1583 | 1584 | [[package]] 1585 | name = "ndk-glue" 1586 | version = "0.7.0" 1587 | source = "registry+https://github.com/rust-lang/crates.io-index" 1588 | checksum = "0434fabdd2c15e0aab768ca31d5b7b333717f03cf02037d5a0a3ff3c278ed67f" 1589 | dependencies = [ 1590 | "libc", 1591 | "log", 1592 | "ndk", 1593 | "ndk-context", 1594 | "ndk-macro", 1595 | "ndk-sys", 1596 | "once_cell", 1597 | "parking_lot 0.12.1", 1598 | ] 1599 | 1600 | [[package]] 1601 | name = "ndk-macro" 1602 | version = "0.3.0" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" 1605 | dependencies = [ 1606 | "darling", 1607 | "proc-macro-crate", 1608 | "proc-macro2", 1609 | "quote", 1610 | "syn", 1611 | ] 1612 | 1613 | [[package]] 1614 | name = "ndk-sys" 1615 | version = "0.4.1+23.1.7779620" 1616 | source = "registry+https://github.com/rust-lang/crates.io-index" 1617 | checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" 1618 | dependencies = [ 1619 | "jni-sys", 1620 | ] 1621 | 1622 | [[package]] 1623 | name = "nix" 1624 | version = "0.22.3" 1625 | source = "registry+https://github.com/rust-lang/crates.io-index" 1626 | checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" 1627 | dependencies = [ 1628 | "bitflags", 1629 | "cc", 1630 | "cfg-if", 1631 | "libc", 1632 | "memoffset 0.6.5", 1633 | ] 1634 | 1635 | [[package]] 1636 | name = "nix" 1637 | version = "0.24.3" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" 1640 | dependencies = [ 1641 | "bitflags", 1642 | "cfg-if", 1643 | "libc", 1644 | "memoffset 0.6.5", 1645 | ] 1646 | 1647 | [[package]] 1648 | name = "nix" 1649 | version = "0.25.1" 1650 | source = "registry+https://github.com/rust-lang/crates.io-index" 1651 | checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" 1652 | dependencies = [ 1653 | "autocfg", 1654 | "bitflags", 1655 | "cfg-if", 1656 | "libc", 1657 | "memoffset 0.6.5", 1658 | ] 1659 | 1660 | [[package]] 1661 | name = "nom" 1662 | version = "7.1.3" 1663 | source = "registry+https://github.com/rust-lang/crates.io-index" 1664 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1665 | dependencies = [ 1666 | "memchr", 1667 | "minimal-lexical", 1668 | ] 1669 | 1670 | [[package]] 1671 | name = "num-traits" 1672 | version = "0.2.15" 1673 | source = "registry+https://github.com/rust-lang/crates.io-index" 1674 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1675 | dependencies = [ 1676 | "autocfg", 1677 | ] 1678 | 1679 | [[package]] 1680 | name = "num_cpus" 1681 | version = "1.15.0" 1682 | source = "registry+https://github.com/rust-lang/crates.io-index" 1683 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" 1684 | dependencies = [ 1685 | "hermit-abi", 1686 | "libc", 1687 | ] 1688 | 1689 | [[package]] 1690 | name = "num_enum" 1691 | version = "0.5.11" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" 1694 | dependencies = [ 1695 | "num_enum_derive", 1696 | ] 1697 | 1698 | [[package]] 1699 | name = "num_enum_derive" 1700 | version = "0.5.11" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" 1703 | dependencies = [ 1704 | "proc-macro-crate", 1705 | "proc-macro2", 1706 | "quote", 1707 | "syn", 1708 | ] 1709 | 1710 | [[package]] 1711 | name = "objc" 1712 | version = "0.2.7" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 1715 | dependencies = [ 1716 | "malloc_buf", 1717 | "objc_exception", 1718 | ] 1719 | 1720 | [[package]] 1721 | name = "objc-foundation" 1722 | version = "0.1.1" 1723 | source = "registry+https://github.com/rust-lang/crates.io-index" 1724 | checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" 1725 | dependencies = [ 1726 | "block", 1727 | "objc", 1728 | "objc_id", 1729 | ] 1730 | 1731 | [[package]] 1732 | name = "objc_exception" 1733 | version = "0.1.2" 1734 | source = "registry+https://github.com/rust-lang/crates.io-index" 1735 | checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" 1736 | dependencies = [ 1737 | "cc", 1738 | ] 1739 | 1740 | [[package]] 1741 | name = "objc_id" 1742 | version = "0.1.1" 1743 | source = "registry+https://github.com/rust-lang/crates.io-index" 1744 | checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" 1745 | dependencies = [ 1746 | "objc", 1747 | ] 1748 | 1749 | [[package]] 1750 | name = "once_cell" 1751 | version = "1.17.1" 1752 | source = "registry+https://github.com/rust-lang/crates.io-index" 1753 | checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" 1754 | 1755 | [[package]] 1756 | name = "ordered-float" 1757 | version = "3.4.0" 1758 | source = "registry+https://github.com/rust-lang/crates.io-index" 1759 | checksum = "d84eb1409416d254e4a9c8fa56cc24701755025b458f0fcd8e59e1f5f40c23bf" 1760 | dependencies = [ 1761 | "num-traits", 1762 | ] 1763 | 1764 | [[package]] 1765 | name = "os_pipe" 1766 | version = "1.1.3" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12" 1769 | dependencies = [ 1770 | "libc", 1771 | "windows-sys 0.45.0", 1772 | ] 1773 | 1774 | [[package]] 1775 | name = "ouroboros" 1776 | version = "0.13.0" 1777 | source = "registry+https://github.com/rust-lang/crates.io-index" 1778 | checksum = "f357ef82d1b4db66fbed0b8d542cbd3c22d0bf5b393b3c257b9ba4568e70c9c3" 1779 | dependencies = [ 1780 | "aliasable", 1781 | "ouroboros_macro", 1782 | "stable_deref_trait", 1783 | ] 1784 | 1785 | [[package]] 1786 | name = "ouroboros_macro" 1787 | version = "0.13.0" 1788 | source = "registry+https://github.com/rust-lang/crates.io-index" 1789 | checksum = "44a0b52c2cbaef7dffa5fec1a43274afe8bd2a644fa9fc50a9ef4ff0269b1257" 1790 | dependencies = [ 1791 | "Inflector", 1792 | "proc-macro-error", 1793 | "proc-macro2", 1794 | "quote", 1795 | "syn", 1796 | ] 1797 | 1798 | [[package]] 1799 | name = "owned_ttf_parser" 1800 | version = "0.18.1" 1801 | source = "registry+https://github.com/rust-lang/crates.io-index" 1802 | checksum = "e25e9fb15717794fae58ab55c26e044103aad13186fbb625893f9a3bbcc24228" 1803 | dependencies = [ 1804 | "ttf-parser", 1805 | ] 1806 | 1807 | [[package]] 1808 | name = "palette" 1809 | version = "0.6.1" 1810 | source = "registry+https://github.com/rust-lang/crates.io-index" 1811 | checksum = "8f9cd68f7112581033f157e56c77ac4a5538ec5836a2e39284e65bd7d7275e49" 1812 | dependencies = [ 1813 | "approx", 1814 | "num-traits", 1815 | "palette_derive", 1816 | "phf", 1817 | ] 1818 | 1819 | [[package]] 1820 | name = "palette_derive" 1821 | version = "0.6.1" 1822 | source = "registry+https://github.com/rust-lang/crates.io-index" 1823 | checksum = "05eedf46a8e7c27f74af0c9cfcdb004ceca158cb1b918c6f68f8d7a549b3e427" 1824 | dependencies = [ 1825 | "find-crate", 1826 | "proc-macro2", 1827 | "quote", 1828 | "syn", 1829 | ] 1830 | 1831 | [[package]] 1832 | name = "parking_lot" 1833 | version = "0.11.2" 1834 | source = "registry+https://github.com/rust-lang/crates.io-index" 1835 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 1836 | dependencies = [ 1837 | "instant", 1838 | "lock_api", 1839 | "parking_lot_core 0.8.6", 1840 | ] 1841 | 1842 | [[package]] 1843 | name = "parking_lot" 1844 | version = "0.12.1" 1845 | source = "registry+https://github.com/rust-lang/crates.io-index" 1846 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1847 | dependencies = [ 1848 | "lock_api", 1849 | "parking_lot_core 0.9.7", 1850 | ] 1851 | 1852 | [[package]] 1853 | name = "parking_lot_core" 1854 | version = "0.8.6" 1855 | source = "registry+https://github.com/rust-lang/crates.io-index" 1856 | checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" 1857 | dependencies = [ 1858 | "cfg-if", 1859 | "instant", 1860 | "libc", 1861 | "redox_syscall", 1862 | "smallvec", 1863 | "winapi", 1864 | ] 1865 | 1866 | [[package]] 1867 | name = "parking_lot_core" 1868 | version = "0.9.7" 1869 | source = "registry+https://github.com/rust-lang/crates.io-index" 1870 | checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" 1871 | dependencies = [ 1872 | "cfg-if", 1873 | "libc", 1874 | "redox_syscall", 1875 | "smallvec", 1876 | "windows-sys 0.45.0", 1877 | ] 1878 | 1879 | [[package]] 1880 | name = "percent-encoding" 1881 | version = "2.2.0" 1882 | source = "registry+https://github.com/rust-lang/crates.io-index" 1883 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" 1884 | 1885 | [[package]] 1886 | name = "phf" 1887 | version = "0.11.1" 1888 | source = "registry+https://github.com/rust-lang/crates.io-index" 1889 | checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" 1890 | dependencies = [ 1891 | "phf_macros", 1892 | "phf_shared", 1893 | ] 1894 | 1895 | [[package]] 1896 | name = "phf_generator" 1897 | version = "0.11.1" 1898 | source = "registry+https://github.com/rust-lang/crates.io-index" 1899 | checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" 1900 | dependencies = [ 1901 | "phf_shared", 1902 | "rand", 1903 | ] 1904 | 1905 | [[package]] 1906 | name = "phf_macros" 1907 | version = "0.11.1" 1908 | source = "registry+https://github.com/rust-lang/crates.io-index" 1909 | checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66" 1910 | dependencies = [ 1911 | "phf_generator", 1912 | "phf_shared", 1913 | "proc-macro2", 1914 | "quote", 1915 | "syn", 1916 | ] 1917 | 1918 | [[package]] 1919 | name = "phf_shared" 1920 | version = "0.11.1" 1921 | source = "registry+https://github.com/rust-lang/crates.io-index" 1922 | checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" 1923 | dependencies = [ 1924 | "siphasher", 1925 | ] 1926 | 1927 | [[package]] 1928 | name = "pin-project" 1929 | version = "1.0.12" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" 1932 | dependencies = [ 1933 | "pin-project-internal", 1934 | ] 1935 | 1936 | [[package]] 1937 | name = "pin-project-internal" 1938 | version = "1.0.12" 1939 | source = "registry+https://github.com/rust-lang/crates.io-index" 1940 | checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" 1941 | dependencies = [ 1942 | "proc-macro2", 1943 | "quote", 1944 | "syn", 1945 | ] 1946 | 1947 | [[package]] 1948 | name = "pin-project-lite" 1949 | version = "0.2.9" 1950 | source = "registry+https://github.com/rust-lang/crates.io-index" 1951 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 1952 | 1953 | [[package]] 1954 | name = "pin-utils" 1955 | version = "0.1.0" 1956 | source = "registry+https://github.com/rust-lang/crates.io-index" 1957 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1958 | 1959 | [[package]] 1960 | name = "pkg-config" 1961 | version = "0.3.26" 1962 | source = "registry+https://github.com/rust-lang/crates.io-index" 1963 | checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" 1964 | 1965 | [[package]] 1966 | name = "png" 1967 | version = "0.17.7" 1968 | source = "registry+https://github.com/rust-lang/crates.io-index" 1969 | checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" 1970 | dependencies = [ 1971 | "bitflags", 1972 | "crc32fast", 1973 | "flate2", 1974 | "miniz_oxide", 1975 | ] 1976 | 1977 | [[package]] 1978 | name = "ppv-lite86" 1979 | version = "0.2.17" 1980 | source = "registry+https://github.com/rust-lang/crates.io-index" 1981 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1982 | 1983 | [[package]] 1984 | name = "proc-macro-crate" 1985 | version = "1.3.1" 1986 | source = "registry+https://github.com/rust-lang/crates.io-index" 1987 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" 1988 | dependencies = [ 1989 | "once_cell", 1990 | "toml_edit 0.19.4", 1991 | ] 1992 | 1993 | [[package]] 1994 | name = "proc-macro-error" 1995 | version = "1.0.4" 1996 | source = "registry+https://github.com/rust-lang/crates.io-index" 1997 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1998 | dependencies = [ 1999 | "proc-macro-error-attr", 2000 | "proc-macro2", 2001 | "quote", 2002 | "syn", 2003 | "version_check", 2004 | ] 2005 | 2006 | [[package]] 2007 | name = "proc-macro-error-attr" 2008 | version = "1.0.4" 2009 | source = "registry+https://github.com/rust-lang/crates.io-index" 2010 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2011 | dependencies = [ 2012 | "proc-macro2", 2013 | "quote", 2014 | "version_check", 2015 | ] 2016 | 2017 | [[package]] 2018 | name = "proc-macro2" 2019 | version = "1.0.51" 2020 | source = "registry+https://github.com/rust-lang/crates.io-index" 2021 | checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" 2022 | dependencies = [ 2023 | "unicode-ident", 2024 | ] 2025 | 2026 | [[package]] 2027 | name = "profiling" 2028 | version = "1.0.7" 2029 | source = "registry+https://github.com/rust-lang/crates.io-index" 2030 | checksum = "74605f360ce573babfe43964cbe520294dcb081afbf8c108fc6e23036b4da2df" 2031 | 2032 | [[package]] 2033 | name = "prost" 2034 | version = "0.11.8" 2035 | source = "registry+https://github.com/rust-lang/crates.io-index" 2036 | checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537" 2037 | dependencies = [ 2038 | "bytes", 2039 | "prost-derive", 2040 | ] 2041 | 2042 | [[package]] 2043 | name = "prost-derive" 2044 | version = "0.11.8" 2045 | source = "registry+https://github.com/rust-lang/crates.io-index" 2046 | checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b" 2047 | dependencies = [ 2048 | "anyhow", 2049 | "itertools", 2050 | "proc-macro2", 2051 | "quote", 2052 | "syn", 2053 | ] 2054 | 2055 | [[package]] 2056 | name = "prost-types" 2057 | version = "0.11.8" 2058 | source = "registry+https://github.com/rust-lang/crates.io-index" 2059 | checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88" 2060 | dependencies = [ 2061 | "prost", 2062 | ] 2063 | 2064 | [[package]] 2065 | name = "quote" 2066 | version = "1.0.23" 2067 | source = "registry+https://github.com/rust-lang/crates.io-index" 2068 | checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" 2069 | dependencies = [ 2070 | "proc-macro2", 2071 | ] 2072 | 2073 | [[package]] 2074 | name = "rand" 2075 | version = "0.8.5" 2076 | source = "registry+https://github.com/rust-lang/crates.io-index" 2077 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 2078 | dependencies = [ 2079 | "libc", 2080 | "rand_chacha", 2081 | "rand_core", 2082 | ] 2083 | 2084 | [[package]] 2085 | name = "rand_chacha" 2086 | version = "0.3.1" 2087 | source = "registry+https://github.com/rust-lang/crates.io-index" 2088 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 2089 | dependencies = [ 2090 | "ppv-lite86", 2091 | "rand_core", 2092 | ] 2093 | 2094 | [[package]] 2095 | name = "rand_core" 2096 | version = "0.6.4" 2097 | source = "registry+https://github.com/rust-lang/crates.io-index" 2098 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 2099 | dependencies = [ 2100 | "getrandom", 2101 | ] 2102 | 2103 | [[package]] 2104 | name = "range-alloc" 2105 | version = "0.1.3" 2106 | source = "registry+https://github.com/rust-lang/crates.io-index" 2107 | checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" 2108 | 2109 | [[package]] 2110 | name = "raw-window-handle" 2111 | version = "0.3.4" 2112 | source = "registry+https://github.com/rust-lang/crates.io-index" 2113 | checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76" 2114 | dependencies = [ 2115 | "libc", 2116 | "raw-window-handle 0.4.3", 2117 | ] 2118 | 2119 | [[package]] 2120 | name = "raw-window-handle" 2121 | version = "0.4.3" 2122 | source = "registry+https://github.com/rust-lang/crates.io-index" 2123 | checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" 2124 | dependencies = [ 2125 | "cty", 2126 | ] 2127 | 2128 | [[package]] 2129 | name = "raw-window-handle" 2130 | version = "0.5.0" 2131 | source = "registry+https://github.com/rust-lang/crates.io-index" 2132 | checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a" 2133 | dependencies = [ 2134 | "cty", 2135 | ] 2136 | 2137 | [[package]] 2138 | name = "rayon" 2139 | version = "1.6.1" 2140 | source = "registry+https://github.com/rust-lang/crates.io-index" 2141 | checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" 2142 | dependencies = [ 2143 | "either", 2144 | "rayon-core", 2145 | ] 2146 | 2147 | [[package]] 2148 | name = "rayon-core" 2149 | version = "1.10.2" 2150 | source = "registry+https://github.com/rust-lang/crates.io-index" 2151 | checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" 2152 | dependencies = [ 2153 | "crossbeam-channel", 2154 | "crossbeam-deque", 2155 | "crossbeam-utils", 2156 | "num_cpus", 2157 | ] 2158 | 2159 | [[package]] 2160 | name = "redox_syscall" 2161 | version = "0.2.16" 2162 | source = "registry+https://github.com/rust-lang/crates.io-index" 2163 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 2164 | dependencies = [ 2165 | "bitflags", 2166 | ] 2167 | 2168 | [[package]] 2169 | name = "redox_users" 2170 | version = "0.4.3" 2171 | source = "registry+https://github.com/rust-lang/crates.io-index" 2172 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 2173 | dependencies = [ 2174 | "getrandom", 2175 | "redox_syscall", 2176 | "thiserror", 2177 | ] 2178 | 2179 | [[package]] 2180 | name = "regex" 2181 | version = "1.7.1" 2182 | source = "registry+https://github.com/rust-lang/crates.io-index" 2183 | checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" 2184 | dependencies = [ 2185 | "regex-syntax", 2186 | ] 2187 | 2188 | [[package]] 2189 | name = "regex-automata" 2190 | version = "0.1.10" 2191 | source = "registry+https://github.com/rust-lang/crates.io-index" 2192 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 2193 | dependencies = [ 2194 | "regex-syntax", 2195 | ] 2196 | 2197 | [[package]] 2198 | name = "regex-syntax" 2199 | version = "0.6.28" 2200 | source = "registry+https://github.com/rust-lang/crates.io-index" 2201 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" 2202 | 2203 | [[package]] 2204 | name = "renderdoc-sys" 2205 | version = "0.7.1" 2206 | source = "registry+https://github.com/rust-lang/crates.io-index" 2207 | checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157" 2208 | 2209 | [[package]] 2210 | name = "rustc-hash" 2211 | version = "1.1.0" 2212 | source = "registry+https://github.com/rust-lang/crates.io-index" 2213 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2214 | 2215 | [[package]] 2216 | name = "rustversion" 2217 | version = "1.0.12" 2218 | source = "registry+https://github.com/rust-lang/crates.io-index" 2219 | checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" 2220 | 2221 | [[package]] 2222 | name = "ryu" 2223 | version = "1.0.13" 2224 | source = "registry+https://github.com/rust-lang/crates.io-index" 2225 | checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" 2226 | 2227 | [[package]] 2228 | name = "safe_arch" 2229 | version = "0.5.2" 2230 | source = "registry+https://github.com/rust-lang/crates.io-index" 2231 | checksum = "c1ff3d6d9696af502cc3110dacce942840fb06ff4514cad92236ecc455f2ce05" 2232 | dependencies = [ 2233 | "bytemuck", 2234 | ] 2235 | 2236 | [[package]] 2237 | name = "scoped-tls" 2238 | version = "1.0.1" 2239 | source = "registry+https://github.com/rust-lang/crates.io-index" 2240 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 2241 | 2242 | [[package]] 2243 | name = "scopeguard" 2244 | version = "1.1.0" 2245 | source = "registry+https://github.com/rust-lang/crates.io-index" 2246 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 2247 | 2248 | [[package]] 2249 | name = "sctk-adwaita" 2250 | version = "0.4.3" 2251 | source = "registry+https://github.com/rust-lang/crates.io-index" 2252 | checksum = "61270629cc6b4d77ec1907db1033d5c2e1a404c412743621981a871dc9c12339" 2253 | dependencies = [ 2254 | "crossfont", 2255 | "log", 2256 | "smithay-client-toolkit", 2257 | "tiny-skia", 2258 | ] 2259 | 2260 | [[package]] 2261 | name = "serde" 2262 | version = "1.0.152" 2263 | source = "registry+https://github.com/rust-lang/crates.io-index" 2264 | checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" 2265 | dependencies = [ 2266 | "serde_derive", 2267 | ] 2268 | 2269 | [[package]] 2270 | name = "serde_derive" 2271 | version = "1.0.152" 2272 | source = "registry+https://github.com/rust-lang/crates.io-index" 2273 | checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" 2274 | dependencies = [ 2275 | "proc-macro2", 2276 | "quote", 2277 | "syn", 2278 | ] 2279 | 2280 | [[package]] 2281 | name = "serde_json" 2282 | version = "1.0.94" 2283 | source = "registry+https://github.com/rust-lang/crates.io-index" 2284 | checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" 2285 | dependencies = [ 2286 | "itoa", 2287 | "ryu", 2288 | "serde", 2289 | ] 2290 | 2291 | [[package]] 2292 | name = "servo-fontconfig" 2293 | version = "0.5.1" 2294 | source = "registry+https://github.com/rust-lang/crates.io-index" 2295 | checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c" 2296 | dependencies = [ 2297 | "libc", 2298 | "servo-fontconfig-sys", 2299 | ] 2300 | 2301 | [[package]] 2302 | name = "servo-fontconfig-sys" 2303 | version = "5.1.0" 2304 | source = "registry+https://github.com/rust-lang/crates.io-index" 2305 | checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388" 2306 | dependencies = [ 2307 | "expat-sys", 2308 | "freetype-sys", 2309 | "pkg-config", 2310 | ] 2311 | 2312 | [[package]] 2313 | name = "sharded-slab" 2314 | version = "0.1.4" 2315 | source = "registry+https://github.com/rust-lang/crates.io-index" 2316 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" 2317 | dependencies = [ 2318 | "lazy_static", 2319 | ] 2320 | 2321 | [[package]] 2322 | name = "signal-hook-registry" 2323 | version = "1.4.1" 2324 | source = "registry+https://github.com/rust-lang/crates.io-index" 2325 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 2326 | dependencies = [ 2327 | "libc", 2328 | ] 2329 | 2330 | [[package]] 2331 | name = "siphasher" 2332 | version = "0.3.10" 2333 | source = "registry+https://github.com/rust-lang/crates.io-index" 2334 | checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" 2335 | 2336 | [[package]] 2337 | name = "slab" 2338 | version = "0.4.8" 2339 | source = "registry+https://github.com/rust-lang/crates.io-index" 2340 | checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" 2341 | dependencies = [ 2342 | "autocfg", 2343 | ] 2344 | 2345 | [[package]] 2346 | name = "slotmap" 2347 | version = "1.0.6" 2348 | source = "registry+https://github.com/rust-lang/crates.io-index" 2349 | checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" 2350 | dependencies = [ 2351 | "version_check", 2352 | ] 2353 | 2354 | [[package]] 2355 | name = "smallvec" 2356 | version = "1.10.0" 2357 | source = "registry+https://github.com/rust-lang/crates.io-index" 2358 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 2359 | 2360 | [[package]] 2361 | name = "smithay-client-toolkit" 2362 | version = "0.16.0" 2363 | source = "registry+https://github.com/rust-lang/crates.io-index" 2364 | checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" 2365 | dependencies = [ 2366 | "bitflags", 2367 | "calloop", 2368 | "dlib", 2369 | "lazy_static", 2370 | "log", 2371 | "memmap2", 2372 | "nix 0.24.3", 2373 | "pkg-config", 2374 | "wayland-client", 2375 | "wayland-cursor", 2376 | "wayland-protocols", 2377 | ] 2378 | 2379 | [[package]] 2380 | name = "smithay-clipboard" 2381 | version = "0.6.6" 2382 | source = "registry+https://github.com/rust-lang/crates.io-index" 2383 | checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8" 2384 | dependencies = [ 2385 | "smithay-client-toolkit", 2386 | "wayland-client", 2387 | ] 2388 | 2389 | [[package]] 2390 | name = "socket2" 2391 | version = "0.4.7" 2392 | source = "registry+https://github.com/rust-lang/crates.io-index" 2393 | checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" 2394 | dependencies = [ 2395 | "libc", 2396 | "winapi", 2397 | ] 2398 | 2399 | [[package]] 2400 | name = "spirv" 2401 | version = "0.2.0+1.5.4" 2402 | source = "registry+https://github.com/rust-lang/crates.io-index" 2403 | checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" 2404 | dependencies = [ 2405 | "bitflags", 2406 | "num-traits", 2407 | ] 2408 | 2409 | [[package]] 2410 | name = "splines" 2411 | version = "4.2.0" 2412 | source = "registry+https://github.com/rust-lang/crates.io-index" 2413 | checksum = "345f11dca845086e60f1076569dedb4c2026e8dfe420d2900de8683142480bcf" 2414 | 2415 | [[package]] 2416 | name = "stable_deref_trait" 2417 | version = "1.2.0" 2418 | source = "registry+https://github.com/rust-lang/crates.io-index" 2419 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2420 | 2421 | [[package]] 2422 | name = "static_assertions" 2423 | version = "1.1.0" 2424 | source = "registry+https://github.com/rust-lang/crates.io-index" 2425 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2426 | 2427 | [[package]] 2428 | name = "str-buf" 2429 | version = "1.0.6" 2430 | source = "registry+https://github.com/rust-lang/crates.io-index" 2431 | checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" 2432 | 2433 | [[package]] 2434 | name = "strsim" 2435 | version = "0.10.0" 2436 | source = "registry+https://github.com/rust-lang/crates.io-index" 2437 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 2438 | 2439 | [[package]] 2440 | name = "svg_fmt" 2441 | version = "0.4.1" 2442 | source = "registry+https://github.com/rust-lang/crates.io-index" 2443 | checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" 2444 | 2445 | [[package]] 2446 | name = "syn" 2447 | version = "1.0.109" 2448 | source = "registry+https://github.com/rust-lang/crates.io-index" 2449 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2450 | dependencies = [ 2451 | "proc-macro2", 2452 | "quote", 2453 | "unicode-ident", 2454 | ] 2455 | 2456 | [[package]] 2457 | name = "sync_wrapper" 2458 | version = "0.1.2" 2459 | source = "registry+https://github.com/rust-lang/crates.io-index" 2460 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 2461 | 2462 | [[package]] 2463 | name = "termcolor" 2464 | version = "1.2.0" 2465 | source = "registry+https://github.com/rust-lang/crates.io-index" 2466 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" 2467 | dependencies = [ 2468 | "winapi-util", 2469 | ] 2470 | 2471 | [[package]] 2472 | name = "thiserror" 2473 | version = "1.0.38" 2474 | source = "registry+https://github.com/rust-lang/crates.io-index" 2475 | checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" 2476 | dependencies = [ 2477 | "thiserror-impl", 2478 | ] 2479 | 2480 | [[package]] 2481 | name = "thiserror-impl" 2482 | version = "1.0.38" 2483 | source = "registry+https://github.com/rust-lang/crates.io-index" 2484 | checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" 2485 | dependencies = [ 2486 | "proc-macro2", 2487 | "quote", 2488 | "syn", 2489 | ] 2490 | 2491 | [[package]] 2492 | name = "thread_local" 2493 | version = "1.1.7" 2494 | source = "registry+https://github.com/rust-lang/crates.io-index" 2495 | checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" 2496 | dependencies = [ 2497 | "cfg-if", 2498 | "once_cell", 2499 | ] 2500 | 2501 | [[package]] 2502 | name = "tiny-skia" 2503 | version = "0.7.0" 2504 | source = "registry+https://github.com/rust-lang/crates.io-index" 2505 | checksum = "642680569bb895b16e4b9d181c60be1ed136fa0c9c7f11d004daf053ba89bf82" 2506 | dependencies = [ 2507 | "arrayref", 2508 | "arrayvec 0.5.2", 2509 | "bytemuck", 2510 | "cfg-if", 2511 | "png", 2512 | "safe_arch", 2513 | "tiny-skia-path", 2514 | ] 2515 | 2516 | [[package]] 2517 | name = "tiny-skia-path" 2518 | version = "0.7.0" 2519 | source = "registry+https://github.com/rust-lang/crates.io-index" 2520 | checksum = "c114d32f0c2ee43d585367cb013dfaba967ab9f62b90d9af0d696e955e70fa6c" 2521 | dependencies = [ 2522 | "arrayref", 2523 | "bytemuck", 2524 | ] 2525 | 2526 | [[package]] 2527 | name = "tokio" 2528 | version = "1.25.0" 2529 | source = "registry+https://github.com/rust-lang/crates.io-index" 2530 | checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" 2531 | dependencies = [ 2532 | "autocfg", 2533 | "bytes", 2534 | "libc", 2535 | "memchr", 2536 | "mio", 2537 | "num_cpus", 2538 | "parking_lot 0.12.1", 2539 | "pin-project-lite", 2540 | "signal-hook-registry", 2541 | "socket2", 2542 | "tokio-macros", 2543 | "tracing", 2544 | "windows-sys 0.42.0", 2545 | ] 2546 | 2547 | [[package]] 2548 | name = "tokio-io-timeout" 2549 | version = "1.2.0" 2550 | source = "registry+https://github.com/rust-lang/crates.io-index" 2551 | checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" 2552 | dependencies = [ 2553 | "pin-project-lite", 2554 | "tokio", 2555 | ] 2556 | 2557 | [[package]] 2558 | name = "tokio-macros" 2559 | version = "1.8.2" 2560 | source = "registry+https://github.com/rust-lang/crates.io-index" 2561 | checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" 2562 | dependencies = [ 2563 | "proc-macro2", 2564 | "quote", 2565 | "syn", 2566 | ] 2567 | 2568 | [[package]] 2569 | name = "tokio-stream" 2570 | version = "0.1.12" 2571 | source = "registry+https://github.com/rust-lang/crates.io-index" 2572 | checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" 2573 | dependencies = [ 2574 | "futures-core", 2575 | "pin-project-lite", 2576 | "tokio", 2577 | ] 2578 | 2579 | [[package]] 2580 | name = "tokio-util" 2581 | version = "0.7.7" 2582 | source = "registry+https://github.com/rust-lang/crates.io-index" 2583 | checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" 2584 | dependencies = [ 2585 | "bytes", 2586 | "futures-core", 2587 | "futures-sink", 2588 | "pin-project-lite", 2589 | "tokio", 2590 | "tracing", 2591 | ] 2592 | 2593 | [[package]] 2594 | name = "toml" 2595 | version = "0.5.11" 2596 | source = "registry+https://github.com/rust-lang/crates.io-index" 2597 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" 2598 | dependencies = [ 2599 | "serde", 2600 | ] 2601 | 2602 | [[package]] 2603 | name = "toml_datetime" 2604 | version = "0.5.1" 2605 | source = "registry+https://github.com/rust-lang/crates.io-index" 2606 | checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5" 2607 | dependencies = [ 2608 | "serde", 2609 | ] 2610 | 2611 | [[package]] 2612 | name = "toml_datetime" 2613 | version = "0.6.1" 2614 | source = "registry+https://github.com/rust-lang/crates.io-index" 2615 | checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" 2616 | 2617 | [[package]] 2618 | name = "toml_edit" 2619 | version = "0.15.0" 2620 | source = "registry+https://github.com/rust-lang/crates.io-index" 2621 | checksum = "b1541ba70885967e662f69d31ab3aeca7b1aaecfcd58679590b893e9239c3646" 2622 | dependencies = [ 2623 | "combine", 2624 | "indexmap", 2625 | "itertools", 2626 | "serde", 2627 | "toml_datetime 0.5.1", 2628 | ] 2629 | 2630 | [[package]] 2631 | name = "toml_edit" 2632 | version = "0.19.4" 2633 | source = "registry+https://github.com/rust-lang/crates.io-index" 2634 | checksum = "9a1eb0622d28f4b9c90adc4ea4b2b46b47663fde9ac5fafcb14a1369d5508825" 2635 | dependencies = [ 2636 | "indexmap", 2637 | "toml_datetime 0.6.1", 2638 | "winnow", 2639 | ] 2640 | 2641 | [[package]] 2642 | name = "tonic" 2643 | version = "0.8.3" 2644 | source = "registry+https://github.com/rust-lang/crates.io-index" 2645 | checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" 2646 | dependencies = [ 2647 | "async-stream", 2648 | "async-trait", 2649 | "axum", 2650 | "base64", 2651 | "bytes", 2652 | "futures-core", 2653 | "futures-util", 2654 | "h2", 2655 | "http", 2656 | "http-body", 2657 | "hyper", 2658 | "hyper-timeout", 2659 | "percent-encoding", 2660 | "pin-project", 2661 | "prost", 2662 | "prost-derive", 2663 | "tokio", 2664 | "tokio-stream", 2665 | "tokio-util", 2666 | "tower", 2667 | "tower-layer", 2668 | "tower-service", 2669 | "tracing", 2670 | "tracing-futures", 2671 | ] 2672 | 2673 | [[package]] 2674 | name = "tower" 2675 | version = "0.4.13" 2676 | source = "registry+https://github.com/rust-lang/crates.io-index" 2677 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 2678 | dependencies = [ 2679 | "futures-core", 2680 | "futures-util", 2681 | "indexmap", 2682 | "pin-project", 2683 | "pin-project-lite", 2684 | "rand", 2685 | "slab", 2686 | "tokio", 2687 | "tokio-util", 2688 | "tower-layer", 2689 | "tower-service", 2690 | "tracing", 2691 | ] 2692 | 2693 | [[package]] 2694 | name = "tower-layer" 2695 | version = "0.3.2" 2696 | source = "registry+https://github.com/rust-lang/crates.io-index" 2697 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" 2698 | 2699 | [[package]] 2700 | name = "tower-service" 2701 | version = "0.3.2" 2702 | source = "registry+https://github.com/rust-lang/crates.io-index" 2703 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 2704 | 2705 | [[package]] 2706 | name = "tracing" 2707 | version = "0.1.37" 2708 | source = "registry+https://github.com/rust-lang/crates.io-index" 2709 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" 2710 | dependencies = [ 2711 | "cfg-if", 2712 | "pin-project-lite", 2713 | "tracing-attributes", 2714 | "tracing-core", 2715 | ] 2716 | 2717 | [[package]] 2718 | name = "tracing-attributes" 2719 | version = "0.1.23" 2720 | source = "registry+https://github.com/rust-lang/crates.io-index" 2721 | checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" 2722 | dependencies = [ 2723 | "proc-macro2", 2724 | "quote", 2725 | "syn", 2726 | ] 2727 | 2728 | [[package]] 2729 | name = "tracing-core" 2730 | version = "0.1.30" 2731 | source = "registry+https://github.com/rust-lang/crates.io-index" 2732 | checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" 2733 | dependencies = [ 2734 | "once_cell", 2735 | "valuable", 2736 | ] 2737 | 2738 | [[package]] 2739 | name = "tracing-futures" 2740 | version = "0.2.5" 2741 | source = "registry+https://github.com/rust-lang/crates.io-index" 2742 | checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 2743 | dependencies = [ 2744 | "pin-project", 2745 | "tracing", 2746 | ] 2747 | 2748 | [[package]] 2749 | name = "tracing-subscriber" 2750 | version = "0.3.16" 2751 | source = "registry+https://github.com/rust-lang/crates.io-index" 2752 | checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" 2753 | dependencies = [ 2754 | "matchers", 2755 | "once_cell", 2756 | "regex", 2757 | "sharded-slab", 2758 | "thread_local", 2759 | "tracing", 2760 | "tracing-core", 2761 | ] 2762 | 2763 | [[package]] 2764 | name = "try-lock" 2765 | version = "0.2.4" 2766 | source = "registry+https://github.com/rust-lang/crates.io-index" 2767 | checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" 2768 | 2769 | [[package]] 2770 | name = "ttf-parser" 2771 | version = "0.18.1" 2772 | source = "registry+https://github.com/rust-lang/crates.io-index" 2773 | checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" 2774 | 2775 | [[package]] 2776 | name = "twox-hash" 2777 | version = "1.6.3" 2778 | source = "registry+https://github.com/rust-lang/crates.io-index" 2779 | checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" 2780 | dependencies = [ 2781 | "cfg-if", 2782 | "rand", 2783 | "static_assertions", 2784 | ] 2785 | 2786 | [[package]] 2787 | name = "unicode-ident" 2788 | version = "1.0.6" 2789 | source = "registry+https://github.com/rust-lang/crates.io-index" 2790 | checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" 2791 | 2792 | [[package]] 2793 | name = "unicode-segmentation" 2794 | version = "1.10.1" 2795 | source = "registry+https://github.com/rust-lang/crates.io-index" 2796 | checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" 2797 | 2798 | [[package]] 2799 | name = "unicode-width" 2800 | version = "0.1.10" 2801 | source = "registry+https://github.com/rust-lang/crates.io-index" 2802 | checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" 2803 | 2804 | [[package]] 2805 | name = "unicode-xid" 2806 | version = "0.2.4" 2807 | source = "registry+https://github.com/rust-lang/crates.io-index" 2808 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 2809 | 2810 | [[package]] 2811 | name = "valuable" 2812 | version = "0.1.0" 2813 | source = "registry+https://github.com/rust-lang/crates.io-index" 2814 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 2815 | 2816 | [[package]] 2817 | name = "vec_map" 2818 | version = "0.8.2" 2819 | source = "registry+https://github.com/rust-lang/crates.io-index" 2820 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 2821 | 2822 | [[package]] 2823 | name = "version_check" 2824 | version = "0.9.4" 2825 | source = "registry+https://github.com/rust-lang/crates.io-index" 2826 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 2827 | 2828 | [[package]] 2829 | name = "want" 2830 | version = "0.3.0" 2831 | source = "registry+https://github.com/rust-lang/crates.io-index" 2832 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 2833 | dependencies = [ 2834 | "log", 2835 | "try-lock", 2836 | ] 2837 | 2838 | [[package]] 2839 | name = "wasi" 2840 | version = "0.11.0+wasi-snapshot-preview1" 2841 | source = "registry+https://github.com/rust-lang/crates.io-index" 2842 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2843 | 2844 | [[package]] 2845 | name = "wasm-bindgen" 2846 | version = "0.2.84" 2847 | source = "registry+https://github.com/rust-lang/crates.io-index" 2848 | checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" 2849 | dependencies = [ 2850 | "cfg-if", 2851 | "wasm-bindgen-macro", 2852 | ] 2853 | 2854 | [[package]] 2855 | name = "wasm-bindgen-backend" 2856 | version = "0.2.84" 2857 | source = "registry+https://github.com/rust-lang/crates.io-index" 2858 | checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" 2859 | dependencies = [ 2860 | "bumpalo", 2861 | "log", 2862 | "once_cell", 2863 | "proc-macro2", 2864 | "quote", 2865 | "syn", 2866 | "wasm-bindgen-shared", 2867 | ] 2868 | 2869 | [[package]] 2870 | name = "wasm-bindgen-futures" 2871 | version = "0.4.34" 2872 | source = "registry+https://github.com/rust-lang/crates.io-index" 2873 | checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" 2874 | dependencies = [ 2875 | "cfg-if", 2876 | "js-sys", 2877 | "wasm-bindgen", 2878 | "web-sys", 2879 | ] 2880 | 2881 | [[package]] 2882 | name = "wasm-bindgen-macro" 2883 | version = "0.2.84" 2884 | source = "registry+https://github.com/rust-lang/crates.io-index" 2885 | checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" 2886 | dependencies = [ 2887 | "quote", 2888 | "wasm-bindgen-macro-support", 2889 | ] 2890 | 2891 | [[package]] 2892 | name = "wasm-bindgen-macro-support" 2893 | version = "0.2.84" 2894 | source = "registry+https://github.com/rust-lang/crates.io-index" 2895 | checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" 2896 | dependencies = [ 2897 | "proc-macro2", 2898 | "quote", 2899 | "syn", 2900 | "wasm-bindgen-backend", 2901 | "wasm-bindgen-shared", 2902 | ] 2903 | 2904 | [[package]] 2905 | name = "wasm-bindgen-shared" 2906 | version = "0.2.84" 2907 | source = "registry+https://github.com/rust-lang/crates.io-index" 2908 | checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" 2909 | 2910 | [[package]] 2911 | name = "wasm-timer" 2912 | version = "0.2.5" 2913 | source = "registry+https://github.com/rust-lang/crates.io-index" 2914 | checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" 2915 | dependencies = [ 2916 | "futures", 2917 | "js-sys", 2918 | "parking_lot 0.11.2", 2919 | "pin-utils", 2920 | "wasm-bindgen", 2921 | "wasm-bindgen-futures", 2922 | "web-sys", 2923 | ] 2924 | 2925 | [[package]] 2926 | name = "wayland-client" 2927 | version = "0.29.5" 2928 | source = "registry+https://github.com/rust-lang/crates.io-index" 2929 | checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715" 2930 | dependencies = [ 2931 | "bitflags", 2932 | "downcast-rs", 2933 | "libc", 2934 | "nix 0.24.3", 2935 | "scoped-tls", 2936 | "wayland-commons", 2937 | "wayland-scanner", 2938 | "wayland-sys", 2939 | ] 2940 | 2941 | [[package]] 2942 | name = "wayland-commons" 2943 | version = "0.29.5" 2944 | source = "registry+https://github.com/rust-lang/crates.io-index" 2945 | checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902" 2946 | dependencies = [ 2947 | "nix 0.24.3", 2948 | "once_cell", 2949 | "smallvec", 2950 | "wayland-sys", 2951 | ] 2952 | 2953 | [[package]] 2954 | name = "wayland-cursor" 2955 | version = "0.29.5" 2956 | source = "registry+https://github.com/rust-lang/crates.io-index" 2957 | checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" 2958 | dependencies = [ 2959 | "nix 0.24.3", 2960 | "wayland-client", 2961 | "xcursor", 2962 | ] 2963 | 2964 | [[package]] 2965 | name = "wayland-protocols" 2966 | version = "0.29.5" 2967 | source = "registry+https://github.com/rust-lang/crates.io-index" 2968 | checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" 2969 | dependencies = [ 2970 | "bitflags", 2971 | "wayland-client", 2972 | "wayland-commons", 2973 | "wayland-scanner", 2974 | ] 2975 | 2976 | [[package]] 2977 | name = "wayland-scanner" 2978 | version = "0.29.5" 2979 | source = "registry+https://github.com/rust-lang/crates.io-index" 2980 | checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" 2981 | dependencies = [ 2982 | "proc-macro2", 2983 | "quote", 2984 | "xml-rs", 2985 | ] 2986 | 2987 | [[package]] 2988 | name = "wayland-sys" 2989 | version = "0.29.5" 2990 | source = "registry+https://github.com/rust-lang/crates.io-index" 2991 | checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" 2992 | dependencies = [ 2993 | "dlib", 2994 | "lazy_static", 2995 | "pkg-config", 2996 | ] 2997 | 2998 | [[package]] 2999 | name = "web-sys" 3000 | version = "0.3.61" 3001 | source = "registry+https://github.com/rust-lang/crates.io-index" 3002 | checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" 3003 | dependencies = [ 3004 | "js-sys", 3005 | "wasm-bindgen", 3006 | ] 3007 | 3008 | [[package]] 3009 | name = "wgpu" 3010 | version = "0.14.2" 3011 | source = "registry+https://github.com/rust-lang/crates.io-index" 3012 | checksum = "81f643110d228fd62a60c5ed2ab56c4d5b3704520bd50561174ec4ec74932937" 3013 | dependencies = [ 3014 | "arrayvec 0.7.2", 3015 | "js-sys", 3016 | "log", 3017 | "naga", 3018 | "parking_lot 0.12.1", 3019 | "raw-window-handle 0.5.0", 3020 | "smallvec", 3021 | "static_assertions", 3022 | "wasm-bindgen", 3023 | "wasm-bindgen-futures", 3024 | "web-sys", 3025 | "wgpu-core", 3026 | "wgpu-hal", 3027 | "wgpu-types", 3028 | ] 3029 | 3030 | [[package]] 3031 | name = "wgpu-core" 3032 | version = "0.14.2" 3033 | source = "registry+https://github.com/rust-lang/crates.io-index" 3034 | checksum = "6000d1284ef8eec6076fd5544a73125fd7eb9b635f18dceeb829d826f41724ca" 3035 | dependencies = [ 3036 | "arrayvec 0.7.2", 3037 | "bit-vec", 3038 | "bitflags", 3039 | "cfg_aliases", 3040 | "codespan-reporting", 3041 | "fxhash", 3042 | "log", 3043 | "naga", 3044 | "parking_lot 0.12.1", 3045 | "profiling", 3046 | "raw-window-handle 0.5.0", 3047 | "smallvec", 3048 | "thiserror", 3049 | "web-sys", 3050 | "wgpu-hal", 3051 | "wgpu-types", 3052 | ] 3053 | 3054 | [[package]] 3055 | name = "wgpu-hal" 3056 | version = "0.14.1" 3057 | source = "registry+https://github.com/rust-lang/crates.io-index" 3058 | checksum = "3cc320a61acb26be4f549c9b1b53405c10a223fbfea363ec39474c32c348d12f" 3059 | dependencies = [ 3060 | "android_system_properties", 3061 | "arrayvec 0.7.2", 3062 | "ash", 3063 | "bit-set", 3064 | "bitflags", 3065 | "block", 3066 | "core-graphics-types", 3067 | "d3d12", 3068 | "foreign-types 0.3.2", 3069 | "fxhash", 3070 | "glow", 3071 | "gpu-alloc", 3072 | "gpu-descriptor", 3073 | "js-sys", 3074 | "khronos-egl", 3075 | "libloading", 3076 | "log", 3077 | "metal", 3078 | "naga", 3079 | "objc", 3080 | "parking_lot 0.12.1", 3081 | "profiling", 3082 | "range-alloc", 3083 | "raw-window-handle 0.5.0", 3084 | "renderdoc-sys", 3085 | "smallvec", 3086 | "thiserror", 3087 | "wasm-bindgen", 3088 | "web-sys", 3089 | "wgpu-types", 3090 | "winapi", 3091 | ] 3092 | 3093 | [[package]] 3094 | name = "wgpu-types" 3095 | version = "0.14.1" 3096 | source = "registry+https://github.com/rust-lang/crates.io-index" 3097 | checksum = "fb6b28ef22cac17b9109b25b3bf8c9a103eeb293d7c5f78653979b09140375f6" 3098 | dependencies = [ 3099 | "bitflags", 3100 | ] 3101 | 3102 | [[package]] 3103 | name = "wgpu_glyph" 3104 | version = "0.18.0" 3105 | source = "registry+https://github.com/rust-lang/crates.io-index" 3106 | checksum = "0cafb82773e0f124a33674dab5de4dff73175aeb921949047ab014efb58fb446" 3107 | dependencies = [ 3108 | "bytemuck", 3109 | "glyph_brush", 3110 | "log", 3111 | "wgpu", 3112 | ] 3113 | 3114 | [[package]] 3115 | name = "winapi" 3116 | version = "0.3.9" 3117 | source = "registry+https://github.com/rust-lang/crates.io-index" 3118 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3119 | dependencies = [ 3120 | "winapi-i686-pc-windows-gnu", 3121 | "winapi-x86_64-pc-windows-gnu", 3122 | ] 3123 | 3124 | [[package]] 3125 | name = "winapi-i686-pc-windows-gnu" 3126 | version = "0.4.0" 3127 | source = "registry+https://github.com/rust-lang/crates.io-index" 3128 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3129 | 3130 | [[package]] 3131 | name = "winapi-util" 3132 | version = "0.1.5" 3133 | source = "registry+https://github.com/rust-lang/crates.io-index" 3134 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 3135 | dependencies = [ 3136 | "winapi", 3137 | ] 3138 | 3139 | [[package]] 3140 | name = "winapi-wsapoll" 3141 | version = "0.1.1" 3142 | source = "registry+https://github.com/rust-lang/crates.io-index" 3143 | checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" 3144 | dependencies = [ 3145 | "winapi", 3146 | ] 3147 | 3148 | [[package]] 3149 | name = "winapi-x86_64-pc-windows-gnu" 3150 | version = "0.4.0" 3151 | source = "registry+https://github.com/rust-lang/crates.io-index" 3152 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3153 | 3154 | [[package]] 3155 | name = "window_clipboard" 3156 | version = "0.2.4" 3157 | source = "registry+https://github.com/rust-lang/crates.io-index" 3158 | checksum = "015dd4474dc6aa96fe19aae3a24587a088bd90331dba5a5cc60fb3a180234c4d" 3159 | dependencies = [ 3160 | "clipboard-win", 3161 | "clipboard_macos", 3162 | "clipboard_wayland", 3163 | "clipboard_x11", 3164 | "raw-window-handle 0.3.4", 3165 | "thiserror", 3166 | ] 3167 | 3168 | [[package]] 3169 | name = "windows-sys" 3170 | version = "0.36.1" 3171 | source = "registry+https://github.com/rust-lang/crates.io-index" 3172 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 3173 | dependencies = [ 3174 | "windows_aarch64_msvc 0.36.1", 3175 | "windows_i686_gnu 0.36.1", 3176 | "windows_i686_msvc 0.36.1", 3177 | "windows_x86_64_gnu 0.36.1", 3178 | "windows_x86_64_msvc 0.36.1", 3179 | ] 3180 | 3181 | [[package]] 3182 | name = "windows-sys" 3183 | version = "0.42.0" 3184 | source = "registry+https://github.com/rust-lang/crates.io-index" 3185 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" 3186 | dependencies = [ 3187 | "windows_aarch64_gnullvm", 3188 | "windows_aarch64_msvc 0.42.1", 3189 | "windows_i686_gnu 0.42.1", 3190 | "windows_i686_msvc 0.42.1", 3191 | "windows_x86_64_gnu 0.42.1", 3192 | "windows_x86_64_gnullvm", 3193 | "windows_x86_64_msvc 0.42.1", 3194 | ] 3195 | 3196 | [[package]] 3197 | name = "windows-sys" 3198 | version = "0.45.0" 3199 | source = "registry+https://github.com/rust-lang/crates.io-index" 3200 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 3201 | dependencies = [ 3202 | "windows-targets", 3203 | ] 3204 | 3205 | [[package]] 3206 | name = "windows-targets" 3207 | version = "0.42.1" 3208 | source = "registry+https://github.com/rust-lang/crates.io-index" 3209 | checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" 3210 | dependencies = [ 3211 | "windows_aarch64_gnullvm", 3212 | "windows_aarch64_msvc 0.42.1", 3213 | "windows_i686_gnu 0.42.1", 3214 | "windows_i686_msvc 0.42.1", 3215 | "windows_x86_64_gnu 0.42.1", 3216 | "windows_x86_64_gnullvm", 3217 | "windows_x86_64_msvc 0.42.1", 3218 | ] 3219 | 3220 | [[package]] 3221 | name = "windows_aarch64_gnullvm" 3222 | version = "0.42.1" 3223 | source = "registry+https://github.com/rust-lang/crates.io-index" 3224 | checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" 3225 | 3226 | [[package]] 3227 | name = "windows_aarch64_msvc" 3228 | version = "0.36.1" 3229 | source = "registry+https://github.com/rust-lang/crates.io-index" 3230 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 3231 | 3232 | [[package]] 3233 | name = "windows_aarch64_msvc" 3234 | version = "0.42.1" 3235 | source = "registry+https://github.com/rust-lang/crates.io-index" 3236 | checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" 3237 | 3238 | [[package]] 3239 | name = "windows_i686_gnu" 3240 | version = "0.36.1" 3241 | source = "registry+https://github.com/rust-lang/crates.io-index" 3242 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 3243 | 3244 | [[package]] 3245 | name = "windows_i686_gnu" 3246 | version = "0.42.1" 3247 | source = "registry+https://github.com/rust-lang/crates.io-index" 3248 | checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" 3249 | 3250 | [[package]] 3251 | name = "windows_i686_msvc" 3252 | version = "0.36.1" 3253 | source = "registry+https://github.com/rust-lang/crates.io-index" 3254 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 3255 | 3256 | [[package]] 3257 | name = "windows_i686_msvc" 3258 | version = "0.42.1" 3259 | source = "registry+https://github.com/rust-lang/crates.io-index" 3260 | checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" 3261 | 3262 | [[package]] 3263 | name = "windows_x86_64_gnu" 3264 | version = "0.36.1" 3265 | source = "registry+https://github.com/rust-lang/crates.io-index" 3266 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 3267 | 3268 | [[package]] 3269 | name = "windows_x86_64_gnu" 3270 | version = "0.42.1" 3271 | source = "registry+https://github.com/rust-lang/crates.io-index" 3272 | checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" 3273 | 3274 | [[package]] 3275 | name = "windows_x86_64_gnullvm" 3276 | version = "0.42.1" 3277 | source = "registry+https://github.com/rust-lang/crates.io-index" 3278 | checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" 3279 | 3280 | [[package]] 3281 | name = "windows_x86_64_msvc" 3282 | version = "0.36.1" 3283 | source = "registry+https://github.com/rust-lang/crates.io-index" 3284 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 3285 | 3286 | [[package]] 3287 | name = "windows_x86_64_msvc" 3288 | version = "0.42.1" 3289 | source = "registry+https://github.com/rust-lang/crates.io-index" 3290 | checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" 3291 | 3292 | [[package]] 3293 | name = "winit" 3294 | version = "0.27.5" 3295 | source = "registry+https://github.com/rust-lang/crates.io-index" 3296 | checksum = "bb796d6fbd86b2fd896c9471e6f04d39d750076ebe5680a3958f00f5ab97657c" 3297 | dependencies = [ 3298 | "bitflags", 3299 | "cocoa", 3300 | "core-foundation", 3301 | "core-graphics", 3302 | "dispatch", 3303 | "instant", 3304 | "libc", 3305 | "log", 3306 | "mio", 3307 | "ndk", 3308 | "ndk-glue", 3309 | "objc", 3310 | "once_cell", 3311 | "parking_lot 0.12.1", 3312 | "percent-encoding", 3313 | "raw-window-handle 0.4.3", 3314 | "raw-window-handle 0.5.0", 3315 | "sctk-adwaita", 3316 | "smithay-client-toolkit", 3317 | "wasm-bindgen", 3318 | "wayland-client", 3319 | "wayland-protocols", 3320 | "web-sys", 3321 | "windows-sys 0.36.1", 3322 | "x11-dl", 3323 | ] 3324 | 3325 | [[package]] 3326 | name = "winnow" 3327 | version = "0.3.3" 3328 | source = "registry+https://github.com/rust-lang/crates.io-index" 3329 | checksum = "faf09497b8f8b5ac5d3bb4d05c0a99be20f26fd3d5f2db7b0716e946d5103658" 3330 | dependencies = [ 3331 | "memchr", 3332 | ] 3333 | 3334 | [[package]] 3335 | name = "wio" 3336 | version = "0.2.2" 3337 | source = "registry+https://github.com/rust-lang/crates.io-index" 3338 | checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" 3339 | dependencies = [ 3340 | "winapi", 3341 | ] 3342 | 3343 | [[package]] 3344 | name = "x11-dl" 3345 | version = "2.21.0" 3346 | source = "registry+https://github.com/rust-lang/crates.io-index" 3347 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 3348 | dependencies = [ 3349 | "libc", 3350 | "once_cell", 3351 | "pkg-config", 3352 | ] 3353 | 3354 | [[package]] 3355 | name = "x11rb" 3356 | version = "0.9.0" 3357 | source = "registry+https://github.com/rust-lang/crates.io-index" 3358 | checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a" 3359 | dependencies = [ 3360 | "gethostname", 3361 | "nix 0.22.3", 3362 | "winapi", 3363 | "winapi-wsapoll", 3364 | ] 3365 | 3366 | [[package]] 3367 | name = "xcursor" 3368 | version = "0.3.4" 3369 | source = "registry+https://github.com/rust-lang/crates.io-index" 3370 | checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" 3371 | dependencies = [ 3372 | "nom", 3373 | ] 3374 | 3375 | [[package]] 3376 | name = "xi-unicode" 3377 | version = "0.3.0" 3378 | source = "registry+https://github.com/rust-lang/crates.io-index" 3379 | checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" 3380 | 3381 | [[package]] 3382 | name = "xml-rs" 3383 | version = "0.8.4" 3384 | source = "registry+https://github.com/rust-lang/crates.io-index" 3385 | checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" 3386 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "framework_toolbox" 3 | version = "0.6.0" 4 | edition = "2021" 5 | 6 | default-run = "fwtb" 7 | 8 | [[bin]] 9 | name = "fwtb" 10 | path = "src/main.rs" 11 | 12 | [[bin]] 13 | name = "fwtbd" 14 | path = "src/bin/daemon.rs" 15 | 16 | [[bin]] 17 | name = "fwtb-ab" 18 | path = "src/bin/auto_backlight.rs" 19 | 20 | [dependencies] 21 | anyhow = "1.0.66" 22 | os_pipe = "1.1.1" 23 | serde = { version = "1.0.145", features = ["derive"] } 24 | toml_edit = { version = "0.15.0", features = ["easy"] } 25 | splines = "4.1.1" 26 | dirs = "4.0.0" 27 | iced = {version = "0.5.2", features = ["tokio"]} 28 | iced_native = "0.6.1" 29 | iced_lazy = "0.2.0" 30 | tokio = { version = "1.25.0", features = ["full", "tracing"] } 31 | console-subscriber = "0.1.8" 32 | tracing = "0.1.37" 33 | # brightness = {version = "0.5.0", features = ["blocking"]} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Framework Toolbox 2 | 3 | ## _see the new backlight daemon, available at [taotien/prescurve](https://github.com/taotien/prescurve)!_ 4 | 5 | ![image](https://user-images.githubusercontent.com/29749622/205031263-4783396d-02e0-4996-bc5a-693db567e131.png) 6 | 7 | Quick and dirty GUI for utilities of the Framework Laptop 8 | 9 | ## Installation 10 | 11 | Note: **I am new to rust, please look through the code and taste the spaghetti 12 | before installation** 13 | 14 | ```sh 15 | cargo install --git "https://github.com/taotien/framework_toolbox.git" 16 | ``` 17 | 18 | Add cargo's bin folder to your *desktop environment's* PATH. 19 | 20 | ```sh 21 | # do as root 22 | desktop-file-install fwtb.desktop 23 | ``` 24 | 25 | Copy `90-intel_backlight.udev` to `/etc/udev/rules.d/`. 26 | 27 | Add your account to the `video` group, then run 28 | 29 | ```sh 30 | # do as root 31 | udevadm control --reload 32 | ``` 33 | 34 | ### If you want just the auto-brightness 35 | 36 | Clone the repo 37 | 38 | ```sh 39 | cargo build --release fwtb-ab 40 | ``` 41 | 42 | Copy the binary from ./target/{arch}/release 43 | 44 | ## Removal 45 | 46 | `cargo uninstall fwtb` should do the trick. You'll have to find where your distro saves `.desktop` files to get rid of the shortcut. 47 | 48 | ## Dependencies 49 | 50 | - rust 51 | - ectool (DHowett/fw-ectool) 52 | - Polkit/pkexec 53 | 54 | ## Planned Features 55 | 56 | - Status monitor using LEDs; battery, temperature, cpu, etc. 57 | - Battery oneshot mode 58 | - Charge rate limiter 59 | - Fan curves 60 | 61 | ## TODO/Need help 62 | 63 | - kb auto 64 | - bench autobright cpu consumption 65 | - figure out why leds stay on after shutdown 66 | - check if ectool needs specific options on other distros/allow users to manually change arguments 67 | - cleanup unecessary unwraps and expects 68 | - Windows support 69 | - package binaries 70 | - text input values for sliders 71 | - tray icon => waiting for iced 72 | - use dbus for brightness stuff? 73 | - somehow capture F7/F8 presses to jank re-enable manual brightness while using 74 | ambient light sensor 75 | - keyboard remapping 76 | - find better way of communication with "daemon" 77 | -------------------------------------------------------------------------------- /fwtb.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | X-Desktop-File-Install-Version=0.26 3 | Type=Application 4 | Name=Framework Toolbox 5 | Comment=Framework laptop utilites: charge limit, fans, etc. 6 | Exec=fwtb 7 | Categories=System 8 | -------------------------------------------------------------------------------- /src/bin/auto_backlight.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | use splines::{Interpolation, Key, Spline}; 3 | use tokio::{ 4 | fs::{read_to_string, write}, 5 | join, spawn, 6 | task::JoinHandle, 7 | time::sleep, 8 | }; 9 | 10 | use std::{ 11 | collections::VecDeque, 12 | sync::{atomic::AtomicU32, atomic::Ordering, Arc}, 13 | time::Duration, 14 | }; 15 | 16 | const SAMPLE_SIZE: u32 = 100; 17 | const SAMPLE_INTERVAL_MS: u64 = 100; 18 | const FPS: u32 = 60; 19 | const TPF: u64 = 1000 / FPS as u64; 20 | // const HISTERESIS: u32 = 5000; 21 | 22 | #[tokio::main] 23 | async fn main() -> Result<()> { 24 | #[cfg(tokio_unstable)] 25 | console_subscriber::init(); 26 | 27 | let mut backlight = Backlight::new().await?; 28 | let mut sensor = Sensor::new().await?; 29 | let average = Arc::new(AtomicU32::new(Sensor::get().await?)); 30 | 31 | let avg = average.clone(); 32 | let sample: JoinHandle> = spawn(async move { 33 | loop { 34 | sensor.sample().await?; 35 | avg.store( 36 | sensor.samples.iter().sum::() / SAMPLE_SIZE, 37 | Ordering::Relaxed, 38 | ); 39 | sleep(Duration::from_millis(SAMPLE_INTERVAL_MS)).await; 40 | } 41 | }); 42 | 43 | let avg = average.clone(); 44 | let adjust_retain: JoinHandle> = spawn(async move { 45 | loop { 46 | if !backlight.changed().await? { 47 | let d; 48 | if Backlight::get().await? != backlight.target { 49 | backlight.adjust().await?; 50 | d = Duration::from_millis(TPF); 51 | } else { 52 | d = Duration::from_millis(SAMPLE_INTERVAL_MS * 10); 53 | } 54 | backlight.prepare(avg.load(Ordering::Relaxed)).await?; 55 | sleep(d).await; 56 | } else { 57 | backlight.retain(avg.load(Ordering::Relaxed)).await?; 58 | } 59 | } 60 | }); 61 | 62 | let _ = join![sample, adjust_retain]; 63 | unreachable!() 64 | } 65 | 66 | struct Sensor { 67 | samples: VecDeque, 68 | } 69 | 70 | impl Sensor { 71 | async fn sample(&mut self) -> Result<()> { 72 | self.samples.pop_front(); 73 | self.samples.push_back(Self::get().await?); 74 | Ok(()) 75 | } 76 | 77 | async fn get() -> Result { 78 | Ok( 79 | read_to_string("/sys/bus/iio/devices/iio:device0/in_illuminance_raw") 80 | .await? 81 | .trim() 82 | .parse()?, 83 | ) 84 | } 85 | async fn new() -> Result { 86 | let samples = VecDeque::from([Self::get().await?; SAMPLE_SIZE as usize]); 87 | Ok(Self { samples }) 88 | } 89 | } 90 | 91 | struct Backlight { 92 | requested: u32, 93 | target: u32, 94 | diff: i32, 95 | step: i32, 96 | curve: Spline, 97 | } 98 | 99 | impl Backlight { 100 | async fn prepare(&mut self, s: u32) -> Result<()> { 101 | self.target = self.curve.clamped_sample(s as f32).unwrap() as u32; 102 | self.diff = self.target as i32 - Self::get().await? as i32; 103 | self.step = self.diff / FPS as i32; 104 | Ok(()) 105 | } 106 | 107 | async fn adjust(&mut self) -> Result<()> { 108 | self.diff = self.target as i32 - Self::get().await? as i32; 109 | if self.step == 0 { 110 | self.step = if self.diff > 0 { 1 } else { -1 } 111 | } 112 | let v = Self::get().await? as i32 + self.step; 113 | if v < 0 { 114 | return Ok(()); 115 | } 116 | self.set(v as u32).await?; 117 | Ok(()) 118 | } 119 | 120 | async fn retain(&mut self, s: u32) -> Result<()> { 121 | sleep(Duration::from_secs(5)).await; 122 | let current = Self::get().await?; 123 | 124 | if current == 0 { 125 | return Ok(()); 126 | } 127 | 128 | self.requested = current; 129 | self.curve.monotonic_add(s as f32, current as f32); 130 | self.prepare(s).await?; 131 | Ok(()) 132 | } 133 | 134 | async fn changed(&self) -> Result { 135 | Ok(Self::get().await? as i32 - self.requested as i32 != 0) 136 | } 137 | 138 | async fn get() -> Result { 139 | Ok( 140 | read_to_string("/sys/class/backlight/intel_backlight/brightness") 141 | .await? 142 | .trim() 143 | .parse()?, 144 | ) 145 | } 146 | 147 | async fn set(&mut self, val: u32) -> Result<()> { 148 | write( 149 | "/sys/class/backlight/intel_backlight/brightness", 150 | val.to_string(), 151 | ) 152 | .await?; 153 | self.requested = val; 154 | Ok(()) 155 | } 156 | 157 | async fn max() -> Result { 158 | Ok( 159 | read_to_string("/sys/class/backlight/intel_backlight/max_brightness") 160 | .await? 161 | .trim() 162 | .parse()?, 163 | ) 164 | } 165 | async fn new() -> Result { 166 | let current = Self::get().await?; 167 | let requested = current; 168 | let target = current; 169 | let diff = 0; 170 | let step = 0; 171 | let floor = Key::new(0., 1., Interpolation::default()); 172 | let ceil = Key::new(3355., Self::max().await? as f32, Interpolation::default()); 173 | let curve = Spline::from_vec(vec![floor, ceil]); 174 | Ok(Self { 175 | requested, 176 | target, 177 | diff, 178 | step, 179 | curve, 180 | }) 181 | } 182 | } 183 | 184 | trait Monotonic { 185 | fn monotonic_add(&mut self, k: T, v: U); 186 | } 187 | 188 | impl Monotonic for Spline { 189 | fn monotonic_add(&mut self, k: f32, v: f32) { 190 | // check if key exists and update or add new key 191 | if let Some(key) = self.keys().iter().position(|&key| key.t == k) { 192 | *self.get_mut(key).unwrap().value = v; 193 | } else { 194 | let k = Key::new(k, v, Interpolation::default()); 195 | self.add(k); 196 | } 197 | 198 | // make keys with values in the wrong direction consistent 199 | if let Some(idx) = self.keys().iter().position(|&key| { 200 | (key.t != 0. && key.t != 3355.) 201 | && ((key.value > v && key.t < k) || (key.value < v && key.t > k)) 202 | }) { 203 | *self.get_mut(idx).unwrap().value = v; 204 | } 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /src/bin/daemon.rs: -------------------------------------------------------------------------------- 1 | use std::time::Duration; 2 | 3 | use anyhow::Result; 4 | use tokio::{ 5 | io::{self, AsyncBufReadExt, BufReader}, 6 | time::{sleep, Instant}, 7 | }; 8 | 9 | #[tokio::main] 10 | async fn main() -> Result<()> { 11 | let stdin = io::stdin(); 12 | let reader = BufReader::new(stdin); 13 | let mut input = reader.lines(); 14 | 15 | let mut lastbatt = String::new(); 16 | 17 | let minute = Duration::from_secs(5); 18 | let mut minago = Instant::now(); 19 | 20 | loop { 21 | tokio::select! { 22 | _ = sleep(minute) => { 23 | // likely slept/hiber if this diffs too much 24 | if minago.elapsed() >= Duration::from_secs(10) { 25 | ectool(&lastbatt); 26 | } 27 | minago = Instant::now(); 28 | } 29 | 30 | line = input.next_line() => { 31 | let line = line?; 32 | if let Some(l) = line { 33 | // TODO remove this hack 34 | if l.contains("exit") { 35 | std::process::exit(0); 36 | } else { 37 | ectool(&l); 38 | if l.contains("fwchargelimit") { 39 | lastbatt = l; 40 | }} 41 | } 42 | } 43 | } 44 | } 45 | } 46 | 47 | fn ectool(s: &str) { 48 | let a = s.split_whitespace(); 49 | std::process::Command::new("ectool") 50 | .args(a) 51 | .output() 52 | .unwrap(); 53 | } 54 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::fs::{read_to_string, File}; 2 | use std::io::Write; 3 | use std::process::{Child, ChildStdin, Command, Stdio}; 4 | 5 | use iced::widget::{ 6 | button, column, container, horizontal_rule, horizontal_space, pick_list, row, slider, text, 7 | toggler, 8 | }; 9 | use iced::{ 10 | alignment, executor, Alignment, Application, Color, Element, Length, Settings, Subscription, 11 | Theme, 12 | }; 13 | 14 | use iced_native::{window, Event}; 15 | 16 | use serde::{Deserialize, Serialize}; 17 | 18 | pub fn main() -> iced::Result { 19 | Toolbox::run(Settings { 20 | exit_on_close_request: false, 21 | window: iced::window::Settings { 22 | size: (400, 500), 23 | resizable: false, 24 | ..iced::window::Settings::default() 25 | }, 26 | ..Settings::default() 27 | }) 28 | } 29 | 30 | #[derive(Deserialize, Serialize)] 31 | struct Toolbox { 32 | battery_limit: u8, 33 | fan_duty: u8, 34 | fan_auto: bool, 35 | backlight_auto: bool, 36 | led_power: Option, 37 | led_left: Option, 38 | led_right: Option, 39 | 40 | #[serde(skip)] 41 | backlight_daemon: Option, 42 | #[serde(skip)] 43 | daemon: Option, 44 | #[serde(skip)] 45 | should_exit: bool, 46 | } 47 | 48 | impl Default for Toolbox { 49 | fn default() -> Self { 50 | Toolbox { 51 | battery_limit: 69, 52 | fan_duty: 42, 53 | fan_auto: true, 54 | backlight_auto: true, 55 | led_power: Some(LedColor::default()), 56 | led_left: Some(LedColor::default()), 57 | led_right: Some(LedColor::default()), 58 | backlight_daemon: None, 59 | daemon: None, 60 | should_exit: false, 61 | } 62 | } 63 | } 64 | 65 | #[derive(Clone, Debug)] 66 | pub enum Message { 67 | Event(Event), 68 | BatteryLimitChanged(u8), 69 | BatteryOneShot, 70 | FanDutyChanged(u8), 71 | FanAutoToggled(bool), 72 | BacklightAutoToggled(bool), 73 | LEDPowerSelected(LedColor), 74 | LEDLeftSelected(LedColor), 75 | LEDRightSelected(LedColor), 76 | // Apply, 77 | Save, 78 | } 79 | 80 | impl Application for Toolbox { 81 | type Message = Message; 82 | type Executor = executor::Default; 83 | type Theme = Theme; 84 | type Flags = (); 85 | 86 | fn title(&self) -> String { 87 | String::from("Framework Toolbox") 88 | } 89 | 90 | fn theme(&self) -> Theme { 91 | Theme::Dark 92 | } 93 | 94 | fn should_exit(&self) -> bool { 95 | self.should_exit 96 | } 97 | 98 | fn new(_flags: ()) -> (Toolbox, iced::Command) { 99 | // elevate daemon at start rather than wait for user interaction 100 | let mut daemon = Command::new("pkexec") 101 | .arg("fwtbd") 102 | .stdin(Stdio::piped()) 103 | .stdout(Stdio::null()) 104 | .stderr(Stdio::null()) 105 | .spawn() 106 | .expect("failed to open daemon"); 107 | // hold onto the stdin to communicate and keep process alive 108 | let daemon_stdin = daemon.stdin.take().expect("couldn't take stdin of daemon"); 109 | 110 | // check for existing config, otherwise default 111 | let mut tb: Toolbox; 112 | let mut conf = dirs::config_dir().unwrap(); 113 | conf.push("fwtb.toml"); 114 | let mut from_conf = false; 115 | match read_to_string(conf) { 116 | Ok(s) => { 117 | tb = toml_edit::easy::from_str(&s).unwrap_or_default(); 118 | from_conf = true; 119 | } 120 | Err(_) => { 121 | tb = Toolbox::default(); 122 | } 123 | } 124 | tb.daemon = Some(daemon_stdin); 125 | 126 | if from_conf { 127 | daemon_write(tb.daemon.as_ref(), "fwchargelimit", tb.battery_limit); 128 | if tb.fan_auto { 129 | daemon_write(tb.daemon.as_ref(), "autofanctrl", ""); 130 | } else { 131 | daemon_write(tb.daemon.as_ref(), "fanduty", tb.fan_duty); 132 | } 133 | if let Some(value) = tb.led_power { 134 | daemon_write(tb.daemon.as_ref(), "led power", value); 135 | } 136 | if let Some(value) = tb.led_left { 137 | daemon_write(tb.daemon.as_ref(), "led left", value); 138 | } 139 | if let Some(value) = tb.led_right { 140 | daemon_write(tb.daemon.as_ref(), "led right", value); 141 | } 142 | } 143 | 144 | if tb.backlight_auto { 145 | tb.backlight_daemon = Some( 146 | Command::new("fwtb-ab") 147 | .spawn() 148 | .expect("couldn't start autobacklight"), 149 | ) 150 | } 151 | 152 | (tb, iced::Command::none()) 153 | } 154 | 155 | // TODO remove this 156 | fn subscription(&self) -> Subscription { 157 | let subs = vec![ 158 | // dunno why no closure here 159 | iced_native::subscription::events().map(Message::Event), 160 | ]; 161 | iced_native::Subscription::batch(subs) 162 | } 163 | 164 | fn update(&mut self, message: Self::Message) -> iced::Command { 165 | match message { 166 | Message::BatteryLimitChanged(value) => { 167 | self.battery_limit = value; 168 | daemon_write(self.daemon.as_ref(), "fwchargelimit", value); 169 | } 170 | Message::BatteryOneShot => { 171 | daemon_write(self.daemon.as_ref(), "fwchargelimit", "100 once"); 172 | } 173 | Message::FanDutyChanged(value) => { 174 | self.fan_duty = value; 175 | self.fan_auto = false; 176 | daemon_write(self.daemon.as_ref(), "fanduty", value); 177 | } 178 | Message::FanAutoToggled(value) => { 179 | self.fan_auto = value; 180 | if !value { 181 | daemon_write(self.daemon.as_ref(), "fanduty", self.fan_duty); 182 | } else { 183 | daemon_write(self.daemon.as_ref(), "autofanctrl", ""); 184 | } 185 | } 186 | Message::BacklightAutoToggled(value) => { 187 | self.backlight_auto = value; 188 | if self.backlight_auto { 189 | self.backlight_daemon = Some( 190 | Command::new("fwtb-ab") 191 | .spawn() 192 | .expect("couldn't start autobacklight"), 193 | ) 194 | } else if let Some(c) = &mut self.backlight_daemon { 195 | c.kill().expect("couldn't kill autobacklight"); 196 | } 197 | } 198 | Message::LEDPowerSelected(value) => { 199 | self.led_power = Some(value); 200 | daemon_write(self.daemon.as_ref(), "led power", value); 201 | } 202 | Message::LEDLeftSelected(value) => { 203 | self.led_left = Some(value); 204 | daemon_write(self.daemon.as_ref(), "led left", value); 205 | } 206 | Message::LEDRightSelected(value) => { 207 | self.led_right = Some(value); 208 | daemon_write(self.daemon.as_ref(), "led right", value); 209 | } 210 | Message::Save => { 211 | let toml = toml_edit::easy::to_string(&self).unwrap(); 212 | let mut conf = dirs::config_dir().unwrap(); 213 | conf.push("fwtb.toml"); 214 | let mut f = File::create(conf).unwrap(); 215 | f.write_all("# Generated file, DO NOT EDIT!\n".as_bytes()) 216 | .unwrap(); 217 | f.write_all(toml.as_bytes()).unwrap(); 218 | } 219 | Message::Event(event) => { 220 | // TODO 221 | // fwtbd kills itself when stdin is dropped 222 | // perhaps autobacklight should do the same so there's no resource leaks 223 | // or find other non-hacky workaround 224 | if let Event::Window(window::Event::CloseRequested) = event { 225 | if let Some(c) = &mut self.backlight_daemon { 226 | c.kill().expect("couldn't kill autobacklight"); 227 | } 228 | if let Some(c) = &mut self.daemon { 229 | // TODO temporary hack 230 | daemon_write(self.daemon.as_ref(), "exit", ""); 231 | } 232 | self.should_exit = true; 233 | } 234 | } 235 | }; 236 | iced::Command::none() 237 | } 238 | 239 | fn view(&self) -> iced::Element { 240 | let title = text("Framework Toolbox") 241 | .width(Length::Fill) 242 | .size(42) 243 | .style(Color::from([0.5, 0.5, 0.5])) 244 | .horizontal_alignment(alignment::Horizontal::Center); 245 | 246 | let space = 10; 247 | 248 | // Battery stuff 249 | // 250 | let battery_limit_slider = 251 | slider(40..=100, self.battery_limit, Message::BatteryLimitChanged); 252 | 253 | let battery_limit_row = row![ 254 | text("40%") 255 | .width(Length::Fill) 256 | .horizontal_alignment(alignment::Horizontal::Right), 257 | battery_limit_slider.width(Length::FillPortion(5)), 258 | text("100%") 259 | .width(Length::Fill) 260 | .horizontal_alignment(alignment::Horizontal::Left), 261 | ] 262 | .spacing(10); 263 | 264 | let battery_oneshot_row = row![ 265 | text("Charge to 100% until unplugged:") 266 | .width(Length::Fill) 267 | .horizontal_alignment(alignment::Horizontal::Right), 268 | button("100%").on_press(Message::BatteryOneShot), 269 | ] 270 | .align_items(Alignment::Center) 271 | .spacing(space) 272 | .padding(space); 273 | 274 | let battery_controls = column![ 275 | text(format!("Battery Limit: {}%", self.battery_limit)), 276 | battery_limit_row, 277 | battery_oneshot_row 278 | ] 279 | .align_items(Alignment::Center) 280 | .spacing(space); 281 | 282 | // Fan stuff 283 | // 284 | let fan_duty_slider = slider(0..=100, self.fan_duty, Message::FanDutyChanged); 285 | 286 | let fan_duty_row = row![ 287 | text("0%") 288 | .width(Length::Fill) 289 | .horizontal_alignment(alignment::Horizontal::Right), 290 | fan_duty_slider.width(Length::FillPortion(5)), 291 | text("100%") 292 | .width(Length::Fill) 293 | .horizontal_alignment(alignment::Horizontal::Left) 294 | ] 295 | .spacing(space); 296 | 297 | let fan_auto_toggler = 298 | toggler(String::from("Auto"), self.fan_auto, Message::FanAutoToggled) 299 | .text_alignment(alignment::Horizontal::Right) 300 | .spacing(space); 301 | 302 | let fan_controls = column![ 303 | text(format!("Fan Duty: {}", { 304 | if self.fan_auto { 305 | "Auto".to_string() 306 | } else { 307 | format!("{}%", self.fan_duty) 308 | } 309 | })), 310 | fan_duty_row, 311 | fan_auto_toggler 312 | ] 313 | .align_items(Alignment::Center) 314 | .spacing(space); 315 | 316 | // Backlight stuff 317 | // 318 | let backlight_auto_toggler = toggler( 319 | String::from("Auto"), 320 | self.backlight_auto, 321 | Message::BacklightAutoToggled, 322 | ) 323 | .text_alignment(alignment::Horizontal::Right) 324 | .spacing(space); 325 | 326 | let backlight_controls = column![ 327 | text(format!("Backlight: {}", { 328 | if self.backlight_auto { 329 | "Auto".to_string() 330 | } else { 331 | "Manual".to_string() 332 | } 333 | })), 334 | backlight_auto_toggler, 335 | ] 336 | .align_items(Alignment::Center) 337 | .spacing(space); 338 | 339 | // LED space 340 | // 341 | let led_left_picker = 342 | pick_list(&LedColor::ALL[..], self.led_left, Message::LEDLeftSelected); 343 | 344 | let led_power_picker = pick_list( 345 | &LedColor::ALL[..], 346 | self.led_power, 347 | Message::LEDPowerSelected, 348 | ); 349 | 350 | let led_right_picker = pick_list( 351 | &LedColor::ALL[..], 352 | self.led_right, 353 | Message::LEDRightSelected, 354 | ); 355 | 356 | let led_row = row![ 357 | column![text("Left"), led_left_picker,] 358 | .width(Length::Fill) 359 | .align_items(Alignment::Center) 360 | .spacing(space), 361 | column![text("Power"), led_power_picker,] 362 | .width(Length::Fill) 363 | .align_items(Alignment::Center) 364 | .spacing(space), 365 | column![text("Right"), led_right_picker,] 366 | .align_items(Alignment::Center) 367 | .width(Length::Fill) 368 | .spacing(space), 369 | ] 370 | .spacing(space); 371 | 372 | let led_controls = column![text("LED Colors"), led_row,] 373 | .align_items(Alignment::Center) 374 | .spacing(space); 375 | 376 | // Everything stuff 377 | // 378 | let content: Element<_> = column![ 379 | title, 380 | horizontal_rule(5), 381 | horizontal_space(Length::Fill), 382 | battery_controls, 383 | fan_controls, 384 | backlight_controls, 385 | led_controls, 386 | button("Save").on_press(Message::Save), 387 | ] 388 | .spacing(space) 389 | .padding(space) 390 | .align_items(Alignment::Center) 391 | .into(); 392 | 393 | // container(content.explain(Color::BLACK)).center_x().into() 394 | container(content).center_x().into() 395 | } 396 | } 397 | 398 | fn daemon_write(daemon: Option<&ChildStdin>, target: &str, value: T) 399 | where 400 | T: std::fmt::Display, 401 | { 402 | writeln!(daemon.unwrap(), "{} {}", target, value).expect("couldn't write to daemon!"); 403 | } 404 | 405 | #[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)] 406 | pub enum LedColor { 407 | Auto, 408 | White, 409 | Red, 410 | Green, 411 | Blue, 412 | Yellow, 413 | Amber, 414 | Off, 415 | } 416 | 417 | impl Default for LedColor { 418 | fn default() -> Self { 419 | LedColor::Auto 420 | } 421 | } 422 | 423 | impl LedColor { 424 | const ALL: [LedColor; 8] = [ 425 | LedColor::Auto, 426 | LedColor::White, 427 | LedColor::Red, 428 | LedColor::Green, 429 | LedColor::Blue, 430 | LedColor::Yellow, 431 | LedColor::Amber, 432 | LedColor::Off, 433 | ]; 434 | } 435 | 436 | impl std::fmt::Display for LedColor { 437 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 438 | write!( 439 | f, 440 | "{}", 441 | match self { 442 | LedColor::Auto => "Auto", 443 | LedColor::White => "White", 444 | LedColor::Red => "Red", 445 | LedColor::Green => "Green", 446 | LedColor::Blue => "Blue", 447 | LedColor::Yellow => "Yellow", 448 | LedColor::Amber => "Amber", 449 | LedColor::Off => "Off", 450 | } 451 | ) 452 | } 453 | } 454 | --------------------------------------------------------------------------------