Theme fastfetch from the active palette

This commit is contained in:
2026-09-21 02:10:39 +00:00
parent 5372c6ea29
commit 8d8dee2342
6 changed files with 81 additions and 7 deletions
+4 -2
View File
@@ -12,9 +12,11 @@ LOGO_FILE="$HOME/.config/blob/branding/about.txt"
FIT_FILE="$HOME/.local/state/blob/windows/about.fit" FIT_FILE="$HOME/.local/state/blob/windows/about.fit"
# A user-level fastfetch config can relocate or restyle the logo in ways this # A user-level fastfetch config can relocate or restyle the logo in ways this
# measurement cannot see, so leave sizing to the float rule in that case. # measurement cannot see, so leave sizing to the float rule in that case. Blob's
# own config is the symlink the installer makes into the current theme, and the
# measurements below are written against it.
custom_fastfetch_config() { custom_fastfetch_config() {
[[ -f $HOME/.config/fastfetch/config.jsonc ]] [[ -f $HOME/.config/fastfetch/config.jsonc && ! -L $HOME/.config/fastfetch/config.jsonc ]]
} }
# wc -L counts display columns only in a UTF-8 locale. A session that never set # wc -L counts display columns only in a UTF-8 locale. A session that never set
+1
View File
@@ -203,6 +203,7 @@ add_template_value() {
if [[ $value =~ ^#[0-9A-Fa-f]{6}$ ]]; then if [[ $value =~ ^#[0-9A-Fa-f]{6}$ ]]; then
rgb=$(hex_to_rgb "$value") rgb=$(hex_to_rgb "$value")
printf 's|{{ %s_rgb }}|%s|g\n' "$key" "$rgb" >>"$sed_script" printf 's|{{ %s_rgb }}|%s|g\n' "$key" "$rgb" >>"$sed_script"
printf 's|{{ %s_ansi }}|38;2;%s|g\n' "$key" "${rgb//,/;}" >>"$sed_script"
fi fi
} }
+50
View File
@@ -0,0 +1,50 @@
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo": {
"type": "file",
"source": "~/.config/blob/branding/about.txt",
"padding": {
"top": 2,
"left": 2,
"right": 6
}
},
"display": {
"separator": " ",
"key": {
"width": 9
},
"color": {
"title": "{{ accent_ansi }}",
"keys": "{{ accent_ansi }}",
"output": "{{ foreground_ansi }}"
}
},
"modules": [
{
"type": "title",
"format": "{user-name}@{host-name}"
},
"break",
{ "type": "os", "key": "os" },
{ "type": "kernel", "key": "kernel" },
{ "type": "uptime", "key": "uptime" },
{ "type": "packages", "key": "packages" },
{ "type": "shell", "key": "shell" },
"break",
{ "type": "wm", "key": "wm" },
{ "type": "terminal", "key": "term" },
{ "type": "display", "key": "display" },
"break",
{ "type": "cpu", "key": "cpu" },
{ "type": "gpu", "key": "gpu" },
{ "type": "memory", "key": "memory" },
{ "type": "disk", "key": "disk" },
"break",
{
"type": "colors",
"symbol": "circle",
"paddingLeft": 9
}
]
}
+24 -5
View File
@@ -30,13 +30,14 @@ the shell and the CLI never disagree about what a slot means.
Each rendered file is picked up differently: `foot.ini` and `kitty.conf` by an Each rendered file is picked up differently: `foot.ini` and `kitty.conf` by an
`include` in the shipped terminal config, `hyprland.lua` through Hyprland's Lua `include` in the shipped terminal config, `hyprland.lua` through Hyprland's Lua
module path, `shell.toml` and `chromium.theme` read straight from the state module path, `shell.toml` and `chromium.theme` read straight from the state
directory, and `btop.theme`, `neovim.lua`, `gtk.css` and `starship.toml` directory, and `btop.theme`, `neovim.lua`, `gtk.css`, `starship.toml` and
through symlinks the installer makes into those apps' own config trees. `fastfetch.jsonc` through symlinks the installer makes into those apps' own
config trees.
`default/themed/*.tpl` are rendered per theme into `default/themed/*.tpl` are rendered per theme into
`~/.local/state/blob/current/theme/`. Eleven ship: foot, kitty, btop, chromium, `~/.local/state/blob/current/theme/`. Twelve ship: foot, kitty, btop, chromium,
hyprland, the screenshare picker, neovim, `shell.toml`, zen, `gtk.css`, and hyprland, the screenshare picker, neovim, `shell.toml`, zen, `gtk.css`,
`starship.toml`. `starship.toml`, and `fastfetch.jsonc`.
An app picks its colors up in one of two ways. Most include the generated file An app picks its colors up in one of two ways. Most include the generated file
directly, so nothing has to run: directly, so nothing has to run:
@@ -66,6 +67,24 @@ so an app that was already open keeps its old colors until it is restarted.
Adding a template for another app means dropping a `.tpl` in `default/themed/` Adding a template for another app means dropping a `.tpl` in `default/themed/`
and, if it cannot include a file, adding an applier to that list. and, if it cannot include a file, adding an applier to that list.
## Tokens
A template may reference `{{ key }}` for any resolved palette key, plus three
derived forms: `{{ key_strip }}` without the leading `#`, `{{ key_rgb }}` as
`R,G,B`, and `{{ key_ansi }}` as `38;2;R;G;B`, which is what a terminal program
that takes a raw escape sequence rather than a hex color needs.
## About
`fastfetch.jsonc` is linked to `~/.config/fastfetch/config.jsonc`. It draws
`~/.config/blob/branding/about.txt` as the logo, with 2 columns of padding to
its left and 6 between it and the modules - the exact numbers
`blob-launch-about` measures the About window against, so replacing the logo
resizes the window to fit it. Title and keys take the theme's accent.
A config of your own at that path is a regular file rather than the symlink, and
`blob-launch-about` leaves the window sizing alone when it finds one.
## The prompt ## The prompt
`starship.toml` is linked to `~/.config/starship.toml`. It carries a `starship.toml` is linked to `~/.config/starship.toml`. It carries a
+1
View File
@@ -134,6 +134,7 @@ link_app_themes() {
link_theme_file gtk.css "$config_dir/gtk-3.0/gtk.css" "gtk-3.0 theme" link_theme_file gtk.css "$config_dir/gtk-3.0/gtk.css" "gtk-3.0 theme"
link_theme_file gtk.css "$config_dir/gtk-4.0/gtk.css" "gtk-4.0 theme" link_theme_file gtk.css "$config_dir/gtk-4.0/gtk.css" "gtk-4.0 theme"
link_theme_file starship.toml "$config_dir/starship.toml" "starship prompt" link_theme_file starship.toml "$config_dir/starship.toml" "starship prompt"
link_theme_file fastfetch.jsonc "$config_dir/fastfetch/config.jsonc" "fastfetch"
if [[ -d $config_dir/nvim/lua/plugins ]]; then if [[ -d $config_dir/nvim/lua/plugins ]]; then
link_theme_file neovim.lua "$config_dir/nvim/lua/plugins/theme.lua" "neovim theme" link_theme_file neovim.lua "$config_dir/nvim/lua/plugins/theme.lua" "neovim theme"
+1
View File
@@ -114,6 +114,7 @@ for lua in hyprland.lua monitors.lua input.lua looknfeel.lua bindings.lua autost
done done
[[ -L $config_dir/starship.toml ]] && restore_or_remove "$config_dir/starship.toml" "starship.toml" [[ -L $config_dir/starship.toml ]] && restore_or_remove "$config_dir/starship.toml" "starship.toml"
[[ -L $config_dir/fastfetch/config.jsonc ]] && restore_or_remove "$config_dir/fastfetch/config.jsonc" "fastfetch/config.jsonc"
for gtk in gtk-3.0 gtk-4.0; do for gtk in gtk-3.0 gtk-4.0; do
[[ -L $config_dir/$gtk/gtk.css ]] && restore_or_remove "$config_dir/$gtk/gtk.css" "$gtk/gtk.css" [[ -L $config_dir/$gtk/gtk.css ]] && restore_or_remove "$config_dir/$gtk/gtk.css" "$gtk/gtk.css"