[package]
# Yoda fork: hard-renamed. Every consumer (leyoda/cosmic-files fork + each
# leyoda/cosmic-* app) depends directly on `libcosmic-yoda` by path, bypassing
# pop-os/libcosmic entirely. No [patch] shenanigans needed — transitive deps
# that used to ask for `libcosmic` are replaced by deps on our forks that ask
# for `libcosmic-yoda`.
name = "libcosmic-yoda"
version = "0.1.0-yoda.2"
edition = "2024"
rust-version = "1.93"

[lib]
name = "cosmic"

[features]
default = [
    "tokio",
    "a11y",
    "dbus-config",
    "wayland",
    "multi-window",
]
advanced-shaping = ["iced/advanced-shaping"]
# Accessibility support
a11y = ["iced/a11y", "iced_accessibility"]
# Enable about widget
about = []
# Builds support for animated images
animated-image = [
    "dep:async-fs",
    "image/gif",
    "image/webp",
    "image/png",
    "tokio?/io-util",
    "tokio?/fs",
]
# XXX autosize should not be used on winit windows unless dialogs
autosize = []
applet = [
    "autosize",
    "wayland",
    "tokio",
    "cosmic-panel-config",
    "ron",
    "multi-window",
]
applet-token = ["applet"]
# Use the cosmic-settings-daemon for config handling on Linux targets
dbus-config = []
# Debug features
debug = ["iced/debug"]
# Enables pipewire support in ashpd, if ashpd is enabled
pipewire = ["ashpd?/pipewire"]
# Enables process spawning helper
process = ["dep:libc", "dep:rustix"]
# Use rfd for file dialogs
rfd = ["dep:rfd"]
# Enables desktop files helpers
desktop = [
    "process",
    "dep:cosmic-settings-config",
    "dep:freedesktop-desktop-entry",
    "dep:image-extras",
    "dep:mime",
    "dep:shlex",
    "tokio?/io-util",
    "tokio?/net",
]
# Enables launching desktop files inside systemd scopes
desktop-systemd-scope = ["desktop", "dep:zbus"]
# Enables keycode serialization
serde-keycode = ["iced_core/serde"]
# Prevents multiple separate process instances.
single-instance = ["zbus/blocking-api", "ron"]
# smol async runtime
smol = ["dep:smol", "iced/smol", "zbus?/async-io", "rfd?/async-std"]
tokio = [
    "dep:tokio",
    "ashpd?/tokio",
    "iced/tokio",
    "rfd?/tokio",
    "zbus?/tokio",
    "cosmic-config/tokio",
]
# Tokio async runtime
# Wayland window support (yoda fork is Wayland-only; always active in default).
# We still need iced/winit because pop-os/iced hosts the runtime dispatcher
# (`iced_winit as shell`) there — the name is a misnomer, it's the same crate
# that provides both the winit path AND the sctk/cctk wayland path.
wayland = [
    "ashpd?/wayland",
    "autosize",
    "iced/winit",
    "iced/wayland",
    "iced_winit/wayland",
    "iced_runtime/cctk",
    "iced_winit/cctk",
    "iced_wgpu/cctk",
    "iced/cctk",
    "dep:iced_winit",
    "dep:cctk",
    "surface-message",
]
surface-message = []
# multi-window support
multi-window = []
# Render with wgpu
wgpu = ["iced/wgpu", "iced_wgpu"]
# Compat stubs — kept empty so upstream deps (cosmic-files, cosmic-text, …)
# that still ask for `winit` / `x11` features resolve cleanly against the
# yoda fork. Activating them has no effect: no code is gated on these.
winit = []
x11 = []
# Enables XDG portal integrations
xdg-portal = ["ashpd"]
qr_code = ["iced/qr_code"]
markdown = ["iced/markdown"]
highlighter = ["iced/highlighter"]
async-std = [
    "dep:async-std",
    "ashpd?/async-std",
    "rfd?/async-std",
    "zbus?/async-io",
    "iced/async-std",
]

[dependencies]
apply = "0.3.0"
ashpd = { version = "0.12.3", default-features = false, optional = true }
async-fs = { version = "2.2", optional = true }
async-std = { workspace = true, optional = true }
auto_enums = "0.8.8"
cctk = { path = "../cosmic-protocols/client-toolkit", package = "cosmic-client-toolkit", optional = true }
jiff = "0.2"
cosmic-config = { path = "cosmic-config" }
cosmic-settings-config = { path = "../cosmic-settings-daemon/config", optional = true }
# Internationalization
i18n-embed = { version = "0.16.0", features = [
    "fluent-system",
    "desktop-requester",
] }
i18n-embed-fl = "0.10"
rust-embed = "8.11.0"
css-color = "0.2.8"
derive_setters = "0.1.9"
futures = "0.3"
image = { version = "0.25.10", default-features = false, features = [
    "ico",
    "jpeg",
    "png",
] }
image-extras = { version = "0.1.0", default-features = false, features = [
    "xpm",
    "xbm",
], optional = true }
libc = { version = "0.2.186", optional = true }
log = "0.4"
mime = { version = "0.3.17", optional = true }
palette.workspace = true
rfd = { version = "0.16.0", default-features = false, features = [
    "xdg-portal",
], optional = true }
rustix = { version = "1.1", features = ["pipe", "process"], optional = true }
serde = { workspace = true, features = ["derive"] }
slotmap = "1.1.1"
smol = { version = "2.0.2", optional = true }
thiserror.workspace = true
taffy = { version = "0.9.2", features = ["grid"] }
tokio = { workspace = true, optional = true }
tracing.workspace = true
unicode-segmentation = "1.13"
url = "2.5.8"
zbus = { workspace = true, optional = true }
float-cmp = "0.10.0"
ron = { workspace = true, optional = true }
enumflags2 = "0.7.12"

