diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/.github/ISSUE_TEMPLATE/bug_report.yml /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/.github/ISSUE_TEMPLATE/bug_report.yml --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/.github/ISSUE_TEMPLATE/bug_report.yml 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/.github/ISSUE_TEMPLATE/bug_report.yml 2026-07-08 10:16:01.411245300 +0000 @@ -38,2 +38,8 @@ validations: required: false + - type: textarea + attributes: + label: "Platform and environment" + description: "Does this happen on wayland, X11, or on both? What WM/Compositor are you using? Which version of eww are you using? (when using a git version, optimally provide the exact commit ref)." + validations: + required: true diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/CHANGELOG.md /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/CHANGELOG.md --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/CHANGELOG.md 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/CHANGELOG.md 2026-07-08 10:17:59.508547000 +0000 @@ -5,4 +5,44 @@ ## Unreleased +### BREAKING CHANGES +- [#1176](https://github.com/elkowar/eww/pull/1176) changed safe access (`?.`) behavior: + Attempting to index in an empty JSON string (`'""'`) is now an error. + +### Fixes +- Fix crash on invalid `formattime` format string (By: luca3s) +- Fix crash on NaN or infinite graph value (By: luca3s) +- Re-enable some scss features (By: w-lfchen) +- Fix and refactor nix flake (By: w-lfchen) +- Fix remove items from systray (By: vnva) +- Fix the gtk `stack` widget (By: ovalkonia) +- Fix values in the `EWW_NET` variable (By: mario-kr) +- Fix the gtk `expander` widget (By: ovalkonia) +- Fix wayland monitor names support (By: dragonnn) +- Load systray items that are registered without a path (By: Kage-Yami) +- `get_locale` now follows POSIX standard for locale selection (By: mirhahn, w-lfchen) +- Improve multi-monitor handling under wayland (By: bkueng) + +### Features +- Add warning and docs for incompatible `:anchor` and `:exclusive` options +- Add `eww poll` subcommand to force-poll a variable (By: kiana-S) +- Add OnDemand support for focusable on wayland (By: GallowsDove) +- Add jq `raw-output` support (By: RomanHargrave) +- Update rust toolchain to 1.81.0 (By: w-lfchen) +- Add `:fill-svg` and `:preserve-aspect-ratio` properties to images (By: hypernova7, w-lfchen) +- Add `:truncate` property to labels, disabled by default (except in cases where truncation would be enabled in version `0.5.0` and before) (By: Rayzeq). +- Add support for `:hover` css selectors for tray items (By: zeapoz) +- Add scss support for the `:style` widget property (By: ovalkonia) +- Add `min` and `max` function calls to simplexpr (By: ovalkonia) +- Add `flip-x`, `flip-y`, `vertical` options to the graph widget to determine its direction +- Add `transform-origin-x`/`transform-origin-y` properties to transform widget (By: mario-kr) +- Add keyboard support for button presses (By: julianschuler) +- Support empty string for safe access operator (By: ModProg) +- Add `log` function calls to simplexpr (By: topongo) +- Add `:lines` and `:wrap-mode` properties to label widget (By: vaporii) +- Add `value-pos` to scale widget (By: ipsvn) +- Add `floor` and `ceil` function calls to simplexpr (By: wsbankenstein) +- Add `formatbytes` function calls to simplexpr (By: topongo) +- Add `unfocus-close` property in defwindow (By: liegle) + ## [0.6.0] (21.04.2024) @@ -35,4 +75,5 @@ - Add Vanilla CSS support (By: Ezequiel Ramis) - Add `jq` function, offering jq-style json processing +- Add support for the `EWW_BATTERY` magic variable in FreeBSD, OpenBSD, and NetBSD (By: dangerdyke) - Add `justify` property to the label widget, allowing text justification (By: n3oney) - Add `EWW_TIME` magic variable (By: Erenoit) diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/Cargo.lock /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/Cargo.lock --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/Cargo.lock 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/Cargo.lock 2026-07-08 10:16:01.415245500 +0000 @@ -1,11 +1,11 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.20.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", @@ -13,25 +13,14 @@ [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" -version = "0.7.6" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d713b3834d76b85304d4d525563c1276e2e30dc97cc67bfb4585a4a29fc2c89f" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", @@ -44,7 +33,7 @@ [[package]] name = "aho-corasick" -version = "1.0.4" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", @@ -53,7 +42,7 @@ [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] @@ -74,7 +63,7 @@ [[package]] name = "anstream" -version = "0.6.12" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b09b5178381e0874812a9b157f7fe84982617e48f71f4e3235482775e5b540" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", @@ -83,4 +72,5 @@ "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] @@ -88,13 +78,13 @@ [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", @@ -103,16 +93,16 @@ [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", @@ -122,7 +112,7 @@ [[package]] name = "anyhow" -version = "1.0.80" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] @@ -141,5 +131,5 @@ checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" dependencies = [ - "event-listener", + "event-listener 2.5.3", "futures-core", ] @@ -147,11 +137,12 @@ [[package]] name = "async-channel" -version = "1.9.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener-strategy", "futures-core", + "pin-project-lite", ] @@ -162,19 +153,38 @@ checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", "cfg-if", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", - "polling", - "rustix 0.37.23", + "polling 2.8.0", + "rustix 0.37.27", "slab", - "socket2 0.4.9", + "socket2 0.4.10", "waker-fn", ] [[package]] +name = "async-io" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.7.3", + "rustix 0.38.37", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] name = "async-lock" version = "2.8.0" @@ -182,22 +192,32 @@ checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ - "event-listener", + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", ] [[package]] name = "async-process" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" dependencies = [ - "async-io", - "async-lock", - "autocfg", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", "blocking", "cfg-if", - "event-listener", - "futures-lite", - "rustix 0.37.23", - "signal-hook", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.37", "windows-sys 0.48.0", ] @@ -205,38 +225,55 @@ [[package]] name = "async-recursion" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", +] + +[[package]] +name = "async-signal" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" +dependencies = [ + "async-io 2.3.4", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.37", + "signal-hook-registry", + "slab", + "windows-sys 0.59.0", ] [[package]] name = "async-task" -version = "4.4.0" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "atk" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba16453d10c712284061a05f6510f75abeb92b56ba88dfeb48c74775020cc22" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" dependencies = [ "atk-sys", - "bitflags 1.3.2", "glib", "libc", @@ -245,34 +282,33 @@ [[package]] name = "atk-sys" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf0a7ca572fbd5762fd8f8cd65a581e06767bc1234913fe1f43e370cff6e90" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] name = "atomic-waker" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", @@ -280,11 +316,12 @@ "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] @@ -299,7 +336,7 @@ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" dependencies = [ "bit-vec", @@ -308,7 +345,7 @@ [[package]] name = "bit-vec" -version = "0.6.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" [[package]] @@ -320,7 +357,7 @@ [[package]] name = "bitflags" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] @@ -335,60 +372,64 @@ [[package]] name = "blocking" -version = "1.3.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel", - "async-lock", "async-task", - "atomic-waker", - "fastrand 1.9.0", - "futures-lite", - "log", + "futures-io", + "futures-lite 2.3.0", + "piper", ] [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.4.0" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" + +[[package]] +name = "bytesize" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a3c8f83209414aacf0eeae3cf730b18d6981697fba62f200fcfb92b9f082acba" [[package]] name = "cached" -version = "0.48.1" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "355face540df58778b96814c48abb3c2ed67c4878a8087ab1819c1fedeec505f" +checksum = "b4d73155ae6b28cf5de4cfc29aeb02b8a1c6dab883cb015d15cd514e42766846" dependencies = [ - "ahash 0.8.9", + "ahash", "cached_proc_macro", "cached_proc_macro_types", - "hashbrown 0.14.3", - "instant", + "hashbrown", "once_cell", "thiserror", + "web-time", ] [[package]] name = "cached_proc_macro" -version = "0.19.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d52f526f7cbc875b296856ca8c964a9f6290556922c303a8a3883e3c676e6a1" +checksum = "2f42a145ed2d10dce2191e1dcf30cfccfea9026660e143662ba5eec4017d5daa" dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] @@ -401,9 +442,9 @@ [[package]] name = "cairo-rs" -version = "0.17.10" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3603c4028a5e368d09b51c8b624b9a46edcd7c3778284077a6125af73c9f0a" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "cairo-sys-rs", "glib", @@ -415,27 +456,37 @@ [[package]] name = "cairo-sys-rs" -version = "0.17.10" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "691d0c66b1fb4881be80a760cb8fe76ea97218312f9dfe2c9cc0f496ca279cb1" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ "glib-sys", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] name = "cc" -version = "1.0.82" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01" +checksum = "9540e661f81799159abee814118cc139a2004b3a3aa3ea37724a1b66530b90e0" dependencies = [ - "libc", + "shlex", ] [[package]] name = "cfg-expr" -version = "0.15.4" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-expr" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0890061c4d3223e7267f3bad2ec40b997d64faac1c2815a4a9d95018e2b9e9c" dependencies = [ "smallvec", @@ -450,8 +501,14 @@ [[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] name = "chrono" -version = "0.4.26" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", @@ -459,28 +516,27 @@ "js-sys", "num-traits", - "time 0.1.45", + "pure-rust-locales", "wasm-bindgen", - "winapi", + "windows-link", ] [[package]] name = "chrono-tz" -version = "0.8.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1369bc6b9e9a7dfdae2055f6ec151fe9c554a9d23d357c0237cee2e25eaabb7" +checksum = "cd6dd8046d00723a59a2f8c5f295c515b9bb9a331ee4f8f3d4dd49e428acd3b6" dependencies = [ "chrono", "chrono-tz-build", - "phf 0.11.2", + "phf", ] [[package]] name = "chrono-tz-build" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2f5ebdc942f57ed96d560a6d1a459bae5851102a25d5bf89dc04ae453e31ecf" +checksum = "e94fea34d77a245229e7746bd2beb786cd2a896f306ff491fb8cecb3074b10a7" dependencies = [ "parse-zoneinfo", - "phf 0.11.2", "phf_codegen", ] @@ -492,12 +548,12 @@ checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9" dependencies = [ - "hashbrown 0.14.3", + "hashbrown", ] [[package]] name = "clap" -version = "4.5.1" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" +checksum = "b0956a43b323ac1afaffc053ed5c4b7c1f1800bacd1683c353aabbb752515dd3" dependencies = [ "clap_builder", @@ -507,19 +563,19 @@ [[package]] name = "clap_builder" -version = "4.5.1" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" +checksum = "4d72166dd41634086d5803a47eb71ae740e61d84709c36f3c34110173db3961b" dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.0", + "strsim", ] [[package]] name = "clap_complete" -version = "4.5.1" +version = "4.5.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "885e4d7d5af40bfb99ae6f9433e292feac98d452dcb3ec3d25dfe7552b77da8c" +checksum = "8937760c3f4c60871870b8c3ee5f9b30771f792a7045c48bcbba999d7d6b3b8e" dependencies = [ "clap", @@ -528,19 +584,19 @@ [[package]] name = "clap_derive" -version = "4.5.0" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] @@ -562,13 +618,13 @@ [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", @@ -577,31 +633,25 @@ [[package]] name = "console" -version = "0.15.7" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode", "lazy_static", "libc", - "windows-sys 0.45.0", + "windows-sys 0.52.0", ] [[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", @@ -610,9 +660,8 @@ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "cfg-if", "crossbeam-utils", ] @@ -620,9 +669,8 @@ [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", @@ -631,29 +679,16 @@ [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset 0.9.0", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] @@ -669,7 +704,7 @@ [[package]] name = "darling" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", @@ -679,7 +714,7 @@ [[package]] name = "darling_core" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", @@ -687,17 +722,17 @@ "proc-macro2", "quote", - "strsim 0.10.0", - "syn 1.0.109", + "strsim", + "syn 2.0.87", ] [[package]] name = "darling_macro" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 1.0.109", + "syn 2.0.87", ] @@ -722,5 +757,5 @@ "gobject-sys", "libc", - "system-deps", + "system-deps 6.2.2", ] @@ -752,14 +787,5 @@ "gtk-sys", "libc", - "system-deps", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", + "system-deps 6.2.2", ] @@ -777,13 +803,21 @@ [[package]] name = "derive_more" -version = "0.99.17" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "convert_case", "proc-macro2", "quote", - "rustc_version", - "syn 1.0.109", + "syn 2.0.87", + "unicode-xid", ] @@ -827,19 +861,19 @@ [[package]] name = "dyn-clone" -version = "1.0.12" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "304e6508efa593091e97a9abbc10f90aa7ca635b6d2784feff3c89d41dd12272" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "either" -version = "1.9.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "ena" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ "log", @@ -854,7 +888,7 @@ [[package]] name = "enumflags2" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" dependencies = [ "enumflags2_derive", @@ -864,18 +898,18 @@ [[package]] name = "enumflags2_derive" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "env_logger" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ "humantime", @@ -894,37 +928,56 @@ [[package]] name = "errno" -version = "0.3.2" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ - "errno-dragonfly", "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "event-listener" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" dependencies = [ - "cc", - "libc", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] name = "event-listener" -version = "2.5.3" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite", +] [[package]] name = "eww" -version = "0.5.0" +version = "0.6.0" dependencies = [ "anyhow", "bincode", - "cairo-rs", - "cairo-sys-rs", "chrono", "clap", @@ -935,22 +988,18 @@ "extend", "futures", - "gdk", - "gdk-pixbuf", + "gdk-sys", "gdkx11", - "glib", - "glib-macros", "grass", "gtk", "gtk-layer-shell", - "itertools 0.12.1", + "itertools", "libc", "log", "maplit", - "nix 0.27.1", + "nix 0.29.0", "notifier_host", "notify", "once_cell", "ordered-stream", - "pango", "pretty_env_logger", "regex", @@ -973,4 +1022,5 @@ version = "0.1.0" dependencies = [ + "chrono", "derive_more", "ref-cast", @@ -986,5 +1036,5 @@ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] @@ -1000,7 +1050,7 @@ [[package]] name = "fastrand" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] @@ -1010,5 +1060,5 @@ checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "memoffset 0.9.0", + "memoffset 0.9.1", "rustc_version", ] @@ -1016,12 +1066,12 @@ [[package]] name = "filetime" -version = "0.2.22" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", - "windows-sys 0.48.0", + "libredox", + "windows-sys 0.59.0", ] @@ -1049,7 +1099,7 @@ [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", @@ -1064,7 +1114,7 @@ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", @@ -1074,13 +1124,13 @@ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", @@ -1091,7 +1141,7 @@ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] @@ -1111,31 +1161,41 @@ [[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", @@ -1153,9 +1213,8 @@ [[package]] name = "gdk" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1df5ea52cccd7e3a0897338b5564968274b52f5fd12601e0afa44f454c74d3" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" dependencies = [ - "bitflags 1.3.2", "cairo-rs", "gdk-pixbuf", @@ -1169,9 +1228,8 @@ [[package]] name = "gdk-pixbuf" -version = "0.17.10" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695d6bc846438c5708b07007537b9274d883373dd30858ca881d7d71b5540717" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" dependencies = [ - "bitflags 1.3.2", "gdk-pixbuf-sys", "gio", @@ -1183,7 +1241,7 @@ [[package]] name = "gdk-pixbuf-sys" -version = "0.17.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9285ec3c113c66d7d0ab5676599176f1f42f4944ca1b581852215bf5694870cb" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ "gio-sys", @@ -1191,12 +1249,12 @@ "gobject-sys", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] name = "gdk-sys" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2152de9d38bc67a17b3fe49dc0823af5bf874df59ea088c5f28f31cf103de703" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" dependencies = [ "cairo-sys-rs", @@ -1208,12 +1266,12 @@ "pango-sys", "pkg-config", - "system-deps", + "system-deps 6.2.2", ] [[package]] name = "gdkx11" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f9efc60ffeede8e3816d1e4ca54b62107c31b6560f967cd84583c8b23acccf" +checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce" dependencies = [ "gdk", @@ -1227,12 +1285,12 @@ [[package]] name = "gdkx11-sys" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aaa174c09165bb416717bf5cf3132a3dc617a069b09000ac0eae1b921a00740" +checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" dependencies = [ "gdk-sys", "glib-sys", "libc", - "system-deps", + "system-deps 6.2.2", "x11", ] @@ -1250,36 +1308,37 @@ [[package]] name = "gethostname" -version = "0.2.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" dependencies = [ "libc", - "winapi", + "windows-targets 0.48.5", ] [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", + "wasm-bindgen", ] [[package]] name = "gimli" -version = "0.27.3" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "gio" -version = "0.17.10" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6973e92937cf98689b6a054a9e56c657ed4ff76de925e36fc331a15f0c5d30a" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" dependencies = [ - "bitflags 1.3.2", "futures-channel", "futures-core", @@ -1297,12 +1356,12 @@ [[package]] name = "gio-sys" -version = "0.17.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ccf87c30a12c469b6d958950f6a9c09f2be20b7773f7e70d20b867fdf2628c3" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps", + "system-deps 6.2.2", "winapi", ] @@ -1310,9 +1369,9 @@ [[package]] name = "glib" -version = "0.17.10" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fad45ba8d4d2cea612b432717e834f48031cd8853c8aaf43b2c79fec8d144b" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "futures-channel", "futures-core", @@ -1333,44 +1392,45 @@ [[package]] name = "glib-macros" -version = "0.17.10" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca5c79337338391f1ab8058d6698125034ce8ef31b72a442437fa6c8580de26" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ - "anyhow", - "heck", - "proc-macro-crate", + "heck 0.4.1", + "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] name = "glib-sys" -version = "0.17.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d80aa6ea7bba0baac79222204aa786a6293078c210abe69ef1336911d4bdc4f0" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] name = "gobject-sys" -version = "0.17.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd34c3317740a6358ec04572c1bcfd3ac0b5b6529275fae255b237b314bb8062" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ "glib-sys", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] name = "grass" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7746cd9bf09f9bb7d98638774a70642000356f543898d9a352cd043f82744528" +checksum = "f7a68216437ef68f0738e48d6c7bb9e6e6a92237e001b03d838314b068f33c94" dependencies = [ + "clap", + "getrandom", "grass_compiler", ] @@ -1378,23 +1438,23 @@ [[package]] name = "grass_compiler" -version = "0.13.0" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187adfc0b34289c7f8f3819453ce9da3177c3d73f40ac74bb17faba578813d45" +checksum = "2d9e3df7f0222ce5184154973d247c591d9aadc28ce7a73c6cd31100c9facff6" dependencies = [ "codemap", - "indexmap 1.9.3", + "indexmap", "lasso", "once_cell", - "phf 0.10.1", + "phf", + "rand", ] [[package]] name = "gtk" -version = "0.17.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c4222ab92b08d4d0bab90ddb6185b4e575ceeea8b8cdf00b938d7b6661d966" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" dependencies = [ "atk", - "bitflags 1.3.2", "cairo-rs", "field-offset", @@ -1407,5 +1467,4 @@ "gtk3-macros", "libc", - "once_cell", "pango", "pkg-config", @@ -1414,9 +1473,9 @@ [[package]] name = "gtk-layer-shell" -version = "0.6.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "992f5fedb31835424a5280acd162bf348995f617d26969fde8d3dfd389b3ff5f" +checksum = "adb41643070b55cdda5a4a10a338520cff4345395e342b754c02f341e4107383" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.6.0", "gdk", "glib", @@ -1429,7 +1488,7 @@ [[package]] name = "gtk-layer-shell-sys" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5754bcfaadfc3529116af6ae93559b267d88647f965382153a4b8ea9372be75a" +checksum = "b9aa75cbb5bf5195d8be239b189f2a36cbea223777188c50f0bce124e291fe34" dependencies = [ "gdk-sys", @@ -1437,12 +1496,12 @@ "gtk-sys", "libc", - "system-deps", + "system-deps 7.0.3", ] [[package]] name = "gtk-sys" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d8eb6a4b93e5a7e6980f7348d08c1cd93d31fae07cf97f20678c5ec41de3d7e" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" dependencies = [ "atk-sys", @@ -1455,57 +1514,53 @@ "libc", "pango-sys", - "system-deps", + "system-deps 6.2.2", ] [[package]] name = "gtk3-macros" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3efb84d682c9a39c10bd9f24f5a4b9c15cc8c7edc45c19cb2ca2c4fc38b2d95e" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" dependencies = [ - "anyhow", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.7.6", + "ahash", + "allocator-api2", ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "heck" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "hashbrown" -version = "0.14.3" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" -dependencies = [ - "ahash 0.8.9", - "allocator-api2", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] -name = "heck" -version = "0.4.1" +name = "hermit-abi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] @@ -1517,7 +1572,7 @@ [[package]] name = "hifijson" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85ef6b41c333e6dd2a4aaa59125a19b633cd17e7aaf372b2260809777bcdef4a" +checksum = "9958ab3ce3170c061a27679916bd9b969eceeb5e8b120438e6751d0987655c42" [[package]] @@ -1529,7 +1584,7 @@ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", @@ -1538,5 +1593,5 @@ "js-sys", "wasm-bindgen", - "windows 0.48.0", + "windows-core 0.52.0", ] @@ -1558,20 +1613,10 @@ [[package]] name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.0.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown", ] @@ -1598,7 +1643,7 @@ [[package]] name = "insta" -version = "1.31.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0770b0a3d4c70567f0d58331f3088b0e4c4f56c9b8d764efe654b4a5d46de3a" +checksum = "6593a41c7a73841868772495db7dc1e8ecab43bb5c0b6da2059246c4b506ab60" dependencies = [ "console", @@ -1606,12 +1651,11 @@ "linked-hash-map", "similar", - "yaml-rust", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", @@ -1624,5 +1668,5 @@ checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", "windows-sys 0.48.0", @@ -1631,27 +1675,24 @@ [[package]] name = "is-terminal" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi", - "rustix 0.38.8", - "windows-sys 0.48.0", + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", @@ -1660,16 +1701,17 @@ [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jaq-core" -version = "1.2.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d6a5713b8f33675abfac79d1db0022a3f28764b2a6b96a185c199ad8dab86d" +checksum = "d6fda09ee08c84c81293fdf811d9ebaa87b327557b5391f290c926d728c2ddd4" dependencies = [ "aho-corasick", "base64", + "chrono", "hifijson", "jaq-interpret", @@ -1677,5 +1719,4 @@ "log", "regex", - "time 0.3.34", "urlencoding", ] @@ -1683,12 +1724,12 @@ [[package]] name = "jaq-interpret" -version = "1.2.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f569e38e5fc677db8dfda89ee0b4c25b3f53e811b16434fd14bdc5b43fc362ac" +checksum = "2fe95ec3c24af3fd9f3dd1091593f5e49b003a66c496a8aa39d764d0a06ae17b" dependencies = [ - "ahash 0.8.9", + "ahash", "dyn-clone", "hifijson", - "indexmap 2.0.0", + "indexmap", "jaq-syn", "once_cell", @@ -1698,7 +1739,7 @@ [[package]] name = "jaq-parse" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef6f8beb9f9922546419e774e24199e8a968f54c63a5a2323c8f3ef3321ace14" +checksum = "0346d7d3146cdda8acd929581f3d6626a332356c74d5c95aeaffaac2eb6dee82" dependencies = [ "chumsky", @@ -1708,10 +1749,8 @@ [[package]] name = "jaq-std" -version = "1.2.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d7871c59297cbfdd18f6f1bbbafaad24e97fd555ee1e2a1be7a40a5a20f551a" +checksum = "bfbaa55578fd3b70433b594a370741e0c364e4afff92cc0099623fce87311bc1" dependencies = [ - "bincode", - "jaq-parse", "jaq-syn", ] @@ -1719,7 +1758,7 @@ [[package]] name = "jaq-syn" -version = "1.1.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d60101fb791b20c982731d848ed6e7d25363656497647c2093b68bd88398d6" +checksum = "1ba44fe4428c71304604261ecbae047ee9cfb60c4f1a6bd222ebbb31726d3948" dependencies = [ "serde", @@ -1728,7 +1767,7 @@ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", @@ -1736,4 +1775,13 @@ [[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] name = "kqueue" version = "1.0.8" @@ -1757,54 +1805,53 @@ [[package]] name = "lalrpop" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" +checksum = "6e56f323e2d610628d1f5bdd39168a774674ac7989ed67011963bb3f71edd797" dependencies = [ "ascii-canvas", "bit-set", - "diff", "ena", - "is-terminal", - "itertools 0.10.5", + "itertools", "lalrpop-util", "petgraph", "pico-args", "regex", - "regex-syntax 0.7.4", + "regex-syntax", + "sha3", "string_cache", "term", - "tiny-keccak", "unicode-xid", + "walkdir", ] [[package]] name = "lalrpop-util" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" +checksum = "108dc8f5dabad92c65a03523055577d847f5dcc00f3e7d3a68bc4d48e01d8fe1" dependencies = [ - "regex", + "regex-automata", ] [[package]] name = "lasso" -version = "0.6.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeb7b21a526375c5ca55f1a6dfd4e1fad9fa4edd750f530252a718a44b2608f0" +checksum = "6e14eda50a3494b3bf7b9ce51c52434a761e383d7238ce1dd5dcec2fbc13e9fb" dependencies = [ - "hashbrown 0.11.2", + "hashbrown", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] @@ -1815,4 +1862,15 @@ [[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall", +] + +[[package]] name = "linked-hash-map" version = "0.5.6" @@ -1828,13 +1886,13 @@ [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", @@ -1844,7 +1902,7 @@ [[package]] name = "log" -version = "0.4.20" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] @@ -1856,16 +1914,7 @@ [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] @@ -1880,7 +1929,7 @@ [[package]] name = "memoffset" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", @@ -1889,47 +1938,46 @@ [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "windows-sys 0.48.0", ] [[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nix" -version = "0.25.1" +name = "mio" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", + "hermit-abi 0.3.9", "libc", - "memoffset 0.6.5", + "wasi", + "windows-sys 0.52.0", ] [[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] name = "nix" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", @@ -1937,15 +1985,15 @@ "libc", "memoffset 0.7.1", - "static_assertions", ] [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.6.0", "cfg-if", + "cfg_aliases", "libc", ] @@ -1956,7 +2004,8 @@ dependencies = [ "dbusmenu-gtk3", - "gdk", "gtk", "log", + "quick-xml", + "serde", "thiserror", "tokio", @@ -1970,5 +2019,5 @@ checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.6.0", "crossbeam-channel", "filetime", @@ -1978,5 +2027,5 @@ "libc", "log", - "mio", + "mio 0.8.11", "walkdir", "windows-sys 0.48.0", @@ -1993,14 +2042,8 @@ [[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", @@ -2008,18 +2051,8 @@ [[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] name = "object" -version = "0.31.1" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", @@ -2044,9 +2077,8 @@ [[package]] name = "pango" -version = "0.17.10" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35be456fc620e61f62dff7ff70fbd54dcbaf0a4b920c0f16de1107c47d921d48" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ - "bitflags 1.3.2", "gio", "glib", @@ -2058,25 +2090,25 @@ [[package]] name = "pango-sys" -version = "0.17.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da69f9f3850b0d8990d462f8c709561975e95f689c1cdf0fecdebde78b35195" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps", + "system-deps 6.2.2", ] [[package]] name = "parking" -version = "2.1.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", @@ -2086,20 +2118,20 @@ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall", "smallvec", - "windows-targets 0.48.2", + "windows-targets 0.52.6", ] [[package]] name = "parse-zoneinfo" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" dependencies = [ "regex", @@ -2108,21 +2140,10 @@ [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 1.9.3", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros", - "phf_shared 0.10.0", - "proc-macro-hack", + "indexmap", ] @@ -2133,4 +2154,5 @@ checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ + "phf_macros", "phf_shared 0.11.2", ] @@ -2142,5 +2164,5 @@ checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" dependencies = [ - "phf_generator 0.11.2", + "phf_generator", "phf_shared 0.11.2", ] @@ -2148,14 +2170,4 @@ [[package]] name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand", -] - -[[package]] -name = "phf_generator" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2168,14 +2180,13 @@ [[package]] name = "phf_macros" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", + "phf_generator", + "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] @@ -2206,7 +2217,7 @@ [[package]] name = "pin-project-lite" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] @@ -2217,8 +2228,19 @@ [[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.1.1", + "futures-io", +] + +[[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] @@ -2239,14 +2261,26 @@ [[package]] -name = "powerfmt" -version = "0.2.0" +name = "polling" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix 0.38.37", + "tracing", + "windows-sys 0.59.0", +] [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] @@ -2258,7 +2292,7 @@ [[package]] name = "pretty_assertions" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" dependencies = [ "diff", @@ -2283,5 +2317,15 @@ dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", ] @@ -2311,23 +2355,33 @@ [[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" +name = "proc-macro2" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] [[package]] -name = "proc-macro2" -version = "1.0.78" +name = "pure-rust-locales" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "1190fd18ae6ce9e137184f207593877e70f39b015040156b1e05081cdfe3733a" + +[[package]] +name = "quick-xml" +version = "0.37.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f22f29bdff3987b4d8632ef95fd6424ec7e4e0a57e2f4fc63e489e75357f6a03" dependencies = [ - "unicode-ident", + "memchr", + "serde", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", @@ -2366,7 +2420,7 @@ [[package]] name = "rayon" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", @@ -2386,28 +2440,19 @@ [[package]] name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "355ae415ccd3a04315d3f8246e86d67689ea74d88d915576e1589a351062a13b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", - "redox_syscall 0.2.16", + "libredox", "thiserror", ] @@ -2415,7 +2460,7 @@ [[package]] name = "ref-cast" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" dependencies = [ "ref-cast-impl", @@ -2424,59 +2469,53 @@ [[package]] name = "ref-cast-impl" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "regex" -version = "1.10.3" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax 0.8.2", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" - -[[package]] -name = "regex-syntax" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", @@ -2485,7 +2524,7 @@ [[package]] name = "rustix" -version = "0.37.23" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ "bitflags 1.3.2", @@ -2499,26 +2538,26 @@ [[package]] name = "rustix" -version = "0.38.8" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys 0.4.5", - "windows-sys 0.48.0", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", ] [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] @@ -2539,13 +2578,13 @@ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", @@ -2554,20 +2593,21 @@ [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "serde_json" -version = "1.0.105" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", @@ -2576,18 +2616,18 @@ [[package]] name = "serde_repr" -version = "0.1.16" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", @@ -2596,7 +2636,7 @@ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", @@ -2606,18 +2646,24 @@ [[package]] -name = "signal-hook" -version = "0.3.17" +name = "sha3" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "libc", - "signal-hook-registry", + "digest", + "keccak", ] [[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", @@ -2626,7 +2672,7 @@ [[package]] name = "similar" -version = "2.2.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" [[package]] @@ -2644,4 +2690,5 @@ version = "0.1.0" dependencies = [ + "bytesize", "cached", "chrono", @@ -2649,5 +2696,5 @@ "eww_shared_util", "insta", - "itertools 0.12.1", + "itertools", "jaq-core", "jaq-interpret", @@ -2662,5 +2709,5 @@ "serde_json", "static_assertions", - "strsim 0.11.0", + "strsim", "strum", "thiserror", @@ -2669,13 +2716,13 @@ [[package]] name = "siphasher" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", @@ -2684,7 +2731,7 @@ [[package]] name = "smallvec" -version = "1.11.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] @@ -2696,12 +2743,12 @@ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", @@ -2711,7 +2758,7 @@ [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", @@ -2740,19 +2787,13 @@ [[package]] name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strsim" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.26.1" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723b93e8addf9aa965ebe2d11da6d7540fa2283fcea14b3371ff055f7ba13f5f" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ "strum_macros", @@ -2761,13 +2802,13 @@ [[package]] name = "strum_macros" -version = "0.26.1" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a3417fc93d76740d974a01654a09777cb500428cc874ca9f45edfe0c4d4cd18" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", "rustversion", - "syn 2.0.50", + "syn 2.0.87", ] @@ -2785,7 +2826,7 @@ [[package]] name = "syn" -version = "2.0.50" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", @@ -2796,25 +2837,37 @@ [[package]] name = "sysinfo" -version = "0.30.5" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb4f3438c8f6389c864e61221cbc97e9bca98b4daf39a5beb7bea660f528bb2" +checksum = "355dbe4f8799b304b05e1b0f05fc59b2a18d36645cf169607da45bde2f69a1be" dependencies = [ - "cfg-if", "core-foundation-sys", "libc", + "memchr", "ntapi", - "once_cell", "rayon", - "windows 0.52.0", + "windows", ] [[package]] name = "system-deps" -version = "6.1.1" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ - "cfg-expr", - "heck", + "cfg-expr 0.15.8", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "system-deps" +version = "7.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66d23aaf9f331227789a99e8de4c91bf46703add012bdfd45fdecdfb2975a005" +dependencies = [ + "cfg-expr 0.17.0", + "heck 0.5.0", "pkg-config", "toml", @@ -2824,19 +2877,19 @@ [[package]] name = "target-lexicon" -version = "0.12.11" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.8.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", - "fastrand 2.0.0", - "redox_syscall 0.3.5", - "rustix 0.38.8", - "windows-sys 0.48.0", + "fastrand 2.1.1", + "once_cell", + "rustix 0.38.37", + "windows-sys 0.59.0", ] @@ -2854,7 +2907,7 @@ [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", @@ -2863,7 +2916,7 @@ [[package]] name = "thiserror" -version = "1.0.46" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9207952ae1a003f42d3d5e892dac3c6ba42aa6ac0c79a6a91a2b5cb4253e75c" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", @@ -2872,100 +2925,48 @@ [[package]] name = "thiserror-impl" -version = "1.0.46" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1728216d3244de4f14f14f8c15c79be1a7c67867d28d69b719690e2a19fb445" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", -] - -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "time" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", + "syn 2.0.87", ] [[package]] name = "tokio" -version = "1.36.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", "libc", - "mio", - "num_cpus", + "mio 1.0.2", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.6", + "socket2 0.5.7", "tokio-macros", "tracing", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", @@ -2978,12 +2979,12 @@ [[package]] name = "toml" -version = "0.7.6" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.20.2", ] @@ -2999,9 +3000,20 @@ [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.0.0", + "indexmap", "serde", "serde_spanned", @@ -3012,9 +3024,8 @@ [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", @@ -3024,18 +3035,18 @@ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", @@ -3044,14 +3055,15 @@ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "uds_windows" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ + "memoffset 0.9.1", "tempfile", "winapi", @@ -3066,19 +3078,19 @@ [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] @@ -3090,19 +3102,19 @@ [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "version-compare" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] @@ -3117,13 +3129,13 @@ [[package]] name = "waker-fn" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", @@ -3133,10 +3145,4 @@ [[package]] name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3145,9 +3151,10 @@ [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] @@ -3155,7 +3162,7 @@ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", @@ -3164,5 +3171,5 @@ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", "wasm-bindgen-shared", ] @@ -3170,7 +3177,7 @@ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", @@ -3180,11 +3187,11 @@ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", @@ -3193,7 +3200,17 @@ [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] @@ -3215,18 +3232,9 @@ [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-wsapoll" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" -dependencies = [ - "winapi", + "windows-sys 0.59.0", ] @@ -3239,37 +3247,68 @@ [[package]] name = "windows" -version = "0.48.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" dependencies = [ - "windows-targets 0.48.2", + "windows-core 0.57.0", + "windows-targets 0.52.6", ] [[package]] -name = "windows" +name = "windows-core" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-core", - "windows-targets 0.52.3", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" dependencies = [ - "windows-targets 0.52.3", + "windows-implement", + "windows-interface", + "windows-result", + "windows-targets 0.52.6", ] [[package]] -name = "windows-sys" -version = "0.45.0" +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "windows-link" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" dependencies = [ - "windows-targets 0.42.2", + "windows-targets 0.52.6", ] @@ -3280,5 +3319,5 @@ checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.2", + "windows-targets 0.48.5", ] @@ -3289,183 +3328,142 @@ checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.3", + "windows-targets 0.52.6", ] [[package]] -name = "windows-targets" -version = "0.42.2" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.52.6", ] [[package]] name = "windows-targets" -version = "0.48.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1eeca1c172a285ee6c2c84c341ccea837e7c01b12fbb2d0fe3c9e550ce49ec8" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.2", - "windows_aarch64_msvc 0.48.2", - "windows_i686_gnu 0.48.2", - "windows_i686_msvc 0.48.2", - "windows_x86_64_gnu 0.48.2", - "windows_x86_64_gnullvm 0.48.2", - "windows_x86_64_msvc 0.48.2", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d380ba1dc7187569a8a9e91ed34b8ccfc33123bbacb8c0aed2d1ad7f3ef2dc5f" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.3", - "windows_aarch64_msvc 0.52.3", - "windows_i686_gnu 0.52.3", - "windows_i686_msvc 0.52.3", - "windows_x86_64_gnu 0.52.3", - "windows_x86_64_gnullvm 0.52.3", - "windows_x86_64_msvc 0.52.3", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10d0c968ba7f6166195e13d593af609ec2e3d24f916f081690695cf5eaffb2f" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68e5dcfb9413f53afd9c8f86e56a7b4d86d9a2fa26090ea2dc9e40fba56c6ec6" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.48.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "571d8d4e62f26d4932099a9efe89660e8bd5087775a2ab5cdd8b747b811f1058" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dab469ebbc45798319e69eebf92308e541ce46760b49b18c6b3fe5e8965b30f" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.48.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2229ad223e178db5fbbc8bd8d3835e51e566b8474bfca58d2e6150c48bb723cd" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] -name = "windows_i686_gnu" -version = "0.52.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4e9b6a7cac734a8b4138a4e1044eac3404d8326b6c0f939276560687a033fb" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.48.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "600956e2d840c194eedfc5d18f8242bc2e17c7775b6684488af3a9fff6fe3287" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.3" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b0ec9c422ca95ff34a78755cfa6ad4a51371da2a5ace67500cf7ca5f232c58" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.48.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea99ff3f8b49fb7a8e0d305e5aec485bd068c2ba691b6e277d29eaeac945868a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704131571ba93e89d7cd43482277d6632589b18ecf4468f591fbae0a8b101614" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1a05a1ece9a7a0d5a7ccf30ba2c33e3a61a30e042ffd247567d1de1d94120d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42079295511643151e98d61c38c0acc444e52dd42ab456f7ccfd5152e8ecf21c" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.48.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d419259aba16b663966e29e6d7c6ecfa0bb8425818bb96f6f1f3c3eb71a6e7b9" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0770833d60a970638e989b3fa9fd2bb1aaadcf88963d1659fd7d9990196ed2d6" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.11" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e461589e194280efaa97236b73623445efa195aa633fd7004f39805707a9d53" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", @@ -3484,12 +3482,10 @@ [[package]] name = "x11rb" -version = "0.11.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf3c79412dd91bae7a7366b8ad1565a85e35dd049affc3a6a2c549e97419617" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" dependencies = [ "gethostname", - "nix 0.25.1", - "winapi", - "winapi-wsapoll", + "rustix 0.38.37", "x11rb-protocol", ] @@ -3497,35 +3493,23 @@ [[package]] name = "x11rb-protocol" -version = "0.11.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0b1513b141123073ce54d5bb1d33f801f17508fbd61e02060b1214e96d39c56" -dependencies = [ - "nix 0.25.1", -] +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" [[package]] name = "xdg-home" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" -dependencies = [ - "nix 0.26.2", - "winapi", -] - -[[package]] -name = "yaml-rust" -version = "0.4.5" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" dependencies = [ - "linked-hash-map", + "libc", + "windows-sys 0.59.0", ] [[package]] name = "yansi" -version = "0.5.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] @@ -3538,5 +3522,5 @@ "eww_shared_util", "insta", - "itertools 0.12.1", + "itertools", "lalrpop", "lalrpop-util", @@ -3555,7 +3539,7 @@ [[package]] name = "zbus" -version = "3.14.1" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948" +checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" dependencies = [ "async-broadcast", @@ -3566,10 +3550,10 @@ "derivative", "enumflags2", - "event-listener", + "event-listener 2.5.3", "futures-core", "futures-sink", "futures-util", "hex", - "nix 0.26.2", + "nix 0.26.4", "once_cell", "ordered-stream", @@ -3591,9 +3575,9 @@ [[package]] name = "zbus_macros" -version = "3.14.1" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d" +checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", @@ -3605,7 +3589,7 @@ [[package]] name = "zbus_names" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" dependencies = [ "serde", @@ -3616,8 +3600,9 @@ [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -3625,18 +3610,18 @@ [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.50", + "syn 2.0.87", ] [[package]] name = "zvariant" -version = "3.15.0" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" dependencies = [ "byteorder", @@ -3650,9 +3635,9 @@ [[package]] name = "zvariant_derive" -version = "3.15.0" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/Cargo.toml /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/Cargo.toml --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/Cargo.toml 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/Cargo.toml 2026-07-08 10:16:01.415245500 +0000 @@ -7,32 +7,40 @@ simplexpr = { version = "0.1.0", path = "crates/simplexpr" } eww_shared_util = { version = "0.1.0", path = "crates/eww_shared_util" } -yuck = { version = "0.1.0", path = "crates/yuck", default-features = false} +yuck = { version = "0.1.0", path = "crates/yuck", default-features = false } notifier_host = { version = "0.1.0", path = "crates/notifier_host" } -anyhow = "1.0.79" +anyhow = "1.0.86" bincode = "1.3.3" -cached = "0.48.0" -chrono = "0.4.26" -chrono-tz = "0.8.2" -clap = {version = "4.5.1", features = ["derive"] } -clap_complete = "4.5.1" +bytesize = "2.0.1" +cached = "0.53.1" +chrono = "0.4.38" +chrono-tz = "0.10.0" +clap = { version = "4.5.1", features = ["derive"] } +clap_complete = "4.5.12" codespan-reporting = "0.11" -derive_more = "0.99" +derive_more = { version = "1", features = [ + "as_ref", + "debug", + "display", + "from", + "from_str", +] } extend = "1.2" -futures = "0.3.28" -grass = {version = "0.13.1", default-features = false} +futures = "0.3.30" +grass = "0.13.4" +gtk = "0.18.1" insta = "1.7" -itertools = "0.12.1" -jaq-core = "1.2.1" -jaq-parse = "1.0.2" -jaq-std = {version = "1.2.1", features = ["bincode"]} -jaq-interpret = "1.2.1" -jaq-syn = "1.1.0" -lalrpop = { version = "0.20.0", features = ["unicode"] } -lalrpop-util = { version = "0.20.0", features = ["unicode"] } +itertools = "0.13.0" +jaq-core = "1.5.1" +jaq-parse = "1.0.3" +jaq-std = "1.6.0" +jaq-interpret = "1.5.0" +jaq-syn = "1.6.0" +lalrpop = { version = "0.21", features = ["unicode"] } +lalrpop-util = { version = "0.21", features = ["unicode"] } libc = "0.2" log = "0.4" maplit = "1" -nix = "0.27.1" +nix = "0.29.0" notify = "6.1.1" once_cell = "1.19" @@ -40,7 +48,7 @@ pretty_env_logger = "0.5.0" ref-cast = "1.0.22" -regex = "1.10.3" +regex = "1.10.5" serde_json = "1.0" -serde = {version = "1.0", features = ["derive"]} +serde = { version = "1.0", features = ["derive"] } simple-signal = "1.1" smart-default = "0.7.1" @@ -48,10 +56,11 @@ strsim = "0.11" strum = { version = "0.26", features = ["derive"] } -sysinfo = "0.30.5" +sysinfo = "0.31.2" thiserror = "1.0" -tokio-util = "0.7.8" -tokio = { version = "1.36.0", features = ["full"] } +tokio-util = "0.7.11" +tokio = { version = "1.39.2", features = ["full"] } unescape = "0.1" wait-timeout = "0.2" +zbus = { version = "3.15.2", default-features = false, features = ["tokio"] } [profile.dev] diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/README.md /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/README.md --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/README.md 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/README.md 2026-07-24 07:06:43.830818000 +0000 @@ -12,8 +12,12 @@ Dharmx also wrote a nice, beginner friendly introductory guide for eww [here](https://dharmx.is-a.dev/eww-powermenu/). -## Eww needs your opinion! -I've hit a bit of a design roadblock for one of the bigger features that are in the works right now. +## Check out another cool project by me -**Please read through https://github.com/elkowar/eww/discussions/453 and share your thoughts, ideas and opinions!** + + +I'm currently busy working [yolk](https://elkowar.github.io/yolk), +which is a dotfile management solution that supports a unique spin on templating: *templating without template files*. + +To find out more, check out the [website and documentation](https://elkowar.github.io/yolk)! ## Examples @@ -60,4 +64,11 @@ +* [Activate Linux by Nycta](https://github.com/Nycta-b424b3c7/eww_activate-linux) + +
+ +![Activate Linux](https://raw.githubusercontent.com/Nycta-b424b3c7/eww_activate-linux/refs/heads/master/activate-linux.png) + +
## Contribewwting @@ -66,4 +77,5 @@ ### Steps + 1. Fork this repository 2. Install dependencies @@ -71,2 +83,6 @@ 4. Write down your changes in CHANGELOG.md 5. Open a pull request once you're finished + +## Widget + +https://en.wikipedia.org/wiki/Wikipedia:Widget diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/Cargo.toml /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/Cargo.toml --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/Cargo.toml 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/Cargo.toml 2026-07-08 10:16:01.415245500 +0000 @@ -1,5 +1,5 @@ [package] name = "eww" -version = "0.5.0" +version = "0.6.0" authors = ["elkowar <5300871+elkowar@users.noreply.github.com>"] description = "Widgets for everyone!" @@ -10,5 +10,4 @@ - [features] default = ["x11", "wayland"] @@ -22,26 +21,17 @@ notifier_host.workspace = true -gtk = "0.17.1" -gdk = "0.17.1" -pango = "0.17.1" -glib = "0.17.8" -glib-macros = "0.17.8" - -cairo-rs = "0.17" -cairo-sys-rs = "0.17" - -gdk-pixbuf = "0.17" - -gtk-layer-shell = { version = "0.6.1", optional = true } -gdkx11 = { version = "0.17", optional = true } -x11rb = { version = "0.11.1", features = ["randr"], optional = true } +gtk-layer-shell = { version = "0.8.1", optional = true, features=["v0_6"] } +gdkx11 = { version = "0.18", optional = true } +x11rb = { version = "0.13.1", features = ["randr"], optional = true } +gdk-sys = "0.18.0" -zbus = { version = "3.7.0", default-features = false, features = ["tokio"] } ordered-stream = "0.2.0" -anyhow.workspace = true + +grass.workspace = true +anyhow.workspace = true bincode.workspace = true chrono.workspace = true -clap = {workspace = true, features = ["derive"] } +clap = { workspace = true, features = ["derive"] } clap_complete.workspace = true codespan-reporting.workspace = true @@ -49,5 +39,5 @@ extend.workspace = true futures.workspace = true -grass = {workspace = true, default-features = false} +gtk.workspace = true itertools.workspace = true libc.workspace = true @@ -60,9 +50,10 @@ regex.workspace = true serde_json.workspace = true -serde = {workspace = true, features = ["derive"]} +serde = { workspace = true, features = ["derive"] } simple-signal.workspace = true -sysinfo = { workspace = true, features = ["linux-netdevs"] } +sysinfo = { workspace = true } tokio-util.workspace = true tokio = { workspace = true, features = ["full"] } unescape.workspace = true wait-timeout.workspace = true +zbus = { workspace = true, default-features = false, features = ["tokio"] } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/app.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/app.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/app.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/app.rs 2026-07-08 10:17:59.508547000 +0000 @@ -1,4 +1,3 @@ use crate::{ - config, daemon_response::DaemonResponseSender, display_backend::DisplayBackend, @@ -18,4 +17,5 @@ use gdk::Monitor; use glib::ObjectExt; +use gtk::{gdk, glib}; use itertools::Itertools; use once_cell::sync::Lazy; @@ -24,4 +24,5 @@ cell::RefCell, collections::{HashMap, HashSet}, + marker::PhantomData, rc::Rc, }; @@ -45,4 +46,5 @@ NoOp, UpdateVars(Vec<(VarName, DynVal)>), + PollVars(Vec), ReloadConfigAndCss(DaemonResponseSender), OpenInspector, @@ -67,4 +69,5 @@ CloseWindows { windows: Vec, + auto_reopen: bool, sender: DaemonResponseSender, }, @@ -88,8 +91,4 @@ #[derive(Debug)] pub struct EwwWindow { - /// Every window has an id, uniquely identifying it. - /// If no specific ID was specified whilst starting the window, - /// this will be the same as the window name. - pub instance_id: String, pub name: String, pub scope_index: ScopeIndex, @@ -112,9 +111,11 @@ } -pub struct App { - pub display_backend: B, +pub struct App { pub scope_graph: Rc>, pub eww_config: config::EwwConfig, - /// Map of all currently open windows by their IDs + /// Map of all currently open windows to their unique IDs + /// If no specific ID was specified whilst starting the window, + /// it will be the same as the window name. + /// Therefore, only one window of a given name can exist when not using IDs. pub open_windows: HashMap, pub instance_id_to_args: HashMap, @@ -132,7 +133,8 @@ pub paths: EwwPaths, + pub phantom: PhantomData, } -impl std::fmt::Debug for App { +impl std::fmt::Debug for App { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("App") @@ -147,8 +149,26 @@ } +/// Wait until the .model() is available for all monitors (or there is a timeout) +async fn wait_for_monitor_model() { + let display = gdk::Display::default().expect("could not get default display"); + let start = std::time::Instant::now(); + loop { + let all_monitors_set = + (0..display.n_monitors()).all(|i| display.monitor(i).and_then(|monitor| monitor.model()).is_some()); + if all_monitors_set { + break; + } + tokio::time::sleep(Duration::from_millis(10)).await; + if std::time::Instant::now() - start > Duration::from_millis(500) { + log::warn!("Timed out waiting for monitor model to be set"); + break; + } + } +} + impl App { /// Handle a [`DaemonCommand`] event, logging any errors that occur. - pub fn handle_command(&mut self, event: DaemonCommand) { - if let Err(err) = self.try_handle_command(event) { + pub async fn handle_command(&mut self, event: DaemonCommand) { + if let Err(err) = self.try_handle_command(event).await { error_handling_ctx::print_error(err); } @@ -156,5 +176,5 @@ /// Try to handle a [`DaemonCommand`] event. - fn try_handle_command(&mut self, event: DaemonCommand) -> Result<()> { + async fn try_handle_command(&mut self, event: DaemonCommand) -> Result<()> { log::debug!("Handling event: {:?}", &event); match event { @@ -168,5 +188,14 @@ } } + DaemonCommand::PollVars(names) => { + for var_name in names { + self.force_poll_variable(var_name); + } + } DaemonCommand::ReloadConfigAndCss(sender) => { + // Wait for all monitor models to be set. When a new monitor gets added, this + // might not immediately be the case. And if we were to wait inside the + // connect_monitor_added callback, model() never gets set. So instead we wait here. + wait_for_monitor_model().await; let mut errors = Vec::new(); @@ -195,5 +224,5 @@ log::info!("Received close command, closing all windows"); for window_name in self.open_windows.keys().cloned().collect::>() { - self.close_window(&window_name)?; + self.close_window(&window_name, false)?; } } @@ -204,5 +233,5 @@ let (config_name, id) = w; if should_toggle && self.open_windows.contains_key(id) { - self.close_window(id) + self.close_window(id, false) } else { log::debug!("Config: {}, id: {}", config_name, id); @@ -235,5 +264,5 @@ let result = if should_toggle && is_open { - self.close_window(&instance_id) + self.close_window(&instance_id, false) } else { self.open_window(&WindowArguments { @@ -251,7 +280,8 @@ sender.respond_with_result(result)?; } - DaemonCommand::CloseWindows { windows, sender } => { - let errors = windows.iter().map(|window| self.close_window(window)).filter_map(Result::err); - sender.respond_with_error_list(errors)?; + DaemonCommand::CloseWindows { windows, auto_reopen, sender } => { + let errors = windows.iter().map(|window| self.close_window(window, auto_reopen)).filter_map(Result::err); + // Ignore sending errors, as the channel might already be closed + let _ = sender.respond_with_error_list(errors); } DaemonCommand::PrintState { all, sender } => { @@ -337,6 +367,23 @@ } + fn force_poll_variable(&mut self, name: VarName) { + match self.eww_config.get_script_var(&name) { + Err(err) => error_handling_ctx::print_error(err), + Ok(var) => { + if let ScriptVarDefinition::Poll(poll_var) = var { + log::debug!("force-polling var {}", &name); + match script_var_handler::run_poll_once(&poll_var) { + Err(err) => error_handling_ctx::print_error(err), + Ok(value) => self.update_global_variable(name, value), + } + } else { + error_handling_ctx::print_error(anyhow!("Script var '{}' is not polling", name)) + } + } + } + } + /// Close a window and do all the required cleanups in the scope_graph and script_var_handler - fn close_window(&mut self, instance_id: &str) -> Result<()> { + fn close_window(&mut self, instance_id: &str, auto_reopen: bool) -> Result<()> { if let Some(old_abort_send) = self.window_close_timer_abort_senders.remove(instance_id) { _ = old_abort_send.send(()); @@ -358,5 +405,15 @@ } - self.instance_id_to_args.remove(instance_id); + if auto_reopen { + self.failed_windows.insert(instance_id.to_string()); + // There might be an alternative monitor available already, so try to re-open it immediately. + // This can happen for example when a monitor gets disconnected and another connected, + // and the connection event happens before the disconnect. + if let Some(window_arguments) = self.instance_id_to_args.get(instance_id) { + let _ = self.open_window(&window_arguments.clone()); + } + } else { + self.instance_id_to_args.remove(instance_id); + } Ok(()) @@ -370,5 +427,5 @@ // if an instance of this is already running, close it if self.open_windows.contains_key(instance_id) { - self.close_window(instance_id)?; + self.close_window(instance_id, false)?; } @@ -417,4 +474,30 @@ } + if initiator.unfocus_close { + eww_window.gtk_window.connect_focus_out_event({ + let app_evt_sender = self.app_evt_send.clone(); + let instance_id = instance_id.to_string(); + move |_, _| { + // we don't care about the actual error response from the daemon as this is mostly just a fallback. + // Generally, this should get disconnected before the gtk window gets destroyed. + // This callback is triggered in 2 cases: + // - When the monitor of this window gets disconnected + // - When the window is closed manually. + // We don't distinguish here and assume the window should be reopened once a monitor + // becomes available again + let (response_sender, _) = daemon_response::create_pair(); + let command = DaemonCommand::CloseWindows { + windows: vec![instance_id.clone()], + auto_reopen: false, + sender: response_sender, + }; + if let Err(err) = app_evt_sender.send(command) { + log::error!("Error sending close window command to daemon after gtk window destroy event: {}", err); + } + gtk::glib::Propagation::Proceed + } + }); + } + eww_window.destroy_event_handler_id = Some(eww_window.gtk_window.connect_destroy({ let app_evt_sender = self.app_evt_send.clone(); @@ -423,7 +506,15 @@ // we don't care about the actual error response from the daemon as this is mostly just a fallback. // Generally, this should get disconnected before the gtk window gets destroyed. - // It serves as a fallback for when the window is closed manually. + // This callback is triggered in 2 cases: + // - When the monitor of this window gets disconnected + // - When the window is closed manually. + // We don't distinguish here and assume the window should be reopened once a monitor + // becomes available again let (response_sender, _) = daemon_response::create_pair(); - let command = DaemonCommand::CloseWindows { windows: vec![instance_id.clone()], sender: response_sender }; + let command = DaemonCommand::CloseWindows { + windows: vec![instance_id.clone()], + auto_reopen: true, + sender: response_sender, + }; if let Err(err) = app_evt_sender.send(command) { log::error!("Error sending close window command to daemon after gtk window destroy event: {}", err); @@ -444,5 +535,5 @@ _ = glib::timeout_future(duration) => { let (response_sender, mut response_recv) = daemon_response::create_pair(); - let command = DaemonCommand::CloseWindows { windows: vec![instance_id.clone()], sender: response_sender }; + let command = DaemonCommand::CloseWindows { windows: vec![instance_id.clone()], auto_reopen: false, sender: response_sender }; if let Err(err) = app_evt_sender.send(command) { log::error!("Error sending close window command to daemon after gtk window destroy event: {}", err); @@ -573,5 +664,4 @@ Ok(EwwWindow { - instance_id: window_init.id.clone(), name: window_init.name.clone(), gtk_window: window, @@ -627,4 +717,16 @@ } +/// Get the name of monitor plug for given monitor number +/// workaround gdk not providing this information on wayland in regular calls +/// gdk_screen_get_monitor_plug_name is deprecated but works fine for that case +fn get_monitor_plug_name(display: &gdk::Display, monitor_num: i32) -> Option<&str> { + unsafe { + use glib::translate::ToGlibPtr; + let plug_name_pointer = gdk_sys::gdk_screen_get_monitor_plug_name(display.default_screen().to_glib_none().0, monitor_num); + use std::ffi::CStr; + CStr::from_ptr(plug_name_pointer).to_str().ok() + } +} + /// Returns the [Monitor][gdk::Monitor] structure corresponding to the identifer. /// Outside of x11, only [MonitorIdentifier::Numeric] is supported @@ -644,5 +746,5 @@ for m in 0..display.n_monitors() { if let Some(model) = display.monitor(m).and_then(|x| x.model()) { - if model == *name { + if model == *name || Some(name.as_str()) == get_monitor_plug_name(display, m) { return display.monitor(m); } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/config/inbuilt.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/config/inbuilt.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/config/inbuilt.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/config/inbuilt.rs 2026-07-08 10:16:01.416245500 +0000 @@ -31,9 +31,9 @@ define_builtin_vars! { - // @desc EWW_TEMPS - Heat of the components in Celcius + // @desc EWW_TEMPS - Heat of the components in degree Celsius // @prop { : temperature } "EWW_TEMPS" [2] => || Ok(DynVal::from(get_temperatures())), - // @desc EWW_RAM - Information on ram and swap usage in kB. + // @desc EWW_RAM - Information on ram and swap usage in bytes. // @prop { total_mem, free_mem, total_swap, free_swap, available_mem, used_mem, used_mem_perc } "EWW_RAM" [2] => || Ok(DynVal::from(get_ram())), @@ -43,5 +43,5 @@ "EWW_DISK" [2] => || Ok(DynVal::from(get_disks())), - // @desc EWW_BATTERY - Battery capacity in procent of the main battery + // @desc EWW_BATTERY - Battery capacity in percent of the main battery // @prop { : { capacity, status } } "EWW_BATTERY" [2] => || Ok(DynVal::from( diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/config/system_stats.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/config/system_stats.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/config/system_stats.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/config/system_stats.rs 2026-07-08 10:16:01.417245400 +0000 @@ -203,6 +203,52 @@ } +#[cfg(any(target_os = "netbsd", target_os = "freebsd", target_os = "openbsd"))] +pub fn get_battery_capacity() -> Result { + let batteries = String::from_utf8( + // I have only tested `apm` on FreeBSD, but it *should* work on all of the listed targets, + // based on what I can tell from their online man pages. + std::process::Command::new("apm") + .output() + .context("\nError while getting the battery values on bsd, with `apm`: ")? + .stdout, + )?; + + // `apm` output should look something like this: + // $ apm + // ... + // Remaining battery life: 87% + // Remaining battery time: unknown + // Number of batteries: 1 + // Battery 0 + // Battery Status: charging + // Remaining battery life: 87% + // Remaining battery time: unknown + // ... + // last 4 lines are repeated for each battery. + // see also: + // https://www.freebsd.org/cgi/man.cgi?query=apm&manpath=FreeBSD+13.1-RELEASE+and+Ports + // https://man.openbsd.org/amd64/apm.8 + // https://man.netbsd.org/apm.8 + let mut json = String::from('{'); + let re_total = regex!(r"(?m)^Remaining battery life: (\d+)%"); + let re_single = regex!(r"(?sm)^Battery (\d+):.*?Status: (\w+).*?(\d+)%"); + for bat in re_single.captures_iter(&batteries) { + json.push_str(&format!( + r#""BAT{}": {{ "status": "{}", "capacity": {} }}, "#, + bat.get(1).unwrap().as_str(), + bat.get(2).unwrap().as_str(), + bat.get(3).unwrap().as_str(), + )) + } + + json.push_str(&format!(r#""total_avg": {}}}"#, re_total.captures(&batteries).unwrap().get(1).unwrap().as_str())); + Ok(json) +} + #[cfg(not(target_os = "macos"))] #[cfg(not(target_os = "linux"))] +#[cfg(not(target_os = "netbsd"))] +#[cfg(not(target_os = "freebsd"))] +#[cfg(not(target_os = "openbsd"))] pub fn get_battery_capacity() -> Result { Err(anyhow::anyhow!("Eww doesn't support your OS for getting the battery capacity")) @@ -213,5 +259,4 @@ networks.refresh_list(); - networks.refresh(); let elapsed = last_refresh.next_refresh(); diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/display_backend.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/display_backend.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/display_backend.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/display_backend.rs 2026-07-08 10:16:01.418245300 +0000 @@ -1,4 +1,6 @@ use crate::{widgets::window::Window, window_initiator::WindowInitiator}; +use gtk::gdk; + #[cfg(feature = "wayland")] pub use platform_wayland::WaylandBackend; @@ -9,4 +11,5 @@ pub trait DisplayBackend: Send + Sync + 'static { const IS_X11: bool; + const IS_WAYLAND: bool; fn initialize_window(window_init: &WindowInitiator, monitor: gdk::Rectangle, x: i32, y: i32) -> Option; @@ -17,4 +20,5 @@ impl DisplayBackend for NoBackend { const IS_X11: bool = false; + const IS_WAYLAND: bool = false; fn initialize_window(_window_init: &WindowInitiator, _monitor: gdk::Rectangle, x: i32, y: i32) -> Option { @@ -25,24 +29,27 @@ #[cfg(feature = "wayland")] mod platform_wayland { + use super::DisplayBackend; use crate::{widgets::window::Window, window_initiator::WindowInitiator}; + use gtk::gdk; use gtk::prelude::*; + use gtk_layer_shell::{KeyboardMode, LayerShell}; + use yuck::config::backend_window_options::WlWindowFocusable; use yuck::config::{window_definition::WindowStacking, window_geometry::AnchorAlignment}; - use super::DisplayBackend; - pub struct WaylandBackend; impl DisplayBackend for WaylandBackend { const IS_X11: bool = false; + const IS_WAYLAND: bool = true; fn initialize_window(window_init: &WindowInitiator, monitor: gdk::Rectangle, x: i32, y: i32) -> Option { let window = Window::new(gtk::WindowType::Toplevel, x, y); // Initialising a layer shell surface - gtk_layer_shell::init_for_window(&window); + window.init_layer_shell(); // Sets the monitor where the surface is shown if let Some(ident) = window_init.monitor.clone() { let display = gdk::Display::default().expect("could not get default display"); if let Some(monitor) = crate::app::get_monitor_from_display(&display, &ident) { - gtk_layer_shell::set_monitor(&window, &monitor); + window.set_monitor(&monitor); } else { return None; @@ -53,16 +60,20 @@ // Sets the layer where the layer shell surface will spawn match window_init.stacking { - WindowStacking::Foreground => gtk_layer_shell::set_layer(&window, gtk_layer_shell::Layer::Top), - WindowStacking::Background => gtk_layer_shell::set_layer(&window, gtk_layer_shell::Layer::Background), - WindowStacking::Bottom => gtk_layer_shell::set_layer(&window, gtk_layer_shell::Layer::Bottom), - WindowStacking::Overlay => gtk_layer_shell::set_layer(&window, gtk_layer_shell::Layer::Overlay), + WindowStacking::Foreground => window.set_layer(gtk_layer_shell::Layer::Top), + WindowStacking::Background => window.set_layer(gtk_layer_shell::Layer::Background), + WindowStacking::Bottom => window.set_layer(gtk_layer_shell::Layer::Bottom), + WindowStacking::Overlay => window.set_layer(gtk_layer_shell::Layer::Overlay), } if let Some(namespace) = &window_init.backend_options.wayland.namespace { - gtk_layer_shell::set_namespace(&window, namespace); + window.set_namespace(namespace); } // Sets the keyboard interactivity - gtk_layer_shell::set_keyboard_interactivity(&window, window_init.backend_options.wayland.focusable); + match window_init.backend_options.wayland.focusable { + WlWindowFocusable::None => window.set_keyboard_mode(KeyboardMode::None), + WlWindowFocusable::Exclusive => window.set_keyboard_mode(KeyboardMode::Exclusive), + WlWindowFocusable::OnDemand => window.set_keyboard_mode(KeyboardMode::OnDemand), + } if let Some(geometry) = window_init.geometry { @@ -84,8 +95,8 @@ } - gtk_layer_shell::set_anchor(&window, gtk_layer_shell::Edge::Left, left); - gtk_layer_shell::set_anchor(&window, gtk_layer_shell::Edge::Right, right); - gtk_layer_shell::set_anchor(&window, gtk_layer_shell::Edge::Top, top); - gtk_layer_shell::set_anchor(&window, gtk_layer_shell::Edge::Bottom, bottom); + window.set_anchor(gtk_layer_shell::Edge::Left, left); + window.set_anchor(gtk_layer_shell::Edge::Right, right); + window.set_anchor(gtk_layer_shell::Edge::Top, top); + window.set_anchor(gtk_layer_shell::Edge::Bottom, bottom); let xoffset = geometry.offset.x.pixels_relative_to(monitor.width()); @@ -93,16 +104,23 @@ if left { - gtk_layer_shell::set_margin(&window, gtk_layer_shell::Edge::Left, xoffset); + window.set_layer_shell_margin(gtk_layer_shell::Edge::Left, xoffset); } else { - gtk_layer_shell::set_margin(&window, gtk_layer_shell::Edge::Right, xoffset); + window.set_layer_shell_margin(gtk_layer_shell::Edge::Right, xoffset); } if bottom { - gtk_layer_shell::set_margin(&window, gtk_layer_shell::Edge::Bottom, yoffset); + window.set_layer_shell_margin(gtk_layer_shell::Edge::Bottom, yoffset); } else { - gtk_layer_shell::set_margin(&window, gtk_layer_shell::Edge::Top, yoffset); + window.set_layer_shell_margin(gtk_layer_shell::Edge::Top, yoffset); + } + // https://github.com/elkowar/eww/issues/296 + if window_init.backend_options.wayland.exclusive + && geometry.anchor_point.x != AnchorAlignment::CENTER + && geometry.anchor_point.y != AnchorAlignment::CENTER + { + log::warn!("When ':exclusive true' the anchor has to include 'center', otherwise exlcusive won't work") } } if window_init.backend_options.wayland.exclusive { - gtk_layer_shell::auto_exclusive_zone_enable(&window); + window.auto_exclusive_zone_enable(); } Some(window) @@ -116,4 +134,5 @@ use anyhow::{Context, Result}; use gdk::Monitor; + use gtk::gdk; use gtk::{self, prelude::*}; use x11rb::protocol::xproto::ConnectionExt; @@ -135,4 +154,5 @@ impl DisplayBackend for X11Backend { const IS_X11: bool = true; + const IS_WAYLAND: bool = false; fn initialize_window(window_init: &WindowInitiator, _monitor: gdk::Rectangle, x: i32, y: i32) -> Option { diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/error_handling_ctx.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/error_handling_ctx.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/error_handling_ctx.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/error_handling_ctx.rs 2026-07-08 10:16:01.418245300 +0000 @@ -32,7 +32,4 @@ pub fn format_error(err: &anyhow::Error) -> String { - for err in err.chain() { - format!("chain: {}", err); - } anyhow_err_to_diagnostic(err).and_then(|diag| stringify_diagnostic(diag).ok()).unwrap_or_else(|| format!("{:?}", err)) } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/geometry.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/geometry.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/geometry.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/geometry.rs 2026-07-08 10:16:01.418245300 +0000 @@ -1,6 +1,6 @@ -use derive_more::*; +use derive_more::{Debug, *}; #[derive(Debug, Copy, Clone, Eq, PartialEq, Display)] -#[display(fmt = ".x*.y:.width*.height")] +#[display(".x*.y:.width*.height")] pub struct Rect { pub x: i32, diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/main.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/main.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/main.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/main.rs 2026-07-08 10:16:01.418245300 +0000 @@ -54,11 +54,14 @@ } + let detected_wayland = detect_wayland(); #[allow(unused)] - let use_wayland = opts.force_wayland || detect_wayland(); + let use_wayland = opts.force_wayland || detected_wayland; #[cfg(all(feature = "wayland", feature = "x11"))] let result = if use_wayland { - run(opts, eww_binary_name, display_backend::WaylandBackend) + log::debug!("Running on wayland. force_wayland={}, detected_wayland={}", opts.force_wayland, detected_wayland); + run::(opts, eww_binary_name) } else { - run(opts, eww_binary_name, display_backend::X11Backend) + log::debug!("Running on X11. force_wayland={}, detected_wayland={}", opts.force_wayland, detected_wayland); + run::(opts, eww_binary_name) }; @@ -66,14 +69,14 @@ let result = { if use_wayland { - log::warn!("Eww compiled without wayland support. falling back to X11, eventhough wayland was requested."); + log::warn!("Eww compiled without wayland support. Falling back to X11, eventhough wayland was requested."); } - run(opts, eww_binary_name, display_backend::X11Backend) + run::(opts, eww_binary_name) }; #[cfg(all(feature = "wayland", not(feature = "x11")))] - let result = run(opts, eww_binary_name, display_backend::WaylandBackend); + let result = run::(opts, eww_binary_name); #[cfg(not(any(feature = "wayland", feature = "x11")))] - let result = run(opts, eww_binary_name, display_backend::NoBackend); + let result = run::(opts, eww_binary_name); if let Err(err) = result { @@ -89,5 +92,5 @@ } -fn run(opts: opts::Opt, eww_binary_name: String, display_backend: B) -> Result<()> { +fn run(opts: opts::Opt, eww_binary_name: String) -> Result<()> { let paths = opts .config_path @@ -129,5 +132,5 @@ println!("Run `{} logs` to see any errors while editing your configuration.", eww_binary_name); } - let fork_result = server::initialize_server(paths.clone(), None, display_backend, !opts.no_daemonize)?; + let fork_result = server::initialize_server::(paths.clone(), None, !opts.no_daemonize)?; opts.no_daemonize || fork_result == ForkResult::Parent } @@ -161,5 +164,5 @@ let (command, response_recv) = action.into_daemon_command(); // start the daemon and give it the command - let fork_result = server::initialize_server(paths.clone(), Some(command), display_backend, true)?; + let fork_result = server::initialize_server::(paths.clone(), Some(command), true)?; let is_parent = fork_result == ForkResult::Parent; if let (Some(recv), true) = (response_recv, is_parent) { diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/opts.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/opts.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/opts.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/opts.rs 2026-07-08 10:16:01.419245500 +0000 @@ -99,4 +99,14 @@ }, + /// Update a polling variable using its script. + /// + /// This will force the variable to be updated even if its + /// automatic polling is disabled. + #[command(name = "poll")] + Poll { + /// Variables to be polled + names: Vec, + }, + /// Open the GTK debugger #[command(name = "inspector", alias = "debugger")] @@ -255,4 +265,5 @@ let command = match self { ActionWithServer::Update { mappings } => app::DaemonCommand::UpdateVars(mappings), + ActionWithServer::Poll { names } => app::DaemonCommand::PollVars(names), ActionWithServer::OpenInspector => app::DaemonCommand::OpenInspector, @@ -282,5 +293,5 @@ } ActionWithServer::CloseWindows { windows } => { - return with_response_channel(|sender| app::DaemonCommand::CloseWindows { windows, sender }); + return with_response_channel(|sender| app::DaemonCommand::CloseWindows { windows, auto_reopen: false, sender }); } ActionWithServer::Reload => return with_response_channel(app::DaemonCommand::ReloadConfigAndCss), diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/script_var_handler.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/script_var_handler.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/script_var_handler.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/script_var_handler.rs 2026-07-08 10:16:01.419245500 +0000 @@ -197,5 +197,5 @@ } -fn run_poll_once(var: &PollScriptVar) -> Result { +pub fn run_poll_once(var: &PollScriptVar) -> Result { match &var.command { VarSource::Shell(span, command) => { diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/server.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/server.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/server.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/server.rs 2026-07-08 10:16:01.419245500 +0000 @@ -1,4 +1,4 @@ use crate::{ - app::{self, DaemonCommand}, + app::{self, App, DaemonCommand}, config, daemon_response, display_backend::DisplayBackend, @@ -13,4 +13,5 @@ collections::{HashMap, HashSet}, io::Write, + marker::PhantomData, os::unix::io::AsRawFd, path::Path, @@ -23,5 +24,4 @@ paths: EwwPaths, action: Option, - display_backend: B, should_daemonize: bool, ) -> Result { @@ -58,5 +58,5 @@ ┃Initializing eww daemon┃ ┗━━━━━━━━━━━━━━━━━━━━━━━┛ - "# +"# ); @@ -69,4 +69,7 @@ }); + if B::IS_WAYLAND { + std::env::set_var("GDK_BACKEND", "wayland") + } gtk::init()?; @@ -76,6 +79,5 @@ let (scope_graph_evt_send, mut scope_graph_evt_recv) = tokio::sync::mpsc::unbounded_channel(); - let mut app = app::App { - display_backend, + let mut app: App = app::App { scope_graph: Rc::new(RefCell::new(ScopeGraph::from_global_vars( eww_config.generate_initial_state()?, @@ -91,7 +93,8 @@ window_close_timer_abort_senders: HashMap::new(), paths, + phantom: PhantomData, }; - if let Some(screen) = gdk::Screen::default() { + if let Some(screen) = gtk::gdk::Screen::default() { gtk::StyleContext::add_provider_for_screen(&screen, &app.css_provider, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION); } @@ -103,11 +106,13 @@ } + connect_monitor_added(ui_send.clone()); + // initialize all the handlers and tasks running asyncronously let tokio_handle = init_async_part(app.paths.clone(), ui_send); - glib::MainContext::default().spawn_local(async move { + gtk::glib::MainContext::default().spawn_local(async move { // if an action was given to the daemon initially, execute it first. if let Some(action) = action { - app.handle_command(action); + app.handle_command(action).await; } @@ -118,5 +123,5 @@ }, Some(ui_event) = ui_recv.recv() => { - app.handle_command(ui_event); + app.handle_command(ui_event).await; } else => break, @@ -134,4 +139,27 @@ } +fn connect_monitor_added(ui_send: UnboundedSender) { + let display = gtk::gdk::Display::default().expect("could not get default display"); + display.connect_monitor_added({ + move |_display: >k::gdk::Display, _monitor: >k::gdk::Monitor| { + log::info!("New monitor connected, reloading configuration"); + let _ = reload_config_and_css(&ui_send); + } + }); +} + +fn reload_config_and_css(ui_send: &UnboundedSender) -> Result<()> { + let (daemon_resp_sender, mut daemon_resp_response) = daemon_response::create_pair(); + ui_send.send(DaemonCommand::ReloadConfigAndCss(daemon_resp_sender))?; + tokio::spawn(async move { + match daemon_resp_response.recv().await { + Some(daemon_response::DaemonResponse::Success(_)) => log::info!("Reloaded config successfully"), + Some(daemon_response::DaemonResponse::Failure(e)) => eprintln!("{}", e), + None => log::error!("No response to reload configuration-reload request"), + } + }); + Ok(()) +} + fn init_async_part(paths: EwwPaths, ui_send: UnboundedSender) -> tokio::runtime::Handle { let rt = tokio::runtime::Builder::new_multi_thread() @@ -214,5 +242,4 @@ }); - let (daemon_resp_sender, mut daemon_resp_response) = daemon_response::create_pair(); // without this sleep, reading the config file sometimes gives an empty file. // This is probably a result of editors not locking the file correctly, @@ -220,12 +247,5 @@ // There should be some cleaner solution for this, but this will do for now. tokio::time::sleep(std::time::Duration::from_millis(50)).await; - evt_send.send(app::DaemonCommand::ReloadConfigAndCss(daemon_resp_sender))?; - tokio::spawn(async move { - match daemon_resp_response.recv().await { - Some(daemon_response::DaemonResponse::Success(_)) => log::info!("Reloaded config successfully"), - Some(daemon_response::DaemonResponse::Failure(e)) => eprintln!("{}", e), - None => log::error!("No response to reload configuration-reload request"), - } - }); + reload_config_and_css(&evt_send)?; } }, diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/build_widget.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/build_widget.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/build_widget.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/build_widget.rs 2026-07-08 10:16:01.420245400 +0000 @@ -2,6 +2,6 @@ use codespan_reporting::diagnostic::Severity; use eww_shared_util::{AttrName, Spanned}; -use gdk::prelude::Cast; use gtk::{ + gdk::prelude::Cast, prelude::{BoxExt, ContainerExt, WidgetExt}, Orientation, @@ -307,11 +307,12 @@ .get(nth_value as usize) .with_context(|| format!("No child at index {}", nth_value))?; - let new_child_widget = build_gtk_widget( - tree, - widget_defs.clone(), - custom_widget_invocation.scope, - nth_child_widget_use.clone(), - None, + let scope = tree.register_new_scope( + format!("child {nth_value}"), + Some(custom_widget_invocation.scope), + calling_scope, + HashMap::new(), )?; + let new_child_widget = + build_gtk_widget(tree, widget_defs.clone(), scope, nth_child_widget_use.clone(), None)?; child_container.children().iter().for_each(|f| child_container.remove(f)); child_container.set_child(Some(&new_child_widget)); @@ -324,5 +325,11 @@ } else { for child in &custom_widget_invocation.children { - let child_widget = build_gtk_widget(tree, widget_defs.clone(), custom_widget_invocation.scope, child.clone(), None)?; + let scope = tree.register_new_scope( + String::from("child"), + Some(custom_widget_invocation.scope), + calling_scope, + HashMap::new(), + )?; + let child_widget = build_gtk_widget(tree, widget_defs.clone(), scope, child.clone(), None)?; gtk_container.add(&child_widget); } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/circular_progressbar.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/circular_progressbar.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/circular_progressbar.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/circular_progressbar.rs 2026-07-08 10:16:01.420245400 +0000 @@ -1,6 +1,5 @@ use anyhow::{anyhow, Result}; -use glib::{object_subclass, prelude::*, wrapper}; -use glib_macros::Properties; -use gtk::{prelude::*, subclass::prelude::*}; +use gtk::glib::{self, object_subclass, prelude::*, wrapper, Properties}; +use gtk::{cairo, gdk, prelude::*, subclass::prelude::*}; use std::cell::RefCell; @@ -155,5 +154,5 @@ } - fn draw(&self, cr: &cairo::Context) -> Inhibit { + fn draw(&self, cr: &cairo::Context) -> glib::Propagation { let res: Result<()> = (|| { let value = *self.value.borrow(); @@ -227,5 +226,5 @@ }; - gtk::Inhibit(false) + glib::Propagation::Proceed } } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/graph.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/graph.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/graph.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/graph.rs 2026-07-08 10:16:01.421245300 +0000 @@ -3,7 +3,6 @@ // https://github.com/gtk-rs/examples/blob/master/src/bin/listbox_model.rs use anyhow::{anyhow, Result}; -use glib::{object_subclass, wrapper}; -use glib_macros::Properties; -use gtk::{prelude::*, subclass::prelude::*}; +use gtk::glib::{self, object_subclass, wrapper, Properties}; +use gtk::{cairo, gdk, prelude::*, subclass::prelude::*}; use crate::error_handling_ctx; @@ -40,4 +39,11 @@ time_range: RefCell, + #[property(get, set, nick = "Flip X", blurb = "Flip the x axis", default = true)] + flip_x: RefCell, + #[property(get, set, nick = "Flip Y", blurb = "Flip the y axis", default = true)] + flip_y: RefCell, + #[property(get, set, nick = "Vertical", blurb = "Exchange the x and y axes", default = false)] + vertical: RefCell, + history: RefCell>, extra_point: RefCell>, @@ -55,4 +61,7 @@ dynamic: RefCell::new(true), time_range: RefCell::new(10), + flip_x: RefCell::new(true), + flip_y: RefCell::new(true), + vertical: RefCell::new(false), history: RefCell::new(VecDeque::new()), extra_point: RefCell::new(None), @@ -79,4 +88,14 @@ history.push_back(v); } + /** + * Receives normalized (0-1) coordinates `x` and `y` and convert them to the + * point on the widget. + */ + fn value_to_point(&self, width: f64, height: f64, x: f64, y: f64) -> (f64, f64) { + let x = if *self.flip_x.borrow() { 1.0 - x } else { x }; + let y = if *self.flip_y.borrow() { 1.0 - y } else { y }; + let (x, y) = if *self.vertical.borrow() { (y, x) } else { (x, y) }; + (width * x, height * y) + } } @@ -112,4 +131,13 @@ self.line_style.replace(value.get().unwrap()); } + "flip-x" => { + self.flip_x.replace(value.get().unwrap()); + } + "flip-y" => { + self.flip_y.replace(value.get().unwrap()); + } + "vertical" => { + self.vertical.replace(value.get().unwrap()); + } x => panic!("Tried to set inexistant property of Graph: {}", x,), } @@ -171,5 +199,5 @@ } - fn draw(&self, cr: &cairo::Context) -> Inhibit { + fn draw(&self, cr: &cairo::Context) -> glib::Propagation { let res: Result<()> = (|| { let history = &*self.history.borrow(); @@ -216,7 +244,5 @@ .map(|(instant, value)| { let t = last_updated_at.duration_since(*instant).as_millis() as f64; - let x = width * (1.0 - (t / time_range)); - let y = height * (1.0 - ((value - min) / value_range)); - (x, y) + self.value_to_point(width, height, t / time_range, (value - min) / value_range) }) .collect::>(); @@ -225,7 +251,6 @@ if let Some((instant, value)) = extra_point { let t = last_updated_at.duration_since(instant).as_millis() as f64; - let x = -width * ((t - time_range) / time_range); - let y = height * (1.0 - ((value - min) / value_range)); - points.push_front((x, y)); + let (x, y) = self.value_to_point(width, height, (t - time_range) / time_range, (value - min) / value_range); + points.push_front(if *self.vertical.borrow() { (x, -y) } else { (-x, y) }); } points @@ -277,5 +302,5 @@ }; - gtk::Inhibit(false) + glib::Propagation::Proceed } } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/systray.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/systray.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/systray.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/systray.rs 2026-07-08 10:16:01.421245300 +0000 @@ -1,6 +1,10 @@ use crate::widgets::window::Window; use futures::StreamExt; -use gtk::{cairo::Surface, gdk::ffi::gdk_cairo_surface_create_from_pixbuf, prelude::*}; -use notifier_host; +use gtk::{ + cairo::Surface, + gdk::{self, ffi::gdk_cairo_surface_create_from_pixbuf, NotifyType}, + glib, + prelude::*, +}; use std::{cell::RefCell, future::Future, rc::Rc}; @@ -106,4 +110,5 @@ if let Some(item) = self.items.get(id) { self.container.remove(&item.widget); + self.items.remove(id); } else { log::warn!("Tried to remove nonexistent item {:?} from systray", id); @@ -131,9 +136,25 @@ impl Item { fn new(id: String, item: notifier_host::Item, icon_size: tokio::sync::watch::Receiver) -> Self { - let widget = gtk::EventBox::new(); - let out_widget = widget.clone(); // copy so we can return it + let gtk_widget = gtk::EventBox::new(); + + // Support :hover selector + gtk_widget.connect_enter_notify_event(|gtk_widget, evt| { + if evt.detail() != NotifyType::Inferior { + gtk_widget.clone().set_state_flags(gtk::StateFlags::PRELIGHT, false); + } + glib::Propagation::Proceed + }); + + gtk_widget.connect_leave_notify_event(|gtk_widget, evt| { + if evt.detail() != NotifyType::Inferior { + gtk_widget.clone().unset_state_flags(gtk::StateFlags::PRELIGHT); + } + glib::Propagation::Proceed + }); + + let out_widget = gtk_widget.clone(); // copy so we can return it let task = glib::MainContext::default().spawn_local(async move { - if let Err(e) = Item::maintain(widget.clone(), item, icon_size).await { + if let Err(e) = Item::maintain(gtk_widget.clone(), item, icon_size).await { log::error!("error for systray item {}: {}", id, e); } @@ -214,5 +235,5 @@ log::error!("failed to handle mouse click {}: {}", evt.button(), result); } - gtk::Inhibit(true) + glib::Propagation::Stop })); diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/transform.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/transform.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/transform.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/transform.rs 2026-07-08 10:16:01.421245300 +0000 @@ -1,5 +1,4 @@ use anyhow::{anyhow, Result}; -use glib::{object_subclass, wrapper}; -use glib_macros::Properties; +use gtk::glib::{self, object_subclass, wrapper, Properties}; use gtk::{prelude::*, subclass::prelude::*}; use std::{cell::RefCell, str::FromStr}; @@ -19,4 +18,10 @@ rotate: RefCell, + #[property(get, set, nick = "Transform-Origin X", blurb = "X coordinate (%/px) for the Transform-Origin", default = None)] + transform_origin_x: RefCell>, + + #[property(get, set, nick = "Transform-Origin Y", blurb = "Y coordinate (%/px) for the Transform-Origin", default = None)] + transform_origin_y: RefCell>, + #[property(get, set, nick = "Translate x", blurb = "The X Translation", default = None)] translate_x: RefCell>, @@ -39,4 +44,6 @@ TransformPriv { rotate: RefCell::new(0.0), + transform_origin_x: RefCell::new(None), + transform_origin_y: RefCell::new(None), translate_x: RefCell::new(None), translate_y: RefCell::new(None), @@ -59,4 +66,12 @@ self.obj().queue_draw(); // Queue a draw call with the updated value } + "transform-origin-x" => { + self.transform_origin_x.replace(value.get().unwrap()); + self.obj().queue_draw(); // Queue a draw call with the updated value + } + "transform-origin-y" => { + self.transform_origin_y.replace(value.get().unwrap()); + self.obj().queue_draw(); // Queue a draw call with the updated value + } "translate-x" => { self.translate_x.replace(value.get().unwrap()); @@ -122,5 +137,5 @@ impl BinImpl for TransformPriv {} impl WidgetImpl for TransformPriv { - fn draw(&self, cr: &cairo::Context) -> Inhibit { + fn draw(&self, cr: >k::cairo::Context) -> glib::Propagation { let res: Result<()> = (|| { let rotate = *self.rotate.borrow(); @@ -130,4 +145,13 @@ cr.save()?; + let transform_origin_x = match &*self.transform_origin_x.borrow() { + Some(rcx) => NumWithUnit::from_str(rcx)?.pixels_relative_to(total_width as i32) as f64, + None => 0.0, + }; + let transform_origin_y = match &*self.transform_origin_y.borrow() { + Some(rcy) => NumWithUnit::from_str(rcy)?.pixels_relative_to(total_height as i32) as f64, + None => 0.0, + }; + let translate_x = match &*self.translate_x.borrow() { Some(tx) => NumWithUnit::from_str(tx)?.pixels_relative_to(total_width as i32) as f64, @@ -150,7 +174,8 @@ }; - cr.scale(scale_x, scale_y); + cr.translate(transform_origin_x, transform_origin_y); cr.rotate(perc_to_rad(rotate)); - cr.translate(translate_x, translate_y); + cr.translate(translate_x - transform_origin_x, translate_y - transform_origin_y); + cr.scale(scale_x, scale_y); // Children widget @@ -167,5 +192,5 @@ }; - gtk::Inhibit(false) + glib::Propagation::Proceed } } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/widget_definitions.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/widget_definitions.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/widget_definitions.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/widget_definitions.rs 2026-07-08 10:16:01.423245400 +0000 @@ -9,8 +9,9 @@ use codespan_reporting::diagnostic::Severity; use eww_shared_util::Spanned; -use gdk::{ModifierType, NotifyType}; +use gdk::{ModifierType, NotifyType}; use glib::translate::FromGlib; use gtk::{self, glib, prelude::*, DestDefaults, TargetEntry, TargetList}; +use gtk::{gdk, pango}; use itertools::Itertools; use once_cell::sync::Lazy; @@ -38,7 +39,7 @@ macro_rules! connect_signal_handler { ($widget:ident, if $cond:expr, $connect_expr:expr) => {{ + const KEY:&str = std::concat!("signal-handler:", std::line!()); unsafe { - let key = ::std::concat!("signal-handler:", ::std::line!()); - let old = $widget.data::(key); + let old = $widget.data::(KEY); if let Some(old) = old { @@ -47,5 +48,5 @@ } - $widget.set_data::(key, $connect_expr); + $widget.set_data::(KEY, $connect_expr); } }}; @@ -209,8 +210,8 @@ if visible { gtk_widget.show(); } else { gtk_widget.hide(); } }, - // @prop style - inline css style applied to the widget + // @prop style - inline scss style applied to the widget prop(style: as_string) { gtk_widget.reset_style(); - css_provider.load_from_data(format!("* {{ {} }}", style).as_bytes())?; + css_provider.load_from_data(grass::from_string(format!("* {{ {} }}", style), &grass::Options::default())?.as_bytes())?; gtk_widget.style_context().add_provider(&css_provider, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION) }, @@ -233,9 +234,9 @@ gtk_widget.connect_button_press_event(glib::clone!(@strong is_being_dragged => move |_, _| { *is_being_dragged.borrow_mut() = true; - gtk::Inhibit(false) + glib::Propagation::Proceed })); gtk_widget.connect_button_release_event(glib::clone!(@strong is_being_dragged => move |_, _| { *is_being_dragged.borrow_mut() = false; - gtk::Inhibit(false) + glib::Propagation::Proceed })); @@ -312,13 +313,48 @@ const WIDGET_NAME_EXPANDER: &str = "expander"; /// @widget expander -/// @desc A widget that can expand and collapse, showing/hiding it's children. +/// @desc A widget that can expand and collapse, showing/hiding it's children. Should contain +/// exactly one child. fn build_gtk_expander(bargs: &mut BuilderArgs) -> Result { let gtk_widget = gtk::Expander::new(None); + + match bargs.widget_use.children.len().cmp(&1) { + Ordering::Less => { + return Err(DiagError(gen_diagnostic!("expander must contain exactly one element", bargs.widget_use.span)).into()); + } + Ordering::Greater => { + let (_, additional_children) = bargs.widget_use.children.split_at(1); + // we know that there is more than one child, so unwrapping on first and last here is fine. + let first_span = additional_children.first().unwrap().span(); + let last_span = additional_children.last().unwrap().span(); + return Err(DiagError(gen_diagnostic!( + "expander must contain exactly one element, but got more", + first_span.to(last_span) + )) + .into()); + } + Ordering::Equal => { + let mut children = bargs.widget_use.children.iter().map(|child| { + build_gtk_widget( + bargs.scope_graph, + bargs.widget_defs.clone(), + bargs.calling_scope, + child.clone(), + bargs.custom_widget_invocation.clone(), + ) + }); + // we have exactly one child, we can unwrap + let child = children.next().unwrap()?; + gtk_widget.add(&child); + child.show(); + } + } + def_widget!(bargs, _g, gtk_widget, { // @prop name - name of the expander - prop(name: as_string) {gtk_widget.set_label(Some(&name));}, + prop(name: as_string) { gtk_widget.set_label(Some(&name)); }, // @prop expanded - sets if the tree is expanded prop(expanded: as_bool) { gtk_widget.set_expanded(expanded); } }); + Ok(gtk_widget) } @@ -424,4 +460,7 @@ prop(draw_value: as_bool = false) { gtk_widget.set_draw_value(draw_value) }, + // @prop value-pos - position of the drawn value. possible values: $position + prop(value_pos: as_string) { gtk_widget.set_value_pos(parse_position_type(&value_pos)?) }, + // @prop round-digits - Sets the number of decimals to round the value to when it changes prop(round_digits: as_i32 = 0) { gtk_widget.set_round_digits(round_digits) } @@ -460,5 +499,4 @@ gtk_widget.set_text(&value); }, - // @prop onchange - Command to run when the text changes. The placeholder `{}` will be replaced by the value // @prop timeout - timeout of the command. Default: "200ms" @@ -485,5 +523,5 @@ const WIDGET_NAME_BUTTON: &str = "button"; /// @widget button -/// @desc A button +/// @desc A button containing any widget as it's child. Events are triggered on release. fn build_gtk_button(bargs: &mut BuilderArgs) -> Result { let gtk_widget = gtk::Button::new(); @@ -493,13 +531,20 @@ // @prop timeout - timeout of the command. Default: "200ms" timeout: as_duration = Duration::from_millis(200), - // @prop onclick - a command that get's run when the button is clicked + // @prop onclick - command to run when the button is activated either by leftclicking or keyboard onclick: as_string = "", - // @prop onmiddleclick - a command that get's run when the button is middleclicked + // @prop onmiddleclick - command to run when the button is middleclicked onmiddleclick: as_string = "", - // @prop onrightclick - a command that get's run when the button is rightclicked + // @prop onrightclick - command to run when the button is rightclicked onrightclick: as_string = "" ) { - gtk_widget.add_events(gdk::EventMask::BUTTON_PRESS_MASK); - connect_signal_handler!(gtk_widget, gtk_widget.connect_button_press_event(move |_, evt| { + // animate button upon right-/middleclick (if gtk theme supports it) + // since we do this, we can't use `connect_clicked` as that would always run `onclick` as well + connect_signal_handler!(gtk_widget, gtk_widget.connect_button_press_event(move |button, _| { + button.emit_activate(); + glib::Propagation::Proceed + })); + let onclick_ = onclick.clone(); + // mouse click events + connect_signal_handler!(gtk_widget, gtk_widget.connect_button_release_event(move |_, evt| { match evt.button() { 1 => run_command(timeout, &onclick, &[] as &[&str]), @@ -508,8 +553,18 @@ _ => {}, } - gtk::Inhibit(false) + glib::Propagation::Proceed + })); + // keyboard events + connect_signal_handler!(gtk_widget, gtk_widget.connect_key_release_event(move |_, evt| { + match evt.scancode() { + // return + 36 => run_command(timeout, &onclick_, &[] as &[&str]), + // space + 65 => run_command(timeout, &onclick_, &[] as &[&str]), + _ => {}, + } + glib::Propagation::Proceed })); } - }); Ok(gtk_widget) @@ -537,10 +592,33 @@ // @prop image-width - width of the image // @prop image-height - height of the image - prop(path: as_string, image_width: as_i32 = -1, image_height: as_i32 = -1) { + // @prop preserve-aspect-ratio - whether to keep the aspect ratio when resizing an image. Default: true, false doesn't work for all image types + // @prop fill-svg - sets the color of svg images + prop(path: as_string, image_width: as_i32 = -1, image_height: as_i32 = -1, preserve_aspect_ratio: as_bool = true, fill_svg: as_string = "") { + if !path.ends_with(".svg") && !fill_svg.is_empty() { + log::warn!("Fill attribute ignored, file is not an svg image"); + } + if path.ends_with(".gif") { let pixbuf_animation = gtk::gdk_pixbuf::PixbufAnimation::from_file(std::path::PathBuf::from(path))?; gtk_widget.set_from_animation(&pixbuf_animation); } else { - let pixbuf = gtk::gdk_pixbuf::Pixbuf::from_file_at_size(std::path::PathBuf::from(path), image_width, image_height)?; + let pixbuf; + // populate the pixel buffer + if path.ends_with(".svg") && !fill_svg.is_empty() { + let svg_data = std::fs::read_to_string(std::path::PathBuf::from(path.clone()))?; + // The fastest way to add/change fill color + let svg_data = if svg_data.contains("fill=") { + let reg = regex::Regex::new(r#"fill="[^"]*""#)?; + reg.replace(&svg_data, &format!("fill=\"{}\"", fill_svg)) + } else { + let reg = regex::Regex::new(r")?; + stream.close(None::<>k::gio::Cancellable>)?; + } else { + pixbuf = gtk::gdk_pixbuf::Pixbuf::from_file_at_scale(std::path::PathBuf::from(path), image_width, image_height, preserve_aspect_ratio)?; + } gtk_widget.set_from_pixbuf(Some(&pixbuf)); } @@ -728,25 +806,25 @@ gtk_widget.connect_enter_notify_event(|gtk_widget, evt| { if evt.detail() != NotifyType::Inferior { - gtk_widget.clone().set_state_flags(gtk::StateFlags::PRELIGHT, false); + gtk_widget.set_state_flags(gtk::StateFlags::PRELIGHT, false); } - gtk::Inhibit(false) + glib::Propagation::Proceed }); gtk_widget.connect_leave_notify_event(|gtk_widget, evt| { if evt.detail() != NotifyType::Inferior { - gtk_widget.clone().unset_state_flags(gtk::StateFlags::PRELIGHT); + gtk_widget.unset_state_flags(gtk::StateFlags::PRELIGHT); } - gtk::Inhibit(false) + glib::Propagation::Proceed }); // Support :active selector gtk_widget.connect_button_press_event(|gtk_widget, _| { - gtk_widget.clone().set_state_flags(gtk::StateFlags::ACTIVE, false); - gtk::Inhibit(false) + gtk_widget.set_state_flags(gtk::StateFlags::ACTIVE, false); + glib::Propagation::Proceed }); gtk_widget.connect_button_release_event(|gtk_widget, _| { - gtk_widget.clone().unset_state_flags(gtk::StateFlags::ACTIVE); - gtk::Inhibit(false) + gtk_widget.unset_state_flags(gtk::StateFlags::ACTIVE); + glib::Propagation::Proceed }); @@ -762,5 +840,5 @@ run_command(timeout, &onscroll, &[if delta < 0f64 { "up" } else { "down" }]); } - gtk::Inhibit(false) + glib::Propagation::Proceed })); }, @@ -773,5 +851,5 @@ run_command(timeout, &onhover, &[evt.position().0, evt.position().1]); } - gtk::Inhibit(false) + glib::Propagation::Proceed })); }, @@ -784,5 +862,5 @@ run_command(timeout, &onhoverlost, &[evt.position().0, evt.position().1]); } - gtk::Inhibit(false) + glib::Propagation::Proceed })); }, @@ -800,5 +878,5 @@ } } - gtk::Inhibit(false) + glib::Propagation::Proceed })); connect_signal_handler!(gtk_widget, gtk_widget.connect_leave_notify_event(move |widget, _evt| { @@ -809,5 +887,5 @@ } } - gtk::Inhibit(false) + glib::Propagation::Proceed })); }, @@ -858,19 +936,16 @@ })); }, - - // TODO the fact that we have the same code here as for button is ugly, as we want to keep consistency - prop( // @prop timeout - timeout of the command. Default: "200ms" timeout: as_duration = Duration::from_millis(200), - // @prop onclick - a command that get's run when the button is clicked + // @prop onclick - command to run when the widget is clicked onclick: as_string = "", - // @prop onmiddleclick - a command that get's run when the button is middleclicked + // @prop onmiddleclick - command to run when the widget is middleclicked onmiddleclick: as_string = "", - // @prop onrightclick - a command that get's run when the button is rightclicked + // @prop onrightclick - command to run when the widget is rightclicked onrightclick: as_string = "" ) { gtk_widget.add_events(gdk::EventMask::BUTTON_PRESS_MASK); - connect_signal_handler!(gtk_widget, gtk_widget.connect_button_press_event(move |_, evt| { + connect_signal_handler!(gtk_widget, gtk_widget.connect_button_release_event(move |_, evt| { match evt.button() { 1 => run_command(timeout, &onclick, &[] as &[&str]), @@ -879,9 +954,8 @@ _ => {}, } - gtk::Inhibit(false) + glib::Propagation::Proceed })); } }); - Ok(gtk_widget) } @@ -895,9 +969,10 @@ def_widget!(bargs, _g, gtk_widget, { // @prop text - the text to display + // @prop truncate - whether to truncate text (or pango markup). If `show-truncated` is `false`, or if `limit-width` has a value, this property has no effect and truncation is enabled. // @prop limit-width - maximum count of characters to display // @prop truncate-left - whether to truncate on the left side // @prop show-truncated - show whether the text was truncated. Disabling it will also disable dynamic truncation (the labels won't be truncated more than `limit-width`, even if there is not enough space for them), and will completly disable truncation on pango markup. // @prop unindent - whether to remove leading spaces - prop(text: as_string, limit_width: as_i32 = i32::MAX, truncate_left: as_bool = false, show_truncated: as_bool = true, unindent: as_bool = true) { + prop(text: as_string, truncate: as_bool = false, limit_width: as_i32 = i32::MAX, truncate_left: as_bool = false, show_truncated: as_bool = true, unindent: as_bool = true) { let text = if show_truncated { // gtk does weird thing if we set max_width_chars to i32::MAX @@ -907,8 +982,12 @@ gtk_widget.set_max_width_chars(limit_width); } - if truncate_left { - gtk_widget.set_ellipsize(pango::EllipsizeMode::Start); + if truncate || limit_width != i32::MAX { + if truncate_left { + gtk_widget.set_ellipsize(pango::EllipsizeMode::Start); + } else { + gtk_widget.set_ellipsize(pango::EllipsizeMode::End); + } } else { - gtk_widget.set_ellipsize(pango::EllipsizeMode::End); + gtk_widget.set_ellipsize(pango::EllipsizeMode::None); } @@ -919,5 +998,5 @@ let limit_width = limit_width as usize; let char_count = text.chars().count(); - if char_count > limit_width && !show_truncated { + if char_count > limit_width { if truncate_left { text.chars().skip(char_count - limit_width).collect() @@ -935,9 +1014,10 @@ }, // @prop markup - Pango markup to display + // @prop truncate - whether to truncate text (or pango markup). If `show-truncated` is `false`, or if `limit-width` has a value, this property has no effect and truncation is enabled. // @prop limit-width - maximum count of characters to display // @prop truncate-left - whether to truncate on the left side - // @prop show-truncated - show whether the text was truncatedd. Disabling it will also disable dynamic truncation (the labels won't be truncated more than `limit-width`, even if there is not enough space for them), and will completly disable truncation on pango markup. - prop(markup: as_string, limit_width: as_i32 = i32::MAX, truncate_left: as_bool = false, show_truncated: as_bool = true) { - if show_truncated { + // @prop show-truncated - show whether the text was truncated. Disabling it will also disable dynamic truncation (the labels won't be truncated more than `limit-width`, even if there is not enough space for them), and will completly disable truncation on pango markup. + prop(markup: as_string, truncate: as_bool = false, limit_width: as_i32 = i32::MAX, truncate_left: as_bool = false, show_truncated: as_bool = true) { + if (truncate || limit_width != i32::MAX) && show_truncated { // gtk does weird thing if we set max_width_chars to i32::MAX if limit_width == i32::MAX { @@ -974,4 +1054,12 @@ gtk_widget.set_justify(parse_justification(&justify)?); }, + // @prop wrap-mode - how text is wrapped. possible options: $wrap_mode + prop(wrap_mode: as_string = "word") { + gtk_widget.set_wrap_mode(parse_wrap_mode(&wrap_mode)?); + }, + // @prop lines - maximum number of lines to display (only works when `limit-width` has a value). A value of -1 (default) disables the limit. + prop(lines: as_i32 = -1) { + gtk_widget.set_lines(lines); + } }); Ok(gtk_widget) @@ -1083,4 +1171,25 @@ fn build_gtk_stack(bargs: &mut BuilderArgs) -> Result { let gtk_widget = gtk::Stack::new(); + + if bargs.widget_use.children.is_empty() { + return Err(DiagError(gen_diagnostic!("stack must contain at least one element", bargs.widget_use.span)).into()); + } + + let children = bargs.widget_use.children.iter().map(|child| { + build_gtk_widget( + bargs.scope_graph, + bargs.widget_defs.clone(), + bargs.calling_scope, + child.clone(), + bargs.custom_widget_invocation.clone(), + ) + }); + + for (i, child) in children.enumerate() { + let child = child?; + gtk_widget.add_named(&child, &i.to_string()); + child.show(); + } + def_widget!(bargs, _g, gtk_widget, { // @prop selected - index of child which should be shown @@ -1092,32 +1201,10 @@ }); - match bargs.widget_use.children.len().cmp(&1) { - Ordering::Less => { - Err(DiagError(gen_diagnostic!("stack must contain at least one element", bargs.widget_use.span)).into()) - } - Ordering::Greater | Ordering::Equal => { - let children = bargs.widget_use.children.iter().map(|child| { - build_gtk_widget( - bargs.scope_graph, - bargs.widget_defs.clone(), - bargs.calling_scope, - child.clone(), - bargs.custom_widget_invocation.clone(), - ) - }); - for (i, child) in children.enumerate() { - let child = child?; - gtk_widget.add_named(&child, &i.to_string()); - child.show(); - } - Ok(gtk_widget) - } - } + Ok(gtk_widget) } const WIDGET_NAME_TRANSFORM: &str = "transform"; /// @widget transform -/// @desc A widget that applies transformations to its content. They are applied in the following -/// order: rotate->translate->scale) +/// @desc A widget that applies transformations to its content. They are applied in the following order: rotate -> translate -> scale fn build_transform(bargs: &mut BuilderArgs) -> Result { let w = Transform::new(); @@ -1125,4 +1212,8 @@ // @prop rotate - the percentage to rotate prop(rotate: as_f64) { w.set_property("rotate", rotate); }, + // @prop transform-origin-x - x coordinate of origin of transformation (px or %) + prop(transform_origin_x: as_string) { w.set_property("transform-origin-x", transform_origin_x) }, + // @prop transform-origin-y - y coordinate of origin of transformation (px or %) + prop(transform_origin_y: as_string) { w.set_property("transform-origin-y", transform_origin_y) }, // @prop translate-x - the amount to translate in the x direction (px or %) prop(translate_x: as_string) { w.set_property("translate-x", translate_x); }, @@ -1162,5 +1253,12 @@ def_widget!(bargs, _g, w, { // @prop value - the value, between 0 - 100 - prop(value: as_f64) { w.set_property("value", value); }, + prop(value: as_f64) { + if value.is_nan() || value.is_infinite() { + return Err(DiagError(gen_diagnostic!( + format!("Graph's value should never be NaN or infinite") + )).into()); + } + w.set_property("value", value); + }, // @prop thickness - the thickness of the line prop(thickness: as_f64) { w.set_property("thickness", thickness); }, @@ -1183,4 +1281,10 @@ // "bevel" prop(line_style: as_string) { w.set_property("line-style", line_style); }, + // @prop flip-x - whether the x axis should go from high to low + prop(flip_x: as_bool) { w.set_property("flip-x", flip_x); }, + // @prop flip-y - whether the y axis should go from high to low + prop(flip_y: as_bool) { w.set_property("flip-y", flip_y); }, + // @prop vertical - if set to true, the x and y axes will be exchanged + prop(vertical: as_bool) { w.set_property("vertical", vertical); }, }); Ok(w) @@ -1288,4 +1392,14 @@ } +/// @var position - "left", "right", "top", "bottom" +fn parse_position_type(g: &str) -> Result { + enum_parse! { "position", g, + "left" => gtk::PositionType::Left, + "right" => gtk::PositionType::Right, + "top" => gtk::PositionType::Top, + "bottom" => gtk::PositionType::Bottom, + } +} + /// @var gravity - "south", "east", "west", "north", "auto" fn parse_gravity(g: &str) -> Result { @@ -1298,4 +1412,13 @@ } } + +/// @var wrap_mode - "word", "char", "wordchar" +fn parse_wrap_mode(w: &str) -> Result { + enum_parse! { "wrap-mode", w, + "word" => gtk::pango::WrapMode::Word, + "char" => gtk::pango::WrapMode::Char, + "wordchar" => gtk::pango::WrapMode::WordChar + } +} /// Connect a function to the first map event of a widget. After that first map, the handler will get disconnected. diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/window.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/window.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/widgets/window.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/widgets/window.rs 2026-07-08 10:16:01.423245400 +0000 @@ -1,4 +1,3 @@ -use glib::{object_subclass, wrapper}; -use glib_macros::Properties; +use gtk::glib::{self, object_subclass, wrapper, Properties}; use gtk::{prelude::*, subclass::prelude::*}; use std::cell::RefCell; diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/window_arguments.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/window_arguments.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/window_arguments.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/window_arguments.rs 2026-07-08 10:16:01.423245400 +0000 @@ -60,8 +60,8 @@ // Ensure that the arguments passed to the window that are already interpreted by eww (id, screen) // are set to the correct values - if expected_args.contains(&"id".to_string()) { + if expected_args.contains(&String::from("id")) { local_variables.insert(VarName::from("id"), DynVal::from(self.instance_id.clone())); } - if self.monitor.is_some() && expected_args.contains(&"screen".to_string()) { + if self.monitor.is_some() && expected_args.contains(&String::from("screen")) { let mon_dyn = DynVal::from(&self.monitor.clone().unwrap()); local_variables.insert(VarName::from("screen"), mon_dyn); diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/window_initiator.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/window_initiator.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww/src/window_initiator.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww/src/window_initiator.rs 2026-07-08 10:17:59.508547000 +0000 @@ -18,9 +18,9 @@ pub backend_options: BackendWindowOptions, pub geometry: Option, - pub id: String, pub local_variables: HashMap, pub monitor: Option, pub name: String, pub resizable: bool, + pub unfocus_close: bool, pub stacking: WindowStacking, } @@ -38,9 +38,9 @@ backend_options: window_def.backend_options.eval(&vars)?, geometry, - id: args.instance_id.clone(), monitor, name: window_def.name.clone(), resizable: window_def.eval_resizable(&vars)?, stacking: window_def.eval_stacking(&vars)?, + unfocus_close: window_def.eval_close_on_focus_lost(&vars)?, local_variables: vars, }) diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww_shared_util/Cargo.toml /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww_shared_util/Cargo.toml --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww_shared_util/Cargo.toml 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww_shared_util/Cargo.toml 2026-07-08 10:16:01.423245400 +0000 @@ -13,2 +13,3 @@ derive_more.workspace = true ref-cast.workspace = true +chrono = { workspace = true, features = ["unstable-locales"] } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww_shared_util/src/lib.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww_shared_util/src/lib.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww_shared_util/src/lib.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww_shared_util/src/lib.rs 2026-07-08 10:16:01.423245400 +0000 @@ -1,5 +1,7 @@ +pub mod locale; pub mod span; pub mod wrappers; +pub use locale::*; pub use span::*; pub use wrappers::*; Only in /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww_shared_util/src: locale.rs diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww_shared_util/src/wrappers.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww_shared_util/src/wrappers.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/eww_shared_util/src/wrappers.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/eww_shared_util/src/wrappers.rs 2026-07-08 10:16:01.423245400 +0000 @@ -1,3 +1,3 @@ -use derive_more::*; +use derive_more::{Debug, *}; use ref_cast::RefCast; use serde::{Deserialize, Serialize}; @@ -5,6 +5,6 @@ /// The name of a variable #[repr(transparent)] -#[derive(Clone, Hash, PartialEq, Eq, Serialize, Deserialize, AsRef, From, FromStr, Display, DebugCustom, RefCast)] -#[debug(fmt = "VarName({})", .0)] +#[derive(Clone, Hash, PartialEq, Eq, Serialize, Deserialize, AsRef, From, FromStr, Display, Debug, RefCast)] +#[debug("VarName({})", _0)] pub struct VarName(pub String); @@ -35,6 +35,6 @@ /// The name of an attribute #[repr(transparent)] -#[derive(Clone, Hash, PartialEq, Eq, Serialize, Deserialize, AsRef, From, FromStr, Display, DebugCustom, RefCast)] -#[debug(fmt="AttrName({})", .0)] +#[derive(Clone, Hash, PartialEq, Eq, Serialize, Deserialize, AsRef, From, FromStr, Display, Debug, RefCast)] +#[debug("AttrName({})", _0)] pub struct AttrName(pub String); diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/notifier_host/Cargo.toml /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/notifier_host/Cargo.toml --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/notifier_host/Cargo.toml 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/notifier_host/Cargo.toml 2026-07-08 10:16:01.423245400 +0000 @@ -10,10 +10,11 @@ [dependencies] -gtk = "0.17.1" -gdk = "0.17.1" -zbus = { version = "3.7.0", default-features = false, features = ["tokio"] } dbusmenu-gtk3 = "0.1.0" +quick-xml = { version = "0.37.1", features = ["serialize"] } +serde = "1.0.215" +gtk.workspace = true log.workspace = true thiserror.workspace = true tokio = { workspace = true, features = ["full"] } +zbus = { workspace = true, default-features = false, features = ["tokio"] } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/notifier_host/src/icon.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/notifier_host/src/icon.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/notifier_host/src/icon.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/notifier_host/src/icon.rs 2026-07-08 10:16:01.424245400 +0000 @@ -106,5 +106,5 @@ let theme = if let Some(path) = theme_path { let theme = gtk::IconTheme::new(); - theme.prepend_search_path(&path); + theme.prepend_search_path(path); theme } else { diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/notifier_host/src/item.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/notifier_host/src/item.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/notifier_host/src/item.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/notifier_host/src/item.rs 2026-07-08 10:16:01.424245400 +0000 @@ -2,4 +2,6 @@ use gtk::{self, prelude::*}; +use serde::Deserialize; +use zbus::fdo::IntrospectableProxy; /// Recognised values of [`org.freedesktop.StatusNotifierItem.Status`]. @@ -62,5 +64,10 @@ (addr.to_owned(), format!("/{}", path)) } else if service.starts_with(':') { - (service[0..6].to_owned(), names::ITEM_OBJECT.to_owned()) + ( + service.to_owned(), + resolve_pathless_address(con, service, "/".to_owned()) + .await? + .ok_or_else(|| zbus::Error::Failure(format!("no StatusNotifierItem found for {service}")))?, + ) } else { return Err(zbus::Error::Address(service.to_owned())); @@ -89,7 +96,7 @@ } - pub async fn popup_menu(&self, event: &gdk::EventButton, x: i32, y: i32) -> zbus::Result<()> { + pub async fn popup_menu(&self, event: >k::gdk::EventButton, x: i32, y: i32) -> zbus::Result<()> { if let Some(menu) = &self.gtk_menu { - menu.popup_at_pointer(event.downcast_ref::()); + menu.popup_at_pointer(event.downcast_ref::()); Ok(()) } else { @@ -106,2 +113,58 @@ } } + +#[derive(Deserialize)] +struct DBusNode { + #[serde(default)] + interface: Vec, + + #[serde(default)] + node: Vec, + + #[serde(rename = "@name")] + name: Option, +} + +#[derive(Deserialize)] +struct DBusInterface { + #[serde(rename = "@name")] + name: String, +} + +async fn resolve_pathless_address(con: &zbus::Connection, service: &str, path: String) -> zbus::Result> { + let introspection_xml = + IntrospectableProxy::builder(con).destination(service)?.path(path.as_str())?.build().await?.introspect().await?; + + let dbus_node = + quick_xml::de::from_str::(&introspection_xml).map_err(|err| zbus::Error::Failure(err.to_string()))?; + + if dbus_node.interface.iter().any(|interface| interface.name == "org.kde.StatusNotifierItem") { + // This item implements the desired interface, so bubble it back up + Ok(Some(path)) + } else { + for node in dbus_node.node { + if let Some(name) = node.name { + if name == "StatusNotifierItem" { + // If this exists, then there's a good chance DBus may not think anything + // implements the desired interface, so just bubble this up instead. + return Ok(Some(join_to_path(&path, name))); + } + + let path = Box::pin(resolve_pathless_address(con, service, join_to_path(&path, name))).await?; + + if path.is_some() { + // Return the first item found from a child + return Ok(path); + } + } + } + + // No children had the item we want... + Ok(None) + } +} + +fn join_to_path(path: &str, name: String) -> String { + // Make sure we don't double-up on the leading slash + format!("{path}/{name}", path = if path == "/" { "" } else { path }) +} diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/notifier_host/src/proxy/mod.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/notifier_host/src/proxy/mod.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/notifier_host/src/proxy/mod.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/notifier_host/src/proxy/mod.rs 2026-07-08 10:16:01.424245400 +0000 @@ -3,7 +3,13 @@ //! The interface XML files were taken from //! [Waybar](https://github.com/Alexays/Waybar/tree/master/protocol), and the proxies were -//! generated with [zbus-xmlgen](https://docs.rs/crate/zbus_xmlgen/latest) by running `zbus-xmlgen -//! dbus_status_notifier_item.xml` and `zbus-xmlgen dbus_status_notifier_watcher.xml`. At the -//! moment, `dbus_menu.xml` isn't used. +//! generated with [zbus-xmlgen](https://docs.rs/crate/zbus_xmlgen/latest) by running +//! `zbus-xmlgen file crates/notifier_host/src/proxy/dbus_status_notifier_item.xml` and +//! `zbus-xmlgen file crates/notifier_host/src/proxy/dbus_status_notifier_watcher.xml`. +//! +//! Note that the `dbus_status_notifier_watcher.rs` file has been slightly adjusted, the +//! default arguments to the [proxy](https://docs.rs/zbus/4.4.0/zbus/attr.proxy.html) +//! macro need some adjusting. +//! +//! At the moment, `dbus_menu.xml` isn't used. //! //! For more information, see ["Writing a client proxy" in the zbus diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/simplexpr/Cargo.toml /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/simplexpr/Cargo.toml --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/simplexpr/Cargo.toml 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/simplexpr/Cargo.toml 2026-07-08 10:16:01.425245300 +0000 @@ -15,11 +15,12 @@ eww_shared_util.workspace = true +bytesize.workspace = true cached.workspace = true chrono-tz.workspace = true -chrono.workspace = true +chrono = { workspace = true, features = ["unstable-locales"] } itertools.workspace = true jaq-core.workspace = true jaq-parse.workspace = true -jaq-std = {workspace = true, features = ["bincode"]} +jaq-std.workspace = true jaq-interpret.workspace = true jaq-syn.workspace = true @@ -28,5 +29,5 @@ regex.workspace = true serde_json.workspace = true -serde = {workspace = true, features = ["derive"]} +serde = { workspace = true, features = ["derive"] } static_assertions.workspace = true strsim.workspace = true diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/simplexpr/src/eval.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/simplexpr/src/eval.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/simplexpr/src/eval.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/simplexpr/src/eval.rs 2026-07-08 10:16:01.426245500 +0000 @@ -1,2 +1,3 @@ +use bytesize::ByteSize; use cached::proc_macro::cached; use chrono::{Local, LocalResult, TimeZone}; @@ -8,5 +9,5 @@ dynval::{ConversionError, DynVal}, }; -use eww_shared_util::{Span, Spanned, VarName}; +use eww_shared_util::{get_locale, Span, Spanned, VarName}; use std::{ collections::HashMap, @@ -62,4 +63,7 @@ ChronoError(String), + #[error("Error parsing byte format mode: {0}")] + ByteFormatModeError(String), + #[error("{1}")] Spanned(Span, Box), @@ -269,4 +273,8 @@ let is_safe = *safe == AccessType::Safe; + // Needs to be done first as `as_json_value` fails on empty string + if is_safe && val.as_string()?.is_empty() { + return Ok(DynVal::from(&serde_json::Value::Null).at(*span)); + } match val.as_json_value()? { serde_json::Value::Array(val) => { @@ -282,7 +290,4 @@ Ok(DynVal::from(indexed_value).at(*span)) } - serde_json::Value::String(val) if val.is_empty() && is_safe => { - Ok(DynVal::from(&serde_json::Value::Null).at(*span)) - } serde_json::Value::Null if is_safe => Ok(DynVal::from(&serde_json::Value::Null).at(*span)), _ => Err(EvalError::CannotIndex(format!("{}", val)).at(*span)), @@ -329,4 +334,50 @@ _ => Err(EvalError::WrongArgCount(name.to_string())), }, + "floor" => match args.as_slice() { + [num] => { + let num = num.as_f64()?; + Ok(DynVal::from(num.floor())) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, + "ceil" => match args.as_slice() { + [num] => { + let num = num.as_f64()?; + Ok(DynVal::from(num.ceil())) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, + "min" => match args.as_slice() { + [a, b] => { + let a = a.as_f64()?; + let b = b.as_f64()?; + Ok(DynVal::from(f64::min(a, b))) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, + "max" => match args.as_slice() { + [a, b] => { + let a = a.as_f64()?; + let b = b.as_f64()?; + Ok(DynVal::from(f64::max(a, b))) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, + "powi" => match args.as_slice() { + [num, n] => { + let num = num.as_f64()?; + let n = n.as_i32()?; + Ok(DynVal::from(f64::powi(num, n))) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, + "powf" => match args.as_slice() { + [num, n] => { + let num = num.as_f64()?; + let n = n.as_f64()?; + Ok(DynVal::from(f64::powf(num, n))) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, "sin" => match args.as_slice() { [num] => { @@ -440,5 +491,7 @@ }, "jq" => match args.as_slice() { - [json, code] => run_jaq_function(json.as_json_value()?, code.as_string()?) + [json, code] => run_jaq_function(json.as_json_value()?, code.as_string()?, "") + .map_err(|e| EvalError::Spanned(code.span(), Box::new(e))), + [json, code, args] => run_jaq_function(json.as_json_value()?, code.as_string()?, &args.as_string()?) .map_err(|e| EvalError::Spanned(code.span(), Box::new(e))), _ => Err(EvalError::WrongArgCount(name.to_string())), @@ -452,14 +505,66 @@ Ok(DynVal::from(match timezone.timestamp_opt(timestamp.as_i64()?, 0) { - LocalResult::Single(t) | LocalResult::Ambiguous(t, _) => t.format(&format.as_string()?).to_string(), + LocalResult::Single(t) | LocalResult::Ambiguous(t, _) => { + let format = format.as_string()?; + let delayed_format = t.format_localized(&format, get_locale()); + let mut buffer = String::new(); + if delayed_format.write_to(&mut buffer).is_err() { + return Err(EvalError::ChronoError("Invalid time formatting string: ".to_string() + &format)); + } + buffer + } LocalResult::None => return Err(EvalError::ChronoError("Invalid UNIX timestamp".to_string())), })) } [timestamp, format] => Ok(DynVal::from(match Local.timestamp_opt(timestamp.as_i64()?, 0) { - LocalResult::Single(t) | LocalResult::Ambiguous(t, _) => t.format(&format.as_string()?).to_string(), + LocalResult::Single(t) | LocalResult::Ambiguous(t, _) => { + let format = format.as_string()?; + let delayed_format = t.format_localized(&format, get_locale()); + let mut buffer = String::new(); + if delayed_format.write_to(&mut buffer).is_err() { + return Err(EvalError::ChronoError("Invalid time formatting string: ".to_string() + &format)); + } + buffer + } LocalResult::None => return Err(EvalError::ChronoError("Invalid UNIX timestamp".to_string())), })), _ => Err(EvalError::WrongArgCount(name.to_string())), }, + "log" => match args.as_slice() { + [num, n] => { + let num = num.as_f64()?; + let n = n.as_f64()?; + Ok(DynVal::from(f64::log(num, n))) + } + _ => Err(EvalError::WrongArgCount(name.to_string())), + }, + "formatbytes" => { + let (bytes, short, mode) = match args.as_slice() { + [bytes] => (bytes.as_i64()?, false, "iec".to_owned()), + [bytes, short] => (bytes.as_i64()?, short.as_bool()?, "iec".to_owned()), + [bytes, short, mode] => (bytes.as_i64()?, short.as_bool()?, mode.as_string()?), + _ => return Err(EvalError::WrongArgCount(name.to_string())), + }; + let neg = bytes < 0; + let disp = ByteSize(bytes.abs() as u64).display(); + let disp = match mode.as_str() { + "iec" => { + if short { + disp.iec_short() + } else { + disp.iec() + } + } + "si" => { + if short { + disp.si_short() + } else { + disp.si() + } + } + _ => return Err(EvalError::ByteFormatModeError(mode)), + }; + Ok(DynVal::from(if neg { format!("-{disp}") } else { disp.to_string() })) + } _ => Err(EvalError::UnknownFunction(name.to_string())), @@ -486,14 +591,18 @@ } -fn run_jaq_function(json: serde_json::Value, code: String) -> Result { - let filter: Arc = prepare_jaq_filter(code)?; - let inputs = jaq_interpret::RcIter::new(std::iter::empty()); - let out = filter - .run((jaq_interpret::Ctx::new([], &inputs), jaq_interpret::Val::from(json))) - .map(|x| x.map(Into::::into)) - .map(|x| x.map(|x| DynVal::from_string(serde_json::to_string(&x).unwrap()))) +fn run_jaq_function(json: serde_json::Value, code: String, args: &str) -> Result { + use jaq_interpret::{Ctx, RcIter, Val}; + prepare_jaq_filter(code)? + .run((Ctx::new([], &RcIter::new(std::iter::empty())), Val::from(json))) + .map(|r| r.map(Into::::into)) + .map(|x| { + x.map(|val| match (args, val) { + ("r", serde_json::Value::String(s)) => DynVal::from_string(s), + // invalid arguments are silently ignored + (_, v) => DynVal::from_string(serde_json::to_string(&v).unwrap()), + }) + }) .collect::>() - .map_err(|e| EvalError::JaqError(e.to_string()))?; - Ok(out) + .map_err(|e| EvalError::JaqError(e.to_string())) } @@ -545,4 +654,6 @@ safe_access_to_existing(r#"{ "a": { "b": 2 } }.a?.b"#) => Ok(DynVal::from(2)), safe_access_to_missing(r#"{ "a": { "b": 2 } }.b?.b"#) => Ok(DynVal::from(&serde_json::Value::Null)), + safe_access_to_empty(r#"""?.test"#) => Ok(DynVal::from(&serde_json::Value::Null)), + safe_access_to_empty_json_string(r#"'""'?.test"#) => Err(super::EvalError::CannotIndex("\"\"".to_string())), safe_access_index_to_existing(r#"[1, 2]?.[1]"#) => Ok(DynVal::from(2)), safe_access_index_to_missing(r#""null"?.[1]"#) => Ok(DynVal::from(&serde_json::Value::Null)), @@ -554,4 +665,8 @@ lazy_evaluation_elvis(r#""test"?: "null".test"#) => Ok(DynVal::from("test")), jq_basic_index(r#"jq("[7,8,9]", ".[0]")"#) => Ok(DynVal::from(7)), + jq_raw_arg(r#"jq("[ \"foo\" ]", ".[0]", "r")"#) => Ok(DynVal::from("foo")), + jq_empty_arg(r#"jq("[ \"foo\" ]", ".[0]", "")"#) => Ok(DynVal::from(r#""foo""#)), + jq_invalid_arg(r#"jq("[ \"foo\" ]", ".[0]", "hello")"#) => Ok(DynVal::from(r#""foo""#)), + jq_no_arg(r#"jq("[ \"foo\" ]", ".[0]")"#) => Ok(DynVal::from(r#""foo""#)), } } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/yuck/src/config/backend_window_options.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/yuck/src/config/backend_window_options.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/yuck/src/config/backend_window_options.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/yuck/src/config/backend_window_options.rs 2026-07-08 10:16:01.432245300 +0000 @@ -8,4 +8,5 @@ }; +use super::{attributes::Attributes, window_definition::EnumParseError}; use crate::{ enum_parse, @@ -15,6 +16,5 @@ }; use eww_shared_util::{Span, VarName}; - -use super::{attributes::Attributes, window_definition::EnumParseError}; +use simplexpr::dynval::ConversionError; use crate::error::{DiagError, DiagResultExt}; @@ -28,4 +28,6 @@ #[error(transparent)] EvalError(#[from] EvalError), + #[error(transparent)] + ConversionError(#[from] ConversionError), } @@ -46,4 +48,5 @@ let struts = attrs.ast_optional("reserve")?; let window_type = attrs.ast_optional("windowtype")?; + let focusable = attrs.ast_optional("focusable")?; let x11 = X11BackendWindowOptionsDef { sticky: attrs.ast_optional("sticky")?, @@ -54,5 +57,5 @@ let wayland = WlBackendWindowOptionsDef { exclusive: attrs.ast_optional("exclusive")?, - focusable: attrs.ast_optional("focusable")?, + focusable, namespace: attrs.ast_optional("namespace")?, }; @@ -110,5 +113,5 @@ pub struct WlBackendWindowOptions { pub exclusive: bool, - pub focusable: bool, + pub focusable: WlWindowFocusable, pub namespace: Option, } @@ -123,8 +126,11 @@ impl WlBackendWindowOptionsDef { - fn eval(&self, local_variables: &HashMap) -> Result { + fn eval(&self, local_variables: &HashMap) -> Result { Ok(WlBackendWindowOptions { exclusive: eval_opt_expr_as_bool(&self.exclusive, false, local_variables)?, - focusable: eval_opt_expr_as_bool(&self.focusable, false, local_variables)?, + focusable: match &self.focusable { + Some(expr) => WlWindowFocusable::from_dynval(&expr.eval(local_variables)?)?, + None => WlWindowFocusable::default(), + }, namespace: match &self.namespace { Some(expr) => Some(expr.eval(local_variables)?.as_string()?), @@ -146,4 +152,26 @@ } +#[derive(Debug, Clone, PartialEq, Eq, smart_default::SmartDefault, serde::Serialize)] +pub enum WlWindowFocusable { + #[default] + None, + Exclusive, + OnDemand, +} +impl FromStr for WlWindowFocusable { + type Err = EnumParseError; + + fn from_str(s: &str) -> Result { + enum_parse! { "focusable", s, + "none" => Self::None, + "exclusive" => Self::Exclusive, + "ondemand" => Self::OnDemand, + // legacy support + "true" => Self::Exclusive, + "false" => Self::None, + } + } +} + /// Window type of an x11 window #[derive(Debug, Clone, PartialEq, Eq, smart_default::SmartDefault, serde::Serialize)] @@ -183,5 +211,5 @@ } -impl std::str::FromStr for Side { +impl FromStr for Side { type Err = EnumParseError; diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/yuck/src/config/window_definition.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/yuck/src/config/window_definition.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/yuck/src/config/window_definition.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/yuck/src/config/window_definition.rs 2026-07-08 10:17:59.508547000 +0000 @@ -40,4 +40,5 @@ pub widget: WidgetUse, pub resizable: Option, + pub unfocus_close: Option, pub backend_options: BackendWindowOptionsDef, } @@ -73,4 +74,11 @@ } } + + pub fn eval_close_on_focus_lost(&self, local_variables: &HashMap) -> Result { + Ok(match &self.unfocus_close { + Some(expr) => expr.eval(local_variables)?.as_bool()?, + None => false, + }) + } } @@ -87,8 +95,20 @@ let stacking = attrs.ast_optional("stacking")?; let geometry = attrs.ast_optional("geometry")?; + let unfocus_close = attrs.ast_optional("unfocus-close")?; let backend_options = BackendWindowOptionsDef::from_attrs(&mut attrs)?; let widget = iter.expect_any().map_err(DiagError::from).and_then(WidgetUse::from_ast)?; iter.expect_done()?; - Ok(Self { name, expected_args, args_span, monitor, resizable, widget, stacking, geometry, backend_options }) + Ok(Self { + name, + expected_args, + args_span, + monitor, + resizable, + widget, + stacking, + geometry, + unfocus_close, + backend_options, + }) } } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/yuck/src/parser/ast_iterator.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/yuck/src/parser/ast_iterator.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/yuck/src/parser/ast_iterator.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/yuck/src/parser/ast_iterator.rs 2026-07-08 10:16:01.434245300 +0000 @@ -91,5 +91,5 @@ } - pub fn put_back(&mut self, ast: Ast) { + pub fn put_back(&mut self, ast: Ast) -> Option { self.remaining_span.0 = ast.span().0; self.iter.put_back(ast) @@ -101,7 +101,6 @@ fn next(&mut self) -> Option { - self.iter.next().map(|x| { + self.iter.next().inspect(|x| { self.remaining_span.0 = x.span().1; - x }) } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/yuck/src/value/coords.rs /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/yuck/src/value/coords.rs --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/crates/yuck/src/value/coords.rs 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/crates/yuck/src/value/coords.rs 2026-07-08 10:16:01.439245200 +0000 @@ -1,3 +1,3 @@ -use derive_more::*; +use derive_more::{Debug, *}; use once_cell::sync::Lazy; use serde::{Deserialize, Serialize}; @@ -15,11 +15,11 @@ } -#[derive(Clone, Copy, PartialEq, Deserialize, Serialize, Display, DebugCustom, SmartDefault)] +#[derive(Clone, Copy, PartialEq, Deserialize, Serialize, Display, Debug, SmartDefault)] pub enum NumWithUnit { - #[display(fmt = "{}%", .0)] - #[debug(fmt = "{}%", .0)] + #[display("{}%", _0)] + #[debug("{}%", _0)] Percent(f32), - #[display(fmt = "{}px", .0)] - #[debug(fmt = "{}px", .0)] + #[display("{}px", _0)] + #[debug("{}px", _0)] #[default] Pixels(i32), @@ -59,5 +59,5 @@ #[derive(Clone, Copy, PartialEq, Deserialize, Serialize, Display, Default)] -#[display(fmt = "{}*{}", x, y)] +#[display("{}*{}", x, y)] pub struct Coords { pub x: NumWithUnit, diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/default.nix /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/default.nix --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/default.nix 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/default.nix 2026-07-08 10:16:01.439245200 +0000 @@ -1,6 +1,11 @@ -(import (let lock = builtins.fromJSON (builtins.readFile ./flake.lock); -in fetchTarball { - url = - "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; - sha256 = lock.nodes.flake-compat.locked.narHash; -}) { src = ./.; }).defaultNix +(import ( + let + lock = builtins.fromJSON (builtins.readFile ./flake.lock); + in + fetchTarball { + url = + lock.nodes.flake-compat.locked.url + or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } +) { src = ./.; }).defaultNix diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/docs/src/configuration.md /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/docs/src/configuration.md --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/docs/src/configuration.md 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/docs/src/configuration.md 2026-07-08 10:17:59.509547000 +0000 @@ -53,4 +53,5 @@ | `monitor` | Which monitor this window should be displayed on. See below for details.| | `geometry` | Geometry of the window. | +| `unfocus-close` | Automaticly close this window when losing keyboard focus. | @@ -62,5 +63,5 @@ - an integer, declaring the monitor index - the name of the monitor -- a string containing a JSON-array of monitor matchers, such as: `'["" "HDMI-A-1" "PHL 345B1C" 0]'`. Eww will try to find a match in order, allowing you to specify fallbacks. +- a string containing a JSON-array of monitor matchers, such as: `'["", "HDMI-A-1", "PHL 345B1C", 0]'`. Eww will try to find a match in order, allowing you to specify fallbacks. @@ -87,10 +88,10 @@ #### Wayland -| Property | Description | -| ----------: | ------------------------------------------------------------ | -| `stacking` | Where the window should appear in the stack. Possible values: `fg`, `bg`, `overlay`, `bottom`. | -| `exclusive` | Whether the compositor should reserve space for the window automatically. Either `true` or `false`. | -| `focusable` | Whether the window should be able to be focused. This is necessary for any widgets that use the keyboard to work. Either `true` or `false`. | -| `namespace` | Set the wayland layersurface namespace eww uses. Accepts a `string` value. | +| Property | Description | +| ----------: |------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `stacking` | Where the window should appear in the stack. Possible values: `fg`, `bg`, `overlay`, `bottom`. | +| `exclusive` | Whether the compositor should reserve space for the window automatically. Either `true` or `false`. If `true` `:anchor` has to include `center`. | +| `focusable` | Whether the window should be able to be focused. This is necessary for any widgets that use the keyboard to work. Possible values: `none`, `exclusive` and `ondemand`. | +| `namespace` | Set the wayland layersurface namespace eww uses. Accepts a `string` value. | @@ -207,7 +208,10 @@ and thus are the perfect choice for showing your time, date, as well as other bits of information such as pending package updates, weather, and battery level. -You can also specify an initial-value. This should prevent eww from waiting for the result of a give command during startup, thus +You can also specify an initial-value. This should prevent eww from waiting for the result of a given command during startup, thus making the startup time faster. +To externally update a polling variable, `eww update` can be used like with basic variables to assign a value. +You can also call `eww poll` to poll the variable outside of its usual interval, or even while it isn't running at all. + **Listening variables (`deflisten`)** @@ -225,5 +229,5 @@ that can monitor some value on its own. Volume, brightness, workspaces that get added/removed at runtime, monitoring currently focused desktop/tag, etc. are the most common usecases of this type of variable. -These are particularly efficient and should be preffered if possible. +These are particularly efficient and should be preferred if possible. For example, the command `xprop -spy -root _NET_CURRENT_DESKTOP` writes the currently focused desktop whenever it changes. @@ -382,4 +386,6 @@ In many cases, this can be used instead of `literal`, and should most likely be preferred in those cases. +To see how to declare and use more advanced data structures, check out the [data structures example](/examples/data-structures/eww.yuck). + ## Splitting up your configuration diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/docs/src/examples.md /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/docs/src/examples.md --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/docs/src/examples.md 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/docs/src/examples.md 2026-07-08 10:16:01.440245400 +0000 @@ -5,2 +5,6 @@ An eww bar configuration: ![Example bar](https://github.com/elkowar/eww/raw/master/examples/eww-bar/eww-bar.png) + +A demo on how to declare and use data structures: + +![Data structure example](https://github.com/elkowar/eww/raw/master/examples/data-structures/data-structures-preview.png) diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/docs/src/expression_language.md /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/docs/src/expression_language.md --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/docs/src/expression_language.md 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/docs/src/expression_language.md 2026-07-08 10:16:01.440245400 +0000 @@ -25,12 +25,14 @@ - boolean operations (`||`, `&&`, `!`) - regex match operator (`=~`) + - Rust regex style, left hand is regex, right hand is string + - ex: workspace.name =~ '^special:.+$' - elvis operator (`?:`) - if the left side is `""` or a JSON `null`, then returns the right side, otherwise evaluates to the left side. - Safe Access operator (`?.`) or (`?.[index]`) - - if the left side is `""` or a JSON `null`, then return `null`. Otherwise, - attempt to index. + - if the left side is an empty string or a JSON `null`, then return `null`. Otherwise, + attempt to index. Note that indexing an empty JSON string (`'""'`) is an error. - This can still cause an error to occur if the left hand side exists but is - not an object. + not an object or an array. (`Number` or `String`). - conditionals (`condition ? 'value' : 'other value'`) @@ -40,16 +42,24 @@ - some function calls: - `round(number, decimal_digits)`: Round a number to the given amount of decimals + - `floor(number)`: Round a number down to the nearest integer + - `ceil(number)`: Round a number up to the nearest integer - `sin(number)`, `cos(number)`, `tan(number)`, `cot(number)`: Calculate the trigonometric value of a given number in **radians** + - `min(a, b)`, `max(a, b)`: Get the smaller or bigger number out of two given numbers + - `powi(num, n)`, `powf(num, n)`: Raise number `num` to power `n`. `powi` expects `n` to be of type `i32` + - `log(num, n)`: Calculate the base `n` logarithm of `num`. `num`, `n` and return type are `f64` - `degtorad(number)`: Converts a number from degrees to radians - `radtodeg(number)`: Converts a number from radians to degrees - `replace(string, regex, replacement)`: Replace matches of a given regex in a string - - `search(string, regex)`: Search for a given regex in a string (returns array) - - `matches(string, regex)`: check if a given string matches a given regex (returns bool) - - `captures(string, regex)`: Get the captures of a given regex in a string (returns array) - - `strlength(value)`: Gets the length of the string + - `search(string, regex)`: Search for a given regex in a string (returns array) + - `matches(string, regex)`: check if a given string matches a given regex (returns bool) + - `captures(string, regex)`: Get the captures of a given regex in a string (returns array) + - `strlength(value)`: Gets the length of the string - `substring(string, start, length)`: Return a substring of given length starting at the given index - - `arraylength(value)`: Gets the length of the array - - `objectlength(value)`: Gets the amount of entries in the object - - `jq(value, jq_filter_string)`: run a [jq](https://stedolan.github.io/jq/manual/) style command on a json value. (Uses [jaq](https://crates.io/crates/jaq) internally). + - `arraylength(value)`: Gets the length of the array + - `objectlength(value)`: Gets the amount of entries in the object + - `jq(value, jq_filter_string)`: run a [jq](https://jqlang.github.io/jq/manual/) style command on a json value. (Uses [jaq](https://crates.io/crates/jaq) internally). + - `jq(value, jq_filter_string, args)`: Emulate command line flags for jq, see [the docs](https://jqlang.github.io/jq/manual/#invoking-jq) on invoking jq for details. Invalid flags are silently ignored. + Currently supported flags: + - `"r"`: If the result is a string, it won't be formatted as a JSON string. The equivalent jq flag is `--raw-output`. - `get_env(string)`: Gets the specified enviroment variable - `formattime(unix_timestamp, format_str, timezone)`: Gets the time in a given format from UNIX timestamp. @@ -61,2 +71,7 @@ Check [chrono's documentation](https://docs.rs/chrono/latest/chrono/format/strftime/index.html) for more information about format string. + - `formatbytes(bytes, short, format_mode)`: Display bytes in a human-readable format. + Arguments: + - `bytes`: `i64` of bytes, supports negative sizes. + - `short`: set true for a compact version (default: false) + - `format_mode`: set to either to "iec" (eg. `1.0 GiB`) or "si" (eg. `1.2 GB`) (default: "iec") Only in /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/examples: data-structures diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/examples/eww-bar/eww.scss /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/examples/eww-bar/eww.scss --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/examples/eww-bar/eww.scss 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/examples/eww-bar/eww.scss 2026-07-08 10:16:01.442245200 +0000 @@ -1,7 +1,7 @@ * { - all: unset; //Unsets everything so you can style everything from scratch + all: unset; // Unsets everything so you can style everything from scratch } -//Global Styles +// Global Styles .bar { background-color: #3a3a3a; @@ -23,4 +23,5 @@ border-radius: 10px; } + .metric scale trough { all: unset; @@ -32,22 +33,9 @@ margin-right: 20px; } -.metric scale trough highlight { - all: unset; - background-color: #D35D6E; - color: #000000; - border-radius: 10px; -} -.metric scale trough { - all: unset; - background-color: #4e4e4e; - border-radius: 50px; - min-height: 3px; - min-width: 50px; - margin-left: 10px; - margin-right: 20px; -} + .label-ram { font-size: large; } + .workspaces button:hover { color: #D35D6E; diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/flake.lock /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/flake.lock --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/flake.lock 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/flake.lock 2026-07-08 10:16:01.442245200 +0000 @@ -2,44 +2,26 @@ "nodes": { "flake-compat": { - "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1709944340, + "narHash": "sha256-xr54XK0SjczlUxRo5YwodibUSlpivS9bqHt8BNyWVQA=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "baa7aa7bd0a570b3b9edd0b8da859fee3ffaa4d4", "type": "github" }, "original": { "owner": "edolstra", + "ref": "refs/pull/65/head", "repo": "flake-compat", "type": "github" } }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1705309234, - "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "nixpkgs": { "locked": { - "lastModified": 1708407374, - "narHash": "sha256-EECzarm+uqnNDCwaGg/ppXCO11qibZ1iigORShkkDf0=", + "lastModified": 1725534445, + "narHash": "sha256-Yd0FK9SkWy+ZPuNqUgmVPXokxDgMJoGuNpMEtkfcf84=", "owner": "nixos", "repo": "nixpkgs", - "rev": "f33dd27a47ebdf11dc8a5eb05e7c8fbdaf89e73f", + "rev": "9bb1e7571aadf31ddb4af77fc64b2d59580f9a39", "type": "github" }, @@ -60,5 +42,4 @@ "rust-overlay": { "inputs": { - "flake-utils": "flake-utils", "nixpkgs": [ "nixpkgs" @@ -66,9 +47,9 @@ }, "locked": { - "lastModified": 1708395022, - "narHash": "sha256-pxHZbfDsLAAcyWz+snbudxhQPlAnK2nWGAqRx11veac=", + "lastModified": 1725675754, + "narHash": "sha256-hXW3csqePOcF2e/PYnpXj72KEYyNj2HzTrVNmS/F7Ug=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "b4ae18c03af976549a0b6e396b2b5be56d275f8b", + "rev": "8cc45e678e914a16c8e224c3237fb07cf21e5e54", "type": "github" }, @@ -78,19 +59,4 @@ "type": "github" } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/flake.nix /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/flake.nix --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/flake.nix 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/flake.nix 2026-07-08 10:16:01.443245200 +0000 @@ -1,8 +1,5 @@ { inputs = { - flake-compat = { - url = "github:edolstra/flake-compat"; - flake = false; - }; + flake-compat.url = "github:edolstra/flake-compat/refs/pull/65/head"; nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; rust-overlay = { @@ -12,75 +9,88 @@ }; - outputs = { self, nixpkgs, rust-overlay, flake-compat }: + outputs = + { + self, + nixpkgs, + rust-overlay, + flake-compat, + }: let - pkgsFor = system: - import nixpkgs { - inherit system; - overlays = [ self.overlays.default rust-overlay.overlays.default ]; - }; - - targetSystems = [ "aarch64-linux" "x86_64-linux" ]; - mkRustToolchain = pkgs: - pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; - in { - overlays.default = final: prev: - let - rust = mkRustToolchain final; + overlays = [ + (import rust-overlay) + self.overlays.default + ]; + pkgsFor = system: import nixpkgs { inherit system overlays; }; + + targetSystems = [ + "aarch64-linux" + "x86_64-linux" + ]; + mkRustToolchain = pkgs: pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; + in + { + overlays.default = final: prev: { inherit (self.packages.${prev.system}) eww eww-wayland; }; - rustPlatform = prev.makeRustPlatform { + packages = nixpkgs.lib.genAttrs targetSystems ( + system: + let + pkgs = pkgsFor system; + rust = mkRustToolchain pkgs; + rustPlatform = pkgs.makeRustPlatform { cargo = rust; rustc = rust; }; - in { - eww = (prev.eww.override { inherit rustPlatform; }).overrideAttrs - (old: { - version = self.rev or "dirty"; - src = builtins.path { - name = "eww"; - path = prev.lib.cleanSource ./.; - }; - cargoDeps = - rustPlatform.importCargoLock { lockFile = ./Cargo.lock; }; - patches = [ ]; - # remove this when nixpkgs includes it - buildInputs = old.buildInputs ++ [ final.libdbusmenu-gtk3 ]; - }); - - eww-wayland = final.eww; - }; - - packages = nixpkgs.lib.genAttrs targetSystems (system: - let pkgs = pkgsFor system; - in (self.overlays.default pkgs pkgs) // { - default = self.packages.${system}.eww; - }); + version = (builtins.fromTOML (builtins.readFile ./crates/eww/Cargo.toml)).package.version; + in + rec { + eww = rustPlatform.buildRustPackage { + version = "${version}-dirty"; + pname = "eww"; + + src = ./.; + cargoLock.lockFile = ./Cargo.lock; + cargoBuildFlags = [ + "--bin" + "eww" + ]; - devShells = nixpkgs.lib.genAttrs targetSystems (system: + nativeBuildInputs = with pkgs; [ + pkg-config + wrapGAppsHook + ]; + buildInputs = with pkgs; [ + gtk3 + librsvg + gtk-layer-shell + libdbusmenu-gtk3 + ]; + }; + + eww-wayland = nixpkgs.lib.warn "`eww-wayland` is deprecated due to eww building with both X11 and wayland support by default. Use `eww` instead." eww; + default = eww; + } + ); + + devShells = nixpkgs.lib.genAttrs targetSystems ( + system: let pkgs = pkgsFor system; rust = mkRustToolchain pkgs; - in { + in + { default = pkgs.mkShell { + inputsFrom = [ self.packages.${system}.eww ]; packages = with pkgs; [ - rust - rust-analyzer-unwrapped - gcc - glib - gdk-pixbuf - librsvg - libdbusmenu-gtk3 - gtk3 - gtk-layer-shell - pkg-config deno mdbook + zbus-xmlgen ]; RUST_SRC_PATH = "${rust}/lib/rustlib/src/rust/library"; }; - }); + } + ); - formatter = - nixpkgs.lib.genAttrs targetSystems (system: (pkgsFor system).nixfmt); + formatter = nixpkgs.lib.genAttrs targetSystems (system: (pkgsFor system).nixfmt-rfc-style); }; } diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/rust-toolchain.toml /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/rust-toolchain.toml --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/rust-toolchain.toml 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/rust-toolchain.toml 2026-07-08 10:16:01.443245200 +0000 @@ -1,4 +1,4 @@ [toolchain] -channel = "1.76.0" +channel = "1.81.0" components = [ "rust-src" ] profile = "default" diff -U2 -r /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/shell.nix /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/shell.nix --- /var/lib/copr-rpmbuild/results/eww/upstream-unpacked/Source0/eww-0.6.0/shell.nix 2024-04-21 12:20:30.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/eww/srpm-unpacked/eww-0.6.0.tar.gz-extract/eww-0.6.0/shell.nix 2026-07-08 10:16:01.443245200 +0000 @@ -1,6 +1,11 @@ -(import (let lock = builtins.fromJSON (builtins.readFile ./flake.lock); -in fetchTarball { - url = - "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; - sha256 = lock.nodes.flake-compat.locked.narHash; -}) { src = ./.; }).shellNix +(import ( + let + lock = builtins.fromJSON (builtins.readFile ./flake.lock); + in + fetchTarball { + url = + lock.nodes.flake-compat.locked.url + or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } +) { src = ./.; }).shellNix