this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

๐Ÿ™ƒ Foundation for fennec-tricks, added the ability to download and install tar and exe files.

Rouffy d9310faa

+1211
+1
.envrc
··· 1 + use flake
+3
.gitignore
··· 1 + /target 2 + pfx/ 3 + .direnv/
+692
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "aho-corasick" 7 + version = "1.1.3" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 10 + dependencies = [ 11 + "memchr", 12 + ] 13 + 14 + [[package]] 15 + name = "android-tzdata" 16 + version = "0.1.1" 17 + source = "registry+https://github.com/rust-lang/crates.io-index" 18 + checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 19 + 20 + [[package]] 21 + name = "android_system_properties" 22 + version = "0.1.5" 23 + source = "registry+https://github.com/rust-lang/crates.io-index" 24 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 25 + dependencies = [ 26 + "libc", 27 + ] 28 + 29 + [[package]] 30 + name = "anstyle" 31 + version = "1.0.11" 32 + source = "registry+https://github.com/rust-lang/crates.io-index" 33 + checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" 34 + 35 + [[package]] 36 + name = "autocfg" 37 + version = "1.5.0" 38 + source = "registry+https://github.com/rust-lang/crates.io-index" 39 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 40 + 41 + [[package]] 42 + name = "bumpalo" 43 + version = "3.19.0" 44 + source = "registry+https://github.com/rust-lang/crates.io-index" 45 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 46 + 47 + [[package]] 48 + name = "byteorder" 49 + version = "1.5.0" 50 + source = "registry+https://github.com/rust-lang/crates.io-index" 51 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 52 + 53 + [[package]] 54 + name = "cc" 55 + version = "1.2.30" 56 + source = "registry+https://github.com/rust-lang/crates.io-index" 57 + checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" 58 + dependencies = [ 59 + "shlex", 60 + ] 61 + 62 + [[package]] 63 + name = "cfg-if" 64 + version = "1.0.1" 65 + source = "registry+https://github.com/rust-lang/crates.io-index" 66 + checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" 67 + 68 + [[package]] 69 + name = "chrono" 70 + version = "0.4.41" 71 + source = "registry+https://github.com/rust-lang/crates.io-index" 72 + checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 73 + dependencies = [ 74 + "android-tzdata", 75 + "iana-time-zone", 76 + "js-sys", 77 + "num-traits", 78 + "wasm-bindgen", 79 + "windows-link", 80 + ] 81 + 82 + [[package]] 83 + name = "clap" 84 + version = "4.5.42" 85 + source = "registry+https://github.com/rust-lang/crates.io-index" 86 + checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882" 87 + dependencies = [ 88 + "clap_builder", 89 + "clap_derive", 90 + ] 91 + 92 + [[package]] 93 + name = "clap_builder" 94 + version = "4.5.42" 95 + source = "registry+https://github.com/rust-lang/crates.io-index" 96 + checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966" 97 + dependencies = [ 98 + "anstyle", 99 + "clap_lex", 100 + ] 101 + 102 + [[package]] 103 + name = "clap_derive" 104 + version = "4.5.41" 105 + source = "registry+https://github.com/rust-lang/crates.io-index" 106 + checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" 107 + dependencies = [ 108 + "heck", 109 + "proc-macro2", 110 + "quote", 111 + "syn", 112 + ] 113 + 114 + [[package]] 115 + name = "clap_lex" 116 + version = "0.7.5" 117 + source = "registry+https://github.com/rust-lang/crates.io-index" 118 + checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" 119 + 120 + [[package]] 121 + name = "core-foundation-sys" 122 + version = "0.8.7" 123 + source = "registry+https://github.com/rust-lang/crates.io-index" 124 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 125 + 126 + [[package]] 127 + name = "fennec-tricks" 128 + version = "0.1.0" 129 + dependencies = [ 130 + "chrono", 131 + "clap", 132 + "minreq", 133 + "regashii", 134 + "serde", 135 + "toml", 136 + ] 137 + 138 + [[package]] 139 + name = "getrandom" 140 + version = "0.2.16" 141 + source = "registry+https://github.com/rust-lang/crates.io-index" 142 + checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 143 + dependencies = [ 144 + "cfg-if", 145 + "libc", 146 + "wasi", 147 + ] 148 + 149 + [[package]] 150 + name = "heck" 151 + version = "0.5.0" 152 + source = "registry+https://github.com/rust-lang/crates.io-index" 153 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 154 + 155 + [[package]] 156 + name = "iana-time-zone" 157 + version = "0.1.63" 158 + source = "registry+https://github.com/rust-lang/crates.io-index" 159 + checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 160 + dependencies = [ 161 + "android_system_properties", 162 + "core-foundation-sys", 163 + "iana-time-zone-haiku", 164 + "js-sys", 165 + "log", 166 + "wasm-bindgen", 167 + "windows-core", 168 + ] 169 + 170 + [[package]] 171 + name = "iana-time-zone-haiku" 172 + version = "0.1.2" 173 + source = "registry+https://github.com/rust-lang/crates.io-index" 174 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 175 + dependencies = [ 176 + "cc", 177 + ] 178 + 179 + [[package]] 180 + name = "js-sys" 181 + version = "0.3.77" 182 + source = "registry+https://github.com/rust-lang/crates.io-index" 183 + checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 184 + dependencies = [ 185 + "once_cell", 186 + "wasm-bindgen", 187 + ] 188 + 189 + [[package]] 190 + name = "libc" 191 + version = "0.2.174" 192 + source = "registry+https://github.com/rust-lang/crates.io-index" 193 + checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 194 + 195 + [[package]] 196 + name = "log" 197 + version = "0.4.27" 198 + source = "registry+https://github.com/rust-lang/crates.io-index" 199 + checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 200 + 201 + [[package]] 202 + name = "memchr" 203 + version = "2.7.5" 204 + source = "registry+https://github.com/rust-lang/crates.io-index" 205 + checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 206 + 207 + [[package]] 208 + name = "minimal-lexical" 209 + version = "0.2.1" 210 + source = "registry+https://github.com/rust-lang/crates.io-index" 211 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 212 + 213 + [[package]] 214 + name = "minreq" 215 + version = "2.14.0" 216 + source = "registry+https://github.com/rust-lang/crates.io-index" 217 + checksum = "84885312a86831bff4a3cb04a1e54a3f698407e3274c83249313f194d3e0b678" 218 + dependencies = [ 219 + "log", 220 + "rustls", 221 + "rustls-webpki", 222 + "urlencoding", 223 + "webpki-roots", 224 + ] 225 + 226 + [[package]] 227 + name = "nom" 228 + version = "7.1.3" 229 + source = "registry+https://github.com/rust-lang/crates.io-index" 230 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 231 + dependencies = [ 232 + "memchr", 233 + "minimal-lexical", 234 + ] 235 + 236 + [[package]] 237 + name = "num-traits" 238 + version = "0.2.19" 239 + source = "registry+https://github.com/rust-lang/crates.io-index" 240 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 241 + dependencies = [ 242 + "autocfg", 243 + ] 244 + 245 + [[package]] 246 + name = "once_cell" 247 + version = "1.21.3" 248 + source = "registry+https://github.com/rust-lang/crates.io-index" 249 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 250 + 251 + [[package]] 252 + name = "proc-macro2" 253 + version = "1.0.95" 254 + source = "registry+https://github.com/rust-lang/crates.io-index" 255 + checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 256 + dependencies = [ 257 + "unicode-ident", 258 + ] 259 + 260 + [[package]] 261 + name = "quote" 262 + version = "1.0.40" 263 + source = "registry+https://github.com/rust-lang/crates.io-index" 264 + checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 265 + dependencies = [ 266 + "proc-macro2", 267 + ] 268 + 269 + [[package]] 270 + name = "regashii" 271 + version = "0.4.0" 272 + source = "registry+https://github.com/rust-lang/crates.io-index" 273 + checksum = "6e09a62e9c71f2e75cfce6dfdf007c2a40168d5bd762d1f7ef6ed60144f37f67" 274 + dependencies = [ 275 + "nom", 276 + "regex", 277 + "thiserror", 278 + "utf16string", 279 + ] 280 + 281 + [[package]] 282 + name = "regex" 283 + version = "1.11.1" 284 + source = "registry+https://github.com/rust-lang/crates.io-index" 285 + checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 286 + dependencies = [ 287 + "aho-corasick", 288 + "memchr", 289 + "regex-automata", 290 + "regex-syntax", 291 + ] 292 + 293 + [[package]] 294 + name = "regex-automata" 295 + version = "0.4.9" 296 + source = "registry+https://github.com/rust-lang/crates.io-index" 297 + checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 298 + dependencies = [ 299 + "aho-corasick", 300 + "memchr", 301 + "regex-syntax", 302 + ] 303 + 304 + [[package]] 305 + name = "regex-syntax" 306 + version = "0.8.5" 307 + source = "registry+https://github.com/rust-lang/crates.io-index" 308 + checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 309 + 310 + [[package]] 311 + name = "ring" 312 + version = "0.17.14" 313 + source = "registry+https://github.com/rust-lang/crates.io-index" 314 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 315 + dependencies = [ 316 + "cc", 317 + "cfg-if", 318 + "getrandom", 319 + "libc", 320 + "untrusted", 321 + "windows-sys", 322 + ] 323 + 324 + [[package]] 325 + name = "rustls" 326 + version = "0.21.12" 327 + source = "registry+https://github.com/rust-lang/crates.io-index" 328 + checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" 329 + dependencies = [ 330 + "log", 331 + "ring", 332 + "rustls-webpki", 333 + "sct", 334 + ] 335 + 336 + [[package]] 337 + name = "rustls-webpki" 338 + version = "0.101.7" 339 + source = "registry+https://github.com/rust-lang/crates.io-index" 340 + checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" 341 + dependencies = [ 342 + "ring", 343 + "untrusted", 344 + ] 345 + 346 + [[package]] 347 + name = "rustversion" 348 + version = "1.0.21" 349 + source = "registry+https://github.com/rust-lang/crates.io-index" 350 + checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 351 + 352 + [[package]] 353 + name = "sct" 354 + version = "0.7.1" 355 + source = "registry+https://github.com/rust-lang/crates.io-index" 356 + checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" 357 + dependencies = [ 358 + "ring", 359 + "untrusted", 360 + ] 361 + 362 + [[package]] 363 + name = "serde" 364 + version = "1.0.219" 365 + source = "registry+https://github.com/rust-lang/crates.io-index" 366 + checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 367 + dependencies = [ 368 + "serde_derive", 369 + ] 370 + 371 + [[package]] 372 + name = "serde_derive" 373 + version = "1.0.219" 374 + source = "registry+https://github.com/rust-lang/crates.io-index" 375 + checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 376 + dependencies = [ 377 + "proc-macro2", 378 + "quote", 379 + "syn", 380 + ] 381 + 382 + [[package]] 383 + name = "serde_spanned" 384 + version = "1.0.0" 385 + source = "registry+https://github.com/rust-lang/crates.io-index" 386 + checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" 387 + dependencies = [ 388 + "serde", 389 + ] 390 + 391 + [[package]] 392 + name = "shlex" 393 + version = "1.3.0" 394 + source = "registry+https://github.com/rust-lang/crates.io-index" 395 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 396 + 397 + [[package]] 398 + name = "syn" 399 + version = "2.0.104" 400 + source = "registry+https://github.com/rust-lang/crates.io-index" 401 + checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" 402 + dependencies = [ 403 + "proc-macro2", 404 + "quote", 405 + "unicode-ident", 406 + ] 407 + 408 + [[package]] 409 + name = "thiserror" 410 + version = "1.0.69" 411 + source = "registry+https://github.com/rust-lang/crates.io-index" 412 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 413 + dependencies = [ 414 + "thiserror-impl", 415 + ] 416 + 417 + [[package]] 418 + name = "thiserror-impl" 419 + version = "1.0.69" 420 + source = "registry+https://github.com/rust-lang/crates.io-index" 421 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 422 + dependencies = [ 423 + "proc-macro2", 424 + "quote", 425 + "syn", 426 + ] 427 + 428 + [[package]] 429 + name = "toml" 430 + version = "0.9.2" 431 + source = "registry+https://github.com/rust-lang/crates.io-index" 432 + checksum = "ed0aee96c12fa71097902e0bb061a5e1ebd766a6636bb605ba401c45c1650eac" 433 + dependencies = [ 434 + "serde", 435 + "serde_spanned", 436 + "toml_datetime", 437 + "toml_parser", 438 + "winnow", 439 + ] 440 + 441 + [[package]] 442 + name = "toml_datetime" 443 + version = "0.7.0" 444 + source = "registry+https://github.com/rust-lang/crates.io-index" 445 + checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" 446 + dependencies = [ 447 + "serde", 448 + ] 449 + 450 + [[package]] 451 + name = "toml_parser" 452 + version = "1.0.1" 453 + source = "registry+https://github.com/rust-lang/crates.io-index" 454 + checksum = "97200572db069e74c512a14117b296ba0a80a30123fbbb5aa1f4a348f639ca30" 455 + dependencies = [ 456 + "winnow", 457 + ] 458 + 459 + [[package]] 460 + name = "unicode-ident" 461 + version = "1.0.18" 462 + source = "registry+https://github.com/rust-lang/crates.io-index" 463 + checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 464 + 465 + [[package]] 466 + name = "untrusted" 467 + version = "0.9.0" 468 + source = "registry+https://github.com/rust-lang/crates.io-index" 469 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 470 + 471 + [[package]] 472 + name = "urlencoding" 473 + version = "2.1.3" 474 + source = "registry+https://github.com/rust-lang/crates.io-index" 475 + checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 476 + 477 + [[package]] 478 + name = "utf16string" 479 + version = "0.2.0" 480 + source = "registry+https://github.com/rust-lang/crates.io-index" 481 + checksum = "0b62a1e85e12d5d712bf47a85f426b73d303e2d00a90de5f3004df3596e9d216" 482 + dependencies = [ 483 + "byteorder", 484 + ] 485 + 486 + [[package]] 487 + name = "wasi" 488 + version = "0.11.1+wasi-snapshot-preview1" 489 + source = "registry+https://github.com/rust-lang/crates.io-index" 490 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 491 + 492 + [[package]] 493 + name = "wasm-bindgen" 494 + version = "0.2.100" 495 + source = "registry+https://github.com/rust-lang/crates.io-index" 496 + checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 497 + dependencies = [ 498 + "cfg-if", 499 + "once_cell", 500 + "rustversion", 501 + "wasm-bindgen-macro", 502 + ] 503 + 504 + [[package]] 505 + name = "wasm-bindgen-backend" 506 + version = "0.2.100" 507 + source = "registry+https://github.com/rust-lang/crates.io-index" 508 + checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 509 + dependencies = [ 510 + "bumpalo", 511 + "log", 512 + "proc-macro2", 513 + "quote", 514 + "syn", 515 + "wasm-bindgen-shared", 516 + ] 517 + 518 + [[package]] 519 + name = "wasm-bindgen-macro" 520 + version = "0.2.100" 521 + source = "registry+https://github.com/rust-lang/crates.io-index" 522 + checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 523 + dependencies = [ 524 + "quote", 525 + "wasm-bindgen-macro-support", 526 + ] 527 + 528 + [[package]] 529 + name = "wasm-bindgen-macro-support" 530 + version = "0.2.100" 531 + source = "registry+https://github.com/rust-lang/crates.io-index" 532 + checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 533 + dependencies = [ 534 + "proc-macro2", 535 + "quote", 536 + "syn", 537 + "wasm-bindgen-backend", 538 + "wasm-bindgen-shared", 539 + ] 540 + 541 + [[package]] 542 + name = "wasm-bindgen-shared" 543 + version = "0.2.100" 544 + source = "registry+https://github.com/rust-lang/crates.io-index" 545 + checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 546 + dependencies = [ 547 + "unicode-ident", 548 + ] 549 + 550 + [[package]] 551 + name = "webpki-roots" 552 + version = "0.25.4" 553 + source = "registry+https://github.com/rust-lang/crates.io-index" 554 + checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" 555 + 556 + [[package]] 557 + name = "windows-core" 558 + version = "0.61.2" 559 + source = "registry+https://github.com/rust-lang/crates.io-index" 560 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 561 + dependencies = [ 562 + "windows-implement", 563 + "windows-interface", 564 + "windows-link", 565 + "windows-result", 566 + "windows-strings", 567 + ] 568 + 569 + [[package]] 570 + name = "windows-implement" 571 + version = "0.60.0" 572 + source = "registry+https://github.com/rust-lang/crates.io-index" 573 + checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 574 + dependencies = [ 575 + "proc-macro2", 576 + "quote", 577 + "syn", 578 + ] 579 + 580 + [[package]] 581 + name = "windows-interface" 582 + version = "0.59.1" 583 + source = "registry+https://github.com/rust-lang/crates.io-index" 584 + checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 585 + dependencies = [ 586 + "proc-macro2", 587 + "quote", 588 + "syn", 589 + ] 590 + 591 + [[package]] 592 + name = "windows-link" 593 + version = "0.1.3" 594 + source = "registry+https://github.com/rust-lang/crates.io-index" 595 + checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 596 + 597 + [[package]] 598 + name = "windows-result" 599 + version = "0.3.4" 600 + source = "registry+https://github.com/rust-lang/crates.io-index" 601 + checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 602 + dependencies = [ 603 + "windows-link", 604 + ] 605 + 606 + [[package]] 607 + name = "windows-strings" 608 + version = "0.4.2" 609 + source = "registry+https://github.com/rust-lang/crates.io-index" 610 + checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 611 + dependencies = [ 612 + "windows-link", 613 + ] 614 + 615 + [[package]] 616 + name = "windows-sys" 617 + version = "0.52.0" 618 + source = "registry+https://github.com/rust-lang/crates.io-index" 619 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 620 + dependencies = [ 621 + "windows-targets", 622 + ] 623 + 624 + [[package]] 625 + name = "windows-targets" 626 + version = "0.52.6" 627 + source = "registry+https://github.com/rust-lang/crates.io-index" 628 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 629 + dependencies = [ 630 + "windows_aarch64_gnullvm", 631 + "windows_aarch64_msvc", 632 + "windows_i686_gnu", 633 + "windows_i686_gnullvm", 634 + "windows_i686_msvc", 635 + "windows_x86_64_gnu", 636 + "windows_x86_64_gnullvm", 637 + "windows_x86_64_msvc", 638 + ] 639 + 640 + [[package]] 641 + name = "windows_aarch64_gnullvm" 642 + version = "0.52.6" 643 + source = "registry+https://github.com/rust-lang/crates.io-index" 644 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 645 + 646 + [[package]] 647 + name = "windows_aarch64_msvc" 648 + version = "0.52.6" 649 + source = "registry+https://github.com/rust-lang/crates.io-index" 650 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 651 + 652 + [[package]] 653 + name = "windows_i686_gnu" 654 + version = "0.52.6" 655 + source = "registry+https://github.com/rust-lang/crates.io-index" 656 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 657 + 658 + [[package]] 659 + name = "windows_i686_gnullvm" 660 + version = "0.52.6" 661 + source = "registry+https://github.com/rust-lang/crates.io-index" 662 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 663 + 664 + [[package]] 665 + name = "windows_i686_msvc" 666 + version = "0.52.6" 667 + source = "registry+https://github.com/rust-lang/crates.io-index" 668 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 669 + 670 + [[package]] 671 + name = "windows_x86_64_gnu" 672 + version = "0.52.6" 673 + source = "registry+https://github.com/rust-lang/crates.io-index" 674 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 675 + 676 + [[package]] 677 + name = "windows_x86_64_gnullvm" 678 + version = "0.52.6" 679 + source = "registry+https://github.com/rust-lang/crates.io-index" 680 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 681 + 682 + [[package]] 683 + name = "windows_x86_64_msvc" 684 + version = "0.52.6" 685 + source = "registry+https://github.com/rust-lang/crates.io-index" 686 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 687 + 688 + [[package]] 689 + name = "winnow" 690 + version = "0.7.12" 691 + source = "registry+https://github.com/rust-lang/crates.io-index" 692 + checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
+5
Cargo.toml
··· 1 + [workspace] 2 + resolver = "3" 3 + members = [ 4 + "apps/fennec-tricks" 5 + ]
+22
apps/fennec-tricks/Cargo.toml
··· 1 + [package] 2 + name = "fennec-tricks" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [dependencies] 7 + regashii = { version = "0.4.0", default-features = false } 8 + toml = { version = "0.9.2", default-features = false, features = [ 9 + "parse", 10 + "serde", 11 + ] } 12 + serde = { version = "1.0.219", default-features = false, features = ["derive"] } 13 + clap = { version = "4.5.42", default-features = false, features = [ 14 + "derive", 15 + "std", 16 + "help", 17 + ] } 18 + minreq = { version = "2.14.0", default-features = false, features = [ 19 + "urlencoding", 20 + "https", 21 + ] } 22 + chrono = "0.4.41"
+27
apps/fennec-tricks/src/cli.rs
··· 1 + use clap::{Parser, Subcommand, ValueEnum}; 2 + 3 + #[derive(Parser, Debug)] 4 + pub struct Args { 5 + #[command(subcommand)] 6 + pub command: Commands, 7 + } 8 + 9 + #[derive(Subcommand, Debug)] 10 + pub enum Commands { 11 + #[command(name = "dll-install")] 12 + InstallDll { name: DllType }, 13 + } 14 + 15 + #[derive(ValueEnum, Clone, Debug)] 16 + pub enum DllType { 17 + #[value(name = "mvcredist2022")] 18 + MVCRedist2022, 19 + #[value(name = "dxvk")] 20 + DXVK, 21 + #[value(name = "vkd3d")] 22 + VKD3D, 23 + } 24 + 25 + pub enum SectionType { 26 + Dll(DllType), 27 + }
+138
apps/fennec-tricks/src/dll.rs
··· 1 + use std::{env, path::PathBuf, process::Command}; 2 + 3 + use chrono::Utc; 4 + use regashii::{Key, KeyName, Registry, ValueName}; 5 + 6 + use crate::values::DownloadableEntry; 7 + 8 + pub enum OverrideType { 9 + Native, 10 + Builtin, 11 + BuiltinNative, 12 + NativeBuiltin, 13 + Disabled, 14 + } 15 + 16 + impl OverrideType { 17 + fn value(&self) -> String { 18 + match self { 19 + OverrideType::Native => String::from("native"), 20 + OverrideType::Builtin => String::from("builtin"), 21 + OverrideType::BuiltinNative => String::from("builtin,native"), 22 + OverrideType::NativeBuiltin => String::from("native,builtin"), 23 + OverrideType::Disabled => String::from("disabled"), 24 + } 25 + } 26 + } 27 + 28 + pub fn dll_override(name: String, override_type: OverrideType, registry_path: &PathBuf) { 29 + let registry = Registry::deserialize_file(registry_path).unwrap(); 30 + match registry 31 + .with( 32 + "Software\\Wine\\DllOverrides", 33 + Key::new() 34 + .with( 35 + ValueName::Named(name.clone()), 36 + regashii::Value::Sz(override_type.value()), 37 + ) 38 + .with_addendum(Utc::now().timestamp().to_string()), 39 + ) 40 + .serialize_file(registry_path) 41 + { 42 + Ok(_) => println!("Added dll override for {name}"), 43 + Err(err) => { 44 + eprint!("Failed to override dll: {err}") 45 + } 46 + } 47 + } 48 + 49 + pub fn remove_dll_override(name: String, registry_path: &PathBuf) { 50 + let mut registry = Registry::deserialize_file(registry_path).unwrap(); 51 + 52 + let key_name = KeyName::new("Software\\Wine\\DllOverrides"); 53 + let mut key = registry.keys().get(&key_name).unwrap().clone(); 54 + 55 + // Remove the dll override value from the registry key 56 + key.remove(&ValueName::Named(name)); 57 + 58 + // Remove the old registry key and add the modified one 59 + registry.remove(&key_name); 60 + registry.insert(key_name, key); 61 + 62 + match registry.serialize_file(registry_path) { 63 + Ok(_) => {} 64 + Err(err) => eprint!("Failed to remove override dll: {err}"), 65 + }; 66 + } 67 + 68 + pub fn install(dll: &DownloadableEntry) { 69 + let wine_prefix = env::var("WINEPREFIX").unwrap(); 70 + let user_reg = PathBuf::from(&wine_prefix).join("user.reg"); 71 + 72 + match dll { 73 + DownloadableEntry::Dll(dll_entry) => { 74 + for entry in dll_entry.value.clone() { 75 + let parts = entry.split_once("/").unwrap(); 76 + let override_type = match parts.0 { 77 + "n" => OverrideType::Native, 78 + "nb" => OverrideType::NativeBuiltin, 79 + "b" => OverrideType::Builtin, 80 + "bn" => OverrideType::BuiltinNative, 81 + _ => todo!(), 82 + }; 83 + dll_override( 84 + parts.1.split_once(".dll").unwrap().0.to_string(), 85 + override_type, 86 + &user_reg, 87 + ); 88 + } 89 + match dll_entry.download_type.as_str() { 90 + "exe" => { 91 + for file in dll_entry.download_files.clone() { 92 + Command::new("wine") 93 + .arg(format!("/tmp/{file}")) 94 + .args(dll_entry.install_args.clone()) 95 + .status() 96 + .unwrap(); 97 + } 98 + } 99 + "tar" => { 100 + let pfx_32_path = format!("{wine_prefix}/drive_c/windows/syswow64"); 101 + let pfx_64_path = format!("{wine_prefix}/drive_c/windows/system32"); 102 + for tar in dll_entry.download_files.clone() { 103 + for file in dll_entry.install_files_x32.clone() { 104 + extract_tar(&file, &tar, &pfx_32_path); 105 + } 106 + for file in dll_entry.install_files_x64.clone() { 107 + extract_tar(&file, &tar, &pfx_64_path); 108 + } 109 + } 110 + } 111 + _ => todo!(), 112 + } 113 + } 114 + } 115 + } 116 + 117 + fn extract_tar(file: &str, tar: &String, pfx_path: &str) { 118 + if file.contains(tar) { 119 + let sep = format!("{tar}/"); 120 + let tar_path = format!("/tmp/{tar}"); 121 + 122 + let file_archive_path = file.split_once(&sep).unwrap().1; 123 + let strip = file_archive_path.chars().filter(|c| *c == '/').count(); 124 + // Path::new(pfx_path).join(path); 125 + Command::new("tar") 126 + .arg("-xf") 127 + .args([ 128 + tar_path, 129 + format!("--strip-components={strip}"), 130 + "--overwrite".to_string(), 131 + "-C".to_string(), 132 + pfx_path.to_string(), 133 + file_archive_path.to_string(), 134 + ]) 135 + .status() 136 + .unwrap(); 137 + } 138 + }
+38
apps/fennec-tricks/src/download.rs
··· 1 + use std::{fs::File, io::Write, path::PathBuf}; 2 + 3 + use crate::values::DownloadableEntry; 4 + 5 + pub fn download(entry: &DownloadableEntry) { 6 + match entry { 7 + DownloadableEntry::Dll(dll_entry) => { 8 + let download_urls = dll_entry.download_urls.clone(); 9 + 10 + for (i, url) in download_urls.iter().enumerate() { 11 + let file_name = dll_entry.download_files.get(i).unwrap(); 12 + let file_path = PathBuf::from(format!("/tmp/{file_name}")); 13 + if !file_path.exists() { 14 + dl(url, file_path, file_name); 15 + } 16 + } 17 + } 18 + } 19 + } 20 + 21 + fn dl(url: &String, file_path: PathBuf, file_name: &String) { 22 + let mut file = File::create_new(file_path).unwrap(); 23 + let response = minreq::get(url).with_follow_redirects(true).send().unwrap(); 24 + 25 + let file_bytes = response.as_bytes(); 26 + let file_length = response 27 + .headers 28 + .get("content-length") 29 + .unwrap() 30 + .clone() 31 + .parse::<u64>() 32 + .unwrap(); 33 + 34 + if file_bytes.len() as u64 == file_length { 35 + file.write_all(file_bytes).unwrap(); 36 + println!("Downloaded {file_name} successfully") 37 + } 38 + }
+38
apps/fennec-tricks/src/main.rs
··· 1 + use clap::Parser; 2 + 3 + use crate::{ 4 + cli::{Commands, DllType, SectionType}, 5 + serialization::Values, 6 + }; 7 + 8 + pub mod cli; 9 + pub mod dll; 10 + pub mod download; 11 + pub mod serialization; 12 + pub mod values; 13 + 14 + fn main() { 15 + let args = crate::cli::Args::parse(); 16 + match args.command { 17 + Commands::InstallDll { name } => { 18 + println!("Installing {name:?}\n"); 19 + match name { 20 + DllType::MVCRedist2022 => { 21 + let entry = Values::get_downloadable_entry(SectionType::Dll(name)); 22 + download::download(&entry); 23 + dll::install(&entry); 24 + } 25 + DllType::DXVK => { 26 + let entry = Values::get_downloadable_entry(SectionType::Dll(name)); 27 + download::download(&entry); 28 + dll::install(&entry); 29 + } 30 + DllType::VKD3D => { 31 + let entry = Values::get_downloadable_entry(SectionType::Dll(name)); 32 + download::download(&entry); 33 + dll::install(&entry); 34 + } 35 + } 36 + } 37 + } 38 + }
+50
apps/fennec-tricks/src/serialization.rs
··· 1 + use std::fmt::Debug; 2 + 3 + use serde::{Deserialize, Serialize}; 4 + 5 + #[derive(Serialize, Deserialize)] 6 + pub struct Values { 7 + pub dll: DllSection, 8 + } 9 + 10 + #[derive(Serialize, Deserialize)] 11 + pub struct DllSection { 12 + pub mvcredist2022: DllEntry, 13 + pub dxvk: DllEntry, 14 + pub vkd3d: DllEntry, 15 + } 16 + 17 + #[derive(Serialize, Deserialize)] 18 + pub struct DllEntry { 19 + pub description: String, 20 + pub download_urls: Vec<String>, 21 + pub download_type: String, 22 + pub download_files: Vec<String>, 23 + pub install_args: Vec<String>, 24 + pub install_files_x32: Vec<String>, 25 + pub install_files_x64: Vec<String>, 26 + pub value: Vec<String>, 27 + } 28 + 29 + impl Debug for Values { 30 + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 31 + f.debug_struct("Values").field("dll", &self.dll).finish() 32 + } 33 + } 34 + 35 + impl Debug for DllSection { 36 + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 37 + f.debug_struct("Dll") 38 + .field("mvcredist2022", &self.mvcredist2022) 39 + .finish() 40 + } 41 + } 42 + 43 + impl Debug for DllEntry { 44 + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 45 + f.debug_struct("DllEntry") 46 + .field("description", &self.description) 47 + .field("value", &self.value) 48 + .finish() 49 + } 50 + }
+33
apps/fennec-tricks/src/values.rs
··· 1 + use crate::{ 2 + cli::SectionType, 3 + serialization::{DllEntry, Values}, 4 + }; 5 + use std::{fs::File, io::Read, path::PathBuf}; 6 + 7 + use crate::cli::DllType; 8 + 9 + pub enum DownloadableEntry { 10 + Dll(DllEntry), 11 + } 12 + 13 + impl Values { 14 + pub fn get_downloadable_entry(item: SectionType) -> DownloadableEntry { 15 + let file_path = PathBuf::from( 16 + "/home/rouffy-boe/Documents/Projects/fennec-launcher/apps/fennec-tricks/values.toml", 17 + ); 18 + let mut buff = String::new(); 19 + 20 + let mut file = File::open(&file_path).unwrap(); 21 + file.read_to_string(&mut buff).unwrap(); 22 + 23 + let toml_value: Values = toml::from_str(&buff).unwrap(); 24 + 25 + match item { 26 + SectionType::Dll(dll_type) => match dll_type { 27 + DllType::MVCRedist2022 => DownloadableEntry::Dll(toml_value.dll.mvcredist2022), 28 + DllType::DXVK => DownloadableEntry::Dll(toml_value.dll.dxvk), 29 + DllType::VKD3D => DownloadableEntry::Dll(toml_value.dll.vkd3d), 30 + }, 31 + } 32 + } 33 + }
+89
apps/fennec-tricks/values.toml
··· 1 + [dll] 2 + 3 + [dll.mvcredist2022] 4 + description = "DLL files installed by the Visual Studio Redistributable installer." 5 + download_urls = [ 6 + "https://aka.ms/vs/17/release/vc_redist.x64.exe", 7 + "https://aka.ms/vs/17/release/vc_redist.x86.exe", 8 + ] 9 + download_type = "exe" 10 + download_files = ["vc_redist.x64.exe", "vc_redist.x86.exe"] 11 + install_args = ["/install ", "/quiet"] 12 + install_files_x32 = [] 13 + install_files_x64 = [] 14 + value = [ 15 + "nb/concrt140.dll", 16 + "nb/mfc140.dll", 17 + "nb/mfc140chs.dll", 18 + "nb/mfc140cht.dll", 19 + "nb/mfc140deu.dll", 20 + "nb/mfc140enu.dll", 21 + "nb/mfc140esn.dll", 22 + "nb/mfc140fra.dll", 23 + "nb/mfc140ita.dll", 24 + "nb/mfc140jpn.dll", 25 + "nb/mfc140kor.dll", 26 + "nb/mfc140rus.dll", 27 + "nb/mfc140u.dll", 28 + "nb/mfcm140.dll", 29 + "nb/mfcm140u.dll", 30 + "nb/msvcp140.dll", 31 + "nb/msvcp140_1.dll", 32 + "nb/msvcp140_2.dll", 33 + "nb/msvcp140_atomic_wait.dll", 34 + "nb/msvcp140_codecvt_ids.dll", 35 + "nb/vcamp140.dll", 36 + "nb/vccorlib140.dll", 37 + "nb/vcomp140.dll", 38 + "nb/vcruntime140.dll", 39 + "nb/vcruntime140_1.dll", 40 + "nb/vcruntime140_threads.dll", 41 + ] 42 + 43 + [dll.dxvk] 44 + description = "Dll files that allow for the execution of a compability layer translation DirectX to Vulkan (DX11 and before)" 45 + download_urls = [ 46 + "https://github.com/doitsujin/dxvk/releases/download/v2.7/dxvk-2.7.tar.gz", 47 + ] 48 + download_type = "tar" 49 + download_files = ["dxvk-2.7.tar.gz"] 50 + install_args = [] 51 + install_files_x32 = [ 52 + "dxvk-2.7.tar.gz/dxvk-2.7/x32/d3d8.dll", 53 + "dxvk-2.7.tar.gz/dxvk-2.7/x32/d3d9.dll", 54 + "dxvk-2.7.tar.gz/dxvk-2.7/x32/d3d10core.dll", 55 + "dxvk-2.7.tar.gz/dxvk-2.7/x32/d3d11.dll", 56 + "dxvk-2.7.tar.gz/dxvk-2.7/x32/dxgi.dll", 57 + ] 58 + install_files_x64 = [ 59 + "dxvk-2.7.tar.gz/dxvk-2.7/x64/d3d8.dll", 60 + "dxvk-2.7.tar.gz/dxvk-2.7/x64/d3d9.dll", 61 + "dxvk-2.7.tar.gz/dxvk-2.7/x64/d3d10core.dll", 62 + "dxvk-2.7.tar.gz/dxvk-2.7/x64/d3d11.dll", 63 + "dxvk-2.7.tar.gz/dxvk-2.7/x64/dxgi.dll", 64 + ] 65 + value = [ 66 + "n/d3d8.dll", 67 + "n/d3d9.dll", 68 + "n/d3d10core.dll", 69 + "n/d3d11.dll", 70 + "n/dxgi.dll", 71 + ] 72 + 73 + [dll.vkd3d] 74 + description = "Dll files that allow for the execution of a compability layer translation DirectX to Vulkan (DX12)" 75 + download_urls = [ 76 + "https://github.com/HansKristian-Work/vkd3d-proton/releases/download/v2.14.1/vkd3d-proton-2.14.1.tar.zst", 77 + ] 78 + download_type = "tar" 79 + download_files = ["vkd3d-proton-2.14.1.tar.zst"] 80 + install_args = [] 81 + install_files_x32 = [ 82 + "vkd3d-proton-2.14.1.tar.zst/vkd3d-proton-2.14.1/x86/d3d12.dll", 83 + "vkd3d-proton-2.14.1.tar.zst/vkd3d-proton-2.14.1/x86/d3d12core.dll", 84 + ] 85 + install_files_x64 = [ 86 + "vkd3d-proton-2.14.1.tar.zst/vkd3d-proton-2.14.1/x64/d3d12.dll", 87 + "vkd3d-proton-2.14.1.tar.zst/vkd3d-proton-2.14.1/x64/d3d12core.dll", 88 + ] 89 + value = ["n/d3d12.dll", "n/d3d12core.dll"]
+27
flake.lock
··· 1 + { 2 + "nodes": { 3 + "nixpkgs": { 4 + "locked": { 5 + "lastModified": 1753429684, 6 + "narHash": "sha256-9h7+4/53cSfQ/uA3pSvCaBepmZaz/dLlLVJnbQ+SJjk=", 7 + "owner": "nixos", 8 + "repo": "nixpkgs", 9 + "rev": "7fd36ee82c0275fb545775cc5e4d30542899511d", 10 + "type": "github" 11 + }, 12 + "original": { 13 + "owner": "nixos", 14 + "ref": "nixos-unstable", 15 + "repo": "nixpkgs", 16 + "type": "github" 17 + } 18 + }, 19 + "root": { 20 + "inputs": { 21 + "nixpkgs": "nixpkgs" 22 + } 23 + } 24 + }, 25 + "root": "root", 26 + "version": 7 27 + }
+44
flake.nix
··· 1 + { 2 + description = "Flake for development of fennec launcher"; 3 + 4 + inputs = { 5 + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; 6 + }; 7 + 8 + outputs = 9 + { 10 + nixpkgs, 11 + ... 12 + }: 13 + let 14 + system = "x86_64-linux"; 15 + in 16 + { 17 + devShells."${system}".default = 18 + let 19 + pkgs = import nixpkgs { 20 + inherit system; 21 + }; 22 + in 23 + pkgs.mkShell { 24 + packages = with pkgs; [ 25 + gcc 26 + wineWow64Packages.full 27 + openssl 28 + pkg-config 29 + ]; 30 + 31 + LD_LIBRARY_PATH = 32 + with pkgs; 33 + lib.makeLibraryPath [ 34 + openssl 35 + glibc 36 + ]; 37 + 38 + shellHook = '' 39 + export WINEPREFIX=$PWD/pfx 40 + echo "`git --version`" 41 + ''; 42 + }; 43 + }; 44 + }
+4
justfile
··· 1 + tricks COMMAND: 2 + WINEPREFIX=$PWD/pfx cargo run --bin fennec-tricks -- {{COMMAND}} 3 + cfg: 4 + WINEPREFIX=$PWD/pfx winecfg
values.toml

This is a binary file and will not be displayed.