diff --git a/src/cli/CONTRIBUTING.md b/CONTRIBUTING.md similarity index 100% rename from src/cli/CONTRIBUTING.md rename to CONTRIBUTING.md diff --git a/Cargo.lock b/Cargo.lock index a05d459..604efbb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6241 +1,1041 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] -name = "ab_glyph" -version = "0.2.29" +name = "aho-corasick" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", + "memchr", ] [[package]] -name = "ab_glyph_rasterizer" -version = "0.1.8" +name = "anstream" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" - -[[package]] -name = "accesskit" -version = "0.16.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" - -[[package]] -name = "accesskit_atspi_common" -version = "0.9.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ - "accesskit", - "accesskit_consumer", - "atspi-common", - "serde", - "thiserror", - "zvariant 3.15.2", + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", ] [[package]] -name = "accesskit_consumer" -version = "0.24.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" -dependencies = [ - "accesskit", - "immutable-chunkmap", -] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] -name = "accesskit_macos" -version = "0.17.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ - "accesskit", - "accesskit_consumer", - "objc2", - "objc2-app-kit", - "objc2-foundation", - "once_cell", + "utf8parse", ] [[package]] -name = "accesskit_unix" -version = "0.12.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "accesskit", - "accesskit_atspi_common", - "atspi", - "futures-lite 1.13.0", - "serde", - "tokio", - "tokio-stream", - "zbus 3.15.2", + "windows-sys 0.59.0", ] [[package]] -name = "accesskit_windows" -version = "0.22.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ - "accesskit", - "accesskit_consumer", - "paste", - "static_assertions", - "windows 0.54.0", + "anstyle", + "windows-sys 0.59.0", ] [[package]] -name = "accesskit_winit" -version = "0.22.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" -dependencies = [ - "accesskit", - "accesskit_macos", - "accesskit_unix", - "accesskit_windows", - "raw-window-handle", - "winit", -] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] -name = "addr2line" -version = "0.24.2" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "gimli", + "generic-array", ] [[package]] -name = "adler" -version = "1.0.2" +name = "cc" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333" +dependencies = [ + "jobserver", + "libc", + "shlex", +] [[package]] -name = "adler2" -version = "2.0.0" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "ahash" -version = "0.8.11" +name = "clap" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ - "cfg-if", - "getrandom", - "once_cell", - "version_check", - "zerocopy", + "clap_builder", + "clap_derive", ] [[package]] -name = "aho-corasick" -version = "1.1.3" +name = "clap_builder" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ - "memchr", + "anstream", + "anstyle", + "clap_lex", + "strsim", ] [[package]] -name = "aliasable" -version = "0.1.3" +name = "clap_derive" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "allocator-api2" -version = "0.2.18" +name = "clap_lex" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] -name = "almost" -version = "0.2.0" +name = "colorchoice" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3aa2999eb46af81abb65c2d30d446778d7e613b60bbf4e174a027e80f90a3c14" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] -name = "android-activity" -version = "0.6.0" +name = "console" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ - "android-properties", - "bitflags 2.6.0", - "cc", - "cesu8", - "jni", - "jni-sys", + "encode_unicode", "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys 0.6.0+11769913", - "num_enum", - "thiserror", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", ] [[package]] -name = "android-properties" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" - -[[package]] -name = "android-tzdata" -version = "0.1.1" +name = "cpufeatures" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +dependencies = [ + "libc", +] [[package]] -name = "android_system_properties" -version = "0.1.5" +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "libc", + "generic-array", + "typenum", ] [[package]] -name = "anyhow" -version = "1.0.90" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37bf3594c4c988a53154954629820791dde498571819ae4ca50ca811e060cc95" +name = "devmode" +version = "0.4.0" +dependencies = [ + "clap", + "dirs", + "git-url-parse", + "git2", + "git2_credentials", + "log", + "pretty_env_logger", + "thiserror 2.0.9", +] [[package]] -name = "apply" -version = "0.3.0" +name = "dialoguer" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47b57fc4521e3cae26a4d45b5227f8fadee4c345be0fefd8d5d1711afb8aeb9" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +dependencies = [ + "console", + "shell-words", + "tempfile", + "thiserror 1.0.69", + "zeroize", +] [[package]] -name = "approx" -version = "0.5.1" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "num-traits", + "block-buffer", + "crypto-common", ] [[package]] -name = "arc-swap" -version = "1.7.1" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] [[package]] -name = "arrayref" -version = "0.3.9" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] [[package]] -name = "arrayvec" -version = "0.7.6" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "as-raw-xcb-connection" -version = "1.0.1" +name = "encode_unicode" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] -name = "ash" -version = "0.38.0+1.3.281" +name = "env_logger" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ - "libloading", + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", ] [[package]] -name = "ashpd" -version = "0.8.1" +name = "errno" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ - "async-fs", - "async-net", - "enumflags2", - "futures-channel", - "futures-util", - "rand", - "serde", - "serde_repr", - "tokio", - "url", - "zbus 4.4.0", + "libc", + "windows-sys 0.59.0", ] [[package]] -name = "ashpd" -version = "0.9.2" +name = "fastrand" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d43c03d9e36dd40cab48435be0b09646da362c278223ca535493877b2c1dee9" -dependencies = [ - "enumflags2", - "futures-channel", - "futures-util", - "rand", - "serde", - "serde_repr", - "tokio", - "url", - "zbus 4.4.0", -] +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] -name = "async-broadcast" -version = "0.5.1" +name = "form_urlencoded" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "event-listener 2.5.3", - "futures-core", + "percent-encoding", ] [[package]] -name = "async-broadcast" -version = "0.7.1" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "futures-core", - "pin-project-lite", + "typenum", + "version_check", ] [[package]] -name = "async-channel" -version = "2.3.1" +name = "getrandom" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", + "cfg-if", + "libc", + "wasi", ] [[package]] -name = "async-executor" -version = "1.13.1" +name = "git-url-parse" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +checksum = "68d7ff03a34ea818a59cf30c0d7aa55354925484fa30bcc4cb96d784ff07578f" dependencies = [ - "async-task", - "concurrent-queue", - "fastrand 2.1.1", - "futures-lite 2.3.0", - "slab", + "strum", + "thiserror 1.0.69", + "url", ] [[package]] -name = "async-fs" -version = "2.1.2" +name = "git2" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" dependencies = [ - "async-lock 3.4.0", - "blocking", - "futures-lite 2.3.0", + "bitflags", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", ] [[package]] -name = "async-io" -version = "1.13.0" +name = "git2_credentials" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +checksum = "6d07f2ee0eefaac0335b06027e0d84a917615519a06bd08e9232938455a99558" dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", + "dialoguer", + "dirs", + "git2", + "pest", + "pest_derive", + "regex", ] [[package]] -name = "async-io" -version = "2.3.4" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" -dependencies = [ - "async-lock 3.4.0", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite 2.3.0", - "parking", - "polling 3.7.3", - "rustix 0.38.37", - "slab", - "tracing", - "windows-sys 0.59.0", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] -name = "async-lock" -version = "2.8.0" +name = "hermit-abi" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", -] +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] -name = "async-lock" -version = "3.4.0" +name = "humantime" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "pin-project-lite", -] +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] -name = "async-net" -version = "2.0.0" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "async-io 2.3.4", - "blocking", - "futures-lite 2.3.0", + "displaydoc", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "async-process" -version = "1.8.1" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", - "async-signal", - "blocking", - "cfg-if", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.37", - "windows-sys 0.48.0", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "async-process" -version = "2.3.0" +name = "icu_locid_transform" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" dependencies = [ - "async-channel", - "async-io 2.3.4", - "async-lock 3.4.0", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener 5.3.1", - "futures-lite 2.3.0", - "rustix 0.38.37", - "tracing", + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "async-recursion" -version = "1.1.1" +name = "icu_locid_transform_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" [[package]] -name = "async-signal" -version = "0.2.10" +name = "icu_normalizer" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" dependencies = [ - "async-io 2.3.4", - "async-lock 3.4.0", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix 0.38.37", - "signal-hook-registry", - "slab", - "windows-sys 0.59.0", + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", ] [[package]] -name = "async-task" -version = "4.7.1" +name = "icu_normalizer_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" [[package]] -name = "async-trait" -version = "0.1.83" +name = "icu_properties" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", ] [[package]] -name = "atomic-waker" -version = "1.1.2" +name = "icu_properties_data" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" [[package]] -name = "atomicwrites" -version = "0.4.2" -source = "git+https://github.com/jackpot51/rust-atomicwrites#043ab4859d53ffd3d55334685303d8df39c9f768" +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" dependencies = [ - "rustix 0.38.37", - "tempfile", - "windows-sys 0.48.0", + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "atspi" -version = "0.19.0" +name = "icu_provider_macros" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6059f350ab6f593ea00727b334265c4dfc7fd442ee32d264794bd9bdc68e87ca" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ - "atspi-common", - "atspi-connection", - "atspi-proxies", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "atspi-common" -version = "0.3.0" +name = "idna" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92af95f966d2431f962bc632c2e68eda7777330158bf640c4af4249349b2cdf5" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "enumflags2", - "serde", - "static_assertions", - "zbus 3.15.2", - "zbus_names 2.6.1", - "zvariant 3.15.2", + "idna_adapter", + "smallvec", + "utf8_iter", ] [[package]] -name = "atspi-connection" -version = "0.3.0" +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c65e7d70f86d4c0e3b2d585d9bf3f979f0b19d635a336725a88d279f76b939" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "atspi-common", - "atspi-proxies", - "futures-lite 1.13.0", - "zbus 3.15.2", + "icu_normalizer", + "icu_properties", ] [[package]] -name = "atspi-proxies" -version = "0.3.0" +name = "is-terminal" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6495661273703e7a229356dcbe8c8f38223d697aacfaf0e13590a9ac9977bb52" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "atspi-common", - "serde", - "zbus 3.15.2", + "hermit-abi", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "atty" -version = "0.2.14" +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "jobserver" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ - "hermit-abi 0.1.19", "libc", - "winapi", ] [[package]] -name = "autocfg" -version = "1.4.0" +name = "libc" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] -name = "backtrace" -version = "0.3.74" +name = "libgit2-sys" +version = "0.17.0+1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224" dependencies = [ - "addr2line", - "cfg-if", + "cc", "libc", - "miniz_oxide 0.8.0", - "object", - "rustc-demangle", - "windows-targets 0.52.6", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", ] [[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" +name = "libredox" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags", + "libc", +] [[package]] -name = "basic-toml" -version = "0.1.9" +name = "libssh2-sys" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" +checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" dependencies = [ - "serde", + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", ] [[package]] -name = "bit-set" -version = "0.6.0" +name = "libz-sys" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ - "bit-vec", + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] -name = "bit-vec" -version = "0.7.0" +name = "linux-raw-sys" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] -name = "bit_field" -version = "0.10.2" +name = "litemap" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] -name = "bitflags" -version = "1.3.2" +name = "log" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] -name = "bitflags" -version = "2.6.0" +name = "memchr" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" -dependencies = [ - "serde", -] +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] -name = "block" -version = "0.1.6" +name = "once_cell" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] -name = "block-buffer" -version = "0.10.4" +name = "openssl-probe" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] -name = "block2" -version = "0.5.1" +name = "openssl-sys" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ - "objc2", + "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] -name = "blocking" -version = "1.6.1" +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite 2.3.0", - "piper", -] +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] -name = "bumpalo" -version = "3.16.0" +name = "percent-encoding" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "by_address" -version = "1.2.1" +name = "pest" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" +dependencies = [ + "memchr", + "thiserror 2.0.9", + "ucd-trie", +] [[package]] -name = "bytemuck" -version = "1.19.0" +name = "pest_derive" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" dependencies = [ - "bytemuck_derive", + "pest", + "pest_generator", ] [[package]] -name = "bytemuck_derive" -version = "1.8.0" +name = "pest_generator" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" dependencies = [ + "pest", + "pest_meta", "proc-macro2", "quote", - "syn 2.0.82", + "syn", ] [[package]] -name = "byteorder" -version = "1.5.0" +name = "pest_meta" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" +dependencies = [ + "once_cell", + "pest", + "sha2", +] [[package]] -name = "bytes" -version = "1.8.0" +name = "pkg-config" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] -name = "calloop" -version = "0.13.0" +name = "pretty_env_logger" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" +checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c" dependencies = [ - "bitflags 2.6.0", + "env_logger", "log", - "polling 3.7.3", - "rustix 0.38.37", - "slab", - "thiserror", ] [[package]] -name = "calloop-wayland-source" -version = "0.3.0" +name = "proc-macro2" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" dependencies = [ - "calloop", - "rustix 0.38.37", - "wayland-backend", - "wayland-client", + "unicode-ident", ] [[package]] -name = "cc" -version = "1.1.31" +name = "quote" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ - "jobserver", - "libc", - "shlex", + "proc-macro2", ] [[package]] -name = "cesu8" -version = "1.1.0" +name = "redox_users" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom", + "libredox", + "thiserror 1.0.69", +] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "regex" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] [[package]] -name = "cfg_aliases" -version = "0.1.1" +name = "regex-automata" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] [[package]] -name = "cfg_aliases" -version = "0.2.1" +name = "regex-syntax" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] -name = "chrono" -version = "0.4.38" +name = "rustix" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-targets 0.52.6", + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", ] [[package]] -name = "clap" -version = "3.2.25" +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + +[[package]] +name = "serde" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ - "atty", - "bitflags 1.3.2", - "clap_derive", - "clap_lex", - "indexmap 1.9.3", - "once_cell", - "strsim 0.10.0", - "termcolor", - "textwrap 0.16.1", + "serde_derive", ] [[package]] -name = "clap_derive" -version = "3.2.25" +name = "serde_derive" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ - "heck 0.4.1", - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] -name = "clap_lex" -version = "0.2.4" +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ - "os_str_bytes", + "cfg-if", + "cpufeatures", + "digest", ] [[package]] -name = "clipboard-win" -version = "5.4.0" +name = "shell-words" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" -dependencies = [ - "error-code", -] +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" [[package]] -name = "clipboard_macos" -version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13#a83bf83784276aaa882ef13555295a2ad9edd265" -dependencies = [ - "objc", - "objc-foundation", - "objc_id", -] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "clipboard_wayland" -version = "0.2.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13#a83bf83784276aaa882ef13555295a2ad9edd265" -dependencies = [ - "dnd", - "mime 0.1.0", - "smithay-clipboard", -] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] -name = "clipboard_x11" -version = "0.4.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13#a83bf83784276aaa882ef13555295a2ad9edd265" -dependencies = [ - "thiserror", - "x11rb", -] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "cmd_lib" -version = "1.9.5" +name = "strum" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "371c15a3c178d0117091bd84414545309ca979555b1aad573ef591ad58818d41" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "cmd_lib_macros", - "env_logger", - "faccess", - "lazy_static", - "log", - "os_pipe", + "strum_macros", ] [[package]] -name = "cmd_lib_macros" -version = "1.9.5" +name = "strum_macros" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb844bd05be34d91eb67101329aeba9d3337094c04fd8507d821db7ebb488eaf" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "proc-macro-error2", + "heck", "proc-macro2", "quote", - "syn 2.0.82", + "rustversion", + "syn", ] [[package]] -name = "cocoa" -version = "0.25.0" +name = "syn" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "cocoa-foundation" -version = "0.1.2" +name = "synstructure" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation", - "core-graphics-types", - "libc", - "objc", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "codespan-reporting" -version = "0.11.1" +name = "tempfile" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ - "termcolor", - "unicode-width", + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] -name = "color_quant" -version = "1.1.0" +name = "termcolor" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] [[package]] -name = "colored" -version = "2.1.0" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "lazy_static", - "windows-sys 0.48.0", + "thiserror-impl 1.0.69", ] [[package]] -name = "com" -version = "0.6.0" +name = "thiserror" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" dependencies = [ - "com_macros", + "thiserror-impl 2.0.9", ] [[package]] -name = "com_macros" -version = "0.6.0" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "com_macros_support", "proc-macro2", - "syn 1.0.109", + "quote", + "syn", ] [[package]] -name = "com_macros_support" -version = "0.6.0" +name = "thiserror-impl" +version = "2.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "console" -version = "0.15.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.52.0", -] - -[[package]] -name = "const-random" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" -dependencies = [ - "const-random-macro", -] - -[[package]] -name = "const-random-macro" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" -dependencies = [ - "getrandom", - "once_cell", - "tiny-keccak", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "core-graphics" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "libc", -] - -[[package]] -name = "cosmic-config" -version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "atomicwrites", - "cosmic-config-derive", - "cosmic-settings-daemon", - "dirs 5.0.1", - "futures-util", - "iced_futures", - "known-folders", - "notify", - "once_cell", - "ron", - "serde", - "tokio", - "tracing", - "xdg", - "zbus 4.4.0", -] - -[[package]] -name = "cosmic-config-derive" -version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cosmic-settings-daemon" -version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#931f5db558bf3fcb572ff4e18f7f1618a7430046" -dependencies = [ - "zbus 4.4.0", -] - -[[package]] -name = "cosmic-text" -version = "0.12.1" -source = "git+https://github.com/pop-os/cosmic-text.git#4fe90bb6126c22f589b46768d7754d65ae300c5e" -dependencies = [ - "bitflags 2.6.0", - "fontdb 0.16.2", - "log", - "rangemap", - "rayon", - "rustc-hash 1.1.0", - "rustybuzz", - "self_cell 1.0.4", - "smol_str", - "swash", - "sys-locale", - "ttf-parser 0.21.1", - "unicode-bidi", - "unicode-linebreak", - "unicode-script", - "unicode-segmentation", -] - -[[package]] -name = "cosmic-theme" -version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "almost", - "cosmic-config", - "csscolorparser", - "dirs 5.0.1", - "lazy_static", - "palette", - "ron", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "cpufeatures" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[package]] -name = "crossterm" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2102ea4f781910f8a5b98dd061f4c2023f479ce7bb1236330099ceb5a93cf17" -dependencies = [ - "bitflags 1.3.2", - "crossterm_winapi", - "libc", - "mio 0.8.11", - "parking_lot 0.12.3", - "signal-hook", - "signal-hook-mio", - "winapi", -] - -[[package]] -name = "crossterm_winapi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" -dependencies = [ - "winapi", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "css-color" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42aaeae719fd78ce501d77c6cdf01f7e96f26bcd5617a4903a1c2b97e388543a" - -[[package]] -name = "csscolorparser" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" -dependencies = [ - "phf", - "serde", -] - -[[package]] -name = "ctor-lite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f791803201ab277ace03903de1594460708d2d54df6053f2d9e82f592b19e3b" - -[[package]] -name = "cursor-icon" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" - -[[package]] -name = "d3d12" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdbd1f579714e3c809ebd822c81ef148b1ceaeb3d535352afc73fd0c4c6a0017" -dependencies = [ - "bitflags 2.6.0", - "libloading", - "winapi", -] - -[[package]] -name = "darling" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.11.1", - "syn 2.0.82", -] - -[[package]] -name = "darling_macro" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core 0.9.10", -] - -[[package]] -name = "data-url" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_setters" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e8ef033054e131169b8f0f9a7af8f5533a9436fadf3c500ed547f730f07090d" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "devmode" -version = "0.3.0" -dependencies = [ - "clap", - "cmd_lib", - "colored", - "derive_setters", - "fs_extra", - "git-url-parse", - "git2", - "git2_credentials", - "libset", - "log", - "regex", - "requestty", - "serde", - "thiserror", - "walkdir", -] - -[[package]] -name = "devmode-cli" -version = "0.1.0" -dependencies = [ - "clap", - "cmd_lib", - "devmode", - "fs_extra", - "git2", - "git2_credentials", - "libset", - "log", - "pretty_env_logger", - "regex", - "requestty", - "serde", - "url-builder", - "walkdir", -] - -[[package]] -name = "devmode-ui" -version = "0.3.0" -dependencies = [ - "i18n-embed", - "i18n-embed-fl", - "libcosmic", - "once_cell", - "open", - "rust-embed", - "slotmap", - "tokio", -] - -[[package]] -name = "dialoguer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" -dependencies = [ - "console", - "shell-words", - "tempfile", - "zeroize", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" -dependencies = [ - "dirs-sys 0.3.7", -] - -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys 0.3.7", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys 0.4.1", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "dlib" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" -dependencies = [ - "libloading", -] - -[[package]] -name = "dlv-list" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" -dependencies = [ - "const-random", -] - -[[package]] -name = "dnd" -version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13#a83bf83784276aaa882ef13555295a2ad9edd265" -dependencies = [ - "bitflags 2.6.0", - "mime 0.1.0", - "raw-window-handle", - "smithay-client-toolkit", - "smithay-clipboard", -] - -[[package]] -name = "document-features" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" -dependencies = [ - "litrs", -] - -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - -[[package]] -name = "dpi" -version = "0.1.1" -source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13#b1852274c0251d7f24ba2cb32fa53812b37b1c79" - -[[package]] -name = "drm" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" -dependencies = [ - "bitflags 2.6.0", - "bytemuck", - "drm-ffi", - "drm-fourcc", - "rustix 0.38.37", -] - -[[package]] -name = "drm-ffi" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" -dependencies = [ - "drm-sys", - "rustix 0.38.37", -] - -[[package]] -name = "drm-fourcc" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" - -[[package]] -name = "drm-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" -dependencies = [ - "libc", - "linux-raw-sys 0.6.5", -] - -[[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - -[[package]] -name = "endi" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" - -[[package]] -name = "enumflags2" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" -dependencies = [ - "enumflags2_derive", - "serde", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "erased-serde" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" -dependencies = [ - "serde", -] - -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "error-code" -version = "3.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" - -[[package]] -name = "etagere" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e2f1e3be19fb10f549be8c1bf013e8675b4066c445e36eb76d2ebb2f54ee495" -dependencies = [ - "euclid", - "svg_fmt", -] - -[[package]] -name = "euclid" -version = "0.22.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" -dependencies = [ - "num-traits", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" -dependencies = [ - "event-listener 5.3.1", - "pin-project-lite", -] - -[[package]] -name = "exr" -version = "1.72.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" -dependencies = [ - "bit_field", - "flume", - "half", - "lebe", - "miniz_oxide 0.7.4", - "rayon-core", - "smallvec", - "zune-inflate", -] - -[[package]] -name = "faccess" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ae66425802d6a903e268ae1a08b8c38ba143520f227a205edf4e9c7e3e26d5" -dependencies = [ - "bitflags 1.3.2", - "libc", - "winapi", -] - -[[package]] -name = "fast-srgb8" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" - -[[package]] -name = "fdeflate" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "filetime" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] - -[[package]] -name = "find-crate" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2" -dependencies = [ - "toml", -] - -[[package]] -name = "flate2" -version = "1.0.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" -dependencies = [ - "crc32fast", - "miniz_oxide 0.8.0", -] - -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" - -[[package]] -name = "float_next_after" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" - -[[package]] -name = "fluent" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb74634707bebd0ce645a981148e8fb8c7bccd4c33c652aeffd28bf2f96d555a" -dependencies = [ - "fluent-bundle", - "unic-langid", -] - -[[package]] -name = "fluent-bundle" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe0a21ee80050c678013f82edf4b705fe2f26f1f9877593d13198612503f493" -dependencies = [ - "fluent-langneg", - "fluent-syntax", - "intl-memoizer", - "intl_pluralrules", - "rustc-hash 1.1.0", - "self_cell 0.10.3", - "smallvec", - "unic-langid", -] - -[[package]] -name = "fluent-langneg" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" -dependencies = [ - "unic-langid", -] - -[[package]] -name = "fluent-syntax" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a530c4694a6a8d528794ee9bbd8ba0122e779629ac908d15ad5a7ae7763a33d" -dependencies = [ - "thiserror", -] - -[[package]] -name = "flume" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" -dependencies = [ - "spin", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "font-types" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dda6e36206148f69fc6ecb1bb6c0dedd7ee469f3db1d0dc2045beea28430ca43" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "fontconfig-parser" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7" -dependencies = [ - "roxmltree", -] - -[[package]] -name = "fontdb" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" -dependencies = [ - "fontconfig-parser", - "log", - "memmap2 0.9.5", - "slotmap", - "tinyvec", - "ttf-parser 0.20.0", -] - -[[package]] -name = "fontdb" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e32eac81c1135c1df01d4e6d4233c47ba11f6a6d07f33e0bba09d18797077770" -dependencies = [ - "fontconfig-parser", - "log", - "memmap2 0.9.5", - "slotmap", - "tinyvec", - "ttf-parser 0.21.1", -] - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fraction" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f158e3ff0a1b334408dc9fb811cd99b446986f4d8b741bb08f9df1604085ae7" -dependencies = [ - "lazy_static", - "num", -] - -[[package]] -name = "freedesktop-desktop-entry" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c201444ddafb5506fe85265b48421664ff4617e3b7090ef99e42a0070c1aead0" -dependencies = [ - "dirs 3.0.2", - "gettext-rs", - "memchr", - "thiserror", - "xdg", -] - -[[package]] -name = "freedesktop-icons" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8ef34245e0540c9a3ce7a28340b98d2c12b75da0d446da4e8224923fcaa0c16" -dependencies = [ - "dirs 5.0.1", - "once_cell", - "rust-ini", - "thiserror", - "xdg", -] - -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-lite" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" -dependencies = [ - "fastrand 2.1.1", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "gethostname" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" -dependencies = [ - "libc", - "windows-targets 0.48.5", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "gettext-rs" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44e92f7dc08430aca7ed55de161253a22276dfd69c5526e5c5e95d1f7cf338a" -dependencies = [ - "gettext-sys", - "locale_config", -] - -[[package]] -name = "gettext-sys" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb45773f5b8945f12aecd04558f545964f943dacda1b1155b3d738f5469ef661" -dependencies = [ - "cc", - "temp-dir", -] - -[[package]] -name = "gif" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "git-url-parse" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68d7ff03a34ea818a59cf30c0d7aa55354925484fa30bcc4cb96d784ff07578f" -dependencies = [ - "strum", - "thiserror", - "url", -] - -[[package]] -name = "git2" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c" -dependencies = [ - "bitflags 1.3.2", - "libc", - "libgit2-sys", - "log", - "openssl-probe", - "openssl-sys", - "url", -] - -[[package]] -name = "git2_credentials" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70247456d7e45a5df577b2064dd11c61a3a71eb25751e58c8da211c602cdcd7a" -dependencies = [ - "dialoguer", - "dirs 4.0.0", - "git2", - "pest", - "pest_derive", - "regex", -] - -[[package]] -name = "gl_generator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api", - "log", - "xml-rs", -] - -[[package]] -name = "glam" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" - -[[package]] -name = "glow" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" -dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e1951bbd9434a81aa496fe59ccc2235af3820d27b85f9314e279609211e2c" -dependencies = [ - "gl_generator", -] - -[[package]] -name = "gpu-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" -dependencies = [ - "bitflags 2.6.0", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "gpu-allocator" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd4240fc91d3433d5e5b0fc5b67672d771850dc19bbee03c1381e19322803d7" -dependencies = [ - "log", - "presser", - "thiserror", - "winapi", - "windows 0.52.0", -] - -[[package]] -name = "gpu-descriptor" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c08c1f623a8d0b722b8b99f821eb0ba672a1618f0d3b16ddbee1cedd2dd8557" -dependencies = [ - "bitflags 2.6.0", - "gpu-descriptor-types", - "hashbrown 0.14.5", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "grid" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df00eed8d1f0db937f6be10e46e8072b0671accb504cf0f959c5c52c679f5b9" - -[[package]] -name = "guillotiere" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" -dependencies = [ - "euclid", - "svg_fmt", -] - -[[package]] -name = "half" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "cfg-if", - "crunchy", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "hashbrown" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" - -[[package]] -name = "hassle-rs" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" -dependencies = [ - "bitflags 2.6.0", - "com", - "libc", - "libloading", - "thiserror", - "widestring", - "winapi", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "i18n-config" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e88074831c0be5b89181b05e6748c4915f77769ecc9a4c372f88b169a8509c9" -dependencies = [ - "basic-toml", - "log", - "serde", - "serde_derive", - "thiserror", - "unic-langid", -] - -[[package]] -name = "i18n-embed" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94205d95764f5bb9db9ea98fa77f89653365ca748e27161f5bbea2ffd50e459c" -dependencies = [ - "arc-swap", - "fluent", - "fluent-langneg", - "fluent-syntax", - "i18n-embed-impl", - "intl-memoizer", - "lazy_static", - "locale_config", - "log", - "parking_lot 0.12.3", - "rust-embed", - "thiserror", - "unic-langid", - "walkdir", -] - -[[package]] -name = "i18n-embed-fl" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8241a781f49e923415e106fcd1f89c3fab92cc9f699a521c56e95dee273903d3" -dependencies = [ - "dashmap", - "find-crate", - "fluent", - "fluent-syntax", - "i18n-config", - "i18n-embed", - "lazy_static", - "proc-macro-error", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 2.0.82", - "unic-langid", -] - -[[package]] -name = "i18n-embed-impl" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81093c4701672f59416582fe3145676126fd23ba5db910acad0793c1108aaa58" -dependencies = [ - "find-crate", - "i18n-config", - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core 0.52.0", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "iced" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "dnd", - "iced_accessibility", - "iced_core", - "iced_futures", - "iced_renderer", - "iced_widget", - "iced_winit", - "image", - "mime 0.1.0", - "thiserror", - "window_clipboard", -] - -[[package]] -name = "iced_accessibility" -version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "accesskit", - "accesskit_winit", -] - -[[package]] -name = "iced_core" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "bitflags 2.6.0", - "bytes", - "dnd", - "glam", - "log", - "mime 0.1.0", - "num-traits", - "once_cell", - "palette", - "raw-window-handle", - "rustc-hash 2.0.0", - "serde", - "smol_str", - "thiserror", - "web-time", - "window_clipboard", -] - -[[package]] -name = "iced_futures" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "futures", - "iced_core", - "log", - "rustc-hash 2.0.0", - "tokio", - "wasm-bindgen-futures", - "wasm-timer", -] - -[[package]] -name = "iced_glyphon" -version = "0.6.0" -source = "git+https://github.com/pop-os/glyphon.git?tag=iced-0.14-dev#6ef9d12a20cfd0f7bdf38136a26ded9f7459ec8b" -dependencies = [ - "cosmic-text", - "etagere", - "lru", - "rustc-hash 2.0.0", - "wgpu", -] - -[[package]] -name = "iced_graphics" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "bitflags 2.6.0", - "bytemuck", - "cosmic-text", - "half", - "iced_core", - "iced_futures", - "image", - "kamadak-exif", - "log", - "lyon_path", - "once_cell", - "raw-window-handle", - "rustc-hash 2.0.0", - "thiserror", - "unicode-segmentation", -] - -[[package]] -name = "iced_renderer" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "iced_graphics", - "iced_tiny_skia", - "iced_wgpu", - "log", - "thiserror", -] - -[[package]] -name = "iced_runtime" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "bytes", - "dnd", - "iced_core", - "iced_futures", - "raw-window-handle", - "thiserror", - "window_clipboard", -] - -[[package]] -name = "iced_tiny_skia" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "bytemuck", - "cosmic-text", - "iced_graphics", - "kurbo 0.10.4", - "log", - "resvg", - "rustc-hash 2.0.0", - "softbuffer", - "tiny-skia", -] - -[[package]] -name = "iced_wgpu" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "as-raw-xcb-connection", - "bitflags 2.6.0", - "bytemuck", - "futures", - "glam", - "guillotiere", - "iced_glyphon", - "iced_graphics", - "log", - "lyon", - "once_cell", - "raw-window-handle", - "resvg", - "rustc-hash 2.0.0", - "rustix 0.38.37", - "smithay-client-toolkit", - "thiserror", - "tiny-xlib", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-sys", - "wgpu", - "x11rb", -] - -[[package]] -name = "iced_widget" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "dnd", - "iced_renderer", - "iced_runtime", - "num-traits", - "once_cell", - "ouroboros", - "rustc-hash 2.0.0", - "thiserror", - "unicode-segmentation", - "window_clipboard", -] - -[[package]] -name = "iced_winit" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "dnd", - "iced_futures", - "iced_graphics", - "iced_runtime", - "log", - "rustc-hash 2.0.0", - "thiserror", - "tracing", - "wasm-bindgen-futures", - "web-sys", - "winapi", - "window_clipboard", - "winit", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "image" -version = "0.24.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "exr", - "gif", - "jpeg-decoder", - "num-traits", - "png", - "qoi", - "tiff", -] - -[[package]] -name = "imagesize" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" - -[[package]] -name = "immutable-chunkmap" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" -dependencies = [ - "equivalent", - "hashbrown 0.15.0", -] - -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "intl-memoizer" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe22e020fce238ae18a6d5d8c502ee76a52a6e880d99477657e6acc30ec57bda" -dependencies = [ - "type-map", - "unic-langid", -] - -[[package]] -name = "intl_pluralrules" -version = "7.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" -dependencies = [ - "unic-langid", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "is-docker" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" -dependencies = [ - "once_cell", -] - -[[package]] -name = "is-terminal" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" -dependencies = [ - "hermit-abi 0.4.0", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "is-wsl" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" -dependencies = [ - "is-docker", - "once_cell", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "jni" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" -dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jobserver" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" -dependencies = [ - "libc", -] - -[[package]] -name = "jpeg-decoder" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" -dependencies = [ - "rayon", -] - -[[package]] -name = "js-sys" -version = "0.3.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "kamadak-exif" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4fc70d0ab7e5b6bafa30216a6b48705ea964cdfc29c050f2412295eba58077" -dependencies = [ - "mutate_once", -] - -[[package]] -name = "khronos-egl" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" -dependencies = [ - "libc", - "libloading", - "pkg-config", -] - -[[package]] -name = "khronos_api" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" - -[[package]] -name = "known-folders" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d9a1740cc8b46e259a0eb787d79d855e79ff10b9855a5eba58868d5da7927c" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "kqueue" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - -[[package]] -name = "kurbo" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1618d4ebd923e97d67e7cd363d80aef35fe961005cbbbb3d2dad8bdd1bc63440" -dependencies = [ - "arrayvec", - "smallvec", -] - -[[package]] -name = "kurbo" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89234b2cc610a7dd927ebde6b41dd1a5d4214cffaef4cf1fb2195d592f92518f" -dependencies = [ - "arrayvec", - "smallvec", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "lebe" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" - -[[package]] -name = "libc" -version = "0.2.161" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" - -[[package]] -name = "libcosmic" -version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#f1e52b3aaa60af9e2baa647a11cb9cdb13862af2" -dependencies = [ - "apply", - "ashpd 0.9.2", - "chrono", - "cosmic-config", - "cosmic-settings-daemon", - "cosmic-theme", - "css-color", - "derive_setters", - "fraction", - "freedesktop-desktop-entry", - "freedesktop-icons", - "iced", - "iced_core", - "iced_futures", - "iced_renderer", - "iced_runtime", - "iced_tiny_skia", - "iced_wgpu", - "iced_widget", - "iced_winit", - "lazy_static", - "libc", - "mime 0.3.17", - "palette", - "rfd", - "rustix 0.38.37", - "serde", - "shlex", - "slotmap", - "taffy", - "thiserror", - "tokio", - "tracing", - "unicode-segmentation", - "url", - "ustr", - "zbus 4.4.0", -] - -[[package]] -name = "libgit2-sys" -version = "0.13.5+1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e5ea06c26926f1002dd553fded6cfcdc9784c1f60feeb58368b4d9b07b6dba" -dependencies = [ - "cc", - "libc", - "libssh2-sys", - "libz-sys", - "openssl-sys", - "pkg-config", -] - -[[package]] -name = "libloading" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" -dependencies = [ - "cfg-if", - "windows-targets 0.52.6", -] - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.6.0", - "libc", - "redox_syscall 0.5.7", -] - -[[package]] -name = "libset" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e5b09148245463fa216e4166507295c0ff265670114328eaaf01d03b0617e90" -dependencies = [ - "anyhow", - "dirs 4.0.0", - "dyn-clone", - "erased-serde", - "serde", - "serde_json", - "toml", -] - -[[package]] -name = "libssh2-sys" -version = "0.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "linux-raw-sys" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" - -[[package]] -name = "litrs" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" - -[[package]] -name = "locale_config" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" -dependencies = [ - "lazy_static", - "objc", - "objc-foundation", - "regex", - "winapi", -] - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" - -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" - -[[package]] -name = "lyon" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7f9cda98b5430809e63ca5197b06c7d191bf7e26dfc467d5a3f0290e2a74f" -dependencies = [ - "lyon_algorithms", - "lyon_tessellation", -] - -[[package]] -name = "lyon_algorithms" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3bca95f9a4955b3e4a821fbbcd5edfbd9be2a9a50bb5758173e5358bfb4c623" -dependencies = [ - "lyon_path", - "num-traits", -] - -[[package]] -name = "lyon_geom" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edecfb8d234a2b0be031ab02ebcdd9f3b9ee418fb35e265f7a540a48d197bff9" -dependencies = [ - "arrayvec", - "euclid", - "num-traits", -] - -[[package]] -name = "lyon_path" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c08a606c7a59638d6c6aa18ac91a06aa9fb5f765a7efb27e6a4da58700740d7" -dependencies = [ - "lyon_geom", - "num-traits", -] - -[[package]] -name = "lyon_tessellation" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579d42360a4b09846eff2feef28f538696c7d6c7439bfa65874ff3cbe0951b2c" -dependencies = [ - "float_next_after", - "lyon_path", - "num-traits", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "memmap2" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" -dependencies = [ - "libc", -] - -[[package]] -name = "memmap2" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - -[[package]] -name = "metal" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" -dependencies = [ - "bitflags 2.6.0", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", - "paste", -] - -[[package]] -name = "mime" -version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13#a83bf83784276aaa882ef13555295a2ad9edd265" -dependencies = [ - "smithay-clipboard", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" -dependencies = [ - "adler2", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "mio" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "wasi", - "windows-sys 0.52.0", -] - -[[package]] -name = "mutate_once" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b" - -[[package]] -name = "naga" -version = "22.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad" -dependencies = [ - "arrayvec", - "bit-set", - "bitflags 2.6.0", - "cfg_aliases 0.1.1", - "codespan-reporting", - "hexf-parse", - "indexmap 2.6.0", - "log", - "rustc-hash 1.1.0", - "spirv", - "termcolor", - "thiserror", - "unicode-xid", -] - -[[package]] -name = "ndk" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" -dependencies = [ - "bitflags 2.6.0", - "jni-sys", - "log", - "ndk-sys 0.6.0+11769913", - "num_enum", - "raw-window-handle", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.5.0+25.2.9519653" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "ndk-sys" -version = "0.6.0+11769913" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.7.1", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "cfg_aliases 0.2.1", - "libc", - "memoffset 0.9.1", -] - -[[package]] -name = "notify" -version = "6.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" -dependencies = [ - "bitflags 2.6.0", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "log", - "mio 0.8.11", - "walkdir", - "windows-sys 0.48.0", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.9", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" -dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - -[[package]] -name = "objc-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -dependencies = [ - "block", - "objc", - "objc_id", -] - -[[package]] -name = "objc-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" - -[[package]] -name = "objc2" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" -dependencies = [ - "objc-sys", - "objc2-encode", -] - -[[package]] -name = "objc2-app-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" -dependencies = [ - "bitflags 2.6.0", - "block2", - "libc", - "objc2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation", - "objc2-quartz-core", -] - -[[package]] -name = "objc2-cloud-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" -dependencies = [ - "bitflags 2.6.0", - "block2", - "objc2", - "objc2-core-location", - "objc2-foundation", -] - -[[package]] -name = "objc2-contacts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" -dependencies = [ - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-data" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" -dependencies = [ - "bitflags 2.6.0", - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-image" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" -dependencies = [ - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", -] - -[[package]] -name = "objc2-core-location" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" -dependencies = [ - "block2", - "objc2", - "objc2-contacts", - "objc2-foundation", -] - -[[package]] -name = "objc2-encode" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" - -[[package]] -name = "objc2-foundation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" -dependencies = [ - "bitflags 2.6.0", - "block2", - "dispatch", - "libc", - "objc2", -] - -[[package]] -name = "objc2-link-presentation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" -dependencies = [ - "block2", - "objc2", - "objc2-app-kit", - "objc2-foundation", -] - -[[package]] -name = "objc2-metal" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" -dependencies = [ - "bitflags 2.6.0", - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" -dependencies = [ - "bitflags 2.6.0", - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", -] - -[[package]] -name = "objc2-symbols" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" -dependencies = [ - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" -dependencies = [ - "bitflags 2.6.0", - "block2", - "objc2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", - "objc2-core-location", - "objc2-foundation", - "objc2-link-presentation", - "objc2-quartz-core", - "objc2-symbols", - "objc2-uniform-type-identifiers", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-uniform-type-identifiers" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" -dependencies = [ - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" -dependencies = [ - "bitflags 2.6.0", - "block2", - "objc2", - "objc2-core-location", - "objc2-foundation", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "object" -version = "0.36.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" - -[[package]] -name = "open" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" -dependencies = [ - "is-wsl", - "libc", - "pathdiff", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "orbclient" -version = "0.3.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" -dependencies = [ - "libredox", -] - -[[package]] -name = "ordered-multimap" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" -dependencies = [ - "dlv-list", - "hashbrown 0.14.5", -] - -[[package]] -name = "ordered-stream" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "os_pipe" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "os_str_bytes" -version = "6.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" - -[[package]] -name = "ouroboros" -version = "0.18.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "944fa20996a25aded6b4795c6d63f10014a7a83f8be9828a11860b08c5fc4a67" -dependencies = [ - "aliasable", - "ouroboros_macro", - "static_assertions", -] - -[[package]] -name = "ouroboros_macro" -version = "0.18.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" -dependencies = [ - "heck 0.4.1", - "itertools", - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "owned_ttf_parser" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" -dependencies = [ - "ttf-parser 0.25.0", -] - -[[package]] -name = "palette" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" -dependencies = [ - "approx", - "fast-srgb8", - "palette_derive", - "phf", - "serde", -] - -[[package]] -name = "palette_derive" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" -dependencies = [ - "by_address", - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core 0.9.10", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.5.7", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "pathdiff" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pest" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "pest_meta" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" -dependencies = [ - "once_cell", - "pest", - "sha2", -] - -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_macros", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared", - "rand", -] - -[[package]] -name = "phf_macros" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" -dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "pico-args" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" - -[[package]] -name = "pin-project" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "piper" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" -dependencies = [ - "atomic-waker", - "fastrand 2.1.1", - "futures-io", -] - -[[package]] -name = "pkg-config" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" - -[[package]] -name = "png" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide 0.8.0", -] - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "polling" -version = "3.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.4.0", - "pin-project-lite", - "rustix 0.38.37", - "tracing", - "windows-sys 0.59.0", -] - -[[package]] -name = "pollster" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" - -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "presser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" - -[[package]] -name = "pretty_env_logger" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c" -dependencies = [ - "env_logger", - "log", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" -dependencies = [ - "toml_edit 0.22.22", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" -dependencies = [ - "proc-macro-error-attr2", - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "proc-macro2" -version = "1.0.88" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", - "version_check", - "yansi", -] - -[[package]] -name = "profiling" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" - -[[package]] -name = "qoi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "quick-xml" -version = "0.36.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "range-alloc" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" - -[[package]] -name = "rangemap" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684" - -[[package]] -name = "raw-window-handle" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "read-fonts" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb94d9ac780fdcf9b6b252253f7d8f221379b84bd3573131139b383df69f85e1" -dependencies = [ - "bytemuck", - "font-types", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "renderdoc-sys" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" - -[[package]] -name = "requestty" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d06fb394ca73d15ad0c7bbc673459506a851a84586cd90d67d42932a280281e" -dependencies = [ - "requestty-ui", - "smallvec", - "tempfile", -] - -[[package]] -name = "requestty-ui" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31a4bce6f730d12e36993944036e2f93e88033d8a78734d8734fdb0043662cae" -dependencies = [ - "bitflags 1.3.2", - "crossterm", - "once_cell", - "textwrap 0.15.2", - "unicode-segmentation", -] - -[[package]] -name = "resvg" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "944d052815156ac8fa77eaac055220e95ba0b01fa8887108ca710c03805d9051" -dependencies = [ - "gif", - "jpeg-decoder", - "log", - "pico-args", - "rgb", - "svgtypes", - "tiny-skia", - "usvg", -] - -[[package]] -name = "rfd" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251" -dependencies = [ - "ashpd 0.8.1", - "block", - "dispatch", - "js-sys", - "log", - "objc", - "objc-foundation", - "objc_id", - "pollster", - "raw-window-handle", - "urlencoding", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rgb" -version = "0.8.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "ron" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" -dependencies = [ - "base64 0.21.7", - "bitflags 2.6.0", - "serde", - "serde_derive", -] - -[[package]] -name = "roxmltree" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" - -[[package]] -name = "rust-embed" -version = "8.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478" -dependencies = [ - "proc-macro2", - "quote", - "rust-embed-utils", - "syn 2.0.82", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" -dependencies = [ - "sha2", - "walkdir", -] - -[[package]] -name = "rust-ini" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" -dependencies = [ - "cfg-if", - "ordered-multimap", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc-hash" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" - -[[package]] -name = "rustix" -version = "0.37.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "0.38.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" -dependencies = [ - "bitflags 2.6.0", - "errno", - "libc", - "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustversion" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" - -[[package]] -name = "rustybuzz" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" -dependencies = [ - "bitflags 2.6.0", - "bytemuck", - "libm", - "smallvec", - "ttf-parser 0.21.1", - "unicode-bidi-mirroring", - "unicode-ccc", - "unicode-properties", - "unicode-script", -] - -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "sctk-adwaita" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" -dependencies = [ - "ab_glyph", - "log", - "memmap2 0.9.5", - "smithay-client-toolkit", - "tiny-skia", -] - -[[package]] -name = "self_cell" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d" -dependencies = [ - "self_cell 1.0.4", -] - -[[package]] -name = "self_cell" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" - -[[package]] -name = "serde" -version = "1.0.211" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac55e59090389fb9f0dd9e0f3c09615afed1d19094284d0b200441f13550793" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.211" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be4f245ce16bc58d57ef2716271d0d4519e0f6defa147f6e081005bcb278ff" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "serde_json" -version = "1.0.132" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" -dependencies = [ - "indexmap 2.6.0", - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "shell-words" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signal-hook" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-mio" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" -dependencies = [ - "libc", - "mio 0.8.11", - "signal-hook", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - -[[package]] -name = "simplecss" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" -dependencies = [ - "log", -] - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "skrifa" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1c44ad1f6c5bdd4eefed8326711b7dbda9ea45dfd36068c427d332aa382cbe" -dependencies = [ - "bytemuck", - "read-fonts", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - -[[package]] -name = "slotmap" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" -dependencies = [ - "version_check", -] - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "smawk" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" - -[[package]] -name = "smithay-client-toolkit" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" -dependencies = [ - "bitflags 2.6.0", - "bytemuck", - "calloop", - "calloop-wayland-source", - "cursor-icon", - "libc", - "log", - "memmap2 0.9.5", - "pkg-config", - "rustix 0.38.37", - "thiserror", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", - "wayland-scanner", - "xkbcommon", - "xkeysym", -] - -[[package]] -name = "smithay-clipboard" -version = "0.8.0" -source = "git+https://github.com/pop-os/smithay-clipboard?tag=pop-dnd-5#5a3007def49eb678d1144850c9ee04b80707c56a" -dependencies = [ - "libc", - "raw-window-handle", - "smithay-client-toolkit", - "wayland-backend", -] - -[[package]] -name = "smol_str" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" -dependencies = [ - "serde", -] - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "softbuffer" -version = "0.4.1" -source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#6e75b1ad7e98397d37cb187886d05969bc480995" -dependencies = [ - "as-raw-xcb-connection", - "bytemuck", - "cfg_aliases 0.2.1", - "cocoa", - "core-graphics", - "drm", - "fastrand 2.1.1", - "foreign-types", - "js-sys", - "log", - "memmap2 0.9.5", - "objc", - "raw-window-handle", - "redox_syscall 0.4.1", - "rustix 0.38.37", - "tiny-xlib", - "wasm-bindgen", - "wayland-backend", - "wayland-client", - "wayland-sys", - "web-sys", - "windows-sys 0.52.0", - "x11rb", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spirv" -version = "0.3.0+sdk-1.3.268.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" -dependencies = [ - "bitflags 2.6.0", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "strict-num" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" -dependencies = [ - "float-cmp", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.82", -] - -[[package]] -name = "svg_fmt" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20e16a0f46cf5fd675563ef54f26e83e20f2366bcf027bcb3cc3ed2b98aaf2ca" - -[[package]] -name = "svgtypes" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794de53cc48eaabeed0ab6a3404a65f40b3e38c067e4435883a65d2aa4ca000e" -dependencies = [ - "kurbo 0.11.1", - "siphasher 1.0.1", -] - -[[package]] -name = "swash" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd59f3f359ddd2c95af4758c18270eddd9c730dde98598023cdabff472c2ca2" -dependencies = [ - "skrifa", - "yazi", - "zeno", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83540f837a8afc019423a8edb95b52a8effe46957ee402287f4292fae35be021" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sys-locale" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0" -dependencies = [ - "libc", -] - -[[package]] -name = "taffy" -version = "0.3.11" -source = "git+https://github.com/DioxusLabs/taffy?rev=7781c70#7781c70241f7f572130c13106f2a869a9cf80885" -dependencies = [ - "arrayvec", - "grid", - "num-traits", - "slotmap", -] - -[[package]] -name = "temp-dir" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc1ee6eef34f12f765cb94725905c6312b6610ab2b0940889cfe58dae7bc3c72" - -[[package]] -name = "tempfile" -version = "3.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" -dependencies = [ - "cfg-if", - "fastrand 2.1.1", - "once_cell", - "rustix 0.38.37", - "windows-sys 0.59.0", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d" -dependencies = [ - "smawk", - "unicode-linebreak", - "unicode-width", -] - -[[package]] -name = "textwrap" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" - -[[package]] -name = "thiserror" -version = "1.0.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "tiff" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" -dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tiny-skia" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" -dependencies = [ - "arrayref", - "arrayvec", - "bytemuck", - "cfg-if", - "log", - "png", - "tiny-skia-path", -] - -[[package]] -name = "tiny-skia-path" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", -] - -[[package]] -name = "tiny-xlib" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d52f22673960ad13af14ff4025997312def1223bfa7c8e4949d099e6b3d5d1c" -dependencies = [ - "as-raw-xcb-connection", - "ctor-lite", - "libloading", - "pkg-config", - "tracing", -] - -[[package]] -name = "tinystr" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", -] - -[[package]] -name = "tinyvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio 1.0.2", - "parking_lot 0.12.3", - "pin-project-lite", - "signal-hook-registry", - "socket2 0.5.7", - "tokio-macros", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "tokio-stream" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_datetime" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.6.0", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.22.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" -dependencies = [ - "indexmap 2.6.0", - "toml_datetime", - "winnow 0.6.20", -] - -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - -[[package]] -name = "ttf-parser" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" - -[[package]] -name = "ttf-parser" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" - -[[package]] -name = "ttf-parser" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5902c5d130972a0000f60860bfbf46f7ca3db5391eddfedd1b8728bd9dc96c0e" - -[[package]] -name = "type-map" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" -dependencies = [ - "rustc-hash 1.1.0", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "uds_windows" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" -dependencies = [ - "memoffset 0.9.1", - "tempfile", - "winapi", -] - -[[package]] -name = "unic-langid" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" -dependencies = [ - "unic-langid-impl", -] - -[[package]] -name = "unic-langid-impl" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" -dependencies = [ - "serde", - "tinystr", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" - -[[package]] -name = "unicode-bidi-mirroring" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" - -[[package]] -name = "unicode-ccc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" - -[[package]] -name = "unicode-ident" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" - -[[package]] -name = "unicode-linebreak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" - -[[package]] -name = "unicode-script" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-vo" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "url" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "url-builder" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c560d19163937c53680c515b82a9311c5a796691c67890b8ad579423123e194" - -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "ustr" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e904a2279a4a36d2356425bb20be271029cc650c335bc82af8bfae30085a3d0" -dependencies = [ - "ahash", - "byteorder", - "lazy_static", - "parking_lot 0.12.3", - "serde", -] - -[[package]] -name = "usvg" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84ea542ae85c715f07b082438a4231c3760539d902e11d093847a0b22963032" -dependencies = [ - "base64 0.22.1", - "data-url", - "flate2", - "fontdb 0.18.0", - "imagesize", - "kurbo 0.11.1", - "log", - "pico-args", - "roxmltree", - "rustybuzz", - "simplecss", - "siphasher 1.0.1", - "strict-num", - "svgtypes", - "tiny-skia-path", - "unicode-bidi", - "unicode-script", - "unicode-vo", - "xmlwriter", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" -dependencies = [ - "cfg-if", - "once_cell", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.82", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" - -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wayland-backend" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" -dependencies = [ - "cc", - "downcast-rs", - "rustix 0.38.37", - "scoped-tls", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-client" -version = "0.31.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3f45d1222915ef1fd2057220c1d9d9624b7654443ea35c3877f7a52bd0a5a2d" -dependencies = [ - "bitflags 2.6.0", - "rustix 0.38.37", - "wayland-backend", - "wayland-scanner", -] - -[[package]] -name = "wayland-csd-frame" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" -dependencies = [ - "bitflags 2.6.0", - "cursor-icon", - "wayland-backend", -] - -[[package]] -name = "wayland-cursor" -version = "0.31.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a94697e66e76c85923b0d28a0c251e8f0666f58fc47d316c0f4da6da75d37cb" -dependencies = [ - "rustix 0.38.37", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-protocols" -version = "0.32.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5755d77ae9040bb872a25026555ce4cb0ae75fd923e90d25fba07d81057de0" -dependencies = [ - "bitflags 2.6.0", - "wayland-backend", - "wayland-client", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-plasma" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0a41a6875e585172495f7a96dfa42ca7e0213868f4f15c313f7c33221a7eff" -dependencies = [ - "bitflags 2.6.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-wlr" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad87b5fd1b1d3ca2f792df8f686a2a11e3fe1077b71096f7a175ab699f89109" -dependencies = [ - "bitflags 2.6.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.31.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" -dependencies = [ - "proc-macro2", - "quick-xml", - "quote", -] - -[[package]] -name = "wayland-sys" -version = "0.31.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09" -dependencies = [ - "dlib", - "log", - "once_cell", - "pkg-config", -] - -[[package]] -name = "web-sys" -version = "0.3.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "weezl" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" - -[[package]] -name = "wgpu" -version = "22.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d1c4ba43f80542cf63a0a6ed3134629ae73e8ab51e4b765a67f3aa062eb433" -dependencies = [ - "arrayvec", - "cfg_aliases 0.1.1", - "document-features", - "js-sys", - "log", - "naga", - "parking_lot 0.12.3", - "profiling", - "raw-window-handle", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core" -version = "22.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a" -dependencies = [ - "arrayvec", - "bit-vec", - "bitflags 2.6.0", - "cfg_aliases 0.1.1", - "document-features", - "indexmap 2.6.0", - "log", - "naga", - "once_cell", - "parking_lot 0.12.3", - "profiling", - "raw-window-handle", - "rustc-hash 1.1.0", - "smallvec", - "thiserror", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-hal" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6bbf4b4de8b2a83c0401d9e5ae0080a2792055f25859a02bf9be97952bbed4f" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set", - "bitflags 2.6.0", - "block", - "cfg_aliases 0.1.1", - "core-graphics-types", - "d3d12", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-allocator", - "gpu-descriptor", - "hassle-rs", - "js-sys", - "khronos-egl", - "libc", - "libloading", - "log", - "metal", - "naga", - "ndk-sys 0.5.0+25.2.9519653", - "objc", - "once_cell", - "parking_lot 0.12.3", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "rustc-hash 1.1.0", - "smallvec", - "thiserror", - "wasm-bindgen", - "web-sys", - "wgpu-types", - "winapi", -] - -[[package]] -name = "wgpu-types" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d" -dependencies = [ - "bitflags 2.6.0", - "js-sys", - "web-sys", -] - -[[package]] -name = "widestring" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" - -[[package]] -name = "winapi" -version = "0.3.9" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "displaydoc", + "zerovec", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "typenum" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] -name = "winapi-util" -version = "0.1.9" +name = "ucd-trie" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "unicode-ident" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] -name = "window_clipboard" -version = "0.4.1" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13#a83bf83784276aaa882ef13555295a2ad9edd265" -dependencies = [ - "clipboard-win", - "clipboard_macos", - "clipboard_wayland", - "clipboard_x11", - "dnd", - "mime 0.1.0", - "raw-window-handle", - "thiserror", -] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] -name = "windows" -version = "0.52.0" +name = "url" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ - "windows-core 0.52.0", - "windows-targets 0.52.6", + "form_urlencoded", + "idna", + "percent-encoding", ] [[package]] -name = "windows" -version = "0.54.0" +name = "utf16_iter" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" -dependencies = [ - "windows-core 0.54.0", - "windows-implement", - "windows-interface", - "windows-targets 0.52.6", -] +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" [[package]] -name = "windows-core" -version = "0.52.0" +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "windows-core" -version = "0.54.0" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" -dependencies = [ - "windows-result", - "windows-targets 0.52.6", -] +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] -name = "windows-implement" -version = "0.53.0" +name = "vcpkg" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] -name = "windows-interface" -version = "0.53.0" +name = "version_check" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.82", -] +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "windows-result" -version = "0.1.2" +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" -dependencies = [ - "windows-targets 0.52.6", -] +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] -name = "windows-sys" -version = "0.45.0" +name = "winapi-util" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-targets 0.42.2", + "windows-sys 0.59.0", ] [[package]] @@ -6265,21 +1065,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-targets" version = "0.48.5" @@ -6311,12 +1096,6 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -6329,12 +1108,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -6347,12 +1120,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -6371,12 +1138,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -6389,12 +1150,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -6407,12 +1162,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -6425,12 +1174,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -6444,334 +1187,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winit" -version = "0.30.5" -source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13#b1852274c0251d7f24ba2cb32fa53812b37b1c79" -dependencies = [ - "ahash", - "android-activity", - "atomic-waker", - "bitflags 2.6.0", - "block2", - "bytemuck", - "calloop", - "cfg_aliases 0.2.1", - "concurrent-queue", - "core-foundation", - "core-graphics", - "cursor-icon", - "dpi", - "js-sys", - "libc", - "memmap2 0.9.5", - "ndk", - "objc2", - "objc2-app-kit", - "objc2-foundation", - "objc2-ui-kit", - "orbclient", - "percent-encoding", - "pin-project", - "raw-window-handle", - "redox_syscall 0.4.1", - "rustix 0.38.37", - "sctk-adwaita", - "smithay-client-toolkit", - "smol_str", - "tracing", - "unicode-segmentation", - "wasm-bindgen", - "wasm-bindgen-futures", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-plasma", - "web-sys", - "web-time", - "windows-sys 0.52.0", - "x11-dl", - "x11rb", - "xkbcommon-dl", -] - -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" -dependencies = [ - "memchr", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x11rb" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" -dependencies = [ - "as-raw-xcb-connection", - "gethostname", - "libc", - "libloading", - "once_cell", - "rustix 0.38.37", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" - -[[package]] -name = "xcursor" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" - -[[package]] -name = "xdg" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" - -[[package]] -name = "xdg-home" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "xkbcommon" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13867d259930edc7091a6c41b4ce6eee464328c6ff9659b7e4c668ca20d4c91e" -dependencies = [ - "libc", - "memmap2 0.8.0", - "xkeysym", -] - -[[package]] -name = "xkbcommon-dl" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" -dependencies = [ - "bitflags 2.6.0", - "dlib", - "log", - "once_cell", - "xkeysym", -] - -[[package]] -name = "xkeysym" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "xml-rs" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" - -[[package]] -name = "xmlwriter" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" - -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" - -[[package]] -name = "yazi" -version = "0.1.6" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" [[package]] -name = "zbus" -version = "3.15.2" +name = "writeable" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" -dependencies = [ - "async-broadcast 0.5.1", - "async-process 1.8.1", - "async-recursion", - "async-trait", - "byteorder", - "derivative", - "enumflags2", - "event-listener 2.5.3", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix 0.26.4", - "once_cell", - "ordered-stream", - "rand", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tokio", - "tracing", - "uds_windows", - "winapi", - "xdg-home", - "zbus_macros 3.15.2", - "zbus_names 2.6.1", - "zvariant 3.15.2", -] +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] -name = "zbus" -version = "4.4.0" +name = "yoke" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ - "async-broadcast 0.7.1", - "async-executor", - "async-fs", - "async-io 2.3.4", - "async-lock 3.4.0", - "async-process 2.3.0", - "async-recursion", - "async-task", - "async-trait", - "blocking", - "enumflags2", - "event-listener 5.3.1", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix 0.29.0", - "ordered-stream", - "rand", "serde", - "serde_repr", - "sha1", - "static_assertions", - "tokio", - "tracing", - "uds_windows", - "windows-sys 0.52.0", - "xdg-home", - "zbus_macros 4.4.0", - "zbus_names 3.0.0", - "zvariant 4.2.0", -] - -[[package]] -name = "zbus_macros" -version = "3.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "regex", - "syn 1.0.109", - "zvariant_utils 1.0.1", + "stable_deref_trait", + "yoke-derive", + "zerofrom", ] [[package]] -name = "zbus_macros" -version = "4.4.0" +name = "yoke-derive" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ - "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.82", - "zvariant_utils 2.1.0", -] - -[[package]] -name = "zbus_names" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" -dependencies = [ - "serde", - "static_assertions", - "zvariant 3.15.2", -] - -[[package]] -name = "zbus_names" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" -dependencies = [ - "serde", - "static_assertions", - "zvariant 4.2.0", + "syn", + "synstructure", ] [[package]] -name = "zeno" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697" - -[[package]] -name = "zerocopy" -version = "0.7.35" +name = "zerofrom" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ - "byteorder", - "zerocopy-derive", + "zerofrom-derive", ] [[package]] -name = "zerocopy-derive" -version = "0.7.35" +name = "zerofrom-derive" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn", + "synstructure", ] [[package]] @@ -6781,86 +1250,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] -name = "zune-inflate" -version = "0.2.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "zvariant" -version = "3.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" -dependencies = [ - "byteorder", - "enumflags2", - "libc", - "serde", - "static_assertions", - "zvariant_derive 3.15.2", -] - -[[package]] -name = "zvariant" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" -dependencies = [ - "endi", - "enumflags2", - "serde", - "static_assertions", - "url", - "zvariant_derive 4.2.0", -] - -[[package]] -name = "zvariant_derive" -version = "3.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", - "zvariant_utils 1.0.1", -] - -[[package]] -name = "zvariant_derive" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" -dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.82", - "zvariant_utils 2.1.0", -] - -[[package]] -name = "zvariant_utils" -version = "1.0.1" +name = "zerovec" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "yoke", + "zerofrom", + "zerovec-derive", ] [[package]] -name = "zvariant_utils" -version = "2.1.0" +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index c7ffc2e..96b3ab8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,43 +1,24 @@ -[package] -name = "devmode" -description = "A project management utility for developers" -version = "0.3.0" -edition.workspace = true -authors.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -categories.workspace = true -keywords.workspace = true - -[dependencies] -libset = "=0.1.2" -clap = { version = "3.2.14", features = ["derive"] } -requestty = "0.4.1" -colored = "2.0.0" -regex = "1.5.4" -git2 = "0.14.4" -git2_credentials = "0.8.0" -cmd_lib = "1.1.0" -walkdir = "2.3.2" -serde = { version = "1.0.126", features = ["derive"] } -fs_extra = "1.2.0" -derive_setters = "0.1.6" -git-url-parse = "0.4.4" -thiserror = "1.0.64" -log = "0.4.22" - [workspace.package] -version = "0.1.0" +version = "0.4.0" authors = ["Eduardo Flores "] +description = "Devmode is a project management utility for developers." edition = "2021" -license = "MIT" +license = "GPL-3.0-only" repository = "https://github.com/edfloreshz/devmode/" homepage = "https://devmode.edfloreshz.dev/" categories = ["development-tools"] keywords = ["development", "utility"] -exclude = [".idea", ".github", ".vscode"] +exclude = [".idea", ".github", ".vscode", "assets"] +readme = "README.md" [workspace] resolver = "2" -members = ["src/cli", "src/ui"] +members = ["cli"] + +[workspace.dependencies] +git2 = "0.19.0" +git2_credentials = "0.14.0" +git-url-parse = "0.4.4" +thiserror = "2.0.9" +log = "0.4.22" +dirs = "5.0.1" diff --git a/src/ui/LICENSE b/LICENSE similarity index 99% rename from src/ui/LICENSE rename to LICENSE index f288702..e72bfdd 100644 --- a/src/ui/LICENSE +++ b/LICENSE @@ -671,4 +671,4 @@ into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ce5d725 --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +
+ +

Dev(mode)

+ + crate + + + downloads + + + devmode-git + +
+ +**Devmode** is a project management utility for developers. + +``` +Usage: dm + +Commands: + cl Clones a repository in a specific folder structure. + help Print this message or the help of the given subcommand(s) + +Options: + -h, --help Print help + -V, --version Print version +``` + +## Installation + +#### Cargo + +``` +cargo install devmode +``` +#### Arch Linux +``` +paru -S devmode-git +``` +## Cloning + +When you clone a repository it will be stored to your filesystem using a specific folder structure. + +You can also use ` dm cl` + +``` +$HOME +└── Developer + └── host + └── owner + └── repo +``` + +| Syntax | Description | Example | +| ---------------- | ------------------------- | ------------------------------------------------ | +| `dm clone ` | Clone by providing a URL. | `dm clone https://github.com/edfloreshz/devmode` | + +# Dependencies +- openssl + +## Proposals + +If you have a proposal for a new feature, open a new [issue](https://github.com/edfloreshz/devmode/issues). diff --git a/assets/img/devmode.png b/assets/img/devmode.png new file mode 100644 index 0000000..522b089 Binary files /dev/null and b/assets/img/devmode.png differ diff --git a/assets/img/logo.png b/assets/img/logo.png deleted file mode 100644 index 556f82b..0000000 Binary files a/assets/img/logo.png and /dev/null differ diff --git a/cli/Cargo.toml b/cli/Cargo.toml new file mode 100644 index 0000000..ac0a8b1 --- /dev/null +++ b/cli/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "devmode" +version.workspace = true +description.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +homepage.workspace = true +categories.workspace = true +keywords.workspace = true +exclude.workspace = true + +[[bin]] +name = "dm" +path = "src/main.rs" + +[dependencies] +thiserror = { workspace = true } +log = { workspace = true } +pretty_env_logger = "0.5.0" +clap = { version = "4.5.23", features = ["derive", "cargo"] } +git2 = { workspace = true } +git2_credentials = { workspace = true } +git-url-parse = { workspace = true } +dirs = { workspace = true } diff --git a/cli/src/cli.rs b/cli/src/cli.rs new file mode 100644 index 0000000..f08b1c2 --- /dev/null +++ b/cli/src/cli.rs @@ -0,0 +1,57 @@ +use crate::Error; +use clap::{Parser, Subcommand}; +use devmode::{services, CliError}; + +#[derive(Parser, Debug)] +#[clap(name = "Devmode")] +#[clap(about = "Devmode is a project management utility for developers.")] +#[clap(author, version, about, arg_required_else_help = true)] +pub struct Cli { + #[command(subcommand)] + pub commands: Commands, +} + +#[derive(Subcommand, Debug)] +pub enum Commands { + #[command( + about = "Clones a repository in a specific folder structure.", + name = "cl" + )] + Clone { + #[arg(help = "Provide either a Git or a Git .")] + url: String, + }, +} + +impl Cli { + pub fn run(&self) -> Result<(), Error> { + match &self.commands { + Commands::Clone { url } => match services::clone(&url) { + Ok(_) => { + log::info!("Repository cloned to {}", url); + Ok(()) + } + Err(services::Error::Clone(services::CloneError::PathExists(path))) => { + if overwrite() { + std::fs::remove_dir_all(&path)?; + log::info!("Removing existing repository at {}", path.display()); + log::info!("Cloning {}...", url.to_string()); + services::clone(&url)?; + log::info!("Repository cloned to {}", path.display()); + Ok(()) + } else { + Err(CliError::RepositoryExists.into()) + } + } + Err(e) => Err(e.into()), + }, + } + } +} + +fn overwrite() -> bool { + println!("Found existing repository, overwrite it? y/n"); + let mut input = String::new(); + std::io::stdin().read_line(&mut input).unwrap(); + matches!(input.trim(), "y" | "Y") +} diff --git a/cli/src/error.rs b/cli/src/error.rs new file mode 100644 index 0000000..43a43d8 --- /dev/null +++ b/cli/src/error.rs @@ -0,0 +1,19 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error("{0}")] + Services(#[from] crate::services::Error), + #[error("{0}")] + Parse(#[from] clap::Error), + #[error("{0}")] + Io(#[from] std::io::Error), + #[error("{0}")] + Cli(#[from] CliError), +} + +#[derive(Error, Debug)] +pub enum CliError { + #[error("Repository already exists")] + RepositoryExists, +} diff --git a/cli/src/lib.rs b/cli/src/lib.rs new file mode 100644 index 0000000..54ee7ec --- /dev/null +++ b/cli/src/lib.rs @@ -0,0 +1,4 @@ +mod error; +pub use error::*; + +pub mod services; diff --git a/cli/src/main.rs b/cli/src/main.rs new file mode 100644 index 0000000..09bc24f --- /dev/null +++ b/cli/src/main.rs @@ -0,0 +1,20 @@ +use ::devmode::Error; +use clap::Parser; +use cli::Cli; + +pub mod cli; + +fn main() -> Result<(), Error> { + if cfg!(debug_assertions) { + std::env::set_var("RUST_LOG", "trace"); + } else { + std::env::set_var("RUST_LOG", "info"); + } + + pretty_env_logger::init(); + let cli = Cli::parse(); + if let Err(e) = cli.run() { + log::error!("{e}") + } + Ok(()) +} diff --git a/cli/src/services/clone.rs b/cli/src/services/clone.rs new file mode 100644 index 0000000..f9098a8 --- /dev/null +++ b/cli/src/services/clone.rs @@ -0,0 +1,40 @@ +use git2_credentials::CredentialHandler; +use git_url_parse::GitUrl; + +use super::{CloneError, Error}; + +pub fn clone(url: &str) -> Result<(), Error> { + let url = GitUrl::parse(url)?; + + let path = match (&url.host, &url.owner, &url.name) { + (Some(host), Some(owner), name) if !owner.is_empty() => dirs::home_dir() + .unwrap() + .join("Developer") + .join(host) + .join(owner) + .join(name), + _ => return Err(CloneError::InvalidUrl.into()), + }; + + if path.exists() { + return Err(CloneError::PathExists(path).into()); + } + + let mut cb = git2::RemoteCallbacks::new(); + let config = git2::Config::open_default()?; + let mut credential_handler = CredentialHandler::new(config); + + cb.credentials(move |url, username, allowed| { + credential_handler.try_next_credential(url, username, allowed) + }); + + let mut fetch_options = git2::FetchOptions::new(); + fetch_options.remote_callbacks(cb); + + let mut builder = git2::build::RepoBuilder::new(); + builder.fetch_options(fetch_options); + + builder.clone(url.to_string().as_str(), &path)?; + + Ok(()) +} diff --git a/cli/src/services/error.rs b/cli/src/services/error.rs new file mode 100644 index 0000000..35c633b --- /dev/null +++ b/cli/src/services/error.rs @@ -0,0 +1,21 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum Error { + #[error("{0}")] + GirUrlParseError(#[from] git_url_parse::GitUrlParseError), + #[error("{0}")] + Git(#[from] git2::Error), + #[error("{0}")] + Clone(#[from] CloneError), +} + +#[derive(Error, Debug)] +pub enum CloneError { + #[error("Failed to clone repository")] + FailedToCloneRepository, + #[error("This is not a valid Git repository url")] + InvalidUrl, + #[error("Path already exists.")] + PathExists(std::path::PathBuf), +} diff --git a/cli/src/services/mod.rs b/cli/src/services/mod.rs new file mode 100644 index 0000000..c70d213 --- /dev/null +++ b/cli/src/services/mod.rs @@ -0,0 +1,5 @@ +mod clone; +pub use clone::*; + +mod error; +pub use error::*; diff --git a/src/cli/.gitignore b/src/cli/.gitignore deleted file mode 100644 index 4b8c47c..0000000 --- a/src/cli/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -/target/ - -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html - -# These are backup files generated by rustfmt -**/*.rs.bk -*/target -*.out -/.out/ -/.idea -*.DS_Store -.vscode -.tasks -.vimspector.json diff --git a/src/cli/Cargo.toml b/src/cli/Cargo.toml deleted file mode 100644 index 9fe54f5..0000000 --- a/src/cli/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "devmode-cli" -description = "Devmode is a project management utility for developers." -version.workspace = true -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -categories.workspace = true -keywords.workspace = true - -[[bin]] -name = "dm" -path = "src/main.rs" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -devmode = { path = "../../" } -libset = "0.1.2" -clap = { version = "3.2.14", features = ["derive"] } -requestty = "0.4.1" -regex = "1.5.4" -git2 = "0.14.4" -git2_credentials = "0.8.0" -cmd_lib = "1.1.0" -walkdir = "2.3.2" -serde = { version = "1.0.126", features = ["derive"] } -fs_extra = "1.2.0" -url-builder = "0.1.1" -log = "0.4.22" -pretty_env_logger = "0.5.0" diff --git a/src/cli/LICENSE b/src/cli/LICENSE deleted file mode 100644 index d159169..0000000 --- a/src/cli/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/src/cli/README.md b/src/cli/README.md deleted file mode 100644 index 673ae20..0000000 --- a/src/cli/README.md +++ /dev/null @@ -1,180 +0,0 @@ -
- -

