flocon/modules/hm/programs/terminal/emulators/ghostty.nix

80 lines
2.1 KiB
Nix
Raw Normal View History

2025-01-23 23:11:51 +00:00
{
lib,
pkgs,
2025-01-23 23:11:51 +00:00
osConfig,
...
}: let
inherit (lib) mapAttrs mkIf optionalAttrs removePrefix;
styleCfg = osConfig.local.style;
mkGhosttyTheme = palette: let
colors = mapAttrs (_: value: removePrefix "#" value) palette;
in {
palette = [
"0=#${colors.base00}"
"1=#${colors.base08}"
"2=#${colors.base0B}"
"3=#${colors.base0A}"
"4=#${colors.base0D}"
"5=#${colors.base0E}"
"6=#${colors.base0C}"
"7=#${colors.base05}"
"8=#${colors.base02}"
"9=#${colors.base08}"
"10=#${colors.base0B}"
"11=#${colors.base0A}"
"12=#${colors.base0D}"
"13=#${colors.base0E}"
"14=#${colors.base0C}"
"15=#${colors.base07}"
"16=#${colors.base09}"
"17=#${colors.base0F}"
"18=#${colors.base01}"
"19=#${colors.base02}"
"20=#${colors.base04}"
"21=#${colors.base06}"
];
background = colors.base00;
foreground = colors.base05;
cursor-color = colors.base06;
selection-background = colors.base02;
selection-foreground = colors.base05;
};
in {
config = lib.mkIf osConfig.local.profiles.desktop.enable {
programs.ghostty = lib.mkMerge [
{
enable = true;
settings = {
font-family = ["monospace" "Symbols Nerd Font"];
font-size = 14;
gtk-single-instance = true;
confirm-close-surface = false;
};
2025-01-23 23:11:51 +00:00
}
(optionalAttrs styleCfg.enable {
settings.theme = "base16";
themes.base16 = mkIf styleCfg.enable (mkGhosttyTheme styleCfg.scheme.palette);
})
];
systemd.user.services.ghosttyd = {
Unit = {
Description = "ghosttyd";
PartOf = "graphical-session.target";
After = "graphical-session.target";
};
Service = {
Type = "simple";
ExecStart = "${pkgs.ghostty}/bin/ghostty --initial-window=false --quit-after-last-window-closed=false";
Slice = "background-graphical.slice";
Restart = "on-failure";
};
Install = {
WantedBy = ["graphical-session.target"];
};
};
2025-01-23 23:11:51 +00:00
};
}