Desktop configuration for desk.
Arch Linux, Hyprland, Quickshell, Rosé Pine.
Full quality: docs/demo.mp4.
greetd starts tuigreet. tuigreet starts Hyprland.
hyprland.lua then starts the desktop.
| Program | Function |
|---|---|
lastshell |
The shell. Two bars, eight modals, notifications. Quickshell. |
tabstrip |
Browser-tab daemon. Feeds the bar strip and the tab switcher. |
claude-status.py |
Claude Code session daemon. Feeds the session chips. |
hyprglaze |
Shader wallpaper daemon. It draws the wallpaper. |
hypridle |
Idle timers (hypridle.conf). They report input to deskpresence and run scripts/tv-watchdog.sh. |
wl-paste |
Clipboard watcher. It stores history in cliphist. |
Hyprland reads the Lua files. Hyprland reloads the configuration when you save a
file. Do not run hyprctl reload.
config/quickshell/lastshell is the shell (a vendored copy of
slastra/lastshell, last synced at 9026a64). Raw Quickshell,
no framework.
The bars are tab chips hanging off the screen edges. Four instruments are drawn, not fonted: an analog clock (hour hand only), a thermometer, a speaker whose arcs grow with volume, and a usage ring. Icons are Lucide; text is ShureTechMono. Nerd-font icon glyphs are banned. Qt renders their private-use codepoints wrong.
The modals share one chrome: header with an identity icon and a prompt caret, scrolling body with a gliding cursor and gold match highlighting, hint footer, animated backdrop mask.
| Bind | Modal |
|---|---|
SUPER + Space |
Launcher. Open windows first, by focus recency, then apps by frecency. |
SUPER + W |
Tab switcher. Every tab in every browser window, globally. |
SUPER + A |
Audio sink picker. |
SUPER + B |
Wallpaper effect picker. |
SUPER + V |
Clipboard history. |
SUPER + N |
Notification center. |
SUPER + / |
Hotkey sheet, parsed live from binds.lua. It cannot drift. |
Print |
Capture menu. Stops a recording instantly if one is running. |
Notifications are lastshell's own server: urgency-washed toasts with a countdown ring around the dismiss button, and a history the center reads.
The shell renders; daemons own data. tabstrip (Go,
repo) watches browsers over D-Bus
and writes a snapshot the shell's FileView watches. The bar strip is
workspace-filtered; tabstrip list is the global view. claude-status.py
(config/lastshell/) watches Claude Code sessions, usage quotas, Hyprland
focus, and MQTT face state, and writes one JSON snapshot.
Two rofi-era scripts survive as backends with the menus stripped off:
capture.sh (grim/slurp/satty screenshots and gpu-screen-recorder capture,
invoked by subcommand from the capture modal) and hotkeys.py (the live
binds.lua parser behind the hotkey sheet, --json).
The display is an LG OLED. scripts/tv-screen.sh turns the TV itself off
and on over the LAN instead of using DPMS. A DPMS wake forces an HDMI
2.1 FRL retrain the NVIDIA driver refuses to retry, which latches the
desktop at 60 Hz. scripts/tv-pixel-refresh.sh runs the panel's pixel
cleaning nightly by driving the TV's own menus over the remote-control
API. scripts/lg-ipctl.py speaks the TV's encrypted IP-control protocol;
its key lives in ~/.config/lgtv/ipcontrol.key, outside this repo.
deskpresence (radar presence) owns blanking the TV. scripts/tv-watchdog.sh
is the fallback: if deskpresence has died, it blanks the TV after 10
minutes without input. scripts/unblank.sh lifts lastshell's blackout
shader on input if a crash left it applied.
config/
├── quickshell/lastshell/ the shell (QML)
├── hypr/ hyprland.lua, binds.lua, theme.lua, idle.sh, scripts/
├── lastshell/ claude-status.py, lamp.sh (shell-adjacent daemons)
├── rofi/scripts/ capture.sh, hotkeys.py (engines, menuless)
├── qt6ct/colors/ rose-pine.conf (Qt palette)
├── kitty/ kitty.conf, colors.conf
├── nvim/lua/ colors.lua
└── starship.toml
- lastshell, the shell itself
- tabstrip, the browser-tab daemon
- tabctl, the D-Bus mediator underneath
- Rosé Pine, the palette everywhere
MIT
