Compare commits

...

4 Commits

Author SHA1 Message Date
d2fbf78927 fix(fish): fit the fastfetch greeting to the terminal width
The greeting always drew the full NixOS logo beside the info block,
which overflows in a narrow terminal. Choose the logo by column count:
the full logo when it fits, the compact one when it does not, and none
below that.
2026-07-24 14:47:49 -04:00
eca87c74a6 fix(firefox): scale the browser to 1.25x on the high-DPI panel
Left at auto, Firefox reads the panel's 1.5x and inflates its whole
chrome while point-sized apps stay put. Pin devPixelsPerPx a shade under
that so the UI and pages match without dropping to a too-small 1:1.
2026-07-24 14:47:49 -04:00
bb9a92b25b feat(desktop): shrink Stylix font sizes for the laptop panel
The graphical layer inherited Stylix's default font sizes, which read
oversized on this display. Step them down a point across applications,
desktop, popups, and the terminal.
2026-07-24 14:47:49 -04:00
68e0aafbbb fix(desktop): apply the configured cursor theme to the Hyprland session
home.sessionVariables (XCURSOR_THEME/XCURSOR_SIZE from home.pointerCursor)
land in hm-session-vars.sh, which only a login shell sources. UWSM starts
the graphical session without it, so Hyprland never saw the theme and drew
its built-in cursor instead of the configured Bibata-Modern-Ice.

Declare the cursor through Hyprland's own env directive, read at compositor
startup regardless of the shell profile, sourced from config.stylix.cursor
so the theme and size stay defined in one place.
2026-07-24 14:29:38 -04:00
5 changed files with 54 additions and 4 deletions

View File

@@ -109,3 +109,8 @@ The domain model (Host, Module, Skeleton, Auto-loader, Enable convention, overla
To actually remove a builtin, list it explicitly with `<engine>.metaData.hidden = true` — an engine entry carrying only `metaData` is treated as a builtin rather than a custom engine.
Engines are referenced by their current id, which the module maps from the old display names, so the default is `default = "ddg"`, not `"DuckDuckGo"` (the latter only warns and migrates).
Prove the result by decoding the built file: `mozlz4a -d <search.json.mozlz4>` shows the `_metaData.hidden` flags and `defaultEngineId`.
- `home.sessionVariables` do **not** reach the Hyprland session, so anything the compositor reads from its environment (cursor theme, toolkit hints) has to be declared elsewhere.
home-manager writes those variables to `hm-session-vars.sh`, which only a login shell sources; UWSM starts the graphical session without it, so the compositor's environment never gains them.
This is why a Stylix cursor (`XCURSOR_THEME`/`XCURSOR_SIZE` via `home.pointerCursor`) silently fails to apply and Hyprland draws its built-in cursor: the variables exist in `sessionVariables` but not in the running session (`tr '\0' '\n' < /proc/$(pgrep -x Hyprland)/environ` shows them absent).
The fix is Hyprland's own `env = KEY,VALUE` directive in `settings`, read at compositor startup regardless of the shell profile; `modules/desktop/hyprland/hyprland.nix` sets the cursor that way, sourced from `config.stylix.cursor`.
Bibata ships XCursor format only (no `hyprcursor/` dir), which Hyprland renders through its XCursor fallback, so both `XCURSOR_*` and `HYPRCURSOR_*` naming the same theme are safe.

View File

@@ -65,6 +65,13 @@ in
};
settings = {
# Scale the UI and page by a fixed factor. Left at auto (-1),
# Firefox reads the panel's 1.5x and inflates its whole chrome on
# this display while point-sized apps stay put; a shade under that
# brings it into line without dropping to true 1:1, which reads too
# small at this DPI.
"layout.css.devPixelsPerPx" = "1.25";
# Auto-enable the sideloaded Firefox Color add-on that carries the
# Nord chrome theme, which Firefox otherwise leaves disabled.
# The functional extensions come through policy and are unaffected.

View File

@@ -8,6 +8,7 @@
let
cfg = config.modules.desktop.hyprland;
user = config.user.name;
cursor = config.stylix.cursor;
# Numbered-workspace switch and move for 1..9, the operator's i3 muscle memory.
workspaceBinds = lib.concatMap (n: [
@@ -62,6 +63,19 @@ in
"$mod" = "SUPER";
"$terminal" = "alacritty";
# Hand the cursor theme to the compositor directly. UWSM launches the
# session without the shell profile that carries the pointer-cursor
# variables, so without this Hyprland never sees a theme and falls back
# to its built-in cursor. Bibata ships XCursor only; the hyprcursor
# variables name the same theme, which Hyprland resolves through its
# XCursor fallback.
env = lib.optionals (cursor != null) [
"XCURSOR_THEME,${cursor.name}"
"XCURSOR_SIZE,${toString cursor.size}"
"HYPRCURSOR_THEME,${cursor.name}"
"HYPRCURSOR_SIZE,${toString cursor.size}"
];
input = {
kb_layout = "us";
# Caps is a second Escape.

View File

@@ -34,13 +34,26 @@ in
cursor = {
package = pkgs.bibata-cursors;
# Solid white with a dark outline, so it stays easy to spot against the
# dark Nord wallpaper.
name = "Bibata-Modern-Ice";
size = 24;
};
fonts.monospace = {
package = pkgs.jetbrains-mono;
name = "JetBrains Mono";
fonts = {
monospace = {
package = pkgs.jetbrains-mono;
name = "JetBrains Mono";
};
# A step below Stylix's defaults (applications 12, desktop/popups 10,
# terminal 12), which read oversized on this display.
sizes = {
applications = 10;
desktop = 9;
popups = 9;
terminal = 10;
};
};
};

View File

@@ -84,7 +84,18 @@ in
};
functions = {
fish_greeting = "fastfetch";
# Pick the logo that fits the terminal so the greeting never wraps:
# the full logo needs about 118 columns beside the info block, the
# compact one about 89, and the info block alone about 71.
fish_greeting = ''
if test "$COLUMNS" -ge 118
fastfetch
else if test "$COLUMNS" -ge 89
fastfetch --logo NixOS_small
else
fastfetch --logo none
end
'';
# vi insert mode omits the emacs ctrl-f and ctrl-r bindings, so
# restore both.