From 82440d2f39a67de36f771c2ef906ee5bfa044b2c Mon Sep 17 00:00:00 2001 From: LarsvanDartel Date: Thu, 3 Sep 2026 14:50:50 +0200 Subject: [PATCH] feat(styling): make the terminal opaque MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stylix derives btop's and helix's `transparent` flags from `opacity.terminal`, so any value below 1.0 makes every TUI that paints its own background punch a solid rectangle through the terminal. Text you read for minutes at a time is also the one surface where translucency costs more legibility than it buys — the shells keep theirs via `desktop`/`popups`. Drops niri's foot blur rule with it: an opaque window has nothing behind it to blur. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_016osrNtF9MC3kqtKhoA3Dux --- modules/den/aspects/desktop/_niri/system.nix | 20 +++---------------- .../aspects/home/desktop/_styling/default.nix | 11 ++++++---- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/modules/den/aspects/desktop/_niri/system.nix b/modules/den/aspects/desktop/_niri/system.nix index 63d748e..0524e9b 100644 --- a/modules/den/aspects/desktop/_niri/system.nix +++ b/modules/den/aspects/desktop/_niri/system.nix @@ -167,8 +167,9 @@ # Global blur tuning. Blur itself needs no switch here: niri honours any # surface that asks for it over `ext-background-effect` — which is how - # noctalia's bar, panels and launcher get theirs — and the window rule - # below turns it on for foot, which cannot ask. + # noctalia's bar, panels and launcher get theirs. Nothing else opts in: + # foot is opaque (stylix.opacity.terminal is 1.0), so it has nothing to + # blur behind it. # # `passes` and `noise` are matched to the Hyprland session's # `decoration.blur` so the two sessions look like the same desktop. @@ -344,21 +345,6 @@ # left flat on purpose — they tile, so they need no separating. shadow.on = _: {}; } - # foot is translucent (stylix.opacity.terminal), and without this it - # would be translucent onto whatever happens to be behind it. A - # terminal cannot request blur for itself the way noctalia can — there - # is no `ext-background-effect` support in foot — so niri is told to - # blur it from this side. - # - # `xray` is left at its default, meaning on: the blur is computed once - # against the wallpaper and reused, rather than recomputed every time - # anything underneath moves. `xray false` would blur the actual windows - # below, but upstream still marks that experimental — it drops out - # during open/close animations and while dragging a tiled window. - { - matches = [{app-id = "^foot$";}]; - background-effect.blur = true; - } # The calculator pops up floating, rofi-calc style. { matches = [{app-id = "^calculator$";}]; diff --git a/modules/den/aspects/home/desktop/_styling/default.nix b/modules/den/aspects/home/desktop/_styling/default.nix index f664323..51f2dc0 100644 --- a/modules/den/aspects/home/desktop/_styling/default.nix +++ b/modules/den/aspects/home/desktop/_styling/default.nix @@ -41,9 +41,12 @@ in { # # stylix reaches only some of it directly — foot and alacritty from # `terminal`, and off that same value it flips btop's and helix's - # `transparent` flags, which is load-bearing rather than incidental: a - # TUI that paints its own opaque background punches a solid rectangle - # through the translucent terminal it runs in. The niri shell's surfaces + # `transparent` flags. That coupling is why `terminal` is 1.0: a + # translucent terminal makes every TUI that paints its own background + # punch a solid rectangle through it, and text over a moving wallpaper + # is the one place the effect costs more legibility than it buys. The + # shells still get their translucency from `desktop`/`popups`, which + # carry no text you read for minutes at a time. The niri shell's surfaces # are wired up by hand in _noctalia/home.nix, because stylix's # noctalia-shell target is gated on `options.programs ? noctalia-shell` # and ours is a wrapped package, not that home-manager module — so the @@ -53,7 +56,7 @@ in { # and a translucent PDF is simply harder to read, while a translucent # browser chrome wrapped around opaque page content just looks broken. opacity = { - terminal = 0.8; + terminal = 1.0; desktop = 0.8; popups = 0.8; }; -- 2.51.2