2025-01-27 23:30:24 +01:00
|
|
|
{
|
|
|
|
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;
|
2025-02-17 23:12:35 +01:00
|
|
|
in
|
|
|
|
with colors; {
|
|
|
|
base16 = {
|
2025-02-18 09:33:53 +01:00
|
|
|
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}";
|
|
|
|
};
|
2025-02-17 23:12:35 +01:00
|
|
|
background = base00;
|
|
|
|
foreground = base05;
|
|
|
|
cursor-color = base06;
|
|
|
|
selection-background = base02;
|
|
|
|
selection-foreground = base05;
|
|
|
|
};
|
|
|
|
};
|
2025-01-27 23:30:24 +01:00
|
|
|
in {
|
|
|
|
config = mkIf config.local.profiles.desktop.enable {
|
|
|
|
hjem.users.${username} = {
|
2025-02-17 23:12:35 +01:00
|
|
|
programs.ghostty = mkMerge [
|
2025-01-27 23:30:24 +01:00
|
|
|
{
|
2025-02-17 23:12:35 +01:00
|
|
|
enable = true;
|
|
|
|
settings = {
|
|
|
|
font-family = ["monospace" "Symbols Nerd Font"];
|
|
|
|
font-size = 14;
|
|
|
|
gtk-single-instance = true;
|
|
|
|
gtk-adwaita = false;
|
|
|
|
confirm-close-surface = false;
|
2025-01-27 23:30:24 +01:00
|
|
|
|
2025-02-18 09:33:53 +01:00
|
|
|
keybind = {
|
|
|
|
"${prefix}>c" = "new_tab";
|
|
|
|
"${prefix}>p" = "move_tab:-1";
|
|
|
|
"${prefix}>n" = "move_tab:1";
|
2025-01-27 23:30:24 +01:00
|
|
|
|
2025-02-18 09:33:53 +01:00
|
|
|
"${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";
|
|
|
|
};
|
2025-01-27 23:30:24 +01:00
|
|
|
|
2025-02-17 23:12:35 +01:00
|
|
|
adw-toolbar-style = "flat";
|
|
|
|
gtk-tabs-location = "bottom";
|
|
|
|
gtk-wide-tabs = false;
|
|
|
|
window-decoration = false;
|
2025-01-27 23:30:24 +01:00
|
|
|
|
2025-02-17 23:12:35 +01:00
|
|
|
linux-cgroup = "always";
|
|
|
|
};
|
2025-01-27 23:30:24 +01:00
|
|
|
}
|
|
|
|
(optionalAttrs styleCfg.enable
|
|
|
|
{
|
2025-02-17 23:12:35 +01:00
|
|
|
settings.theme = "base16";
|
|
|
|
themes.base16 = mkGhosttyTheme styleCfg.scheme.palette;
|
2025-01-27 23:30:24 +01:00
|
|
|
})
|
|
|
|
];
|
|
|
|
};
|
2025-01-31 19:19:53 +01:00
|
|
|
|
2025-02-02 13:55:41 +01:00
|
|
|
systemd.user.services.ghostty = {
|
|
|
|
name = "ghostty";
|
2025-01-31 19:19:53 +01:00
|
|
|
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";
|
2025-02-11 18:21:02 +01:00
|
|
|
Slice = "background-graphical.slice";
|
2025-01-31 19:19:53 +01:00
|
|
|
};
|
|
|
|
};
|
2025-01-27 23:30:24 +01:00
|
|
|
};
|
|
|
|
}
|