- Rust 91.5%
- Nix 4.5%
- CSS 4%
| .impeccable | ||
| crates | ||
| nix | ||
| static | ||
| .gitignore | ||
| ARCHITECTURE.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| DESIGN.md | ||
| DESIGN_VOCAB.md | ||
| flake.lock | ||
| flake.nix | ||
| PRODUCT.md | ||
| README.md | ||
| THIRD_PARTY_NOTICES.md | ||
Pana
DE-like shell for niri, built with gtk4-rs and layer-shell.
See ARCHITECTURE.md for the component map and roadmap.
Build
nix build # package
nix develop # dev shell
cargo run # inside the dev shell, needs a Wayland session
Run
nix run
Screensaver
Pana starts a libghostty-backed terminal saver after five idle minutes. Tarts is included in the Nix package; no global install is required. Select any bundled Tarts effect directly:
# ~/.config/pana/config.toml
[screensaver]
enabled = true
timeout-seconds = 300
effect = "fire"
oled = false
Available effects: matrix, life, maze, boids, cube, crab, donut, pipes, plasma,
fire, constellation, blank, and random. Random selects a visible effect each time the session
becomes idle.
Set oled = true to force every terminal background to pitch black while retaining themed foreground
colors. To run something other than Tarts, set an executable-plus-arguments override:
[screensaver]
command = ["fish", "-c", "asciiquarium"]
Activity dismisses the saver. This is visual only; it does not lock the session.
The saver quantizes Tarts output into Pana's generated ANSI16 palette. It uses Pana's built-in palette when no generated theme exists; Ghostty configuration is never consulted.
Theming
Pana owns the transformation from Material 3 into its complete artifact set:
~/.config/pana/theme/material.json
~/.config/pana/theme/theme.css
~/.config/pana/theme/ansi16.json
~/.config/pana/theme/base16.yaml
theme.css is hot-reloaded by the shell, ansi16.json drives the saver, and base16.yaml is the
semantic scheme for external consumers. With runtime generation enabled, wallpaper changes invoke
Matugen through Pana's private template and replace all artifacts
together:
[wallpaper]
path = "/home/me/Pictures/wallpaper.png"
[theme]
generate = true
polarity = "dark"
scheme = "rainbow"
The same compiler is available for build-time use:
pana-theme compile material.json output-directory dark
pana-theme generate wallpaper.png output-directory dark scheme-rainbow