feat(themes): theme system and 12 colorscheme modules
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6e87d8e186
commit
23f1f31a23
12 changed files with 4043 additions and 0 deletions
311
modules/themes/README.md
Normal file
311
modules/themes/README.md
Normal file
|
|
@ -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.
|
||||
360
modules/themes/catppuccin-latte.nix
Normal file
360
modules/themes/catppuccin-latte.nix
Normal file
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
219
modules/themes/catppuccin.nix
Normal file
219
modules/themes/catppuccin.nix
Normal file
|
|
@ -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)"
|
||||
'')
|
||||
];
|
||||
};
|
||||
}
|
||||
353
modules/themes/everforest.nix
Normal file
353
modules/themes/everforest.nix
Normal file
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
393
modules/themes/gruvbox.nix
Normal file
393
modules/themes/gruvbox.nix
Normal file
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
365
modules/themes/kanagawa.nix
Normal file
365
modules/themes/kanagawa.nix
Normal file
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
350
modules/themes/matte-black.nix
Normal file
350
modules/themes/matte-black.nix
Normal file
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
357
modules/themes/nord.nix
Normal file
357
modules/themes/nord.nix
Normal file
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
355
modules/themes/osaka-jade.nix
Normal file
355
modules/themes/osaka-jade.nix
Normal file
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
357
modules/themes/ristretto.nix
Normal file
357
modules/themes/ristretto.nix
Normal file
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
343
modules/themes/rose-pine.nix
Normal file
343
modules/themes/rose-pine.nix
Normal file
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
280
modules/themes/tokyo-night.nix
Normal file
280
modules/themes/tokyo-night.nix
Normal file
|
|
@ -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}'"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue