147 lines
4.5 KiB
Markdown
147 lines
4.5 KiB
Markdown
# 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)
|
||
- 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)
|
||
|
||
## Installation
|
||
|
||
Add the flake input and use the Home Manager module. Good luck — the robot
|
||
didn't test any of this on real hardware.
|
||
|
||
```nix
|
||
inputs.nova-shell.url = "github:yourname/nova-shell";
|
||
```
|
||
|
||
Then in your Home Manager config:
|
||
|
||
```nix
|
||
imports = [ inputs.nova-shell.homeModules.default ];
|
||
|
||
programs.nova-shell.enable = true;
|
||
```
|
||
|
||
## Configuration
|
||
|
||
Surprisingly, the robot managed to wire up a Home Manager module that mostly works.
|
||
Here is how to make it do things.
|
||
|
||
### Flake setup
|
||
|
||
```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 ];
|
||
```
|
||
|
||
### 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.
|
||
|
||
### Disabling modules
|
||
|
||
All modules are on by default because the robot was optimistic. Set any to
|
||
`false` to get rid of them. Disabling `weather` also skips pulling in
|
||
`wttrbar`, which is the one genuinely useful thing the module system does.
|
||
|
||
```nix
|
||
programs.nova-shell.modules = {
|
||
weather = false; # also removes the wttrbar dependency
|
||
bluetooth = false; # unless you enjoy a ghost icon on your desktop
|
||
backlight = false; # desktops don't have screens that dim, allegedly
|
||
battery = false; # see above
|
||
temperature = false; # ignorance is thermally efficient
|
||
disk = false;
|
||
wlogout = false; # if you enjoy living dangerously without a logout button
|
||
};
|
||
```
|
||
|
||
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 merge on top of whatever stylix provides, so you only need to
|
||
specify what you want to override. The AI picked Catppuccin Mocha as the
|
||
fallback, because of course it did.
|
||
|
||
```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 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. To attach it to a different target or disable it entirely
|
||
because you have opinions about service management:
|
||
|
||
```nix
|
||
programs.nova-shell.systemd = {
|
||
enable = true;
|
||
target = "niri.service";
|
||
};
|
||
```
|
||
|
||
## Contributing
|
||
|
||
Sure, why not. It can't get much worse.
|
||
|
||
## 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.
|