Compare commits

...

11 commits

Author SHA1 Message Date
f9a442e443 chore: resolve local graphics dependencies 2026-05-25 19:37:22 +02:00
ccfa38ad44 chore: use local glyphon lockfile 2026-05-25 18:28:56 +02:00
bccdc3df16 chore: use local COSMIC support crates 2026-05-25 18:10:22 +02:00
be22ac64b7 chore: refresh lockfile and bump rust-toolchain to 1.93
Required to absorb the libcosmic-yoda squash rebase on 2026-05-25.
libcosmic-yoda now declares rust-version = "1.93".

Leyoda 2026 – GPLv3
2026-05-25 14:27:10 +02:00
6f514db1b4 chore: use local cosmic-text checkout 2026-05-25 11:34:55 +02:00
331aba9d95 yoda: use local dbus settings bindings 2026-05-25 09:55:11 +02:00
f19473a05c chore: align subscriptions with local stack 2026-05-23 20:49:24 +02:00
16172ad5a3 yoda: relocate local fork paths from ~/Devels to ~/Projets/COSMIC
Mise à jour des path= absolus (libcosmic, cosmic-config, cosmic-theme,
iced_futures/winit, window_clipboard, dnd, mime, cosmic-text) après
consolidation des forks cosmic-* sous ~/Projets/COSMIC/.

Inclut subscriptions/sound/Cargo.toml (libcosmic-yoda).

Leyoda 2026 – GPLv3
2026-05-16 18:08:59 +02:00
d8a5350fee yoda wayland-v5: redirect window_clipboard + cosmic-text to local forks
Propagates the [patch] blocks added in cosmic-yoterm v5 to keep the
whole yoda app family on a single Wayland-only stack. Without these,
iced_winit fails to select a window_clipboard version because our
fork exposes a `wayland` feature that upstream doesn't.

- window_clipboard → /home/lionel/Devels/window_clipboard (x11 gated
  behind opt-in feature)
