Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,331 changes: 794 additions & 537 deletions Cargo.lock

Large diffs are not rendered by default.

35 changes: 19 additions & 16 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
[package]
name = "cosmic-ext-tweaks"
version = "0.1.3"
edition = "2021"
edition = "2024"

[dependencies]
dirs = "5.0.1"
env_logger = "0.11.5"
i18n-embed-fl = "0.8"
log = "0.4.22"
open = "5.1.2"
pretty_env_logger = "0.5.0"
dirs = "6"
env_logger = "0.11"
i18n-embed-fl = "0.10"
log = "0.4"
open = "5"
pretty_env_logger = "0.5"
reqwest = { version = "0.12", features = ["json"] }
ron = "0.8.1"
rust-embed = "8.3.0"
chrono = { version = "0.4.38", features = ["serde"] }
thiserror = "2.0.12"
uuid = { version = "1.17.0", features = ["serde", "v4"] }
ron = "0.11"
rust-embed = "8"
chrono = { version = "0.4", features = ["serde"] }
thiserror = "2"
uuid = { version = "1", features = ["serde", "v4"] }

[dependencies.ashpd]
version = "0.8.1"
version = "0.12"
default-features = false
features = ["async-std"]

Expand All @@ -31,18 +31,21 @@ features = ["tokio", "winit", "wgpu", "about"]
git = "https://github.com/ryanabx/cosmic-ext-config-templates"

[dependencies.i18n-embed]
version = "0.14"
version = "0.16"
features = ["fluent-system", "desktop-requester"]

[dependencies.cosmic-panel-config]
git = "https://github.com/pop-os/cosmic-panel"

[dependencies.cosmic-settings-config]
git = "https://github.com/pop-os/cosmic-settings-daemon"

[dependencies.serde]
version = "1.0.196"
version = "1"
features = ["derive"]

[dependencies.tokio]
version = "1.35.1"
version = "1"
features = ["macros", "fs", "rt"]

[patch."https://github.com/smithay/client-toolkit.git"]
Expand Down
2 changes: 1 addition & 1 deletion i18n/en/cosmic_ext_tweaks.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -119,5 +119,5 @@ view = View

## Shortcuts

warning = Warning: this will remove your existing custom shortcuts
warning = Warning: this will override some of your existing custom shortcuts
windows-desc = Super+Arrows to move windows. Ctrl+Alt+Arrows to navigate workspaces.
29 changes: 16 additions & 13 deletions src/app.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use action::TweaksAction;
use context::ContextPage;
use cosmic::{
app::{self, context_drawer::ContextDrawer, Task},
iced, widget, Application, Core, Element,
Application, Core, Element,
app::{self, Task, context_drawer::ContextDrawer},
iced, widget,
};
use std::collections::{HashMap, VecDeque};

Expand Down Expand Up @@ -37,7 +38,7 @@ pub struct App {
panel: pages::Panel,
layouts: pages::Layouts,
snapshots: pages::Snapshots,
shortcuts: pages::Shortcuts,
shortcuts: pages::ShortcutsPage,
}

