diff --git a/home/modules/kitty.nix b/home/modules/kitty.nix index 530f1a7..d110fd0 100644 --- a/home/modules/kitty.nix +++ b/home/modules/kitty.nix @@ -1,63 +1,55 @@ { config, pkgs, ... }: - let c = config.theme.colors; + colorConf = '' + background ${c.bg} + foreground ${c.fg} + selection_background ${c.bg2} + selection_foreground ${c.fg} + cursor ${c.fg} + cursor_text_color ${c.bg} + url_color ${c.blue_b} + color0 ${c.bg1} + color8 ${c.bg2} + color1 ${c.red} + color9 ${c.red_b} + color2 ${c.green} + color10 ${c.green_b} + color3 ${c.yellow} + color11 ${c.yellow_b} + color4 ${c.blue} + color12 ${c.blue_b} + color5 ${c.purple} + color13 ${c.purple_b} + color6 ${c.aqua} + color14 ${c.aqua_b} + color7 ${c.fg4} + color15 ${c.fg1} + ''; in { programs.kitty = { enable = true; package = pkgs.emptyDirectory; - font = { name = "JetBrainsMono Nerd Font"; size = 12; }; - settings = { - shell = "zsh --login"; - # Colors - background = c.bg; - foreground = c.fg; - selection_background = c.bg2; - selection_foreground = c.fg; - cursor = c.fg; - cursor_text_color = c.bg; - url_color = c.blue_b; - - color0 = c.bg1; color8 = c.bg2; - color1 = c.red; color9 = c.red_b; - color2 = c.green; color10 = c.green_b; - color3 = c.yellow; color11 = c.yellow_b; - color4 = c.blue; color12 = c.blue_b; - color5 = c.purple; color13 = c.purple_b; - color6 = c.aqua; color14 = c.aqua_b; - color7 = c.fg4; color15 = c.fg1; - - # Window - window_padding_width = 12; - background_opacity = "1.0"; + shell = "zsh --login"; + window_padding_width = 12; + background_opacity = "1.0"; hide_window_decorations = "yes"; - - # Cursor - cursor_shape = "block"; - cursor_blink_interval = 1; - - # Scrollback - scrollback_lines = 3000; - - # Selection - copy_on_select = "yes"; - strip_trailing_spaces = "smart"; - - # Tab bar - tab_bar_style = "powerline"; - tab_bar_align = "left"; - tab_bar_edge = "top"; - - # Shell integration - shell_integration = "enabled"; + cursor_shape = "block"; + cursor_blink_interval = 1; + scrollback_lines = 3000; + copy_on_select = "yes"; + strip_trailing_spaces = "smart"; + tab_bar_style = "powerline"; + tab_bar_align = "left"; + tab_bar_edge = "top"; + shell_integration = "enabled"; }; - keybindings = { "ctrl+shift+n" = "new_window"; "ctrl+t" = "new_tab"; @@ -66,4 +58,19 @@ in "ctrl+0" = "change_font_size all 0"; }; }; + + # Write theme colors into the auto conf files so they take effect + # regardless of OS dark/light mode setting + home.file.".config/kitty/dark-theme.auto.conf" = { + force = true; + text = colorConf; + }; + home.file.".config/kitty/light-theme.auto.conf" = { + force = true; + text = colorConf; + }; + home.file.".config/kitty/no-preference-theme.auto.conf" = { + force = true; + text = colorConf; + }; } diff --git a/home/modules/theme.nix b/home/modules/theme.nix index e65b9f6..81c489e 100644 --- a/home/modules/theme.nix +++ b/home/modules/theme.nix @@ -1,11 +1,7 @@ -{ lib, ... }: - -{ - options.theme.colors = lib.mkOption { - type = lib.types.attrsOf lib.types.str; - description = "Named color palette"; - default = { - # Gruvbox Dark Medium +{ lib, config, ... }: +let + themes = { + gruvboxDarkMedium = { bg = "#282828"; bg0_h = "#1d2021"; bg0_s = "#32302f"; @@ -34,5 +30,50 @@ orange_b = "#fe8019"; gray = "#928374"; }; + catppuccinMocha = { + bg = "#1e1e2e"; + bg0_h = "#11111b"; + bg0_s = "#181825"; + bg1 = "#313244"; + bg2 = "#45475a"; + bg3 = "#585b70"; + bg4 = "#6c7086"; + fg = "#cdd6f4"; + fg1 = "#cdd6f4"; + fg2 = "#bac2de"; + fg3 = "#a6adc8"; + fg4 = "#9399b2"; + red = "#d20f39"; + red_b = "#f38ba8"; + green = "#40a02b"; + green_b = "#a6e3a1"; + yellow = "#df8e1d"; + yellow_b = "#f9e2af"; + blue = "#1e66f5"; + blue_b = "#89b4fa"; + purple = "#8839ef"; + purple_b = "#cba6f7"; + aqua = "#179299"; + aqua_b = "#94e2d5"; + orange = "#fe640b"; + orange_b = "#fab387"; + gray = "#7f849c"; + }; }; +in +{ + options.theme = { + name = lib.mkOption { + type = lib.types.enum (builtins.attrNames themes); + default = "gruvboxDarkMedium"; + description = "Theme name to use"; + }; + colors = lib.mkOption { + type = lib.types.attrsOf lib.types.str; + description = "Named color palette"; + default = themes.gruvboxDarkMedium; + }; + }; + + config.theme.colors = themes.${config.theme.name}; } diff --git a/home/profiles/notebook.nix b/home/profiles/notebook.nix index 9754a54..d990f36 100644 --- a/home/profiles/notebook.nix +++ b/home/profiles/notebook.nix @@ -9,6 +9,7 @@ myConfig.wayland.enable = true; myConfig.niri.defaultColumnProportion = 1.0; myConfig.niri.presetColumnWidths = [ 0.5 1.0 ]; + # theme.name = "catppuccinMocha"; home.packages = with pkgs; [ powertop acpi