Initial commit — TANINUX (camel): management app + distro packaging
- app: GTK System Settings (tsettings) + Software Hub (thub) + TUI - distro/: camel.toml manifest + MANIFEST.md (Arch + [tanin] repo model) - packaging/: taninux, tanin-desktop (niri metapackage), tanin-greet, tanin-libadwaita, tanin-setup - docs/, data/, LICENSE (GPL-3.0-or-later) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
# Maintainer: Karim <karim@gabrielevarano.ch>
|
||||
#
|
||||
# tanin-libadwaita — Fuji recolour for GTK4/libadwaita AND GTK3 (light + dark).
|
||||
# Recolours libadwaita apps (tsettings/thub, Nautilus, …) via named Adwaita
|
||||
# colors, and GTK3 apps (pavucontrol, nm-connection-editor, …) via adw-gtk3,
|
||||
# with pill-shaped controls. One switch covers both toolkits:
|
||||
# tanin-libadwaita {dark|light|auto|watch}
|
||||
pkgname=tanin-libadwaita
|
||||
pkgver=0.1.0
|
||||
pkgrel=1
|
||||
pkgdesc="TANINUX Fuji recolour for GTK4/libadwaita + GTK3 — light + dark, pills"
|
||||
arch=('any')
|
||||
url="https://taninux.kgva.ch"
|
||||
license=('GPL-3.0-or-later')
|
||||
depends=('glib2' 'adw-gtk3') # gsettings + GTK3 base theme for the recolour
|
||||
optdepends=('tanin-setup: seed the variant + start the color-scheme watcher on login')
|
||||
|
||||
package() {
|
||||
install -Dm644 "$startdir/gtk-4.0/dark.css" "$pkgdir/usr/share/tanin/libadwaita/gtk-4.0/dark.css"
|
||||
install -Dm644 "$startdir/gtk-4.0/light.css" "$pkgdir/usr/share/tanin/libadwaita/gtk-4.0/light.css"
|
||||
install -Dm644 "$startdir/gtk-3.0/dark.css" "$pkgdir/usr/share/tanin/libadwaita/gtk-3.0/dark.css"
|
||||
install -Dm644 "$startdir/gtk-3.0/light.css" "$pkgdir/usr/share/tanin/libadwaita/gtk-3.0/light.css"
|
||||
install -Dm755 "$startdir/tanin-libadwaita" "$pkgdir/usr/bin/tanin-libadwaita"
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
# tanin-libadwaita
|
||||
|
||||
Fuji recolour for **libadwaita / GTK4** — a **light** and a **dark** variant so
|
||||
the whole OS is covered. Recolours every libadwaita app (tsettings, thub,
|
||||
Nautilus, GNOME apps, …) by overriding Adwaita's *named colors*, and makes
|
||||
buttons/entries **pill-shaped** to match the bar and greeter.
|
||||
|
||||
## Files
|
||||
- `tanin-dark.css` → `/usr/share/tanin/libadwaita/tanin-dark.css`
|
||||
- `tanin-light.css` → `/usr/share/tanin/libadwaita/tanin-light.css`
|
||||
- `tanin-libadwaita` → `/usr/bin/tanin-libadwaita` — switch script
|
||||
|
||||
## Use
|
||||
```sh
|
||||
tanin-libadwaita dark # or: light
|
||||
```
|
||||
Symlinks the variant to `~/.config/gtk-4.0/gtk.css` and sets
|
||||
`color-scheme` + `accent-color`. A pre-existing real `gtk.css` is backed up to
|
||||
`gtk.css.pre-tanin` once.
|
||||
|
||||
## Why named-color overrides (not a full theme)
|
||||
libadwaita ignores `gtk-theme-name`; the supported way to restyle it is the
|
||||
user `gtk.css`, where overriding `@define-color accent_color` / `window_bg_color`
|
||||
/ `card_bg_color` / … recolours all libadwaita apps at once. There are no CSS
|
||||
media queries, so light/dark is two files the switch script flips between.
|
||||
|
||||
## Preview from the repo (isolated, no change to your config)
|
||||
```sh
|
||||
mkdir -p /tmp/t/gtk-4.0 && cp tanin-dark.css /tmp/t/gtk-4.0/gtk.css
|
||||
XDG_CONFIG_HOME=/tmp/t cage -s -- gnome-text-editor # or any libadwaita app
|
||||
```
|
||||
|
||||
## Palettes
|
||||
- **Dark:** bg `#0f0f0f`, fg `#f0f0f0`, accent `#a39ec4` (Fuji violet).
|
||||
- **Light:** bg `#f3f1ec`, fg `#2a2926`, accent `#6f67a8` (deeper violet for contrast).
|
||||
|
||||
## Notes
|
||||
- App content that uses its own style scheme (e.g. gnome-text-editor's
|
||||
GtkSourceView syntax theme) is NOT controlled here — that's app-internal.
|
||||
- GTK3 apps (incl. eww) aren't covered by this; they use `adw-gtk3` / their own
|
||||
CSS. A matching GTK3 `Tanin` theme could follow if wanted.
|
||||
@@ -0,0 +1,66 @@
|
||||
/* =========================================================================
|
||||
* tanin-libadwaita — Fuji DARK recolour for GTK3 (rides on adw-gtk3-dark).
|
||||
* Covers the gaps the libadwaita/GTK4 recolour can't reach: GTK3 apps
|
||||
* (pavucontrol, nm-connection-editor, …). Same palette as the GTK4 dark.
|
||||
* ========================================================================= */
|
||||
|
||||
/* libadwaita-style names (adw-gtk3 honours these) */
|
||||
@define-color accent_color #a39ec4;
|
||||
@define-color accent_bg_color #a39ec4;
|
||||
@define-color accent_fg_color #0f0f0f;
|
||||
@define-color window_bg_color #0f0f0f;
|
||||
@define-color window_fg_color #f0f0f0;
|
||||
@define-color view_bg_color #141414;
|
||||
@define-color view_fg_color #f0f0f0;
|
||||
@define-color headerbar_bg_color #0f0f0f;
|
||||
@define-color headerbar_fg_color #f0f0f0;
|
||||
@define-color card_bg_color #191919;
|
||||
@define-color card_fg_color #f0f0f0;
|
||||
@define-color popover_bg_color #191919;
|
||||
@define-color popover_fg_color #f0f0f0;
|
||||
@define-color dialog_bg_color #141414;
|
||||
@define-color dialog_fg_color #f0f0f0;
|
||||
@define-color sidebar_bg_color #131313;
|
||||
|
||||
/* legacy GTK3 / Adwaita names */
|
||||
@define-color theme_bg_color #0f0f0f;
|
||||
@define-color theme_fg_color #f0f0f0;
|
||||
@define-color theme_base_color #141414;
|
||||
@define-color theme_text_color #f0f0f0;
|
||||
@define-color theme_selected_bg_color #a39ec4;
|
||||
@define-color theme_selected_fg_color #0f0f0f;
|
||||
@define-color insensitive_bg_color #161616;
|
||||
@define-color insensitive_fg_color #6a6a6a;
|
||||
@define-color insensitive_base_color #121212;
|
||||
@define-color borders rgba(240, 240, 240, 0.10);
|
||||
|
||||
@define-color destructive_color #e0a3a3;
|
||||
@define-color success_color #9ec4a3;
|
||||
@define-color warning_color #c4bd9e;
|
||||
@define-color error_color #e0a3a3;
|
||||
|
||||
/* pill-shaped controls */
|
||||
button,
|
||||
entry,
|
||||
combobox button,
|
||||
spinbutton,
|
||||
notebook > header > tabs > tab { border-radius: 999px; }
|
||||
|
||||
/* Force the Fuji accent. adw-gtk3 otherwise follows the GNOME accent-color
|
||||
* gsetting (would stay blue), so we override the accented widgets explicitly. */
|
||||
scale highlight,
|
||||
scale trough progress,
|
||||
progressbar progress,
|
||||
levelbar block.filled { background-color: @accent_color; }
|
||||
checkbutton check:checked,
|
||||
radiobutton radio:checked,
|
||||
check:checked, radio:checked { background-color: @accent_color; border-color: @accent_color; }
|
||||
switch:checked { background-color: @accent_color; }
|
||||
notebook > header tab:checked { box-shadow: inset 0 -3px @accent_color; }
|
||||
notebook > header tab:checked label { color: @accent_color; }
|
||||
row:selected, list row:selected,
|
||||
treeview.view:selected, .view:selected,
|
||||
menuitem:hover, menu menuitem:hover,
|
||||
*:selected { background-color: @accent_color; color: @accent_fg_color; }
|
||||
button.suggested-action { background-color: @accent_color; color: @accent_fg_color; }
|
||||
entry:focus, entry:focus-within { border-color: @accent_color; }
|
||||
@@ -0,0 +1,65 @@
|
||||
/* =========================================================================
|
||||
* tanin-libadwaita — Fuji LIGHT recolour for GTK3 (rides on adw-gtk3).
|
||||
* Same warm Fuji light palette as the GTK4 light variant.
|
||||
* ========================================================================= */
|
||||
|
||||
/* libadwaita-style names (adw-gtk3 honours these) */
|
||||
@define-color accent_color #6f67a8;
|
||||
@define-color accent_bg_color #6f67a8;
|
||||
@define-color accent_fg_color #ffffff;
|
||||
@define-color window_bg_color #f3f1ec;
|
||||
@define-color window_fg_color #2a2926;
|
||||
@define-color view_bg_color #faf8f4;
|
||||
@define-color view_fg_color #2a2926;
|
||||
@define-color headerbar_bg_color #ece8e1;
|
||||
@define-color headerbar_fg_color #2a2926;
|
||||
@define-color card_bg_color #ffffff;
|
||||
@define-color card_fg_color #2a2926;
|
||||
@define-color popover_bg_color #ffffff;
|
||||
@define-color popover_fg_color #2a2926;
|
||||
@define-color dialog_bg_color #faf8f4;
|
||||
@define-color dialog_fg_color #2a2926;
|
||||
@define-color sidebar_bg_color #ece8e1;
|
||||
|
||||
/* legacy GTK3 / Adwaita names */
|
||||
@define-color theme_bg_color #f3f1ec;
|
||||
@define-color theme_fg_color #2a2926;
|
||||
@define-color theme_base_color #faf8f4;
|
||||
@define-color theme_text_color #2a2926;
|
||||
@define-color theme_selected_bg_color #6f67a8;
|
||||
@define-color theme_selected_fg_color #ffffff;
|
||||
@define-color insensitive_bg_color #ebe7e0;
|
||||
@define-color insensitive_fg_color #9b968c;
|
||||
@define-color insensitive_base_color #f1eee8;
|
||||
@define-color borders rgba(0, 0, 0, 0.12);
|
||||
|
||||
@define-color destructive_color #b04848;
|
||||
@define-color success_color #4f7a57;
|
||||
@define-color warning_color #8a7f3a;
|
||||
@define-color error_color #b04848;
|
||||
|
||||
/* pill-shaped controls */
|
||||
button,
|
||||
entry,
|
||||
combobox button,
|
||||
spinbutton,
|
||||
notebook > header > tabs > tab { border-radius: 999px; }
|
||||
|
||||
/* Force the Fuji accent. adw-gtk3 otherwise follows the GNOME accent-color
|
||||
* gsetting, so we override the accented widgets explicitly. */
|
||||
scale highlight,
|
||||
scale trough progress,
|
||||
progressbar progress,
|
||||
levelbar block.filled { background-color: @accent_color; }
|
||||
checkbutton check:checked,
|
||||
radiobutton radio:checked,
|
||||
check:checked, radio:checked { background-color: @accent_color; border-color: @accent_color; }
|
||||
switch:checked { background-color: @accent_color; }
|
||||
notebook > header tab:checked { box-shadow: inset 0 -3px @accent_color; }
|
||||
notebook > header tab:checked label { color: @accent_color; }
|
||||
row:selected, list row:selected,
|
||||
treeview.view:selected, .view:selected,
|
||||
menuitem:hover, menu menuitem:hover,
|
||||
*:selected { background-color: @accent_color; color: @accent_fg_color; }
|
||||
button.suggested-action { background-color: @accent_color; color: @accent_fg_color; }
|
||||
entry:focus, entry:focus-within { border-color: @accent_color; }
|
||||
@@ -0,0 +1,74 @@
|
||||
/* =========================================================================
|
||||
* tanin-theme — Fuji recolour for libadwaita / GTK4.
|
||||
* Drop-in at ~/.config/gtk-4.0/gtk.css. Overrides libadwaita's NAMED colors,
|
||||
* which recolours every libadwaita app (tsettings/thub, Nautilus, …) without a
|
||||
* full custom theme. Palette is 1:1 with eww.scss / the greeter.
|
||||
* ========================================================================= */
|
||||
|
||||
/* ---- Fuji palette -------------------------------------------------------- */
|
||||
@define-color fuji_bg #0f0f0f;
|
||||
@define-color fuji_bg_alt #191919;
|
||||
@define-color fuji_bg_hi #242424;
|
||||
@define-color fuji_fg #f0f0f0;
|
||||
@define-color fuji_muted #8a8a8a;
|
||||
@define-color fuji_accent #a39ec4;
|
||||
|
||||
/* ---- accent -------------------------------------------------------------- */
|
||||
@define-color accent_color #a39ec4;
|
||||
@define-color accent_bg_color #a39ec4;
|
||||
@define-color accent_fg_color #0f0f0f; /* dark text on the light violet */
|
||||
|
||||
/* ---- window / base surfaces --------------------------------------------- */
|
||||
@define-color window_bg_color #0f0f0f;
|
||||
@define-color window_fg_color #f0f0f0;
|
||||
@define-color view_bg_color #141414;
|
||||
@define-color view_fg_color #f0f0f0;
|
||||
|
||||
/* ---- headerbar ----------------------------------------------------------- */
|
||||
@define-color headerbar_bg_color #0f0f0f;
|
||||
@define-color headerbar_fg_color #f0f0f0;
|
||||
@define-color headerbar_border_color #f0f0f0;
|
||||
@define-color headerbar_backdrop_color #0f0f0f;
|
||||
@define-color headerbar_shade_color rgba(0, 0, 0, 0.5);
|
||||
|
||||
/* ---- cards / dialogs / popovers / sidebar ------------------------------- */
|
||||
@define-color card_bg_color #191919;
|
||||
@define-color card_fg_color #f0f0f0;
|
||||
@define-color card_shade_color rgba(0, 0, 0, 0.45);
|
||||
@define-color dialog_bg_color #141414;
|
||||
@define-color dialog_fg_color #f0f0f0;
|
||||
@define-color popover_bg_color #191919;
|
||||
@define-color popover_fg_color #f0f0f0;
|
||||
@define-color sidebar_bg_color #131313;
|
||||
@define-color sidebar_fg_color #f0f0f0;
|
||||
@define-color sidebar_backdrop_color #0f0f0f;
|
||||
@define-color sidebar_shade_color rgba(0, 0, 0, 0.45);
|
||||
|
||||
/* ---- semantic ------------------------------------------------------------ */
|
||||
@define-color destructive_color #e0a3a3;
|
||||
@define-color destructive_bg_color #b45c5c;
|
||||
@define-color destructive_fg_color #0f0f0f;
|
||||
@define-color success_color #9ec4a3;
|
||||
@define-color warning_color #c4bd9e;
|
||||
@define-color error_color #e0a3a3;
|
||||
|
||||
@define-color shade_color rgba(0, 0, 0, 0.4);
|
||||
@define-color scrollbar_outline_color rgba(255, 255, 255, 0.06);
|
||||
|
||||
/* ---- pill-shaped controls (Fuji house style) --------------------------- *
|
||||
* Buttons, entries and toggles become stadium pills like the bar/greeter. */
|
||||
button,
|
||||
button.toggle,
|
||||
menubutton > button,
|
||||
dropdown > button,
|
||||
splitbutton > button,
|
||||
entry,
|
||||
spinbutton,
|
||||
.pill {
|
||||
border-radius: 999px;
|
||||
min-height: 0;
|
||||
}
|
||||
/* containers stay softly rounded, not stadium-shaped */
|
||||
.card,
|
||||
popover > contents,
|
||||
.osd { border-radius: 14px; }
|
||||
@@ -0,0 +1,71 @@
|
||||
/* =========================================================================
|
||||
* tanin-libadwaita — Fuji LIGHT recolour for libadwaita / GTK4.
|
||||
* Warm "Yuki/Fuji" light palette (1:1 with eww.scss light tokens), deeper
|
||||
* violet accent so it reads on white. Pair with color-scheme=prefer-light.
|
||||
* ========================================================================= */
|
||||
|
||||
/* ---- Fuji light palette -------------------------------------------------- */
|
||||
@define-color fuji_bg #f3f1ec; /* soft warm white */
|
||||
@define-color fuji_bg_alt #e8e4dc; /* cards / tiles */
|
||||
@define-color fuji_bg_hi #ddd8ce; /* hover */
|
||||
@define-color fuji_fg #2a2926; /* near-black ink */
|
||||
@define-color fuji_muted #6f6b62;
|
||||
@define-color fuji_accent #6f67a8; /* deeper violet — readable on light */
|
||||
|
||||
/* ---- accent -------------------------------------------------------------- */
|
||||
@define-color accent_color #6f67a8;
|
||||
@define-color accent_bg_color #6f67a8;
|
||||
@define-color accent_fg_color #ffffff;
|
||||
|
||||
/* ---- window / base surfaces --------------------------------------------- */
|
||||
@define-color window_bg_color #f3f1ec;
|
||||
@define-color window_fg_color #2a2926;
|
||||
@define-color view_bg_color #faf8f4;
|
||||
@define-color view_fg_color #2a2926;
|
||||
|
||||
/* ---- headerbar ----------------------------------------------------------- */
|
||||
@define-color headerbar_bg_color #ece8e1;
|
||||
@define-color headerbar_fg_color #2a2926;
|
||||
@define-color headerbar_border_color #2a2926;
|
||||
@define-color headerbar_backdrop_color #f3f1ec;
|
||||
@define-color headerbar_shade_color rgba(0, 0, 0, 0.08);
|
||||
|
||||
/* ---- cards / dialogs / popovers / sidebar ------------------------------- */
|
||||
@define-color card_bg_color #ffffff;
|
||||
@define-color card_fg_color #2a2926;
|
||||
@define-color card_shade_color rgba(0, 0, 0, 0.07);
|
||||
@define-color dialog_bg_color #faf8f4;
|
||||
@define-color dialog_fg_color #2a2926;
|
||||
@define-color popover_bg_color #ffffff;
|
||||
@define-color popover_fg_color #2a2926;
|
||||
@define-color sidebar_bg_color #ece8e1;
|
||||
@define-color sidebar_fg_color #2a2926;
|
||||
@define-color sidebar_backdrop_color #f3f1ec;
|
||||
@define-color sidebar_shade_color rgba(0, 0, 0, 0.07);
|
||||
|
||||
/* ---- semantic ------------------------------------------------------------ */
|
||||
@define-color destructive_color #b04848;
|
||||
@define-color destructive_bg_color #b04848;
|
||||
@define-color destructive_fg_color #ffffff;
|
||||
@define-color success_color #4f7a57;
|
||||
@define-color warning_color #8a7f3a;
|
||||
@define-color error_color #b04848;
|
||||
|
||||
@define-color shade_color rgba(0, 0, 0, 0.07);
|
||||
@define-color scrollbar_outline_color rgba(0, 0, 0, 0.08);
|
||||
|
||||
/* ---- pill-shaped controls (Fuji house style) --------------------------- */
|
||||
button,
|
||||
button.toggle,
|
||||
menubutton > button,
|
||||
dropdown > button,
|
||||
splitbutton > button,
|
||||
entry,
|
||||
spinbutton,
|
||||
.pill {
|
||||
border-radius: 999px;
|
||||
min-height: 0;
|
||||
}
|
||||
.card,
|
||||
popover > contents,
|
||||
.osd { border-radius: 14px; }
|
||||
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env bash
|
||||
# tanin-libadwaita {dark|light|auto|watch}
|
||||
# Activates the Fuji recolour for BOTH GTK4/libadwaita and GTK3 by symlinking
|
||||
# the chosen variant into ~/.config/gtk-{4.0,3.0}/gtk.css.
|
||||
# dark|light set that mode (and the GNOME color-scheme + gtk-theme)
|
||||
# auto follow the CURRENT color-scheme once (don't change it)
|
||||
# watch follow color-scheme changes live (daemon) — the appearance
|
||||
# toggle in settings then drives light/dark automatically
|
||||
set -euo pipefail
|
||||
|
||||
SHARE="${TANIN_LIBADWAITA_DIR:-/usr/share/tanin/libadwaita}"
|
||||
CFG="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||
|
||||
# Symlink both toolkits' gtk.css to the variant + pick the matching adw-gtk3.
|
||||
# Does NOT touch color-scheme (so it's safe to call from a color-scheme watcher).
|
||||
link_variant() {
|
||||
local mode="$1" gtktheme
|
||||
case "$mode" in
|
||||
dark) gtktheme="adw-gtk3-dark" ;;
|
||||
light) gtktheme="adw-gtk3" ;;
|
||||
*) return 2 ;;
|
||||
esac
|
||||
local v src dst
|
||||
for v in gtk-4.0 gtk-3.0; do
|
||||
src="$SHARE/$v/$mode.css"; dst="$CFG/$v/gtk.css"
|
||||
[ -f "$src" ] || continue
|
||||
mkdir -p "$CFG/$v"
|
||||
if [ -e "$dst" ] && [ ! -L "$dst" ] && [ ! -e "$dst.pre-tanin" ]; then
|
||||
cp -a "$dst" "$dst.pre-tanin" # back up a real file once
|
||||
fi
|
||||
ln -sf "$src" "$dst"
|
||||
done
|
||||
gsettings set org.gnome.desktop.interface gtk-theme "$gtktheme" 2>/dev/null || true
|
||||
gsettings set org.gnome.desktop.interface accent-color "purple" 2>/dev/null || true
|
||||
echo "tanin-libadwaita: $mode"
|
||||
}
|
||||
|
||||
current_mode() {
|
||||
case "$(gsettings get org.gnome.desktop.interface color-scheme 2>/dev/null)" in
|
||||
*prefer-light*) echo light ;;
|
||||
*) echo dark ;;
|
||||
esac
|
||||
}
|
||||
|
||||
case "${1:-auto}" in
|
||||
dark|light)
|
||||
link_variant "$1"
|
||||
gsettings set org.gnome.desktop.interface color-scheme \
|
||||
"$([ "$1" = light ] && echo prefer-light || echo prefer-dark)" 2>/dev/null || true
|
||||
;;
|
||||
auto)
|
||||
link_variant "$(current_mode)"
|
||||
;;
|
||||
watch)
|
||||
link_variant "$(current_mode)"
|
||||
gsettings monitor org.gnome.desktop.interface color-scheme | while read -r _; do
|
||||
link_variant "$(current_mode)"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
echo "usage: tanin-libadwaita {dark|light|auto|watch}" >&2; exit 2 ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user