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
11 changes: 2 additions & 9 deletions .github/workflows/flatpak.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
name: CI
name: Flatpak

on:
push:
branches: [main]
pull_request:

jobs:
flatpak:
Expand All @@ -28,12 +27,6 @@ jobs:
- name: Upload cargo-sources.json artifact
uses: actions/upload-artifact@v4
with:
name: cargo-sources-${{ github.ref_name }}
name: cargo-sources-${{ github.run_id }}
path: cargo-sources.json
retention-days: 30

- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: tweaks.flatpak
manifest-path: dev.edfloreshz.CosmicTweaks.json
cache-key: flatpak-builder-${{ hashFiles('Cargo.lock') }}
5 changes: 5 additions & 0 deletions i18n/en/cosmic_ext_tweaks.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,8 @@ view = View

warning = Warning: this will override some of your existing custom shortcuts
windows-desc = Super+Arrows to move windows. Ctrl+Alt+Arrows to navigate workspaces.

## Reset
reset-to-defaults = Reset to defaults
reset-to-defaults-warning = This will reset all settings on this page to their default values. Any customizations you have made will be permanently lost.
reset = Reset
10 changes: 10 additions & 0 deletions res/icons/bundled/edit-undo-symbolic.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/app/core/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@ pub mod error;
pub mod grid;
pub mod icons;
pub mod key_bindings;
pub mod reset;
pub mod settings;
pub mod style;
16 changes: 16 additions & 0 deletions src/app/core/reset.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
use std::path::PathBuf;

/// Deletes `~/.config/cosmic/<app_id>/v1/` so COSMIC recreates it from
/// `/usr/share/cosmic/` defaults on next launch.
pub fn reset_cosmic_config(app_id: &str) {
let config_dir: Option<PathBuf> =
dirs::home_dir().map(|home| home.join(".config").join("cosmic").join(app_id).join("v1"));

if let Some(dir) = config_dir {
if dir.exists() {
if let Err(e) = std::fs::remove_dir_all(&dir) {
log::error!("Failed to reset config for {}: {}", app_id, e);
}
}
}
}
11 changes: 11 additions & 0 deletions src/app/dialog.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use cosmic::{Element, widget};

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

use super::Cosmic;
Expand All @@ -11,6 +12,7 @@ pub enum DialogPage {
SaveCurrentColorScheme(String),
CreateSnapshot(String),
CreateLayout(CreateLayoutDialog),
ResetPage(Page),
}

impl Cosmic {
Expand Down Expand Up @@ -126,6 +128,15 @@ impl Cosmic {
.spacing(spacing.space_m),
)
}
DialogPage::ResetPage(_page) => widget::dialog()
.title(fl!("reset-to-defaults"))
.body(fl!("reset-to-defaults-warning"))
.primary_action(
widget::button::destructive(fl!("reset")).on_press(Message::DialogComplete),
)
.secondary_action(
widget::button::standard(fl!("cancel")).on_press(Message::DialogCancel),
),
};

