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.
60 lines
1.6 KiB
Nix
60 lines
1.6 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
# Nord theming for the graphical layer, driven from one base16 scheme by Stylix.
|
|
let
|
|
cfg = config.modules.desktop.theming;
|
|
user = config.user.name;
|
|
|
|
# A single static Nord wallpaper, drawn as a vertical gradient across the
|
|
# Polar Night shades so it needs no committed binary and no network fetch.
|
|
wallpaper = pkgs.runCommand "nord-wallpaper.png" { } ''
|
|
${pkgs.imagemagick}/bin/magick \
|
|
-size 2560x1440 gradient:'#2E3440'-'#3B4252' \
|
|
"$out"
|
|
'';
|
|
in
|
|
{
|
|
options.modules.desktop.theming.enable =
|
|
lib.mkEnableOption "Nord theming of the graphical layer via Stylix";
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
stylix = {
|
|
enable = true;
|
|
|
|
# Nord is a dark scheme.
|
|
# The polarity steers Stylix's contrast choices.
|
|
polarity = "dark";
|
|
base16Scheme = "${pkgs.base16-schemes}/share/themes/nord.yaml";
|
|
|
|
image = wallpaper;
|
|
|
|
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";
|
|
};
|
|
};
|
|
|
|
home-manager.users.${user} = {
|
|
# Stylix drives the cursor through home-manager's pointer-cursor config,
|
|
# whose generation must be switched on explicitly.
|
|
home.pointerCursor.enable = true;
|
|
|
|
# nvim keeps its dedicated Nord colorscheme, which is richer than the
|
|
# base16 mapping Stylix would apply, so its target stays off.
|
|
stylix.targets.nixvim.enable = false;
|
|
};
|
|
};
|
|
}
|