130 lines
6.6 KiB
Markdown
130 lines
6.6 KiB
Markdown
# 04 — Screensaver, displays and menus
|
|
|
|
Three areas the operator named on 2026-10-04, as their own modules. Each sharpens a row of
|
|
[01](01-what-the-workstations-run.md) and a question of [02](02-the-questions-and-the-options.md).
|
|
|
|
## The screensaver: idle, lock and display power
|
|
|
|
**Measured on both workstations:**
|
|
|
|
- **Idle and lock** are three things wired by hand in the session's start script:
|
|
- the X screensaver timeout (`xset s 1800`);
|
|
- the display power timeouts (`xset dpms`);
|
|
- `xss-lock` running the colour build of `i3lock` through a wrapper, in a respawn loop.
|
|
- **A second screensaver,** xscreensaver, is installed and deliberately not started. Earlier it
|
|
overrode the display power settings with its own, and locked nothing. Its configuration file is
|
|
still in the home.
|
|
- **The lock screen's 20-odd colours and formats** were predecessor theme variables.
|
|
- **The colour build is not in the official repositories** (research 026/01).
|
|
|
|
**Starting position:**
|
|
|
|
- **One module for the lock screen,** holding `node-lock-screen`: the locker and its wrapper as the
|
|
module's own files, the screensaver and display power timeouts, and `xss-lock`.
|
|
- The timeouts and colours are its defaults, and settings later (issue 168).
|
|
- The colour build ships as ADR 0205's pinned archive, or the module uses the official `i3lock`.
|
|
That is the operator's choice, and the colours are the only difference.
|
|
- xscreensaver is not a module; its package and file are removed.
|
|
- `xss-lock` needs the logind session, so it stays a session-start line contributed into
|
|
`.xinitrc`'s block (question 4), not a unit.
|
|
|
|
## Monitor layout (xrandr)
|
|
|
|
**Measured:**
|
|
|
|
- Each workstation has a layout script generated by `arandr`, with the monitor names baked in. One
|
|
workstation also has several layouts for named places, a hotplug rule and a wizard.
|
|
- **The desktop carried the laptop's layout scripts.**
|
|
- No `xorg.conf.d`, and no layout tool beyond the scripts.
|
|
|
|
**Starting position: `autorandr`** (official repositories) inside the display server's module.
|
|
|
|
- `autorandr` saves a layout as a profile **keyed by the connected monitors' identities** (their EDID)
|
|
and applies the matching one at login and on hotplug.
|
|
- Profiles therefore need no machine's name. A profile can be shared mesh-wide and simply never
|
|
matches on a machine without those monitors. That is exactly the "say it by what is there, never by
|
|
a name" rule (ADR 0112).
|
|
- The profiles are the operator's data, saved by the tool itself, so they are *found* (ADR 0182). A
|
|
`layout` verb on `node-display-server` lists, saves and applies them.
|
|
- The arandr scripts and the hotplug rule retire once a profile exists for each.
|
|
|
|
## Menus: rofi and dmenu
|
|
|
|
**Measured:**
|
|
|
|
- rofi is the launcher, the power menu, the theme picker and the clipboard menu.
|
|
- The operator's scripts call `rofi -dmenu` in four places and **plain `dmenu` in two. dmenu is
|
|
installed on neither workstation, so those two fail.**
|
|
|
|
**Starting position:**
|
|
|
|
- **`rofi` holds `node-launcher`**, and the seat's protocol includes a **dmenu-compatible command**:
|
|
read choices on standard input, print the chosen one. Scripts call that command, not a program by
|
|
name.
|
|
- **`dmenu` is a module of its own** (official repositories), able to hold the same seat on a machine
|
|
that wants it, for instance a Wayland session where `wofi` or `fuzzel` would hold it instead.
|
|
- The rofi module carries its theme files, and the menus that belong to other modules arrive as those
|
|
modules' scripts:
|
|
- power menu → the session;
|
|
- clipboard menu → the clipboard module;
|
|
- theme picker → settings, once issue 168 closes.
|
|
|
|
## The clipboard: xclip and greenclip
|
|
|
|
**Measured:**
|
|
|
|
- **greenclip** keeps the clipboard's history, and rofi shows it on a key binding.
|
|
- **greenclip is not in the official repositories.**
|
|
- It is started two ways: the window manager's configuration starts it on both workstations, and on
|
|
one a user unit is enabled as well.
|
|
- Its configuration names an absolute home path.
|
|
- **xclip** (official) is the command-line clipboard the operator's scripts use.
|
|
|
|
**Starting position:**
|
|
|
|
- **`xclip` is a module of its own,** a package and nothing else. It is the tool scripts depend on,
|
|
and a module that needs it requires it.
|
|
- **The clipboard manager holds `node-clipboard`:** its daemon, started once by the session (a session
|
|
contribution, or a user unit once user-scoped units ship, never both), its configuration with no
|
|
absolute path, and its menu binding contributed to the window manager.
|
|
- **Which manager holds it is the operator's choice:**
|
|
- greenclip, as today, shipped under ADR 0205;
|
|
- or `clipmenu` (official), which feeds the same dmenu-compatible command as the launcher seat above,
|
|
and needs no archive.
|
|
- **On Wayland** the same seat is held by `cliphist` with `wl-clipboard`, both official.
|
|
|
|
## Fonts
|
|
|
|
**Measured:**
|
|
|
|
- The fonts the desktop uses are **hand-copied files** in the account's font directory, not packages:
|
|
- a Nerd font for the window manager, the bar and the terminal;
|
|
- a second one for the prompt;
|
|
- on one workstation, the same four files twice, once under URL-encoded names;
|
|
- on the other, a different build of the same font and three more copied from a theme's repository.
|
|
- The system's default monospace is a different font (`Noto Sans Mono`), so anything that asks for
|
|
`monospace` gets another face than the terminal.
|
|
- The DPI is fixed in an X resource.
|
|
- **Every Nerd font in use is in the official repositories** (Hack, Meslo, Iosevka, JetBrains Mono).
|
|
|
|
**Decided** (the operator left the choice open, except that it must not be today's Hack):
|
|
|
|
| role | face | why |
|
|
|---|---|---|
|
|
| monospace: terminal, window manager, bar, launcher, prompt | **JetBrains Mono Nerd Font** | built for long reading in a terminal, unambiguous `0O1lI`, optional ligatures; a version-3 Nerd font, so every icon the prompt and bar use is present |
|
|
| interface: GTK, Qt, notifications | **Inter** | designed for screens, clear at small sizes |
|
|
| icons missing from any face | Nerd Fonts Symbols | a fallback, so a font without icons still shows them |
|
|
| emoji | Noto Color Emoji | |
|
|
| serif and every other script | Noto | |
|
|
|
|
All five are official packages.
|
|
|
|
**Starting position:**
|
|
|
|
- **A `fonts` module:** those packages, and a fontconfig file it owns that maps `monospace`, `sans-serif`,
|
|
`serif` and the emoji and symbol fallbacks to the chosen faces, so every program agrees.
|
|
- The terminal, bar, launcher and prompt modules name the family, not a file.
|
|
- The DPI becomes the display server's setting (issue 168).
|
|
- The copied files are removed by the operator once the packages are in (ADR 0182).
|
|
- Fonts are not a seat: several coexist. The module owns the one place where *the* default is said.
|