Dev(mode)

- - build - - - crate - - - downloads - - - chat on telegram - - - devmode-git - -
- -**Dev(mode)** is a project management utility for developers. - -``` -USAGE: - dm [SUBCOMMAND] - -FLAGS: - -h, --help Prints help information - -V, --version Prints version information - -SUBCOMMANDS: - clone Clones a repository in a specific folder structure. - config Write changes to your configuration. - fork Clones a repo and sets the upstream to your fork. - help Print this message or the help of the given subcommand(s) - open Opens a project on your selected text editor. - workspace Create workspaces to store your projects. -``` - -## Installation - -#### Cargo - -``` -cargo install devmode -``` -#### Arch Linux -``` -paru -S devmode-git -``` - -## Configuration -The `config` command will help you set your app preferences. - -When you first run `dm config` you will be prompted with a setup asking you to set your settings. - -After that, you can: - -| Syntax | Description | -| --------------------- | ----------------------------------------------------------| -| `dm config --all` | Prompt the first-time setup to configure everything. | -| `dm config --editor` | Save your prefered text editor to the open projects with. | -| `dm config --host` | Save your Git provider to clone projects from. | -| `dm config --owner` | Save your Git username to identify yourself. | -| `dm config --show` | Print the current settings. | -| `dm config --map` | Save your currently cloned project paths. | - - -## Workspaces -Think of workspaces as containers for your repositories, you can classify and manipulate them in different ways. - -To create a new workspace use: - -`dm workspace ` - -When you create a workspace, you can use it to clone a repository to that workspace. - -`dm clone --workspace ` - -You can `add` and `remove` existing repositories to a workspace. - -`dm workspace --add | --remove ` - -If you no longer need a workspace, you can either move the repositories to another workspace manually or delete the workspace and all repositories inside it will return to the owner's folder. - -`dm workspace --delete` - -You can also rename workspaces, the folders will be updated accordingly. - -`dm workspace --rename ` - -You can list your existing workspaces. - -`dm workspace --list` - -| Syntax | Description | Example | -| ------- | ----------- | ------- | -| `dm workspace ` | Create a new workspace. | `dm workspace office` | -| `dm workspace --add ` | Add repository to workspace. | `dm workspace office --add devmode` | -| `dm workspace --remove ` | Remove repository from workspace. | `dm workspace office --remove devmode` | -| `dm workspace --delete` | Delete a workspace. | `dm workspace office --delete` | -| `dm workspace --rename ` | Rename a workspace. | `dm workspace office --rename work` | -| `dm workspace --list` | List all workspaces. | `dm workspace --list` | - -## Cloning - -**Dev(mode)** facilitates repository storage and organization in your filesystem. - -### How it works - -When you clone a repository it will be stored to your filesystem using a specific folder structure. - -You can also use ` dm cl` - -``` -$HOME -└── Developer - └── host - └── owner - └── workspace? - └── repo -``` - -This makes it easier for you to find repositories and allows `dm` to open them by just specifying the name of the -project. - -| Syntax | Description | Example | -| --------------------------------------------- | ----------------------------------- | ------------------------------------------------- | -| `dm clone` | Clone a repository using the setup. | `dm clone` | -| `dm clone ` | Clone by providing a URL. | `dm clone https://github.com/edfloreshz/devmode` | -| `dm clone ` | Clone by providing parameters. | `dm clone github edfloreshz devmode` | -| `dm clone --workspace ` | Clone into a specified workspace. | `dm clone gh edfloreshz devmode -w office` | - -The following commands only work when you run `dm config`. - -| Syntax | Description | Example | -| ----------- | ------ | ------- | -| `dm config ` | Clone by providing a repo name. | `dm clone devmode` | -| `dm clone ` | Clone multiple repositories. | `dm clone devmode sensei` | - -## Fork - -Clone a repo and set the upstream url in one command. - -Use the `--upstream` or `-u` to set the upstream repository, then specify the repository that you wish to configure. - -| Description | Syntax | Example | -| ----------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------ | -| `dm fork -u ` | Clone and set the upstream repository. | `dm fork gh edfloreshz cosmic -u https://github.com/pop-os/cosmic` | -| `dm fork -u ` | Using URLs. | `dm fork https://github.com/edfloreshz/cosmic -u https://github.com/pop-os/cosmic` | -| `dm fork --upstream ` | Just using the upstream URL. | `dm fork --upstream https://github.com/pop-os/cosmic` | - -## Open a project - -Opens a project with your selected text editor. - -You can also use ` dm o` - -| Description | Syntax | Example | -| ------------------- | --------------- | ----------------- | -| `dm open ` | Open a project. | `dm open devmode` | - -If two or more projects with the same name are found, you will have to choose which one to open. - -# Dependencies -- openssl - -## Fedora -``` -sudo dnf install -y openssl-devel -``` - -## Ubuntu -``` -sudo apt install -y libssl-sdev -``` - -## Proposals - -If you have a proposal for a new feature, open a new [issue](https://github.com/edfloreshz/devmode/issues). diff --git a/src/cli/src/cli.rs b/src/cli/src/cli.rs deleted file mode 100644 index 027ae7c..0000000 --- a/src/cli/src/cli.rs +++ /dev/null @@ -1,458 +0,0 @@ -use clap::{Parser, Subcommand}; -use devmode::action::Action; -use devmode::config::Config; -use devmode::workspace::{Workspace, WorkspaceOptions}; -use devmode::{DevmodeError, Error}; -use fs_extra::dir::CopyOptions; -use fs_extra::{dir, move_items}; -use regex::bytes::Regex; -use std::fs::remove_dir_all; -use std::path::PathBuf; -use url_builder::URLBuilder; - -use crate::input::{ - clone_setup, config_all, config_editor, config_host, config_owner, create_workspace, - fork_setup, overwrite, select, select_repo, -}; -use devmode::fork::ForkAction; -use devmode::host::Host; -use devmode::project::{matching_paths_for, OpenAction}; -use devmode::settings::Settings; -use devmode::{clone::CloneAction, constants::patterns::GIT_URL}; - -#[derive(Parser, Debug)] -#[clap(name = "(Dev)mode", version = "0.3.0")] -#[clap(author = "Eduardo F. ")] -#[clap(about = "Dev(mode) is a project management utility for developers.")] -#[clap(arg_required_else_help = true)] -pub struct Cli { - #[clap(subcommand)] - pub commands: Commands, -} - -#[derive(Subcommand, Debug)] -pub enum Commands { - #[clap( - about = "Clones a repository in a specific folder structure.", - alias = "cl" - )] - Clone { - #[clap(help = "Provide either a Git or a Git .")] - #[clap(min_values = 1)] - #[clap(max_values = 3)] - args: Vec, - #[clap( - help = "Select a workspace to store the repo in.", - short = 'w', - long = "workspace", - takes_value = true - )] - workspace: Option, - }, - #[clap( - about = "Opens a project on your selected text editor.", - alias = "o", - arg_required_else_help = true - )] - Open { - #[clap(help = "Provide a project name")] - #[clap(takes_value = true, required = true)] - project: String, - }, - #[clap( - about = "Fetch the latest changes for a project.", - alias = "u", - arg_required_else_help = true - )] - Update { - #[clap(help = "Provide a project name")] - #[clap(takes_value = true, required = true)] - project: String, - }, - #[clap( - about = "Clones a repo and sets the upstream to your fork.", - alias = "fk" - )] - Fork { - #[clap( - help = "Provide either a Git or a Git .", - min_values = 1 - )] - args: Vec, - #[clap( - help = "Set the upstream to your fork ", - short = 'u', - long = "upstream" - )] - #[clap(takes_value = true, required = true)] - upstream: String, - }, - #[clap( - about = "Write changes to your configuration.", - alias = "cf", - arg_required_else_help = true - )] - Config { - #[clap(help = "Show the current configuration.", short = 's', long = "show")] - show: bool, - #[clap(help = "Configure your settings.", short = 'a', long = "all")] - all: bool, - #[clap(help = "Set preferred code editor.", short = 'e', long = "editor")] - editor: bool, - #[clap(help = "Set preferred git username.", short = 'o', long = "owner")] - owner: bool, - #[clap(help = "Set preferred Git host to clone projects from.", long = "host")] - host: bool, - }, - #[clap( - about = "Create workspaces to store your projects.", - alias = "ws", - arg_required_else_help = true - )] - Workspace { - #[clap(help = "The name of the workspace")] - name: Option, - #[clap(help = "Add a workspace", short = 'a', long = "add")] - add: bool, - #[clap(help = "Delete a workspace", short = 'd', long = "delete")] - delete: bool, - #[clap( - help = "Rename a workspace", - short = 'r', - long = "rename", - takes_value = true - )] - rename: Option, - #[clap( - help = "Include a repo in a workspace", - short = 'i', - long = "include", - takes_value = true - )] - include: Option, - #[clap( - help = "Remove a repo from a workspace", - short = 'm', - long = "remove", - takes_value = true - )] - remove: Option, - #[clap(help = "List all workspaces", short = 'l', long = "list")] - list: bool, - #[clap(help = "Show information about a workspace", long = "info")] - info: bool, - }, -} - -impl Cli { - pub fn run(&self) -> Result<(), Error> { - let rx = Regex::new(GIT_URL)?; - match &self.commands { - Commands::Clone { args, workspace } => Cli::clone(args.clone(), workspace.to_owned()), - Commands::Open { project } => Cli::open(project), - Commands::Update { project } => Cli::update(project), - Commands::Fork { args, upstream } => Cli::fork(args, upstream, rx), - Commands::Config { - show, - all, - editor, - owner, - host, - } => Cli::config(Config { - show: *show, - all: *all, - editor: *editor, - owner: *owner, - host: *host, - none: !show && !all && !editor && !owner && !host, - }), - Commands::Workspace { - name, - add, - delete, - rename, - include, - remove, - list, - info, - } => Cli::workspace(WorkspaceOptions { - name: name.to_owned(), - add: *add, - delete: *delete, - rename: rename.to_owned(), - include: include.to_owned(), - remove: remove.to_owned(), - list: *list, - info: *info, - }), - } - } - - fn clone(args: Vec, workspace: Option) -> Result<(), Error> { - let mut url = URLBuilder::new(); - url.set_protocol("https"); - let mut clone = if args.is_empty() { - clone_setup()? - } else if Settings::current().is_some() && args.len().eq(&1) { - let Some(options) = Settings::current() else { - return Err(Error::Devmode(DevmodeError::AppSettingsNotFound)); - }; - - url.set_host(Host::from(&options.host).url()) - .add_route(&options.owner); - if let Some(repo) = args.first() { - url.add_route(repo); - } - - CloneAction::new(&url.build()) - } else if args.len().eq(&1) { - if let Some(url) = args.first() { - CloneAction::new(url) - } else { - return Err(Error::Devmode(DevmodeError::NoUrlProvided)); - } - } else if args.len().eq(&3) { - if let Some(host) = args.first() { - url.set_host(Host::from(host).url()); - } - if let Some(owner) = args.get(1) { - url.add_route(owner); - } - if let Some(repo) = args.get(2) { - url.add_route(repo); - } - CloneAction::new(&url.build()) - } else { - return Err(Error::Devmode(DevmodeError::InvalidCommand)); - }; - if let Some(workspace) = workspace { - clone.set_workspace(workspace); - } - - if let Err(error) = clone.run() { - match error { - Error::Git(error) => match error.code() { - git2::ErrorCode::Exists => { - let path = clone.get_local_path()?; - println!( - "Error: {} exists and is not an empty directory", - path.display() - ); - if overwrite()? { - remove_dir_all(&path)?; - clone.run()?; - } - } - _ => log::error!("{error}"), - }, - error => log::error!("{error}"), - } - }; - - Ok(()) - } - - fn open(project: &str) -> Result<(), Error> { - let paths = matching_paths_for(project)?; - if paths.is_empty() { - Err(Error::Devmode(DevmodeError::NoProjectFound)) - } else if paths.len() > 1 { - let path = select_repo(paths)?; - OpenAction::new(project).open(path) - } else { - OpenAction::new(project).open( - paths - .get(0) - .ok_or(Error::Devmode(DevmodeError::PathNotFound))? - .clone(), - ) - } - } - - fn update(project: &str) -> Result<(), Error> { - let paths = matching_paths_for(project)?; - if paths.is_empty() { - Err(Error::Devmode(DevmodeError::NoProjectFound)) - } else if paths.len() > 1 { - let path = select_repo(paths)?; - OpenAction::new(project).update(path) - } else { - OpenAction::new(project).update( - paths - .get(0) - .ok_or(Error::Devmode(DevmodeError::PathNotFound))? - .clone(), - ) - } - } - - fn fork(args: &[String], upstream: &str, rx: Regex) -> Result<(), Error> { - let action = if args.is_empty() { - fork_setup()? - } else if rx.is_match(args.first().unwrap().as_bytes()) { - ForkAction::parse_url(args.first().unwrap(), rx, upstream.to_string())? - } else if args.len().eq(&1) { - let options = - Settings::current().ok_or(Error::Devmode(DevmodeError::AppSettingsNotFound))?; - let host = Host::from(&options.host); - let repo = args - .first() - .map(|a| a.to_string()) - .ok_or(Error::Generic("Failed to get repo"))?; - ForkAction::from(host, upstream.to_string(), options.owner, repo) - } else { - let host = Host::from(args.first().unwrap()); - let owner = args - .get(1) - .map(|a| a.to_string()) - .ok_or(Error::Generic("Failed to get owner"))?; - let repo = args - .get(2) - .map(|a| a.to_string()) - .ok_or(Error::Generic("Failed to get repo"))?; - ForkAction::from(host, upstream.to_string(), owner, repo) - }; - action.run() - } - fn config(config: Config) -> Result<(), Error> { - if config.all || config.none { - if get_settings().is_err() { - println!("First time setup! 🥳\n"); - Settings::init()?; - } - let settings = config_all()?; - settings.write(false)?; - } - if config.editor { - let settings = config_editor()?; - settings.write(false)? - } - if config.owner { - let settings = config_owner()?; - settings.write(false)? - } - if config.host { - let settings = config_host()?; - settings.write(false)? - } - if config.show { - let settings = get_settings()?; - settings.show(); - } - Ok(()) - } - - fn workspace(arguments: WorkspaceOptions) -> Result<(), Error> { - let mut settings = - Settings::current().ok_or(Error::Devmode(DevmodeError::AppSettingsNotFound))?; - let Some(ref workspace_name) = arguments.name else { - return if arguments.list { - let workspaces = settings.workspaces.names; - println!("Currently available workspaces:"); - for workspace in workspaces { - println!("- {}", workspace); - } - Ok(()) - } else { - Err(Error::Devmode(DevmodeError::WorkspaceRequired)) - }; - }; - if arguments.add { - if settings.workspaces.names.contains(workspace_name) { - return Err(Error::Devmode(DevmodeError::WorkspaceExists( - workspace_name.clone(), - ))); - } - let create = create_workspace()?; - if create { - settings.workspaces.names.push(workspace_name.clone()); - settings.write(true)?; - println!("Workspace {workspace_name} was added.") - } - } else if settings.workspaces.names.contains(workspace_name) { - let mut workspace = Workspace::new(&workspace_name); - if arguments.delete { - workspace.delete()?; - println!("Workspace {workspace_name} was successfully deleted."); - } else if let Some(ref to) = arguments.rename { - workspace.rename(to)?; - println!("Workspace renamed from {workspace_name} to {to}."); - } else if let Some(ref project_name) = arguments.include { - let paths: Vec = matching_paths_for(project_name)? - .iter() - .cloned() - .filter(|path| !path.display().to_string().contains(workspace_name)) - .collect(); - - let project = if paths.len() == 0 { - return Err(Error::Devmode(DevmodeError::ProjectNotFound)); - } else if paths.len() > 1 { - let paths: Vec = - paths.iter().map(|s| s.display().to_string()).collect(); - PathBuf::from(select( - "repo", - "Select the repository you want to open:", - paths, - )?) - } else { - paths[0].clone() - }; - let mut options = CopyOptions::new(); - let destination = project - .parent() - .ok_or(Error::Devmode(DevmodeError::PathNotFound))? - .join(&workspace_name); - - if destination.join(project_name).exists() { - options.overwrite = overwrite()?; - } - - if !destination.exists() { - std::fs::create_dir_all(&destination)?; - } - - move_items(&[project], destination, &options)?; - } else if let Some(ref project_name) = arguments.remove { - let paths: Vec = matching_paths_for(project_name)? - .iter() - .cloned() - .filter(|path| path.display().to_string().contains(workspace_name)) - .collect(); - let project = if paths.len() == 0 { - return Err(Error::Devmode(DevmodeError::ProjectNotFound)); - } else if paths.len() > 1 { - let paths: Vec = - paths.iter().map(|s| s.display().to_string()).collect(); - PathBuf::from(select( - "repo", - "Select the repository you want to open:", - paths, - )?) - } else { - paths[0].clone() - }; - let mut options = dir::CopyOptions::new(); - let to = project - .parent() - .ok_or(Error::Devmode(DevmodeError::PathNotFound))? - .parent() - .ok_or(Error::Devmode(DevmodeError::PathNotFound))?; - - if to.join(project_name).exists() { - options.overwrite = overwrite()?; - } - - move_items(&[project.clone()], to, &options)?; - } else if arguments.info { - workspace.info()?; - } else { - println!("Workspace `{workspace_name}` found."); - } - } - Ok(()) - } -} - -fn get_settings() -> Result { - Settings::current().ok_or(Error::Devmode(DevmodeError::AppSettingsNotFound)) -} diff --git a/src/cli/src/input.rs b/src/cli/src/input.rs deleted file mode 100644 index c293ccf..0000000 --- a/src/cli/src/input.rs +++ /dev/null @@ -1,169 +0,0 @@ -use std::path::PathBuf; - -use devmode::clone::CloneAction; -use devmode::constants::names::{CUSTOM_NAME, NONE, VIM_NAME, VSCODE_NAME}; -use devmode::editor::Editor; -use devmode::fork::ForkAction; -use devmode::host::Host; -use devmode::settings::Settings; -use devmode::DevmodeError; -use devmode::{application::Application, Error}; -use requestty::{Answer, Question}; -use url_builder::URLBuilder; - -pub fn confirm(message: &str, id: &str) -> Result { - let question = requestty::Question::confirm(id).message(message).build(); - let answer = requestty::prompt_one(question)?; - if let Answer::Bool(confirm) = answer { - Ok(confirm) - } else { - Err(Error::Unknown) - } -} - -pub fn input(key: &str, message: &str, err: &str) -> Result { - let question = Question::input(key) - .message(message) - .validate(|answer, _| { - if answer.is_empty() { - Err(err.into()) - } else { - Ok(()) - } - }) - .build(); - let answer = requestty::prompt_one(question)?; - if let Answer::String(output) = answer { - Ok(output) - } else { - Err(Error::Unknown) - } -} - -pub fn select(key: &str, message: &str, options: Vec>) -> Result { - let question = Question::select(key) - .message(message) - .choices(options) - .build(); - let answer = requestty::prompt_one(question)?; - if let Answer::ListItem(item) = answer { - Ok(item.text) - } else { - Err(Error::Unknown) - } -} - -pub fn clone_setup() -> Result { - let mut url = URLBuilder::new(); - url.set_protocol("https"); - let host = select("host", "Choose your Git host:", vec!["GitHub", "GitLab"])?; - url.set_host(Host::from(&host).url()); - let owner = input("owner", "Git username:", "Please enter a Git username.")?; - url.add_route(&owner); - let repo = input("repo", "Git repo name:", "Please enter a Git repo name.")?; - url.add_route(&repo); - - let mut clone = CloneAction::new(&url.build()); - - let settings = Settings::current().ok_or(Error::Devmode(DevmodeError::AppSettingsNotFound))?; - let mut options: Vec<&str> = settings - .workspaces - .names - .iter() - .map(|s| s.as_str()) - .collect(); - options.insert(0, NONE); - let workspace = select("workspace", "Pick a workspace", options)?; - if !workspace.eq(NONE) { - clone.set_workspace(workspace); - } - Ok(clone) -} - -pub fn fork_setup() -> Result { - let mut fork = ForkAction::new(); - let host = select("host", "Choose your Git host:", vec!["GitHub", "GitLab"])?; - fork.host = Host::from(&host); - let owner = input("owner", "Git username:", "Please enter a Git username.")?; - fork.owner = owner; - let repo = input("repo", "Git repo name:", "Please enter a Git repo name.")?; - fork.repo = repo; - let repo = input("upstream", "Upstream URL:", "Please enter an upstream URL.")?; - fork.upstream = repo; - Ok(fork) -} - -/// Runs the configuration setup again. -pub fn config_all() -> Result { - let settings = Settings::new( - config_host()?.host, - config_owner()?.owner, - config_editor()?.editor, - ); - Ok(settings) -} - -pub fn config_owner() -> Result { - let owner = input("owner", "Git username:", "Please enter a Git username.")?; - let mut settings = Settings::current().unwrap_or_default(); - settings.owner = owner; - Ok(settings) -} - -pub fn config_host() -> Result { - let host = select("host", "Choose your Git host:", vec!["GitHub", "GitLab"])?; - let mut settings = Settings::current().unwrap_or_default(); - settings.host = host; - Ok(settings) -} - -pub fn config_editor() -> Result { - let editor = select( - "editor", - "Choose your favorite editor:", - vec![VIM_NAME, VSCODE_NAME, CUSTOM_NAME], - )?; - let editor = if editor.eq(CUSTOM_NAME) { - let command = input( - "command", - "Editor command:", - "Please enter a editor command.", - )?; - Editor::custom(command) - } else { - Editor::new(Application::from(&editor)) - }; - let current = Settings::current(); - let settings = match current { - None => Settings { - editor, - ..Default::default() - }, - Some(mut settings) => { - settings.editor = editor; - settings - } - }; - Ok(settings) -} - -pub fn select_repo(paths: Vec) -> Result { - let paths: Vec = paths.iter().map(|s| s.display().to_string()).collect(); - let repo = if paths.len() > 1 { - select("repo", "Select the repository you want to open:", paths)? - } else { - paths[0].clone() - }; - - Ok(PathBuf::from(repo)) -} - -pub fn create_workspace() -> Result { - let create = confirm("Would you like to create this workspace?", "workspace")?; - Ok(create) -} - -pub fn overwrite() -> Result { - let overwrite = confirm("Found existing repository, overwrite it?", "overwrite")?; - Ok(overwrite) -} diff --git a/src/cli/src/main.rs b/src/cli/src/main.rs deleted file mode 100644 index 5db5ca2..0000000 --- a/src/cli/src/main.rs +++ /dev/null @@ -1,24 +0,0 @@ -use clap::StructOpt; - -use cli::Cli; -use devmode::Error; - -mod cli; -mod input; - -fn main() -> Result<(), Error> { - start_logger(); - let cli = Cli::parse(); - if let Err(e) = cli.run() { - match e { - Error::Devmode(error) => println!("{error}"), - _ => log::error!("{}", e), - } - } - Ok(()) -} - -pub fn start_logger() { - std::env::set_var("RUST_LOG", "dm=info"); - pretty_env_logger::init(); -} diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index 3c5e621..0000000 --- a/src/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod shared; -pub use shared::*; diff --git a/src/shared/action.rs b/src/shared/action.rs deleted file mode 100644 index 6bc87f5..0000000 --- a/src/shared/action.rs +++ /dev/null @@ -1,5 +0,0 @@ -use crate::Error; - -pub trait Action { - fn run(&mut self) -> Result<(), Error>; -} diff --git a/src/shared/application.rs b/src/shared/application.rs deleted file mode 100644 index 2243dc6..0000000 --- a/src/shared/application.rs +++ /dev/null @@ -1,72 +0,0 @@ -use std::fmt::{Display, Formatter}; -use std::path::PathBuf; -use std::process::Command; - -use crate::{DevmodeStatus, Error}; -use cmd_lib::run_cmd; -use serde::{Deserialize, Serialize}; - -use crate::constants::commands::*; -use crate::constants::names::*; - -#[derive(Serialize, Default, Deserialize, Debug, Clone, Eq, PartialEq)] -pub enum Application { - VSCode, - Vim, - Custom, - #[default] - None, -} - -impl Application { - pub fn command(&self) -> String { - String::from(match self { - Application::VSCode => VSCODE_CMD, - Application::Vim => VIM_CMD, - _ => "", - }) - } - pub fn run(&self, path: PathBuf) -> Result<(), Error> { - let arg = path.display().to_string(); - match self { - Application::VSCode => { - if cfg!(target_os = "windows") { - Command::new("cmd") - .args(["/C", format!("code {arg}").as_str()]) - .output()?; - } else { - run_cmd!(code $arg)?; - } - } - Application::Vim => { - if cfg!(target_os = "windows") { - Command::new("cmd") - .args(["/C", format!("vim {arg}").as_str()]) - .output()?; - } else { - run_cmd!(vim $arg)?; - } - } - _ => {} - } - Ok(()) - } - pub fn from(key: &str) -> Self { - match key.to_lowercase().as_str() { - "vim" => Application::Vim, - "vscode" => Application::VSCode, - _ => Application::None, - } - } -} - -impl Display for Application { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - match self { - Application::VSCode => write!(f, "{}", VSCODE_NAME), - Application::Vim => write!(f, "{}", VIM_NAME), - Application::Custom => write!(f, "{}", CUSTOM_NAME), - _ => write!(f, "{}", DevmodeStatus::NoEditorSet), - } - } -} diff --git a/src/shared/clone.rs b/src/shared/clone.rs deleted file mode 100644 index 810c2ac..0000000 --- a/src/shared/clone.rs +++ /dev/null @@ -1,97 +0,0 @@ -use std::fs::remove_dir_all; -use std::path::PathBuf; - -use derive_setters::*; -use git2::ErrorCode; -use git2_credentials::CredentialHandler; -use git_url_parse::GitUrl; -use libset::routes::home; - -use crate::action::Action; -use crate::host::Host; -use crate::{error, git_pull, Error}; - -#[derive(Debug, Default, Clone, Setters)] -#[setters(prefix = "set_")] -#[setters(borrow_self)] -#[setters(strip_option)] -pub struct CloneAction { - #[setters(skip)] - pub url: Option, - pub workspace: Option, -} - -impl Action for CloneAction { - fn run(&mut self) -> Result<(), Error> { - self.clone_repo() - } -} - -impl CloneAction { - pub fn new(url: &str) -> Self { - Self { - url: GitUrl::parse(url).ok(), - workspace: None, - } - } - - pub fn clone_repo(&self) -> Result<(), Error> { - let Some(url) = &self.url else { - return error::error("Url is not in the correct format."); - }; - let path = self.get_local_path()?; - let clone = git2::build::RepoBuilder::new() - .fetch_options(CloneAction::get_fetch_options()?) - .clone(&url.to_string(), &path); - - if let Err(err) = clone { - match err.code() { - ErrorCode::GenericError => { - if let Some(parent) = path.parent() { - let children: Vec<_> = std::fs::read_dir(parent)?.collect(); - if children.is_empty() { - remove_dir_all(parent)?; - } - } - } - _ => return Err(Error::Git(err)), - } - } - - git_pull::status_short(path.to_str().unwrap().to_string())?; - Ok(()) - } - - pub fn get_local_path(&self) -> Result { - let Some(url) = &self.url else { - return error::error("Url is not in the correct format."); - }; - if url.host.is_none() || url.owner.is_none() { - return error::error("Url is not in the correct format."); - } - let path = home() - .join("Developer") - .join(Host::from(url.host.as_ref().unwrap()).to_string()) - .join(url.owner.as_ref().unwrap()) - .join(self.workspace.as_ref().unwrap_or(&String::default())) - .join(url.name.clone()); - - Ok(path) - } - - pub fn get_fetch_options<'a>() -> Result, Error> { - let mut callbacks = git2::RemoteCallbacks::new(); - let git_config = git2::Config::open_default()?; - let mut credential_handler = CredentialHandler::new(git_config); - callbacks.credentials(move |url, username, allowed| { - credential_handler.try_next_credential(url, username, allowed) - }); - - let mut fetch_options = git2::FetchOptions::new(); - fetch_options - .remote_callbacks(callbacks) - .download_tags(git2::AutotagOption::All) - .update_fetchhead(true); - Ok(fetch_options) - } -} diff --git a/src/shared/config.rs b/src/shared/config.rs deleted file mode 100644 index 8757c4f..0000000 --- a/src/shared/config.rs +++ /dev/null @@ -1,9 +0,0 @@ -#[derive(Debug)] -pub struct Config { - pub show: bool, - pub all: bool, - pub editor: bool, - pub owner: bool, - pub host: bool, - pub none: bool, -} diff --git a/src/shared/constants.rs b/src/shared/constants.rs deleted file mode 100644 index 9aba6fe..0000000 --- a/src/shared/constants.rs +++ /dev/null @@ -1,30 +0,0 @@ -pub mod patterns { - pub const GIT_URL: &str = r#"((utils@|http(s)?://)(?P[\w.@]+)([/:]))(?P[\w,\-_]+)/(?P[\w,\-_]+)(.utils)?((/)?)"#; - pub const REGULAR_GIT_URL: &str = r#"(?:git@|https://)(?P:?github|gitlab)[.]com[:/](?P[^\s,]+)[/](?P[^\s,.]+)([.]git)?"#; - pub const ORG_GIT_URL: &str = r#"(?:git@|https://)(?Pgitlab[.][^\s]+[.][^\s]+)[:/](?P[^\s]+)[/](?P[^\s,.]+)([.]git)?"#; -} - -pub const OS_SLASH: &str = if cfg!(target_os = "windows") { - "\\" -} else { - "/" -}; - -pub mod names { - pub const VSCODE_NAME: &str = "Visual Studio Code"; - pub const VIM_NAME: &str = "Vim"; - pub const CUSTOM_NAME: &str = "Custom"; - pub const GH_NAME: &str = "GitHub"; - pub const GL_NAME: &str = "GitLab"; - pub const NONE: &str = "None"; -} - -pub mod url { - pub const GH_URL: &str = "github.com"; - pub const GL_URL: &str = "gitlab.com"; -} - -pub mod commands { - pub const VSCODE_CMD: &str = "code"; - pub const VIM_CMD: &str = "vim"; -} diff --git a/src/shared/editor.rs b/src/shared/editor.rs deleted file mode 100644 index 5ff9a05..0000000 --- a/src/shared/editor.rs +++ /dev/null @@ -1,22 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::application::Application; - -#[derive(Serialize, Deserialize, Debug, Clone, Default, Eq, PartialEq)] -pub struct Editor { - pub app: Application, - pub command: String, -} - -impl Editor { - pub fn new(app: Application) -> Self { - let command = app.command(); - Editor { app, command } - } - pub fn custom(command: String) -> Self { - Editor { - app: Application::Custom, - command, - } - } -} diff --git a/src/shared/error.rs b/src/shared/error.rs deleted file mode 100644 index 789637c..0000000 --- a/src/shared/error.rs +++ /dev/null @@ -1,71 +0,0 @@ -use std::str::Utf8Error; - -use thiserror::Error; - -#[derive(Error, Debug)] -pub enum Error { - #[error("Devmode error: {0}")] - Devmode(#[from] DevmodeError), - #[error("Argument parsing error: {0}")] - Parse(#[from] clap::Error), - #[error("IO error: {0}")] - Io(#[from] std::io::Error), - #[error("Git error: {0}")] - Git(#[from] git2::Error), - #[error("Regex error: {0}")] - Regex(#[from] regex::Error), - #[error("Walkdir error: {0}")] - Walkdir(#[from] walkdir::Error), - #[error("Utf8 error: {0}")] - Utf8(#[from] Utf8Error), - #[error("Requestty error: {0}")] - Requestty(#[from] requestty::ErrorKind), - #[error("fs_extra error: {0}")] - FsExtra(#[from] fs_extra::error::Error), - #[error("Error: {0}")] - Generic(&'static str), - #[error("String error: {0}")] - String(String), - #[error("An unknown error ocurred")] - Unknown, -} - -pub fn error(msg: &'static str) -> Result { - Err(Error::Generic(msg)) -} - -#[derive(Error, Debug)] -pub enum DevmodeError { - #[error("No project found.")] - NoProjectFound, - #[error("No settings were changed.")] - NoUrlProvided, - #[error("Invalid command.")] - InvalidCommand, - #[error("The current app options could not be found.\nRun `dm cf --all` to reconfigure them")] - AppSettingsNotFound, - #[error("Failed to write settings")] - FailedToWriteSettings, - #[error("Failed to parse settings")] - FailedToParseSettings, - #[error("Failed to clone repository")] - FailedToCloneRepository, - #[error("Failed to set remote repository")] - FailedToSetRemote, - #[error("Failed to get branch")] - FailedToGetBranch, - #[error("Failed to find workspace")] - WorkspaceMissing, - #[error("Please provide a workspace")] - WorkspaceRequired, - #[error("Workspace {0} already exists")] - WorkspaceExists(String), - #[error("Failed to find project")] - ProjectNotFound, - #[error("Multiple projects found. Please specify the project name.")] - MultipleProjectsFound, - #[error("Path not found")] - PathNotFound, - #[error("File name not found")] - FileNameNotFound, -} diff --git a/src/shared/fork.rs b/src/shared/fork.rs deleted file mode 100644 index d43ba1a..0000000 --- a/src/shared/fork.rs +++ /dev/null @@ -1,114 +0,0 @@ -use std::path::Path; - -use git2::Repository; -use libset::routes::home; -use regex::bytes::Regex; - -use crate::host::Host; -use crate::{error, Error}; - -pub struct ForkAction { - pub host: Host, - pub upstream: String, - pub owner: String, - pub repo: String, - pub repo_path: String, -} - -impl Default for ForkAction { - fn default() -> Self { - Self::new() - } -} - -impl ForkAction { - pub fn new() -> Self { - Self { - host: Host::None, - upstream: "".to_string(), - owner: "".to_string(), - repo: "".to_string(), - repo_path: "".to_string(), - } - } - pub fn from(host: Host, upstream: String, owner: String, repo: String) -> Self { - Self { - host, - upstream, - owner, - repo, - repo_path: String::new(), - } - } - pub fn url(&self) -> String { - format!("{}/{}/{}", self.host.url(), self.owner, self.repo) - } - pub fn run(&self) -> Result<(), Error> { - if let Host::None = self.host { - error::error( - "You can't do this unless you set your configuration with ` dm config -a`\n\ - In the meantime, you can clone by specifying ", - ) - } else if self.owner.is_empty() { - error::error("Missing arguments: ") - } else if self.repo.is_empty() { - error::error("Missing arguments: ") - } else if self.upstream.is_empty() { - error::error( - "Missing arguments: . \ - For example ... -u https://github.com/user/upstream", - ) - } else { - match self.clone_repo() { - Ok(path) => self.set_upstream(path), - Err(e) => Err(e), - } - } - } - pub fn clone_repo(&self) -> Result { - let path = format!( - "{}/Developer/{}/{}/{}", - home().display(), - self.host, - self.owner, - self.repo - ); - println!("Cloning {}/{} from {}...", self.owner, self.repo, self.host); - Repository::clone(self.url().as_str(), &path)?; - Ok(path) - } - - pub fn parse_url(url: &str, rx: Regex, upstream: String) -> Result { - let captures = rx - .captures(url.as_ref()) - .ok_or(Error::Generic("Failed to get url captures"))?; - let host = captures - .get(4) - .map(|m| std::str::from_utf8(m.as_bytes())) - .ok_or(Error::Generic("Failed to get argument"))??; - let owner = captures - .get(6) - .map(|m| std::str::from_utf8(m.as_bytes())) - .ok_or(Error::Generic("Failed to get argument"))??; - let repo = captures - .get(7) - .map(|m| std::str::from_utf8(m.as_bytes())) - .ok_or(Error::Generic("Failed to get argument"))??; - Ok(Self::from( - Host::from(host), - upstream, - owner.into(), - repo.into(), - )) - } - - pub fn set_upstream(&self, path: String) -> Result<(), Error> { - println!("Setting {} as upstream...", self.upstream); - if path.is_empty() { - println!("Seems that you haven't cloned the repository locally."); - } - let project = Repository::open(Path::new(&path))?; - project.remote("upstream", &self.upstream)?; - Ok(()) - } -} diff --git a/src/shared/git_pull.rs b/src/shared/git_pull.rs deleted file mode 100644 index c37a269..0000000 --- a/src/shared/git_pull.rs +++ /dev/null @@ -1,319 +0,0 @@ -use git2::Error as GitError; -use git2::ErrorCode; -use git2::Repository; -use git2::SubmoduleIgnore; -use std::io; -use std::io::Write; -use std::path::Path; - -use crate::error::Error; -use crate::DevmodeError; - -pub fn pull(repo_path: &Path) -> Result<(), Error> { - let remote_name = "origin"; - let repo = Repository::open(repo_path)?; - let remote_branch = get_branch(&repo)?; - let remote_branch = remote_branch.as_str(); - let mut remote = repo.find_remote(remote_name)?; - let fetch_commit = fetch(&repo, &[remote_branch], &mut remote)?; - merge(&repo, remote_branch, fetch_commit)?; - - Ok(()) -} - -fn merge<'a>( - repo: &'a Repository, - remote_branch: &str, - fetch_commit: git2::AnnotatedCommit<'a>, -) -> Result<(), GitError> { - let analysis = repo.merge_analysis(&[&fetch_commit])?; - if analysis.0.is_fast_forward() { - println!("Doing fast forward"); - let refname = format!("refs/heads/{}", remote_branch); - match repo.find_reference(&refname) { - Ok(mut r) => { - fast_forward(repo, &mut r, &fetch_commit)?; - } - Err(_) => { - repo.reference( - &refname, - fetch_commit.id(), - true, - &format!("Setting {} to {}", remote_branch, fetch_commit.id()), - )?; - repo.set_head(&refname)?; - repo.checkout_head(Some( - git2::build::CheckoutBuilder::default() - .allow_conflicts(true) - .conflict_style_merge(true) - .force(), - ))?; - } - } - } else if analysis.0.is_normal() { - let head_commit = repo.reference_to_annotated_commit(&repo.head()?)?; - normal_merge(repo, &head_commit, &fetch_commit)?; - } else { - println!("Nothing to do..."); - } - - Ok(()) -} - -fn normal_merge( - repo: &Repository, - local: &git2::AnnotatedCommit, - remote: &git2::AnnotatedCommit, -) -> Result<(), GitError> { - let local_tree = repo.find_commit(local.id())?.tree()?; - let remote_tree = repo.find_commit(local.id())?.tree()?; - let ancestor = repo - .find_commit(repo.merge_base(local.id(), remote.id())?)? - .tree()?; - let mut idx = repo.merge_trees(&ancestor, &local_tree, &remote_tree, None)?; - - if idx.has_conflicts() { - println!("Merge conficts detected..."); - repo.checkout_index(Some(&mut idx), None)?; - return Ok(()); - } - let result_tree = repo.find_tree(idx.write_tree_to(repo)?)?; - let msg = format!("Merge: {} info {}", remote.id(), local.id()); - let sig = repo.signature()?; - let local_commit = repo.find_commit(local.id())?; - let remote_commit = repo.find_commit(remote.id())?; - let _merge_comit = repo.commit( - Some("HEAD"), - &sig, - &sig, - &msg, - &result_tree, - &[&local_commit, &remote_commit], - ); - repo.checkout_head(None)?; - - Ok(()) -} - -fn fast_forward( - repo: &Repository, - lb: &mut git2::Reference, - rc: &git2::AnnotatedCommit, -) -> Result<(), GitError> { - let name = match lb.name() { - Some(s) => s.to_string(), - None => String::from_utf8_lossy(lb.name_bytes()).to_string(), - }; - let msg = format!("Fast-Forward: Setting {} to id: {}", name, rc.id()); - println!("{}", msg); - lb.set_target(rc.id(), &msg)?; - repo.set_head(&name)?; - repo.checkout_head(Some(git2::build::CheckoutBuilder::default().force()))?; - Ok(()) -} - -fn get_branch(repo: &Repository) -> Result { - let head = match repo.head() { - Ok(head) => Some(head), - Err(ref e) - if e.code().eq(&ErrorCode::UnbornBranch) || e.code().eq(&ErrorCode::NotFound) => - { - None - } - Err(e) => return Err(Error::Git(e)), - }; - let head = head.as_ref().and_then(|h| h.shorthand()); - match head { - Some(branch) => Ok(String::from(branch)), - None => Err(Error::Devmode(DevmodeError::FailedToGetBranch)), - } -} - -fn fetch<'a>( - repo: &'a git2::Repository, - refs: &[&str], - remote: &'a mut git2::Remote, -) -> Result, GitError> { - let mut cb = git2::RemoteCallbacks::new(); - - cb.transfer_progress(|stats| { - if stats.received_objects().eq(&stats.total_objects()) { - print!( - "Resolving deltas {}/{}\r", - stats.indexed_deltas(), - stats.total_deltas() - ); - } else if stats.total_objects() > 0 { - print!( - "Received {}/{} objects ({}) in {} bytes\r", - stats.received_objects(), - stats.total_objects(), - stats.indexed_deltas(), - stats.received_bytes() - ); - } - io::stdout().flush().unwrap(); - true - }); - - let mut fo = git2::FetchOptions::new(); - fo.remote_callbacks(cb); - fo.download_tags(git2::AutotagOption::All); - println!("Fetching {} for repo", remote.name().unwrap()); - remote.fetch(refs, Some(&mut fo), None)?; - - let stats = remote.stats(); - if stats.local_objects() > 0 { - println!( - "\rReceived {}/{} objects in {} bytes (used {} local \ - objects)", - stats.indexed_objects(), - stats.total_objects(), - stats.received_bytes(), - stats.local_objects() - ); - } else { - println!( - "\rReceived {}/{} objects in {} bytes", - stats.indexed_objects(), - stats.total_objects(), - stats.received_bytes() - ); - } - - let fetch_head = repo.find_reference("FETCH_HEAD")?; - repo.reference_to_annotated_commit(&fetch_head) -} - -pub fn status_short(path: String) -> Result<(), GitError> { - let repo = Repository::open(&path)?; - if repo.is_bare() { - return Err(GitError::from_str( - "Cannot report status on bare repository.", - )); - } - let statuses = repo.statuses(None)?; - - let branch = get_branch(&repo); - log::info!( - "Branch: {}", - branch.unwrap_or_else(|_| "HEAD (no branch)".to_string()), - ); - - let modules = repo.submodules()?; - for sm in modules { - log::info!( - "Submodule '{}' at {}", - sm.name().unwrap(), - sm.path().display() - ); - } - - for entry in statuses - .iter() - .filter(|e| e.status() != git2::Status::CURRENT) - { - let mut istatus = match entry.status() { - s if s.contains(git2::Status::INDEX_NEW) => 'A', - s if s.contains(git2::Status::INDEX_MODIFIED) => 'M', - s if s.contains(git2::Status::INDEX_DELETED) => 'D', - s if s.contains(git2::Status::INDEX_RENAMED) => 'R', - s if s.contains(git2::Status::INDEX_TYPECHANGE) => 'T', - _ => ' ', - }; - let mut wstatus = match entry.status() { - s if s.contains(git2::Status::WT_NEW) => { - if istatus.eq(&' ') { - istatus = '?'; - } - '?' - } - s if s.contains(git2::Status::WT_MODIFIED) => 'M', - s if s.contains(git2::Status::WT_DELETED) => 'D', - s if s.contains(git2::Status::WT_RENAMED) => 'R', - s if s.contains(git2::Status::WT_TYPECHANGE) => 'T', - _ => ' ', - }; - - if entry.status().contains(git2::Status::IGNORED) { - istatus = '!'; - wstatus = '!'; - } - if istatus.eq(&'?') && wstatus.eq(&'?') { - continue; - } - let mut extra = ""; - - let status = entry.index_to_workdir().and_then(|diff| { - let ignore = SubmoduleIgnore::Unspecified; - diff.new_file() - .path_bytes() - .and_then(|s| std::str::from_utf8(s).ok()) - .and_then(|name| repo.submodule_status(name, ignore).ok()) - }); - if let Some(status) = status { - if status.contains(git2::SubmoduleStatus::WD_MODIFIED) { - extra = " (new commits)"; - } else if status.contains(git2::SubmoduleStatus::WD_INDEX_MODIFIED) - || status.contains(git2::SubmoduleStatus::WD_WD_MODIFIED) - { - extra = " (modified content)"; - } else if status.contains(git2::SubmoduleStatus::WD_UNTRACKED) { - extra = " (untracked content)"; - } - } - - let (mut a, mut b, mut c) = (None, None, None); - if let Some(diff) = entry.head_to_index() { - a = diff.old_file().path(); - b = diff.new_file().path(); - } - if let Some(diff) = entry.index_to_workdir() { - a = a.or_else(|| diff.old_file().path()); - b = b.or_else(|| diff.old_file().path()); - c = diff.new_file().path(); - } - - match (istatus, wstatus) { - ('R', 'R') => println!( - "RR {} {} {}{}", - a.unwrap().display(), - b.unwrap().display(), - c.unwrap().display(), - extra - ), - ('R', w) => println!( - "R{} {} {}{}", - w, - a.unwrap().display(), - b.unwrap().display(), - extra - ), - (i, 'R') => println!( - "{}R {} {}{}", - i, - a.unwrap().display(), - c.unwrap().display(), - extra - ), - (i, w) => println!("{}{} {}{}", i, w, a.unwrap().display(), extra), - } - } - - for entry in statuses - .iter() - .filter(|e| e.status().eq(&git2::Status::WT_NEW)) - { - println!( - "?? {}", - entry - .index_to_workdir() - .unwrap() - .old_file() - .path() - .unwrap() - .display() - ); - } - Ok(()) -} diff --git a/src/shared/host.rs b/src/shared/host.rs deleted file mode 100644 index 4aca8ce..0000000 --- a/src/shared/host.rs +++ /dev/null @@ -1,45 +0,0 @@ -use std::fmt::{Display, Formatter}; - -use crate::constants::names::*; -use crate::constants::url::{GH_URL, GL_URL}; - -#[derive(Debug, Clone)] -pub enum Host { - GitHub, - GitLab, - None, -} - -impl Host { - pub fn url<'a>(&self) -> &'a str { - match self { - Host::GitHub => GH_URL, - Host::GitLab => GL_URL, - Host::None => "", - } - } - pub fn from(text: &str) -> Self { - let text = text.to_lowercase(); - if text.contains("github") || text.eq(&"gh") { - Host::GitHub - } else if text.contains("gitlab") || text.eq(&"gl") { - Host::GitLab - } else { - Host::None - } - } -} - -impl Display for Host { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!( - f, - "{}", - match self { - Host::GitHub => GH_NAME, - Host::GitLab => GL_NAME, - Host::None => NONE, - } - ) - } -} diff --git a/src/shared/mod.rs b/src/shared/mod.rs deleted file mode 100644 index 05722c6..0000000 --- a/src/shared/mod.rs +++ /dev/null @@ -1,16 +0,0 @@ -pub mod action; -pub mod application; -pub mod clone; -pub mod config; -pub mod constants; -pub mod editor; -pub mod error; -pub mod fork; -pub mod git_pull; -pub mod host; -pub mod project; -pub mod settings; -pub mod status; -pub mod workspace; -pub use error::{error, DevmodeError, Error}; -pub use status::{report, DevmodeStatus}; diff --git a/src/shared/project.rs b/src/shared/project.rs deleted file mode 100644 index a2792b2..0000000 --- a/src/shared/project.rs +++ /dev/null @@ -1,99 +0,0 @@ -use std::path::PathBuf; -use std::process::Command; - -use cmd_lib::*; -use libset::routes::home; -use walkdir::{DirEntry, WalkDir}; - -use crate::application::Application; -use crate::error::Error; -use crate::settings::Settings; -use crate::{git_pull, DevmodeError, DevmodeStatus}; - -use super::constants::OS_SLASH; - -pub struct OpenAction { - pub name: String, -} - -impl OpenAction { - pub fn new(name: &str) -> Self { - Self { - name: name.to_string(), - } - } - - pub fn open(&self, paths: PathBuf) -> Result<(), Error> { - open_project(paths) - } - - pub fn update(&self, path: PathBuf) -> Result<(), Error> { - update_project(&self.name, path) - } -} - -pub fn open_project(path: PathBuf) -> Result<(), Error> { - let options = Settings::current().ok_or(Error::Devmode(DevmodeError::AppSettingsNotFound))?; - let route = path.display().to_string(); - println!("Opening {} in {}...", route, options.editor.app); - if let Application::Custom = options.editor.app { - let command_editor = options.editor.command; - if cfg!(target_os = "windows") { - Command::new("cmd") - .args(["/C", format!("{command_editor} {route}").as_str()]) - .output()?; - } else { - run_cmd!($command_editor $route)?; - } - } else { - options.editor.app.run(path.clone())?; - } - Ok(()) -} - -pub fn update_project(name: &str, path: PathBuf) -> Result<(), Error> { - crate::report(DevmodeStatus::RepositoryUpdated(name.to_string())); - git_pull::pull(path.as_path()) -} - -fn is_hidden(entry: &DirEntry) -> bool { - entry - .file_name() - .to_str() - .map(|s| s.starts_with(".")) - .unwrap_or(false) -} - -pub fn project_paths() -> Result, Error> { - let paths: Vec = WalkDir::new(home().join("Developer")) - .max_depth(6) - .min_depth(3) - .contents_first(true) - .into_iter() - .filter_entry(|e| e.path().is_dir() && !is_hidden(e) && e.path().join(".git").exists()) - .map(|entry| entry.unwrap().path().to_path_buf()) - .collect(); - for (i, path) in paths.iter().enumerate() { - println!("{i}: {path:?}") - } - Ok(paths) -} - -pub fn matching_paths_for(project: &str) -> Result, Error> { - let paths: Vec = project_paths()? - .iter() - .filter(|e| matches_project(e, project)) - .map(|entry| entry.to_path_buf()) - .collect(); - Ok(paths) -} - -fn matches_project(entry: &PathBuf, path: &str) -> bool { - entry - .display() - .to_string() - .split(OS_SLASH) - .last() - .unwrap() - .contains(path) -} diff --git a/src/shared/settings.rs b/src/shared/settings.rs deleted file mode 100644 index 293dd1b..0000000 --- a/src/shared/settings.rs +++ /dev/null @@ -1,85 +0,0 @@ -use colored::Colorize; -use libset::element::Content; -use libset::{config::Config, format::FileFormat, new_file}; -use serde::{Deserialize, Serialize}; - -use crate::editor::Editor; -use crate::{DevmodeError, DevmodeStatus, Error}; - -#[derive(Serialize, Deserialize, Debug, Clone, Default, Eq, PartialEq)] -pub struct Settings { - pub host: String, - pub owner: String, - pub editor: Editor, - pub workspaces: Workspaces, -} - -#[derive(Serialize, Deserialize, Debug, Clone, Default, Eq, PartialEq)] -pub struct Workspaces { - pub names: Vec, -} - -impl Content for Settings {} - -impl Settings { - pub fn new(host: String, owner: String, editor: Editor) -> Self { - Settings { - host, - owner, - editor, - workspaces: Workspaces { names: vec![] }, - } - } - pub fn init() -> Result<(), Error> { - Config::new("devmode") - .author("Eduardo Flores") - .about("Development management app.") - .version("0.1.1") - .add( - new_file!("settings.toml") - .set_format(FileFormat::TOML) - .set_content(Box::new(Settings::default())), - ) - .add(new_file!("devpaths")) - .write() - .map_err(|e| Error::String(e.to_string()))?; - Ok(()) - } - pub fn write(&self, hide_output: bool) -> Result<(), Error> { - let current_settings = Settings::current(); - if current_settings.is_none() { - Config::set::("devmode/settings.toml", self.clone(), FileFormat::TOML) - .map_err(|e| Error::String(e.to_string()))?; - crate::report(DevmodeStatus::SettingsUpdated); - } else if self - != ¤t_settings.ok_or(Error::Devmode(DevmodeError::FailedToParseSettings))? - { - Config::set::("devmode/settings.toml", self.clone(), FileFormat::TOML) - .map_err(|e| Error::String(e.to_string()))?; - if !hide_output { - crate::report(DevmodeStatus::SettingsUpdated); - } - } else if !hide_output { - crate::report(DevmodeStatus::NoSettingsChanged); - } - Ok(()) - } - pub fn show(&self) { - println!( - "{}\n{}{}\n{}{}\n{}{}\n{}{:?}", - Colorize::yellow("Current settings:"), - Colorize::green("Host: "), - self.host, - Colorize::red("Owner: "), - self.owner, - Colorize::blue("Editor: "), - self.editor.app, - Colorize::purple("Workspaces: "), - self.workspaces.names - ); - } - - pub fn current() -> Option { - Config::get::("devmode/settings.toml", FileFormat::TOML) - } -} diff --git a/src/shared/status.rs b/src/shared/status.rs deleted file mode 100644 index 8895d38..0000000 --- a/src/shared/status.rs +++ /dev/null @@ -1,30 +0,0 @@ -use std::fmt::Display; - -#[derive(Debug)] -pub enum DevmodeStatus { - RepositoryCloned, - RepositoryUpdated(String), - NoSettingsChanged, - SettingsUpdated, - UnableToMapUrl, - NoEditorSet, -} - -impl Display for DevmodeStatus { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - DevmodeStatus::RepositoryCloned => write!(f, "Repository cloned successfully! 🎉️"), - DevmodeStatus::RepositoryUpdated(name) => write!(f, "Updating project: {}...", name), - DevmodeStatus::NoSettingsChanged => write!(f, "No settings were changed"), - DevmodeStatus::SettingsUpdated => write!(f, "Settings updated"), - DevmodeStatus::UnableToMapUrl => write!(f, "Failed to map url"), - DevmodeStatus::NoEditorSet => { - write!(f, "No editor set, run `dm config -e` to configure it") - } - } - } -} - -pub fn report(status: DevmodeStatus) { - println!("{}", status); -} diff --git a/src/shared/workspace.rs b/src/shared/workspace.rs deleted file mode 100644 index 1e9ab42..0000000 --- a/src/shared/workspace.rs +++ /dev/null @@ -1,111 +0,0 @@ -use libset::routes::home; - -use super::{project::project_paths, settings::Settings, DevmodeError, Error}; - -#[derive(Debug)] -pub struct WorkspaceOptions { - pub name: Option, - pub add: bool, - pub delete: bool, - pub rename: Option, - pub include: Option, - pub remove: Option, - pub list: bool, - pub info: bool, -} - -pub struct Workspace { - name: String, - index: usize, - settings: Settings, -} - -impl Workspace { - pub fn new(name: &str) -> Self { - let settings = Settings::current().unwrap_or_default(); - let index = settings - .workspaces - .names - .iter() - .position(|ws| ws.eq(name)) - .unwrap(); - Self { - name: name.to_string(), - index, - settings, - } - } - - pub fn info(&self) -> Result<(), Error> { - let paths = project_paths()?; - println!("Repositories in workspace {}:", self.name); - paths - .iter() - .filter_map(|path| { - let parent_name = path.parent()?.file_name()?.to_str()?; - if parent_name == self.name { - Some(path) - } else { - None - } - }) - .for_each(|path| println!("{:?}", path)); - - Ok(()) - } - - pub fn delete(&mut self) -> Result<(), Error> { - let dev = home().join("Developer"); - for provider in std::fs::read_dir(dev)? { - for user in std::fs::read_dir(provider?.path())? { - let user = user?; - for repo_or_workspace in std::fs::read_dir(user.path())? { - let repo_or_workspace = repo_or_workspace?; - let repo_name = repo_or_workspace.file_name().to_str().unwrap().to_string(); - if self.settings.workspaces.names.contains(&repo_name) - && repo_name.eq(&self.name) - { - for repo in std::fs::read_dir(repo_or_workspace.path())? { - let repo = repo?; - fs_extra::dir::move_dir(repo.path(), user.path(), &Default::default())?; - } - std::fs::remove_dir_all(repo_or_workspace.path())?; - } - } - } - } - self.settings.workspaces.names.remove(self.index); - self.settings.write(true)?; - Ok(()) - } - - pub fn rename(&mut self, rename: &str) -> Result<(), Error> { - let dev = home().join("Developer"); - for provider in std::fs::read_dir(dev)? { - for user in std::fs::read_dir(provider?.path())? { - let user = user?; - for repo_or_workspace in std::fs::read_dir(user.path())? { - let repo_or_workspace = repo_or_workspace?; - let name = repo_or_workspace.file_name().to_str().unwrap().to_string(); - if self.settings.workspaces.names.contains(&name) { - std::fs::rename( - repo_or_workspace.path(), - repo_or_workspace.path().parent().unwrap().join(rename), - )?; - } - } - } - } - - let name = self - .settings - .workspaces - .names - .get_mut(self.index) - .ok_or(Error::Devmode(DevmodeError::WorkspaceMissing))?; - *name = rename.to_string(); - self.settings.write(true)?; - - Ok(()) - } -} diff --git a/src/ui/.gitignore b/src/ui/.gitignore deleted file mode 100644 index 73fab07..0000000 --- a/src/ui/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -debug/ -target/ - -# These are backup files generated by rustfmt -**/*.rs.bk - -# MSVC Windows builds of rustc generate these, which store debugging information -*.pdb diff --git a/src/ui/Cargo.toml b/src/ui/Cargo.toml deleted file mode 100644 index 8abca81..0000000 --- a/src/ui/Cargo.toml +++ /dev/null @@ -1,28 +0,0 @@ -[package] -name = "devmode-ui" -version = "0.3.0" -authors.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -homepage.workspace = true -categories.workspace = true -keywords.workspace = true -exclude.workspace = true - -[dependencies] -i18n-embed-fl = "0.8" -once_cell = "1.19.0" -open = "5.1.3" -rust-embed = "8.3.0" -slotmap = "1.0.7" -tokio = { version = "1.37.0", features = ["full"] } - -[dependencies.libcosmic] -git = "https://github.com/pop-os/libcosmic.git" -default-features = false -features = ["dbus-config", "tokio", "winit", "wgpu", "desktop"] - -[dependencies.i18n-embed] -version = "0.14" -features = ["fluent-system", "desktop-requester"] diff --git a/src/ui/README.md b/src/ui/README.md deleted file mode 100644 index 634c490..0000000 --- a/src/ui/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# COSMIC Application Template - -A template for COSMIC applications. - -## Getting Started - -To get started, click the "Use this template" button above. This will create a new repository in your account with the contents of this template. - -Once you have created a new repository from this template, you can clone it to your local machine and start developing your COSMIC application. - -## Development - -When you open the repository in your code editor, you will see a lot of comments in the code. These comments are there to help you get a basic understanding of what each part of the code does. - -Once you feel comfortable with it, refer back to the [COSMIC documentation](https://pop-os.github.io/libcosmic/cosmic/) for more information on how to build COSMIC applications. - -## Install - -To install your COSMIC application, you will need [just](https://github.com/casey/just), if you're on Pop!\_OS, you can install it with the following command: - -```sh -sudo apt install just -``` - -After you install it, you can run the following commands to build and install your application: - -```sh -just build-release -sudo just install -``` diff --git a/src/ui/i18n.toml b/src/ui/i18n.toml deleted file mode 100644 index 05c50ba..0000000 --- a/src/ui/i18n.toml +++ /dev/null @@ -1,4 +0,0 @@ -fallback_language = "en" - -[fluent] -assets_dir = "i18n" \ No newline at end of file diff --git a/src/ui/i18n/en/devmode_ui.ftl b/src/ui/i18n/en/devmode_ui.ftl deleted file mode 100644 index 50de750..0000000 --- a/src/ui/i18n/en/devmode_ui.ftl +++ /dev/null @@ -1,4 +0,0 @@ -app-title = COSMIC App Template -about = About -view = View -welcome = Welcome to COSMIC! ✨ diff --git a/src/ui/justfile b/src/ui/justfile deleted file mode 100644 index cca1ecf..0000000 --- a/src/ui/justfile +++ /dev/null @@ -1,112 +0,0 @@ -name := 'cosmic-app-template' -export APPID := 'dev.edfloreshz.Devmode' - -rootdir := '' -prefix := '/usr' -flatpak-prefix := '/app' - -base-dir := absolute_path(clean(rootdir / prefix)) -flatpak-base-dir := absolute_path(clean(rootdir / flatpak-prefix)) - -export INSTALL_DIR := base-dir / 'share' - -bin-src := 'target' / 'release' / name -bin-dst := base-dir / 'bin' / name -flatpak-bin-dst := flatpak-base-dir / 'bin' / name - -desktop := APPID + '.desktop' -desktop-src := 'res' / desktop -desktop-dst := clean(rootdir / prefix) / 'share' / 'applications' / desktop - -metainfo := APPID + '.metainfo.xml' -metainfo-src := 'res' / metainfo -metainfo-dst := clean(rootdir / prefix) / 'share' / 'metainfo' / metainfo - -icons-src := 'res' / 'icons' / 'hicolor' -icons-dst := clean(rootdir / prefix) / 'share' / 'icons' / 'hicolor' - -# Default recipe which runs `just build-release` -default: build-release - -# Runs `cargo clean` -clean: - cargo clean - -# Removes vendored dependencies -clean-vendor: - rm -rf .cargo vendor vendor.tar - -# `cargo clean` and removes vendored dependencies -clean-dist: clean clean-vendor - -# Compiles with debug profile -build-debug *args: - cargo build {{args}} - -# Compiles with release profile -build-release *args: (build-debug '--release' args) - -# Compiles release profile with vendored dependencies -build-vendored *args: vendor-extract (build-release '--frozen --offline' args) - -# Runs a clippy check -check *args: - cargo clippy --all-features {{args}} -- -W clippy::pedantic - -# Runs a clippy check with JSON message format -check-json: (check '--message-format=json') - -dev *args: - cargo fmt - just run {{args}} - -# Run with debug logs -run *args: - env RUST_LOG=cosmic_tasks=info RUST_BACKTRACE=full cargo run --release {{args}} - -# Installs files -install: - install -Dm0755 {{bin-src}} {{bin-dst}} - install -Dm0644 {{desktop-src}} {{desktop-dst}} - install -Dm0644 {{metainfo-src}} {{metainfo-dst}} - for size in `ls {{icons-src}}`; do \ - install -Dm0644 "{{icons-src}}/$size/apps/{{APPID}}.svg" "{{icons-dst}}/$size/apps/{{APPID}}.svg"; \ - done - -# Installs files -flatpak: - install -Dm0755 {{bin-src}} {{flatpak-bin-dst}} - install -Dm0644 {{desktop-src}} {{desktop-dst}} - install -Dm0644 {{metainfo-src}} {{metainfo-dst}} - for size in `ls {{icons-src}}`; do \ - install -Dm0644 "{{icons-src}}/$size/apps/{{APPID}}.svg" "{{icons-dst}}/$size/apps/{{APPID}}.svg"; \ - done - -# Uninstalls installed files -uninstall: - rm {{bin-dst}} - -# Vendor dependencies locally -vendor: - #!/usr/bin/env bash - mkdir -p .cargo - cargo vendor --sync Cargo.toml | head -n -1 > .cargo/config.toml - echo 'directory = "vendor"' >> .cargo/config.toml - echo >> .cargo/config.toml - echo '[env]' >> .cargo/config.toml - if [ -n "${SOURCE_DATE_EPOCH}" ] - then - source_date="$(date -d "@${SOURCE_DATE_EPOCH}" "+%Y-%m-%d")" - echo "VERGEN_GIT_COMMIT_DATE = \"${source_date}\"" >> .cargo/config.toml - fi - if [ -n "${SOURCE_GIT_HASH}" ] - then - echo "VERGEN_GIT_SHA = \"${SOURCE_GIT_HASH}\"" >> .cargo/config.toml - fi - tar pcf vendor.tar .cargo vendor - rm -rf .cargo vendor - -# Extracts vendored dependencies -vendor-extract: - rm -rf vendor - tar pxf vendor.tar diff --git a/src/ui/res/dev.edfloreshz.Devmode.desktop b/src/ui/res/dev.edfloreshz.Devmode.desktop deleted file mode 100644 index 4391c6d..0000000 --- a/src/ui/res/dev.edfloreshz.Devmode.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=COSMIC App Template -Exec=cosmic-app-template %F -Terminal=false -Type=Application -StartupNotify=true -Icon=dev.edfloreshz.Devmode -Categories=COSMIC;Utility; -Keywords=Folder;Manager; -MimeType=inode/directory; diff --git a/src/ui/res/dev.edfloreshz.Devmode.metainfo.xml b/src/ui/res/dev.edfloreshz.Devmode.metainfo.xml deleted file mode 100644 index 8fc5352..0000000 --- a/src/ui/res/dev.edfloreshz.Devmode.metainfo.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - dev.edfloreshz.Devmode - CC0-1.0 - GPL-3.0-only - COSMIC - YourName - your@email.com - - - COSMIC App Template - A template for COSMIC applications - -

