diff --git a/modules/themes/README.md b/modules/themes/README.md new file mode 100644 index 0000000..1f0f54b --- /dev/null +++ b/modules/themes/README.md @@ -0,0 +1,311 @@ +# Themes Directory - Omnixient Theme System + +The `modules/themes/` directory contains complete theme definitions that provide unified styling across all applications and desktop components in Omnixient. Each theme is a self-contained Nix module that configures colors, fonts, and appearance settings system-wide. + +## Theme Architecture + +Each theme module follows this structure: +```nix +{ config, lib, pkgs, ... }: +let + # Color palette definitions + colors = { + primary = "#7aa2f7"; + background = "#1a1b26"; + # ... more colors + }; +in { + # Theme configuration for all applications + config = lib.mkIf (config.omni.theme == "theme-name") { + # Application configurations + }; +} +``` + +## Available Themes + +Omnixient includes 11 carefully crafted themes: + +### Dark Themes + +#### `tokyo-night.nix` (Default) +**Inspiration**: Tokyo's neon-lit nights +**Palette**: Deep blues and vibrant accents +**Character**: Modern, clean, high contrast +**Best for**: Programming, late-night work + +**Key Colors**: +- Background: `#1a1b26` (Dark navy) +- Primary: `#7aa2f7` (Bright blue) +- Accent: `#bb9af7` (Purple) +- Success: `#9ece6a` (Green) +- Warning: `#e0af68` (Orange) + +#### `catppuccin.nix` +**Inspiration**: Warm, cozy coffee shop +**Palette**: Soft pastels with warm undertones +**Character**: Soothing, gentle on eyes +**Best for**: Long coding sessions, reading + +**Key Colors**: +- Background: `#1e1e2e` (Warm dark) +- Primary: `#cba6f7` (Soft purple) +- Accent: `#f38ba8` (Rose) +- Success: `#a6e3a1` (Mint green) + +#### `gruvbox.nix` +**Inspiration**: Retro terminal aesthetics +**Palette**: Warm earth tones +**Character**: Vintage, comfortable, nostalgic +**Best for**: Terminal work, distraction-free coding + +#### `nord.nix` +**Inspiration**: Arctic, Scandinavian minimalism +**Palette**: Cool blues and grays +**Character**: Clean, minimal, professional +**Best for**: Focus work, professional environments + +#### `everforest.nix` +**Inspiration**: Deep forest, natural greens +**Palette**: Forest greens with earth accents +**Character**: Calm, natural, easy on eyes +**Best for**: Long work sessions, nature lovers + +#### `rose-pine.nix` +**Inspiration**: English countryside +**Palette**: Muted roses and soft pinks +**Character**: Elegant, sophisticated, gentle +**Best for**: Creative work, design + +#### `kanagawa.nix` +**Inspiration**: Japanese woodblock prints +**Palette**: Traditional Japanese colors +**Character**: Artistic, cultural, balanced +**Best for**: Creative coding, artistic work + +#### `matte-black.nix` +**Inspiration**: Minimalist design +**Palette**: True blacks and whites +**Character**: Stark, minimal, high contrast +**Best for**: Focus, minimal distractions + +#### `osaka-jade.nix` +**Inspiration**: Japanese jade and bamboo +**Palette**: Jade greens with natural accents +**Character**: Serene, balanced, harmonious +**Best for**: Meditation coding, calm work + +#### `ristretto.nix` +**Inspiration**: Dark roasted coffee +**Palette**: Rich browns and warm tones +**Character**: Warm, cozy, comfortable +**Best for**: Coffee shop coding, warm environments + +### Light Theme + +#### `catppuccin-latte.nix` +**Inspiration**: Light coffee, morning work +**Palette**: Soft pastels on light background +**Character**: Bright, energetic, clean +**Best for**: Daytime work, bright environments + +## Theme Components + +Each theme configures these application categories: + +### Terminal Applications +- **Alacritty**: Terminal colors and transparency +- **Kitty**: Color scheme and font rendering +- **Shell**: Prompt colors and syntax highlighting + +### Text Editors +- **Neovim**: Syntax highlighting and UI colors +- **VSCode**: Editor theme and syntax colors +- **Terminal editors**: Vim, nano color schemes + +### Desktop Environment +- **Hyprland**: Window borders, gaps, animations +- **Waybar**: Panel colors, module styling +- **Rofi/Launchers**: Menu and selection colors + +### System UI +- **GTK**: System-wide GTK application theming +- **Qt**: Qt application color schemes +- **Icon themes**: Matching icon sets + +### Notification System +- **Mako**: Notification colors and styling +- **System notifications**: Alert and info colors + +### Development Tools +- **Git tools**: Diff colors, status indicators +- **Lazygit**: TUI color scheme +- **Development containers**: Terminal themes + +## Theme Implementation + +### Color Management +Each theme defines a comprehensive color palette: + +```nix +colors = { + # Base colors + bg = "#1a1b26"; # Background + fg = "#c0caf5"; # Foreground text + + # Accent colors + blue = "#7aa2f7"; # Primary blue + cyan = "#7dcfff"; # Cyan accents + green = "#9ece6a"; # Success/positive + yellow = "#e0af68"; # Warnings + red = "#f7768e"; # Errors/critical + purple = "#bb9af7"; # Special/accent + + # UI colors + border = "#414868"; # Window borders + selection = "#364a82"; # Text selection + comment = "#565f89"; # Comments/inactive +}; +``` + +### Application Configuration +Colors are applied consistently across applications: + +```nix +# Alacritty terminal configuration +programs.alacritty.settings = { + colors = { + primary = { + background = colors.bg; + foreground = colors.fg; + }; + normal = { + black = colors.bg; + blue = colors.blue; + # ... more colors + }; + }; +}; +``` + +### Dynamic Application +Themes are applied conditionally: + +```nix +config = lib.mkIf (config.omni.theme == "tokyo-night") { + # All theme configurations here +}; +``` + +## Theme Switching + +### Command Line +```bash +# List available themes (also prints the current theme) +omni-theme + +# Switch theme +omni-theme gruvbox + +# Interactive picker with preview +omni-theme-picker +``` + +### System Integration +Theme switching: +1. Updates `configuration.nix` with new theme +2. Rebuilds system configuration +3. All applications automatically use new colors +4. No manual restart required for most applications + +### Scriptable Interface +The current theme is recorded as `currentTheme` in `configuration.nix`, so +scripts can read and switch it directly: + +```bash +# Read the current theme from config +current=$(grep -oP 'currentTheme = "\K[^"]+' /etc/nixos/configuration.nix) + +# Switch to the next available theme +ls /etc/nixos/modules/themes/*.nix | xargs -n1 basename -s .nix \ + | grep -v "$current" | head -1 | xargs omni-theme +``` + +## Creating Custom Themes + +### 1. Copy Existing Theme +```bash +cp modules/themes/tokyo-night.nix modules/themes/my-theme.nix +``` + +### 2. Define Color Palette +```nix +let + colors = { + bg = "#your-bg-color"; + fg = "#your-fg-color"; + # Define your complete palette + }; +``` + +### 3. Update Theme Condition +```nix +config = lib.mkIf (config.omni.theme == "my-theme") { + # Theme configurations +}; +``` + +### 4. Add to Available Themes +Update theme management scripts to include your new theme. + +### 5. Test and Iterate +```bash +# Test your theme +omni-theme my-theme + +# Make adjustments and rebuild +omni-rebuild +``` + +## Theme Guidelines + +### Color Accessibility +- Ensure adequate contrast ratios (4.5:1 for normal text) +- Test with color blindness simulators +- Provide clear visual hierarchy + +### Consistency +- Use semantic color naming (primary, secondary, accent) +- Maintain consistent color relationships +- Apply colors systematically across applications + +### Performance +- Avoid complex color calculations +- Use static color definitions +- Test theme switching performance + +### Documentation +- Document color meanings and usage +- Provide theme inspiration and character +- Include screenshots or examples + +## Theme Validation + +### Color Contrast Testing +```bash +# Test theme accessibility +omni-theme my-theme +# Use accessibility tools to check contrast ratios +``` + +### Visual Testing +- Test all major applications +- Verify readability in different lighting +- Check consistency across different screen types + +### Integration Testing +- Ensure theme switching works properly +- Verify all applications receive theme updates +- Test with different desktop configurations + +This comprehensive theme system ensures a cohesive, beautiful, and customizable visual experience across the entire Omnixient desktop environment. \ No newline at end of file diff --git a/modules/themes/catppuccin-latte.nix b/modules/themes/catppuccin-latte.nix new file mode 100644 index 0000000..118b838 --- /dev/null +++ b/modules/themes/catppuccin-latte.nix @@ -0,0 +1,360 @@ +{ + config, + pkgs, + lib, + ... +}: + +# Catppuccin Latte theme for Omnixient +# A soothing light theme with excellent contrast + +let + inherit (lib) mkIf mkMerge mkLiteral; + cfg = config.omni; + isEnabled = feature: cfg.features.${feature} or false; + forUser = userConfig: { home-manager.users.${cfg.user} = userConfig; }; + + # 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 + omni.desktop.wallpaper = ./wallpapers/catppuccin-latte/1-catppuccin-latte.png; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/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"; + OMNI_THEME_COLORS_BG = colors.base; + OMNI_THEME_COLORS_FG = colors.text; + OMNI_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 + (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 (isEnabled "coding" || 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 (isEnabled "coding" || 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 = { + 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 = { + 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 = { + 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 (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 (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 (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}"; + }; + }; + }; + }) + ]); +} diff --git a/modules/themes/catppuccin.nix b/modules/themes/catppuccin.nix new file mode 100644 index 0000000..3376e4e --- /dev/null +++ b/modules/themes/catppuccin.nix @@ -0,0 +1,219 @@ +{ + config, + pkgs, + lib, + ... +}: + +{ + # Catppuccin Mocha theme configuration + config = { + # Set theme wallpaper + omni.desktop.wallpaper = ./wallpapers/catppuccin/1-catppuccin.png; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/hyprland/theme.conf".text = '' + general { + col.active_border = rgb(c6d0f5) + col.inactive_border = rgba(313244aa) + } + decoration { + col.shadow = rgba(1e1e2eee) + } + ''; + + # Color palette + environment.variables = { + OMNI_THEME = "catppuccin"; + OMNI_THEME_BG = "#1e1e2e"; + OMNI_THEME_FG = "#cdd6f4"; + OMNI_THEME_ACCENT = "#cba6f7"; + }; + + # Home-manager theme configuration + home-manager.users.${config.omni.user or "user"} = { + # Alacritty theme + programs.alacritty.settings.colors = { + primary = { + background = "#1e1e2e"; + foreground = "#cdd6f4"; + dim_foreground = "#a6adc8"; + bright_foreground = "#cdd6f4"; + }; + + cursor = { + text = "#1e1e2e"; + cursor = "#f5e0dc"; + }; + + vi_mode_cursor = { + text = "#1e1e2e"; + cursor = "#b4befe"; + }; + + search = { + matches = { + foreground = "#1e1e2e"; + background = "#a6adc8"; + }; + focused_match = { + foreground = "#1e1e2e"; + background = "#a6e3a1"; + }; + }; + + hints = { + start = { + foreground = "#1e1e2e"; + background = "#f9e2af"; + }; + end = { + foreground = "#1e1e2e"; + background = "#a6adc8"; + }; + }; + + selection = { + text = "#1e1e2e"; + background = "#f5e0dc"; + }; + + normal = { + black = "#45475a"; + red = "#f38ba8"; + green = "#a6e3a1"; + yellow = "#f9e2af"; + blue = "#89b4fa"; + magenta = "#f5c2e7"; + cyan = "#94e2d5"; + white = "#bac2de"; + }; + + bright = { + black = "#585b70"; + red = "#f38ba8"; + green = "#a6e3a1"; + yellow = "#f9e2af"; + blue = "#89b4fa"; + magenta = "#f5c2e7"; + cyan = "#94e2d5"; + white = "#a6adc8"; + }; + + dim = { + black = "#45475a"; + red = "#f38ba8"; + green = "#a6e3a1"; + yellow = "#f9e2af"; + blue = "#89b4fa"; + magenta = "#f5c2e7"; + cyan = "#94e2d5"; + white = "#bac2de"; + }; + }; + + # GTK theme + gtk = { + theme = { + name = "Catppuccin-Mocha-Standard-Lavender-Dark"; + package = pkgs.catppuccin-gtk.override { + accents = [ "lavender" ]; + size = "standard"; + variant = "mocha"; + }; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.catppuccin-papirus-folders.override { + flavor = "mocha"; + accent = "lavender"; + }; + }; + }; + + # Starship theme + programs.starship.settings = { + palette = "catppuccin_mocha"; + + palettes.catppuccin_mocha = { + rosewater = "#f5e0dc"; + flamingo = "#f2cdcd"; + pink = "#f5c2e7"; + mauve = "#cba6f7"; + red = "#f38ba8"; + maroon = "#eba0ac"; + peach = "#fab387"; + yellow = "#f9e2af"; + green = "#a6e3a1"; + teal = "#94e2d5"; + sky = "#89dceb"; + sapphire = "#74c7ec"; + blue = "#89b4fa"; + lavender = "#b4befe"; + text = "#cdd6f4"; + subtext1 = "#bac2de"; + subtext0 = "#a6adc8"; + overlay2 = "#9399b2"; + overlay1 = "#7f849c"; + overlay0 = "#6c7086"; + surface2 = "#585b70"; + surface1 = "#45475a"; + surface0 = "#313244"; + base = "#1e1e2e"; + mantle = "#181825"; + crust = "#11111b"; + }; + + format = '' + [╭─](surface2)$username[@](yellow)$hostname [in ](text)$directory$git_branch$git_status$cmd_duration + [╰─](surface2)$character + ''; + + character = { + success_symbol = "[➜](green)"; + error_symbol = "[➜](red)"; + }; + + directory = { + style = "blue"; + }; + + git_branch = { + style = "mauve"; + symbol = " "; + }; + + git_status = { + style = "red"; + }; + }; + + # Mako notification theme + services.mako = { + settings = { + background-color = "#1e1e2e"; + text-color = "#cdd6f4"; + border-color = "#cba6f7"; + progress-color = "#cba6f7"; + default-timeout = 5000; + border-radius = 10; + border-size = 2; + font = "JetBrainsMono Nerd Font 10"; + }; + padding = "10"; + margin = "20"; + }; + }; + + # Hyprland theme colors + environment.systemPackages = with pkgs; [ + (writeShellScriptBin "set-catppuccin-colors" '' + #!/usr/bin/env bash + # Set Catppuccin Mocha colors in Hyprland + hyprctl keyword general:col.active_border "rgba(cba6f7ee) rgba(89b4faee) 45deg" + hyprctl keyword general:col.inactive_border "rgba(585b70aa)" + hyprctl keyword decoration:col.shadow "rgba(1e1e2eee)" + '') + ]; + }; +} diff --git a/modules/themes/everforest.nix b/modules/themes/everforest.nix new file mode 100644 index 0000000..7db8ce9 --- /dev/null +++ b/modules/themes/everforest.nix @@ -0,0 +1,353 @@ +{ + config, + pkgs, + lib, + ... +}: + +# Everforest theme for Omnixient +# A green based color scheme with warm, comfortable tones + +let + inherit (lib) mkIf mkMerge mkLiteral; + cfg = config.omni; + isEnabled = feature: cfg.features.${feature} or false; + forUser = userConfig: { home-manager.users.${cfg.user} = userConfig; }; + + # Everforest Dark color palette + colors = { + # Background colors + bg = "#2d353b"; # Dark background + bg_dim = "#232a2e"; # Dimmer background + bg_red = "#3c302a"; # Red background + bg_visual = "#543a48"; # Visual selection background + bg_yellow = "#45443c"; # Yellow background + bg_green = "#3d4313"; # Green background + bg_blue = "#384b55"; # Blue background + + # Foreground colors + fg = "#d3c6aa"; # Light foreground + red = "#e67e80"; # Red + orange = "#e69875"; # Orange + yellow = "#dbbc7f"; # Yellow + green = "#a7c080"; # Green + aqua = "#83c092"; # Aqua + blue = "#7fbbb3"; # Blue + purple = "#d699b6"; # Purple + grey0 = "#7a8478"; # Grey 0 + grey1 = "#859289"; # Grey 1 + grey2 = "#9da9a0"; # Grey 2 + + # Status line colors + statusline1 = "#a7c080"; # Green for active + statusline2 = "#d3c6aa"; # Foreground for inactive + statusline3 = "#e67e80"; # Red for errors + }; + +in +{ + config = mkIf (cfg.enable or true) (mkMerge [ + # System-level theme configuration + { + # Set theme wallpaper + omni.desktop.wallpaper = ./wallpapers/everforest/1-everforest.jpg; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/hyprland/theme.conf".text = '' + general { + col.active_border = rgb(d3c6aa) + col.inactive_border = rgba(445349aa) + } + decoration { + col.shadow = rgba(232a2eee) + } + ''; + + # GTK theme + programs.dconf.enable = true; + + # Environment variables for consistent theming + environment.variables = { + GTK_THEME = "Adwaita-dark"; + QT_STYLE_OVERRIDE = "adwaita-dark"; + OMNI_THEME_COLORS_BG = colors.bg; + OMNI_THEME_COLORS_FG = colors.fg; + OMNI_THEME_COLORS_ACCENT = colors.green; + }; + + # Console colors + console = { + colors = [ + colors.bg_dim # black + colors.red # red + colors.green # green + colors.yellow # yellow + colors.blue # blue + colors.purple # magenta + colors.aqua # cyan + colors.grey1 # white + colors.grey0 # bright black + colors.red # bright red + colors.green # bright green + colors.yellow # bright yellow + colors.blue # bright blue + colors.purple # bright magenta + colors.aqua # bright cyan + colors.fg # bright white + ]; + }; + } + + # User-specific theme configuration + (forUser { + # GTK configuration + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + + # Qt theming + qt = { + enable = true; + platformTheme.name = "adwaita"; + style.name = "adwaita-dark"; + }; + + # Kitty terminal theme + programs.kitty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + themeFile = "Everforest Dark Medium"; + settings = { + background = colors.bg; + foreground = colors.fg; + selection_background = colors.bg_visual; + selection_foreground = colors.fg; + + # Cursor colors + cursor = colors.fg; + cursor_text_color = colors.bg; + + # URL underline color when hovering + url_color = colors.blue; + + # Tab colors + active_tab_background = colors.green; + active_tab_foreground = colors.bg; + inactive_tab_background = colors.bg_dim; + inactive_tab_foreground = colors.grey1; + + # Window border colors + active_border_color = colors.green; + inactive_border_color = colors.grey0; + }; + }; + + # Alacritty terminal theme + programs.alacritty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + colors = { + primary = { + background = colors.bg; + foreground = colors.fg; + }; + cursor = { + text = colors.bg; + cursor = colors.fg; + }; + normal = { + black = colors.bg_dim; + red = colors.red; + green = colors.green; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.aqua; + white = colors.grey1; + }; + bright = { + black = colors.grey0; + red = colors.red; + green = colors.green; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.aqua; + white = colors.fg; + }; + }; + }; + }; + + # Waybar theme + programs.waybar = { + enable = true; + style = '' + * { + font-family: "JetBrainsMono Nerd Font"; + font-size: 13px; + border: none; + border-radius: 0; + min-height: 0; + } + + window#waybar { + background: ${colors.bg}; + color: ${colors.fg}; + border-bottom: 2px solid ${colors.green}; + } + + #workspaces button { + padding: 0 8px; + background: transparent; + color: ${colors.grey1}; + border-bottom: 2px solid transparent; + } + + #workspaces button.active { + color: ${colors.green}; + border-bottom-color: ${colors.green}; + } + + #workspaces button:hover { + color: ${colors.fg}; + background: ${colors.bg_dim}; + } + + #clock, #battery, #cpu, #memory, #network, #pulseaudio { + padding: 0 10px; + margin: 0 2px; + background: ${colors.bg_dim}; + color: ${colors.fg}; + } + + #battery.critical { + color: ${colors.red}; + } + + #battery.warning { + color: ${colors.yellow}; + } + ''; + }; + + # Rofi theme + programs.rofi = { + enable = true; + theme = { + "*" = { + background-color = mkLiteral colors.bg; + foreground-color = mkLiteral colors.fg; + border-color = mkLiteral colors.green; + separatorcolor = mkLiteral colors.bg_dim; + scrollbar-handle = mkLiteral colors.green; + }; + + "#window" = { + border = mkLiteral "2px"; + border-radius = mkLiteral "8px"; + padding = mkLiteral "20px"; + }; + + "#element selected" = { + background-color = mkLiteral colors.green; + text-color = mkLiteral colors.bg; + }; + }; + }; + + # Mako notification theme + services.mako = { + enable = true; + settings = { + font = "JetBrainsMono Nerd Font 10"; + background-color = colors.bg; + text-color = colors.fg; + border-color = colors.green; + border-size = 2; + border-radius = 8; + padding = "10"; + margin = "5"; + default-timeout = 5000; + progress-color = colors.green; + }; + }; + + # VSCode theme + programs.vscode = mkIf (isEnabled "coding") { + enable = true; + userSettings = { + "workbench.colorTheme" = "Everforest Dark"; + "workbench.preferredDarkColorTheme" = "Everforest Dark"; + "editor.fontFamily" = "'JetBrainsMono Nerd Font', 'Droid Sans Mono', 'monospace'"; + "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font'"; + }; + }; + + # Neovim theme + programs.neovim = mkIf (isEnabled "coding") { + enable = true; + extraConfig = '' + let g:everforest_background = 'medium' + let g:everforest_better_performance = 1 + colorscheme everforest + set background=dark + ''; + plugins = with pkgs.vimPlugins; [ + everforest + ]; + }; + + # Git diff and bat theme + programs.bat.config.theme = "Monokai Extended"; + + # btop theme - using a forest-inspired theme + programs.btop.settings.color_theme = "everforest-dark-medium"; + + # Lazygit theme + programs.lazygit.settings = { + gui.theme = { + lightTheme = false; + selectedLineBgColor = [ colors.bg_visual ]; + selectedRangeBgColor = [ colors.bg_visual ]; + }; + }; + + # Zsh/shell prompt colors + programs.starship = mkIf (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.purple}"; + }; + git_status = { + style = "bold ${colors.yellow}"; + }; + }; + }; + }) + ]); +} diff --git a/modules/themes/gruvbox.nix b/modules/themes/gruvbox.nix new file mode 100644 index 0000000..61f460f --- /dev/null +++ b/modules/themes/gruvbox.nix @@ -0,0 +1,393 @@ +{ + config, + pkgs, + lib, + ... +}: + +# Gruvbox theme for Omnixient +# A retro groove color scheme with warm, earthy tones + +let + inherit (lib) mkIf mkMerge; + mkLiteral = value: { + _type = "literal"; + inherit value; + }; + cfg = config.omni; + isEnabled = feature: cfg.features.${feature} or false; + forUser = userConfig: { home-manager.users.${cfg.user} = userConfig; }; + stripHash = s: builtins.substring 1 (builtins.stringLength s - 1) s; + + # Gruvbox color palette + colors = { + bg = "#282828"; # Dark background + bg_hard = "#1d2021"; # Harder background + bg_soft = "#32302f"; # Soft background + fg = "#ebdbb2"; # Light foreground + fg_dim = "#a89984"; # Dimmed foreground + + red = "#cc241d"; # Dark red + green = "#98971a"; # Dark green + yellow = "#d79921"; # Dark yellow + blue = "#458588"; # Dark blue + purple = "#b16286"; # Dark purple + aqua = "#689d6a"; # Dark aqua + orange = "#d65d0e"; # Dark orange + gray = "#928374"; # Gray + + red_light = "#fb4934"; # Light red + green_light = "#b8bb26"; # Light green + yellow_light = "#fabd2f"; # Light yellow + blue_light = "#83a598"; # Light blue + purple_light = "#d3869b"; # Light purple + aqua_light = "#8ec07c"; # Light aqua + orange_light = "#fe8019"; # Light orange + }; + +in +{ + config = mkIf (cfg.enable or true) (mkMerge [ + # System-level theme configuration + { + # Set theme wallpaper + omni.desktop.wallpaper = ./wallpapers/gruvbox/1-grubox.jpg; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/hyprland/theme.conf".text = '' + general { + col.active_border = rgb(a89984) + col.inactive_border = rgba(665c54aa) + } + decoration { + col.shadow = rgba(1d2021ee) + } + ''; + + # GTK theme + programs.dconf.enable = true; + + # Environment variables for consistent theming + environment.variables = { + GTK_THEME = "Adwaita-dark"; + QT_STYLE_OVERRIDE = "adwaita-dark"; + OMNI_THEME_COLORS_BG = colors.bg; + OMNI_THEME_COLORS_FG = colors.fg; + OMNI_THEME_COLORS_ACCENT = colors.orange_light; + }; + + # Console colors + console = { + colors = map stripHash [ + colors.bg # black + colors.red # red + colors.green # green + colors.yellow # yellow + colors.blue # blue + colors.purple # magenta + colors.aqua # cyan + colors.fg # white + colors.gray # bright black + colors.red_light # bright red + colors.green_light # bright green + colors.yellow_light # bright yellow + colors.blue_light # bright blue + colors.purple_light # bright magenta + colors.aqua_light # bright cyan + colors.fg # bright white + ]; + }; + } + + # User-specific theme configuration + (forUser { + # GTK configuration + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + + # Qt theming + qt = { + enable = true; + platformTheme.name = "adwaita"; + style.name = "adwaita-dark"; + }; + + # Kitty terminal theme + programs.kitty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + themeFile = "gruvbox-dark"; + settings = { + background = colors.bg; + foreground = colors.fg; + selection_background = colors.bg_soft; + selection_foreground = colors.fg; + + # Cursor colors + cursor = colors.fg; + cursor_text_color = colors.bg; + + # URL underline color when hovering + url_color = colors.blue_light; + + # Tab colors + active_tab_background = colors.orange_light; + active_tab_foreground = colors.bg; + inactive_tab_background = colors.bg_soft; + inactive_tab_foreground = colors.fg_dim; + + # Window border colors + active_border_color = colors.orange_light; + inactive_border_color = colors.gray; + }; + }; + + # Alacritty terminal theme + programs.alacritty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + colors = { + primary = { + background = colors.bg; + foreground = colors.fg; + }; + cursor = { + text = colors.bg; + cursor = colors.fg; + }; + normal = { + black = colors.bg; + red = colors.red; + green = colors.green; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.aqua; + white = colors.fg; + }; + bright = { + black = colors.gray; + red = colors.red_light; + green = colors.green_light; + yellow = colors.yellow_light; + blue = colors.blue_light; + magenta = colors.purple_light; + cyan = colors.aqua_light; + white = colors.fg; + }; + }; + }; + }; + + # Waybar theme + programs.waybar = { + enable = true; + style = '' + * { + font-family: "JetBrainsMono Nerd Font"; + font-size: 13px; + border: none; + border-radius: 0; + min-height: 0; + } + + window#waybar { + background: rgba(40, 40, 40, 0.9); + color: ${colors.fg}; + } + .modules-left { + margin-left: 8px; + } + .modules-right { + margin-right: 8px; + } + #workspaces button { + all: initial; + color: ${colors.fg}; + padding: 0 6px; + margin: 0 1.5px; + min-width: 9px; + } + #workspaces button.empty { + opacity: 0.5; + } + #workspaces button.active { + color: ${colors.orange_light}; + } + #custom-omni { + margin: 0 12px 0 4px; + font-size: 14px; + color: ${colors.orange_light}; + } + #cpu, + #battery, + #pulseaudio, + #backlight { + min-width: 12px; + margin: 0 7.5px; + } + #custom-power { + min-width: 12px; + margin: 0 4px 0 7.5px; + color: ${colors.red_light}; + } + #bluetooth { + margin-right: 17px; + } + #network { + margin-right: 13px; + } + #custom-screenshot { + margin-right: 17px; + } + #custom-expand-icon { + margin-right: 18px; + } + #tray { + margin-right: 16px; + } + #clock { + margin-left: 8.75px; + } + #custom-power:hover { + color: ${colors.bg}; + background: ${colors.red_light}; + border-radius: 5px; + } + #battery.charging { color: ${colors.green_light}; } + #battery.warning:not(.charging) { color: ${colors.yellow_light}; } + #battery.critical:not(.charging) { + color: ${colors.red_light}; + animation: blink 0.5s linear infinite alternate; + } + @keyframes blink { + to { background-color: ${colors.red_light}; color: ${colors.bg}; } + } + tooltip { + padding: 2px; + } + ''; + }; + + # Rofi theme + programs.rofi = { + enable = true; + theme = { + "*" = { + background-color = mkLiteral colors.bg; + foreground-color = mkLiteral colors.fg; + border-color = mkLiteral colors.orange_light; + separatorcolor = mkLiteral colors.bg_soft; + scrollbar-handle = mkLiteral colors.orange_light; + }; + + "#window" = { + border = mkLiteral "2px"; + border-radius = mkLiteral "8px"; + padding = mkLiteral "20px"; + }; + + "#element selected" = { + background-color = mkLiteral colors.orange_light; + text-color = mkLiteral colors.bg; + }; + }; + }; + + # Mako notification theme + services.mako = { + enable = true; + settings = { + font = "JetBrainsMono Nerd Font 10"; + background-color = colors.bg; + text-color = colors.fg; + border-color = colors.orange_light; + border-size = 2; + border-radius = 8; + padding = "10"; + margin = "5"; + default-timeout = 5000; + progress-color = colors.orange_light; + }; + }; + + # VSCode theme + programs.vscode = mkIf (isEnabled "coding") { + enable = true; + profiles.default.extensions = with pkgs.vscode-extensions; [ + jdinhlife.gruvbox + ]; + profiles.default.userSettings = { + "workbench.colorTheme" = "Gruvbox Dark Medium"; + "workbench.preferredDarkColorTheme" = "Gruvbox Dark Medium"; + "editor.fontFamily" = "'JetBrainsMono Nerd Font', 'Droid Sans Mono', 'monospace'"; + "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font'"; + }; + }; + + # Neovim theme + programs.neovim = mkIf (isEnabled "coding") { + enable = true; + extraConfig = '' + colorscheme gruvbox + set background=dark + ''; + plugins = with pkgs.vimPlugins; [ + gruvbox-nvim + ]; + }; + + # Git diff and bat theme + programs.bat.config.theme = "gruvbox-dark"; + + # btop theme + programs.btop.settings.color_theme = "gruvbox_dark"; + + # Lazygit theme + programs.lazygit.settings = { + gui.theme = { + lightTheme = false; + selectedLineBgColor = [ colors.bg_soft ]; + selectedRangeBgColor = [ colors.bg_soft ]; + }; + }; + + # Zsh/shell prompt colors + programs.starship = mkIf (isEnabled "coding") { + enable = true; + settings = { + format = "$directory$git_branch$git_status$character"; + character = { + success_symbol = "[➜](bold ${colors.green_light})"; + error_symbol = "[➜](bold ${colors.red_light})"; + }; + directory = { + style = "bold ${colors.blue_light}"; + }; + git_branch = { + style = "bold ${colors.purple_light}"; + }; + git_status = { + style = "bold ${colors.yellow_light}"; + }; + }; + }; + }) + ]); +} diff --git a/modules/themes/kanagawa.nix b/modules/themes/kanagawa.nix new file mode 100644 index 0000000..8f18a2f --- /dev/null +++ b/modules/themes/kanagawa.nix @@ -0,0 +1,365 @@ +{ + config, + pkgs, + lib, + ... +}: + +# Kanagawa theme for Omnixient +# A dark colorscheme inspired by the colors of the famous painting by Katsushika Hokusai + +let + inherit (lib) mkIf mkMerge mkLiteral; + cfg = config.omni; + isEnabled = feature: cfg.features.${feature} or false; + forUser = userConfig: { home-manager.users.${cfg.user} = userConfig; }; + + # Kanagawa color palette + colors = { + # Background colors + bg = "#1f1f28"; # Dark background (sumiInk0) + bg_dark = "#16161d"; # Darker background (sumiInk1) + bg_light = "#2a2a37"; # Lighter background (sumiInk3) + bg_visual = "#2d4f67"; # Visual selection (waveBlue1) + + # Foreground colors + fg = "#dcd7ba"; # Main foreground (fujiWhite) + fg_dim = "#c8c093"; # Dimmed foreground (fujiGray) + fg_reverse = "#223249"; # Reverse foreground (waveBlue2) + + # Wave colors (blues) + wave_blue1 = "#2d4f67"; # Dark blue + wave_blue2 = "#223249"; # Darker blue + wave_aqua1 = "#6a9589"; # Aqua green + wave_aqua2 = "#7aa89f"; # Light aqua + + # Autumn colors (reds, oranges, yellows) + autumn_red = "#c34043"; # Red + autumn_orange = "#dca561"; # Orange + autumn_yellow = "#c0a36e"; # Yellow + autumn_green = "#76946a"; # Green + + # Spring colors (greens) + spring_blue = "#7e9cd8"; # Blue + spring_violet1 = "#957fb8"; # Violet + spring_violet2 = "#b8b4d0"; # Light violet + spring_green = "#98bb6c"; # Green + + # Ronin colors (grays) + ronin_yellow = "#ff9e3b"; # Bright orange/yellow + dragon_blue = "#658594"; # Muted blue + old_white = "#c8c093"; # Old paper white + + # Special colors + samurai_red = "#e82424"; # Bright red for errors + ronin_gray = "#727169"; # Gray for comments + }; + +in +{ + config = mkIf (cfg.enable or true) (mkMerge [ + # System-level theme configuration + { + # Set theme wallpaper + omni.desktop.wallpaper = ./wallpapers/kanagawa/1-kanagawa.jpg; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/hyprland/theme.conf".text = '' + general { + col.active_border = rgb(dcd7ba) + col.inactive_border = rgba(2a2a37aa) + } + decoration { + col.shadow = rgba(1f1f28ee) + } + + # Kanagawa backdrop is too strong for default opacity + windowrule = opacity 0.98 0.95, tag:terminal + ''; + + # GTK theme + programs.dconf.enable = true; + + # Environment variables for consistent theming + environment.variables = { + GTK_THEME = "Adwaita-dark"; + QT_STYLE_OVERRIDE = "adwaita-dark"; + OMNI_THEME_COLORS_BG = colors.bg; + OMNI_THEME_COLORS_FG = colors.fg; + OMNI_THEME_COLORS_ACCENT = colors.spring_blue; + }; + + # Console colors + console = { + colors = [ + colors.bg_dark # black + colors.autumn_red # red + colors.autumn_green # green + colors.autumn_yellow # yellow + colors.spring_blue # blue + colors.spring_violet1 # magenta + colors.wave_aqua1 # cyan + colors.old_white # white + colors.ronin_gray # bright black + colors.samurai_red # bright red + colors.spring_green # bright green + colors.ronin_yellow # bright yellow + colors.spring_blue # bright blue + colors.spring_violet2 # bright magenta + colors.wave_aqua2 # bright cyan + colors.fg # bright white + ]; + }; + } + + # User-specific theme configuration + (forUser { + # GTK configuration + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + + # Qt theming + qt = { + enable = true; + platformTheme.name = "adwaita"; + style.name = "adwaita-dark"; + }; + + # Kitty terminal theme + programs.kitty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + themeFile = "Kanagawa"; + settings = { + background = colors.bg; + foreground = colors.fg; + selection_background = colors.bg_visual; + selection_foreground = colors.fg; + + # Cursor colors + cursor = colors.fg; + cursor_text_color = colors.bg; + + # URL underline color when hovering + url_color = colors.spring_blue; + + # Tab colors + active_tab_background = colors.spring_blue; + active_tab_foreground = colors.bg; + inactive_tab_background = colors.bg_light; + inactive_tab_foreground = colors.fg_dim; + + # Window border colors + active_border_color = colors.spring_blue; + inactive_border_color = colors.ronin_gray; + }; + }; + + # Alacritty terminal theme + programs.alacritty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + colors = { + primary = { + background = colors.bg; + foreground = colors.fg; + }; + cursor = { + text = colors.bg; + cursor = colors.fg; + }; + normal = { + black = colors.bg_dark; + red = colors.autumn_red; + green = colors.autumn_green; + yellow = colors.autumn_yellow; + blue = colors.spring_blue; + magenta = colors.spring_violet1; + cyan = colors.wave_aqua1; + white = colors.old_white; + }; + bright = { + black = colors.ronin_gray; + red = colors.samurai_red; + green = colors.spring_green; + yellow = colors.ronin_yellow; + blue = colors.spring_blue; + magenta = colors.spring_violet2; + cyan = colors.wave_aqua2; + white = colors.fg; + }; + }; + }; + }; + + # Waybar theme + programs.waybar = { + enable = true; + style = '' + * { + font-family: "JetBrainsMono Nerd Font"; + font-size: 13px; + border: none; + border-radius: 0; + min-height: 0; + } + + window#waybar { + background: ${colors.bg}; + color: ${colors.fg}; + border-bottom: 2px solid ${colors.spring_blue}; + } + + #workspaces button { + padding: 0 8px; + background: transparent; + color: ${colors.fg_dim}; + border-bottom: 2px solid transparent; + } + + #workspaces button.active { + color: ${colors.spring_blue}; + border-bottom-color: ${colors.spring_blue}; + } + + #workspaces button:hover { + color: ${colors.fg}; + background: ${colors.bg_light}; + } + + #clock, #battery, #cpu, #memory, #network, #pulseaudio { + padding: 0 10px; + margin: 0 2px; + background: ${colors.bg_light}; + color: ${colors.fg}; + } + + #battery.critical { + color: ${colors.samurai_red}; + } + + #battery.warning { + color: ${colors.ronin_yellow}; + } + ''; + }; + + # Rofi theme + programs.rofi = { + enable = true; + theme = { + "*" = { + background-color = mkLiteral colors.bg; + foreground-color = mkLiteral colors.fg; + border-color = mkLiteral colors.spring_blue; + separatorcolor = mkLiteral colors.bg_light; + scrollbar-handle = mkLiteral colors.spring_blue; + }; + + "#window" = { + border = mkLiteral "2px"; + border-radius = mkLiteral "8px"; + padding = mkLiteral "20px"; + }; + + "#element selected" = { + background-color = mkLiteral colors.spring_blue; + text-color = mkLiteral colors.bg; + }; + }; + }; + + # Mako notification theme + services.mako = { + enable = true; + settings = { + font = "JetBrainsMono Nerd Font 10"; + background-color = colors.bg; + text-color = colors.fg; + border-color = colors.spring_blue; + border-size = 2; + border-radius = 8; + padding = "10"; + margin = "5"; + default-timeout = 5000; + progress-color = colors.spring_blue; + }; + }; + + # VSCode theme + programs.vscode = mkIf (isEnabled "coding") { + enable = true; + userSettings = { + "workbench.colorTheme" = "Kanagawa"; + "workbench.preferredDarkColorTheme" = "Kanagawa"; + "editor.fontFamily" = "'JetBrainsMono Nerd Font', 'Droid Sans Mono', 'monospace'"; + "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font'"; + }; + }; + + # Neovim theme + programs.neovim = mkIf (isEnabled "coding") { + enable = true; + extraConfig = '' + set background=dark + colorscheme kanagawa + ''; + plugins = with pkgs.vimPlugins; [ + kanagawa-nvim + ]; + }; + + # Git diff and bat theme + programs.bat.config.theme = "Monokai Extended"; + + # btop theme - using kanagawa-inspired theme + programs.btop.settings.color_theme = "tokyo-night"; + + # Lazygit theme + programs.lazygit.settings = { + gui.theme = { + lightTheme = false; + selectedLineBgColor = [ colors.bg_visual ]; + selectedRangeBgColor = [ colors.bg_visual ]; + }; + }; + + # Zsh/shell prompt colors + programs.starship = mkIf (isEnabled "coding") { + enable = true; + settings = { + format = "$directory$git_branch$git_status$character"; + character = { + success_symbol = "[➜](bold ${colors.spring_green})"; + error_symbol = "[➜](bold ${colors.samurai_red})"; + }; + directory = { + style = "bold ${colors.spring_blue}"; + }; + git_branch = { + style = "bold ${colors.spring_violet1}"; + }; + git_status = { + style = "bold ${colors.autumn_yellow}"; + }; + }; + }; + }) + ]); +} diff --git a/modules/themes/matte-black.nix b/modules/themes/matte-black.nix new file mode 100644 index 0000000..f1e902b --- /dev/null +++ b/modules/themes/matte-black.nix @@ -0,0 +1,350 @@ +{ + config, + pkgs, + lib, + ... +}: + +# Matte Black theme for Omnixient +# A sleek, professional dark theme with matte black aesthetics + +let + inherit (lib) mkIf mkMerge mkLiteral; + cfg = config.omni; + isEnabled = feature: cfg.features.${feature} or false; + forUser = userConfig: { home-manager.users.${cfg.user} = userConfig; }; + + # Matte Black color palette + colors = { + # Base colors - various shades of black and gray + bg = "#0d1117"; # Very dark background + bg_light = "#161b22"; # Slightly lighter background + bg_lighter = "#21262d"; # Even lighter background + bg_accent = "#30363d"; # Accent background + + # Foreground colors + fg = "#f0f6fc"; # Light foreground + fg_dim = "#8b949e"; # Dimmed foreground + fg_muted = "#6e7681"; # Muted foreground + + # Accent colors - muted and professional + white = "#ffffff"; # Pure white + gray = "#8A8A8D"; # Main accent gray (from omarchy) + gray_light = "#aeb7c2"; # Light gray + gray_dark = "#484f58"; # Dark gray + + # Status colors - muted tones + red = "#f85149"; # Error red + orange = "#fd7e14"; # Warning orange + yellow = "#d29922"; # Attention yellow + green = "#238636"; # Success green + blue = "#58a6ff"; # Info blue + purple = "#a5a2ff"; # Purple accent + cyan = "#76e3ea"; # Cyan accent + + # Special UI colors + border = "#30363d"; # Border color + shadow = "#010409"; # Shadow color + }; + +in +{ + config = mkIf (cfg.enable or true) (mkMerge [ + # System-level theme configuration + { + # Set theme wallpaper + omni.desktop.wallpaper = ./wallpapers/matte-black/1-matte-black.jpg; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/hyprland/theme.conf".text = '' + general { + col.active_border = rgb(8A8A8D) + col.inactive_border = rgba(30363daa) + } + decoration { + col.shadow = rgba(010409ee) + } + ''; + + # GTK theme + programs.dconf.enable = true; + + # Environment variables for consistent theming + environment.variables = { + GTK_THEME = "Adwaita-dark"; + QT_STYLE_OVERRIDE = "adwaita-dark"; + OMNI_THEME_COLORS_BG = colors.bg; + OMNI_THEME_COLORS_FG = colors.fg; + OMNI_THEME_COLORS_ACCENT = colors.gray; + }; + + # Console colors + console = { + colors = [ + colors.bg # black + colors.red # red + colors.green # green + colors.yellow # yellow + colors.blue # blue + colors.purple # magenta + colors.cyan # cyan + colors.fg_dim # white + colors.gray_dark # bright black + colors.red # bright red + colors.green # bright green + colors.yellow # bright yellow + colors.blue # bright blue + colors.purple # bright magenta + colors.cyan # bright cyan + colors.fg # bright white + ]; + }; + } + + # User-specific theme configuration + (forUser { + # GTK configuration + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + + # Qt theming + qt = { + enable = true; + platformTheme.name = "adwaita"; + style.name = "adwaita-dark"; + }; + + # Kitty terminal theme + programs.kitty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + background = colors.bg; + foreground = colors.fg; + selection_background = colors.bg_lighter; + selection_foreground = colors.fg; + + # Cursor colors + cursor = colors.fg; + cursor_text_color = colors.bg; + + # URL underline color when hovering + url_color = colors.blue; + + # Tab colors + active_tab_background = colors.gray; + active_tab_foreground = colors.bg; + inactive_tab_background = colors.bg_light; + inactive_tab_foreground = colors.fg_dim; + + # Window border colors + active_border_color = colors.gray; + inactive_border_color = colors.gray_dark; + }; + }; + + # Alacritty terminal theme + programs.alacritty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + colors = { + primary = { + background = colors.bg; + foreground = colors.fg; + }; + cursor = { + text = colors.bg; + cursor = colors.fg; + }; + normal = { + black = colors.bg_light; + red = colors.red; + green = colors.green; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.cyan; + white = colors.fg_dim; + }; + bright = { + black = colors.gray_dark; + red = colors.red; + green = colors.green; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.cyan; + white = colors.fg; + }; + }; + }; + }; + + # Waybar theme + programs.waybar = { + enable = true; + style = '' + * { + font-family: "JetBrainsMono Nerd Font"; + font-size: 13px; + border: none; + border-radius: 0; + min-height: 0; + } + + window#waybar { + background: ${colors.bg}; + color: ${colors.fg}; + border-bottom: 2px solid ${colors.gray}; + } + + #workspaces button { + padding: 0 8px; + background: transparent; + color: ${colors.fg_dim}; + border-bottom: 2px solid transparent; + } + + #workspaces button.active { + color: ${colors.gray}; + border-bottom-color: ${colors.gray}; + } + + #workspaces button:hover { + color: ${colors.fg}; + background: ${colors.bg_light}; + } + + #clock, #battery, #cpu, #memory, #network, #pulseaudio { + padding: 0 10px; + margin: 0 2px; + background: ${colors.bg_light}; + color: ${colors.fg}; + } + + #battery.critical { + color: ${colors.red}; + } + + #battery.warning { + color: ${colors.yellow}; + } + ''; + }; + + # Rofi theme + programs.rofi = { + enable = true; + theme = { + "*" = { + background-color = mkLiteral colors.bg; + foreground-color = mkLiteral colors.fg; + border-color = mkLiteral colors.gray; + separatorcolor = mkLiteral colors.bg_light; + scrollbar-handle = mkLiteral colors.gray; + }; + + "#window" = { + border = mkLiteral "2px"; + border-radius = mkLiteral "8px"; + padding = mkLiteral "20px"; + }; + + "#element selected" = { + background-color = mkLiteral colors.gray; + text-color = mkLiteral colors.bg; + }; + }; + }; + + # Mako notification theme + services.mako = { + enable = true; + settings = { + font = "JetBrainsMono Nerd Font 10"; + background-color = colors.bg; + text-color = colors.fg; + border-color = colors.gray; + border-size = 2; + border-radius = 8; + padding = "10"; + margin = "5"; + default-timeout = 5000; + progress-color = colors.gray; + }; + }; + + # VSCode theme + programs.vscode = mkIf (isEnabled "coding") { + enable = true; + userSettings = { + "workbench.colorTheme" = "GitHub Dark Default"; + "workbench.preferredDarkColorTheme" = "GitHub Dark Default"; + "editor.fontFamily" = "'JetBrainsMono Nerd Font', 'Droid Sans Mono', 'monospace'"; + "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font'"; + }; + }; + + # Neovim theme + programs.neovim = mkIf (isEnabled "coding") { + enable = true; + extraConfig = '' + set background=dark + colorscheme github_dark_default + ''; + }; + + # Git diff and bat theme + programs.bat.config.theme = "GitHub"; + + # btop theme + programs.btop.settings.color_theme = "adapta"; + + # Lazygit theme + programs.lazygit.settings = { + gui.theme = { + lightTheme = false; + selectedLineBgColor = [ colors.bg_lighter ]; + selectedRangeBgColor = [ colors.bg_lighter ]; + }; + }; + + # Zsh/shell prompt colors + programs.starship = mkIf (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.purple}"; + }; + git_status = { + style = "bold ${colors.yellow}"; + }; + }; + }; + }) + ]); +} diff --git a/modules/themes/nord.nix b/modules/themes/nord.nix new file mode 100644 index 0000000..110666a --- /dev/null +++ b/modules/themes/nord.nix @@ -0,0 +1,357 @@ +{ + config, + pkgs, + lib, + ... +}: + +# Nord theme for Omnixient +# An arctic, north-bluish color palette + +let + inherit (lib) mkIf mkMerge mkLiteral; + cfg = config.omni; + isEnabled = feature: cfg.features.${feature} or false; + forUser = userConfig: { home-manager.users.${cfg.user} = userConfig; }; + + # Nord color palette + colors = { + # Polar Night + bg = "#2e3440"; # Dark background + bg_dark = "#242933"; # Darker background + bg_light = "#3b4252"; # Light background + bg_lighter = "#434c5e"; # Lighter background + + # Snow Storm + fg = "#eceff4"; # Light foreground + fg_dim = "#d8dee9"; # Dimmed foreground + fg_dark = "#e5e9f0"; # Dark foreground + + # Frost + blue = "#5e81ac"; # Primary blue + blue_light = "#88c0d0"; # Light blue + blue_bright = "#81a1c1"; # Bright blue + teal = "#8fbcbb"; # Teal + + # Aurora + red = "#bf616a"; # Red + orange = "#d08770"; # Orange + yellow = "#ebcb8b"; # Yellow + green = "#a3be8c"; # Green + purple = "#b48ead"; # Purple + + # UI colors + accent = "#88c0d0"; # Primary accent (light blue) + warning = "#ebcb8b"; # Warning (yellow) + error = "#bf616a"; # Error (red) + success = "#a3be8c"; # Success (green) + }; + +in +{ + config = mkIf (cfg.enable or true) (mkMerge [ + # System-level theme configuration + { + # Set theme wallpaper + omni.desktop.wallpaper = ./wallpapers/nord/1-nord.png; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/hyprland/theme.conf".text = '' + general { + col.active_border = rgb(D8DEE9) + col.inactive_border = rgba(4c566aaa) + } + decoration { + col.shadow = rgba(2e3440ee) + } + ''; + + # GTK theme + programs.dconf.enable = true; + + # Environment variables for consistent theming + environment.variables = { + GTK_THEME = "Adwaita-dark"; + QT_STYLE_OVERRIDE = "adwaita-dark"; + OMNI_THEME_COLORS_BG = colors.bg; + OMNI_THEME_COLORS_FG = colors.fg; + OMNI_THEME_COLORS_ACCENT = colors.accent; + }; + + # Console colors + console = { + colors = [ + colors.bg_dark # black + colors.red # red + colors.green # green + colors.yellow # yellow + colors.blue # blue + colors.purple # magenta + colors.teal # cyan + colors.fg_dim # white + colors.bg_lighter # bright black + colors.red # bright red + colors.green # bright green + colors.yellow # bright yellow + colors.blue_light # bright blue + colors.purple # bright magenta + colors.blue_bright # bright cyan + colors.fg # bright white + ]; + }; + } + + # User-specific theme configuration + (forUser { + # GTK configuration + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + + # Qt theming + qt = { + enable = true; + platformTheme.name = "adwaita"; + style.name = "adwaita-dark"; + }; + + # Kitty terminal theme + programs.kitty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + themeFile = "Nord"; + settings = { + background = colors.bg; + foreground = colors.fg; + selection_background = colors.bg_light; + selection_foreground = colors.fg; + + # Cursor colors + cursor = colors.fg; + cursor_text_color = colors.bg; + + # URL underline color when hovering + url_color = colors.accent; + + # Tab colors + active_tab_background = colors.accent; + active_tab_foreground = colors.bg; + inactive_tab_background = colors.bg_light; + inactive_tab_foreground = colors.fg_dim; + + # Window border colors + active_border_color = colors.accent; + inactive_border_color = colors.bg_lighter; + }; + }; + + # Alacritty terminal theme + programs.alacritty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + colors = { + primary = { + background = colors.bg; + foreground = colors.fg; + }; + cursor = { + text = colors.bg; + cursor = colors.fg; + }; + normal = { + black = colors.bg_dark; + red = colors.red; + green = colors.green; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.teal; + white = colors.fg_dim; + }; + bright = { + black = colors.bg_lighter; + red = colors.red; + green = colors.green; + yellow = colors.yellow; + blue = colors.blue_light; + magenta = colors.purple; + cyan = colors.blue_bright; + white = colors.fg; + }; + }; + }; + }; + + # Waybar theme + programs.waybar = { + enable = true; + style = '' + * { + font-family: "JetBrainsMono Nerd Font"; + font-size: 13px; + border: none; + border-radius: 0; + min-height: 0; + } + + window#waybar { + background: ${colors.bg}; + color: ${colors.fg}; + border-bottom: 2px solid ${colors.accent}; + } + + #workspaces button { + padding: 0 8px; + background: transparent; + color: ${colors.fg_dim}; + border-bottom: 2px solid transparent; + } + + #workspaces button.active { + color: ${colors.accent}; + border-bottom-color: ${colors.accent}; + } + + #workspaces button:hover { + color: ${colors.fg}; + background: ${colors.bg_light}; + } + + #clock, #battery, #cpu, #memory, #network, #pulseaudio { + padding: 0 10px; + margin: 0 2px; + background: ${colors.bg_light}; + color: ${colors.fg}; + } + + #battery.critical { + color: ${colors.error}; + } + + #battery.warning { + color: ${colors.warning}; + } + ''; + }; + + # Rofi theme + programs.rofi = { + enable = true; + theme = { + "*" = { + background-color = mkLiteral colors.bg; + foreground-color = mkLiteral colors.fg; + border-color = mkLiteral colors.accent; + separatorcolor = mkLiteral colors.bg_light; + scrollbar-handle = mkLiteral colors.accent; + }; + + "#window" = { + border = mkLiteral "2px"; + border-radius = mkLiteral "8px"; + padding = mkLiteral "20px"; + }; + + "#element selected" = { + background-color = mkLiteral colors.accent; + text-color = mkLiteral colors.bg; + }; + }; + }; + + # Mako notification theme + services.mako = { + enable = true; + settings = { + font = "JetBrainsMono Nerd Font 10"; + background-color = colors.bg; + text-color = colors.fg; + border-color = colors.accent; + border-size = 2; + border-radius = 8; + padding = "10"; + margin = "5"; + default-timeout = 5000; + progress-color = colors.accent; + }; + }; + + # VSCode theme + programs.vscode = mkIf (isEnabled "coding") { + enable = true; + extensions = with pkgs.vscode-extensions; [ + arcticicestudio.nord-visual-studio-code + ]; + userSettings = { + "workbench.colorTheme" = "Nord"; + "workbench.preferredDarkColorTheme" = "Nord"; + "editor.fontFamily" = "'JetBrainsMono Nerd Font', 'Droid Sans Mono', 'monospace'"; + "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font'"; + }; + }; + + # Neovim theme + programs.neovim = mkIf (isEnabled "coding") { + enable = true; + extraConfig = '' + colorscheme nord + set background=dark + ''; + plugins = with pkgs.vimPlugins; [ + nord-nvim + ]; + }; + + # Git diff and bat theme + programs.bat.config.theme = "Nord"; + + # btop theme - using a Nord-inspired theme + programs.btop.settings.color_theme = "nord"; + + # Lazygit theme + programs.lazygit.settings = { + gui.theme = { + lightTheme = false; + selectedLineBgColor = [ colors.bg_light ]; + selectedRangeBgColor = [ colors.bg_light ]; + }; + }; + + # Zsh/shell prompt colors + programs.starship = mkIf (isEnabled "coding") { + enable = true; + settings = { + format = "$directory$git_branch$git_status$character"; + character = { + success_symbol = "[➜](bold ${colors.success})"; + error_symbol = "[➜](bold ${colors.error})"; + }; + directory = { + style = "bold ${colors.blue_light}"; + }; + git_branch = { + style = "bold ${colors.purple}"; + }; + git_status = { + style = "bold ${colors.warning}"; + }; + }; + }; + }) + ]); +} diff --git a/modules/themes/osaka-jade.nix b/modules/themes/osaka-jade.nix new file mode 100644 index 0000000..3504846 --- /dev/null +++ b/modules/themes/osaka-jade.nix @@ -0,0 +1,355 @@ +{ + config, + pkgs, + lib, + ... +}: + +# Osaka Jade theme for Omnixient +# A sophisticated green-tinted dark theme with jade accents + +let + inherit (lib) mkIf mkMerge mkLiteral; + cfg = config.omni; + isEnabled = feature: cfg.features.${feature} or false; + forUser = userConfig: { home-manager.users.${cfg.user} = userConfig; }; + + # Osaka Jade color palette + colors = { + # Base colors - dark with jade undertones + bg = "#0f1419"; # Very dark background with slight jade tint + bg_light = "#1a2026"; # Lighter background + bg_lighter = "#252d33"; # Even lighter background + bg_accent = "#2d3640"; # Accent background + + # Foreground colors + fg = "#c9c7cd"; # Light foreground + fg_dim = "#828691"; # Dimmed foreground + fg_muted = "#5c6166"; # Muted foreground + + # Jade accent colors + jade = "#71CEAD"; # Main jade accent (from omarchy) + jade_light = "#8dd4b8"; # Light jade + jade_dark = "#5ba896"; # Dark jade + jade_muted = "#4a8f7d"; # Muted jade + + # Supporting colors + teal = "#4fd6be"; # Teal + mint = "#88e5d3"; # Mint green + seafoam = "#a0f0e0"; # Seafoam + + # Status colors - jade-tinted + red = "#f07178"; # Error red + orange = "#ffb454"; # Warning orange + yellow = "#e6c384"; # Attention yellow + green = "#71CEAD"; # Success (using jade) + blue = "#6bb6ff"; # Info blue + purple = "#c991e1"; # Purple + cyan = "#71CEAD"; # Cyan (using jade) + + # Special UI colors + border = "#2d3640"; # Border color + shadow = "#0a0d11"; # Shadow color + }; + +in +{ + config = mkIf (cfg.enable or true) (mkMerge [ + # System-level theme configuration + { + # Set theme wallpaper + omni.desktop.wallpaper = ./wallpapers/osaka-jade/1-osaka-jade-bg.jpg; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/hyprland/theme.conf".text = '' + general { + col.active_border = rgb(71CEAD) + col.inactive_border = rgba(2d3640aa) + } + decoration { + col.shadow = rgba(0a0d11ee) + } + ''; + + # GTK theme + programs.dconf.enable = true; + + # Environment variables for consistent theming + environment.variables = { + GTK_THEME = "Adwaita-dark"; + QT_STYLE_OVERRIDE = "adwaita-dark"; + OMNI_THEME_COLORS_BG = colors.bg; + OMNI_THEME_COLORS_FG = colors.fg; + OMNI_THEME_COLORS_ACCENT = colors.jade; + }; + + # Console colors + console = { + colors = [ + colors.bg_light # black + colors.red # red + colors.green # green + colors.yellow # yellow + colors.blue # blue + colors.purple # magenta + colors.jade # cyan (using jade) + colors.fg_dim # white + colors.bg_lighter # bright black + colors.red # bright red + colors.jade_light # bright green (jade) + colors.yellow # bright yellow + colors.blue # bright blue + colors.purple # bright magenta + colors.seafoam # bright cyan + colors.fg # bright white + ]; + }; + } + + # User-specific theme configuration + (forUser { + # GTK configuration + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + + # Qt theming + qt = { + enable = true; + platformTheme.name = "adwaita"; + style.name = "adwaita-dark"; + }; + + # Kitty terminal theme + programs.kitty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + background = colors.bg; + foreground = colors.fg; + selection_background = colors.bg_lighter; + selection_foreground = colors.fg; + + # Cursor colors + cursor = colors.jade; + cursor_text_color = colors.bg; + + # URL underline color when hovering + url_color = colors.jade_light; + + # Tab colors + active_tab_background = colors.jade; + active_tab_foreground = colors.bg; + inactive_tab_background = colors.bg_light; + inactive_tab_foreground = colors.fg_dim; + + # Window border colors + active_border_color = colors.jade; + inactive_border_color = colors.jade_muted; + }; + }; + + # Alacritty terminal theme + programs.alacritty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + colors = { + primary = { + background = colors.bg; + foreground = colors.fg; + }; + cursor = { + text = colors.bg; + cursor = colors.jade; + }; + normal = { + black = colors.bg_light; + red = colors.red; + green = colors.jade; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.teal; + white = colors.fg_dim; + }; + bright = { + black = colors.bg_lighter; + red = colors.red; + green = colors.jade_light; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.seafoam; + white = colors.fg; + }; + }; + }; + }; + + # Waybar theme + programs.waybar = { + enable = true; + style = '' + * { + font-family: "JetBrainsMono Nerd Font"; + font-size: 13px; + border: none; + border-radius: 0; + min-height: 0; + } + + window#waybar { + background: ${colors.bg}; + color: ${colors.fg}; + border-bottom: 2px solid ${colors.jade}; + } + + #workspaces button { + padding: 0 8px; + background: transparent; + color: ${colors.fg_dim}; + border-bottom: 2px solid transparent; + } + + #workspaces button.active { + color: ${colors.jade}; + border-bottom-color: ${colors.jade}; + } + + #workspaces button:hover { + color: ${colors.fg}; + background: ${colors.bg_light}; + } + + #clock, #battery, #cpu, #memory, #network, #pulseaudio { + padding: 0 10px; + margin: 0 2px; + background: ${colors.bg_light}; + color: ${colors.fg}; + } + + #battery.critical { + color: ${colors.red}; + } + + #battery.warning { + color: ${colors.yellow}; + } + ''; + }; + + # Rofi theme + programs.rofi = { + enable = true; + theme = { + "*" = { + background-color = mkLiteral colors.bg; + foreground-color = mkLiteral colors.fg; + border-color = mkLiteral colors.jade; + separatorcolor = mkLiteral colors.bg_light; + scrollbar-handle = mkLiteral colors.jade; + }; + + "#window" = { + border = mkLiteral "2px"; + border-radius = mkLiteral "8px"; + padding = mkLiteral "20px"; + }; + + "#element selected" = { + background-color = mkLiteral colors.jade; + text-color = mkLiteral colors.bg; + }; + }; + }; + + # Mako notification theme + services.mako = { + enable = true; + settings = { + font = "JetBrainsMono Nerd Font 10"; + background-color = colors.bg; + text-color = colors.fg; + border-color = colors.jade; + border-size = 2; + border-radius = 8; + padding = "10"; + margin = "5"; + default-timeout = 5000; + progress-color = colors.jade; + }; + }; + + # VSCode theme + programs.vscode = mkIf (isEnabled "coding") { + enable = true; + userSettings = { + "workbench.colorTheme" = "Ayu Dark"; + "workbench.preferredDarkColorTheme" = "Ayu Dark"; + "editor.fontFamily" = "'JetBrainsMono Nerd Font', 'Droid Sans Mono', 'monospace'"; + "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font'"; + }; + }; + + # Neovim theme + programs.neovim = mkIf (isEnabled "coding") { + enable = true; + extraConfig = '' + set background=dark + colorscheme ayu + ''; + }; + + # Git diff and bat theme + programs.bat.config.theme = "ansi"; + + # btop theme + programs.btop.settings.color_theme = "ayu-dark"; + + # Lazygit theme + programs.lazygit.settings = { + gui.theme = { + lightTheme = false; + selectedLineBgColor = [ colors.bg_lighter ]; + selectedRangeBgColor = [ colors.bg_lighter ]; + }; + }; + + # Zsh/shell prompt colors + programs.starship = mkIf (isEnabled "coding") { + enable = true; + settings = { + format = "$directory$git_branch$git_status$character"; + character = { + success_symbol = "[➜](bold ${colors.jade})"; + error_symbol = "[➜](bold ${colors.red})"; + }; + directory = { + style = "bold ${colors.jade_light}"; + }; + git_branch = { + style = "bold ${colors.purple}"; + }; + git_status = { + style = "bold ${colors.yellow}"; + }; + }; + }; + }) + ]); +} diff --git a/modules/themes/ristretto.nix b/modules/themes/ristretto.nix new file mode 100644 index 0000000..0cdb3c5 --- /dev/null +++ b/modules/themes/ristretto.nix @@ -0,0 +1,357 @@ +{ + config, + pkgs, + lib, + ... +}: + +# Ristretto theme for Omnixient +# A warm, coffee-inspired theme with rich brown and cream tones + +let + inherit (lib) mkIf mkMerge mkLiteral; + cfg = config.omni; + isEnabled = feature: cfg.features.${feature} or false; + forUser = userConfig: { home-manager.users.${cfg.user} = userConfig; }; + + # Ristretto color palette - inspired by coffee and warm tones + colors = { + # Base colors - warm browns and creams + bg = "#2b1f17"; # Dark coffee background + bg_light = "#3d2a1f"; # Lighter coffee + bg_lighter = "#4f3426"; # Even lighter coffee + bg_accent = "#5d3e2e"; # Accent background + + # Foreground colors - cream and light browns + fg = "#e6d9db"; # Main foreground (from omarchy) + fg_dim = "#c4b5a0"; # Dimmed cream + fg_muted = "#a08d7a"; # Muted cream + + # Coffee-inspired accent colors + cream = "#e6d9db"; # Cream (main accent from omarchy) + latte = "#d4c4b0"; # Latte + mocha = "#b8997a"; # Mocha + espresso = "#8b6f47"; # Espresso + cappuccino = "#c9a96e"; # Cappuccino + + # Warm accent colors + amber = "#d4a574"; # Amber + caramel = "#c19a6b"; # Caramel + cinnamon = "#a67c5a"; # Cinnamon + vanilla = "#e8dcc6"; # Vanilla + + # Status colors - coffee-tinted + red = "#d67c7c"; # Warm red + orange = "#d4925a"; # Coffee orange + yellow = "#d4c969"; # Warm yellow + green = "#81a56a"; # Muted green + blue = "#6b8bb3"; # Muted blue + purple = "#a67cb8"; # Muted purple + cyan = "#6ba3a3"; # Muted cyan + + # Special UI colors + border = "#5d3e2e"; # Border color + shadow = "#1a1008"; # Shadow color + }; + +in +{ + config = mkIf (cfg.enable or true) (mkMerge [ + # System-level theme configuration + { + # Set theme wallpaper + omni.desktop.wallpaper = ./wallpapers/ristretto/1-ristretto.jpg; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/hyprland/theme.conf".text = '' + general { + col.active_border = rgb(e6d9db) + col.inactive_border = rgba(5d3e2eaa) + } + decoration { + col.shadow = rgba(1a1008ee) + } + ''; + + # GTK theme + programs.dconf.enable = true; + + # Environment variables for consistent theming + environment.variables = { + GTK_THEME = "Adwaita-dark"; + QT_STYLE_OVERRIDE = "adwaita-dark"; + OMNI_THEME_COLORS_BG = colors.bg; + OMNI_THEME_COLORS_FG = colors.fg; + OMNI_THEME_COLORS_ACCENT = colors.cream; + }; + + # Console colors + console = { + colors = [ + colors.bg_light # black + colors.red # red + colors.green # green + colors.yellow # yellow + colors.blue # blue + colors.purple # magenta + colors.cyan # cyan + colors.fg_dim # white + colors.espresso # bright black + colors.red # bright red + colors.green # bright green + colors.amber # bright yellow + colors.blue # bright blue + colors.purple # bright magenta + colors.cyan # bright cyan + colors.fg # bright white + ]; + }; + } + + # User-specific theme configuration + (forUser { + # GTK configuration + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + + # Qt theming + qt = { + enable = true; + platformTheme.name = "adwaita"; + style.name = "adwaita-dark"; + }; + + # Kitty terminal theme + programs.kitty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + background = colors.bg; + foreground = colors.fg; + selection_background = colors.bg_lighter; + selection_foreground = colors.fg; + + # Cursor colors + cursor = colors.cream; + cursor_text_color = colors.bg; + + # URL underline color when hovering + url_color = colors.amber; + + # Tab colors + active_tab_background = colors.cream; + active_tab_foreground = colors.bg; + inactive_tab_background = colors.bg_light; + inactive_tab_foreground = colors.fg_dim; + + # Window border colors + active_border_color = colors.cream; + inactive_border_color = colors.mocha; + }; + }; + + # Alacritty terminal theme + programs.alacritty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + colors = { + primary = { + background = colors.bg; + foreground = colors.fg; + }; + cursor = { + text = colors.bg; + cursor = colors.cream; + }; + normal = { + black = colors.bg_light; + red = colors.red; + green = colors.green; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.cyan; + white = colors.fg_dim; + }; + bright = { + black = colors.espresso; + red = colors.red; + green = colors.green; + yellow = colors.amber; + blue = colors.blue; + magenta = colors.purple; + cyan = colors.cyan; + white = colors.fg; + }; + }; + }; + }; + + # Waybar theme + programs.waybar = { + enable = true; + style = '' + * { + font-family: "JetBrainsMono Nerd Font"; + font-size: 13px; + border: none; + border-radius: 0; + min-height: 0; + } + + window#waybar { + background: ${colors.bg}; + color: ${colors.fg}; + border-bottom: 2px solid ${colors.cream}; + } + + #workspaces button { + padding: 0 8px; + background: transparent; + color: ${colors.fg_dim}; + border-bottom: 2px solid transparent; + } + + #workspaces button.active { + color: ${colors.cream}; + border-bottom-color: ${colors.cream}; + } + + #workspaces button:hover { + color: ${colors.fg}; + background: ${colors.bg_light}; + } + + #clock, #battery, #cpu, #memory, #network, #pulseaudio { + padding: 0 10px; + margin: 0 2px; + background: ${colors.bg_light}; + color: ${colors.fg}; + } + + #battery.critical { + color: ${colors.red}; + } + + #battery.warning { + color: ${colors.amber}; + } + ''; + }; + + # Rofi theme + programs.rofi = { + enable = true; + theme = { + "*" = { + background-color = mkLiteral colors.bg; + foreground-color = mkLiteral colors.fg; + border-color = mkLiteral colors.cream; + separatorcolor = mkLiteral colors.bg_light; + scrollbar-handle = mkLiteral colors.cream; + }; + + "#window" = { + border = mkLiteral "2px"; + border-radius = mkLiteral "8px"; + padding = mkLiteral "20px"; + }; + + "#element selected" = { + background-color = mkLiteral colors.cream; + text-color = mkLiteral colors.bg; + }; + }; + }; + + # Mako notification theme + services.mako = { + enable = true; + settings = { + font = "JetBrainsMono Nerd Font 10"; + background-color = colors.bg; + text-color = colors.fg; + border-color = colors.cream; + border-size = 2; + border-radius = 8; + padding = "10"; + margin = "5"; + default-timeout = 5000; + progress-color = colors.cream; + }; + }; + + # VSCode theme + programs.vscode = mkIf (isEnabled "coding") { + enable = true; + userSettings = { + "workbench.colorTheme" = "Monokai"; + "workbench.preferredDarkColorTheme" = "Monokai"; + "editor.fontFamily" = "'JetBrainsMono Nerd Font', 'Droid Sans Mono', 'monospace'"; + "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font'"; + }; + }; + + # Neovim theme + programs.neovim = mkIf (isEnabled "coding") { + enable = true; + extraConfig = '' + set background=dark + colorscheme monokai + ''; + }; + + # Git diff and bat theme + programs.bat.config.theme = "Monokai Extended"; + + # btop theme + programs.btop.settings.color_theme = "monokai"; + + # Lazygit theme + programs.lazygit.settings = { + gui.theme = { + lightTheme = false; + selectedLineBgColor = [ colors.bg_lighter ]; + selectedRangeBgColor = [ colors.bg_lighter ]; + }; + }; + + # Zsh/shell prompt colors + programs.starship = mkIf (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.amber}"; + }; + git_branch = { + style = "bold ${colors.purple}"; + }; + git_status = { + style = "bold ${colors.yellow}"; + }; + }; + }; + }) + ]); +} diff --git a/modules/themes/rose-pine.nix b/modules/themes/rose-pine.nix new file mode 100644 index 0000000..22c188a --- /dev/null +++ b/modules/themes/rose-pine.nix @@ -0,0 +1,343 @@ +{ + config, + pkgs, + lib, + ... +}: + +# Rose Pine theme for Omnixient +# All natural pine, faux fur and a bit of soho vibes for the classy minimalist + +let + inherit (lib) mkIf mkMerge mkLiteral; + cfg = config.omni; + isEnabled = feature: cfg.features.${feature} or false; + forUser = userConfig: { home-manager.users.${cfg.user} = userConfig; }; + + # Rose Pine color palette + colors = { + # Base colors + base = "#191724"; # Dark background + surface = "#1f1d2e"; # Surface background + overlay = "#26233a"; # Overlay background + muted = "#6e6a86"; # Muted foreground + subtle = "#908caa"; # Subtle foreground + text = "#e0def4"; # Main foreground + love = "#eb6f92"; # Love (pink/red) + gold = "#f6c177"; # Gold (yellow) + rose = "#ebbcba"; # Rose (peach) + pine = "#31748f"; # Pine (blue) + foam = "#9ccfd8"; # Foam (cyan) + iris = "#c4a7e7"; # Iris (purple) + + # Highlight colors + highlight_low = "#21202e"; + highlight_med = "#403d52"; + highlight_high = "#524f67"; + }; + +in +{ + config = mkIf (cfg.enable or true) (mkMerge [ + # System-level theme configuration + { + # Set theme wallpaper + omni.desktop.wallpaper = ./wallpapers/rose-pine/1-rose-pine.jpg; + + # Hyprland theme colors (from omarchy) + environment.etc."omni/hyprland/theme.conf".text = '' + general { + col.active_border = rgb(575279) + col.inactive_border = rgba(26233aaa) + } + decoration { + col.shadow = rgba(191724ee) + } + ''; + + # GTK theme + programs.dconf.enable = true; + + # Environment variables for consistent theming + environment.variables = { + GTK_THEME = "Adwaita-dark"; + QT_STYLE_OVERRIDE = "adwaita-dark"; + OMNI_THEME_COLORS_BG = colors.base; + OMNI_THEME_COLORS_FG = colors.text; + OMNI_THEME_COLORS_ACCENT = colors.foam; + }; + + # Console colors + console = { + colors = [ + colors.overlay # black + colors.love # red + colors.pine # green (using pine as green alternative) + colors.gold # yellow + colors.foam # blue (using foam as blue) + colors.iris # magenta + colors.rose # cyan (using rose as cyan) + colors.text # white + colors.muted # bright black + colors.love # bright red + colors.pine # bright green + colors.gold # bright yellow + colors.foam # bright blue + colors.iris # bright magenta + colors.rose # bright cyan + colors.text # bright white + ]; + }; + } + + # User-specific theme configuration + (forUser { + # GTK configuration + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = 1; + }; + }; + + # Qt theming + qt = { + enable = true; + platformTheme.name = "adwaita"; + style.name = "adwaita-dark"; + }; + + # Kitty terminal theme + programs.kitty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + themeFile = "Rosé Pine"; + settings = { + background = colors.base; + foreground = colors.text; + selection_background = colors.surface; + selection_foreground = colors.text; + + # Cursor colors + cursor = colors.text; + cursor_text_color = colors.base; + + # URL underline color when hovering + url_color = colors.foam; + + # Tab colors + active_tab_background = colors.foam; + active_tab_foreground = colors.base; + inactive_tab_background = colors.surface; + inactive_tab_foreground = colors.subtle; + + # Window border colors + active_border_color = colors.foam; + inactive_border_color = colors.muted; + }; + }; + + # Alacritty terminal theme + programs.alacritty = mkIf (isEnabled "coding" || isEnabled "media") { + enable = true; + settings = { + colors = { + primary = { + background = colors.base; + foreground = colors.text; + }; + cursor = { + text = colors.base; + cursor = colors.text; + }; + normal = { + black = colors.overlay; + red = colors.love; + green = colors.pine; + yellow = colors.gold; + blue = colors.foam; + magenta = colors.iris; + cyan = colors.rose; + white = colors.text; + }; + bright = { + black = colors.muted; + red = colors.love; + green = colors.pine; + yellow = colors.gold; + blue = colors.foam; + magenta = colors.iris; + cyan = colors.rose; + white = colors.text; + }; + }; + }; + }; + + # Waybar theme + programs.waybar = { + 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.foam}; + } + + #workspaces button { + padding: 0 8px; + background: transparent; + color: ${colors.subtle}; + border-bottom: 2px solid transparent; + } + + #workspaces button.active { + color: ${colors.foam}; + border-bottom-color: ${colors.foam}; + } + + #workspaces button:hover { + color: ${colors.text}; + background: ${colors.surface}; + } + + #clock, #battery, #cpu, #memory, #network, #pulseaudio { + padding: 0 10px; + margin: 0 2px; + background: ${colors.surface}; + color: ${colors.text}; + } + + #battery.critical { + color: ${colors.love}; + } + + #battery.warning { + color: ${colors.gold}; + } + ''; + }; + + # Rofi theme + programs.rofi = { + enable = true; + theme = { + "*" = { + background-color = mkLiteral colors.base; + foreground-color = mkLiteral colors.text; + border-color = mkLiteral colors.foam; + separatorcolor = mkLiteral colors.surface; + scrollbar-handle = mkLiteral colors.foam; + }; + + "#window" = { + border = mkLiteral "2px"; + border-radius = mkLiteral "8px"; + padding = mkLiteral "20px"; + }; + + "#element selected" = { + background-color = mkLiteral colors.foam; + text-color = mkLiteral colors.base; + }; + }; + }; + + # Mako notification theme + services.mako = { + enable = true; + settings = { + font = "JetBrainsMono Nerd Font 10"; + background-color = colors.base; + text-color = colors.text; + border-color = colors.foam; + border-size = 2; + border-radius = 8; + padding = "10"; + margin = "5"; + default-timeout = 5000; + progress-color = colors.foam; + }; + }; + + # VSCode theme + programs.vscode = mkIf (isEnabled "coding") { + enable = true; + userSettings = { + "workbench.colorTheme" = "Rosé Pine"; + "workbench.preferredDarkColorTheme" = "Rosé Pine"; + "editor.fontFamily" = "'JetBrainsMono Nerd Font', 'Droid Sans Mono', 'monospace'"; + "terminal.integrated.fontFamily" = "'JetBrainsMono Nerd Font'"; + }; + }; + + # Neovim theme + programs.neovim = mkIf (isEnabled "coding") { + enable = true; + extraConfig = '' + set background=dark + colorscheme rose-pine + ''; + plugins = with pkgs.vimPlugins; [ + rose-pine + ]; + }; + + # Git diff and bat theme + programs.bat.config.theme = "Monokai Extended"; + + # btop theme - using a rose-inspired theme + programs.btop.settings.color_theme = "rose-pine"; + + # Lazygit theme + programs.lazygit.settings = { + gui.theme = { + lightTheme = false; + selectedLineBgColor = [ colors.surface ]; + selectedRangeBgColor = [ colors.surface ]; + }; + }; + + # Zsh/shell prompt colors + programs.starship = mkIf (isEnabled "coding") { + enable = true; + settings = { + format = "$directory$git_branch$git_status$character"; + character = { + success_symbol = "[➜](bold ${colors.pine})"; + error_symbol = "[➜](bold ${colors.love})"; + }; + directory = { + style = "bold ${colors.foam}"; + }; + git_branch = { + style = "bold ${colors.iris}"; + }; + git_status = { + style = "bold ${colors.gold}"; + }; + }; + }; + }) + ]); +} diff --git a/modules/themes/tokyo-night.nix b/modules/themes/tokyo-night.nix new file mode 100644 index 0000000..1c62fe1 --- /dev/null +++ b/modules/themes/tokyo-night.nix @@ -0,0 +1,280 @@ +{ + config, + pkgs, + lib, + inputs, + ... +}: + +let + cfg = config.omni; + user = cfg.user; + + # Use nix-colors if available, otherwise manual colors + useNixColors = cfg.colorScheme != null; + colorScheme = cfg.colorScheme; + + c = { + bg = "#1a1b26"; + bgAlt = "#16161e"; + bgHighlight = "#33467c"; + bgMuted = "#414868"; + fg = "#c0caf5"; + fgAlt = "#a9b1d6"; + red = "#f7768e"; + green = "#9ece6a"; + yellow = "#e0af68"; + blue = "#7aa2f7"; + magenta = "#bb9af7"; + cyan = "#7dcfff"; + black = "#15161e"; + orange = "#ff9e64"; + }; + + getColor = + name: fallback: + if useNixColors && colorScheme ? colors && colorScheme.colors ? ${name} then + "#${colorScheme.colors.${name}}" + else + fallback; +in +{ + config = { + omni.desktop.wallpaper = ./wallpapers/tokyo-night/1-scenery-pink-lakeside-sunset-lake-landscape-scenic-panorama-7680x3215-144.png; + + environment.variables = { + OMNI_THEME = "tokyo-night"; + OMNI_THEME_BG = getColor "base00" c.bg; + OMNI_THEME_FG = getColor "base05" c.fg; + OMNI_THEME_ACCENT = getColor "base0D" c.blue; + }; + + home-manager.users.${user} = { + # Hyprland theme colors — merged into the base settings + wayland.windowManager.hyprland.settings = { + general = { + "col.active_border" = "rgba(7aa2f7ee) rgba(c4a7e7ee) 45deg"; + "col.inactive_border" = "rgba(414868aa)"; + }; + # Hyprland 0.40+ moved `decoration.col.shadow` under the + # nested `decoration.shadow.color` block. + decoration.shadow.color = "rgba(1a1b26ee)"; + }; + + # Waybar theme + programs.waybar.style = lib.mkForce '' + * { + font-family: "JetBrainsMono Nerd Font"; + font-size: 13px; + } + window#waybar { + background: rgba(26, 27, 38, 0.9); + color: ${c.fg}; + } + #workspaces button { + padding: 0 5px; + background: transparent; + color: ${c.fg}; + border-bottom: 3px solid transparent; + } + #workspaces button.active { + background: rgba(122, 162, 247, 0.2); + border-bottom: 3px solid ${c.blue}; + } + #clock, #battery, #cpu, #memory, #temperature, + #backlight, #network, #pulseaudio, #tray, #bluetooth { + padding: 0 10px; + margin: 0 5px; + } + #battery.charging { color: ${c.green}; } + #battery.warning:not(.charging) { color: ${c.orange}; } + #battery.critical:not(.charging) { + color: ${c.red}; + animation: blink 0.5s linear infinite alternate; + } + @keyframes blink { + to { background-color: ${c.red}; color: ${c.bg}; } + } + ''; + + # Alacritty + programs.alacritty.settings.colors = { + primary = { + background = getColor "base00" c.bg; + foreground = getColor "base05" c.fg; + }; + normal = { + black = getColor "base00" c.black; + red = getColor "base08" c.red; + green = getColor "base0B" c.green; + yellow = getColor "base0A" c.yellow; + blue = getColor "base0D" c.blue; + magenta = getColor "base0E" c.magenta; + cyan = getColor "base0C" c.cyan; + white = getColor "base05" c.fg; + }; + bright = { + black = getColor "base03" c.bgMuted; + red = getColor "base08" c.red; + green = getColor "base0B" c.green; + yellow = getColor "base0A" c.yellow; + blue = getColor "base0D" c.blue; + magenta = getColor "base0E" c.magenta; + cyan = getColor "base0C" c.cyan; + white = getColor "base07" c.fg; + }; + indexed_colors = [ + { + index = 16; + color = getColor "base09" c.orange; + } + { + index = 17; + color = getColor "base0F" "#db4b4b"; + } + ]; + }; + + # Kitty + programs.kitty = { + themeFile = "Tokyo Night"; + settings = { + background = c.bg; + foreground = c.fg; + selection_background = c.bgHighlight; + selection_foreground = c.fg; + cursor = c.fg; + cursor_text_color = c.bg; + color0 = c.black; + color8 = c.bgMuted; + color1 = c.red; + color9 = c.red; + color2 = c.green; + color10 = c.green; + color3 = c.yellow; + color11 = c.yellow; + color4 = c.blue; + color12 = c.blue; + color5 = c.magenta; + color13 = c.magenta; + color6 = c.cyan; + color14 = c.cyan; + color7 = c.fgAlt; + color15 = c.fg; + }; + }; + + # VS Code + programs.vscode.profiles.default.userSettings = { + "workbench.colorTheme" = "Tokyo Night"; + "workbench.colorCustomizations" = { + "[Tokyo Night]" = { + "editor.background" = c.bg; + "editor.foreground" = c.fg; + "sideBar.background" = c.bgAlt; + "sideBar.foreground" = c.fgAlt; + "activityBar.background" = c.bgAlt; + "activityBar.foreground" = c.fg; + }; + }; + }; + + # GTK + gtk.theme = { + name = "adw-gtk3-dark"; + package = pkgs.adw-gtk3; + }; + + # Starship + programs.starship.settings = { + palette = "tokyo-night"; + palettes.tokyo-night = { + bg = c.bg; + fg = c.fg; + black = c.black; + red = c.red; + green = c.green; + yellow = c.yellow; + blue = c.blue; + magenta = c.magenta; + cyan = c.cyan; + white = c.fgAlt; + }; + character = { + success_symbol = "[➜](green)"; + error_symbol = "[➜](red)"; + }; + directory.style = "blue"; + git_branch.style = "magenta"; + git_status.style = "red"; + }; + + # Neovim + programs.neovim.plugins = with pkgs.vimPlugins; [ + { + plugin = tokyonight-nvim; + type = "lua"; + config = "vim.cmd[[colorscheme tokyonight-night]]"; + } + ]; + + # Bat + programs.bat.config.theme = "TwoDark"; + + # btop + programs.btop.settings.color_theme = "tokyo-night"; + + # Lazygit + programs.lazygit.settings.gui.theme = { + activeBorderColor = [ + c.blue + "bold" + ]; + inactiveBorderColor = [ c.bgMuted ]; + selectedLineBgColor = [ c.bgHighlight ]; + selectedRangeBgColor = [ c.bgHighlight ]; + cherryPickedCommitBgColor = [ c.bgHighlight ]; + cherryPickedCommitFgColor = [ c.blue ]; + unstagedChangesColor = [ c.red ]; + defaultFgColor = [ c.fg ]; + }; + + # Firefox + programs.firefox.profiles.default.userChrome = '' + :root { + --toolbar-bgcolor: ${c.bg} !important; + --toolbar-color: ${c.fg} !important; + --toolbarbutton-hover-background: ${c.bgHighlight} !important; + --toolbarbutton-active-background: ${c.bgMuted} !important; + --urlbar-focused-bg-color: ${c.bg} !important; + --urlbar-focused-color: ${c.fg} !important; + --tab-selected-bgcolor: ${c.bgHighlight} !important; + --tab-selected-color: ${c.fg} !important; + } + ''; + + # Mako notifications + services.mako.settings = { + background-color = c.bg; + text-color = c.fg; + border-color = c.blue; + progress-color = c.blue; + default-timeout = 5000; + border-radius = 10; + border-size = 2; + font = "JetBrainsMono Nerd Font 10"; + padding = "10"; + margin = "20"; + }; + + # fzf colors + programs.fzf.defaultOptions = lib.mkForce [ + "--height 40%" + "--layout reverse" + "--border" + "--inline-info" + "--color 'fg:${c.fg},fg+:${c.fg},bg:${c.bg},preview-bg:${c.bgAlt},border:${c.bgMuted}'" + ]; + }; + }; +}