nova-shell/README.md
2026-04-12 12:29:28 +02:00

144 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# nova-shell
A minimal [Quickshell](https://quickshell.outfoxxed.me) bar for [niri](https://github.com/YarikTH/ycmd), lovingly hallucinated by a
statistical text blender. Every line of code in this repository was
produced by a glorified autocomplete engine and has not been meaningfully
reviewed by a human with a functioning brain.
**Use at your own risk.** The slop machine was very confident, which is
exactly when you should be most suspicious.
## "Features"
- Bar with workspaces, clock, tray, and a pile of widgets the AI insisted on adding
- Home Manager module (probably works, has not been tested in a controlled environment)
- treefmt + nixfmt for formatting, because even AI slop deserves consistent indentation
- Checks via `nix flake check` (the irony of testing AI garbage is not lost on anyone)
- Context menus for tray icons, implemented in a separate window per icon because the
shared flyout window was "suspected of being less responsive" — a diplomatic way of
saying it was bad
## Installation
Add the flake input and import the Home Manager module. The robot did not test
any of this on real hardware, but it was extremely confident while writing it,
which is the next best thing.
```nix
# flake.nix
inputs = {
nova-shell.url = "git+https://git.berlin.ccc.de/vinzenz/nova-shell";
nova-shell.inputs.nixpkgs.follows = "nixpkgs";
};
```
```nix
# home.nix
imports = [ inputs.nova-shell.homeModules.default ];
```
## Configuration
### Turning it on
```nix
programs.nova-shell.enable = true;
```
This installs the bar, the Symbols Nerd Font, and a systemd user service that
starts with `graphical-session.target`. If you use
[stylix](https://github.com/danth/stylix), colors and fonts are populated
automatically — one fewer thing for the AI to have gotten wrong. If you do not
use stylix, you get Catppuccin Mocha, because the robot has taste and it is
purple.
### Disabling modules
All modules are enabled by default, because the robot was optimistic about
what hardware you own and what software you run. Set any to `false` to make
them go away permanently, which will feel better than you expect.
Disabling `weather` also removes `wttrbar` from your packages, which is the
one piece of genuine dependency management in this entire project and
frankly more than it deserves.
```nix
programs.nova-shell.modules = {
weather = false; # also evicts wttrbar from your system
bluetooth = false; # for people whose computers have ethernet ports and opinions
backlight = false; # your desktop monitor does not have a backlight slider, probably
battery = false; # see above, but for power
temperature = false; # what you don't measure can't alarm you
disk = false; # the number will only make you anxious
wlogout = false; # living on the edge
};
```
Full list of things you can disable: `tray`, `windowTitle`, `clock`,
`notifications`, `mpris`, `volume`, `bluetooth`, `backlight`, `network`,
`powerProfile`, `idleInhibitor`, `weather`, `temperature`, `cpu`, `memory`,
`disk`, `battery`, `wlogout`.
### Theme
Theme keys are merged on top of whatever stylix provides. You only need to
specify what you want to override. Values are written to
`~/.config/nova-shell/theme.json`, which the bar watches for changes at
runtime, so you can iterate on colors without restarting anything — a level
of polish that frankly raises uncomfortable questions about the rest of it.
```nix
programs.nova-shell.theme = {
barHeight = 28;
barOpacity = 0.85;
barPadding = 10;
barSpacing = 8;
radius = 6;
fontSize = 13;
fontFamily = "JetBrains Mono";
# override individual palette entries if stylix's choices personally offend you
colors.base00 = "#1a1a2e";
colors.base05 = "#e0e0f0";
};
```
Full list of theme keys and their defaults:
| Key | Default | Controls |
|-----|---------|----------|
| `colors.base00``base0F` | Catppuccin Mocha | Base16 palette |
| `fontFamily` | `"sans-serif"` | Bar text font |
| `iconFontFamily` | `"Symbols Nerd Font"` | Nerd font for icons |
| `fontSize` | `12` | Base font size (px) |
| `barHeight` | `32` | Bar height (px) |
| `barOpacity` | `0.9` | Bar and flyout background opacity |
| `barPadding` | `8` | Left/right bar content margin (px) |
| `barSpacing` | `12` | Gap between modules (px) |
| `moduleSpacing` | `4` | Icon-to-label gap within a module (px) |
| `radius` | `4` | Corner radius for flyouts and menus (px) |
### Systemd service
Enabled by default, bound to `graphical-session.target`. To attach it to
something more specific, or to disable it entirely because you have strong
feelings about how your session starts:
```nix
programs.nova-shell.systemd = {
enable = true;
target = "niri.service";
};
```
## Contributing
Sure, why not. It can't get much worse, and the GPL requires you to share
your improvements anyway, so you might as well.
## License
GPLv3. Yes, the AI slop is copylefted now. [caelestia-dots/shell](https://github.com/caelestia-dots/shell)
provided architectural inspiration, which the robot then faithfully mangled into this. If you
improve it, the license requires you to share those improvements — a higher standard of
accountability than the author has held themselves to.