This makes the hjem ghostty module more RFC42 compliant, as it can now map nested attribute sets one level deep (as per Ghostty's configuration format).
112 lines
3.2 KiB
Nix
112 lines
3.2 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
config,
|
|
...
|
|
}: let
|
|
inherit (lib) mapAttrs mkIf mkMerge optionalAttrs removePrefix;
|
|
inherit (config.local.systemVars) username;
|
|
styleCfg = config.local.style;
|
|
|
|
prefix = "ctrl+a";
|
|
|
|
mkGhosttyTheme = palette: let
|
|
colors = mapAttrs (_: value: removePrefix "#" value) palette;
|
|
in
|
|
with colors; {
|
|
base16 = {
|
|
palette = {
|
|
"0" = "#${base00}";
|
|
"1" = "#${base08}";
|
|
"2" = "#${base0B}";
|
|
"3" = "#${base0A}";
|
|
"4" = "#${base0D}";
|
|
"5" = "#${base0E}";
|
|
"6" = "#${base0C}";
|
|
"7" = "#${base05}";
|
|
"8" = "#${base02}";
|
|
"9" = "#${base08}";
|
|
"10" = "#${base0B}";
|
|
"11" = "#${base0A}";
|
|
"12" = "#${base0D}";
|
|
"13" = "#${base0E}";
|
|
"14" = "#${base0C}";
|
|
"15" = "#${base07}";
|
|
"16" = "#${base09}";
|
|
"17" = "#${base0F}";
|
|
"18" = "#${base01}";
|
|
"19" = "#${base02}";
|
|
"20" = "#${base04}";
|
|
"21" = "#${base06}";
|
|
};
|
|
background = base00;
|
|
foreground = base05;
|
|
cursor-color = base06;
|
|
selection-background = base02;
|
|
selection-foreground = base05;
|
|
};
|
|
};
|
|
in {
|
|
config = mkIf config.local.profiles.desktop.enable {
|
|
hjem.users.${username} = {
|
|
programs.ghostty = mkMerge [
|
|
{
|
|
enable = true;
|
|
settings = {
|
|
font-family = ["monospace" "Symbols Nerd Font"];
|
|
font-size = 14;
|
|
gtk-single-instance = true;
|
|
gtk-adwaita = false;
|
|
confirm-close-surface = false;
|
|
|
|
keybind = {
|
|
"${prefix}>c" = "new_tab";
|
|
"${prefix}>p" = "move_tab:-1";
|
|
"${prefix}>n" = "move_tab:1";
|
|
|
|
"${prefix}>\\" = "new_split:right";
|
|
"${prefix}>-" = "new_split:down";
|
|
"${prefix}>h" = "goto_split:left";
|
|
"${prefix}>j" = "goto_split:bottom";
|
|
"${prefix}>k" = "goto_split:top";
|
|
"${prefix}>l" = "goto_split:right";
|
|
"${prefix}>shift+h" = "resize_split:left,10";
|
|
"${prefix}>shift+j" = "resize_split:down,10";
|
|
"${prefix}>shift+k" = "resize_split:up,10";
|
|
"${prefix}>shift+l" = "resize_split:right,11";
|
|
"${prefix}>z" = "toggle_split_zoom";
|
|
};
|
|
|
|
adw-toolbar-style = "flat";
|
|
gtk-tabs-location = "bottom";
|
|
gtk-wide-tabs = false;
|
|
window-decoration = false;
|
|
|
|
linux-cgroup = "always";
|
|
};
|
|
}
|
|
(optionalAttrs styleCfg.enable
|
|
{
|
|
settings.theme = "base16";
|
|
themes.base16 = mkGhosttyTheme styleCfg.scheme.palette;
|
|
})
|
|
];
|
|
};
|
|
|
|
systemd.user.services.ghostty = {
|
|
name = "ghostty";
|
|
description = "ghosttyd™";
|
|
partOf = ["graphical-session.target"];
|
|
after = ["graphical-session.target"];
|
|
wantedBy = ["graphical-session.target"];
|
|
path = lib.mkForce [];
|
|
|
|
serviceConfig = {
|
|
Type = "simple";
|
|
ExecStart = "${pkgs.ghostty}/bin/ghostty --initial-window=false --quit-after-last-window-closed=false";
|
|
Restart = "on-failure";
|
|
Slice = "background-graphical.slice";
|
|
};
|
|
};
|
|
};
|
|
}
|