11.stylix/modules/wezterm/hm.nix
NAHO dfc859f54d
treewide: optionalize mkTarget's humanName and name arguments
Optionalize mkTarget's 'humanName' and 'name' arguments by inferring
'humanName' from the 'name' attribute in the /modules/<MODULE>/meta.nix
file, and 'name' from the /modules/<NAME>/ directory name.

Inferring the 'humanName' and 'name' arguments ensures consistency and
reduces boilerplate.

The 'humanName' and 'name' arguments are optionalized instead of removed
because complex modules generating target derivations need to
distinguish between them.

Closes: https://github.com/nix-community/stylix/issues/1661
2025-12-10 14:48:37 +01:00

188 lines
5.4 KiB
Nix

{
mkTarget,
config,
lib,
...
}:
mkTarget {
options.luaBody = lib.mkOption {
type = lib.types.lines;
default = "";
internal = true;
};
config = [
(
{ colors }:
with colors;
{
programs.wezterm.colorSchemes.stylix = {
ansi = [
base00
base08
base0B
base0A
base0D
base0E
base0C
base05
];
brights = [
base03
base08
base0B
base0A
base0D
base0E
base0C
base07
];
background = base00;
cursor_bg = base05;
cursor_fg = base00;
compose_cursor = base06;
foreground = base05;
scrollbar_thumb = base01;
selection_bg = base05;
selection_fg = base00;
split = base03;
visual_bell = base09;
tab_bar = {
background = base01;
inactive_tab_edge = base01;
active_tab = {
bg_color = base00;
fg_color = base05;
};
inactive_tab = {
bg_color = base03;
fg_color = base05;
};
inactive_tab_hover = {
bg_color = base05;
fg_color = base00;
};
new_tab = {
bg_color = base03;
fg_color = base05;
};
new_tab_hover = {
bg_color = base05;
fg_color = base00;
};
};
};
stylix.targets.wezterm.luaBody = ''
color_scheme = "stylix",
window_frame = {
active_titlebar_bg = "${base03}",
active_titlebar_fg = "${base05}",
active_titlebar_border_bottom = "${base03}",
border_left_color = "${base01}",
border_right_color = "${base01}",
border_bottom_color = "${base01}",
border_top_color = "${base01}",
button_bg = "${base01}",
button_fg = "${base05}",
button_hover_bg = "${base05}",
button_hover_fg = "${base03}",
inactive_titlebar_bg = "${base01}",
inactive_titlebar_fg = "${base05}",
inactive_titlebar_border_bottom = "${base03}",
},
colors = {
tab_bar = {
background = "${base01}",
inactive_tab_edge = "${base01}",
active_tab = {
bg_color = "${base00}",
fg_color = "${base05}",
},
inactive_tab = {
bg_color = "${base03}",
fg_color = "${base05}",
},
inactive_tab_hover = {
bg_color = "${base05}",
fg_color = "${base00}",
},
new_tab = {
bg_color = "${base03}",
fg_color = "${base05}",
},
new_tab_hover = {
bg_color = "${base05}",
fg_color = "${base00}",
},
},
},
command_palette_bg_color = "${base01}",
command_palette_fg_color = "${base05}",
'';
}
)
(
{ fonts }:
{
stylix.targets.wezterm.luaBody = ''
font = wezterm.font_with_fallback {
"${fonts.monospace.name}",
"${fonts.emoji.name}",
},
font_size = ${toString fonts.sizes.terminal},
command_palette_font_size = ${toString fonts.sizes.popups},
'';
}
)
(
{ opacity }:
{
stylix.targets.wezterm.luaBody = "window_background_opacity = ${toString opacity.terminal},";
}
)
(
{ cfg }:
let
indent =
string: " " + lib.concatStringsSep "\n " (lib.splitString "\n" string);
in
{
xdg.configFile."wezterm/wezterm.lua" =
lib.mkIf (config.programs.wezterm.enable && cfg.luaBody != "")
{
text = lib.mkForce (
lib.concatLines [
''
-- Generated by Stylix
local wezterm = require("wezterm")
wezterm.add_to_config_reload_watch_list(wezterm.config_dir)
-- Allow working with both the current release and the nightly
local config = {}
if wezterm.config_builder then
config = wezterm.config_builder()
end
local stylix_base_config = {
''
(indent cfg.luaBody)
''
}
for key, value in pairs(stylix_base_config) do
config[key] = value
end
local function stylix_wrapped_config()
${config.programs.wezterm.extraConfig}
end
local stylix_user_config = stylix_wrapped_config()
if stylix_user_config then
for key, value in pairs(stylix_user_config) do
config[key] = value
end
end
return config
''
]
);
};
}
)
];
}