A template for COSMIC applications

-
- dev.edfloreshz.Devmode.desktop - https://raw.githubusercontent.com/edfloreshz/cosmic-app-template/master/res/icons/hicolor/256x256/apps/dev.edfloreshz.Devmode.svg - - - - - text/plain - - - cosmic-app-template - - -
diff --git a/src/ui/res/icons/hicolor/scalable/apps/dev.edfloreshz.Devmode.svg b/src/ui/res/icons/hicolor/scalable/apps/dev.edfloreshz.Devmode.svg deleted file mode 100644 index 056d46d..0000000 --- a/src/ui/res/icons/hicolor/scalable/apps/dev.edfloreshz.Devmode.svg +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/ui/src/app.rs b/src/ui/src/app.rs deleted file mode 100644 index cc64e91..0000000 --- a/src/ui/src/app.rs +++ /dev/null @@ -1,273 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only - -use std::collections::HashMap; - -use crate::{fl, pages}; -use cosmic::app::{Core, Task}; -use cosmic::iced::alignment::{Horizontal, Vertical}; -use cosmic::iced::{Alignment, Length}; -use cosmic::widget::{self, icon, menu, nav_bar}; -use cosmic::{cosmic_theme, theme, Application, ApplicationExt, Apply, Element}; - -const REPOSITORY: &str = "https://github.com/edfloreshz/cosmic-app-template"; - -/// This is the struct that represents your application. -/// It is used to define the data that will be used by your application. -pub struct Devmode { - core: Core, - context_page: ContextPage, - page: Page, - clone: pages::clone::ClonePage, - workspaces: pages::workspaces::WorkspacesPage, - open: pages::open::OpenPage, - config: pages::config::ConfigPage, - key_binds: HashMap, - nav: nav_bar::Model, -} - -/// This is the enum that contains all the possible variants that your application will need to transmit messages. -/// This is used to communicate between the different parts of your application. -/// If your application does not need to send messages, you can use an empty enum or `()`. -#[derive(Debug, Clone)] -pub enum Message { - LaunchUrl(String), - ToggleContextPage(ContextPage), - Clone(pages::clone::Message), - Workspaces(pages::workspaces::Message), - Open(pages::open::Message), - Config(pages::config::Message), -} - -/// Identifies a page in the application. -#[derive(Debug, Clone, Copy)] -pub enum Page { - Clone, - Workspaces, - Open, - Config, -} - -/// Identifies a context page to display in the context drawer. -#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)] -pub enum ContextPage { - #[default] - About, -} - -impl ContextPage { - fn title(&self) -> String { - match self { - Self::About => fl!("about"), - } - } -} - -#[derive(Clone, Copy, Debug, Eq, PartialEq)] -pub enum MenuAction { - About, -} - -impl menu::action::MenuAction for MenuAction { - type Message = Message; - - fn message(&self) -> Self::Message { - match self { - MenuAction::About => Message::ToggleContextPage(ContextPage::About), - } - } -} - -/// Implement the `Application` trait for your application. -/// This is where you define the behavior of your application. -/// -/// The `Application` trait requires you to define the following types and constants: -/// - `Executor` is the async executor that will be used to run your application's commands. -/// - `Flags` is the data that your application needs to use before it starts. -/// - `Message` is the enum that contains all the possible variants that your application will need to transmit messages. -/// - `APP_ID` is the unique identifier of your application. -impl Application for Devmode { - type Executor = cosmic::executor::Default; - - type Flags = (); - - type Message = Message; - - const APP_ID: &'static str = "dev.edfloreshz.Devmode"; - - fn core(&self) -> &Core { - &self.core - } - - fn core_mut(&mut self) -> &mut Core { - &mut self.core - } - - /// Instructs the cosmic runtime to use this model as the nav bar model. - fn nav_model(&self) -> Option<&nav_bar::Model> { - Some(&self.nav) - } - - /// This is the entry point of your application, it is where you initialize your application. - /// - /// Any work that needs to be done before the application starts should be done here. - /// - /// - `core` is used to passed on for you by libcosmic to use in the core of your own application. - /// - `flags` is used to pass in any data that your application needs to use before it starts. - /// - `Command` type is used to send messages to your application. `Command::none()` can be used to send no messages to your application. - fn init(core: Core, _flags: Self::Flags) -> (Self, Task) { - let mut nav = nav_bar::Model::default(); - - nav.insert() - .text("Clone") - .data::(Page::Clone) - .icon(icon::from_name("browser-download-symbolic")) - .activate(); - - nav.insert() - .text("Workspaces") - .data::(Page::Workspaces) - .icon(icon::from_name("multitasking-symbolic")); - - nav.insert() - .text("Open") - .data::(Page::Open) - .icon(icon::from_name("folder-open-symbolic")); - - nav.insert() - .text("Config") - .data::(Page::Config) - .icon(icon::from_name("settings-symbolic")); - - let app = Devmode { - core, - context_page: ContextPage::default(), - page: Page::Clone, - clone: pages::clone::ClonePage::new(), - workspaces: pages::workspaces::WorkspacesPage::new(), - open: pages::open::OpenPage::new(), - config: pages::config::ConfigPage::new(), - key_binds: HashMap::new(), - nav, - }; - - (app, Task::none()) - } - - /// Elements to pack at the start of the header bar. - fn header_start(&self) -> Vec> { - let menu_bar = menu::bar(vec![menu::Tree::with_children( - menu::root(fl!("view")), - menu::items( - &self.key_binds, - vec![menu::Item::Button(fl!("about"), MenuAction::About)], - ), - )]); - - vec![menu_bar.into()] - } - - fn view(&self) -> Element { - let spacing = theme::active().cosmic().spacing; - - let page: Element = match self.page { - Page::Clone => self.clone.view().map(Message::Clone), - Page::Workspaces => self.workspaces.view().map(Message::Workspaces), - Page::Open => self.open.view().map(Message::Open), - Page::Config => self.config.view().map(Message::Config), - }; - - widget::container(page) - .apply(widget::container) - .padding(spacing.space_xxs) - .width(Length::Fill) - .height(Length::Fill) - .align_x(Horizontal::Center) - .align_y(Vertical::Center) - .into() - } - - /// Application messages are handled here. The application state can be modified based on - /// what message was received. Commands may be returned for asynchronous execution on a - /// background thread managed by the application's executor. - fn update(&mut self, message: Self::Message) -> Task { - match message { - Message::Clone(message) => { - for command in self.clone.update(message) { - match command { - pages::clone::Command::Clone(_repository, _workspace) => { - todo!("Implement cloning mechanism.") - } - } - } - } - Message::Workspaces(message) => for command in self.workspaces.update(message) {}, - Message::Open(message) => for command in self.open.update(message) {}, - Message::Config(message) => for command in self.config.update(message) {}, - Message::LaunchUrl(url) => { - let _result = open::that_detached(url); - } - Message::ToggleContextPage(context_page) => { - if self.context_page.eq(&context_page) { - // Close the context drawer if the toggled context page is the same. - self.core.window.show_context = !self.core.window.show_context; - } else { - // Open the context drawer to display the requested context page. - self.context_page = context_page; - self.core.window.show_context = true; - } - - // Set the title of the context drawer. - self.set_context_title(context_page.title()); - } - } - Task::none() - } - - /// Display a context drawer if the context page is requested. - fn context_drawer(&self) -> Option> { - if !self.core.window.show_context { - return None; - } - - Some(match self.context_page { - ContextPage::About => self.about(), - }) - } - - /// Called when a nav item is selected. - fn on_nav_select(&mut self, id: nav_bar::Id) -> Task { - // Activate the page in the model. - self.nav.activate(id); - - if let Some(page) = self.nav.active_data::() { - self.page = *page; - } - - Task::none() - } -} - -impl Devmode { - /// The about page for this app. - pub fn about(&self) -> Element { - let cosmic_theme::Spacing { space_xxs, .. } = theme::active().cosmic().spacing; - - let icon = widget::svg(widget::svg::Handle::from_memory( - &include_bytes!("../res/icons/hicolor/scalable/apps/dev.edfloreshz.Devmode.svg")[..], - )); - - let title = widget::text::title3(fl!("app-title")); - - let link = widget::button::link(REPOSITORY) - .on_press(Message::LaunchUrl(REPOSITORY.to_string())) - .padding(0); - - widget::column() - .push(icon) - .push(title) - .push(link) - .align_x(Alignment::Center) - .spacing(space_xxs) - .into() - } -} diff --git a/src/ui/src/core/localization.rs b/src/ui/src/core/localization.rs deleted file mode 100644 index 290646c..0000000 --- a/src/ui/src/core/localization.rs +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only - -use i18n_embed::{ - fluent::{fluent_language_loader, FluentLanguageLoader}, - LanguageLoader, -}; -use once_cell::sync::Lazy; -use rust_embed::RustEmbed; - -#[derive(RustEmbed)] -#[folder = "i18n/"] -struct Localizations; - -pub static LANGUAGE_LOADER: Lazy = Lazy::new(|| { - let loader: FluentLanguageLoader = fluent_language_loader!(); - - loader - .load_fallback_language(&Localizations) - .expect("Error while loading fallback language"); - - loader -}); - -#[macro_export] -macro_rules! fl { - ($message_id:literal) => {{ - i18n_embed_fl::fl!($crate::core::localization::LANGUAGE_LOADER, $message_id) - }}; - - ($message_id:literal, $($args:expr),*) => {{ - i18n_embed_fl::fl!($crate::core::localization::LANGUAGE_LOADER, $message_id, $($args), *) - }}; -} diff --git a/src/ui/src/core/mod.rs b/src/ui/src/core/mod.rs deleted file mode 100644 index cef77f5..0000000 --- a/src/ui/src/core/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only - -pub mod localization; diff --git a/src/ui/src/main.rs b/src/ui/src/main.rs deleted file mode 100644 index b6215f6..0000000 --- a/src/ui/src/main.rs +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only - -use app::Devmode; -/// The `app` module is used by convention to indicate the main component of our application. -mod app; -mod core; -mod pages; - -/// The `cosmic::app::run()` function is the starting point of your application. -/// It takes two arguments: -/// - `settings` is a structure that contains everything relevant with your app's configuration, such as antialiasing, themes, icons, etc... -/// - `()` is the flags that your app needs to use before it starts. -/// If your app does not need any flags, you can pass in `()`. -fn main() -> cosmic::iced::Result { - let settings = cosmic::app::Settings::default(); - cosmic::app::run::(settings, ()) -} diff --git a/src/ui/src/pages.rs b/src/ui/src/pages.rs deleted file mode 100644 index 4c446f2..0000000 --- a/src/ui/src/pages.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod clone; -pub mod config; -pub mod open; -pub mod workspaces; diff --git a/src/ui/src/pages/clone.rs b/src/ui/src/pages/clone.rs deleted file mode 100644 index 394385d..0000000 --- a/src/ui/src/pages/clone.rs +++ /dev/null @@ -1,115 +0,0 @@ -use cosmic::{ - iced::{Alignment, Length}, - theme, widget, Apply, Element, -}; -use slotmap::{DefaultKey, SecondaryMap, SlotMap}; - -#[derive(Debug, Default)] -pub struct Repository { - url: String, - selected: bool, -} - -#[derive(Debug, Default)] -pub struct ClonePage { - workspace: String, - repository: Repository, - repositories: SlotMap, - editing: SecondaryMap, - repository_input_ids: SecondaryMap, -} - -#[derive(Debug, Clone)] -pub enum Message { - Clone, - Select(DefaultKey, bool), - TitleSubmit(DefaultKey), - TitleUpdate(DefaultKey, String), - EditMode(DefaultKey, bool), -} - -pub enum Command { - Clone(String, String), -} - -impl ClonePage { - pub fn new() -> Self { - let mut repositories = SlotMap::new(); - let mut repository_input_ids = SecondaryMap::new(); - let id = repositories.insert(Repository { - url: "https://github.com/edfloreshz/tasks".into(), - selected: false, - }); - repository_input_ids.insert(id, widget::Id::unique()); - Self { - repositories, - repository_input_ids, - ..Default::default() - } - } - - fn header(&self) -> Element { - widget::row::with_capacity(2) - .push(widget::text::title2("Clone")) - .into() - } - - pub fn view(&self) -> Element { - let spacing = theme::active().cosmic().spacing; - - let mut items = widget::list::list_column() - .style(theme::Container::ContextDrawer) - .spacing(spacing.space_xxxs) - .padding([spacing.space_none, spacing.space_xxs]); - - for (id, item) in &self.repositories { - let item_checkbox = widget::checkbox("", item.selected) - .on_toggle(move |value| Message::Select(id, value)); - - let item_text = widget::editable_input( - "", - &item.url, - *self.editing.get(id).unwrap_or(&false), - move |editing| Message::EditMode(id, editing), - ) - .id(self.repository_input_ids[id].clone()) - .on_submit(Message::TitleSubmit(id)) - .on_input(move |text| Message::TitleUpdate(id, text)) - .width(Length::Fill); - - let row = widget::row::with_capacity(4) - .align_y(Alignment::Center) - .spacing(spacing.space_xxs) - .padding([spacing.space_xxxs, spacing.space_xxs]) - .push(item_checkbox) - .push(item_text); - - items = items.add(row); - } - - widget::column::with_capacity(2) - .push(self.header()) - .push(items) - .spacing(spacing.space_xxs) - .apply(widget::container) - .height(Length::Shrink) - .apply(widget::scrollable) - .height(Length::Fill) - .into() - } - - pub fn update(&self, message: Message) -> Vec { - let mut commands = vec![]; - match message { - Message::Clone => commands.push(Command::Clone( - self.repository.url.clone(), - self.workspace.clone(), - )), - Message::Select(_, _) => todo!(), - Message::TitleSubmit(_) => todo!(), - Message::TitleUpdate(_, _) => todo!(), - Message::EditMode(_, _) => todo!(), - } - commands - } -} diff --git a/src/ui/src/pages/config.rs b/src/ui/src/pages/config.rs deleted file mode 100644 index f18d77f..0000000 --- a/src/ui/src/pages/config.rs +++ /dev/null @@ -1,38 +0,0 @@ -use cosmic::{iced::Length, theme, widget, Apply, Element}; - -#[derive(Debug, Default)] -pub struct ConfigPage {} - -#[derive(Debug, Clone)] -pub enum Message {} - -pub enum Command {} - -impl ConfigPage { - pub fn new() -> Self { - Self::default() - } - - fn header(&self) -> Element { - widget::row::with_capacity(2) - .push(widget::text::title2("Config")) - .into() - } - - pub fn view(&self) -> Element { - let spacing = theme::active().cosmic().spacing; - - widget::column::with_capacity(2) - .push(self.header()) - .spacing(spacing.space_xxs) - .apply(widget::container) - .height(Length::Shrink) - .apply(widget::scrollable) - .height(Length::Fill) - .into() - } - - pub fn update(&self, message: Message) -> Vec { - vec![] - } -} diff --git a/src/ui/src/pages/open.rs b/src/ui/src/pages/open.rs deleted file mode 100644 index 38e0a92..0000000 --- a/src/ui/src/pages/open.rs +++ /dev/null @@ -1,69 +0,0 @@ -use cosmic::{ - iced::{Alignment, Length}, - theme, widget, Apply, Element, -}; - -#[derive(Debug, Default)] -pub struct Repository { - url: String, - selected: bool, -} - -#[derive(Debug, Default)] -pub struct OpenPage { - projects: Vec, -} - -#[derive(Debug, Clone)] -pub enum Message { - Select(String), -} - -pub enum Command {} - -impl OpenPage { - pub fn new() -> Self { - Self::default() - } - - fn header(&self) -> Element { - widget::row::with_capacity(2) - .push(widget::text::title2("Open")) - .into() - } - - pub fn view(&self) -> Element { - let spacing = theme::active().cosmic().spacing; - - let mut items = widget::list::list_column() - .style(theme::Container::ContextDrawer) - .spacing(spacing.space_xxxs) - .padding([spacing.space_none, spacing.space_xxs]); - - for item in &self.projects { - let item_text = widget::text(item).width(Length::Fill); - - let row = widget::row::with_capacity(4) - .align_y(Alignment::Center) - .spacing(spacing.space_xxs) - .padding([spacing.space_xxxs, spacing.space_xxs]) - .push(item_text); - - items = items.add(row); - } - - widget::column::with_capacity(2) - .push(self.header()) - .push(items) - .spacing(spacing.space_xxs) - .apply(widget::container) - .height(Length::Shrink) - .apply(widget::scrollable) - .height(Length::Fill) - .into() - } - - pub fn update(&self, message: Message) -> Vec { - vec![] - } -} diff --git a/src/ui/src/pages/workspaces.rs b/src/ui/src/pages/workspaces.rs deleted file mode 100644 index 1653d5c..0000000 --- a/src/ui/src/pages/workspaces.rs +++ /dev/null @@ -1,89 +0,0 @@ -use cosmic::{ - iced::{Alignment, Length}, - theme, widget, Apply, Element, -}; -use slotmap::{DefaultKey, SecondaryMap, SlotMap}; - -#[derive(Debug, Default)] -pub struct WorkspacesPage { - workspaces: SlotMap, - editing: SecondaryMap, - workspace_input_ids: SecondaryMap, -} - -#[derive(Debug, Clone)] -pub enum Message { - EditMode(DefaultKey, bool), - TitleUpdate(DefaultKey, String), - TitleSubmit(DefaultKey), -} - -pub enum Command {} - -impl WorkspacesPage { - pub fn new() -> Self { - let mut workspaces = SlotMap::new(); - let mut workspace_input_ids = SecondaryMap::new(); - let id = workspaces.insert("tasks".into()); - workspace_input_ids.insert(id, widget::Id::unique()); - Self { - workspaces, - workspace_input_ids, - ..Default::default() - } - } - - fn header(&self) -> Element { - widget::row::with_capacity(2) - .push(widget::text::title2("Workspaces")) - .into() - } - - pub fn view(&self) -> Element { - let spacing = theme::active().cosmic().spacing; - - let mut items = widget::list::list_column() - .style(theme::Container::ContextDrawer) - .spacing(spacing.space_xxxs) - .padding([spacing.space_none, spacing.space_xxs]); - - for (id, item) in &self.workspaces { - let item_text = widget::editable_input( - "", - item, - *self.editing.get(id).unwrap_or(&false), - move |editing| Message::EditMode(id, editing), - ) - .id(self.workspace_input_ids[id].clone()) - .on_submit(Message::TitleSubmit(id)) - .on_input(move |text| Message::TitleUpdate(id, text)) - .width(Length::Fill); - - let row = widget::row::with_capacity(4) - .align_y(Alignment::Center) - .spacing(spacing.space_xxs) - .padding([spacing.space_xxxs, spacing.space_xxs]) - .push(item_text); - - items = items.add(row); - } - - widget::column::with_capacity(2) - .push(self.header()) - .push(items) - .spacing(spacing.space_xxs) - .apply(widget::container) - .height(Length::Shrink) - .apply(widget::scrollable) - .height(Length::Fill) - .into() - } - - pub fn update(&self, message: Message) -> Vec { - match message { - Message::TitleSubmit(_) => todo!(), - Message::TitleUpdate(_, _) => todo!(), - Message::EditMode(_, _) => todo!(), - } - } -}