Files
dotfiles/ARCHITECTURE.md
funman300 85ef13492e screenshot: revert flameshot, use grim+slurp+satty pipeline
Flameshot's portal-based capture path on niri triggers an
xdg-desktop-portal access prompt on every invocation, blocking
the screenshot itself. grim talks to wlr-screencopy directly and
never touches the portal, so no prompt.

Pipeline: slurp (region) → grim (capture) → satty (annotate +
copy + save). satty replaces the wofi action menu by being the
post-capture surface itself.

- scripts/screenshot.sh added
- install.sh symlinks it; flameshot.ini generator removed
- niri Mod+Print → "screenshot"
- packages.txt drops flameshot
- docs tables updated

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 10:27:16 -07:00

4.9 KiB

ARCHITECTURE.md

Overview

This system is a Wayland-first desktop environment built around the Niri compositor, designed for:

  • Tiling workflow
  • Keyboard-driven interaction
  • Minimal background processes
  • Clean separation between components

High-Level Architecture

                 ┌──────────────┐
                 │   greetd     │
                 │   + regreet  │
                 └──────┬───────┘
                        │
                        ▼
                 ┌──────────────┐
                 │     Niri     │
                 │ Compositor   │
                 └──────┬───────┘
        ┌───────────────┼────────────────┐
        ▼               ▼                ▼
   ┌────────┐     ┌────────┐      ┌──────────┐
   │ Waybar │     │  Mako  │      │  Wofi    │
   └────────┘     └────────┘      └──────────┘
        │               │                │
        ▼               ▼                ▼
   Status UI     Notifications     App Launcher

        ┌────────────────────────────────────┐
        ▼                                    ▼
   Alacritty                          GTK Apps / CLI
        │
        ▼
   Fish + Starship

Component Responsibilities

Niri (Core)

  • Window management
  • Input handling
  • Layout control
  • Workspace logic

Owns:

  • Keybindings
  • Window rules
  • Focus behavior

Waybar (Status Layer)

  • Displays system info (time, CPU, network, etc.)
  • Acts as visual feedback layer

Design constraints:

  • No heavy scripts
  • Prefer event-driven updates

Mako (Notifications)

  • Handles all desktop notifications

Rules:

  • Short timeouts
  • Minimal visual noise
  • No stacking chaos

Wofi (Launcher)

  • Application launcher + runner

Usage modes:

  • drun (desktop apps)
  • run (commands)

Terminal Stack

Alacritty

  • GPU-accelerated terminal
  • No tabs (delegated to WM)

Fish

  • Interactive shell

Starship

  • Prompt renderer

Session & Login

greetd + regreet

  • Lightweight login manager
  • Starts Niri session

Lock Screen

gtklock

  • Simple Wayland-native lockscreen

Background Services

Function Tool
Wallpaper swww
Screenshots grim + slurp + satty
Clipboard cliphist

Data Flow

Startup Sequence

  1. greetd starts

  2. regreet authenticates user

  3. Niri session launches

  4. Autostart:

    • waybar
    • mako
    • swww
    • cliphist (if enabled)

User Interaction Flow

Launching Apps

Keybind → Wofi → Exec → Niri manages window

Notifications

App → DBus → Mako → Render

Status Updates

System → Waybar module → Display

Configuration Strategy

~/.config/
├── niri/
├── waybar/
├── alacritty/
├── fish/
├── starship.toml
├── mako/
├── wofi/
└── gtklock/

All configs are sourced from the repo via:

install.sh → ln -s

Theming Architecture

Global Theme: Tomorrow Night

Applied consistently across:

  • GTK (Materia-dark)
  • Icons (Papirus)
  • Terminal
  • Waybar
  • Wofi
theme/
├── colors.json (optional future)
├── gtk.css
├── waybar.css
└── wofi.css

Extensibility Model

Safe Extensions

  • Add Waybar modules (lightweight)
  • Add Wofi modes
  • Extend Niri keybindings
  • Add CLI tools

Risky Extensions

  • Background daemons
  • Polling scripts
  • X11 compatibility layers
  • Overly dynamic configs

Performance Considerations

  • Avoid blocking shell scripts
  • Keep Waybar modules lightweight
  • Minimize startup processes
  • Prefer static config over runtime logic

Failure Modes

Issue Likely Cause
Black screen on login Niri config error
Missing bar Waybar not launched
No notifications Mako not running
Slow shell Fish config bloat

Future Improvements

  • Shared theme variables across all tools
  • Config templating (optional, must stay transparent)
  • Per-host overrides
  • Optional feature flags (minimal)

Guiding Philosophy

This system is:

  • Predictable
  • Minimal
  • Fast
  • Keyboard-first

Every addition must justify its existence.

If it adds complexity without clear benefit, it should not be included.