Connect the generated theme files to btop, Neovim, and kitty

This commit is contained in:
2026-09-20 13:31:43 -04:00
parent f00d09eb02
commit 52e747fe3e
7 changed files with 62 additions and 91 deletions
+1 -1
View File
@@ -78,7 +78,7 @@ It runs these steps, in this order, and every one of them is idempotent:
| 2. `BLOB_PATH` | symlinks `~/.local/share/blob` to this checkout |
| 3. Packages | installs what is missing from `packages/`, bootstrapping `yay` first on a machine that has no AUR helper |
| 4. Config | copies `hypr/`, the themed app configs, `blob/shell.json`, the uwsm environment, and the icon font into `~/.config` |
| 5. First theme | links `~/wallpapers` to the checkout, applies `flats` headless, and picks a background, so the first login is not a blank desktop |
| 5. First theme | links `~/wallpapers` to the checkout, applies `flats` headless, picks a background, and links the btop and Neovim theme files, so the first login is not a blank desktop |
| 6. User units | installs the session services into `~/.config/systemd/user` and enables them |
| 7. systemd drop-ins | writes the shutdown timeouts, oomd thresholds, plocate prune paths, and sleep hooks under `/etc` |
| 8. System services | enables NetworkManager, resolved, bluetooth, cups, avahi, docker, power-profiles-daemon, and oomd, and masks `NetworkManager-wait-online` |
-83
View File
@@ -1,83 +0,0 @@
# vim:ft=kitty
## name: Flats
## upstream: themes/flats/colors.toml
## blurb: Dark theme with a soft blue accent. Hand-translated from the
## Omarchy colors.toml, since macOS has no omarchy-theme-set.
# The basic colors
foreground #cbd2d9
background #0f1012
selection_foreground #0f1012
selection_background #7babe3
# Cursor colors
cursor #cbd2d9
cursor_text_color #0f1012
# URL underline color when hovering with mouse
url_color #7babe3
# Kitty window border colors
active_border_color #7babe3
inactive_border_color #949494
bell_border_color #d58638
# OS Window titlebar colors
wayland_titlebar_color system
macos_titlebar_color system
# Tab bar colors
active_tab_foreground #0f1012
active_tab_background #7babe3
inactive_tab_foreground #cbd2d9
inactive_tab_background #0f1012
tab_bar_background #000000
# Colors for marks (marked text in the terminal)
mark1_foreground #0f1012
mark1_background #7babe3
mark2_foreground #0f1012
mark2_background #38d586
mark3_foreground #0f1012
mark3_background #d58638
# The 16 terminal colors
#
# Note: flats maps the ANSI slots unconventionally — color4 (blue) holds a
# magenta and color6 (cyan) holds the blue, among others. Kept faithful to
# colors.toml so both machines render identically; the comments below name
# the ANSI slot, not the resulting hue.
# black
color0 #000000
color8 #949494
# red
color1 #d53838
color9 #d53838
# green
color2 #38d4d5
color10 #38d4d5
# yellow
color3 #d58638
color11 #d58638
# blue
color4 #d53886
color12 #d53886
# magenta
color5 #38d586
color13 #38d586
# cyan
color6 #3886d5
color14 #3886d5
# white
color7 #d4d4d4
color15 #d4d4d4
+4 -5
View File
@@ -1,11 +1,10 @@
# vim:ft=kitty
#
# kitty config for macOS. The Arch side of these dotfiles gets its terminal
# colors from omarchy-theme-set rewriting the active theme; there is no
# omarchy here, so current-theme.conf is checked in alongside this file and
# generated by hand from themes/<name>/colors.toml.
# Colors come from the active theme, the same way foot.ini takes them: the
# theme pipeline renders default/themed/kitty.conf.tpl into the current-theme
# directory, and blob-restart-terminal signals kitty to reload it.
include current-theme.conf
include ~/.local/state/blob/current/theme/kitty.conf
# Fonts
+6 -2
View File
@@ -37,8 +37,12 @@ with `--check`.
`wallpapers/`, `flats` is applied with `BLOB_THEME_HEADLESS=1` (no shell or
session bus exists yet), and the background symlink is pointed at the first
image in `~/wallpapers`. Without this the first login has no palette and no
wallpaper, which draws as a black desktop. All three steps are skipped when a
theme, a background or a wallpaper directory of your own is already there.
wallpaper, which draws as a black desktop. It then links the per-app theme
files the pipeline renders but no app would otherwise find:
`~/.config/btop/themes/current.theme` (btop's `color_theme = "current"`) and,
only when `~/.config/nvim/lua/plugins` already exists, `theme.lua` there.
Every step is skipped when a theme, a background, a wallpaper directory or a
theme file of your own is already in place.
6. **User units** land in `~/.config/systemd/user` and are enabled, not started:
they are all `WantedBy=graphical-session.target`, so they come up with the
session. `blob-speaker-tuning.service` is left out, because
+6
View File
@@ -27,6 +27,12 @@ the shell and the CLI never disagree about what a slot means.
## Templates
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
module path, `shell.toml` and `chromium.theme` read straight from the state
directory, and `btop.theme` and `neovim.lua` through symlinks the installer
makes into those apps' own config trees.
`default/themed/*.tpl` are rendered per theme into
`~/.local/state/blob/current/theme/`. Nine ship: foot, kitty, btop, chromium,
hyprland, the screenshare picker, neovim, `shell.toml`, and zen.
+1
View File
@@ -70,6 +70,7 @@ install_zen_config
link_wallpapers
install_default_theme
install_default_background
link_app_themes
enable_system_services
mask_system_services
+44
View File
@@ -90,3 +90,47 @@ install_default_background() {
ln -nsf "$first" "$link"
say "bg $(basename "$first")"
}
# The theme pipeline renders one file per app into the current-theme directory,
# but each app only ever reads its own config tree. These links are what join
# the two. Without them a theme switch silently leaves the app on stock colors,
# because nothing errors: the app just never sees the generated file.
link_theme_file() {
local theme_file="$1" dest="$2" label="$3"
local target="$current_state_dir/theme/$theme_file"
if [[ -L $dest ]] && [[ "$(readlink "$dest")" == "$target" ]]; then
say "ok $label"
return 0
fi
if [[ -e $dest && ! -L $dest ]] && [[ $force == false ]]; then
note_change
say "DIFF $label (own file kept; --force to replace)"
return 0
fi
note_change
if [[ $check == true ]]; then
say "would link $label"
return 0
fi
mkdir -p "$(dirname "$dest")"
ln -nsf "$target" "$dest"
say "link $label"
}
# btop reads color_theme = "current" out of its own themes directory, and
# Neovim loads whatever theme.lua its plugin directory holds. Neovim is only
# linked when that directory already exists: Blob ships no Neovim config, so
# creating the tree would be inventing a layout the user has not chosen.
link_app_themes() {
link_theme_file btop.theme "$config_dir/btop/themes/current.theme" "btop theme"
if [[ -d $config_dir/nvim/lua/plugins ]]; then
link_theme_file neovim.lua "$config_dir/nvim/lua/plugins/theme.lua" "neovim theme"
else
say "SKIP neovim theme (no ~/.config/nvim/lua/plugins)"
fi
}