atagen

monolith

public
Star0
Watch0

Commit 3b180fd69834

tarball

atagen <boss@atagen.co>2026-10-17 10:44 UTC

5 files changed+6-18
monolith: make beer the default terminal and stop installing extras

The NixOS module put foot, fuzzel, swaylock and wl-clipboard on every system that enabled it, through an extraPackages option that only duplicated environment.systemPackages. Mod+Return now spawns beer, which monolith does not ship.
Modified file: crates/config/default.toml+1 additions−1 deletions
@@ -48,7 +48,7 @@ repeat_rate = 25
4848
4949 # Each value is a command in word form, or an argv-style list.
5050 [binds]
51-"Mod+Return" = "spawn foot"
51+"Mod+Return" = "spawn beer"
5252 "Mod+q" = "close"
5353 "Mod+Shift+e" = "quit"
5454 "Mod+Shift+r" = "reload"
Modified file: crates/config/src/lib.rs+1 additions−1 deletions
@@ -566,7 +566,7 @@ mod tests {
566566 radius = [1, 2, 3, 4]
567567 focused = "#zzzzzz"
568568 [binds]
569- "Mod+Return" = "spawn foot"
569+ "Mod+Return" = "spawn beer"
570570 "Hyper+x" = "close"
571571 [[rules]]
572572 app_id = "("
Modified file: crates/ipc/src/lib.rs+1 additions−1 deletions
@@ -1,7 +1,7 @@
11 //! The control protocol. Newline-delimited JSON over a unix socket, one
22 //! message per line, each carrying the protocol version `v`.
33 //!
4-//! Commands also have a word form, `focus left` or `spawn foot`, shared by
4+//! Commands also have a word form, `focus left` or `spawn beer`, shared by
55 //! the CLI and keybindings in the config.
66
77 use serde::{Deserialize, Serialize};
Modified file: design/test-checklist.md+2 additions−2 deletions
@@ -21,7 +21,7 @@ nix develop -c sh -c 'RUST_LOG=monolith=debug target/release/monolith run --back
2121 - [ ] **Launchers.** `fuzzel` takes the keyboard while open and gives it back on close. The launched app should land on the tag you were on when you launched it.
2222 - [ ] **Session lock.** `swaylock` hides everything, takes input and unlocks with your password. VT switching still works while locked. Killing swaylock leaves the session locked, which is what the protocol wants. Unlock it by starting `swaylock` again from a VT.
2323 - [ ] **Idle.** `swayidle -w timeout 10 'notify-send idle'` fires after 10 s without input. A playing `mpv` should hold it off while visible and stop holding it off once its tag is hidden.
24-- [ ] **Clipboard.** `wl-copy` and `wl-paste` work both ways with foot or beer. Middle-click paste uses the primary selection.
24+- [ ] **Clipboard.** `wl-copy` and `wl-paste` work both ways with beer. Middle-click paste uses the primary selection.
2525 - [ ] **Screenshots.** `grim` and `grim -g (slurp)`.
2626 - [ ] **Portals.** Needs `xdg-desktop-portal-wlr` installed and monolith's package in your profile so `share/xdg-desktop-portal/monolith-portals.conf` is found. Screen sharing a whole output from a browser should work. Window sharing does not exist yet.
2727 - [ ] **Xwayland.** Run an X app, like `xeyes`, Steam or a Proton game. The log shows `starting Xwayland` on its first connection. Check keyboard input, fullscreen and menu placement. Dialogs should float. After the last X client closes, Xwayland exits and should start again for the next one.
@@ -34,7 +34,7 @@ nix develop -c sh -c 'RUST_LOG=monolith=debug target/release/monolith run --back
3434 - [ ] **Fullscreen switches.** Toggle fullscreen on vkcube a few times and look for `slow frame` lines. First-time imports now run on a worker thread.
3535 - [ ] **Direct scanout.** Fullscreen vkcube should log `direct scanout scanout=true`, and its `frame rate` lines should show `scanned_out` close to `presented`. If it logs `scanout=false` or never switches, the `elements`, `overlay_planes` and `cursor_plane` fields on that line show what was on screen with it.
3636 - [ ] **CPU target.** `cpu_p99_us` on the `frame rate` lines should stay under 500, the target in decisions.md.
37-- [ ] **NixOS module.** Add the flake as an input, import `monolith.nixosModules.default` and set `programs.monolith.enable = true`. A `monolith` session appears in the display manager. With the default `realtime-scheduling = true`, the log should show `compositor thread runs SCHED_RR` and `queue global priority priority=Some(REALTIME)`. Programs launched from monolith should not inherit CAP_SYS_NICE, which `grep Cap /proc/(pgrep foot)/status` shows as an all-zero `CapAmb`.
37+- [ ] **NixOS module.** Add the flake as an input, import `monolith.nixosModules.default` and set `programs.monolith.enable = true`. A `monolith` session appears in the display manager. With the default `realtime-scheduling = true`, the log should show `compositor thread runs SCHED_RR` and `queue global priority priority=Some(REALTIME)`. Programs launched from monolith should not inherit CAP_SYS_NICE, which `grep Cap /proc/(pgrep beer)/status` shows as an all-zero `CapAmb`.
3838
3939 ## Known
4040
Modified file: flake.nix+1 additions−13 deletions
@@ -145,22 +145,10 @@
145145 xwayland.enable = mkEnableOption "Xwayland, started on the first X11 client" // {
146146 default = true;
147147 };
148-
149- extraPackages = mkOption {
150- type = with types; listOf package;
151- default = with pkgs; [
152- foot
153- fuzzel
154- swaylock
155- wl-clipboard
156- ];
157- defaultText = literalExpression "with pkgs; [ foot fuzzel swaylock wl-clipboard ]";
158- description = "Extra packages to be installed system wide.";
159- };
160148 };
161149
162150 config = mkIf cfg.enable {
163- environment.systemPackages = (optional (!cfg.realtime-scheduling) cfg.package) ++ cfg.extraPackages;
151+ environment.systemPackages = optional (!cfg.realtime-scheduling) cfg.package;
164152
165153 programs = {
166154 dconf.enable = mkDefault true;