- cosmic-text → /home/lionel/Devels/cosmic-text (EAW terminal_cells +
  upstream PR#503 applied)
2026-04-24 07:09:49 +02:00
546299dbb7 lockfile: libcosmic-yoda 0.1.0-yoda -> 0.1.0-yoda.2
Picks up the yoda-v2 libcosmic changes (color_picker Theme ref +
context_menu/menu winit ungate). Binary rebuilt and installed.
2026-04-23 18:46:17 +02:00
999e2ba4e5 yoda: rebase onto libcosmic-yoda via path deps + macOS controls toggle
Fresh rewiring from upstream master (78644a3) — the previous attempt on
051f4f9 was 137 commits behind and hit API drift (cosmic::iced_futures,
Subscription::run_with_id). Upstream master uses the newer API
(cosmic::iced::stream + Subscription::run_with) which our libcosmic-yoda
already supports.

Yoda wiring:
- [workspace.dependencies.libcosmic] (git pop-os) -> libcosmic-yoda { path, wayland }
- cosmic-config + iced_winit workspace deps -> path to libcosmic-yoda submodule
- [patch.pop-os/libcosmic] redirects transitive cosmic-config + cosmic-theme +
  iced_futures + iced_winit to our local paths so the graph resolves to a
  single copy (cosmic-bg/comp/idle/panel configs unify cleanly against master)
- subscriptions/sound + page + cosmic-settings inner Cargo.toml: libcosmic ->
  libcosmic-yoda (workspace + direct variants)
- winit feature dropped from libcosmic-yoda deps (our fork is Wayland-only)

Cherry-picked from leyoda/local/window-controls-position @ 52ce463:
- cosmic-settings/src/pages/desktop/window_management.rs — macOS toggle UI
- i18n/en + fr/cosmic_settings.ftl — translations

Installed at /usr/bin/cosmic-settings (yoda build, 78 MB).
Pre-yoda pacman version kept at /usr/bin/cosmic-settings.pre-yoda-fork.
2026-04-23 17:33:22 +02:00
20 changed files with 251 additions and 443 deletions

528
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -7,39 +7,41 @@ resolver = "3"
rust-version = "1.90"
[workspace.dependencies]
cosmic-randr = { git = "https://github.com/pop-os/cosmic-randr" }
cosmic-randr = { path = "../cosmic-randr/lib" }
tokio = { version = "1.49.0", features = ["macros"] }
iced_winit = { git = "https://github.com/pop-os/libcosmic", default-features = false }
# Yoda fork: direct path dep on iced_winit in libcosmic-yoda's submodule.
iced_winit = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/winit", default-features = false }
[workspace.dependencies.libcosmic]
# Yoda fork — libcosmic-yoda by path, replaces upstream git dep.
[workspace.dependencies.libcosmic-yoda]
features = [
"dbus-config",
"desktop",
"multi-window",
"winit",
"wayland",
"tokio",
"qr_code",
]
git = "https://github.com/pop-os/libcosmic"
path = "/home/lionel/Projets/COSMIC/libcosmic"
[workspace.dependencies.cosmic-config]
git = "https://github.com/pop-os/libcosmic"
path = "/home/lionel/Projets/COSMIC/libcosmic/cosmic-config"
[workspace.dependencies.cosmic-bg-config]
git = "https://github.com/pop-os/cosmic-bg"
path = "../cosmic-bg/config"
[workspace.dependencies.cosmic-comp-config]
git = "https://github.com/pop-os/cosmic-comp"
path = "../cosmic-comp/cosmic-comp-config"
features = ["output"]
[workspace.dependencies.cosmic-idle-config]
git = "https://github.com/pop-os/cosmic-idle"
path = "../cosmic-idle/cosmic-idle-config"
[workspace.dependencies.cosmic-panel-config]
git = "https://github.com/pop-os/cosmic-panel"
path = "../cosmic-panel/cosmic-panel-config"
[workspace.dependencies.cosmic-randr-shell]
git = "https://github.com/pop-os/cosmic-randr"
path = "../cosmic-randr/shell"
[workspace.dependencies.sctk]
version = "0.20"
@ -59,34 +61,32 @@ inherits = "release"
lto = "off"
debug = true
# [patch.'https://github.com/pop-os/cosmic-text']
# cosmic-text = { git = "https://github.com/pop-os/cosmic-text//", rev = "b017d7c" }
[patch.'https://github.com/pop-os/cosmic-protocols']
cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "d0e95be" }
cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "d0e95be" }
cosmic-protocols = { path = "../cosmic-protocols" }
cosmic-client-toolkit = { path = "../cosmic-protocols/client-toolkit" }
# [patch.'https://github.com/pop-os/cosmic-settings-daemon']
# cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daemon//", branch = "input_nobuild" }
# cosmic-settings-config = { path = "../cosmic-settings-daemon/config" }
# For development and testing purposes
# [patch.'https://github.com/pop-os/libcosmic']
# libcosmic = { path = "../libcosmic" }
# cosmic-config = { path = "../libcosmic/cosmic-config" }
# cosmic-theme = { path = "../libcosmic/cosmic-theme" }
# iced_futures = { path = "../libcosmic/iced/futures" }
# iced_winit = { path = "../libcosmic/iced/winit" }
# Yoda fork: redirect every transitive dep that asks for pop-os/libcosmic
# (cosmic-bg-config, cosmic-comp-config, cosmic-idle-config, cosmic-panel-config,
# cosmic-settings-config, cosmic-settings-daemon-config) to our local paths so
# the whole graph resolves against a single cosmic-config / cosmic-theme / iced_*.
[patch.'https://github.com/pop-os/libcosmic']
cosmic-config = { path = "/home/lionel/Projets/COSMIC/libcosmic/cosmic-config" }
cosmic-theme = { path = "/home/lionel/Projets/COSMIC/libcosmic/cosmic-theme" }
iced_futures = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/futures" }
iced_winit = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/winit" }
# libcosmic = { git = "https://github.com/pop-os/libcosmic//" }
# cosmic-config = { git = "https://github.com/pop-os/libcosmic//" }
# cosmic-theme = { git = "https://github.com/pop-os/libcosmic//" }
# iced_futures = { git = "https://github.com/pop-os/libcosmic//" }
# iced_winit = { git = "https://github.com/pop-os/libcosmic//" }
[patch.'https://github.com/pop-os/cosmic-text.git']
cosmic-text = { path = "../cosmic-text" }
# [patch.'https://github.com/pop-os/dbus-settings-bindings']
# cosmic-dbus-networkmanager = { path = "../dbus-settings-bindings/networkmanager" }
# upower_dbus = { path = "../dbus-settings-bindings/upower" }
# nm-secret-agent-manager = { git = "https://github.com/pop-os/dbus-settings-bindings//", branch = "nm-secret-agent" }
# Yoda wayland cut v5: redirect window_clipboard to the local fork
# (x11 gated behind opt-in feature).
[patch.'https://forge.aditua.com/leyoda/window_clipboard.git']
window_clipboard = { path = "/home/lionel/Projets/COSMIC/window_clipboard" }
dnd = { path = "/home/lionel/Projets/COSMIC/window_clipboard/dnd" }
mime = { path = "/home/lionel/Projets/COSMIC/window_clipboard/mime" }
[patch.crates-io]
atspi = { git = "https://github.com/wash2/atspi" }

