Skip to content

✨ feat: theme fastfetch and starship, replace stacked notifications and warn on low battery - #10

Merged
anthonyportugal merged 9 commits into
mainfrom
feat/visual-polish
Nov 14, 2026
Merged

anthonyportugal merged 9 commits into
mainfrom
feat/visual-polish

Conversation

@anthonyportugal

Copy link
Copy Markdown
Owner

Second part of the F6c visual polish: fastfetch and starship follow the theme, fuzzel and wlogout use the accent as the only emphasis, notifications replace each other instead of stacking, laptops get a low battery warning, and btop stops rewriting the repository.

Terminal (cli)

  • fastfetch:
    • A new logo: a gothic window with a moon and stars, a cat on the sill and a candle.
    • The info is grouped into sistema, escritorio, desarrollo and hardware, with bars for memory and disk; stack lists the installed node/go/rust versions.
    • Local IP, resolution and login manager are left out.
    • fastfetch has no include, so the theme renders fastfetch/args (the accent and logo colors) and a zsh fastfetch function passes them before the caller's arguments. Without a theme, the ANSI colors apply.
  • starship:
    • The theme renders a palette that redefines the color names starship.toml already uses.
    • A render hook writes ~/.cache/dotfiles/starship.toml with that palette selected.
    • zsh uses the copy while it is not older than starship.toml.
    • A palette chosen in starship.toml itself wins.
  • btop: save_config_on_exit = false. btop.conf is a link into the repository, and saving on exit once dropped the GPU boxes from the tracked file.

MangoWM

  • fuzzel: matches are highlighted in the accent instead of pink.
  • wlogout:
    • Buttons share the 10px radius of the rest of the desktop.
    • The focused button gets an accent border, label and icon (icons/*-hover.svg, renamed from *-dark.svg).
    • The fixed white is now the theme's foreground.
  • Notifications:
    • mako ignores the x-canonical-private-synchronous hint, so every volume or brightness press stacked a new notification.
    • mangowm_notify_replace keeps one notification per channel through notify-send --replace-id, under a lock so key repeat cannot race.
    • Used by the microphone, toggles, Wi-Fi progress, recording, wallpaper and monitors.
  • Volume/brightness overlay:
    • Bottom centre, with the level as an accent bar (dim when muted).
    • 1.5 s, and still shown in do not disturb.
  • mako:
    • Repeated notifications of an app group with a count.
    • Low urgency is quieter and shorter; critical ones stay until dismissed.
  • Low battery:
    • A warning at 15 % and a critical alert at 5 %, once per discharge; plugging in re-arms them.
    • Runs as a session unit only when a battery exists.
    • An alert that could not be shown is retried.

Engine

  • switch transactions now track .cache/dotfiles, so a failed migration also rolls back the themed starship config, like the bat cache.

Testing

  • tests/theme-apps-smoke.sh:
    • the fastfetch args and wrapper;
    • the config parses and shows its sections;
    • the starship palette, its hook and the zsh selection, and the real starship applies the palette's red.
  • tests/theme-schema-smoke.sh: the fuzzel match color and the wlogout icons for all 50 palettes.
  • layers/wm/mangowm/tests/waybar-smoke.sh:
    • OSD categories and values, replacement per channel, and key-repeat concurrency;
    • the mako sections, validated with the real mako when it is installed;
    • the battery thresholds, the retry after a failed send, and no warning without a battery.
  • tests/cli-tools-smoke.sh: btop does not save on exit.
  • tests/smoke.sh passes, including the failed-migration rollback in setup-smoke.

After merging

Run dotfiles sync, then systemctl --user restart mangowm-waybar mangowm-mako and open a new shell. The battery unit starts at the next login.

…cent

A gothic window with a moon, stars, a cat on the sill and a candle. The info is grouped into sistema, escritorio, desarrollo and hardware, with bars for memory and disk; the local IP, resolution and login manager are left out. fastfetch has no include, so the theme renders the accent as arguments that a zsh wrapper passes before the caller's own.
starship has no include, so a render hook writes starship.toml with palette = "dotfiles" and the rendered palette appended, which redefines the color names the prompt already uses. zsh selects that copy while it is not older than starship.toml, and a palette chosen in starship.toml itself wins.
…logout

fuzzel highlights matches with the accent instead of pink. wlogout buttons share the 10px radius of the bar, menus and notifications, and the focused one gets an accent border, label and icon (icons/*-hover.svg) instead of a full accent fill; the fixed white is now the theme's foreground.
…dd a volume/brightness overlay

mako ignores the x-canonical-private-synchronous hint, so every volume or brightness press added a notification. A per-channel helper now replaces the previous one with notify-send --replace-id, and volume/brightness use a bottom-centre overlay with the level as an accent bar (dim when muted) that stays visible in do not disturb. mako groups repeated notifications with a count and styles low and critical urgency.
A session unit, started only when a battery exists, checks every minute. Each threshold warns once per discharge, the critical alert replaces the warning, and plugging in re-arms both.
btop.conf is a link into the repository, so saving on exit turned a toggle in btop (it dropped the GPU boxes) into a repository change. Settings changed inside btop now last until it exits.
mangowm_notify_replace never fails, so the battery check marked a threshold as warned even when notify-send failed (no notification daemon) and never warned again in that discharge. A new mangowm_notify_send reports the failure; the battery alert uses it and retries on the next check.
…a failed switch

The starship render hook writes ~/.cache/dotfiles/starship.toml when a theme renders, also during a migration. A failed switch restored everything else but left that file behind; the transaction now tracks .cache/dotfiles like the bat cache.
Overlapping calls read the same stale id and each created a notification. A lock on the channel keeps reading, sending and saving the id together.
@anthonyportugal
anthonyportugal merged commit 5f5b8e4 into main Nov 14, 2026
10 of 12 checks passed
@anthonyportugal
anthonyportugal deleted the feat/visual-polish branch November 14, 2026 03:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant