From 51363a98c7395d900f63c241f690f1eee78dafed Mon Sep 17 00:00:00 2001 From: elwrcl Date: Thu, 27 Aug 2026 16:45:54 +0300 Subject: [PATCH] theme/QoL --- flake.lock | 37 +++ hosts/copland-hardware.nix | 14 +- hosts/copland.ulu.nix | 14 +- hosts/sohryu-darwin.ulu.nix | 6 +- modules/home/helix/home-helix-theme.ulu.nix | 132 ---------- modules/home/helix/home-helix.ulu.nix | 2 +- modules/home/home-browser-helium.ulu.nix | 4 +- modules/home/home-ghostty.ulu.nix | 26 +- modules/home/home-mimeapps.ulu.nix | 6 +- modules/home/home-qt.ulu.nix | 83 ------ modules/home/home-zsh-nu-handoff.ulu.nix | 16 ++ modules/home/home-zsh.ulu.nix | 2 - modules/home/nu/home-nushell-colors.ulu.nix | 38 --- modules/home/nu/home-nushell-greeting.ulu.nix | 15 ++ modules/home/nu/home-nushell.ulu.nix | 4 - modules/home/theme/home-theme-ghostty.ulu.nix | 39 +++ .../home-theme-gtk.ulu.nix} | 6 +- modules/home/theme/home-theme-helix.ulu.nix | 232 +++++++++++++++++ modules/home/theme/home-theme-kemuri.ulu.nix | 2 +- modules/home/theme/home-theme-nushell.ulu.nix | 238 ++++++++++++++++++ modules/home/theme/home-theme-qt.ulu.nix | 226 +++++++++++++++++ modules/home/theme/home-theme-zellij.ulu.nix | 154 ++++++++++++ modules/home/theme/home-theme.ulu.nix | 47 +++- modules/home/zellij/home-zellij-theme.ulu.nix | 130 ---------- modules/home/zellij/home-zellij.ulu.nix | 2 +- 25 files changed, 1036 insertions(+), 439 deletions(-) delete mode 100644 modules/home/helix/home-helix-theme.ulu.nix delete mode 100644 modules/home/home-qt.ulu.nix create mode 100644 modules/home/home-zsh-nu-handoff.ulu.nix delete mode 100644 modules/home/nu/home-nushell-colors.ulu.nix create mode 100644 modules/home/nu/home-nushell-greeting.ulu.nix create mode 100644 modules/home/theme/home-theme-ghostty.ulu.nix rename modules/home/{home-gtk.ulu.nix => theme/home-theme-gtk.ulu.nix} (93%) create mode 100644 modules/home/theme/home-theme-helix.ulu.nix create mode 100644 modules/home/theme/home-theme-nushell.ulu.nix create mode 100644 modules/home/theme/home-theme-qt.ulu.nix create mode 100644 modules/home/theme/home-theme-zellij.ulu.nix delete mode 100644 modules/home/zellij/home-zellij-theme.ulu.nix diff --git a/flake.lock b/flake.lock index ebf12b3..411804b 100755 --- a/flake.lock +++ b/flake.lock @@ -658,6 +658,8 @@ "nixpkgs": "nixpkgs_3", "noctalia": "noctalia", "nyi": "nyi", + "theme-assets": "theme-assets", + "themes": "themes", "zen-browser": "zen-browser" } }, @@ -676,6 +678,41 @@ "type": "github" } }, + "theme-assets": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1787833947, + "narHash": "sha256-Zi1xOHjpDbchysJijm4kuII/cdXtI59NCh/Nwwo/iVw=", + "owner": "elwrcl", + "repo": "copland-theme", + "rev": "ec9ffc0afa6bf6293070a44d16b7d8f022f42b65", + "type": "github" + }, + "original": { + "owner": "elwrcl", + "repo": "copland-theme", + "type": "github" + } + }, + "themes": { + "locked": { + "lastModified": 1770999457, + "narHash": "sha256-018znIdT/TBFsNcDYv6l4NCnK96gDiJMODoIGqnVn7o=", + "owner": "RGBCube", + "repo": "ThemeNix", + "rev": "3779a7ba289d88ea092063e8bc512cfe80f293ba", + "type": "github" + }, + "original": { + "owner": "RGBCube", + "repo": "ThemeNix", + "type": "github" + } + }, "treefmt-nix": { "inputs": { "nixpkgs": [ diff --git a/hosts/copland-hardware.nix b/hosts/copland-hardware.nix index 4566db7..2010d2a 100644 --- a/hosts/copland-hardware.nix +++ b/hosts/copland-hardware.nix @@ -50,13 +50,13 @@ }; fileSystems."/mnt/HDD/linuxdata" = { - device = "/dev/disk/by-uuid/6acf076f-25a0-4ce1-b841-aefa8bb06218"; - fsType = "xfs"; - options = [ - "defaults" - "nofail" - "x-systemd.automount" - ]; + device = "/dev/disk/by-uuid/6acf076f-25a0-4ce1-b841-aefa8bb06218"; + fsType = "xfs"; + options = [ + "defaults" + "nofail" + "x-systemd.automount" + ]; }; fileSystems."/mnt/macos-hd" = { diff --git a/hosts/copland.ulu.nix b/hosts/copland.ulu.nix index 8992de8..e8fd252 100644 --- a/hosts/copland.ulu.nix +++ b/hosts/copland.ulu.nix @@ -30,25 +30,30 @@ in config.flake.homeModules.home-ghostty config.flake.homeModules.home-nushell config.flake.homeModules.home-nushell-bash-compat - config.flake.homeModules.home-nushell-colors config.flake.homeModules.home-nushell-completions config.flake.homeModules.home-nushell-prompt config.flake.homeModules.home-nushell-commandline-copy config.flake.homeModules.home-nushell-keybinds config.flake.homeModules.home-nushell-last config.flake.homeModules.home-nushell-editor + config.flake.homeModules.home-nushell-greeting config.flake.homeModules.home-helix - config.flake.homeModules.home-helix-theme config.flake.homeModules.home-helix-keys config.flake.homeModules.home-helix-languages config.flake.homeModules.home-helix-language-servers config.flake.homeModules.home-zellij config.flake.homeModules.home-zellij-keybinds - config.flake.homeModules.home-zellij-theme config.flake.homeModules.home-zellij-layout-ide config.flake.homeModules.home-zellij-ide-command + # theme: one palette, one module per app it feeds config.flake.homeModules.home-theme config.flake.homeModules.home-theme-kemuri + config.flake.homeModules.home-theme-gtk + config.flake.homeModules.home-theme-qt + config.flake.homeModules.home-theme-ghostty + config.flake.homeModules.home-theme-helix + config.flake.homeModules.home-theme-zellij + config.flake.homeModules.home-theme-nushell config.flake.homeModules.home-direnv config.flake.homeModules.home-jujutsu config.flake.homeModules.home-jujutsu-difftastic @@ -57,12 +62,11 @@ in config.flake.homeModules.home-gh config.flake.homeModules.home-radicle config.flake.homeModules.home-zsh + config.flake.homeModules.home-zsh-nu-handoff config.flake.homeModules.home-shell-tools config.flake.homeModules.home-session-vars config.flake.homeModules.home-cursor - config.flake.homeModules.home-gtk config.flake.homeModules.home-icons - config.flake.homeModules.home-qt config.flake.homeModules.home-browser-zen config.flake.homeModules.home-browser-helium config.flake.homeModules.home-mimeapps diff --git a/hosts/sohryu-darwin.ulu.nix b/hosts/sohryu-darwin.ulu.nix index 5124d77..9248019 100644 --- a/hosts/sohryu-darwin.ulu.nix +++ b/hosts/sohryu-darwin.ulu.nix @@ -29,11 +29,15 @@ in config.flake.homeModules.home-ghostty config.flake.homeModules.home-nushell config.flake.homeModules.home-nushell-bash-compat - config.flake.homeModules.home-nushell-colors config.flake.homeModules.home-nushell-completions config.flake.homeModules.home-nushell-prompt config.flake.homeModules.home-nushell-commandline-copy config.flake.homeModules.home-nushell-last + # theme: one palette, one module per app it feeds + config.flake.homeModules.home-theme + config.flake.homeModules.home-theme-kemuri + config.flake.homeModules.home-theme-ghostty + config.flake.homeModules.home-theme-nushell config.flake.homeModules.home-direnv config.flake.homeModules.home-jujutsu config.flake.homeModules.home-jujutsu-difftastic diff --git a/modules/home/helix/home-helix-theme.ulu.nix b/modules/home/helix/home-helix-theme.ulu.nix deleted file mode 100644 index 3ee7b30..0000000 --- a/modules/home/helix/home-helix-theme.ulu.nix +++ /dev/null @@ -1,132 +0,0 @@ -{ ... }: -{ - # this could be changed - flake.homeModules.home-helix-theme = - { ... }: - { - programs.helix.themes.kanagawa-dragon-copnix = { - inherits = "kanagawa-dragon"; - - palette = { - copBg = "#090E13"; - copBgAlt = "#0E141B"; - copBgSoft = "#151B22"; - copSelect = "#22262D"; - copGutter = "#3A414B"; - copGray = "#5C6066"; - copFg = "#c5c9c7"; - copRed = "#c4746e"; - copRedBright = "#e46876"; - copGreen = "#8a9a7b"; - copYellow = "#c4b28a"; - copYellowBright = "#e6c384"; - copBlue = "#8ba4b0"; - copBlueBright = "#7fb4ca"; - copMagenta = "#a292a3"; - copCyan = "#8ea4a2"; - }; - - "ui.background" = { - fg = "copFg"; - bg = "copBg"; - }; - "ui.text" = "copFg"; - "ui.window" = "copBgSoft"; - - "ui.gutter" = { - bg = "copBg"; - }; - "ui.linenr" = { - fg = "copGutter"; - bg = "copBg"; - }; - "ui.linenr.selected" = { - fg = "copYellowBright"; - bg = "copBg"; - modifiers = [ "bold" ]; - }; - - "ui.cursorline.primary" = { - bg = "copBgAlt"; - }; - "ui.cursorline.secondary" = { - bg = "copBgAlt"; - }; - - "ui.selection" = { - bg = "copSelect"; - }; - "ui.selection.primary" = { - bg = "#2A3038"; - }; - - "ui.statusline" = { - fg = "copFg"; - bg = "copBgSoft"; - }; - "ui.statusline.inactive" = { - fg = "copGray"; - bg = "copBgAlt"; - }; - "ui.statusline.normal" = { - fg = "copBg"; - bg = "copBlueBright"; - modifiers = [ "bold" ]; - }; - "ui.statusline.insert" = { - fg = "copBg"; - bg = "copGreen"; - modifiers = [ "bold" ]; - }; - "ui.statusline.select" = { - fg = "copBg"; - bg = "copMagenta"; - modifiers = [ "bold" ]; - }; - - "ui.bufferline" = { - fg = "copGray"; - bg = "copBgAlt"; - }; - "ui.bufferline.active" = { - fg = "copFg"; - bg = "copBgSoft"; - modifiers = [ "bold" ]; - }; - "ui.bufferline.background" = { - bg = "copBg"; - }; - - "ui.popup" = { - fg = "copFg"; - bg = "copBgSoft"; - }; - "ui.popup.info" = { - fg = "copFg"; - bg = "copBgAlt"; - }; - "ui.menu" = { - fg = "copFg"; - bg = "copBgSoft"; - }; - "ui.menu.selected" = { - fg = "copBg"; - bg = "copBlueBright"; - modifiers = [ "bold" ]; - }; - "ui.help" = { - fg = "copFg"; - bg = "copBgSoft"; - }; - - "ui.virtual.indent-guide" = "copGutter"; - "ui.virtual.ruler" = { - bg = "copBgAlt"; - }; - "ui.virtual.whitespace" = "copGutter"; - "diff.plus" = "copGreen"; - "diff.minus" = "copRedBright"; - "diff.delta" = "copBlueBright"; - }; - }; -} diff --git a/modules/home/helix/home-helix.ulu.nix b/modules/home/helix/home-helix.ulu.nix index f9d16ed..69f367e 100644 --- a/modules/home/helix/home-helix.ulu.nix +++ b/modules/home/helix/home-helix.ulu.nix @@ -8,7 +8,7 @@ defaultEditor = true; settings = { - theme = "kanagawa-dragon-copnix"; + theme = "kemuri-copnix"; editor = { line-number = "relative"; diff --git a/modules/home/home-browser-helium.ulu.nix b/modules/home/home-browser-helium.ulu.nix index aef1e01..1266b7c 100644 --- a/modules/home/home-browser-helium.ulu.nix +++ b/modules/home/home-browser-helium.ulu.nix @@ -37,7 +37,7 @@ } { id = "oebdmlhbdidbibbidjpbndbloidnhmme"; - hash = "sha256-pTe61n2rQ4botE3UKpBupcND6LYUXTjjK//R3jINCLQ="; + hash = "sha256-pTe61n2rQ4botE3UKpBupcND6LYUXTjjK//R3jINCLQ="; } { id = "omkfmpieigblcllmkgbflkikinpkodlk"; @@ -122,4 +122,4 @@ }; }; }; -} \ No newline at end of file +} diff --git a/modules/home/home-ghostty.ulu.nix b/modules/home/home-ghostty.ulu.nix index f23cf79..0c71a12 100644 --- a/modules/home/home-ghostty.ulu.nix +++ b/modules/home/home-ghostty.ulu.nix @@ -87,31 +87,7 @@ mouse-scroll-multiplier = 2; shell-integration-features = "no-cursor,sudo,no-title"; - palette = [ - "0=#090E13" - "1=#c4746e" - "2=#8a9a7b" - "3=#c4b28a" - "4=#8ba4b0" - "5=#a292a3" - "6=#8ea4a2" - "7=#a4a7a4" - "8=#5C6066" - "9=#e46876" - "10=#87a987" - "11=#e6c384" - "12=#7fb4ca" - "13=#938aa9" - "14=#7aa89f" - "15=#c5c9c7" - ]; - - background = "#090E13"; - foreground = "#c5c9c7"; - cursor-color = "#c5c9c7"; - cursor-text = "#9cdef2"; - selection-background = "#22262D"; - selection-foreground = "#c5c9c7"; + # Colors live in home-theme-ghostty, driven by the active palette. cursor-style = "block"; cursor-style-blink = true; adjust-cell-height = "35%"; diff --git a/modules/home/home-mimeapps.ulu.nix b/modules/home/home-mimeapps.ulu.nix index 8e5bfce..a611eab 100644 --- a/modules/home/home-mimeapps.ulu.nix +++ b/modules/home/home-mimeapps.ulu.nix @@ -6,10 +6,10 @@ xdg.mimeApps = { enable = true; defaultApplications = { - "inode/directory" = [ "org.kde.dolphin.desktop" ]; - "x-scheme-handler/about" = [ "helium.desktop" ]; + "inode/directory" = [ "org.kde.dolphin.desktop" ]; + "x-scheme-handler/about" = [ "helium.desktop" ]; "x-scheme-handler/unknown" = [ "helium.desktop" ]; }; }; }; -} \ No newline at end of file +} diff --git a/modules/home/home-qt.ulu.nix b/modules/home/home-qt.ulu.nix deleted file mode 100644 index 9241bf1..0000000 --- a/modules/home/home-qt.ulu.nix +++ /dev/null @@ -1,83 +0,0 @@ -{ ... }: -{ - flake.homeModules.home-qt = - { config, pkgs, ... }: - let - p = config.elars.theme.palette.withHashtag; - active = builtins.concatStringsSep ", " [ - p.base05 p.base01 p.base02 p.base02 p.base00 p.base01 - p.base05 p.base07 p.base05 p.base01 p.base00 p.base00 - p.base06 p.base00 p.base0D p.base0E p.base02 p.base01 - p.base01 p.base05 p.base04 - ]; - inactive = active; - disabled = builtins.concatStringsSep ", " [ - p.base04 p.base01 p.base02 p.base02 p.base00 p.base01 - p.base04 p.base06 p.base04 p.base01 p.base00 p.base00 - p.base02 p.base04 p.base04 p.base04 p.base02 p.base01 - p.base01 p.base04 p.base03 - ]; - - font = "JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0"; - in - { - qt = { - enable = true; - platformTheme.name = "qtct"; - style.name = "qtct"; - }; - - home.packages = [ - pkgs.qt5ct - pkgs.qt6ct - ]; - - xdg.configFile."qt5ct/colors/kemuri.conf".text = '' - [ColorScheme] - active_colors=${active} - inactive_colors=${inactive} - disabled_colors=${disabled} - ''; - xdg.configFile."qt6ct/colors/kemuri.conf".text = '' - [ColorScheme] - active_colors=${active} - inactive_colors=${inactive} - disabled_colors=${disabled} - ''; - - xdg.configFile."qt5ct/qt5ct.conf".text = '' - [Appearance] - style=Fusion - custom_palette=true - color_scheme_path=${config.xdg.configHome}/qt5ct/colors/kemuri.conf - standard_dialogs=default - - [Fonts] - fixed="${font}" - general="${font}" - ''; - xdg.configFile."qt6ct/qt6ct.conf".text = '' - [Appearance] - style=Fusion - custom_palette=true - color_scheme_path=${config.xdg.configHome}/qt6ct/colors/kemuri.conf - standard_dialogs=default - - [Fonts] - fixed="${font}" - general="${font}" - ''; - - xdg.configFile."kdeglobals".text = '' - [General] - font=${font} - fixed=${font} - menuFont=${font} - toolBarFont=${font} - smallestReadableFont=JetBrainsMono Nerd Font,9,-1,5,50,0,0,0,0,0 - - [Icons] - Theme=int_nord - ''; - }; -} diff --git a/modules/home/home-zsh-nu-handoff.ulu.nix b/modules/home/home-zsh-nu-handoff.ulu.nix new file mode 100644 index 0000000..1096993 --- /dev/null +++ b/modules/home/home-zsh-nu-handoff.ulu.nix @@ -0,0 +1,16 @@ +{ ... }: +{ + flake.homeModules.home-zsh-nu-handoff = + { config, lib, ... }: + let + nu = lib.getExe config.programs.nushell.package; + in + { + programs.zsh.initContent = lib.mkBefore '' + if [[ -o interactive && -z "$NO_NU" && -z "$INSIDE_NU" ]]; then + export INSIDE_NU=1 + exec ${nu} + fi + ''; + }; +} diff --git a/modules/home/home-zsh.ulu.nix b/modules/home/home-zsh.ulu.nix index 548f628..e4d6de5 100644 --- a/modules/home/home-zsh.ulu.nix +++ b/modules/home/home-zsh.ulu.nix @@ -70,8 +70,6 @@ export MESA_SHADER_CACHE_MAX_SIZE=2G export MESA_SHADER_CACHE_DIR=/tmp/mesa_shader_cache export PATH="$HOME/.local/bin:$PATH" - - /home/elars/.config/copetch/animated-copetch.sh ''; }; }; diff --git a/modules/home/nu/home-nushell-colors.ulu.nix b/modules/home/nu/home-nushell-colors.ulu.nix deleted file mode 100644 index d1f765c..0000000 --- a/modules/home/nu/home-nushell-colors.ulu.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ ... }: -{ - flake.homeModules.home-nushell-colors = - { pkgs, lib, ... }: - let - inherit (lib.meta) getExe; - - lsColors = pkgs.runCommand "ls_colors.txt" { } '' - ${getExe pkgs.vivid} generate gruvbox-dark-hard > $out - ''; - in - { - home.packages = [ pkgs.vivid ]; - - programs.nushell.extraConfig = '' - $env.LS_COLORS = open --raw ${lsColors} - - $env.config.color_config.row_index = "light_yellow_bold" - $env.config.color_config.header = "light_yellow_bold" - - $env.config.color_config.bool = {|| - if $in { - "light_green_bold" - } else { - "light_red_bold" - } - } - - $env.config.color_config.string = {|| - if $in =~ "^(#|0x)[a-fA-F0-9]+$" { - $in | str replace "0x" "#" - } else { - "white" - } - } - ''; - }; -} diff --git a/modules/home/nu/home-nushell-greeting.ulu.nix b/modules/home/nu/home-nushell-greeting.ulu.nix new file mode 100644 index 0000000..b4140ea --- /dev/null +++ b/modules/home/nu/home-nushell-greeting.ulu.nix @@ -0,0 +1,15 @@ +{ ... }: +{ + flake.homeModules.home-nushell-greeting = + { config, lib, ... }: + let + nyi = lib.getExe config.programs.nyi.package; + in + { + programs.nushell.extraConfig = '' + if $nu.is-interactive and ($env.ZELLIJ? | is-empty) { + ^${nyi} --frames 60 + } + ''; + }; +} diff --git a/modules/home/nu/home-nushell.ulu.nix b/modules/home/nu/home-nushell.ulu.nix index ebab0cd..5d18f94 100644 --- a/modules/home/nu/home-nushell.ulu.nix +++ b/modules/home/nu/home-nushell.ulu.nix @@ -124,10 +124,6 @@ } } } - - if ($"($env.HOME)/.config/copetch/animated-copetch.sh" | path exists) { - ^$"($env.HOME)/.config/copetch/animated-copetch.sh" - } ''; }; }; diff --git a/modules/home/theme/home-theme-ghostty.ulu.nix b/modules/home/theme/home-theme-ghostty.ulu.nix new file mode 100644 index 0000000..82e9ff0 --- /dev/null +++ b/modules/home/theme/home-theme-ghostty.ulu.nix @@ -0,0 +1,39 @@ +{ ... }: +{ + flake.homeModules.home-theme-ghostty = + { config, ... }: + let + p = config.elars.theme.palette.withHashtag; + in + { + programs.ghostty.settings = { + background = p.base00; + foreground = p.base05; + + cursor-color = p.accent; + cursor-text = p.base00; + + selection-background = p.base02; + selection-foreground = p.base05; + + palette = [ + "0=${p.base00}" + "1=${p.base08}" + "2=${p.base0B}" + "3=${p.base0A}" + "4=${p.base0D}" + "5=${p.base0E}" + "6=${p.base0C}" + "7=${p.base05}" + "8=${p.base03}" + "9=${p.base08}" + "10=${p.base0B}" + "11=${p.base09}" + "12=${p.base0D}" + "13=${p.base0E}" + "14=${p.base0C}" + "15=${p.base07}" + ]; + }; + }; +} diff --git a/modules/home/home-gtk.ulu.nix b/modules/home/theme/home-theme-gtk.ulu.nix similarity index 93% rename from modules/home/home-gtk.ulu.nix rename to modules/home/theme/home-theme-gtk.ulu.nix index 6f535fa..5810618 100644 --- a/modules/home/home-gtk.ulu.nix +++ b/modules/home/theme/home-theme-gtk.ulu.nix @@ -1,6 +1,6 @@ { ... }: { - flake.homeModules.home-gtk = + flake.homeModules.home-theme-gtk = { config, pkgs, ... }: { gtk = { @@ -12,7 +12,7 @@ name = "JetBrainsMono Nerd Font"; size = 11; }; - + gtk3.extraCss = config.elars.theme.palette.adwaitaGtkCss; gtk4.extraCss = config.elars.theme.palette.adwaitaGtkCss; }; @@ -23,4 +23,4 @@ gtk-theme = "Adwaita-dark"; }; }; -} \ No newline at end of file +} diff --git a/modules/home/theme/home-theme-helix.ulu.nix b/modules/home/theme/home-theme-helix.ulu.nix new file mode 100644 index 0000000..9b9ba10 --- /dev/null +++ b/modules/home/theme/home-theme-helix.ulu.nix @@ -0,0 +1,232 @@ +{ ... }: +{ + flake.homeModules.home-theme-helix = + { config, ... }: + let + p = config.elars.theme.palette.withHashtag; + in + { + programs.helix.themes.kemuri-copnix = { + palette = { + bg = p.base00; + bgAlt = p.base01; + bgSoft = p.base02; + select = p.base02; + selectPrimary = p.base03; + gutter = p.base03; + gray = p.base04; + fg = p.base05; + fgSoft = p.base06; + fgBright = p.base07; + red = p.base08; + orange = p.base09; + yellow = p.base0A; + green = p.base0B; + cyan = p.base0C; + blue = p.base0D; + magenta = p.base0E; + brown = p.base0F; + }; + + # ui + "ui.background" = { + fg = "fg"; + bg = "bg"; + }; + "ui.text" = "fg"; + "ui.text.focus" = { + fg = "fgBright"; + modifiers = [ "bold" ]; + }; + "ui.window" = "bgSoft"; + "ui.cursor" = { + fg = "bg"; + bg = "fgSoft"; + }; + "ui.cursor.primary" = { + fg = "bg"; + bg = "fgBright"; + }; + "ui.cursor.match" = { + fg = "orange"; + modifiers = [ "bold" ]; + }; + + "ui.gutter" = { + bg = "bg"; + }; + "ui.linenr" = { + fg = "gutter"; + bg = "bg"; + }; + "ui.linenr.selected" = { + fg = "orange"; + bg = "bg"; + modifiers = [ "bold" ]; + }; + + "ui.cursorline.primary" = { + bg = "bgAlt"; + }; + "ui.cursorline.secondary" = { + bg = "bgAlt"; + }; + + "ui.selection" = { + bg = "select"; + }; + "ui.selection.primary" = { + bg = "selectPrimary"; + }; + + "ui.statusline" = { + fg = "fg"; + bg = "bgSoft"; + }; + "ui.statusline.inactive" = { + fg = "gray"; + bg = "bgAlt"; + }; + "ui.statusline.normal" = { + fg = "bg"; + bg = "blue"; + modifiers = [ "bold" ]; + }; + "ui.statusline.insert" = { + fg = "bg"; + bg = "green"; + modifiers = [ "bold" ]; + }; + "ui.statusline.select" = { + fg = "bg"; + bg = "magenta"; + modifiers = [ "bold" ]; + }; + + "ui.bufferline" = { + fg = "gray"; + bg = "bgAlt"; + }; + "ui.bufferline.active" = { + fg = "fg"; + bg = "bgSoft"; + modifiers = [ "bold" ]; + }; + "ui.bufferline.background" = { + bg = "bg"; + }; + + "ui.popup" = { + fg = "fg"; + bg = "bgSoft"; + }; + "ui.popup.info" = { + fg = "fg"; + bg = "bgAlt"; + }; + "ui.menu" = { + fg = "fg"; + bg = "bgSoft"; + }; + "ui.menu.selected" = { + fg = "bg"; + bg = "fgSoft"; + modifiers = [ "bold" ]; + }; + "ui.help" = { + fg = "fg"; + bg = "bgSoft"; + }; + "ui.virtual.indent-guide" = "gutter"; + "ui.virtual.ruler" = { + bg = "bgAlt"; + }; + "ui.virtual.whitespace" = "gutter"; + "ui.virtual.inlay-hint" = "gray"; + + # syntax + "comment" = { + fg = "gray"; + modifiers = [ "italic" ]; + }; + "variable" = "fg"; + "variable.parameter" = "fgSoft"; + "variable.builtin" = "red"; + "variable.other.member" = "cyan"; + "constant" = "orange"; + "constant.numeric" = "orange"; + "constant.character.escape" = "magenta"; + "string" = "green"; + "string.regexp" = "cyan"; + "type" = "yellow"; + "type.builtin" = "yellow"; + "constructor" = "blue"; + "function" = "blue"; + "function.builtin" = "blue"; + "function.macro" = "magenta"; + "keyword" = { + fg = "magenta"; + }; + "keyword.control" = "magenta"; + "keyword.directive" = "brown"; + "operator" = "fgSoft"; + "punctuation" = "gray"; + "punctuation.bracket" = "fgSoft"; + "label" = "magenta"; + "namespace" = "cyan"; + "attribute" = "brown"; + "tag" = "blue"; + + "markup.heading" = { + fg = "orange"; + modifiers = [ "bold" ]; + }; + "markup.bold" = { + modifiers = [ "bold" ]; + }; + "markup.italic" = { + modifiers = [ "italic" ]; + }; + "markup.link.url" = { + fg = "cyan"; + modifiers = [ "underlined" ]; + }; + "markup.link.text" = "blue"; + "markup.raw" = "green"; + + # diagnostics & diff + "diagnostic.error" = { + underline = { + color = "red"; + style = "curl"; + }; + }; + "diagnostic.warning" = { + underline = { + color = "yellow"; + style = "curl"; + }; + }; + "diagnostic.info" = { + underline = { + color = "blue"; + style = "curl"; + }; + }; + "diagnostic.hint" = { + underline = { + color = "cyan"; + style = "curl"; + }; + }; + "error" = "red"; + "warning" = "yellow"; + "info" = "blue"; + "hint" = "cyan"; + + "diff.plus" = "green"; + "diff.minus" = "red"; + "diff.delta" = "blue"; + }; + }; +} diff --git a/modules/home/theme/home-theme-kemuri.ulu.nix b/modules/home/theme/home-theme-kemuri.ulu.nix index 4028058..33e4727 100644 --- a/modules/home/theme/home-theme-kemuri.ulu.nix +++ b/modules/home/theme/home-theme-kemuri.ulu.nix @@ -17,7 +17,7 @@ base07 = "fafbfe"; base08 = "cf7670"; # red / mError - base09 = "d1ba94"; # orange (approximated, see note above) + base09 = "d1ba94"; # orange base0A = "bfa67a"; # yellow base0B = "8ca38a"; # green base0C = "7fa39a"; # cyan diff --git a/modules/home/theme/home-theme-nushell.ulu.nix b/modules/home/theme/home-theme-nushell.ulu.nix new file mode 100644 index 0000000..d4f118d --- /dev/null +++ b/modules/home/theme/home-theme-nushell.ulu.nix @@ -0,0 +1,238 @@ +{ ... }: +{ + flake.homeModules.home-theme-nushell = + { + config, + pkgs, + lib, + ... + }: + let + inherit (lib.meta) getExe; + + p = config.elars.theme.palette; + h = p.withHashtag; + accent = h.accent or h.base06; + + vividTheme = pkgs.writeText "kemuri.yml" '' + colors: + bg: '${p.base00}' + surface: '${p.base02}' + muted: '${p.base04}' + fg: '${p.base05}' + accent: '${lib.removePrefix "#" accent}' + red: '${p.base08}' + orange: '${p.base09}' + yellow: '${p.base0A}' + green: '${p.base0B}' + cyan: '${p.base0C}' + blue: '${p.base0D}' + magenta: '${p.base0E}' + brown: '${p.base0F}' + + core: + normal_text: {} + regular_file: {} + reset_to_normal: {} + + directory: + foreground: blue + font-style: bold + + symlink: + foreground: cyan + + multi_hard_link: {} + + fifo: + foreground: bg + background: cyan + + socket: + foreground: bg + background: magenta + + door: + foreground: bg + background: magenta + + block_device: + foreground: bg + background: orange + + character_device: + foreground: bg + background: yellow + + broken_symlink: + foreground: bg + background: red + + missing_symlink_target: + foreground: bg + background: red + + setuid: + foreground: red + font-style: bold + + setgid: + foreground: orange + font-style: bold + + file_with_capability: + foreground: red + + sticky_other_writable: + foreground: bg + background: green + + other_writable: + foreground: blue + background: surface + + sticky: + foreground: bg + background: blue + + executable_file: + foreground: green + font-style: bold + + text: + special: + foreground: bg + background: accent + + todo: + font-style: bold + + licenses: + foreground: muted + + configuration: + foreground: yellow + + other: + foreground: fg + + markup: + foreground: accent + + programming: + source: + foreground: cyan + + tooling: + foreground: brown + + continuous-integration: + foreground: magenta + + media: + foreground: magenta + + office: + foreground: orange + + archives: + foreground: red + font-style: underline + + executable: + foreground: green + font-style: bold + + unimportant: + foreground: muted + ''; + + lsColors = pkgs.runCommand "ls_colors.txt" { } '' + ${getExe pkgs.vivid} generate ${vividTheme} > $out + ''; + in + { + home.packages = [ pkgs.vivid ]; + + programs.nushell.extraConfig = '' + $env.LS_COLORS = open --raw ${lsColors} + + $env.config.color_config = { + separator: "${h.base03}" + leading_trailing_space_bg: { attr: n } + header: { fg: "${accent}" attr: b } + row_index: { fg: "${h.base04}" attr: b } + empty: "${h.base0D}" + hints: "${h.base04}" + search_result: { fg: "${h.base00}" bg: "${accent}" } + + int: "${h.base09}" + float: "${h.base09}" + filesize: "${h.base0C}" + duration: "${h.base0A}" + datetime: "${h.base0E}" + range: "${h.base0A}" + binary: "${h.base0F}" + nothing: "${h.base08}" + cell-path: "${h.base06}" + record: "${h.base05}" + list: "${h.base05}" + block: "${h.base05}" + closure: "${h.base0C}" + glob: "${h.base0C}" + + shape_binary: { fg: "${h.base0F}" attr: b } + shape_block: { fg: "${h.base0D}" attr: b } + shape_bool: "${h.base0C}" + shape_closure: { fg: "${h.base0C}" attr: b } + shape_custom: "${h.base0B}" + shape_datetime: { fg: "${h.base0E}" attr: b } + shape_directory: "${h.base0D}" + shape_external: "${h.base0C}" + shape_external_resolved: { fg: "${h.base0B}" attr: b } + shape_externalarg: { fg: "${h.base0B}" attr: b } + shape_filepath: "${h.base0D}" + shape_flag: { fg: "${h.base0A}" attr: b } + shape_float: { fg: "${h.base09}" attr: b } + shape_garbage: { fg: "${h.base07}" bg: "${h.base08}" attr: b } + shape_glob_interpolation: { fg: "${h.base0C}" attr: b } + shape_globpattern: { fg: "${h.base0C}" attr: b } + shape_int: { fg: "${h.base09}" attr: b } + shape_internalcall: { fg: "${h.base0C}" attr: b } + shape_keyword: { fg: "${h.base0E}" attr: b } + shape_list: { fg: "${h.base0C}" attr: b } + shape_literal: "${h.base0D}" + shape_match_pattern: "${h.base0B}" + shape_matching_brackets: { attr: u } + shape_nothing: "${h.base08}" + shape_operator: "${h.base0A}" + shape_pipe: { fg: "${h.base0E}" attr: b } + shape_range: { fg: "${h.base0A}" attr: b } + shape_record: { fg: "${h.base0C}" attr: b } + shape_redirection: { fg: "${h.base0E}" attr: b } + shape_signature: { fg: "${h.base0B}" attr: b } + shape_string: "${h.base0B}" + shape_string_interpolation: { fg: "${h.base0C}" attr: b } + shape_table: { fg: "${h.base0D}" attr: b } + shape_variable: "${h.base0E}" + shape_vardecl: "${h.base0E}" + } + + $env.config.color_config.bool = {|| + if $in { + { fg: "${h.base0B}" attr: b } + } else { + { fg: "${h.base08}" attr: b } + } + } + + $env.config.color_config.string = {|| + if $in =~ "^(#|0x)[a-fA-F0-9]+$" { + $in | str replace "0x" "#" + } else { + "${h.base05}" + } + } + ''; + }; +} diff --git a/modules/home/theme/home-theme-qt.ulu.nix b/modules/home/theme/home-theme-qt.ulu.nix new file mode 100644 index 0000000..d8c0673 --- /dev/null +++ b/modules/home/theme/home-theme-qt.ulu.nix @@ -0,0 +1,226 @@ +{ ... }: +{ + flake.homeModules.home-theme-qt = + { + config, + lib, + pkgs, + ... + }: + let + p = config.elars.theme.palette; + h = p.withHashtag; + rgb = hex: lib.concatMapStringsSep "," toString (config.elars.theme.hexToRgb hex); + accent = p.accent or p.base06; + foregrounds = { + Normal = p.base05; + Inactive = p.base04; + Active = accent; + Link = p.base0C; + Visited = p.base0E; + Negative = p.base08; + Neutral = p.base0A; + Positive = p.base0B; + }; + + colorSet = + name: + { + background, + alternate, + normal ? foregrounds.Normal, + inactive ? foregrounds.Inactive, + }: + let + fg = foregrounds // { + Normal = normal; + Inactive = inactive; + }; + in + '' + [Colors:${name}] + BackgroundNormal=${rgb background} + BackgroundAlternate=${rgb alternate} + DecorationFocus=${rgb accent} + DecorationHover=${rgb p.base03} + ForegroundActive=${rgb fg.Active} + ForegroundInactive=${rgb fg.Inactive} + ForegroundLink=${rgb fg.Link} + ForegroundNegative=${rgb fg.Negative} + ForegroundNeutral=${rgb fg.Neutral} + ForegroundNormal=${rgb fg.Normal} + ForegroundPositive=${rgb fg.Positive} + ForegroundVisited=${rgb fg.Visited} + ''; + + qtctColors = + { + text, + window, + base, + alternateBase, + button, + buttonText, + bright, + shadow, + }: + builtins.concatStringsSep ", " [ + text # WindowText + button # Button + h.base03 # Light + h.base02 # Midlight + shadow # Dark + h.base03 # Mid + buttonText # Text + bright # BrightText + buttonText # ButtonText + base # Base + window # Window + shadow # Shadow + h.base03 # Highlight + bright # HighlightedText + h.base0C # Link + h.base0E # LinkVisited + alternateBase # AlternateBase + h.base01 # NoRole + h.base01 # ToolTipBase + text # ToolTipText + h.base04 # PlaceholderText + ]; + + active = qtctColors { + text = h.base05; + window = h.base01; + base = h.base00; + alternateBase = h.base01; + button = h.base02; + buttonText = h.base05; + bright = h.base07; + shadow = h.base00; + }; + + disabled = qtctColors { + text = h.base04; + window = h.base01; + base = h.base00; + alternateBase = h.base01; + button = h.base01; + buttonText = h.base04; + bright = h.base06; + shadow = h.base00; + }; + + font = "JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0"; + in + { + qt = { + enable = true; + platformTheme.name = "qtct"; + style.name = "qtct"; + }; + + home.packages = [ + pkgs.qt6Packages.qt6ct + ]; + + xdg.configFile."qt6ct/colors/kemuri.conf".text = '' + [ColorScheme] + active_colors=${active} + inactive_colors=${active} + disabled_colors=${disabled} + ''; + + xdg.configFile."qt6ct/qt6ct.conf".text = '' + [Appearance] + style=Fusion + custom_palette=true + color_scheme_path=${config.xdg.configHome}/qt6ct/colors/kemuri.conf + standard_dialogs=default + + [Fonts] + fixed="${font}" + general="${font}" + ''; + + xdg.configFile."kdeglobals".text = '' + [General] + ColorScheme=${p.name} + Name=${p.name} + font=${font} + fixed=${font} + menuFont=${font} + toolBarFont=${font} + smallestReadableFont=JetBrainsMono Nerd Font,9,-1,5,50,0,0,0,0,0 + + [Icons] + Theme=int_nord + + [KDE] + widgetStyle=Fusion + contrast=4 + + ${colorSet "Window" { + background = p.base01; + alternate = p.base02; + }} + ${colorSet "View" { + background = p.base00; + alternate = p.base01; + }} + ${colorSet "Button" { + background = p.base02; + alternate = p.base01; + }} + ${colorSet "Header" { + background = p.base01; + alternate = p.base02; + }} + ${colorSet "Header][Inactive" { + background = p.base00; + alternate = p.base01; + normal = p.base04; + }} + ${colorSet "Tooltip" { + background = p.base01; + alternate = p.base02; + }} + ${colorSet "Complementary" { + background = p.base00; + alternate = p.base01; + }} + ${colorSet "Selection" { + background = p.base03; + alternate = p.base03; + normal = p.base07; + inactive = p.base06; + }} + + [WM] + activeBackground=${rgb p.base02} + activeBlend=${rgb p.base02} + activeForeground=${rgb p.base05} + inactiveBackground=${rgb p.base01} + inactiveBlend=${rgb p.base01} + inactiveForeground=${rgb p.base04} + + [ColorEffects:Disabled] + Color=${rgb p.base01} + ColorAmount=0 + ColorEffect=0 + ContrastAmount=0.65 + ContrastEffect=1 + IntensityAmount=0.1 + IntensityEffect=2 + + [ColorEffects:Inactive] + ChangeSelectionColor=true + Color=${rgb p.base02} + ColorAmount=0.025 + ColorEffect=2 + ContrastAmount=0.1 + ContrastEffect=2 + IntensityAmount=0 + IntensityEffect=0 + ''; + }; +} diff --git a/modules/home/theme/home-theme-zellij.ulu.nix b/modules/home/theme/home-theme-zellij.ulu.nix new file mode 100644 index 0000000..5fcfdad --- /dev/null +++ b/modules/home/theme/home-theme-zellij.ulu.nix @@ -0,0 +1,154 @@ +{ ... }: +{ + flake.homeModules.home-theme-zellij = + { config, lib, ... }: + let + p = config.elars.theme.palette; + + c = hex: lib.concatMapStringsSep " " toString (config.elars.theme.hexToRgb hex); + + bg = c p.base00; + bgAlt = c p.base01; + fg = c p.base05; + accent = c (p.accent or p.base06); + orange = c p.base09; + yellow = c p.base0A; + green = c p.base0B; + cyan = c p.base0C; + blue = c p.base0D; + magenta = c p.base0E; + red = c p.base08; + + slot = + { + base, + background, + e0 ? orange, + e1 ? blue, + e2 ? green, + e3 ? magenta, + }: + lib.concatStringsSep "\n " [ + "base ${base}" + "background ${background}" + "emphasis_0 ${e0}" + "emphasis_1 ${e1}" + "emphasis_2 ${e2}" + "emphasis_3 ${e3}" + ]; + + unselected = slot { + base = fg; + background = bg; + }; + + selected = slot { + base = bg; + background = accent; + e1 = bg; + }; + in + { + programs.zellij.themes.kemuri-copnix = '' + themes { + kemuri-copnix { + text_unselected { + ${unselected} + } + text_selected { + ${selected} + } + ribbon_selected { + ${slot { + base = bg; + background = accent; + e0 = red; + e1 = yellow; + e2 = magenta; + e3 = blue; + }} + } + ribbon_unselected { + ${slot { + base = fg; + background = bgAlt; + e0 = red; + e1 = fg; + e2 = blue; + e3 = magenta; + }} + } + table_title { + ${slot { + base = green; + background = bg; + }} + } + table_cell_selected { + ${selected} + } + table_cell_unselected { + ${unselected} + } + list_selected { + ${selected} + } + list_unselected { + ${unselected} + } + frame_selected { + ${slot { + base = accent; + background = bg; + e1 = green; + e2 = magenta; + e3 = bg; + }} + } + frame_highlight { + ${slot { + base = orange; + background = bg; + e0 = magenta; + e1 = orange; + e2 = orange; + e3 = orange; + }} + } + exit_code_success { + ${slot { + base = green; + background = bg; + e0 = accent; + e1 = bg; + e2 = magenta; + e3 = blue; + }} + } + exit_code_error { + ${slot { + base = red; + background = bg; + e0 = yellow; + e1 = bg; + e2 = bg; + e3 = bg; + }} + } + multiplayer_user_colors { + player_1 ${magenta} + player_2 ${blue} + player_3 ${cyan} + player_4 ${yellow} + player_5 ${accent} + player_6 ${green} + player_7 ${red} + player_8 ${orange} + player_9 ${fg} + player_10 ${bgAlt} + } + } + } + ''; + }; +} diff --git a/modules/home/theme/home-theme.ulu.nix b/modules/home/theme/home-theme.ulu.nix index 54ade88..11663a9 100644 --- a/modules/home/theme/home-theme.ulu.nix +++ b/modules/home/theme/home-theme.ulu.nix @@ -2,13 +2,58 @@ { flake.homeModules.home-theme = { lib, ... }: + let + inherit (builtins) substring; + + hexDigit = + c: + { + "0" = 0; + "1" = 1; + "2" = 2; + "3" = 3; + "4" = 4; + "5" = 5; + "6" = 6; + "7" = 7; + "8" = 8; + "9" = 9; + "a" = 10; + "b" = 11; + "c" = 12; + "d" = 13; + "e" = 14; + "f" = 15; + } + .${lib.toLower c}; + + hexPair = s: 16 * hexDigit (substring 0 1 s) + hexDigit (substring 1 1 s); + in { options.elars.theme.palette = lib.mkOption { type = lib.types.raw; description = '' Active ThemeNix-shaped base16 palette. Set by exactly one `home-theme-*` module (e.g. home-theme-kemuri); consumed by - home-gtk and home-qt. + every `home-theme-` module. + ''; + }; + + options.elars.theme.hexToRgb = lib.mkOption { + type = lib.types.raw; + default = + hex: + let + h = lib.removePrefix "#" hex; + in + [ + (hexPair (substring 0 2 h)) + (hexPair (substring 2 2 h)) + (hexPair (substring 4 2 h)) + ]; + description = '' + `"1e1d1b"` (or `"#1e1d1b"`) -> `[ 30 29 27 ]`. For consumers that + want decimal channels instead of hex (KDE's kdeglobals, zellij). ''; }; }; diff --git a/modules/home/zellij/home-zellij-theme.ulu.nix b/modules/home/zellij/home-zellij-theme.ulu.nix deleted file mode 100644 index 4e95371..0000000 --- a/modules/home/zellij/home-zellij-theme.ulu.nix +++ /dev/null @@ -1,130 +0,0 @@ -{ ... }: -{ - flake.homeModules.home-zellij-theme = - { ... }: - # this could be change - { - programs.zellij.themes.kanagawa-dragon-copnix = '' - themes { - kanagawa-dragon-copnix { - text_unselected { - base 197 201 199 - background 9 14 19 - emphasis_0 182 146 123 - emphasis_1 127 180 202 - emphasis_2 138 154 123 - emphasis_3 162 146 163 - } - text_selected { - base 9 14 19 - background 127 180 202 - emphasis_0 182 146 123 - emphasis_1 9 14 19 - emphasis_2 138 154 123 - emphasis_3 162 146 163 - } - ribbon_selected { - base 9 14 19 - background 127 180 202 - emphasis_0 196 116 110 - emphasis_1 182 146 123 - emphasis_2 162 146 163 - emphasis_3 139 164 176 - } - ribbon_unselected { - base 197 201 199 - background 34 38 45 - emphasis_0 196 116 110 - emphasis_1 197 201 199 - emphasis_2 139 164 176 - emphasis_3 162 146 163 - } - table_title { - base 138 154 123 - background 0 - emphasis_0 182 146 123 - emphasis_1 127 180 202 - emphasis_2 138 154 123 - emphasis_3 162 146 163 - } - table_cell_selected { - base 9 14 19 - background 127 180 202 - emphasis_0 182 146 123 - emphasis_1 9 14 19 - emphasis_2 138 154 123 - emphasis_3 162 146 163 - } - table_cell_unselected { - base 197 201 199 - background 9 14 19 - emphasis_0 182 146 123 - emphasis_1 127 180 202 - emphasis_2 138 154 123 - emphasis_3 162 146 163 - } - list_selected { - base 9 14 19 - background 127 180 202 - emphasis_0 182 146 123 - emphasis_1 9 14 19 - emphasis_2 138 154 123 - emphasis_3 162 146 163 - } - list_unselected { - base 197 201 199 - background 9 14 19 - emphasis_0 182 146 123 - emphasis_1 127 180 202 - emphasis_2 138 154 123 - emphasis_3 162 146 163 - } - frame_selected { - base 127 180 202 - background 0 - emphasis_0 182 146 123 - emphasis_1 138 154 123 - emphasis_2 162 146 163 - emphasis_3 0 - } - frame_highlight { - base 182 146 123 - background 0 - emphasis_0 162 146 163 - emphasis_1 182 146 123 - emphasis_2 182 146 123 - emphasis_3 182 146 123 - } - exit_code_success { - base 138 154 123 - background 0 - emphasis_0 127 180 202 - emphasis_1 9 14 19 - emphasis_2 162 146 163 - emphasis_3 139 164 176 - } - exit_code_error { - base 228 104 118 - background 0 - emphasis_0 230 195 132 - emphasis_1 0 - emphasis_2 0 - emphasis_3 0 - } - multiplayer_user_colors { - player_1 162 146 163 - player_2 139 164 176 - player_3 0 - player_4 230 195 132 - player_5 127 180 202 - player_6 0 - player_7 196 116 110 - player_8 0 - player_9 0 - player_10 0 - } - } - } - ''; - }; -} diff --git a/modules/home/zellij/home-zellij.ulu.nix b/modules/home/zellij/home-zellij.ulu.nix index ab1e942..d759b1a 100644 --- a/modules/home/zellij/home-zellij.ulu.nix +++ b/modules/home/zellij/home-zellij.ulu.nix @@ -7,7 +7,7 @@ enable = true; settings = { - theme = "kanagawa-dragon-copnix"; + theme = "kemuri-copnix"; default_layout = "compact"; default_mode = "normal"; default_shell = "nu";