# Enable DBus feature on Linux targets
[target.'cfg(target_os = "linux")'.dependencies]
cosmic-config = { path = "cosmic-config", features = ["dbus"] }
cosmic-settings-daemon = { path = "../dbus-settings-bindings/cosmic-settings-daemon" }
zbus = { version = "5.14.0", default-features = false }

[target.'cfg(all(unix, not(target_os = "macos")))'.dependencies]
freedesktop-icons = { package = "cosmic-freedesktop-icons", path = "../cosmic-freedesktop-icons" }
freedesktop-desktop-entry = { version = "0.8.1", optional = true }
shlex = { version = "1.3.0", optional = true }

[target.'cfg(any(not(unix), target_os = "macos"))'.dependencies]
# Used to embed bundled icons for non-unix platforms.
phf = { version = "0.13.1", features = ["macros"] }

[dependencies.cosmic-theme]
path = "cosmic-theme"

[dependencies.iced]
path = "./iced"
default-features = false
features = [
    "advanced",
    "image-without-codecs",
    "lazy",
    "svg",
    "web-colors",
    "tiny-skia",
]

[dependencies.iced_runtime]
path = "./iced/runtime"

[dependencies.iced_renderer]
path = "./iced/renderer"

[dependencies.iced_core]
path = "./iced/core"
features = ["serde"]

[dependencies.iced_widget]
path = "./iced/widget"
features = ["canvas"]

[dependencies.iced_futures]
path = "./iced/futures"

[dependencies.iced_accessibility]
path = "./iced/accessibility"
optional = true

[dependencies.iced_tiny_skia]
path = "./iced/tiny_skia"
# Yoda: drop the x11 default → softbuffer no longer pulls tiny-xlib/x11-dl/etc.
default-features = false
features = ["wayland"]

[dependencies.iced_winit]
path = "./iced/winit"
optional = true
# Yoda: drop the x11 default → winit won't pull winit-x11/tiny-xlib/x11-dl.
# Keep wayland + wayland-dlopen (default behaviour minus x11).
default-features = false
features = ["wayland", "wayland-dlopen"]

[dependencies.iced_wgpu]
path = "./iced/wgpu"
optional = true

[dependencies.cosmic-panel-config]
path = "../cosmic-panel/cosmic-panel-config"
optional = true

[patch.'https://github.com/pop-os/freedesktop-icons']
cosmic-freedesktop-icons = { path = "../cosmic-freedesktop-icons" }

[patch.'https://github.com/pop-os/softbuffer']
softbuffer = { path = "../softbuffer" }

[patch.'https://github.com/pop-os/smithay-clipboard']
smithay-clipboard = { path = "../smithay-clipboard" }

[patch.'https://github.com/pop-os/winit.git']
dpi = { path = "../winit/dpi" }
winit = { path = "../winit/winit" }
winit-android = { path = "../winit/winit-android" }
winit-appkit = { path = "../winit/winit-appkit" }
winit-common = { path = "../winit/winit-common" }
winit-core = { path = "../winit/winit-core" }
winit-orbital = { path = "../winit/winit-orbital" }
winit-uikit = { path = "../winit/winit-uikit" }
winit-wayland = { path = "../winit/winit-wayland" }
winit-web = { path = "../winit/winit-web" }
winit-win32 = { path = "../winit/winit-win32" }
winit-x11 = { path = "../winit/winit-x11" }

[workspace]
members = [
    "cosmic-config",
    "cosmic-config-derive",
    "cosmic-theme",
]
# examples/* excluded — many depend on the removed winit/x11 features.
# They will be revisited and adapted in a later phase.
exclude = ["iced", "examples"]

[workspace.dependencies]
async-std = "1.13"
dirs = "6.0"
palette = "0.7"
ron = "0.12"
serde = "1.0"
thiserror = "2.0"
tracing = "0.1"
tokio = "1.52"
zbus = { version = "5.15", default-features = false }

# Speed up snapshot diffing in cosmic-theme tests. Cargo silently ignores
# [profile.*] blocks in non-root manifests, so this lives at the
# workspace root.
[profile.dev.package.insta]
opt-level = 3
[profile.dev.package.similar]
opt-level = 3

[dev-dependencies]
tempfile = "3.27.0"