Some(dialog.into())
Expand Down
55 changes: 49 additions & 6 deletions src/app/footer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,30 @@ impl Cosmic {
let spacing = cosmic::theme::spacing();

match app.cosmic.nav_model.active_data::<Page>()? {
Page::ColorSchemes => app
.color_schemes
.footer()
.map(|elem| elem.map(|message| Message::ColorSchemes(Box::new(message)))),
Page::ColorSchemes => {
Some(
widget::row(vec![])
.push_maybe(app.color_schemes.footer().map(|elem| {
elem.map(|message| Message::ColorSchemes(Box::new(message)))
}))
.push(widget::space::horizontal())
.push(
widget::button::destructive(fl!("reset-to-defaults"))
.trailing_icon(icon_handle!("edit-undo-symbolic", 16))
.spacing(spacing.space_xs)
.on_press(Message::ToggleDialogPage(DialogPage::ResetPage(
Page::ColorSchemes,
))),
)
.spacing(spacing.space_xxs)
.apply(widget::container)
.class(cosmic::style::Container::Card)
.padding(spacing.space_xxs)
.into(),
)
}
Page::Layouts => Some(
widget::row(vec![])
.push(widget::space::horizontal())
.push(
widget::button::standard(fl!("save-current-layout"))
.trailing_icon(icon_handle!("arrow-into-box-symbolic", 16))
Expand All @@ -37,6 +54,7 @@ impl Cosmic {
),
))),
)
.push(widget::space::horizontal())
.push_maybe(app.layouts.selected_layout.as_ref().map(|_| {
widget::button::standard(fl!("apply-layout"))
.trailing_icon(icon_handle!("checkmark-symbolic", 16))
Expand All @@ -55,6 +73,14 @@ impl Cosmic {
None
}
}))
.push(
widget::button::destructive(fl!("reset-to-defaults"))
.trailing_icon(icon_handle!("edit-undo-symbolic", 16))
.spacing(spacing.space_xs)
.on_press(Message::ToggleDialogPage(DialogPage::ResetPage(
Page::Layouts,
))),
)
.spacing(spacing.space_xxs)
.apply(widget::container)
.class(cosmic::style::Container::Card)
Expand All @@ -78,7 +104,24 @@ impl Cosmic {
.padding(spacing.space_xxs)
.into(),
),
_ => None,
Page::Dock | Page::Panel | Page::Shortcuts => {
let page = app.cosmic.nav_model.active_data::<Page>().copied()?;
Some(
widget::row(vec![])
.push(widget::space::horizontal())
.push(
widget::button::destructive(fl!("reset-to-defaults"))
.trailing_icon(icon_handle!("edit-undo-symbolic", 16))
.spacing(spacing.space_xs)
.on_press(Message::ToggleDialogPage(DialogPage::ResetPage(page))),
)
.spacing(spacing.space_xxs)
.apply(widget::container)
.class(cosmic::style::Container::Card)
.padding(spacing.space_xxs)
.into(),
)
}
}
}
}
11 changes: 11 additions & 0 deletions src/app/pages/color_schemes/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ use nucleo::{
};
use serde::{Deserialize, Serialize};

use crate::app::core::reset::reset_cosmic_config;
use crate::localize::LANGUAGE_SORTER;
mod view;

Expand Down Expand Up @@ -174,6 +175,7 @@ pub enum Message {
ToggleDarkMode(bool),
SortBy(SortBy),
Query(String),
Reset,
}