View file

@ -9,7 +9,7 @@ publish = false
xdgen = "0.1"
[dependencies]
accounts-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings", optional = true }
accounts-zbus = { path = "../../dbus-settings-bindings/accounts-zbus", optional = true }
anyhow = "1.0"
ashpd = { version = "0.12", default-features = false, features = [
"tokio",
@ -21,14 +21,14 @@ color-eyre = "0.6.5"
cosmic-bg-config.workspace = true
cosmic-comp-config = { workspace = true, optional = true }
cosmic-config.workspace = true
cosmic-dbus-networkmanager = { git = "https://github.com/pop-os/dbus-settings-bindings", optional = true }
nm-secret-agent-manager = { git = "https://github.com/pop-os/dbus-settings-bindings", optional = true }
cosmic-dbus-networkmanager = { path = "../../dbus-settings-bindings/networkmanager", optional = true }
nm-secret-agent-manager = { path = "../../dbus-settings-bindings/nm-secret-agent-manager", optional = true }
cosmic-idle-config.workspace = true
cosmic-panel-config = { workspace = true, optional = true }
cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols", optional = true }
cosmic-protocols = { path = "../../cosmic-protocols", optional = true }
cosmic-randr-shell.workspace = true
cosmic-randr = { workspace = true, optional = true }
cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daemon", optional = true }
cosmic-settings-config = { path = "../../cosmic-settings-daemon/config", optional = true }
cosmic-settings-page = { path = "../page" }
cosmic-settings-accessibility-subscription = { path = "../subscriptions/accessibility", optional = true }
cosmic-settings-a11y-manager-subscription = { path = "../subscriptions/a11y-manager", optional = true }
@ -40,14 +40,14 @@ cosmic-settings-sound-subscription = { path = "../subscriptions/sound", optional
"auto-profile-init",
] }
cosmic-settings-wallpaper = { path = "../pages/wallpapers" }
cosmic-settings-daemon-config = { git = "https://github.com/pop-os/cosmic-settings-daemon", optional = true }
cosmic-settings-daemon-config = { path = "../../cosmic-settings-daemon/cosmic-settings-daemon-config", optional = true }
derive_setters = "0.1.9"
dirs = "6.0.0"
eyre = "0.6.12"
freedesktop-desktop-entry = "0.8.1"
futures = "0.3.32"
hostname-validator = "1.1.1"
hostname1-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings", optional = true }
hostname1-zbus = { path = "../../dbus-settings-bindings/hostname1", optional = true }
i18n-embed-fl = "0.10.0"
image = { version = "0.25", default-features = false, features = [
"jpeg",
@ -59,9 +59,9 @@ image = { version = "0.25", default-features = false, features = [
indexmap = "2.13.0"
itertools = "0.14.0"
itoa = "1.0.17"
libcosmic.workspace = true
libcosmic-yoda.workspace = true
iced_winit.workspace = true
locale1 = { git = "https://github.com/pop-os/dbus-settings-bindings", optional = true }
locale1 = { path = "../../dbus-settings-bindings/locale1", optional = true }
sysinfo = { version = "=0.38.0", optional = true }
mime-apps = { package = "cosmic-mime-apps", git = "https://github.com/pop-os/cosmic-mime-apps", optional = true }
notify = "8.2.0"
@ -75,13 +75,13 @@ slab = "0.4.12"
slotmap = "1.1.1"
static_init = "1.0.4"
sunrise = "3.0.0"
timedate-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings", optional = true }
timedate-zbus = { path = "../../dbus-settings-bindings/timedate", optional = true }
tokio = { workspace = true, features = ["fs", "io-util", "process", "sync"] }
tracing = "0.1.44"
tracing-subscriber = { version = "0.3.22", features = ["env-filter"] }
udev = { version = "0.9.3", optional = true }
upower_dbus = { git = "https://github.com/pop-os/dbus-settings-bindings", optional = true }
bluez-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings", optional = true }
upower_dbus = { path = "../../dbus-settings-bindings/upower", optional = true }
bluez-zbus = { path = "../../dbus-settings-bindings/bluez", optional = true }
url = "2.5.8"
xkb-data = "0.2.2"
xkeysym = { version = "0.2.1", optional = true }
@ -187,12 +187,12 @@ page-window-management = ["cosmic-comp-config", "dep:cosmic-settings-config"]
page-workspaces = ["cosmic-comp-config"]
# Other features
a11y = ["libcosmic/a11y"]
a11y = ["libcosmic-yoda/a11y"]
ashpd = ["dep:ashpd"]
cosmic-comp-config = ["dep:cosmic-comp-config"]
dbus-config = ["libcosmic/dbus-config", "cosmic-config/dbus"]
single-instance = ["libcosmic/single-instance"]
dbus-config = ["libcosmic-yoda/dbus-config", "cosmic-config/dbus"]
single-instance = ["libcosmic-yoda/single-instance"]
test = []
wayland = ["libcosmic/wayland", "dep:cosmic-panel-config", "dep:cosmic-randr", "iced_winit/cctk"]
wgpu = ["libcosmic/wgpu"]
xdg-portal = ["ashpd", "libcosmic/xdg-portal"]
wayland = ["libcosmic-yoda/wayland", "dep:cosmic-panel-config", "dep:cosmic-randr", "iced_winit/cctk"]
wgpu = ["libcosmic-yoda/wgpu"]
xdg-portal = ["ashpd", "libcosmic-yoda/xdg-portal"]

View file

@ -27,6 +27,7 @@ pub enum Message {
ShowActiveWindowHint(bool),
ShowMaximizeButton(bool),
ShowMinimizeButton(bool),
WindowControlsPositionStart(bool),
SetEdgeSnapThreshold(u32),
Surface(surface::Action),
}
@ -177,6 +178,19 @@ impl Page {
.set_show_minimize(&config, value);
}
}
Message::WindowControlsPositionStart(left) => {
if let Ok(config) = cosmic::config::CosmicTk::config() {
let position = if left {
cosmic::widget::WindowControlsPosition::Start
} else {
cosmic::widget::WindowControlsPosition::End
};
let _res = cosmic::config::COSMIC_TK
.write()
.unwrap()
.set_window_controls_position(&config, position);
}
}
Message::ShowActiveWindowHint(value) => {
self.show_active_hint = value;
if let Err(err) = self.comp_config.set("active_hint", value) {
@ -274,6 +288,7 @@ pub fn window_controls() -> Section<crate::pages::Message> {
maximize = fl!("window-controls", "maximize");
minimize = fl!("window-controls", "minimize");
active_window_hint = fl!("window-controls", "active-window-hint");
position_start = fl!("window-controls", "position-start");
});
Section::default()
@ -296,6 +311,13 @@ pub fn window_controls() -> Section<crate::pages::Message> {
settings::item::builder(&descriptions[minimize])
.toggler(cosmic::config::show_minimize(), Message::ShowMinimizeButton),
)
.add(settings::item::builder(&descriptions[position_start]).toggler(
matches!(
cosmic::config::window_controls_position(),
cosmic::widget::WindowControlsPosition::Start
),
Message::WindowControlsPositionStart,
))
.apply(Element::from)
.map(crate::pages::Message::WindowManagement)
})

View file

@ -484,6 +484,7 @@ window-controls = Window controls
.maximize = Show maximize button
.minimize = Show minimize button
.active-window-hint = Show active window hint
.position-start = Place buttons on the left (macOS style)
focus-navigation = Focus navigation
.focus-follows-cursor = Focus follows cursor

View file

@ -322,6 +322,7 @@ window-controls = Contrôles des fenêtres
.maximize = Afficher le bouton maximiser
.minimize = Afficher le bouton minimiser
.active-window-hint = Afficher l'indice de la fenêtre active
.position-start = Placer les boutons à gauche (style macOS)
focus-navigation = Navigation par le focus
.focus-follows-cursor = Le focus suit le curseur
.focus-follows-cursor-delay = Délai de suivi du focus en ms

View file

@ -7,7 +7,7 @@ edition = "2024"
derive_setters = "0.1.9"
regex = "1.12.3"
slotmap = "1.1.1"
libcosmic = { workspace = true }
libcosmic-yoda = { workspace = true }
downcast-rs = "2.0.2"
url = "2.5.8"
slab = "0.4.12"

View file

@ -1,3 +1,3 @@
[toolchain]
channel = "1.90.0"
channel = "1.93.0"
components = ["clippy", "rustfmt"]

View file

@ -7,8 +7,8 @@ rust-version.workspace = true
publish = true
[dependencies]
cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols" }
iced_futures = { git = "https://github.com/pop-os/libcosmic" }
cosmic-protocols = { path = "../../../cosmic-protocols" }
iced_futures = { path = "../../../libcosmic/iced/futures" }
num-derive = "0.4.2"
num-traits = "0.2.19"
sctk.workspace = true

View file

@ -7,9 +7,9 @@ rust-version.workspace = true
publish = true
[dependencies]
cosmic-dbus-a11y = { git = "https://github.com/pop-os/dbus-settings-bindings" }
cosmic-dbus-a11y = { path = "../../../dbus-settings-bindings/a11y" }
futures = "0.3.32"
iced_futures = { git = "https://github.com/pop-os/libcosmic" }
iced_futures = { path = "../../../libcosmic/iced/futures" }
tokio = { version = "1.49.0", features = ["sync", "time"] }
tracing = "0.1.44"
zbus = "5.13"

View file

@ -8,7 +8,7 @@ publish = true
[dependencies]
futures = "0.3.32"
iced_futures = { git = "https://github.com/pop-os/libcosmic" }
iced_futures = { path = "../../../libcosmic/iced/futures" }
log = "0.4.29"
rustix = "1.1.3"
tokio = "1.49.0"

View file

@ -7,7 +7,7 @@ rust-version.workspace = true
publish = true
[dependencies]
bluez-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings" }
bluez-zbus = { path = "../../../dbus-settings-bindings/bluez" }
futures = "0.3.32"
iced_futures = { git = "https://github.com/pop-os/libcosmic" }
tokio = "1.49.0"

View file

@ -7,11 +7,11 @@ rust-version.workspace = true
publish = true
[dependencies]
cosmic-dbus-networkmanager = { git = "https://github.com/pop-os/dbus-settings-bindings" }
cosmic-dbus-networkmanager = { path = "../../../dbus-settings-bindings/networkmanager" }
secret-service = { version = "5.1.0", features = ["rt-tokio-crypto-rust"] }
nm-secret-agent-manager = { git = "https://github.com/pop-os/dbus-settings-bindings" }
nm-secret-agent-manager = { path = "../../../dbus-settings-bindings/nm-secret-agent-manager" }
futures = "0.3.32"
iced_futures = { git = "https://github.com/pop-os/libcosmic" }
iced_futures = { path = "../../../libcosmic/iced/futures" }
itertools = "0.14.0"
secure-string = "0.3.0"
thiserror = "2.0.18"

View file

@ -185,7 +185,7 @@ pub fn subscription<I: 'static + Hash + Copy + Send + Sync + Debug>(
conn,
},
|Wrapper {
id,
id: _,
has_popup,
conn,
}| {

View file

@ -141,7 +141,7 @@ pub fn subscription<I: Copy + Debug + std::hash::Hash + 'static>(
self.id.hash(state);
}
}
Subscription::run_with(Wrapper { id, conn }, |Wrapper { id, conn }| {
Subscription::run_with(Wrapper { id, conn }, |Wrapper { id: _, conn }| {
let conn = conn.clone();
stream::channel(
50,

View file

@ -7,6 +7,6 @@ rust-version.workspace = true
[dependencies]
libpulse-binding = { version = "2.30.1" }
rustix = { version = "1.1.3", features = ["pipe"] }
iced_futures = { git = "https://github.com/pop-os/libcosmic" }
iced_futures = { path = "../../../libcosmic/iced/futures" }
futures = "0.3.32"
log = "0.4.27"

View file

@ -288,7 +288,7 @@ impl PulseChannels {
/// Set the speaker balance of the active sink.
pub fn set_balance(&mut self, balance: f32) {
if let Err(err) = self.tx.send(Request::Balance(self.index, balance)) {
log::error!("Failed to send new balance to channel");
log::error!("Failed to send new balance to channel: {err}");
} else {
self.pipe_tx
.write_all(&[1])
@ -299,7 +299,7 @@ impl PulseChannels {
/// Set the volume of the active sink.
pub fn set_volume(&mut self, volume: f32) {
if let Err(err) = self.tx.send(Request::Volume(self.index, volume)) {
log::error!("Failed to send new volume to channel");
log::error!("Failed to send new volume to channel: {err}");
} else {
self.pipe_tx
.write_all(&[1])

View file

@ -7,7 +7,7 @@ publish = true
[dependencies]
futures = "0.3.32"
iced_futures = { git = "https://github.com/pop-os/libcosmic" }
iced_futures = { path = "../../../libcosmic/iced/futures" }
log = "0.4.29"
tokio = "1.49.0"
tokio-stream = "0.1.18"

View file

@ -10,7 +10,7 @@ publish = true
cosmic-pipewire = { path = "../../crates/cosmic-pipewire" }
futures = "0.3.32"
intmap = "3.1.3"
libcosmic = { git = "https://github.com/pop-os/libcosmic", default-features = false }
libcosmic-yoda = { path = "/home/lionel/Projets/COSMIC/libcosmic", default-features = false }
numtoa = "1.0.0-alpha1"
rustix = "1.1.3"
tokio = { version = "1.49.0", features = ["process", "rt", "time"] }

View file

@ -8,9 +8,9 @@ publish = true
[dependencies]
futures = "0.3.32"
iced_futures = { git = "https://github.com/pop-os/libcosmic" }
iced_futures = { path = "../../../libcosmic/iced/futures" }
log = "0.4.29"
tokio = "1.49.0"
tokio-stream = "0.1.18"
upower_dbus = { git = "https://github.com/pop-os/dbus-settings-bindings" }
upower_dbus = { path = "../../../dbus-settings-bindings/upower" }
zbus = "5.13.2"