pub struct Cosmic {
Expand Down Expand Up @@ -124,16 +125,18 @@ impl App {
core::config::AppTheme::Light => 2,
core::config::AppTheme::System => 0,
};
widget::settings::view_column(vec![widget::settings::section()
.title(crate::fl!("appearance"))
.add(
widget::settings::item::builder(crate::fl!("theme")).control(widget::dropdown(
&self.cosmic.app_themes,
Some(app_theme_selected),
Message::AppTheme,
)),
)
.into()])
widget::settings::view_column(vec![
widget::settings::section()
.title(crate::fl!("appearance"))
.add(
widget::settings::item::builder(crate::fl!("theme")).control(widget::dropdown(
&self.cosmic.app_themes,
Some(app_theme_selected),
Message::AppTheme,
)),
)
.into(),
])
.into()
}
}
2 changes: 1 addition & 1 deletion src/app/action.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use super::{context::ContextPage, Message};
use super::{Message, context::ContextPage};

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum TweaksAction {
Expand Down
4 changes: 2 additions & 2 deletions src/app/context_drawer.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use cosmic::{
app::{self, context_drawer::ContextDrawer},
Application,
app::{self, context_drawer::ContextDrawer},
};

use crate::app::App;
use crate::app::context::ContextPage;
use crate::app::message::Message;
use crate::app::App;

use super::Cosmic;

Expand Down
5 changes: 3 additions & 2 deletions src/app/core/config.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use cosmic::{
cosmic_config::{self, cosmic_config_derive::CosmicConfigEntry, Config, CosmicConfigEntry},
theme, Application,
Application,
cosmic_config::{self, Config, CosmicConfigEntry, cosmic_config_derive::CosmicConfigEntry},
theme,
};
use serde::{Deserialize, Serialize};

Expand Down
5 changes: 2 additions & 3 deletions src/app/core/grid.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ pub struct GridMetrics {

impl GridMetrics {
pub fn new(width: usize, min_width: usize, column_spacing: u16) -> Self {
let width_m1 = width.checked_sub(min_width).unwrap_or(0);
let width_m1 = width.saturating_sub(min_width);
let cols_m1 = width_m1 / (min_width + column_spacing as usize);
let cols = cols_m1 + 1;
let item_width = width
.checked_sub(cols_m1 * column_spacing as usize)
.unwrap_or(0)
.saturating_sub(cols_m1 * column_spacing as usize)
.checked_div(cols)
.unwrap_or(0);
Self {
Expand Down
6 changes: 2 additions & 4 deletions src/app/core/icons.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,10 @@ impl IconCache {
}

pub fn get_handle(&mut self, name: &'static str, size: u16) -> icon::Handle {
let handle = self
.cache
self.cache
.entry(IconCacheKey { name, size })
.or_insert_with(|| icon::from_name(name).size(size).handle())
.clone();
handle
.clone()
}
}

Expand Down
1 change: 0 additions & 1 deletion src/app/core/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,5 @@ pub mod error;
pub mod grid;
pub mod icons;
pub mod key_bindings;
pub mod localize;
pub mod settings;
pub mod style;
13 changes: 9 additions & 4 deletions src/app/core/settings.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use crate::app::flags::Flags;
use crate::{app::flags::Flags, localize};

use super::icons::{IconCache, ICON_CACHE};
use crate::app::core::localize;
use super::icons::{ICON_CACHE, IconCache};
use std::sync::Mutex;

pub fn settings() -> cosmic::app::Settings {
Expand All @@ -22,7 +21,13 @@ pub fn flags() -> Flags {
pub fn init() -> Result<(), crate::Error> {
ICON_CACHE.get_or_init(|| Mutex::new(IconCache::new()));
localize::localize();
std::env::set_var("RUST_LOG", "cosmic_ext_tweaks=info");

if std::env::var("RUST_LOG").is_err() {
unsafe {
std::env::set_var("RUST_LOG", "warn");
}
}

pretty_env_logger::init();
crate::app::pages::layouts::Layouts::init()
}
42 changes: 17 additions & 25 deletions src/app/dialog.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use cosmic::{widget, Element};
use cosmic::{Element, widget};

use crate::app::App;
use crate::app::message::Message;
use crate::app::pages::layouts::dialog::{CreateLayoutDialog, PanelType};
use crate::app::App;

use super::Cosmic;
use crate::fl;
Expand All @@ -17,10 +17,7 @@ pub enum DialogPage {
impl Cosmic {
pub fn dialog<'a>(app: &'a App) -> Option<Element<'a, Message>> {
let spacing = cosmic::theme::spacing();
let dialog_page = match app.cosmic.dialog_pages.front() {
Some(some) => some,
None => return None,
};
let dialog_page = app.cosmic.dialog_pages.front()?;

let dialog = match dialog_page {
DialogPage::SaveCurrentColorScheme(name) => widget::dialog()
Expand Down Expand Up @@ -70,16 +67,15 @@ impl Cosmic {
} = dialog;
let preview_view = preview.view::<Message>(&spacing, 130);

let name_input = widget::text_input(fl!("layout-name"), name)
.id(app.cosmic.dialog_text_input.clone())
.on_input(move |name| {
Message::DialogUpdate(DialogPage::CreateLayout(CreateLayoutDialog::new(
name.clone(),
preview.clone(),
error.clone(),
)))
})
.on_submit(|_| Message::DialogComplete);
let name_input =
widget::text_input(fl!("layout-name"), name)
.id(app.cosmic.dialog_text_input.clone())
.on_input(move |name| {
Message::DialogUpdate(DialogPage::CreateLayout(
CreateLayoutDialog::new(name.clone(), *preview, error.clone()),
))
})
.on_submit(|_| Message::DialogComplete);

widget::dialog()
.width(700)
Expand All @@ -90,7 +86,7 @@ impl Cosmic {
Message::DialogUpdate(DialogPage::CreateLayout(
CreateLayoutDialog::new(
name.clone(),
preview.clone(),
*preview,
Some(fl!("layout-name-empty")),
),
))
Expand All @@ -107,14 +103,10 @@ impl Cosmic {
.push(
widget::column()
.push(name_input)
.push_maybe(if let Some(error) = error {
Some(
widget::text::caption(error.to_string())
.class(cosmic::style::Text::Accent),
)
} else {
None
})
.push_maybe(error.as_ref().map(|error| {
widget::text::caption(error.to_string())
.class(cosmic::style::Text::Accent)
}))
.push(
widget::scrollable(
widget::column()
Expand Down
4 changes: 2 additions & 2 deletions src/app/footer.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use cosmic::{
widget::{self},
Apply, Element,
widget::{self},
};

use crate::app::{dialog::DialogPage, App};
use crate::app::{App, dialog::DialogPage};
use crate::app::{message::Message, pages::layouts::dialog::CreateLayoutDialog};
use crate::app::{page::Page, pages};

Expand Down
6 changes: 3 additions & 3 deletions src/app/header.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
use cosmic::widget::menu::{self, ItemHeight, ItemWidth};
use cosmic::widget::RcElementWrapper;
use cosmic::Element;
use cosmic::widget::RcElementWrapper;
use cosmic::widget::menu::{self, ItemHeight, ItemWidth};

use crate::app::App;
use crate::app::action::TweaksAction;
use crate::app::message::Message;
use crate::app::App;

use super::Cosmic;
use crate::app::core::icons;
Expand Down
8 changes: 4 additions & 4 deletions src/app/init.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
use std::collections::VecDeque;

use cosmic::{
Application, ApplicationExt, Task,
app::{self, Core},
iced::keyboard::Modifiers,
widget::{self, about::About},
Application, ApplicationExt, Task,
};

use crate::app::App;
use crate::app::flags::Flags;
use crate::app::message::Message;
use crate::app::page::Page;
use crate::app::App;
use crate::app::{context::ContextPage, pages::snapshots::config::SnapshotKind};

use super::Cosmic;
Expand All @@ -21,7 +21,7 @@ use crate::app::pages::{
dock::Dock,
layouts::Layouts,
panel::Panel,
shortcuts::Shortcuts,
shortcuts::ShortcutsPage,
snapshots::Snapshots,
};
use crate::fl;
Expand Down Expand Up @@ -78,7 +78,7 @@ impl Cosmic {
dock: Dock::default(),
panel: Panel::default(),
snapshots: Snapshots::default(),
shortcuts: Shortcuts::new(),
shortcuts: ShortcutsPage::new(),
};

let mut tasks = vec![
Expand Down
4 changes: 2 additions & 2 deletions src/app/nav.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use cosmic::{
ApplicationExt, Task,
app::{self},
widget::{self},
ApplicationExt, Task,
};

use crate::app::App;
use crate::app::message::Message;
use crate::app::page::Page;
use crate::app::App;
use crate::fl;

use super::Cosmic;
Expand Down
15 changes: 7 additions & 8 deletions src/app/pages/color_schemes/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ use cosmic::{
cosmic_config::{self, Config},
cosmic_theme::{ThemeBuilder, ThemeMode},
};
use cosmic_config::cosmic_config_derive::CosmicConfigEntry;
use cosmic_config::CosmicConfigEntry;
use cosmic_config::cosmic_config_derive::CosmicConfigEntry;
use serde::{Deserialize, Serialize};

use crate::Error;
Expand Down Expand Up @@ -101,13 +101,12 @@ impl ColorScheme {
.or_else(dirs::data_local_dir)
.map(|dir| dir.join("themes/cosmic"));

if let Some(ref xdg_data_home) = xdg_data_home {
if !xdg_data_home.exists() {
if let Err(e) = std::fs::create_dir_all(xdg_data_home) {
log::error!("failed to create the themes directory: {e}")
};
}
}
if let Some(ref xdg_data_home) = xdg_data_home
&& !xdg_data_home.exists()
&& let Err(e) = std::fs::create_dir_all(xdg_data_home)
{
log::error!("failed to create the themes directory: {e}")
};

let xdg_data_dirs = std::env::var("XDG_DATA_DIRS").ok();

Expand Down
Loading