#[derive(Debug, Clone, PartialEq)]
Expand Down Expand Up @@ -429,6 +431,15 @@ impl ColorSchemes {
}
Message::SortBy(sort_by) => self.sort_by = sort_by,
Message::Query(query) => self.set_query(query),
Message::Reset => {
reset_cosmic_config("com.system76.CosmicTheme.Dark");
reset_cosmic_config("com.system76.CosmicTheme.Dark.Builder");
reset_cosmic_config("com.system76.CosmicTheme.Light");
reset_cosmic_config("com.system76.CosmicTheme.Light.Builder");
let (new_self, task) = ColorSchemes::new();
*self = new_self;
return task;
}
}
Task::batch(tasks)
}
Expand Down
10 changes: 1 addition & 9 deletions src/app/pages/color_schemes/view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,6 @@ impl ColorSchemes {
row(vec![])
.align_y(Vertical::Center)
.push(dark_mode)
.push(space::horizontal())
.push(
button::standard(fl!("save-current-color-scheme"))
.trailing_icon(icon_handle!("arrow-into-box-symbolic", 16))
Expand All @@ -203,23 +202,19 @@ impl ColorSchemes {
.on_press(Message::StartImport),
)
.spacing(spacing.space_xxs)
.apply(container)
.class(cosmic::style::Container::Card)
.padding(spacing.space_xxs)
.into(),
),
Tab::Available => Some(
row(vec![])
.align_y(Vertical::Center)
.push(dark_mode)
.push(space::horizontal())
.push(match self.status {
Status::Idle => button::standard(fl!("refresh"))
.on_press(Message::FetchAvailableColorSchemes),
Status::Loading => button::standard(fl!("loading")),
})
.push(
button::text(fl!("revert-old-color-scheme")).on_press_maybe(
button::standard(fl!("revert-old-color-scheme")).on_press_maybe(
match (&self.saved_color_theme, &self.config.current_config) {
(None, None) => false,
(None, Some(_)) => false,
Expand All @@ -230,9 +225,6 @@ impl ColorSchemes {
),
)
.spacing(spacing.space_xxs)
.apply(container)
.class(cosmic::style::Container::Card)
.padding(spacing.space_xxs)
.into(),
),
}
Expand Down
6 changes: 6 additions & 0 deletions src/app/pages/dock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use cosmic::{
};
use cosmic_panel_config::{AutoHide, CosmicPanelConfig};

use crate::app::core::reset::reset_cosmic_config;
use crate::icon;

#[derive(Debug)]
Expand Down Expand Up @@ -63,6 +64,7 @@ pub enum Message {
SetWaitTime(u32),
SetTransitionTime(u32),
SetHandleSize(u32),
Reset,
}

impl Dock {
Expand Down Expand Up @@ -245,6 +247,10 @@ impl Dock {
log::error!("Error updating panel handle size: {}", err);
}
}
Message::Reset => {
reset_cosmic_config("com.system76.CosmicPanel.Dock");
*self = Dock::default();
}
}
Task::none()
}
Expand Down
25 changes: 24 additions & 1 deletion src/app/pages/layouts/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ use cosmic::{
use cosmic_ext_config_templates::load_template;
use preview::{LayoutPreview, Position};

use crate::Error;
use crate::app::{App, core::grid::GridMetrics};
use crate::{Error, app::core::reset::reset_cosmic_config};

pub mod config;
pub mod dialog;
Expand Down Expand Up @@ -52,6 +52,7 @@ pub enum Message {
Delete,
LoadLayouts(Vec<Layout>),
Create(String, LayoutPreview),
Reset,
}

impl Layouts {
Expand Down Expand Up @@ -164,6 +165,28 @@ impl Layouts {
}
}
}
Message::Reset => {
reset_cosmic_config("com.system76.CosmicPanel.Dock");
reset_cosmic_config("com.system76.CosmicPanel.Panel");

let layouts_dir =
dirs::data_local_dir().map(|path| path.join(App::APP_ID).join("layouts"));
if let Some(dir) = layouts_dir {
if dir.exists() {
if let Err(e) = std::fs::remove_dir_all(&dir) {
log::error!("Failed to clear layouts directory: {}", e);
}
}
}
if let Err(e) = Layouts::init() {
log::error!("Failed to reinitialize default layouts: {}", e);
}
*self = Layouts::default();
match crate::app::pages::layouts::config::Layout::list() {
Ok(layouts) => return self.update(Message::LoadLayouts(layouts)),
Err(e) => log::error!("Failed to reload layouts after reset: {}", e),
}
}
Message::Create(name, preview) => {
let layout = Layout::new(name, preview);

Expand Down
9 changes: 9 additions & 0 deletions src/app/pages/panel/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use cosmic::{
use cosmic_panel_config::{AutoHide, CosmicPanelConfig};
use serde::{Deserialize, Serialize};

use crate::app::core::reset::reset_cosmic_config;
use crate::icon;

use config::{CosmicPanelButtonConfig, IndividualConfig, Override};
Expand Down Expand Up @@ -161,6 +162,7 @@ pub enum Message {
SetWaitTime(u32),
SetTransitionTime(u32),
SetHandleSize(u32),
Reset,
}

impl Panel {
Expand Down Expand Up @@ -316,6 +318,12 @@ impl Panel {
}

pub fn update(&mut self, message: Message) -> Task<crate::app::message::Message> {
if let Message::Reset = message {
reset_cosmic_config("com.system76.CosmicPanel.Panel");
*self = Panel::default();
return Task::none();
}

let Some(panel_helper) = &self.panel_helper else {
return cosmic::Task::none();
};
Expand Down Expand Up @@ -443,6 +451,7 @@ impl Panel {
log::error!("Error updating panel handle size: {}", err);
}
}
Message::Reset => unreachable!(),
}
Task::none()
}
Expand Down
7 changes: 7 additions & 0 deletions src/app/pages/shortcuts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ use cosmic::{
};
use cosmic_settings_config::{Shortcuts, shortcuts};

use crate::app::core::reset::reset_cosmic_config;

pub struct ShortcutsPage {
pub config: cosmic_config::Config,
}
Expand Down Expand Up @@ -45,6 +47,7 @@ impl ShortcutsGroup {
#[allow(private_interfaces)]
pub enum Message {
ApplyShortcuts(ShortcutsGroup),
Reset,
}

impl ShortcutsPage {
Expand Down Expand Up @@ -76,6 +79,10 @@ impl ShortcutsPage {
error!("failed to write shortcuts config: {e}");
}
}
Message::Reset => {
reset_cosmic_config("com.system76.CosmicSettings.Shortcuts");
*self = ShortcutsPage::new();
}
}
Task::none()
}
Expand Down
Loading