diff --git a/.gitignore b/.gitignore index c8ada46..bef5ec1 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,6 @@ debian/* .cargo/ vendor.tar vendor/ -cargo.just # Nix .direnv/ diff --git a/Cargo.lock b/Cargo.lock index 4dccfe1..70e94c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -101,9 +101,9 @@ dependencies = [ [[package]] name = "accounts-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#b2337437d70b3db7a56211a43aa1632306711b2d" +source = "git+https://github.com/pop-os/dbus-settings-bindings#87c3c35666b926a24a1e8045fd70be2db1145e34" dependencies = [ - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] @@ -219,9 +219,12 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" +dependencies = [ + "rustversion", +] [[package]] name = "arrayref" @@ -268,14 +271,14 @@ dependencies = [ "wayland-backend", "wayland-client", "wayland-protocols", - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] name = "ashpd" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0986d5b4f0802160191ad75f8d33ada000558757db3defb70299ca95d9fcbd" +checksum = "618a409b91d5265798a99e3d1d0b226911605e581c4e7255e83c1e397b172bce" dependencies = [ "enumflags2", "futures-channel", @@ -285,7 +288,7 @@ dependencies = [ "serde_repr", "tokio", "url", - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] @@ -336,16 +339,6 @@ dependencies = [ "slab", ] -[[package]] -name = "async-fn-stream" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e71711442f1016c768c259bec59300a10efe753bc3e686ec19e2c6a54a97c29b" -dependencies = [ - "futures-util", - "pin-project-lite", -] - [[package]] name = "async-io" version = "1.13.0" @@ -379,7 +372,7 @@ dependencies = [ "futures-lite 2.6.1", "parking", "polling 3.11.0", - "rustix 1.1.2", + "rustix 1.1.3", "slab", "windows-sys 0.61.2", ] @@ -395,9 +388,9 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ "event-listener 5.4.1", "event-listener-strategy", @@ -429,14 +422,14 @@ checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ "async-channel", "async-io 2.6.0", - "async-lock 3.4.1", + "async-lock 3.4.2", "async-signal", "async-task", "blocking", "cfg-if", "event-listener 5.4.1", "futures-lite 2.6.1", - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] @@ -447,7 +440,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -457,12 +450,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" dependencies = [ "async-io 2.6.0", - "async-lock 3.4.1", + "async-lock 3.4.2", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 1.1.2", + "rustix 1.1.3", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -482,7 +475,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -558,7 +551,7 @@ dependencies = [ "derive_utils", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -567,6 +560,28 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "aws-lc-rs" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88aab2464f1f25453baa7a07c84c5b7684e274054ba06817f382357f77a288" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45afffdee1e7c9126814751f88dddc747f41d91da16c9551a0f1e8a11e788a1" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + [[package]] name = "base64" version = "0.22.1" @@ -599,26 +614,26 @@ checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" [[package]] name = "bitcode" -version = "0.6.7" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648bd963d2e5d465377acecfb4b827f9f553b6bc97a8f61715779e9ed9e52b74" +checksum = "0a6ed1b54d8dc333e7be604d00fa9262f4635485ffea923647b6521a5fff045d" dependencies = [ "arrayvec", "bitcode_derive", "bytemuck", - "glam 0.30.9", + "glam 0.30.10", "serde", ] [[package]] name = "bitcode_derive" -version = "0.6.7" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffebfc2d28a12b262c303cb3860ee77b91bd83b1f20f0bd2a9693008e2f55a9e" +checksum = "238b90427dfad9da4a9abd60f3ec1cdee6b80454bde49ed37f1781dd8e9dc7f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -660,6 +675,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + [[package]] name = "block2" version = "0.5.1" @@ -724,9 +748,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "by_address" @@ -751,7 +775,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -803,7 +827,7 @@ checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ "bitflags 2.10.0", "polling 3.11.0", - "rustix 1.1.2", + "rustix 1.1.3", "slab", "tracing", ] @@ -827,16 +851,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ "calloop 0.14.3", - "rustix 1.1.2", + "rustix 1.1.3", "wayland-backend", "wayland-client", ] +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher 0.4.4", +] + [[package]] name = "cc" -version = "1.2.49" +version = "1.2.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" +checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3" dependencies = [ "find-msvc-tools", "jobserver", @@ -938,6 +971,15 @@ dependencies = [ "x11rb", ] +[[package]] +name = "cmake" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +dependencies = [ + "cc", +] + [[package]] name = "cocoa" version = "0.25.0" @@ -947,9 +989,9 @@ dependencies = [ "bitflags 1.3.2", "block", "cocoa-foundation", - "core-foundation", + "core-foundation 0.9.4", "core-graphics", - "foreign-types 0.5.0", + "foreign-types", "libc", "objc", ] @@ -962,7 +1004,7 @@ checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" dependencies = [ "bitflags 1.3.2", "block", - "core-foundation", + "core-foundation 0.9.4", "core-graphics-types", "libc", "objc", @@ -1050,6 +1092,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1063,9 +1115,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "core-graphics-types", - "foreign-types 0.5.0", + "foreign-types", "libc", ] @@ -1076,7 +1128,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "libc", ] @@ -1092,10 +1144,10 @@ dependencies = [ [[package]] name = "cosmic-client-toolkit" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-protocols//#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" +source = "git+https://github.com/pop-os/cosmic-protocols?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" dependencies = [ "bitflags 2.10.0", - "cosmic-protocols", + "cosmic-protocols 0.1.0", "libc", "smithay-client-toolkit 0.20.0", "wayland-client", @@ -1104,8 +1156,8 @@ dependencies = [ [[package]] name = "cosmic-comp-config" -version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-comp#455abbb2f7705e92babd4a91ba18fc1a018d1a55" +version = "1.0.0" +source = "git+https://github.com/pop-os/cosmic-comp#15b6b678c1303b6ace3af47d21abb2df1d583824" dependencies = [ "cosmic-config", "input", @@ -1115,7 +1167,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1125,42 +1177,42 @@ dependencies = [ "iced_futures", "known-folders", "notify", - "ron", + "ron 0.11.0", "serde", "tokio", "tracing", "xdg", - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] name = "cosmic-config-derive" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "cosmic-dbus-a11y" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#b2337437d70b3db7a56211a43aa1632306711b2d" +source = "git+https://github.com/pop-os/dbus-settings-bindings#87c3c35666b926a24a1e8045fd70be2db1145e34" dependencies = [ - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] name = "cosmic-dbus-networkmanager" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#b2337437d70b3db7a56211a43aa1632306711b2d" +source = "git+https://github.com/pop-os/dbus-settings-bindings#87c3c35666b926a24a1e8045fd70be2db1145e34" dependencies = [ "bitflags 2.10.0", "derive_builder", "procfs", "time", - "zbus 5.12.0", - "zvariant 5.8.0", + "zbus 5.13.1", + "zvariant 5.9.1", ] [[package]] @@ -1183,9 +1235,11 @@ version = "1.0.0" dependencies = [ "accounts-zbus", "cosmic-comp-config", - "cosmic-protocols", + "cosmic-protocols 0.2.0", "cosmic-randr-shell", - "cosmic-settings-subscriptions", + "cosmic-settings-a11y-manager-subscription", + "cosmic-settings-accessibility-subscription", + "cosmic-settings-network-manager-subscription", "crabtime", "eyre", "futures", @@ -1206,7 +1260,7 @@ dependencies = [ "pwd", "pwhash", "regex", - "ron", + "ron 0.12.0", "rust-embed", "secure-string", "serde", @@ -1217,14 +1271,28 @@ dependencies = [ "tracing-subscriber", "url", "xkb-data", - "zbus 5.12.0", + "zbus 5.13.1", "zbus_polkit", ] [[package]] name = "cosmic-protocols" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-protocols//#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" +source = "git+https://github.com/pop-os/cosmic-protocols?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" +dependencies = [ + "bitflags 2.10.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "wayland-server", +] + +[[package]] +name = "cosmic-protocols" +version = "0.2.0" +source = "git+https://github.com/pop-os/cosmic-protocols#160b086abe03cd34a8a375d7fbe47b24308d1f38" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -1245,39 +1313,64 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "cosmic-settings-a11y-manager-subscription" +version = "1.0.2" +source = "git+https://github.com/pop-os/cosmic-settings#c05dad00dedbdc73bb9b86e051b070218014e995" +dependencies = [ + "cosmic-protocols 0.2.0", + "iced_futures", + "num-derive", + "num-traits", + "smithay-client-toolkit 0.20.0", + "tokio", + "tracing", +] + +[[package]] +name = "cosmic-settings-accessibility-subscription" +version = "1.0.2" +source = "git+https://github.com/pop-os/cosmic-settings#c05dad00dedbdc73bb9b86e051b070218014e995" +dependencies = [ + "cosmic-dbus-a11y", + "futures", + "iced_futures", + "tokio", + "tracing", + "zbus 5.13.1", +] + [[package]] name = "cosmic-settings-daemon" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#b2337437d70b3db7a56211a43aa1632306711b2d" +source = "git+https://github.com/pop-os/dbus-settings-bindings#87c3c35666b926a24a1e8045fd70be2db1145e34" dependencies = [ - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] -name = "cosmic-settings-subscriptions" -version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-subscriptions#f858ca0b6416a2b75d5f7fa513bc6fc43647d3f8" +name = "cosmic-settings-network-manager-subscription" +version = "1.0.2" +source = "git+https://github.com/pop-os/cosmic-settings#c05dad00dedbdc73bb9b86e051b070218014e995" dependencies = [ - "async-fn-stream", - "cosmic-dbus-a11y", + "bitflags 2.10.0", "cosmic-dbus-networkmanager", "futures", "iced_futures", "itertools", - "libcosmic", - "log", + "nm-secret-agent-manager", + "secret-service", "secure-string", "thiserror 2.0.17", "tokio", - "tokio-stream", "tracing", - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] name = "cosmic-text" -version = "0.15.0" -source = "git+https://github.com/pop-os/cosmic-text.git#7051682e70defcab6b683d6e9db07124a6de0df7" +version = "0.16.0" +source = "git+https://github.com/pop-os/cosmic-text.git#0d9af4f7de087878100b296c81d1baca2e05433d" dependencies = [ "bitflags 2.10.0", "fontdb 0.23.0", @@ -1300,14 +1393,14 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "almost", "cosmic-config", "csscolorparser", "dirs", "palette", - "ron", + "ron 0.11.0", "serde", "serde_json", "thiserror 2.0.17", @@ -1340,15 +1433,15 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.111", + "syn 2.0.114", "toml 0.8.23", ] [[package]] name = "crc" -version = "3.4.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -1392,9 +1485,9 @@ dependencies = [ [[package]] name = "crypto-mac" -version = "0.10.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" +checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6" dependencies = [ "generic-array", "subtle", @@ -1460,7 +1553,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1471,7 +1564,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1514,7 +1607,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1535,7 +1628,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1545,7 +1638,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1557,7 +1650,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1568,7 +1661,7 @@ checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1638,7 +1731,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1721,6 +1814,12 @@ dependencies = [ "linux-raw-sys 0.6.5", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "either" version = "1.15.0" @@ -1760,7 +1859,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1893,19 +1992,19 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" dependencies = [ "crc32fast", - "libz-rs-sys", "miniz_oxide", + "zlib-rs", ] [[package]] @@ -2023,15 +2122,6 @@ dependencies = [ "ttf-parser 0.25.1", ] -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared 0.1.1", -] - [[package]] name = "foreign-types" version = "0.5.0" @@ -2039,7 +2129,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared 0.3.1", + "foreign-types-shared", ] [[package]] @@ -2050,15 +2140,9 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "foreign-types-shared" version = "0.3.1" @@ -2076,14 +2160,20 @@ dependencies = [ [[package]] name = "fs-err" -version = "3.2.1" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824f08d01d0f496b3eca4f001a13cf17690a6ee930043d20817f547455fd98f8" +checksum = "baf68cef89750956493a66a10f512b9e58d9db21f2a573c079c0bdf1207a54a7" dependencies = [ "autocfg", "tokio", ] +[[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" @@ -2178,7 +2268,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2237,19 +2327,21 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", "windows-link", ] [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -2259,9 +2351,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi", "wasip2", + "wasm-bindgen", ] [[package]] @@ -2313,9 +2407,9 @@ checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" [[package]] name = "glam" -version = "0.30.9" +version = "0.30.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd47b05dddf0005d850e5644cae7f2b14ac3df487979dbfff3b56f20b1a6ae46" +checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9" [[package]] name = "glow" @@ -2408,9 +2502,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -2515,6 +2609,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", +] + [[package]] name = "hmac" version = "0.10.1" @@ -2596,18 +2699,18 @@ dependencies = [ ] [[package]] -name = "hyper-tls" -version = "0.6.0" +name = "hyper-rustls" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "bytes", - "http-body-util", + "http", "hyper", "hyper-util", - "native-tls", + "rustls", + "rustls-pki-types", "tokio", - "tokio-native-tls", + "tokio-rustls", "tower-service", ] @@ -2617,6 +2720,7 @@ version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ + "base64", "bytes", "futures-channel", "futures-core", @@ -2624,12 +2728,16 @@ dependencies = [ "http", "http-body", "hyper", + "ipnet", "libc", + "percent-encoding", "pin-project-lite", "socket2 0.6.1", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -2682,7 +2790,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.111", + "syn 2.0.114", "unic-langid", ] @@ -2696,7 +2804,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2726,7 +2834,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "dnd", "iced_accessibility", @@ -2744,7 +2852,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "accesskit", "accesskit_winit", @@ -2753,7 +2861,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "bitflags 2.10.0", "bytes", @@ -2777,7 +2885,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "futures", "iced_core", @@ -2803,7 +2911,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "bitflags 2.10.0", "bytemuck", @@ -2825,7 +2933,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2837,7 +2945,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "bytes", "dnd", @@ -2852,7 +2960,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "bytemuck", "cosmic-text", @@ -2868,7 +2976,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "as-raw-xcb-connection", "bitflags 2.10.0", @@ -2899,7 +3007,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "dnd", "iced_accessibility", @@ -2918,7 +3026,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "dnd", "iced_accessibility", @@ -3084,9 +3192,9 @@ checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -3118,6 +3226,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ + "block-padding", "generic-array", ] @@ -3185,6 +3294,16 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "iri-string" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "itertools" version = "0.14.0" @@ -3196,9 +3315,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jni" @@ -3349,17 +3468,17 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" -version = "0.2.178" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libcosmic" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#aabc8dcda530a6ac70617dd578cea55910af53c8" +source = "git+https://github.com/pop-os/libcosmic.git#b9c24d24212a865977db4871efc13ff890055648" dependencies = [ "apply", - "ashpd 0.12.0", + "ashpd 0.12.1", "auto_enums", "chrono", "cosmic-config", @@ -3387,7 +3506,7 @@ dependencies = [ "phf 0.13.1", "raw-window-handle", "rfd", - "ron", + "ron 0.11.0", "rust-embed", "serde", "slotmap", @@ -3397,7 +3516,7 @@ dependencies = [ "tracing", "unicode-segmentation", "url", - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] @@ -3418,13 +3537,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags 2.10.0", "libc", - "redox_syscall 0.5.18", + "redox_syscall 0.7.0", ] [[package]] @@ -3437,15 +3556,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "libz-rs-sys" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15413ef615ad868d4d65dce091cb233b229419c7c0c4bcaa746c0901c49ff39c" -dependencies = [ - "zlib-rs", -] - [[package]] name = "linebender_resource_handle" version = "0.1.1" @@ -3491,9 +3601,9 @@ checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "locale1" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#b2337437d70b3db7a56211a43aa1632306711b2d" +source = "git+https://github.com/pop-os/dbus-settings-bindings#87c3c35666b926a24a1e8045fd70be2db1145e34" dependencies = [ - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] @@ -3541,6 +3651,12 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "lyon" version = "1.0.16" @@ -3595,9 +3711,9 @@ dependencies = [ [[package]] name = "lzma-rust2" -version = "0.13.0" +version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c60a23ffb90d527e23192f1246b14746e2f7f071cb84476dd879071696c18a4a" +checksum = "17f7337d278fec032975dc884152491580dd23750ee957047856735fe0e61ede" dependencies = [ "crc", "sha2 0.10.9", @@ -3665,7 +3781,7 @@ dependencies = [ "bitflags 2.10.0", "block", "core-graphics-types", - "foreign-types 0.5.0", + "foreign-types", "log", "objc", "paste", @@ -3754,23 +3870,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "ndk" version = "0.9.0" @@ -3823,16 +3922,11 @@ dependencies = [ ] [[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +name = "nm-secret-agent-manager" +version = "0.1.0" +source = "git+https://github.com/pop-os/dbus-settings-bindings#87c3c35666b926a24a1e8045fd70be2db1145e34" dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "cfg_aliases 0.2.1", - "libc", - "memoffset 0.9.1", + "zbus 5.13.1", ] [[package]] @@ -3915,7 +4009,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3988,7 +4082,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4278,49 +4372,11 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" -[[package]] -name = "openssl" -version = "0.10.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" -dependencies = [ - "bitflags 2.10.0", - "cfg-if", - "foreign-types 0.3.2", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "openssl-probe" -version = "0.1.6" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.111" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] +checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391" [[package]] name = "option-ext" @@ -4330,10 +4386,11 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.49" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "247ad146e19b9437f8604c21f8652423595cf710ad108af40e77d3ae6e96b827" +checksum = "52ad2c6bae700b7aa5d1cc30c59bdd3a1c180b09dbaea51e2ae2b8e1cf211fdd" dependencies = [ + "libc", "libredox", ] @@ -4368,7 +4425,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4402,7 +4459,7 @@ dependencies = [ "by_address", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4532,7 +4589,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4545,7 +4602,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4589,7 +4646,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4673,7 +4730,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.5.2", "pin-project-lite", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -4735,7 +4792,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.9", + "toml_edit 0.23.10+spec-1.0.0", ] [[package]] @@ -4757,14 +4814,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] @@ -4777,7 +4834,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "version_check", "yansi", ] @@ -4790,7 +4847,7 @@ checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" dependencies = [ "bitflags 2.10.0", "procfs-core", - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] @@ -4845,18 +4902,74 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.37.5" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" dependencies = [ "memchr", ] +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases 0.2.1", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.1.1", + "rustls", + "socket2 0.6.1", + "thiserror 2.0.17", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "aws-lc-rs", + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash 2.1.1", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.17", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases 0.2.1", + "libc", + "once_cell", + "socket2 0.6.1", + "tracing", + "windows-sys 0.60.2", +] + [[package]] name = "quote" -version = "1.0.42" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] @@ -4885,7 +4998,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.4", ] [[package]] @@ -4905,7 +5018,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.4", ] [[package]] @@ -4914,14 +5027,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "4f1b3bc831f92381018fd9c6350b917c7b21f1eed35a65a51900e0e55a3d7afa" dependencies = [ "getrandom 0.3.4", ] @@ -4934,9 +5047,9 @@ checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" [[package]] name = "rangemap" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbbbbea733ec66275512d0b9694f34102e7d5406fdbe2ad8d21b28dce92887c" +checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" [[package]] name = "raw-window-handle" @@ -4983,13 +5096,22 @@ dependencies = [ "bitflags 2.10.0", ] +[[package]] +name = "redox_syscall" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" +dependencies = [ + "bitflags 2.10.0", +] + [[package]] name = "redox_users" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 2.0.17", ] @@ -5031,44 +5153,40 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.4" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +checksum = "04e9018c9d814e5f30cc16a0f03271aeab3571e609612d9fe78c1aa8d11c2f62" dependencies = [ "base64", "bytes", "encoding_rs", "futures-core", - "futures-util", "h2", "http", "http-body", "http-body-util", "hyper", - "hyper-tls", + "hyper-rustls", "hyper-util", - "ipnet", "js-sys", "log", "mime 0.3.17", - "native-tls", - "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", + "quinn", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", "sync_wrapper", - "system-configuration", "tokio", - "tokio-native-tls", + "tokio-rustls", + "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", ] [[package]] @@ -5120,6 +5238,20 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "ron" version = "0.11.0" @@ -5133,6 +5265,20 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "ron" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd490c5b18261893f14449cbd28cb9c0b637aebf161cd77900bfdedaff21ec32" +dependencies = [ + "bitflags 2.10.0", + "once_cell", + "serde", + "serde_derive", + "typeid", + "unicode-ident", +] + [[package]] name = "roxmltree" version = "0.20.0" @@ -5159,7 +5305,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.111", + "syn 2.0.114", "walkdir", ] @@ -5223,9 +5369,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags 2.10.0", "errno", @@ -5235,23 +5381,80 @@ dependencies = [ ] [[package]] -name = "rustls-pemfile" -version = "2.2.0" +name = "rustls" +version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ + "aws-lc-rs", + "once_cell", "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", ] [[package]] name = "rustls-pki-types" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" dependencies = [ + "web-time", "zeroize", ] +[[package]] +name = "rustls-platform-verifier" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + +[[package]] +name = "rustls-webpki" +version = "0.103.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -5274,12 +5477,6 @@ dependencies = [ "unicode-script", ] -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - [[package]] name = "same-file" version = "1.0.6" @@ -5323,6 +5520,25 @@ dependencies = [ "tiny-skia", ] +[[package]] +name = "secret-service" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a62d7f86047af0077255a29494136b9aaaf697c76ff70b8e49cded4e2623c14" +dependencies = [ + "aes", + "cbc", + "futures-util", + "generic-array", + "getrandom 0.2.17", + "hkdf", + "num", + "once_cell", + "serde", + "sha2 0.10.9", + "zbus 5.13.1", +] + [[package]] name = "secure-string" version = "0.3.0" @@ -5335,12 +5551,12 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.1" +version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" dependencies = [ "bitflags 2.10.0", - "core-foundation", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -5358,9 +5574,9 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33" +checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" [[package]] name = "semver" @@ -5407,21 +5623,21 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "indexmap", "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -5432,7 +5648,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -5444,18 +5660,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - [[package]] name = "sha-1" version = "0.9.8" @@ -5521,10 +5725,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -5630,7 +5835,7 @@ dependencies = [ "log", "memmap2", "pkg-config", - "rustix 1.1.2", + "rustix 1.1.3", "thiserror 2.0.17", "wayland-backend", "wayland-client", @@ -5697,7 +5902,7 @@ dependencies = [ "core-graphics", "drm", "fastrand 2.3.0", - "foreign-types 0.5.0", + "foreign-types", "js-sys", "log", "memmap2", @@ -5753,9 +5958,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.4.1" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "svg_fmt" @@ -5797,9 +6002,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -5808,9 +6013,12 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] [[package]] name = "synstructure" @@ -5820,7 +6028,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -5834,20 +6042,20 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", - "core-foundation", + "bitflags 2.10.0", + "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -5873,14 +6081,14 @@ checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964" [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand 2.3.0", "getrandom 0.3.4", "once_cell", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -5919,7 +6127,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -5930,7 +6138,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -6039,9 +6247,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.48.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", @@ -6063,24 +6271,24 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] -name = "tokio-native-tls" -version = "0.3.1" +name = "tokio-rustls" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "native-tls", + "rustls", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -6089,9 +6297,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -6132,9 +6340,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] @@ -6166,21 +6374,21 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.9" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", - "toml_datetime 0.7.3", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "winnow 0.7.14", ] [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow 0.7.14", ] @@ -6191,6 +6399,45 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "bitflags 2.10.0", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" version = "0.3.3" @@ -6199,9 +6446,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -6217,14 +6464,14 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -6285,6 +6532,12 @@ dependencies = [ "rustc-hash 2.1.1", ] +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + [[package]] name = "typenum" version = "1.19.0" @@ -6399,16 +6652,23 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", + "serde_derive", ] [[package]] @@ -6467,12 +6727,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[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" @@ -6564,7 +6818,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "wasm-bindgen-shared", ] @@ -6594,13 +6848,13 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" +checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" dependencies = [ "cc", "downcast-rs", - "rustix 1.1.2", + "rustix 1.1.3", "scoped-tls", "smallvec", "wayland-sys", @@ -6608,12 +6862,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.11" +version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" +checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" dependencies = [ "bitflags 2.10.0", - "rustix 1.1.2", + "rustix 1.1.3", "wayland-backend", "wayland-scanner", ] @@ -6631,20 +6885,20 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.11" +version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" +checksum = "5864c4b5b6064b06b1e8b74ead4a98a6c45a285fe7a0e784d24735f011fdb078" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.9" +version = "0.32.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" +checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -6668,9 +6922,9 @@ dependencies = [ [[package]] name = "wayland-protocols-misc" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfe33d551eb8bffd03ff067a8b44bb963919157841a99957151299a6307d19c" +checksum = "791c58fdeec5406aa37169dd815327d1e47f334219b523444bc26d70ceb4c34e" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -6681,9 +6935,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" +checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -6694,9 +6948,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" +checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -6708,9 +6962,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" +checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" dependencies = [ "proc-macro2", "quick-xml", @@ -6719,22 +6973,22 @@ dependencies = [ [[package]] name = "wayland-server" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbd4f3aba6c9fba70445ad2a484c0ef0356c1a9459b1e8e435bedc1971a6222" +checksum = "9297ab90f8d1f597711d36455c5b1b2290eca59b8134485e377a296b80b118c9" dependencies = [ "bitflags 2.10.0", "downcast-rs", - "rustix 1.1.2", + "rustix 1.1.3", "wayland-backend", "wayland-scanner", ] [[package]] name = "wayland-sys" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" +checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" dependencies = [ "dlib", "log", @@ -6762,6 +7016,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki-root-certs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36a29fc0408b113f68cf32637857ab740edfafdf460c326cd2afaa2d84cc05dc" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "weezl" version = "0.1.12" @@ -6988,7 +7251,7 @@ checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -6999,7 +7262,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7010,7 +7273,7 @@ checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7021,7 +7284,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7030,6 +7293,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result 0.4.1", + "windows-strings", +] + [[package]] name = "windows-result" version = "0.1.2" @@ -7368,7 +7642,7 @@ dependencies = [ "calloop 0.13.0", "cfg_aliases 0.2.1", "concurrent-queue", - "core-foundation", + "core-foundation 0.9.4", "core-graphics", "cursor-icon", "dpi", @@ -7432,16 +7706,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "wit-bindgen" version = "0.46.0" @@ -7476,7 +7740,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 1.1.2", + "rustix 1.1.3", "x11rb-protocol", "xcursor", ] @@ -7595,7 +7859,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] @@ -7617,7 +7881,7 @@ dependencies = [ "futures-sink", "futures-util", "hex", - "nix 0.26.4", + "nix", "once_cell", "ordered-stream", "rand 0.8.5", @@ -7637,14 +7901,14 @@ dependencies = [ [[package]] name = "zbus" -version = "5.12.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" +checksum = "17f79257df967b6779afa536788657777a0001f5b42524fcaf5038d4344df40b" dependencies = [ "async-broadcast 0.7.2", "async-executor", "async-io 2.6.0", - "async-lock 3.4.1", + "async-lock 3.4.2", "async-process 2.5.0", "async-recursion", "async-task", @@ -7655,8 +7919,9 @@ dependencies = [ "futures-core", "futures-lite 2.6.1", "hex", - "nix 0.30.1", + "libc", "ordered-stream", + "rustix 1.1.3", "serde", "serde_repr", "tokio", @@ -7665,9 +7930,9 @@ dependencies = [ "uuid", "windows-sys 0.61.2", "winnow 0.7.14", - "zbus_macros 5.12.0", - "zbus_names 4.2.0", - "zvariant 5.8.0", + "zbus_macros 5.13.1", + "zbus_names 4.3.1", + "zvariant 5.9.1", ] [[package]] @@ -7686,17 +7951,17 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.12.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" +checksum = "aad23e2d2f91cae771c7af7a630a49e755f1eb74f8a46e9f6d5f7a146edf5a37" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.111", - "zbus_names 4.2.0", - "zvariant 5.8.0", - "zvariant_utils 3.2.1", + "syn 2.0.114", + "zbus_names 4.3.1", + "zvariant 5.9.1", + "zvariant_utils 3.3.0", ] [[package]] @@ -7712,14 +7977,13 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.2.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" +checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" dependencies = [ "serde", - "static_assertions", "winnow 0.7.14", - "zvariant 5.8.0", + "zvariant 5.9.1", ] [[package]] @@ -7732,7 +7996,7 @@ dependencies = [ "serde", "serde_repr", "static_assertions", - "zbus 5.12.0", + "zbus 5.13.1", ] [[package]] @@ -7743,22 +8007,22 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7778,7 +8042,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] @@ -7793,13 +8057,13 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -7833,14 +8097,14 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "zip" -version = "5.1.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f852905151ac8d4d06fdca66520a661c09730a74c6d4e2b0f27b436b382e532" +checksum = "bdd8a47718a4ee5fe78e07667cd36f3de80e7c2bfe727c7074245ffc7303c037" dependencies = [ "aes", "arbitrary", @@ -7849,6 +8113,7 @@ dependencies = [ "crc32fast", "deflate64", "flate2", + "generic-array", "getrandom 0.3.4", "hmac 0.12.1", "indexmap", @@ -7865,9 +8130,15 @@ dependencies = [ [[package]] name = "zlib-rs" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f936044d677be1a1168fae1d03b583a285a5dd9d8cbf7b24c23aa1fc775235" +checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" + +[[package]] +name = "zmij" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac93432f5b761b22864c774aac244fa5c0fd877678a4c37ebf6cf42208f9c9ec" [[package]] name = "zopfli" @@ -7917,9 +8188,9 @@ checksum = "111f7d9820f05fd715df3144e254d6fc02ee4088b0644c0ffd0efc9e6d9d2773" [[package]] name = "zune-jpeg" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d915729b0e7d5fe35c2f294c5dc10b30207cc637920e5b59077bfa3da63f28" +checksum = "e35aee689668bf9bd6f6f3a6c60bb29ba1244b3b43adfd50edd554a371da37d5" dependencies = [ "zune-core", ] @@ -7940,17 +8211,17 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.8.0" +version = "5.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" +checksum = "326aaed414f04fe839777b4c443d4e94c74e7b3621093bd9c5e649ac8aa96543" dependencies = [ "endi", "enumflags2", "serde", "url", "winnow 0.7.14", - "zvariant_derive 5.8.0", - "zvariant_utils 3.2.1", + "zvariant_derive 5.9.1", + "zvariant_utils 3.3.0", ] [[package]] @@ -7968,15 +8239,15 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.8.0" +version = "5.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" +checksum = "ba44e1f8f4da9e6e2d25d2a60b116ef8b9d0be174a7685e55bb12a99866279a7" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.111", - "zvariant_utils 3.2.1", + "syn 2.0.114", + "zvariant_utils 3.3.0", ] [[package]] @@ -7992,13 +8263,13 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" +checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.111", + "syn 2.0.114", "winnow 0.7.14", ] diff --git a/Cargo.toml b/Cargo.toml index 333503d..c891f50 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,12 +6,15 @@ rust-version = "1.90" [dependencies] cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols" } -crabtime = "1.1.3" +cosmic-settings-accessibility-subscription = { git = "https://github.com/pop-os/cosmic-settings" } +cosmic-settings-a11y-manager-subscription = { git = "https://github.com/pop-os/cosmic-settings" } +cosmic-settings-network-manager-subscription = { git = "https://github.com/pop-os/cosmic-settings" } +crabtime = "1.1.4" eyre = "0.6.12" futures = "0.3.31" futures-util = "0.3.31" geonames = { path = "geonames" } -gettext-rs = { version = "0.7.2", features = ["gettext-system"] } +gettext-rs = { version = "0.7.7", features = ["gettext-system"] } heck = "0.5.0" # Internationalization i18n-embed = { version = "0.16", features = [ @@ -19,25 +22,25 @@ i18n-embed = { version = "0.16", features = [ "desktop-requester", ] } i18n-embed-fl = "0.10" -indexmap = "2.11.3" -itoa = "1.0.15" +indexmap = "2.13.0" +itoa = "1.0.17" kdl = "6.5.0" num-derive = "0.4.2" num-traits = "0.2.19" pwd = "1.4.0" pwhash = "1.0.0" regex = "1" -ron = "0.11" +ron = "0.12" rust-embed = "8" secure-string = "0.3.0" serde = { version = "1.0.228", features = ["derive"] } -slotmap = "1.0.7" +slotmap = "1.1.1" tokio = { version = "1", features = ["sync"] } -tracing = "0.1.41" -tracing-subscriber = "0.3.20" -url = "2.5.7" +tracing = "0.1.44" +tracing-subscriber = "0.3.22" +url = "2.5.8" xkb-data = "0.2.1" -zbus = "5" +zbus = "5.13.1" zbus_polkit = "5.0.0" [dependencies.accounts-zbus] @@ -49,15 +52,10 @@ git = "https://github.com/pop-os/cosmic-comp" [dependencies.cosmic-randr-shell] git = "https://github.com/pop-os/cosmic-randr" -[dependencies.cosmic-settings-subscriptions] -git = "https://github.com/pop-os/cosmic-settings-subscriptions" -default-features = false -features = ["accessibility", "network_manager"] - [dependencies.libcosmic] git = "https://github.com/pop-os/libcosmic.git" default-features = false -features = ["dbus-config", "single-instance", "tokio", "winit", "xdg-portal"] +features = ["a11y", "dbus-config", "single-instance", "tokio", "winit", "xdg-portal"] [dependencies.locale1] git = "https://github.com/pop-os/dbus-settings-bindings" @@ -85,11 +83,11 @@ lto = "thin" [workspace] members = ["geonames"] -[patch.'https://github.com/pop-os/cosmic-protocols'] -cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//" } -cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//" } +[patch."https://github.com/smithay/client-toolkit.git"] +sctk = { package = "smithay-client-toolkit", version = "0.20.0" } # [patch.'https://github.com/pop-os/libcosmic.git'] # libcosmic = { path = "../libcosmic" } # cosmic-config = { path = "../libcosmic/cosmic-config" } # cosmic-theme = { path = "../libcosmic/cosmic-theme" } +# iced_futures = { path = "../libcosmic/iced/futures" } diff --git a/cargo.just b/cargo.just new file mode 100644 index 0000000..b13d08d --- /dev/null +++ b/cargo.just @@ -0,0 +1,72 @@ +[private] +default: + @just --justfile cargo.just --list + +# Compile with debug profile +[no-cd] +build-debug *args: + cargo build {{ args }} + +# Compile with release profile +[no-cd] +build-release *args: (build-debug '--release' args) + +# Compile with a vendored tarball +[no-cd] +build-vendored *args: vendor-extract (build-release '--frozen --offline' args) + +# Check for errors and linter warnings +[no-cd] +check *args: + cargo clippy --all-features {{ args }} -- -W clippy::pedantic + +# Runs a check with JSON message format for IDE integration +[no-cd] +check-json: (check '--message-format=json') + +# Remove Cargo build artifacts +[no-cd] +clean: + cargo clean + +# Also remove .cargo and vendored dependencies +[no-cd] +clean-dist: clean + rm -rf .cargo vendor vendor.tar target + +# Run the application for testing purposes +[no-cd] +run *args: + env RUST_LOG=debug RUST_BACKTRACE=full cargo run {{ args }} + +# Run `cargo test` +[no-cd] +test *args: + cargo test {{ args }} + +# Vendor Cargo dependencies locally +[no-cd] +vendor: + #!/usr/bin/env bash + mkdir -p .cargo + cargo vendor --locked --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 +[no-cd] +vendor-extract: + rm -rf vendor + tar pxf vendor.tar diff --git a/geonames/Cargo.toml b/geonames/Cargo.toml index 1c0023d..2f4eda1 100644 --- a/geonames/Cargo.toml +++ b/geonames/Cargo.toml @@ -5,6 +5,6 @@ edition = "2024" [dependencies] bitcode = "0.6" -reqwest = "0.12" -tokio = { version = "1.47", features = ["full"] } -zip = "5" +reqwest = "0.13" +tokio = { version = "1.49", features = ["full"] } +zip = "7" diff --git a/i18n/ar/cosmic_initial_setup.ftl b/i18n/ar/cosmic_initial_setup.ftl index b0b63dd..2443d63 100644 --- a/i18n/ar/cosmic_initial_setup.ftl +++ b/i18n/ar/cosmic_initial_setup.ftl @@ -10,8 +10,7 @@ skip = تخطَّ skip-setup-and-close = تخطَّ الإعداد وأغلق type-to-search = اكتب للبحث… wifi = واي فاي -# WelcomePage -welcome-page = مرحبًا +accessibility-page = مرحبًا .scale-options = خيارات مقياس إضافية .screen-reader = قارئ الشاشة .interface-size = حجم الواجهة diff --git a/i18n/bg/cosmic_initial_setup.ftl b/i18n/bg/cosmic_initial_setup.ftl index 20f0648..e7ed519 100644 --- a/i18n/bg/cosmic_initial_setup.ftl +++ b/i18n/bg/cosmic_initial_setup.ftl @@ -59,7 +59,7 @@ users = Потребители .desc = Удостоверяване и потребители. .admin = Администратор .standard = Стандартен -welcome-page = Добре дошли +accessibility-page = Добре дошли .scale-options = Допълнителни опции за мащабиране .screen-reader = Четец на екрана .interface-size = Размер на интерфейса diff --git a/i18n/cs/cosmic_initial_setup.ftl b/i18n/cs/cosmic_initial_setup.ftl index 541dbb8..9bafb41 100644 --- a/i18n/cs/cosmic_initial_setup.ftl +++ b/i18n/cs/cosmic_initial_setup.ftl @@ -10,8 +10,7 @@ skip = Přeskočit skip-setup-and-close = Přeskočit nastavování a zavřít type-to-search = Pište pro vyhledávání… wifi = Wi-Fi -# WelcomePage -welcome-page = Vítejte +accessibility-page = Vítejte .scale-options = Další možnosti škálování .screen-reader = Čtečka obrazovky .interface-size = Velikost rozhraní diff --git a/i18n/en/cosmic_initial_setup.ftl b/i18n/en/cosmic_initial_setup.ftl index 730a66a..4174651 100644 --- a/i18n/en/cosmic_initial_setup.ftl +++ b/i18n/en/cosmic_initial_setup.ftl @@ -4,15 +4,17 @@ finish = Finish identity = Identity next = Next password = Password -password-confirm = Confirm Password +password-confirm = Confirm password settings = Settings skip = Skip skip-setup-and-close = Skip setup and close type-to-search = Type to search… wifi = Wi-Fi -# WelcomePage -welcome-page = Welcome +# Accessibility Page +accessibility-page = Accessibility setup + .display-scaling = Display scaling + .scale = Scale .scale-options = Additional scale options .screen-reader = Screen reader .interface-size = Interface size @@ -25,65 +27,65 @@ welcome-page = Welcome select-language-page = Select a language # SelectKeyboardLayoutPage -keyboard-layout-page = Select Keyboard Layout +keyboard-layout-page = Select keyboard layout # CreateAccountPage -create-account-page = Create Your account +create-account-page = Create your account .full-name = Full name .user-name = User name .user-name-note = This will be used to name your home folder, and can't be changed. .dialog-add = Add .profile-add = Choose profile image - .invalid-username = Invalid username. - .password-mismatch = Password and confirmation must match. + .invalid-username = Invalid username + .password-mismatch = Password and confirmation must match # LocationPage -timezone-and-location-page = Timezone and Location +timezone-and-location-page = Timezone and location .search-the-closest-major-city = Search the closest major city... .geonames-attribution = The list is sorted by the city population. Data: geonames.org (licensed CC-BY-4.0). # AppearancePage -appearance-page = Personalize Appearance +appearance-page = Personalize appearance .description = You can further customize accent colors and the look of your desktop in Appearance settings. # LayoutPage -layout-page = Layout Configuration +layout-page = Layout configuration .bottom-panel = Bottom panel .top-panel-and-dock = Top panel and dock .description = Move the panel or dock to any edge, change their size, and automatically hide them in Settings. # SystemAppsPage -new-apps-page = New System Applications +new-apps-page = New system applications .description = Enjoy an array of new system applications that come with the COSMIC desktop environment. Including Settings, COSMIC App Store, Files, Text Editor, and Terminal. # NewKeyboardShortcutsPage -new-shortcuts-page = New Keyboard Shortcuts +new-shortcuts-page = New keyboard shortcuts .description = Use Shift+Super+arrows, or drag with the pointer, to move windows. Take advantage of the visual hints when using automatic window tiling. # WorkflowPage -workflow-page = Workspaces for Your Workflow +workflow-page = Workspaces for your workflow .description = Float or automatically tile windows per-workspace using the tiling applet. You can select vertical or horizontal workspaces. You can also pin workspaces to make them static. # LauncherPage -launcher-page = Fast and Efficient +launcher-page = Fast and efficient .description = Press the Super (or Windows) key to activate the Launcher. Search and press enter to open an app or switch to it. You can also jump to settings or system functions like suspend. Type “?” to learn about the Launcher's advanced features. # WirelessPage -wireless-page = Get Connected +wireless-page = Get connected .explain = When connected, you'll get the latest system and security updates. - .airplane-mode = Airplane mode is on. + .airplane-mode = Airplane mode is on .connect = Connect .connected = Connected .connecting = Connecting… .disconnect = Disconnect .forget = Forget - .no-networks = No networks have been found. - .known-networks = Known Networks - .visible-networks = Visible Networks + .no-networks = No networks have been found + .known-networks = Known networks + .visible-networks = Visible networks -auth-dialog = Authentication Required +auth-dialog = Authentication required .wifi-description = Enter the password or encryption key. You can also connect by pressing the “WPS” button on the router. forget-dialog = Forget this Wi-Fi network? diff --git a/i18n/es-419/cosmic_initial_setup.ftl b/i18n/es-419/cosmic_initial_setup.ftl index 9a475cb..0356de8 100644 --- a/i18n/es-419/cosmic_initial_setup.ftl +++ b/i18n/es-419/cosmic_initial_setup.ftl @@ -10,8 +10,7 @@ skip = Omitir skip-setup-and-close = Omitir inicialización y cerrar type-to-search = Escribe para buscar… wifi = Wi-Fi -# WelcomePage -welcome-page = Le damos la bienvenida +accessibility-page = Le damos la bienvenida .scale-options = Opciones de escala adicionales .screen-reader = Lector de pantalla .interface-size = Tamaño de interfaz diff --git a/i18n/es-ES/cosmic_initial_setup.ftl b/i18n/es-ES/cosmic_initial_setup.ftl index 4168de6..e1b763f 100644 --- a/i18n/es-ES/cosmic_initial_setup.ftl +++ b/i18n/es-ES/cosmic_initial_setup.ftl @@ -10,8 +10,7 @@ skip = Omitir skip-setup-and-close = Omitir inicialización y cerrar type-to-search = Escribe para buscar… wifi = Wi-Fi -# WelcomePage -welcome-page = Le damos la bienvenida +accessibility-page = Le damos la bienvenida .scale-options = Opciones de escala adicionales .screen-reader = Lector de pantalla .interface-size = Tamaño de interfaz diff --git a/i18n/es-MX/cosmic_initial_setup.ftl b/i18n/es-MX/cosmic_initial_setup.ftl index d47eddd..f1ddf93 100644 --- a/i18n/es-MX/cosmic_initial_setup.ftl +++ b/i18n/es-MX/cosmic_initial_setup.ftl @@ -10,8 +10,7 @@ skip = Omitir skip-setup-and-close = Omitir inicialización y cerrar type-to-search = Escribe para buscar… wifi = Wi-Fi -# WelcomePage -welcome-page = Le damos la bienvenida +accessibility-page = Le damos la bienvenida .scale-options = Opciones de escala adicionales .screen-reader = Lector de pantalla .interface-size = Tamaño de interfaz diff --git a/i18n/fr/cosmic_initial_setup.ftl b/i18n/fr/cosmic_initial_setup.ftl index fc858df..3dcce40 100644 --- a/i18n/fr/cosmic_initial_setup.ftl +++ b/i18n/fr/cosmic_initial_setup.ftl @@ -34,7 +34,7 @@ wireless-page = Restez connecté .known-networks = Réseaux connus .visible-networks = Réseaux visibles keyboard-layout-page = Sélectionner la disposition clavier -welcome-page = Bienvenue +accessibility-page = Bienvenue .scale-options = Options de mise à l'échelle supplémentaires .screen-reader = Lecteur d'écran .interface-size = Taille de l'interface diff --git a/i18n/ga/cosmic_initial_setup.ftl b/i18n/ga/cosmic_initial_setup.ftl index cf5d09a..8af7696 100644 --- a/i18n/ga/cosmic_initial_setup.ftl +++ b/i18n/ga/cosmic_initial_setup.ftl @@ -10,7 +10,7 @@ skip = Scipeáil skip-setup-and-close = Scipeáil ar an socrú agus dún type-to-search = Clóscríobh chun cuardach a dhéanamh… wifi = Wi-Fi -welcome-page = Fáilte +accessibility-page = Fáilte .scale-options = Roghanna scála breise .screen-reader = Léitheoir scáileáin .interface-size = Méid an chomhéadain diff --git a/i18n/hu/cosmic_initial_setup.ftl b/i18n/hu/cosmic_initial_setup.ftl index 5c48876..6da7dfa 100644 --- a/i18n/hu/cosmic_initial_setup.ftl +++ b/i18n/hu/cosmic_initial_setup.ftl @@ -10,8 +10,7 @@ skip = Kihagyás skip-setup-and-close = Beállítás kihagyása és bezárás type-to-search = Írj a kereséshez… wifi = Wi-Fi -# WelcomePage -welcome-page = Üdvözlünk +accessibility-page = Üdvözlünk .scale-options = További skálázás .screen-reader = Képernyőolvasó .interface-size = Kezelőfelület mérete diff --git a/i18n/it/cosmic_initial_setup.ftl b/i18n/it/cosmic_initial_setup.ftl index 6cccda3..ce84c2b 100644 --- a/i18n/it/cosmic_initial_setup.ftl +++ b/i18n/it/cosmic_initial_setup.ftl @@ -25,7 +25,7 @@ create-account-page = Crea il tuo account .profile-add = Scegli immagine del profilo .invalid-username = Nome utente non valido. .password-mismatch = La password e la conferma devono corrispondere. -welcome-page = Benvenuto +accessibility-page = Benvenuto .scale-options = Opzioni di scala aggiuntive .screen-reader = Lettore schermo .interface-size = Dimensione interfaccia diff --git a/i18n/ja/cosmic_initial_setup.ftl b/i18n/ja/cosmic_initial_setup.ftl index 9cd40e0..4b38c65 100644 --- a/i18n/ja/cosmic_initial_setup.ftl +++ b/i18n/ja/cosmic_initial_setup.ftl @@ -2,8 +2,7 @@ back = 前 next = 次 finish = 完了 skip-setup-and-close = スキップして閉じる -# WelcomePage -welcome-page = ようこそ +accessibility-page = ようこそ .scale-options = 追加のスケーリングオプション .screen-reader = スクリーンリーダー .interface-size = インターフェースのサイズ diff --git a/i18n/nb-NO/cosmic_initial_setup.ftl b/i18n/nb-NO/cosmic_initial_setup.ftl index 2de7e3a..fefe5b7 100644 --- a/i18n/nb-NO/cosmic_initial_setup.ftl +++ b/i18n/nb-NO/cosmic_initial_setup.ftl @@ -23,7 +23,7 @@ create-account-page = Lag din bruker timezone-and-location-page = Tidssone og Lokasjon .search-the-closest-major-city = Søk etter nærmeste storby ... .geonames-attribution = Listen er sortert etter bybefolkning. Data: geonames.org (Lisensiert CC-BY-4.0). -welcome-page = Velkommen +accessibility-page = Velkommen .scale-options = Flere skaleringsinnstillinger .screen-reader = Skjermleser .interface-size = Grensesnittstørrelse diff --git a/i18n/nl/cosmic_initial_setup.ftl b/i18n/nl/cosmic_initial_setup.ftl index 5e66d0a..24948e5 100644 --- a/i18n/nl/cosmic_initial_setup.ftl +++ b/i18n/nl/cosmic_initial_setup.ftl @@ -2,8 +2,7 @@ back = Terug next = Volgende finish = Voltooien skip-setup-and-close = Setup overslaan en sluiten -# WelcomePage -welcome-page = Welkom +accessibility-page = Welkom .scale-options = Extra schalingsopties .screen-reader = Schermverteller .interface-size = Interface-grootte diff --git a/i18n/pl/cosmic_initial_setup.ftl b/i18n/pl/cosmic_initial_setup.ftl index 58f574f..73b25be 100644 --- a/i18n/pl/cosmic_initial_setup.ftl +++ b/i18n/pl/cosmic_initial_setup.ftl @@ -10,8 +10,7 @@ skip = Pomiń skip-setup-and-close = Pomiń konfigurację i zamknij type-to-search = Zacznij pisać by wyszukać… wifi = Wi-Fi -# WelcomePage -welcome-page = Witaj +accessibility-page = Witaj .scale-options = Dodatkowe opcje skalowania .screen-reader = Czytnik ekranu .interface-size = Rozmiar interfejsu diff --git a/i18n/pt-BR/cosmic_initial_setup.ftl b/i18n/pt-BR/cosmic_initial_setup.ftl index 7995e2a..f8b886d 100644 --- a/i18n/pt-BR/cosmic_initial_setup.ftl +++ b/i18n/pt-BR/cosmic_initial_setup.ftl @@ -10,8 +10,7 @@ skip = Ignorar skip-setup-and-close = Pular a configuração e fechar type-to-search = Digite para pesquisar… wifi = Wi-Fi -# WelcomePage -welcome-page = Boas-vindas +accessibility-page = Boas-vindas .scale-options = Ajuste de escala .screen-reader = Leitor de tela .interface-size = Tamanho da interface diff --git a/i18n/pt/cosmic_initial_setup.ftl b/i18n/pt/cosmic_initial_setup.ftl index 73b68aa..6d02d68 100644 --- a/i18n/pt/cosmic_initial_setup.ftl +++ b/i18n/pt/cosmic_initial_setup.ftl @@ -10,7 +10,7 @@ skip = Ignorar skip-setup-and-close = Ignorar configuração e fechar type-to-search = Escreva para pesquisar… wifi = Wi-Fi -welcome-page = Bem-vindo +accessibility-page = Bem-vindo .scale-options = Opções adicionais de escala .screen-reader = Leitor de ecrã .interface-size = Tamanho da interface diff --git a/i18n/ru/cosmic_initial_setup.ftl b/i18n/ru/cosmic_initial_setup.ftl index 896542c..2d82b42 100644 --- a/i18n/ru/cosmic_initial_setup.ftl +++ b/i18n/ru/cosmic_initial_setup.ftl @@ -10,7 +10,7 @@ skip = Пропустить skip-setup-and-close = Пропустить настройку и закрыть type-to-search = Введите для поиска… wifi = Wi-Fi -welcome-page = Добро пожаловать +accessibility-page = Добро пожаловать .scale-options = Доп. параметры масштабирования .screen-reader = Экранный диктор .interface-size = Размер интерфейса diff --git a/i18n/sv/cosmic_initial_setup.ftl b/i18n/sv/cosmic_initial_setup.ftl index b1963b5..291ad01 100644 --- a/i18n/sv/cosmic_initial_setup.ftl +++ b/i18n/sv/cosmic_initial_setup.ftl @@ -10,7 +10,7 @@ skip = Hoppa över skip-setup-and-close = Hoppa över konfiguration och stäng type-to-search = Skriv för att söka… wifi = Wi-Fi -welcome-page = Välkommen +accessibility-page = Välkommen .scale-options = Ytterligare skalningsalternativ .screen-reader = Skärmläsare .interface-size = Gränssnittsstorlek diff --git a/i18n/tr/cosmic_initial_setup.ftl b/i18n/tr/cosmic_initial_setup.ftl index dd8c922..cf76e27 100644 --- a/i18n/tr/cosmic_initial_setup.ftl +++ b/i18n/tr/cosmic_initial_setup.ftl @@ -3,7 +3,7 @@ cancel = Vazgeç skip-setup-and-close = Kurulumu atla ve kapat type-to-search = Arama için yaz… wifi = Wi-Fi -welcome-page = Hoş geldiniz +accessibility-page = Hoş geldiniz .scale-options = Ek ölçek seçenekleri .screen-reader = Ekran okuyucu .interface-size = Arayüz boyutu diff --git a/i18n/uk/cosmic_initial_setup.ftl b/i18n/uk/cosmic_initial_setup.ftl index ed76097..6be4131 100644 --- a/i18n/uk/cosmic_initial_setup.ftl +++ b/i18n/uk/cosmic_initial_setup.ftl @@ -9,7 +9,7 @@ settings = Налаштування skip = Пропустити skip-setup-and-close = Пропустити налаштування та закрити type-to-search = Введіть для пошуку… -welcome-page = Ласкаво просимо +accessibility-page = Ласкаво просимо .scale-options = Додаткові налаштування масштабування .screen-reader = Читач екрана .interface-size = Розмір інтерфейсу diff --git a/i18n/vi/cosmic_initial_setup.ftl b/i18n/vi/cosmic_initial_setup.ftl index a097ed6..ebb6965 100644 --- a/i18n/vi/cosmic_initial_setup.ftl +++ b/i18n/vi/cosmic_initial_setup.ftl @@ -41,7 +41,7 @@ wireless-page = Bắt đầu kết nối mạng .no-networks = Không tìm thấy mạng. .known-networks = Các mạng đã biết .visible-networks = Các mạng hiển thị -welcome-page = Chào mừng +accessibility-page = Chào mừng .scale-options = Thêm lựa chọn tỉ lệ .screen-reader = Screen reader .interface-size = Tỷ lệ giao diện diff --git a/i18n/zh-CN/cosmic_initial_setup.ftl b/i18n/zh-CN/cosmic_initial_setup.ftl index 175f502..73f0ee7 100644 --- a/i18n/zh-CN/cosmic_initial_setup.ftl +++ b/i18n/zh-CN/cosmic_initial_setup.ftl @@ -11,8 +11,7 @@ skip-setup-and-close = 跳过设置并关闭 type-to-search = 输入以搜索… wifi = Wi-Fi -# WelcomePage -welcome-page = 欢迎 +accessibility-page = 欢迎 .scale-options = 其他缩放选项 .screen-reader = 屏幕阅读器 .interface-size = 界面大小 diff --git a/justfile b/justfile index 3006d3b..eedc7cc 100644 --- a/justfile +++ b/justfile @@ -1,7 +1,7 @@ set unstable # The cargo module contains cargo recipes shared by all cosmic projects. -mod? cargo 'cargo.just' +mod cargo 'cargo.just' name := 'cosmic-initial-setup' appid := 'com.system76.CosmicInitialSetup' @@ -10,7 +10,7 @@ prefix := '/usr' # An optional file that when set will prevent initial-setup from loading disable-if-exists := '' -export DISABLE_IF_EXISTS := disable-if-exists || env('DISABLE_IF_EXISTS', '') +export DISABLE_IF_EXISTS := env('DISABLE_IF_EXISTS', disable-if-exists) # Installation paths base-dir := absolute_path(clean(rootdir / prefix)) @@ -26,10 +26,10 @@ polkit-rules-dst := base-dir / 'share' / 'polkit-1' / 'rules.d' / '20-cosmic-ini themes-dst := base-dir / 'share' / 'cosmic-themes' # Default recipe which runs `just cargo build-release` -default: fetch +default: @just cargo build-release -build-release: fetch +build-release: @just cargo build-release # Build release binary from vendored sources @@ -37,14 +37,10 @@ build-vendored: @just cargo build-vendored # Clean -clean: fetch +clean: @just cargo clean rm -rf {{layouts-dst}} {{themes-dst}} {{bin-dst}} {{icon-dst}} {{desktop-dst}} {{autostart-dst}} {{polkit-rules-dst}} -# Fetch cargo.just module if it is missing on the disk. -@fetch: - {{ if path_exists('cargo.just') == 'false' { 'curl --proto =https --tlsv1.2 -sSf -o cargo.just https://raw.githubusercontent.com/pop-os/cosmic-justfiles/master/cargo.just' } else { 'true' } }} - # Installs files install: mkdir -p {{layouts-dst}} {{themes-dst}} @@ -71,5 +67,5 @@ uninstall: rm -rf {{desktop-dst}} {{polkit-rules-dst}} {{icon-dst}} {{themes-dst}} {{layouts-dst}} {{bin-dst}} # Vendor sources -vendor: fetch +vendor: just cargo vendor diff --git a/src/accessibility.rs b/src/accessibility.rs deleted file mode 100644 index 78194d1..0000000 --- a/src/accessibility.rs +++ /dev/null @@ -1,244 +0,0 @@ -use cosmic_protocols::a11y::v1::client::cosmic_a11y_manager_v1; -use num_derive::{FromPrimitive, ToPrimitive}; -use sctk::{ - reexports::{ - calloop::{self, LoopSignal, channel}, - calloop_wayland_source::WaylandSource, - client::{ - ConnectError, Connection, Dispatch, Proxy, WEnum, - globals::{GlobalListContents, registry_queue_init}, - protocol::wl_registry, - }, - }, - registry::RegistryState, -}; -use tokio::sync::mpsc; - -#[derive(Debug, Clone, Copy)] -pub enum AccessibilityEvent { - Bound(u32), - Magnifier(bool), - ScreenFilter { - inverted: bool, - filter: Option, - }, - Closed, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, FromPrimitive, ToPrimitive)] -pub enum ColorFilter { - Greyscale, - Deuteranopia, - Protanopia, - Tritanopia, - Unknown, -} - -impl Default for ColorFilter { - fn default() -> Self { - ColorFilter::Unknown - } -} - -#[derive(Debug, Clone, Copy)] -pub enum AccessibilityRequest { - Magnifier(bool), - ScreenFilter { - inverted: bool, - filter: Option, - }, -} - -pub type Sender = calloop::channel::Sender; - -pub fn spawn_wayland_connection() -> Result< - ( - channel::Sender, - mpsc::Receiver, - ), - ConnectError, -> { - let (event_tx, event_rx) = mpsc::channel(10); - let (request_tx, request_rx) = channel::channel(); - let conn = Connection::connect_to_env()?; - - std::thread::spawn(move || { - if let Err(err) = wayland_thread(conn, event_tx.clone(), request_rx) { - tracing::warn!( - err = err.to_string(), - "Accessibility protocol wayland thread crashed" - ); - let _ = event_tx.blocking_send(AccessibilityEvent::Closed); - } - }); - - Ok((request_tx, event_rx)) -} - -fn wayland_thread( - conn: Connection, - tx: mpsc::Sender, - rx: channel::Channel, -) -> eyre::Result<()> { - struct State { - loop_signal: LoopSignal, - tx: mpsc::Sender, - global: cosmic_a11y_manager_v1::CosmicA11yManagerV1, - - magnifier: bool, - screen_inverted: bool, - screen_filter: Option, - } - - impl Dispatch for State { - fn event( - state: &mut Self, - _proxy: &cosmic_a11y_manager_v1::CosmicA11yManagerV1, - event: ::Event, - _data: &(), - _conn: &Connection, - _qhandle: &sctk::reexports::client::QueueHandle, - ) { - match event { - cosmic_a11y_manager_v1::Event::Magnifier { active } => { - let magnifier = active - .into_result() - .unwrap_or(cosmic_a11y_manager_v1::ActiveState::Disabled) - == cosmic_a11y_manager_v1::ActiveState::Enabled; - if magnifier != state.magnifier { - if state - .tx - .blocking_send(AccessibilityEvent::Magnifier(magnifier)) - .is_err() - { - state.loop_signal.stop(); - state.loop_signal.wakeup(); - }; - state.magnifier = magnifier; - } - } - cosmic_a11y_manager_v1::Event::ScreenFilter { inverted, filter } => { - let inverted = inverted - .into_result() - .unwrap_or(cosmic_a11y_manager_v1::ActiveState::Disabled) - == cosmic_a11y_manager_v1::ActiveState::Enabled; - let filter = match filter { - WEnum::Value(cosmic_a11y_manager_v1::Filter::Disabled) => None, - WEnum::Value(cosmic_a11y_manager_v1::Filter::Greyscale) => { - Some(ColorFilter::Greyscale) - } - WEnum::Value(cosmic_a11y_manager_v1::Filter::DaltonizeProtanopia) => { - Some(ColorFilter::Protanopia) - } - WEnum::Value(cosmic_a11y_manager_v1::Filter::DaltonizeDeuteranopia) => { - Some(ColorFilter::Deuteranopia) - } - WEnum::Value(cosmic_a11y_manager_v1::Filter::DaltonizeTritanopia) => { - Some(ColorFilter::Tritanopia) - } - WEnum::Value(_) | WEnum::Unknown(_) => Some(ColorFilter::Unknown), - }; - - if inverted != state.screen_inverted || filter != state.screen_filter { - if state - .tx - .blocking_send(AccessibilityEvent::ScreenFilter { inverted, filter }) - .is_err() - { - state.loop_signal.stop(); - state.loop_signal.wakeup(); - }; - state.screen_inverted = inverted; - state.screen_filter = filter; - } - } - _ => unreachable!(), - } - } - } - impl Dispatch for State { - fn event( - _state: &mut Self, - _proxy: &wl_registry::WlRegistry, - _event: ::Event, - _data: &GlobalListContents, - _conn: &Connection, - _qhandle: &sctk::reexports::client::QueueHandle, - ) { - // We don't care about any dynamic globals - } - } - - let mut event_loop = calloop::EventLoop::::try_new().unwrap(); - - let loop_handle = event_loop.handle(); - let (globals, event_queue) = registry_queue_init(&conn).unwrap(); - let qhandle = event_queue.handle(); - - WaylandSource::new(conn, event_queue) - .insert(loop_handle.clone()) - .map_err(|err| err.error)?; - - let registry_state = RegistryState::new(&globals); - let Ok(global) = registry_state.bind_one::( - &qhandle, - 1..=2, - (), - ) else { - return Ok(()); - }; - - let _ = tx.blocking_send(AccessibilityEvent::Bound(global.version())); - - loop_handle - .insert_source(rx, |request, _, state| match request { - channel::Event::Msg(AccessibilityRequest::Magnifier(val)) => { - state.global.set_magnifier(if val { - cosmic_a11y_manager_v1::ActiveState::Enabled - } else { - cosmic_a11y_manager_v1::ActiveState::Disabled - }); - } - channel::Event::Msg(AccessibilityRequest::ScreenFilter { inverted, filter }) => { - state.global.set_screen_filter( - if inverted { - cosmic_a11y_manager_v1::ActiveState::Enabled - } else { - cosmic_a11y_manager_v1::ActiveState::Disabled - }, - match filter { - None => cosmic_a11y_manager_v1::Filter::Disabled, - Some(ColorFilter::Greyscale) => cosmic_a11y_manager_v1::Filter::Greyscale, - Some(ColorFilter::Protanopia) => { - cosmic_a11y_manager_v1::Filter::DaltonizeProtanopia - } - Some(ColorFilter::Deuteranopia) => { - cosmic_a11y_manager_v1::Filter::DaltonizeDeuteranopia - } - Some(ColorFilter::Tritanopia) => { - cosmic_a11y_manager_v1::Filter::DaltonizeTritanopia - } - Some(ColorFilter::Unknown) => cosmic_a11y_manager_v1::Filter::Unknown, - }, - ); - } - channel::Event::Closed => { - state.loop_signal.stop(); - state.loop_signal.wakeup(); - } - }) - .map_err(|err| err.error)?; - - let mut state = State { - loop_signal: event_loop.get_signal(), - tx, - global, - - magnifier: false, - screen_inverted: false, - screen_filter: None, - }; - - event_loop.run(None, &mut state, |_| {})?; - Ok(()) -} diff --git a/src/main.rs b/src/main.rs index a0e8f2e..2ba8966 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,7 +15,6 @@ use futures::{SinkExt, Stream, StreamExt}; use indexmap::IndexMap; use tracing_subscriber::prelude::*; -mod accessibility; mod greeter; mod localize; @@ -58,10 +57,11 @@ fn main() -> Result<(), Box> { .with_writer(std::io::stderr) .event_format(log_format) .with_filter(tracing_subscriber::filter::filter_fn(move |metadata| { - let target = metadata.target(); - metadata.level() == &tracing::Level::ERROR - || (target.starts_with("cosmic_initial_setup") - && metadata.level() <= &log_level) + if metadata.level() == &tracing::Level::INFO { + return metadata.target() == "cosmic_initial_setup" + } + + metadata.level() <= &log_level })); tracing_subscriber::registry().with(log_filter).init(); @@ -160,120 +160,108 @@ impl Application for App { match message { Message::None => {} - Message::PageMessage(page_message) => { - match page_message { - page::Message::SetTheme(theme) => { - return cosmic::command::set_theme(theme); - } + Message::PageMessage(page_message) => match page_message { + page::Message::SetTheme(theme) => { + return cosmic::command::set_theme(theme); + } - page::Message::Appearance(message) => { - if let Some(page) = - self.pages.get_mut(&TypeId::of::()) - { - return page - .as_any() - .downcast_mut::() - .unwrap() - .update(message) - .map(Message::PageMessage) - .map(cosmic::Action::App); - } + page::Message::Appearance(message) => { + if let Some(page) = self.pages.get_mut(&TypeId::of::()) + { + return page + .as_any() + .downcast_mut::() + .unwrap() + .update(message) + .map(Message::PageMessage) + .map(cosmic::Action::App); } + } - page::Message::Keyboard(message) => { - if let Some(page) = - self.pages.get_mut(&TypeId::of::()) - { - return page - .as_any() - .downcast_mut::() - .unwrap() - .update(message) - .map(Message::PageMessage) - .map(cosmic::Action::App); - } + page::Message::Keyboard(message) => { + if let Some(page) = self.pages.get_mut(&TypeId::of::()) { + return page + .as_any() + .downcast_mut::() + .unwrap() + .update(message) + .map(Message::PageMessage) + .map(cosmic::Action::App); } + } - page::Message::Language(message) => { - if let Some(page) = - self.pages.get_mut(&TypeId::of::()) - { - return page - .as_any() - .downcast_mut::() - .unwrap() - .update(message) - .map(Message::PageMessage) - .map(cosmic::Action::App); - } + page::Message::Language(message) => { + if let Some(page) = self.pages.get_mut(&TypeId::of::()) { + return page + .as_any() + .downcast_mut::() + .unwrap() + .update(message) + .map(Message::PageMessage) + .map(cosmic::Action::App); } + } - page::Message::Layout(message) => { - if let Some(page) = self.pages.get_mut(&TypeId::of::()) - { - return page - .as_any() - .downcast_mut::() - .unwrap() - .update(message) - .map(Message::PageMessage) - .map(cosmic::Action::App); - } + page::Message::Layout(message) => { + if let Some(page) = self.pages.get_mut(&TypeId::of::()) { + return page + .as_any() + .downcast_mut::() + .unwrap() + .update(message) + .map(Message::PageMessage) + .map(cosmic::Action::App); } + } - page::Message::Location(message) => { - if let Some(page) = - self.pages.get_mut(&TypeId::of::()) - { - return page - .as_any() - .downcast_mut::() - .unwrap() - .update(message) - .map(Message::PageMessage) - .map(cosmic::Action::App); - } + page::Message::Location(message) => { + if let Some(page) = self.pages.get_mut(&TypeId::of::()) { + return page + .as_any() + .downcast_mut::() + .unwrap() + .update(message) + .map(Message::PageMessage) + .map(cosmic::Action::App); } + } - page::Message::User(message) => { - if let Some(page) = self.pages.get_mut(&TypeId::of::()) { - return page - .as_any() - .downcast_mut::() - .unwrap() - .update(message) - .map(Message::PageMessage) - .map(cosmic::Action::App); - } + page::Message::User(message) => { + if let Some(page) = self.pages.get_mut(&TypeId::of::()) { + return page + .as_any() + .downcast_mut::() + .unwrap() + .update(message) + .map(Message::PageMessage) + .map(cosmic::Action::App); } + } - page::Message::Welcome(message) => { - if let Some(page) = self.pages.get_mut(&TypeId::of::()) - { - // eprintln!("type id = {:?}", page.type_id()); - return page - .as_any() - .downcast_mut::() - .unwrap() - .update(message) - .map(Message::PageMessage) - .map(cosmic::Action::App); - } + page::Message::A11y(message) => { + if let Some(page) = self.pages.get_mut(&TypeId::of::()) { + return page + .as_any() + .downcast_mut::() + .unwrap() + .update(message) + .map(Message::PageMessage) + .map(cosmic::Action::App); } + } - page::Message::WiFi(message) => { - if let Some(page) = self.pages.get_mut(&TypeId::of::()) { - return page - .as_any() - .downcast_mut::() - .unwrap() - .update(message) - .map(Message::PageMessage) - .map(cosmic::Action::App); - } + page::Message::WiFi(message) => { + if let Some(page) = self.pages.get_mut(&TypeId::of::()) { + return page + .as_any() + .downcast_mut::() + .unwrap() + .update(message) + .map(Message::PageMessage) + .map(cosmic::Action::App); } } - } + }, Message::PageOpen(page_i) => { if let Some((_, page)) = self.pages.get_index_mut(page_i) { @@ -414,10 +402,8 @@ impl Application for App { fn subscription(&self) -> Subscription { let mut subscriptions = vec![ // Make the screen reader toggleable. - cosmic_settings_subscriptions::accessibility::subscription().map(|m| { - Message::PageMessage(page::Message::Welcome( - page::welcome::Message::ScreenReaderDbus(m), - )) + cosmic_settings_accessibility_subscription::subscription().map(|m| { + Message::PageMessage(page::Message::A11y(page::a11y::Message::A11yBus(m))) }), ]; @@ -431,7 +417,7 @@ impl Application for App { } fn network_manager_stream() -> impl Stream { - use cosmic_settings_subscriptions::network_manager; + use cosmic_settings_network_manager_subscription as network_manager; cosmic::iced_futures::stream::channel(1, |mut output| async move { let conn = zbus::Connection::system().await.unwrap(); diff --git a/src/page/welcome.rs b/src/page/a11y.rs similarity index 72% rename from src/page/welcome.rs rename to src/page/a11y.rs index 41d9122..2289f10 100644 --- a/src/page/welcome.rs +++ b/src/page/a11y.rs @@ -1,11 +1,14 @@ -use crate::accessibility::{AccessibilityEvent, AccessibilityRequest}; use crate::{fl, page}; use cosmic::Task; -use cosmic::iced::Alignment; -use cosmic::widget::segmented_button; +use cosmic::iced::{Alignment, Length, alignment}; +use cosmic::iced_core::text::Wrapping; +use cosmic::widget::{segmented_button, text}; use cosmic::{Element, widget}; use cosmic_randr_shell::OutputKey; -use cosmic_settings_subscriptions::accessibility::{DBusRequest, DBusUpdate}; +use cosmic_settings_a11y_manager_subscription::{ + self as cosmic_a11y_manager, AccessibilityEvent, AccessibilityRequest, +}; +use cosmic_settings_accessibility_subscription as a11y_bus; use futures_util::{FutureExt, SinkExt}; use std::collections::BTreeMap; use std::sync::Arc; @@ -35,15 +38,15 @@ pub struct Page { displays: segmented_button::SingleSelectModel, magnifier_enabled: bool, reader_enabled: bool, - interface_scale: usize, + scale: usize, interface_adjusted_scale: u32, - a11y_wayland_thread: Option, - screen_reader_dbus_sender: Option>, + a11y_wayland_thread: Option, + screen_reader_dbus_sender: Option>, } impl page::Page for Page { fn title(&self) -> String { - fl!("welcome-page") + fl!("accessibility-page") } fn as_any(&mut self) -> &mut dyn std::any::Any { @@ -53,9 +56,9 @@ impl page::Page for Page { fn init(&mut self) -> cosmic::Task { let mut tasks = Vec::new(); - // Intialize the a11y wayland thread, and fetch displays. + // Intialize the a11y wayland thread. if self.a11y_wayland_thread.is_none() { - match crate::accessibility::spawn_wayland_connection() { + match cosmic_a11y_manager::spawn_wayland_connection(1) { Ok((tx, mut rx)) => { self.a11y_wayland_thread = Some(tx); @@ -64,7 +67,7 @@ impl page::Page for Page { |mut sender| async move { while let Some(event) = rx.recv().await { let _ = sender - .send(page::Message::Welcome(Message::A11yEvent(event))) + .send(page::Message::A11y(Message::A11yEvent(event))) .await; } }, @@ -77,6 +80,7 @@ impl page::Page for Page { ?err, "Failed to spawn wayland connection for accessibility page" ); + self.a11y_wayland_thread = None; } } } @@ -91,61 +95,91 @@ impl page::Page for Page { fn view(&self) -> Element<'_, page::Message> { let spacing = cosmic::theme::spacing(); - let screen_reader = widget::settings::item::builder(fl!("welcome-page", "screen-reader")) - .toggler(self.reader_enabled, |enable| { - Message::ScreenReaderEnabled(enable).into() + + let screen_reader = { + let text = widget::column::with_capacity(2) + .spacing(2) + .push( + text::body(fl!("accessibility-page", "screen-reader")).wrapping(Wrapping::Word), + ) + .push(text::caption("Super + Alt + S").wrapping(Wrapping::Word)) + .width(Length::Shrink); + + let icon = self.reader_enabled.then(|| { + widget::icon::from_name("audio-speakers-symbolic") + .icon() + .size(24) + .class(cosmic::style::Svg::custom(|theme| { + cosmic::iced::widget::svg::Style { + color: Some(theme.cosmic().success_text_color().into()), + } + })) }); + widget::settings::item_row(vec![ + widget::row::with_capacity(2) + .spacing(spacing.space_xs) + .push(text) + .push_maybe(icon) + .align_y(alignment::Vertical::Center) + .width(Length::Fill) + .into(), + widget::toggler(self.reader_enabled) + .on_toggle(|enable| Message::ScreenReaderEnabled(enable).into()) + .into(), + ]) + }; + let display_switcher = (self.displays.len() > 1).then(|| { widget::tab_bar::horizontal(&self.displays) .button_alignment(Alignment::Center) .on_activate(|e| Message::Display(e).into()) }); - let interface_size = widget::settings::item::builder(fl!("welcome-page", "interface-size")) - .control(widget::dropdown( - DPI_SCALE_LABELS, - Some(self.interface_scale), - |option| Message::Scale(option).into(), - )); - - let scale_options = widget::settings::item::builder(fl!("welcome-page", "scale-options")) - .control(widget::spin_button( - format!("{}%", self.interface_adjusted_scale), - self.interface_adjusted_scale, - 5, - 0, - 20, - |value| Message::ScaleAdjust(value).into(), - )); - - let magnifier = widget::settings::item::builder(fl!("welcome-page", "magnifier")) + let scale = widget::settings::item::builder(fl!("accessibility-page", "scale")).control( + widget::dropdown(DPI_SCALE_LABELS, Some(self.scale), |option| { + Message::Scale(option).into() + }), + ); + + let scale_options = + widget::settings::item::builder(fl!("accessibility-page", "scale-options")).control( + widget::spin_button( + format!("{}%", self.interface_adjusted_scale), + fl!("accessibility-page", "scale-options"), + self.interface_adjusted_scale, + 5, + 0, + 20, + |value| Message::ScaleAdjust(value).into(), + ), + ); + + let magnifier = widget::settings::item::builder(fl!("accessibility-page", "magnifier")) + .description(fl!("accessibility-page", "magnifier-description")) .toggler(self.magnifier_enabled, |enable| { Message::MagnifierEnabled(enable).into() }); - if let Some(switcher) = display_switcher { - let display_settings = widget::settings::section() - .add(interface_size) - .add(scale_options); + let a11y_section = widget::settings::section() + .add(screen_reader) + .add(magnifier); - let a11y_section = widget::settings::section() - .add(screen_reader) - .add(magnifier); + let display_settings = widget::settings::section().add(scale).add(scale_options); + if let Some(switcher) = display_switcher { widget::column::with_capacity(5) + .push(a11y_section) + .push(widget::vertical_space().height(spacing.space_xl)) .push(switcher) .push(widget::vertical_space().height(spacing.space_xxs)) .push(display_settings) - .push(widget::vertical_space().height(spacing.space_xl)) - .push(a11y_section) .into() } else { - widget::settings::section() - .add(interface_size) - .add(scale_options) - .add(screen_reader) - .add(magnifier) + widget::column::with_capacity(3) + .push(a11y_section) + .push(widget::vertical_space().height(spacing.space_xl)) + .push(display_settings.title(fl!("accessibility-page", "display-scaling"))) .into() } } @@ -158,7 +192,7 @@ impl Page { displays: segmented_button::SingleSelectModel::default(), magnifier_enabled: false, reader_enabled: false, - interface_scale: 2, + scale: 2, interface_adjusted_scale: 0, a11y_wayland_thread: None, screen_reader_dbus_sender: None, @@ -198,44 +232,44 @@ impl Page { Message::Scale(option) => return self.set_scale(option, 0), Message::ScaleAdjust(scale_adjust) => { - return self.set_scale(self.interface_scale, scale_adjust); + return self.set_scale(self.scale, scale_adjust); } Message::ScaleAdjustResult(ScaleAdjustResult::Success) => {} - Message::ScaleAdjustResult(ScaleAdjustResult::FailureCode(code)) => {} + Message::ScaleAdjustResult(ScaleAdjustResult::FailureCode(_code)) => {} - Message::ScaleAdjustResult(ScaleAdjustResult::SpawnFailure(why)) => {} + Message::ScaleAdjustResult(ScaleAdjustResult::SpawnFailure(_why)) => {} Message::ScreenReaderEnabled(enabled) => { if let Some(tx) = &self.screen_reader_dbus_sender { self.reader_enabled = enabled; - let _ = tx.send(DBusRequest::Status(enabled)); + let _ = tx.send(a11y_bus::Request::ScreenReader(enabled)); } else { self.reader_enabled = false; } } - Message::ScreenReaderDbus(update) => match update { - DBusUpdate::Error(err) => { + Message::A11yBus(update) => match update { + a11y_bus::Response::Error(err) => { tracing::error!(?err, "screen reader dbus error"); let _ = self.screen_reader_dbus_sender.take(); self.reader_enabled = false; } - DBusUpdate::Status(enabled) => { + a11y_bus::Response::ScreenReader(enabled) => { self.reader_enabled = enabled; } - DBusUpdate::Init(enabled, tx) => { + a11y_bus::Response::IsEnabled(_) => (), + a11y_bus::Response::Init(enabled, tx) => { self.reader_enabled = enabled; self.screen_reader_dbus_sender = Some(tx); + return cosmic::Task::done(Message::ScreenReaderEnabled(true).into()); } }, - Message::Display(entity) => self.set_active_display(entity), Message::UpdateDisplayList(result) => match Arc::into_inner(result) { Some(Ok(outputs)) => { - eprintln!("update display list"); self.list = outputs; self.displays.clear(); @@ -262,8 +296,6 @@ impl Page { active_tab_pos = pos as u16; } - eprintln!("insert {}", output.name); - self.displays .insert() .text(output.name.clone()) @@ -295,7 +327,7 @@ impl Page { }; let scale_u32 = ((output.scale * 100.0) as u32).min(300); - self.interface_scale = (scale_u32 / 25).checked_sub(2).unwrap_or(2) as usize; + self.scale = (scale_u32 / 25).checked_sub(2).unwrap_or(2) as usize; self.interface_adjusted_scale = ((scale_u32 % 25).min(20) as f32 / 5.0).round() as u32 * 5; self.displays.activate(display); } @@ -303,7 +335,7 @@ impl Page { /// Set the scale of each display. fn set_scale(&mut self, option: usize, scale_adjust: u32) -> Task { tracing::debug!("setting scale {option} with {scale_adjust}"); - self.interface_scale = option; + self.scale = option; self.interface_adjusted_scale = scale_adjust; self.list @@ -359,7 +391,7 @@ pub enum ScaleAdjustResult { #[derive(Clone, Debug)] pub enum Message { /// Handle an a11y event. - A11yEvent(crate::accessibility::AccessibilityEvent), + A11yEvent(AccessibilityEvent), /// Change the active display tab Display(segmented_button::Entity), /// Toggle the screen magnifier. @@ -371,7 +403,7 @@ pub enum Message { /// Status of scale adjust command. ScaleAdjustResult(ScaleAdjustResult), /// Screen reader DBus events. - ScreenReaderDbus(DBusUpdate), + A11yBus(a11y_bus::Response), /// Enable the screen reader. ScreenReaderEnabled(bool), /// Update the display list @@ -380,6 +412,6 @@ pub enum Message { impl From for page::Message { fn from(message: Message) -> Self { - page::Message::Welcome(message) + page::Message::A11y(message) } } diff --git a/src/page/appearance.rs b/src/page/appearance.rs index 31ecb15..3dc16eb 100644 --- a/src/page/appearance.rs +++ b/src/page/appearance.rs @@ -236,6 +236,7 @@ impl page::Page for Page { let button = widget::button::custom_image_button(thumbnail, None) .class(theme::Button::Image) + .description(&theme.name) .selected(i == self.selected) .on_press(Message::Select(i).into()); diff --git a/src/page/layout.rs b/src/page/layout.rs index 0eabf2b..96cd12d 100644 --- a/src/page/layout.rs +++ b/src/page/layout.rs @@ -205,6 +205,7 @@ fn layout_button<'a>( let thumbnail = widget::image(&layout.icon_path).width(144).height(81); let button = widget::button::custom_image_button(thumbnail, None) + .description(name.as_str()) .class(cosmic::theme::Button::Image) .selected(current == Some(id)) .on_press(Message::Selected(id).into()); diff --git a/src/page/mod.rs b/src/page/mod.rs index aecf350..2fef9be 100644 --- a/src/page/mod.rs +++ b/src/page/mod.rs @@ -1,7 +1,8 @@ -use cosmic::{Element, widget}; +use cosmic::{Element, iced::Subscription, widget}; use indexmap::IndexMap; use std::any::{Any, TypeId}; +pub mod a11y; pub mod appearance; pub mod keyboard; pub mod language; @@ -11,7 +12,6 @@ pub mod location; pub mod new_apps; pub mod new_shortcuts; pub mod user; -pub mod welcome; pub mod wifi; pub mod workflow; @@ -26,10 +26,7 @@ pub enum AppMode { #[inline] pub fn pages(mode: AppMode) -> IndexMap> { let mut pages: IndexMap> = IndexMap::new(); - pages.insert( - TypeId::of::(), - Box::new(welcome::Page::new()), - ); + pages.insert(TypeId::of::(), Box::new(a11y::Page::new())); if let AppMode::NewInstall { create_user } = mode { pages.insert(TypeId::of::(), Box::new(wifi::Page::default())); @@ -102,7 +99,7 @@ pub enum Message { Location(location::Message), SetTheme(cosmic::Theme), User(user::Message), - Welcome(welcome::Message), + A11y(a11y::Message), WiFi(wifi::Message), } @@ -152,4 +149,8 @@ pub trait Page { fn view(&self) -> Element<'_, Message> { widget::text::body("TODO").into() } + + fn subscription(&self) -> Subscription { + Subscription::none() + } } diff --git a/src/page/wifi.rs b/src/page/wifi.rs index 7c34357..5b279d9 100644 --- a/src/page/wifi.rs +++ b/src/page/wifi.rs @@ -1,8 +1,13 @@ +// Copyright 2025 System76 +// SPDX-License-Identifier: GPL-3.0-only + +// TODO: This duplicates some of the libcosmic logic implemented in cosmic-settings' wifi page. + use crate::fl; use std::{ collections::{BTreeMap, BTreeSet}, process::Stdio, - sync::Arc, + sync::{Arc, LazyLock}, }; use cosmic::{ @@ -12,19 +17,26 @@ use cosmic::{ iced_widget::focus_next, widget::{self, column, icon}, }; -use cosmic_settings_subscriptions::network_manager::{ - self, NetworkManagerState, +use cosmic_settings_network_manager_subscription::{ + self as network_manager, NetworkManagerState, available_wifi::{AccessPoint, NetworkType}, current_networks::ActiveConnectionInfo, hw_address::HwAddress, + nm_secret_agent, }; use eyre::Context; use futures::StreamExt; use secure_string::SecureString; +use tokio::sync::Mutex; + +pub type SecretSender = Arc>>>; + +pub static SECURE_INPUT_WIFI: LazyLock = LazyLock::new(widget::Id::unique); #[derive(Debug, Default)] pub struct Page { nm_state: Option, + secret_tx: Option>, /// When defined, displays connections for the specific device. active_device: Option>, dialog: Option, @@ -47,7 +59,7 @@ impl super::Page for Page { } fn init(&mut self) -> cosmic::Task { - connection_settings() + connection_settings(self) } fn optional(&self) -> bool { @@ -253,6 +265,7 @@ impl super::Page for Page { Some(Message::TogglePasswordVisibility.into()), *password_hidden, ) + .id(SECURE_INPUT_WIFI.clone()) .on_input(|input| Message::PasswordUpdate(SecureString::from(input)).into()) .on_submit(|_| Message::ConnectWithPassword.into()); @@ -323,6 +336,8 @@ pub enum Message { Error(String), /// Identity update from the dialog IdentityUpdate(String), + /// Focus the secure input + FocusSecureInput, /// Create a dialog to ask for confirmation on forgetting a connection. ForgetRequest(network_manager::SSID), /// Forget a known access point. @@ -335,6 +350,8 @@ pub enum Message { PasswordRequest(network_manager::SSID), /// Update the password from the dialog PasswordUpdate(SecureString), + /// An update from the secret agent + SecretAgent(network_manager::nm_secret_agent::Event), /// Selects a device to display connections from SelectDevice(Arc), /// Opens settings page for the access point. @@ -359,7 +376,7 @@ impl From for super::Message { } } -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug)] enum WiFiDialog { Forget(network_manager::SSID), Password { @@ -368,6 +385,7 @@ enum WiFiDialog { identity: Option, password: SecureString, password_hidden: bool, + tx: SecretSender, }, } @@ -411,12 +429,31 @@ impl Page { hw_address, password: SecureString::from(""), password_hidden: true, + tx: Arc::default(), }); } } - network_manager::Request::SelectAccessPoint(ssid, hw_address, network_type) => { - self.connecting.remove(ssid.as_ref()); + network_manager::Request::SelectAccessPoint( + ssid, + hw_address, + network_type, + _tx, + ) => { + if success || matches!(network_type, NetworkType::Open) { + self.connecting.remove(ssid.as_ref()); + } else { + self.dialog = Some(WiFiDialog::Password { + ssid, + identity: matches!(network_type, NetworkType::EAP) + .then(String::new), + hw_address, + password: SecureString::from(""), + password_hidden: true, + tx: Arc::new(Mutex::new(None)), + }); + return cosmic::task::message(Message::FocusSecureInput); + } } _ => (), @@ -435,7 +472,7 @@ impl Page { Message::UpdateState(state) => { self.update_state(state); - return connection_settings(); + return connection_settings(self); } Message::NetworkManager( @@ -452,6 +489,8 @@ impl Page { } } + Message::NetworkManager(network_manager::Event::WiFiCredentials { .. }) => (), + Message::ConnectionSettings(settings) => { self.ssid_to_uuid = settings; } @@ -493,6 +532,7 @@ impl Page { ssid, ap.hw_address, ap.network_type, + self.secret_tx.clone(), )); } } @@ -523,7 +563,9 @@ impl Page { hw_address: ap.hw_address, password: SecureString::from(""), password_hidden: true, + tx: Arc::default(), }); + return cosmic::task::message(Message::FocusSecureInput); } } @@ -546,20 +588,29 @@ impl Page { identity, password, hw_address, + tx, .. } = dialog + && let Some(nm) = self.nm_state.as_mut() { - if let Some(nm) = self.nm_state.as_mut() { - self.connecting.insert(ssid.clone()); - _ = nm - .sender - .unbounded_send(network_manager::Request::Authenticate { + self.connecting.insert(ssid.clone()); + let nm_sender = nm.sender.clone(); + let secret_tx = self.secret_tx.clone(); + return Task::future(async move { + let mut guard = tx.lock().await; + if let Some(tx) = guard.take() { + _ = tx.send(password); + } else { + _ = nm_sender.unbounded_send(network_manager::Request::Authenticate { ssid: ssid.to_string(), identity, hw_address, password, + secret_tx, }); - } + } + }) + .discard(); } } @@ -604,6 +655,79 @@ impl Page { } } + Message::SecretAgent(event) => match event { + nm_secret_agent::Event::RequestSecret { + uuid, + name, + description: _, // TODO do we want to display the description? + previous, + tx, + } => { + let ssid = self + .ssid_to_uuid + .iter() + .find_map(|(ssid, conn_uuid)| { + if conn_uuid.as_ref() == name.as_str() { + Some(network_manager::SSID::from(ssid.as_ref())) + } else { + None + } + }) + .unwrap_or_default(); + let Some(ap): Option<&AccessPoint> = self.nm_state.as_ref().and_then(|nm| { + nm.state + .wireless_access_points + .iter() + .chain(nm.state.known_access_points.iter()) + .find(|ap| ap.ssid == ssid) + }) else { + tracing::error!( + %uuid, + %name, + "received secret request for unknown connection" + ); + return Task::none(); + }; + + self.dialog = Some(WiFiDialog::Password { + ssid, + password: previous, + password_hidden: true, + hw_address: ap.hw_address, + identity: matches!(ap.network_type, NetworkType::EAP).then(String::new), + tx, + }); + return cosmic::task::message(Message::FocusSecureInput); + } + nm_secret_agent::Event::CancelGetSecrets { uuid: _, name: _ } => { + self.dialog = self + .dialog + .take() + .filter(|d| !matches!(d, &WiFiDialog::Password { .. })); + } + nm_secret_agent::Event::Failed(error) => { + tracing::error!(%error, "secret agent failure"); + if let Some(WiFiDialog::Password { + ssid, + password, + identity, + hw_address, + .. + }) = self.dialog.take() + { + self.dialog = Some(WiFiDialog::Password { + password, + password_hidden: true, + tx: Arc::new(Mutex::new(None)), + ssid, + identity, + hw_address, + }); + return cosmic::task::message(Message::FocusSecureInput); + } + } + }, + Message::Settings(ssid) => { self.close_popup_and_apply_updates(); @@ -640,8 +764,26 @@ impl Page { self.active_device = Some(device); } - Message::NetworkManagerConnect(conn) => { - return connection_settings(); + Message::FocusSecureInput => { + // retry until the widget is in the tree and focused or the dialog is removed. + if matches!(self.dialog, Some(WiFiDialog::Password { .. })) { + return cosmic::iced_runtime::task::widget( + cosmic::iced_core::widget::operation::focusable::find_focused(), + ) + .collect() + .then(|id| { + if id.get(0).is_some_and(|id| *id == SECURE_INPUT_WIFI.clone()) { + Task::none() + } else { + cosmic::widget::text_input::focus(SECURE_INPUT_WIFI.clone()) + .chain(cosmic::task::message(Message::FocusSecureInput)) + } + }); + } + } + + Message::NetworkManagerConnect(_conn) => { + return connection_settings(self); // return cosmic::task::batch(vec![ // self.connect(conn.clone()), // connection_settings(conn), @@ -712,7 +854,7 @@ fn popup_button(message: Message, text: String) -> Element<'static, Message> { .into() } -fn connection_settings() -> Task { +fn connection_settings(page: &mut Page) -> Task { let settings = async move { let conn = zbus::Connection::system().await.unwrap(); let settings = network_manager::dbus::settings::NetworkManagerSettings::new(&conn).await?; @@ -759,7 +901,10 @@ fn connection_settings() -> Task { Ok::<_, zbus::Error>(settings) }; - cosmic::task::future(async move { + let (tx, rx) = tokio::sync::mpsc::channel(4); + page.secret_tx = Some(tx); + + let conn_settings = cosmic::task::future(async move { settings .await .context("failed to get connection settings") @@ -768,7 +913,17 @@ fn connection_settings() -> Task { Message::ConnectionSettings, ) .apply(super::Message::WiFi) - }) + }); + + let secret_agent = cosmic::Task::stream( + cosmic_settings_network_manager_subscription::nm_secret_agent::secret_agent_stream( + "com.system76.CosmicSettings.WiFi.NetworkManager.SecretAgent", + rx, + ), + ) + .map(|m| super::Message::WiFi(Message::SecretAgent(m))); + + cosmic::task::batch([conn_settings, secret_agent]) } pub fn update_state(conn: zbus::Connection) -> Task {