Files
omnixy/modules/themes/catppuccin-latte.nix

355 lines
10 KiB
Nix

{ config, pkgs, lib, ... }:
# Catppuccin Latte theme for OmniXY
# A soothing light theme with excellent contrast
with lib;
let
cfg = config.omnixy;
omnixy = import ../helpers.nix { inherit config pkgs lib; };
# Catppuccin Latte color palette
colors = {
# Base colors (light theme)
base = "#eff1f5"; # Light background
mantle = "#e6e9ef"; # Slightly darker background
crust = "#dce0e8"; # Crust background
# Text colors
text = "#4c4f69"; # Main text
subtext1 = "#5c5f77"; # Subtext 1
subtext0 = "#6c6f85"; # Subtext 0
# Surface colors
surface0 = "#ccd0da"; # Surface 0
surface1 = "#bcc0cc"; # Surface 1
surface2 = "#acb0be"; # Surface 2
# Overlay colors
overlay0 = "#9ca0b0"; # Overlay 0
overlay1 = "#8c8fa1"; # Overlay 1
overlay2 = "#7c7f93"; # Overlay 2
# Accent colors
rosewater = "#dc8a78"; # Rosewater
flamingo = "#dd7878"; # Flamingo
pink = "#ea76cb"; # Pink
mauve = "#8839ef"; # Mauve
red = "#d20f39"; # Red
maroon = "#e64553"; # Maroon
peach = "#fe640b"; # Peach
yellow = "#df8e1d"; # Yellow
green = "#40a02b"; # Green
teal = "#179299"; # Teal
sky = "#04a5e5"; # Sky
sapphire = "#209fb5"; # Sapphire
blue = "#1e66f5"; # Blue
lavender = "#7287fd"; # Lavender
};
in
{
config = mkIf (cfg.enable or true) (mkMerge [
# System-level theme configuration
{
# Set theme wallpaper
omnixy.desktop.wallpaper = ./wallpapers/catppuccin-latte/1-catppuccin-latte.png;
# Hyprland theme colors (from omarchy)
environment.etc."omnixy/hyprland/theme.conf".text = ''
general {
col.active_border = rgb(1e66f5)
col.inactive_border = rgba(9ca0b0aa)
}
decoration {
col.shadow = rgba(4c4f69ee)
}
'';
# GTK theme (light theme)
programs.dconf.enable = true;
# Environment variables for consistent theming
environment.variables = {
GTK_THEME = "Adwaita";
QT_STYLE_OVERRIDE = "adwaita";
OMNIXY_THEME_COLORS_BG = colors.base;
OMNIXY_THEME_COLORS_FG = colors.text;
OMNIXY_THEME_COLORS_ACCENT = colors.blue;
};
# Console colors (adapted for light theme)
console = {
colors = [
colors.surface2 # black
colors.red # red
colors.green # green
colors.yellow # yellow
colors.blue # blue
colors.mauve # magenta
colors.teal # cyan
colors.text # white
colors.overlay1 # bright black
colors.red # bright red
colors.green # bright green
colors.yellow # bright yellow
colors.blue # bright blue
colors.mauve # bright magenta
colors.teal # bright cyan
colors.text # bright white
];
};
}
# User-specific theme configuration
(omnixy.forUser {
# GTK configuration (light theme)
gtk = {
enable = true;
theme = {
name = "Adwaita";
package = pkgs.gnome-themes-extra;
};
iconTheme = {
name = "Papirus";
package = pkgs.papirus-icon-theme;
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = 0;
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = 0;
};
};
# Qt theming (light theme)
qt = {
enable = true;
platformTheme.name = "adwaita";
style.name = "adwaita";
};
# Kitty terminal theme
programs.kitty = mkIf (omnixy.isEnabled "coding" || omnixy.isEnabled "media") {
enable = true;
themeFile = "Catppuccin-Latte";
settings = {
background = colors.base;
foreground = colors.text;
selection_background = colors.surface1;
selection_foreground = colors.text;
# Cursor colors
cursor = colors.text;
cursor_text_color = colors.base;
# URL underline color when hovering
url_color = colors.blue;
# Tab colors
active_tab_background = colors.blue;
active_tab_foreground = colors.base;
inactive_tab_background = colors.surface0;
inactive_tab_foreground = colors.subtext1;
# Window border colors
active_border_color = colors.blue;
inactive_border_color = colors.overlay0;
};
};
# Alacritty terminal theme
programs.alacritty = mkIf (omnixy.isEnabled "coding" || omnixy.isEnabled "media") {
enable = true;
settings = {
colors = {
primary = {
background = colors.base;
foreground = colors.text;
};
cursor = {
text = colors.base;
cursor = colors.text;
};
normal = {
black = colors.surface1;
red = colors.red;
green = colors.green;
yellow = colors.yellow;
blue = colors.blue;
magenta = colors.mauve;
cyan = colors.teal;
white = colors.text;
};
bright = {
black = colors.overlay1;
red = colors.red;
green = colors.green;
yellow = colors.yellow;
blue = colors.blue;
magenta = colors.mauve;
cyan = colors.teal;
white = colors.text;
};
};
};
};
# Waybar theme
programs.waybar = mkIf (omnixy.isEnabled "media" || omnixy.isEnabled "gaming") {
enable = true;
style = ''
* {
font-family: "JetBrainsMono Nerd Font";
font-size: 13px;
border: none;
border-radius: 0;
min-height: 0;
}
window#waybar {
background: ${colors.base};
color: ${colors.text};
border-bottom: 2px solid ${colors.blue};
}
#workspaces button {
padding: 0 8px;
background: transparent;
color: ${colors.subtext1};
border-bottom: 2px solid transparent;
}
#workspaces button.active {
color: ${colors.blue};
border-bottom-color: ${colors.blue};
}
#workspaces button:hover {
color: ${colors.text};
background: ${colors.surface0};
}
#clock, #battery, #cpu, #memory, #network, #pulseaudio {
padding: 0 10px;
margin: 0 2px;
background: ${colors.surface0};
color: ${colors.text};
}
#battery.critical {
color: ${colors.red};
}
#battery.warning {
color: ${colors.yellow};
}
'';
};
# Rofi theme
programs.rofi = mkIf (omnixy.isEnabled "media" || omnixy.isEnabled "gaming") {
enable = true;
theme = {
"*" = {
background-color = mkLiteral colors.base;
foreground-color = mkLiteral colors.text;
border-color = mkLiteral colors.blue;
separatorcolor = mkLiteral colors.surface0;
scrollbar-handle = mkLiteral colors.blue;
};
"#window" = {
border = mkLiteral "2px";
border-radius = mkLiteral "8px";
padding = mkLiteral "20px";
};
"#element selected" = {
background-color = mkLiteral colors.blue;
text-color = mkLiteral colors.base;
};
};
};
# Mako notification theme
services.mako = mkIf (omnixy.isEnabled "media" || omnixy.isEnabled "gaming") {
enable = true;
settings = {
font = "JetBrainsMono Nerd Font 10";
background-color = colors.base;
text-color = colors.text;
border-color = colors.blue;
border-size = 2;
border-radius = 8;
padding = "10";
margin = "5";
default-timeout = 5000;
progress-color = colors.blue;
};
};
# VSCode theme
programs.vscode = mkIf (omnixy.isEnabled "coding") {
enable = true;
userSettings = {
"workbench.colorTheme" = "Catppuccin Latte";
"workbench.preferredLightColorTheme" = "Catppuccin Latte";
"editor.fontFamily" = "'JetBrainsMono Nerd Font', 'Droid Sans Mono', 'monospace'";
"terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font'";
};
};
# Neovim theme
programs.neovim = mkIf (omnixy.isEnabled "coding") {
enable = true;
extraConfig = ''
set background=light
colorscheme catppuccin-latte
'';
plugins = with pkgs.vimPlugins; [
catppuccin-nvim
];
};
# Git diff and bat theme
programs.bat.config.theme = "Catppuccin-latte";
# btop theme - using latte theme
programs.btop.settings.color_theme = "catppuccin-latte";
# Lazygit theme
programs.lazygit.settings = {
gui.theme = {
lightTheme = true;
selectedLineBgColor = [ colors.surface0 ];
selectedRangeBgColor = [ colors.surface0 ];
};
};
# Zsh/shell prompt colors
programs.starship = mkIf (omnixy.isEnabled "coding") {
enable = true;
settings = {
format = "$directory$git_branch$git_status$character";
character = {
success_symbol = "[](bold ${colors.green})";
error_symbol = "[](bold ${colors.red})";
};
directory = {
style = "bold ${colors.blue}";
};
git_branch = {
style = "bold ${colors.mauve}";
};
git_status = {
style = "bold ${colors.yellow}";
};
};
};
})
]);
}