From 6e5dfd2ab823c67272ca3e41916ef392c2d8edbb Mon Sep 17 00:00:00 2001 From: jochen Date: Sun, 4 Oct 2026 12:03:29 +0200 Subject: [PATCH] Research 027/03: the laptop's power management; 026/04: fonts --- .../00-overview.md | 2 +- .../04-screensaver-displays-and-menus.md | 23 +++++++++++ .../00-overview.md | 2 +- .../03-the-accounts-own-tools.md | 41 +++++++++++++++++++ 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md b/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md index 4931cf5..68d3f43 100644 --- a/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md +++ b/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md @@ -60,5 +60,5 @@ desktops. Measured in [01](01-what-the-workstations-run.md): - [01 — What the workstations run](01-what-the-workstations-run.md): evidence. - [02 — The questions and the options](02-the-questions-and-the-options.md) -- [04 — Screensaver, displays and menus](04-screensaver-displays-and-menus.md): the lock and idle module, monitor layouts by the monitors' identity, rofi and dmenu behind one launcher seat, the clipboard +- [04 — Screensaver, displays and menus](04-screensaver-displays-and-menus.md): the lock and idle module, monitor layouts by the monitors' identity, rofi and dmenu behind one launcher seat, the clipboard, fonts - [03 — What the predecessor taught](03-what-the-predecessor-taught.md): its 128 modules and 3,395 commits, as patterns to keep and failures not to repeat; shared with research 027. diff --git a/01-RESEARCH/026-the-graphical-session-as-modules/04-screensaver-displays-and-menus.md b/01-RESEARCH/026-the-graphical-session-as-modules/04-screensaver-displays-and-menus.md index 1c19fe4..e52dce3 100644 --- a/01-RESEARCH/026-the-graphical-session-as-modules/04-screensaver-displays-and-menus.md +++ b/01-RESEARCH/026-the-graphical-session-as-modules/04-screensaver-displays-and-menus.md @@ -92,3 +92,26 @@ Three areas the operator named on 2026-10-04, as their own modules. Each sharpen - 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). + +**Starting position:** + +- **A `fonts` module:** the official packages, and a fontconfig file it owns that maps `monospace` (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. diff --git a/01-RESEARCH/027-the-system-layer-as-modules/00-overview.md b/01-RESEARCH/027-the-system-layer-as-modules/00-overview.md index 024df41..e3a4a94 100644 --- a/01-RESEARCH/027-the-system-layer-as-modules/00-overview.md +++ b/01-RESEARCH/027-the-system-layer-as-modules/00-overview.md @@ -51,5 +51,5 @@ matters on their own. - [01 — What the machines run](01-what-the-machines-run.md): evidence. - [02 — Candidates and questions](02-candidates-and-questions.md) -- [03 — The account's own tools](03-the-accounts-own-tools.md): `~/.ssh` as one module's, scripts on every machine, the keyring, mail as events +- [03 — The account's own tools](03-the-accounts-own-tools.md): `~/.ssh` as one module's, scripts on every machine, the keyring, the laptop's power management, mail as events - The predecessor's lessons, shared with research 026: [026/03](../026-the-graphical-session-as-modules/03-what-the-predecessor-taught.md) diff --git a/01-RESEARCH/027-the-system-layer-as-modules/03-the-accounts-own-tools.md b/01-RESEARCH/027-the-system-layer-as-modules/03-the-accounts-own-tools.md index 69f0f4d..00c596b 100644 --- a/01-RESEARCH/027-the-system-layer-as-modules/03-the-accounts-own-tools.md +++ b/01-RESEARCH/027-the-system-layer-as-modules/03-the-accounts-own-tools.md @@ -126,3 +126,44 @@ The second unlock prompt and the second daemon start go away. - **Where it runs:** one long-running module, not per machine (ADR 0198). The obvious first step is the mail server the mesh already runs. + +## Power management on the laptop + +*"Power management for the laptop."* + +**Measured on the laptop** (a gaming model with a hybrid GPU): + +- **The platform profile is driven by a vendor daemon** (`asusd`) and its CLI. The vendor CLI is + now in the official repositories; the copy installed came from elsewhere. A predecessor script + runs as a user unit and switches the profile every five seconds: quiet on battery, balanced on + mains, performance above 50 % CPU. +- **The hybrid GPU's mode** (now hybrid) is held by a second vendor daemon (`supergfxd`), which is + **not** in the official repositories. Kernel-module options for the discrete GPU's power state + and its suspend, hibernate and resume units are set by hand. Its own power daemon is masked. +- **The battery charge limit is 80 %,** set by the vendor daemon. +- **The lid and power key suspend.** The brightness key is ignored by logind and handled by the + vendor-key path. Both are logind drop-ins. +- **Memory pressure:** compressed swap in RAM (`zram`) beside a swap file and a partition; + `systemd-oomd` with drop-ins; a predecessor *memory guard* user unit that notifies before the OOM + killer acts. +- `upower` runs. There is no `power-profiles-daemon`, `tlp`, `auto-cpufreq` or `thermald`, so nothing + competes with the vendor daemon, by design. + +All of it came from two predecessor modules, one of which was a laptop-model *flavor*. A desktop +received part of it (research 026/01). + +**Starting position:** + +- **A hardware module per machine model** (here, the laptop's model). It holds the vendor daemon and + its profile configuration, the GPU mode daemon (ADR 0205's case, or the build machine's package + repository of research 027 question 1), the discrete GPU's module options and suspend units, the + logind drop-ins, the battery charge limit, and the vendor keys and brightness. It is assigned to + the one machine of that model, and to any second one later. +- **The profile switching** moves from a polling script to the module's own long-running code + (ADR 0198). It reacts to the power-supply change event instead of polling, and its thresholds + become settings (issue 168). +- **Memory pressure is not the laptop's alone.** `zram` and `systemd-oomd` with the notifier are a + `memory-pressure` module, assigned wherever wanted. The swap layout stays the machine's (`kernel` + module, question 3). +- A **`node-power-profile`** seat (vendor daemon, or `power-profiles-daemon` on other hardware) + gives the mesh one verb, `profile`, the same on every machine that has one.