Compare commits
2 commits
e471bfe83e
...
0aeb2c4b6b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0aeb2c4b6b | ||
|
|
29a0070748 |
4 changed files with 33 additions and 84 deletions
|
|
@ -4,8 +4,11 @@ version = "0.2.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
gtk4 = { version = "0.9", features = ["v4_12"] }
|
gtk4 = { version = "0.11", features = ["v4_12"] }
|
||||||
glib = "0.20"
|
glib = "0.22"
|
||||||
|
# Shared ecosystem theming — bos-settings loads the same generated stylesheet as
|
||||||
|
# breadbar/breadbox/breadpad so the whole desktop looks consistent.
|
||||||
|
bread-theme = { git = "https://github.com/Breadway/bread-ecosystem", tag = "v0.2.6", features = ["gtk"] }
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
toml = "0.8"
|
toml = "0.8"
|
||||||
|
|
|
||||||
|
|
@ -1,87 +1,30 @@
|
||||||
|
//! Theming for bos-settings.
|
||||||
|
//!
|
||||||
|
//! bos-settings deliberately owns almost no styling: it loads the ecosystem's
|
||||||
|
//! shared stylesheet (the same one breadbar/breadbox/breadpad use, generated by
|
||||||
|
//! `bread-theme` from the pywal palette) and adds only the few layout rules
|
||||||
|
//! specific to this app's sidebar + content shell. This keeps it visually
|
||||||
|
//! identical to the rest of the bread desktop and live-recolouring for free.
|
||||||
|
|
||||||
use gtk4::CssProvider;
|
use gtk4::CssProvider;
|
||||||
|
use std::cell::RefCell;
|
||||||
|
|
||||||
const CSS: &str = r#"
|
// App-specific layout only — everything visual (colours, buttons, entries,
|
||||||
window {
|
// switches, sidebar/row styling, cards, scrollbars) comes from the shared sheet.
|
||||||
background-color: #2e3440;
|
const APP_CSS: &str = "\
|
||||||
color: #eceff4;
|
.view-content { padding: 24px; }\n\
|
||||||
|
.view-content > label.title { margin-bottom: 16px; }\n\
|
||||||
|
";
|
||||||
|
|
||||||
|
thread_local! {
|
||||||
|
static APP_PROVIDER: RefCell<Option<CssProvider>> = const { RefCell::new(None) };
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar {
|
pub fn load(_display: >k4::gdk::Display) {
|
||||||
background-color: #3b4252;
|
// Shared ecosystem stylesheet (loads the generated file or a rendered
|
||||||
border-right: 1px solid #434c5e;
|
// fallback, and live-reloads when the palette changes).
|
||||||
}
|
bread_theme::gtk::apply_shared();
|
||||||
|
|
||||||
.sidebar row {
|
// bos-settings layout, layered on top at APPLICATION priority.
|
||||||
padding: 8px 12px;
|
APP_PROVIDER.with(|cell| bread_theme::gtk::apply_css(APP_CSS, cell));
|
||||||
color: #d8dee9;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar row:selected {
|
|
||||||
background-color: #5e81ac;
|
|
||||||
color: #eceff4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar .section-header {
|
|
||||||
padding: 12px 12px 4px 12px;
|
|
||||||
font-size: 0.75em;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #616e88;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.view-content {
|
|
||||||
padding: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.view-content label.title {
|
|
||||||
font-size: 1.4em;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #eceff4;
|
|
||||||
margin-bottom: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
background-color: #5e81ac;
|
|
||||||
color: #eceff4;
|
|
||||||
border: none;
|
|
||||||
border-radius: 4px;
|
|
||||||
padding: 6px 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
button:hover {
|
|
||||||
background-color: #81a1c1;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.destructive-action {
|
|
||||||
background-color: #bf616a;
|
|
||||||
}
|
|
||||||
|
|
||||||
button.destructive-action:hover {
|
|
||||||
background-color: #d08770;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry {
|
|
||||||
background-color: #434c5e;
|
|
||||||
color: #eceff4;
|
|
||||||
border: 1px solid #4c566a;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
textview {
|
|
||||||
background-color: #272c36;
|
|
||||||
color: #a3be8c;
|
|
||||||
font-family: monospace;
|
|
||||||
padding: 8px;
|
|
||||||
}
|
|
||||||
"#;
|
|
||||||
|
|
||||||
pub fn load(display: >k4::gdk::Display) {
|
|
||||||
let provider = CssProvider::new();
|
|
||||||
provider.load_from_string(CSS);
|
|
||||||
gtk4::style_context_add_provider_for_display(
|
|
||||||
display,
|
|
||||||
&provider,
|
|
||||||
gtk4::STYLE_PROVIDER_PRIORITY_APPLICATION,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ grep airootfs_image_tool_options "$STAGE/profiledef.sh"
|
||||||
# created from skel (the live user and the installed user) then gets the same
|
# created from skel (the live user and the installed user) then gets the same
|
||||||
# versions `bakery list` reports here, fully offline. Copied at build time so the
|
# versions `bakery list` reports here, fully offline. Copied at build time so the
|
||||||
# binaries never bloat the git repo and always track the current bakery state.
|
# binaries never bloat the git repo and always track the current bakery state.
|
||||||
BREAD_BINS=(bakery bread breadd breadman breadbar breadbox breadbox-sync breadcrumbs breadpad)
|
BREAD_BINS=(bakery bread breadd breadman breadbar breadbox breadbox-sync breadcrumbs breadpad bread-theme)
|
||||||
LAPTOP_HOME="${LAPTOP_HOME:-$(getent passwd "${SUDO_USER:-$USER}" | cut -d: -f6)}"
|
LAPTOP_HOME="${LAPTOP_HOME:-$(getent passwd "${SUDO_USER:-$USER}" | cut -d: -f6)}"
|
||||||
BAKERY_BIN="$LAPTOP_HOME/.local/bin"
|
BAKERY_BIN="$LAPTOP_HOME/.local/bin"
|
||||||
BAKERY_STATE="$LAPTOP_HOME/.local/state/bakery"
|
BAKERY_STATE="$LAPTOP_HOME/.local/state/bakery"
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,9 @@ hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"),
|
||||||
-- ---------------------------------------------------------------------------
|
-- ---------------------------------------------------------------------------
|
||||||
hl.on("hyprland.start", function()
|
hl.on("hyprland.start", function()
|
||||||
local startup = {
|
local startup = {
|
||||||
|
-- Generate the shared bread GUI stylesheet first, so breadbar/breadbox/
|
||||||
|
-- bos-settings load it on start (they also live-reload if it changes).
|
||||||
|
"bread-theme generate",
|
||||||
-- Global dark theme: GTK4/libadwaita + GTK3 theme + icon + cursor.
|
-- Global dark theme: GTK4/libadwaita + GTK3 theme + icon + cursor.
|
||||||
"gsettings set org.gnome.desktop.interface color-scheme prefer-dark",
|
"gsettings set org.gnome.desktop.interface color-scheme prefer-dark",
|
||||||
"gsettings set org.gnome.desktop.interface gtk-theme Adwaita-dark",
|
"gsettings set org.gnome.desktop.interface gtk-theme Adwaita-dark",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue