From f3f7d5cfb61e68d5cc65897e1446a2e3d2d4b700 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Tue, 19 Aug 2025 13:22:47 -0400 Subject: [PATCH] feat: load and apply output configs fix: typo chore: update deps cleanup --- Cargo.lock | 630 ++++++++++++++++++++++++++++++++-------------- Cargo.toml | 8 + daemon/Cargo.toml | 1 + daemon/src/lib.rs | 8 + src/greeter.rs | 346 ++++++++++++++++++++++++- 5 files changed, 804 insertions(+), 189 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 36a2101..dd42a48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,9 +14,9 @@ dependencies = [ [[package]] name = "ab_glyph_rasterizer" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2187590a23ab1e3df8681afdf0987c48504d80291f002fcdb651f0ef5e25169" +checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "accesskit" @@ -154,7 +154,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.1", + "bitflags 2.9.2", "cc", "cesu8", "jni", @@ -191,9 +191,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "apply" @@ -298,6 +298,16 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-event" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1222afd3d2bce3995035054046a279ae7aa154d70d0766cea050073f3fd7ddf" +dependencies = [ + "loom", + "pin-project-lite", +] + [[package]] name = "async-executor" version = "1.13.2" @@ -423,7 +433,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -452,13 +462,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.88" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -534,7 +544,7 @@ dependencies = [ "derive_utils", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -585,7 +595,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cexpr", "clang-sys", "itertools 0.12.1", @@ -596,7 +606,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -622,9 +632,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29" dependencies = [ "serde", ] @@ -659,7 +669,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "340d2f0bdb2a43c1d3cd40513185b2bd7def0aa1052f956455114bc98f82dcf2" dependencies = [ - "objc2 0.6.1", + "objc2 0.6.2", ] [[package]] @@ -704,7 +714,7 @@ checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -741,7 +751,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "log", "polling 3.10.0", "rustix 0.38.44", @@ -755,7 +765,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "polling 3.10.0", "rustix 1.0.8", "slab", @@ -776,9 +786,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.32" +version = "1.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e" +checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f" dependencies = [ "jobserver", "libc", @@ -802,9 +812,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -1055,7 +1065,7 @@ dependencies = [ [[package]] name = "cosmic-applets-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-applets#a5d813dc9ba941b76a4898cfd4cdb133b9fd429b" +source = "git+https://github.com/pop-os/cosmic-applets#2c618622d3f8d644776b669c96759f53324b275d" dependencies = [ "cosmic-config", "serde", @@ -1064,13 +1074,13 @@ dependencies = [ [[package]] name = "cosmic-bg-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-bg#1da843a63656cf58b373a4823c15326be448b24e" +source = "git+https://github.com/pop-os/cosmic-bg#d46d05e159a22a30713f5f49f1a79ec9a2630d96" dependencies = [ "colorgrad", "cosmic-config", "derive_setters", "image", - "ron 0.8.1", + "ron 0.10.1", "serde", "tracing", ] @@ -1090,17 +1100,19 @@ dependencies = [ [[package]] name = "cosmic-comp-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-comp#74e90f793f0fed9289a9995be5647555d9d4a796" +source = "git+https://github.com/pop-os/cosmic-comp?branch=refactor-config#f59af1685b38b8cc339e542ffab3b3cf82ac00b6" dependencies = [ "cosmic-config", "input", + "ron 0.9.0", "serde", + "tracing", ] [[package]] name = "cosmic-config" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "atomicwrites", "calloop 0.14.3", @@ -1116,17 +1128,17 @@ dependencies = [ "serde", "tokio", "tracing", - "xdg", + "xdg 2.5.2", "zbus 5.9.0", ] [[package]] name = "cosmic-config-derive" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1142,7 +1154,7 @@ name = "cosmic-dbus-networkmanager" version = "0.1.0" source = "git+https://github.com/pop-os/dbus-settings-bindings#3b86984332be2c930a3536ab714b843c851fa8ca" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "derive_builder", "procfs", "thiserror 1.0.69", @@ -1159,9 +1171,9 @@ dependencies = [ "dirs 5.0.1", "ini_core", "memmap2 0.9.7", - "thiserror 2.0.12", + "thiserror 2.0.15", "tracing", - "xdg", + "xdg 2.5.2", ] [[package]] @@ -1182,6 +1194,7 @@ dependencies = [ "cosmic-greeter-config", "cosmic-greeter-daemon", "cosmic-protocols", + "cosmic-randr-shell", "cosmic-settings-daemon-config", "cosmic-settings-subscriptions", "dirs 6.0.0", @@ -1192,6 +1205,7 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "icu", + "itoa", "libcosmic", "log", "logind-zbus", @@ -1201,12 +1215,13 @@ dependencies = [ "ron 0.10.1", "rust-embed", "shlex", + "tachyonix", "timedate-zbus", "tokio", "upower_dbus", "vergen", "wayland-client", - "xdg", + "xdg 2.5.2", "xkb-data", "zbus 5.9.0", ] @@ -1237,6 +1252,7 @@ dependencies = [ "ron 0.10.1", "serde", "tokio", + "xdg 3.0.0", "zbus 5.9.0", ] @@ -1245,7 +1261,7 @@ name = "cosmic-protocols" version = "0.1.0" source = "git+https://github.com/pop-os/cosmic-protocols//?rev=5035f8c#5035f8c810bf734401e21e0a9625c7b7e0c73325" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -1254,6 +1270,17 @@ dependencies = [ "wayland-server", ] +[[package]] +name = "cosmic-randr-shell" +version = "0.1.0" +source = "git+https://github.com/pop-os/cosmic-randr#f2cf6dfe9af22c005018b1aa952347dcc1d80b1c" +dependencies = [ + "kdl", + "slotmap", + "thiserror 2.0.15", + "tokio", +] + [[package]] name = "cosmic-settings-config" version = "0.1.0" @@ -1263,7 +1290,7 @@ dependencies = [ "ron 0.9.0", "serde", "serde_with", - "thiserror 2.0.12", + "thiserror 2.0.15", "tracing", "xkbcommon", ] @@ -1303,7 +1330,7 @@ dependencies = [ "num-derive", "num-traits", "smithay-client-toolkit", - "thiserror 2.0.12", + "thiserror 2.0.15", "tokio", "tokio-stream", "tracing", @@ -1313,9 +1340,9 @@ dependencies = [ [[package]] name = "cosmic-text" version = "0.14.2" -source = "git+https://github.com/pop-os/cosmic-text.git#de355a1fd9855e78273d4b7f2b5716eaaa38484f" +source = "git+https://github.com/pop-os/cosmic-text.git#f7033bb0433f6a9ba109007027781ba46ea9ba27" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "fontdb 0.23.0", "log", "rangemap", @@ -1335,7 +1362,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "almost", "cosmic-config", @@ -1346,7 +1373,7 @@ dependencies = [ "ron 0.9.0", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] @@ -1432,7 +1459,7 @@ version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdbd1f579714e3c809ebd822c81ef148b1ceaeb3d535352afc73fd0c4c6a0017" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "libloading", "winapi", ] @@ -1458,7 +1485,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1469,7 +1496,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1530,7 +1557,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1540,7 +1567,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1552,7 +1579,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1563,7 +1590,17 @@ checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", +] + +[[package]] +name = "diatomic-waker" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28025fb55a9d815acf7b0877555f437254f373036eec6ed265116c7a5c0825e9" +dependencies = [ + "loom", + "waker-fn", ] [[package]] @@ -1630,10 +1667,10 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.6.1", "libc", - "objc2 0.6.1", + "objc2 0.6.2", ] [[package]] @@ -1644,7 +1681,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -1661,7 +1698,7 @@ name = "dnd" version = "0.1.0" source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "mime 0.1.0", "raw-window-handle", "smithay-client-toolkit", @@ -1694,7 +1731,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "bytemuck", "drm-ffi", "drm-fourcc", @@ -1774,7 +1811,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2061,7 +2098,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2081,16 +2118,16 @@ dependencies = [ [[package]] name = "freedesktop-desktop-entry" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb78ccb4eb670a9c659f1c61e709d41fd6401cddf562f14cac1a47077918d3" +checksum = "de88bb3b555a4b38372082c5ede431e1e0e14f32be1d02998c6366eb4d2682ed" dependencies = [ "gettext-rs", "log", "memchr", - "thiserror 2.0.12", + "thiserror 2.0.15", "unicase", - "xdg", + "xdg 2.5.2", ] [[package]] @@ -2197,7 +2234,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2230,6 +2267,19 @@ dependencies = [ "slab", ] +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -2359,7 +2409,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "gpu-alloc-types", ] @@ -2369,7 +2419,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", ] [[package]] @@ -2391,7 +2441,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -2402,7 +2452,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", ] [[package]] @@ -2471,7 +2521,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "com", "libc", "libloading", @@ -2569,7 +2619,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.104", + "syn 2.0.106", "unic-langid", ] @@ -2583,7 +2633,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -2613,7 +2663,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "dnd", "iced_accessibility", @@ -2631,7 +2681,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "accesskit", "accesskit_winit", @@ -2640,9 +2690,9 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "bytes", "cosmic-client-toolkit", "dnd", @@ -2665,7 +2715,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "futures", "iced_core", @@ -2691,9 +2741,9 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "bytemuck", "cosmic-text", "half", @@ -2713,7 +2763,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2725,7 +2775,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -2741,7 +2791,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "bytemuck", "cosmic-text", @@ -2757,10 +2807,10 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "as-raw-xcb-connection", - "bitflags 2.9.1", + "bitflags 2.9.2", "bytemuck", "cosmic-client-toolkit", "futures", @@ -2788,7 +2838,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -2808,7 +2858,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3269,7 +3319,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -3408,7 +3458,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "inotify-sys", "libc", ] @@ -3428,7 +3478,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "input-sys", "libc", "log", @@ -3486,7 +3536,7 @@ version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg-if", "libc", ] @@ -3583,6 +3633,18 @@ dependencies = [ "mutate_once", ] +[[package]] +name = "kdl" +version = "6.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12661358400b02cbbf1fbd05f0a483335490e8a6bd1867620f2eeb78f304a22f" +dependencies = [ + "miette", + "num", + "thiserror 1.0.69", + "winnow 0.6.24", +] + [[package]] name = "khronos-egl" version = "6.0.0" @@ -3671,7 +3733,7 @@ checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libcosmic" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#562e88587207368969e7bcd43bce3ccf81aee8d9" +source = "git+https://github.com/pop-os/libcosmic#6e7a6343981df7d86f7ab01fe102d0b69d8e3bed" dependencies = [ "apply", "ashpd", @@ -3708,7 +3770,7 @@ dependencies = [ "shlex", "slotmap", "taffy", - "thiserror 2.0.12", + "thiserror 2.0.15", "tokio", "tracing", "unicode-segmentation", @@ -3738,7 +3800,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "libc", "redox_syscall 0.5.17", ] @@ -3834,6 +3896,19 @@ dependencies = [ "zbus 5.9.0", ] +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "lru" version = "0.12.5" @@ -3901,6 +3976,15 @@ dependencies = [ "libc", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "memchr" version = "2.7.5" @@ -3949,7 +4033,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block", "core-graphics-types", "foreign-types", @@ -3958,6 +4042,28 @@ dependencies = [ "paste", ] +[[package]] +name = "miette" +version = "7.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" +dependencies = [ + "cfg-if", + "miette-derive", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "7.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "mime" version = "0.1.0" @@ -4002,9 +4108,9 @@ dependencies = [ [[package]] name = "mutate_once" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b" +checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" [[package]] name = "naga" @@ -4014,7 +4120,7 @@ checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg_aliases 0.1.1", "codespan-reporting", "hexf-parse", @@ -4033,7 +4139,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "jni-sys", "log", "ndk-sys 0.6.0+11769913", @@ -4084,7 +4190,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -4096,7 +4202,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -4119,7 +4225,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "fsevent-sys", "inotify", "kqueue", @@ -4137,6 +4243,30 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -4147,6 +4277,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -4161,7 +4300,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4173,6 +4312,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.2" @@ -4223,7 +4373,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4273,9 +4423,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" +checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc" dependencies = [ "objc2-encode", ] @@ -4286,7 +4436,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4302,9 +4452,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.6.1", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-foundation 0.3.1", ] @@ -4314,7 +4464,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -4338,7 +4488,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4350,9 +4500,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "dispatch2", - "objc2 0.6.1", + "objc2 0.6.2", ] [[package]] @@ -4391,7 +4541,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "dispatch", "libc", @@ -4404,8 +4554,8 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" dependencies = [ - "bitflags 2.9.1", - "objc2 0.6.1", + "bitflags 2.9.2", + "objc2 0.6.2", "objc2-core-foundation", ] @@ -4427,7 +4577,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4439,7 +4589,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4462,7 +4612,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit", @@ -4494,7 +4644,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -4571,9 +4721,15 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.104", + "syn 2.0.106", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "owned_ttf_parser" version = "0.25.1" @@ -4605,7 +4761,7 @@ dependencies = [ "by_address", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4737,7 +4893,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4781,7 +4937,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -4937,9 +5093,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.96" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beef09f85ae72cea1ef96ba6870c51e6382ebfa4f0e85b643459331f3daa5be0" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -4952,7 +5108,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "version_check", "yansi", ] @@ -4963,7 +5119,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "hex", "procfs-core", "rustix 0.38.44", @@ -4975,7 +5131,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "hex", ] @@ -5136,7 +5292,7 @@ version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", ] [[package]] @@ -5158,7 +5314,7 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.12", + "thiserror 2.0.15", ] [[package]] @@ -5178,7 +5334,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5190,7 +5346,16 @@ dependencies = [ "aho-corasick", "memchr", "regex-automata 0.4.9", - "regex-syntax", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -5210,9 +5375,15 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.5", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.5" @@ -5252,7 +5423,7 @@ dependencies = [ "dispatch2", "js-sys", "log", - "objc2 0.6.1", + "objc2 0.6.2", "objc2-app-kit 0.3.1", "objc2-core-foundation", "objc2-foundation 0.3.1", @@ -5281,7 +5452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.9.1", + "bitflags 2.9.2", "serde", "serde_derive", ] @@ -5293,7 +5464,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63f3aa105dea217ef30d89581b65a4d527a19afc95ef5750be3890e8d3c5b837" dependencies = [ "base64 0.22.1", - "bitflags 2.9.1", + "bitflags 2.9.2", "serde", "serde_derive", "unicode-ident", @@ -5306,7 +5477,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "beceb6f7bf81c73e73aeef6dd1356d9a1b2b4909e1f0fc3e59b034f9572d7b7f" dependencies = [ "base64 0.22.1", - "bitflags 2.9.1", + "bitflags 2.9.2", "serde", "serde_derive", "unicode-ident", @@ -5350,7 +5521,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.104", + "syn 2.0.106", "walkdir", ] @@ -5402,7 +5573,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "errno", "libc", "linux-raw-sys 0.4.15", @@ -5415,7 +5586,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "errno", "libc", "linux-raw-sys 0.9.4", @@ -5434,7 +5605,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "bytemuck", "libm", "smallvec", @@ -5553,14 +5724,14 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.142" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ "indexmap 2.10.0", "itoa", @@ -5577,7 +5748,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5609,7 +5780,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5634,6 +5805,15 @@ dependencies = [ "digest", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.3.0" @@ -5707,7 +5887,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "bytemuck", "calloop 0.13.0", "calloop-wayland-source", @@ -5805,7 +5985,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", ] [[package]] @@ -5881,9 +6061,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.104" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -5898,7 +6078,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -5910,6 +6090,19 @@ dependencies = [ "libc", ] +[[package]] +name = "tachyonix" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86c3eafa053bbcc63bb4bfc5eb26362a33ea0bc2e589f28bce00287d1c167d45" +dependencies = [ + "async-event", + "crossbeam-utils", + "diatomic-waker", + "futures-core", + "pin-project-lite", +] + [[package]] name = "taffy" version = "0.3.11" @@ -5960,11 +6153,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.15", ] [[package]] @@ -5975,18 +6168,27 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", ] [[package]] @@ -6091,9 +6293,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -6133,7 +6335,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6204,7 +6406,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6214,6 +6416,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", ] [[package]] @@ -6427,6 +6659,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "vergen" version = "8.3.2" @@ -6498,7 +6736,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-shared", ] @@ -6533,7 +6771,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6582,7 +6820,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "rustix 1.0.8", "wayland-backend", "wayland-scanner", @@ -6594,7 +6832,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "cursor-icon", "wayland-backend", ] @@ -6616,7 +6854,7 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "wayland-backend", "wayland-client", "wayland-scanner", @@ -6629,7 +6867,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6642,7 +6880,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6667,7 +6905,7 @@ version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcbd4f3aba6c9fba70445ad2a484c0ef0356c1a9459b1e8e435bedc1971a6222" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "downcast-rs", "rustix 1.0.8", "wayland-backend", @@ -6745,7 +6983,7 @@ checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a" dependencies = [ "arrayvec", "bit-vec", - "bitflags 2.9.1", + "bitflags 2.9.2", "cfg_aliases 0.1.1", "document-features", "indexmap 2.10.0", @@ -6772,7 +7010,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.9.1", + "bitflags 2.9.2", "block", "cfg_aliases 0.1.1", "core-graphics-types", @@ -6813,7 +7051,7 @@ version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "js-sys", "web-sys", ] @@ -6870,6 +7108,15 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows" version = "0.52.0" @@ -6932,7 +7179,7 @@ checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6943,7 +7190,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6954,7 +7201,7 @@ checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -6965,7 +7212,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7297,7 +7544,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.1", + "bitflags 2.9.2", "block2 0.5.1", "bytemuck", "calloop 0.13.0", @@ -7349,6 +7596,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "winnow" +version = "0.6.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" +dependencies = [ + "memchr", +] + [[package]] name = "winnow" version = "0.7.12" @@ -7364,7 +7620,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", ] [[package]] @@ -7432,6 +7688,12 @@ version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" +[[package]] +name = "xdg" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" + [[package]] name = "xdg-home" version = "1.3.0" @@ -7469,7 +7731,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.2", "dlib", "log", "once_cell", @@ -7541,7 +7803,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure", ] @@ -7553,7 +7815,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure", ] @@ -7650,7 +7912,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "zbus_names 4.2.0", "zvariant 5.6.0", "zvariant_utils 3.2.0", @@ -7702,7 +7964,7 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7722,7 +7984,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "synstructure", ] @@ -7778,7 +8040,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7789,7 +8051,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", ] [[package]] @@ -7858,7 +8120,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.104", + "syn 2.0.106", "zvariant_utils 3.2.0", ] @@ -7883,6 +8145,6 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn 2.0.104", + "syn 2.0.106", "winnow 0.7.12", ] diff --git a/Cargo.toml b/Cargo.toml index cc9ecf3..3138ca9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,6 +77,9 @@ i18n-embed-fl = "0.7" rust-embed = "8" futures-util = "0.3.30" timedate-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings" } +cosmic-randr-shell = { git = "https://github.com/pop-os/cosmic-randr", default-features = false } +tachyonix = "0.3.1" +itoa = "1.0.15" [dependencies.greetd_ipc] version = "0.10.3" @@ -89,6 +92,7 @@ networkmanager = ["cosmic-dbus-networkmanager", "zbus"] upower = ["upower_dbus", "zbus"] zbus = ["dep:zbus", "nix"] + [profile.dev.package.tiny-skia] opt-level = 2 @@ -108,6 +112,7 @@ rust-version = "1.85.0" [workspace.dependencies] env_logger = "0.10.2" log = "0.4.22" + # Fix zbus compilation by manually adding nix with user feature nix = { version = "0.29", features = ["user"] } pwd = "1.4.0" @@ -126,7 +131,10 @@ default-features = false [workspace.dependencies.cosmic-comp-config] git = "https://github.com/pop-os/cosmic-comp" +branch = "refactor-config" +# path = "../cosmic-comp/cosmic-comp-config" default-features = false +features = ["output"] [workspace.dependencies.cosmic-greeter-config] path = "cosmic-greeter-config" diff --git a/daemon/Cargo.toml b/daemon/Cargo.toml index 41fc1ab..a5b98d9 100644 --- a/daemon/Cargo.toml +++ b/daemon/Cargo.toml @@ -21,3 +21,4 @@ serde.workspace = true zbus.workspace = true #TODO: reduce features tokio = { workspace = true, features = ["full"] } +xdg = "3.0.0" diff --git a/daemon/src/lib.rs b/daemon/src/lib.rs index acef0a7..7c14bdb 100644 --- a/daemon/src/lib.rs +++ b/daemon/src/lib.rs @@ -1,3 +1,4 @@ +use cosmic_comp_config::output::{self, OutputsConfig}; use cosmic_config::CosmicConfigEntry; use std::{ collections::BTreeMap, @@ -23,6 +24,7 @@ pub struct UserData { pub xkb_config_opt: Option, pub time_applet_config: TimeAppletConfig, pub accessibility_zoom: ZoomConfig, + pub outputs: Option, } impl UserData { @@ -175,6 +177,12 @@ impl UserData { } }; + let xdg = xdg::BaseDirectories::new(); + self.outputs = xdg.get_state_home().map(|mut s| { + s.push("cosmic-comp/outputs.ron"); + output::load_outputs(Some(&s)) + }); + match cosmic_config::Config::new("com.system76.CosmicAppletTime", TimeAppletConfig::VERSION) { Ok(config_handler) => match TimeAppletConfig::get_entry(&config_handler) { diff --git a/src/greeter.rs b/src/greeter.rs index dd2a038..2bd73e2 100644 --- a/src/greeter.rs +++ b/src/greeter.rs @@ -17,7 +17,7 @@ use cosmic::{ iced::{ self, Background, Border, Length, Subscription, alignment, event::wayland::OutputEvent, - futures::SinkExt, + futures::{self, SinkExt}, platform_specific::{ runtime::wayland::layer_surface::{IcedMargin, IcedOutput, SctkLayerSurfaceSettings}, shell::wayland::commands::layer_surface::{ @@ -32,8 +32,12 @@ use cosmic::{ cosmic_theme::{self, CosmicPalette}, surface, }; +use cosmic_comp_config::output::{OutputConfig, OutputInfo, OutputState}; use cosmic_greeter_config::Config as CosmicGreeterConfig; use cosmic_greeter_daemon::UserData; +use cosmic_randr_shell::{ + AdaptiveSyncAvailability, AdaptiveSyncState, List, Output, OutputKey, Transform, +}; use cosmic_settings_subscriptions::cosmic_a11y_manager::{ AccessibilityEvent, AccessibilityRequest, }; @@ -50,6 +54,7 @@ use std::{ time::{Duration, Instant}, }; use tokio::process::Child; +use tokio::sync::oneshot; use tokio::time; use wayland_client::{Proxy, protocol::wl_output::WlOutput}; use zbus::{Connection, proxy}; @@ -352,6 +357,11 @@ pub enum Message { Exit, // Sets channel used to communicate with the greetd IPC subscription. GreetdChannel(tokio::sync::mpsc::Sender), + /// Refreshes display outputs. + RandrUpdate { + /// Available outputs from cosmic-randr. + randr: Arc>, + }, Heartbeat, KeyboardLayout(usize), Login, @@ -394,9 +404,23 @@ pub struct App { entering_name: bool, theme_builder: cosmic_theme::ThemeBuilder, + randr_list: Option, + accessibility: Accessibility, } +#[derive(Clone, Copy, Debug, PartialEq)] +enum Randr { + Mirror(OutputKey), + Position(i32, i32), + RefreshRate(u32), + VariableRefreshRate(AdaptiveSyncState), + Resolution(u32, u32), + Scale(u32), + Transform(Transform), + Toggle(bool), +} + #[derive(Default)] struct Accessibility { pub wayland_sender: Option>, @@ -412,6 +436,260 @@ struct Accessibility { } impl App { + /// Applies a display configuration via `cosmic-randr`. + fn exec_randr(&self, output: Output, user_config: OutputConfig) -> Task { + let Some(current_mode) = output.current else { + log::warn!("Current output mode missing..."); + return Task::none(); + }; + let Some(current_mode) = self + .randr_list + .as_ref() + .and_then(|l| l.modes.get(current_mode)) + else { + log::warn!("Mode key does not exist..."); + return Task::none(); + }; + let Some(list) = self.randr_list.as_ref() else { + return Task::none(); + }; + + let mut tasks = Vec::new(); + let name = &*output.name; + + // Mirror + let cur_state = if output.enabled { + output + .mirroring + .map(|n| OutputState::Mirroring(n)) + .unwrap_or(OutputState::Enabled) + } else { + OutputState::Disabled + }; + // Enable/Disable or Mirror + if user_config.enabled != cur_state { + match user_config.enabled { + OutputState::Enabled => { + let mut task = tokio::process::Command::new("cosmic-randr"); + task.arg("enable").arg(name); + tasks.push( + cosmic::task::future::<(), ()>(async move { + log::debug!("executing {task:?}"); + let status = task.status().await; + if let Err(err) = status { + log::error!("Randr error: {err:?}"); + } + }) + .discard(), + ); + } + OutputState::Disabled => { + let mut task = tokio::process::Command::new("cosmic-randr"); + task.arg("disable").arg(name); + tasks.push( + cosmic::task::future::<(), ()>(async move { + log::debug!("executing {task:?}"); + let status = task.status().await; + if let Err(err) = status { + log::error!("Randr error: {err:?}"); + } + }) + .discard(), + ); + } + OutputState::Mirroring(ref mirror_name) => { + let mut task = tokio::process::Command::new("cosmic-randr"); + task.arg("mirror").arg(&output.name).arg(mirror_name); + tasks.push( + cosmic::task::future::<(), ()>(async move { + log::debug!("executing {task:?}"); + let status = task.status().await; + if let Err(err) = status { + log::error!("Randr error: {err:?}"); + } + }) + .discard(), + ); + } + } + } + + // Position + if (user_config.position.0 as i32, user_config.position.1 as i32) != output.position { + let (x, y) = user_config.position; + let mut task = tokio::process::Command::new("cosmic-randr"); + task.arg("mode") + .arg("--pos-x") + .arg(itoa::Buffer::new().format(x)) + .arg("--pos-y") + .arg(itoa::Buffer::new().format(y)) + .arg(name) + .arg(itoa::Buffer::new().format(current_mode.size.0)) + .arg(itoa::Buffer::new().format(current_mode.size.1)); + tasks.push( + cosmic::task::future::<(), ()>(async move { + log::debug!("executing {task:?}"); + let status = task.status().await; + if let Err(err) = status { + log::error!("Randr error: {err:?}"); + } + }) + .discard(), + ); + } + + // RefreshRate + if user_config.mode.1 != Some(current_mode.refresh_rate) { + let rate = current_mode.refresh_rate; + let mut task = tokio::process::Command::new("cosmic-randr"); + task.arg("mode") + .arg("--refresh") + .arg(format!("{}.{:03}", rate / 1000, rate % 1000)) + .arg(name) + .arg(itoa::Buffer::new().format(current_mode.size.0)) + .arg(itoa::Buffer::new().format(current_mode.size.1)); + tasks.push( + cosmic::task::future::<(), ()>(async move { + log::debug!("executing {task:?}"); + let status = task.status().await; + if let Err(err) = status { + log::error!("Randr error: {err:?}"); + } + }) + .discard(), + ); + } + + let configured_vrr = match user_config.vrr { + cosmic_comp_config::output::AdaptiveSync::Enabled => { + cosmic_randr_shell::AdaptiveSyncState::Auto + } + cosmic_comp_config::output::AdaptiveSync::Disabled => { + cosmic_randr_shell::AdaptiveSyncState::Disabled + } + cosmic_comp_config::output::AdaptiveSync::Force => { + cosmic_randr_shell::AdaptiveSyncState::Always + } + }; + // VariableRefreshRate + if Some(configured_vrr) != output.adaptive_sync { + let mode = configured_vrr; + let mut task = tokio::process::Command::new("cosmic-randr"); + task.arg("mode") + .arg("--adaptive-sync") + .arg(format!("{}", mode)) + .arg(name) + .arg(itoa::Buffer::new().format(current_mode.size.0)) + .arg(itoa::Buffer::new().format(current_mode.size.1)); + tasks.push( + cosmic::task::future::<(), ()>(async move { + log::debug!("executing {task:?}"); + let status = task.status().await; + if let Err(err) = status { + log::error!("Randr error: {err:?}"); + } + }) + .discard(), + ); + } + + // Resolution + if (user_config.mode.0.0 as u32, user_config.mode.0.1 as u32) != current_mode.size { + let (width, height) = user_config.mode.0; + let mut task = tokio::process::Command::new("cosmic-randr"); + task.arg("mode") + .arg(name) + .arg(itoa::Buffer::new().format(width)) + .arg(itoa::Buffer::new().format(height)); + tasks.push( + cosmic::task::future::<(), ()>(async move { + log::debug!("executing {task:?}"); + let status = task.status().await; + if let Err(err) = status { + log::error!("Randr error: {err:?}"); + } + }) + .discard(), + ); + } + + // Scale + if user_config.scale != user_config.scale { + let scale = user_config.scale; + let rate = current_mode.refresh_rate; + let mut task = tokio::process::Command::new("cosmic-randr"); + task.arg("mode") + .arg("--scale") + .arg(format!("{:02}", scale / 100.)) + .arg("--refresh") + .arg(format!("{}.{:03}", rate / 1000, rate % 1000)) + .arg(name) + .arg(itoa::Buffer::new().format(current_mode.size.0)) + .arg(itoa::Buffer::new().format(current_mode.size.1)); + tasks.push( + cosmic::task::future::<(), ()>(async move { + log::debug!("executing {task:?}"); + let status = task.status().await; + if let Err(err) = status { + log::error!("Randr error: {err:?}"); + } + }) + .discard(), + ); + } + + // Transform + + let configured_transform = match user_config.transform { + cosmic_comp_config::output::TransformDef::Normal => { + cosmic_randr_shell::Transform::Normal + } + cosmic_comp_config::output::TransformDef::_90 => { + cosmic_randr_shell::Transform::Rotate90 + } + cosmic_comp_config::output::TransformDef::_180 => { + cosmic_randr_shell::Transform::Rotate180 + } + cosmic_comp_config::output::TransformDef::_270 => { + cosmic_randr_shell::Transform::Rotate270 + } + cosmic_comp_config::output::TransformDef::Flipped => { + cosmic_randr_shell::Transform::Flipped + } + cosmic_comp_config::output::TransformDef::Flipped90 => { + cosmic_randr_shell::Transform::Flipped90 + } + cosmic_comp_config::output::TransformDef::Flipped180 => { + cosmic_randr_shell::Transform::Flipped180 + } + cosmic_comp_config::output::TransformDef::Flipped270 => { + cosmic_randr_shell::Transform::Flipped270 + } + }; + if Some(configured_transform) != output.transform { + let transform = configured_transform; + let mut task = tokio::process::Command::new("cosmic-randr"); + task.arg("mode") + .arg("--transform") + .arg(&*format!("{transform}")) + .arg(name) + .arg(itoa::Buffer::new().format(current_mode.size.0)) + .arg(itoa::Buffer::new().format(current_mode.size.1)); + tasks.push( + cosmic::task::future::<(), ()>(async move { + log::debug!("executing {task:?}"); + let status = task.status().await; + if let Err(err) = status { + log::error!("Randr error: {err:?}"); + } + }) + .discard(), + ); + } + + Task::batch(tasks) + } + fn menu(&self, id: SurfaceId) -> Element { let window_width = self .common @@ -587,7 +865,7 @@ impl App { "applications-accessibility-symbolic", )) .padding(12.0) - .on_press(Message::DropdownToggle(Dropdown::Accessibility)), // We'll use Dropdown::Keyboard as a dummy, since we don't have a dedicated Dropdown for accessibility + .on_press(Message::DropdownToggle(Dropdown::Accessibility)), ) .position(widget::popover::Position::Bottom); @@ -916,7 +1194,13 @@ impl App { let mut tasks = Vec::new(); self.accessibility.magnifier = user_data.accessibility_zoom.start_on_login; - + self.randr_list = None; + tasks.push(cosmic::Task::future(async { + let randr_fut = cosmic_randr_shell::list().await; + cosmic::action::app(Message::RandrUpdate { + randr: Arc::new(randr_fut), + }) + })); if let Some(theme) = &user_data.theme_opt { self.accessibility.high_contrast = theme.is_high_contrast; tasks.push(cosmic::command::set_theme(cosmic::Theme::custom(Arc::new( @@ -952,10 +1236,12 @@ impl cosmic::Application for App { /// Creates the application, and optionally emits command on initialize. fn init(core: Core, flags: Self::Flags) -> (Self, Task) { + let mut tasks = Vec::new(); let (mut common, common_task) = Common::init(core); common.on_output_event = Some(Box::new(|output_event, output| { Message::OutputEvent(output_event, output) })); + tasks.push(common_task); //TODO: use full_name? let mut usernames: Vec<_> = flags @@ -1017,8 +1303,9 @@ impl cosmic::Application for App { entering_name: false, accessibility, theme_builder: Default::default(), + randr_list: None, }; - (app, common_task) + (app, Task::batch(tasks)) } /// Handle application events here. @@ -1027,7 +1314,6 @@ impl cosmic::Application for App { Message::Common(common_message) => { return self.common.update(common_message); } - Message::OutputEvent(output_event, output) => { match output_event { OutputEvent::Created(output_info_opt) => { @@ -1579,6 +1865,56 @@ impl cosmic::Application for App { self.accessibility.wayland_sender = Some(tx); } }, + Message::RandrUpdate { randr } => match randr.as_ref() { + Ok(outputs) => { + let mut tasks = Vec::new(); + self.randr_list = Some(outputs.clone()); + + let mut output_pairs: Vec<(Output, OutputInfo, OutputConfig)> = Vec::new(); + + let Some(cur_user_output_state) = self + .selected_username + .data_idx + .and_then(|i| self.flags.user_datas.get(i)) + .and_then(|user_data| user_data.outputs.as_ref()) + else { + return Task::none(); + }; + 'outer: for (i, (configured_info, output_configs)) in + cur_user_output_state.config.iter().enumerate() + { + if configured_info.len() != outputs.outputs.len() { + continue; + } + + let mut matching_outputs = Vec::new(); + for o in outputs.outputs.values() { + if let Some(pos) = configured_info.iter().position(|configured| { + configured.connector == o.name + && configured.make == o.make.clone().unwrap_or_default() + && configured.model == o.model + }) { + matching_outputs.push(( + o.clone(), + configured_info[pos].clone(), + output_configs[pos].clone(), + )); + } else { + continue 'outer; + } + } + output_pairs = matching_outputs; + } + for (randr_o, _info, user_config) in output_pairs { + tasks.push(self.exec_randr(randr_o, user_config)) + } + + return Task::batch(tasks); + } + Err(err) => { + log::error!("Randr error: {err}"); + } + }, } Task::none() }