theme/QoL

This commit is contained in:
elwrcl committed 2026-08-27 16:45:54 +03:00
1 parent c86dcd63fe
commit 51363a98c7
22 files changed
+1022 -425

No files matched your search

Generated
+37
View File
@@ -658,6 +658,8 @@
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_3",
"noctalia": "noctalia", "noctalia": "noctalia",
"nyi": "nyi", "nyi": "nyi",
"theme-assets": "theme-assets",
"themes": "themes",
"zen-browser": "zen-browser" "zen-browser": "zen-browser"
} }
}, },
@@ -676,6 +678,41 @@
"type": "github" "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": { "treefmt-nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
+9 -5
View File
@@ -30,25 +30,30 @@ in
config.flake.homeModules.home-ghostty config.flake.homeModules.home-ghostty
config.flake.homeModules.home-nushell config.flake.homeModules.home-nushell
config.flake.homeModules.home-nushell-bash-compat config.flake.homeModules.home-nushell-bash-compat
config.flake.homeModules.home-nushell-colors
config.flake.homeModules.home-nushell-completions config.flake.homeModules.home-nushell-completions
config.flake.homeModules.home-nushell-prompt config.flake.homeModules.home-nushell-prompt
config.flake.homeModules.home-nushell-commandline-copy config.flake.homeModules.home-nushell-commandline-copy
config.flake.homeModules.home-nushell-keybinds config.flake.homeModules.home-nushell-keybinds
config.flake.homeModules.home-nushell-last config.flake.homeModules.home-nushell-last
config.flake.homeModules.home-nushell-editor config.flake.homeModules.home-nushell-editor
config.flake.homeModules.home-nushell-greeting
config.flake.homeModules.home-helix config.flake.homeModules.home-helix
config.flake.homeModules.home-helix-theme
config.flake.homeModules.home-helix-keys config.flake.homeModules.home-helix-keys
config.flake.homeModules.home-helix-languages config.flake.homeModules.home-helix-languages
config.flake.homeModules.home-helix-language-servers config.flake.homeModules.home-helix-language-servers
config.flake.homeModules.home-zellij config.flake.homeModules.home-zellij
config.flake.homeModules.home-zellij-keybinds config.flake.homeModules.home-zellij-keybinds
config.flake.homeModules.home-zellij-theme
config.flake.homeModules.home-zellij-layout-ide config.flake.homeModules.home-zellij-layout-ide
config.flake.homeModules.home-zellij-ide-command 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
config.flake.homeModules.home-theme-kemuri 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-direnv
config.flake.homeModules.home-jujutsu config.flake.homeModules.home-jujutsu
config.flake.homeModules.home-jujutsu-difftastic config.flake.homeModules.home-jujutsu-difftastic
@@ -57,12 +62,11 @@ in
config.flake.homeModules.home-gh config.flake.homeModules.home-gh
config.flake.homeModules.home-radicle config.flake.homeModules.home-radicle
config.flake.homeModules.home-zsh config.flake.homeModules.home-zsh
config.flake.homeModules.home-zsh-nu-handoff
config.flake.homeModules.home-shell-tools config.flake.homeModules.home-shell-tools
config.flake.homeModules.home-session-vars config.flake.homeModules.home-session-vars
config.flake.homeModules.home-cursor config.flake.homeModules.home-cursor
config.flake.homeModules.home-gtk
config.flake.homeModules.home-icons config.flake.homeModules.home-icons
config.flake.homeModules.home-qt
config.flake.homeModules.home-browser-zen config.flake.homeModules.home-browser-zen
config.flake.homeModules.home-browser-helium config.flake.homeModules.home-browser-helium
config.flake.homeModules.home-mimeapps config.flake.homeModules.home-mimeapps
+5 -1
View File
@@ -29,11 +29,15 @@ in
config.flake.homeModules.home-ghostty config.flake.homeModules.home-ghostty
config.flake.homeModules.home-nushell config.flake.homeModules.home-nushell
config.flake.homeModules.home-nushell-bash-compat config.flake.homeModules.home-nushell-bash-compat
config.flake.homeModules.home-nushell-colors
config.flake.homeModules.home-nushell-completions config.flake.homeModules.home-nushell-completions
config.flake.homeModules.home-nushell-prompt config.flake.homeModules.home-nushell-prompt
config.flake.homeModules.home-nushell-commandline-copy config.flake.homeModules.home-nushell-commandline-copy
config.flake.homeModules.home-nushell-last 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-direnv
config.flake.homeModules.home-jujutsu config.flake.homeModules.home-jujutsu
config.flake.homeModules.home-jujutsu-difftastic config.flake.homeModules.home-jujutsu-difftastic
-132
View File
@@ -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";
};
};
}
+1 -1
View File
@@ -8,7 +8,7 @@
defaultEditor = true; defaultEditor = true;
settings = { settings = {
theme = "kanagawa-dragon-copnix"; theme = "kemuri-copnix";
editor = { editor = {
line-number = "relative"; line-number = "relative";
+1 -25
View File
@@ -87,31 +87,7 @@
mouse-scroll-multiplier = 2; mouse-scroll-multiplier = 2;
shell-integration-features = "no-cursor,sudo,no-title"; shell-integration-features = "no-cursor,sudo,no-title";
palette = [ # Colors live in home-theme-ghostty, driven by the active 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";
cursor-style = "block"; cursor-style = "block";
cursor-style-blink = true; cursor-style-blink = true;
adjust-cell-height = "35%"; adjust-cell-height = "35%";
-83
View File
@@ -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
'';
};
}
+16
View File
@@ -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
'';
};
}
-2
View File
@@ -70,8 +70,6 @@
export MESA_SHADER_CACHE_MAX_SIZE=2G export MESA_SHADER_CACHE_MAX_SIZE=2G
export MESA_SHADER_CACHE_DIR=/tmp/mesa_shader_cache export MESA_SHADER_CACHE_DIR=/tmp/mesa_shader_cache
export PATH="$HOME/.local/bin:$PATH" export PATH="$HOME/.local/bin:$PATH"
/home/elars/.config/copetch/animated-copetch.sh
''; '';
}; };
}; };
@@ -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"
}
}
'';
};
}
@@ -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
}
'';
};
}
-4
View File
@@ -124,10 +124,6 @@
} }
} }
} }
if ($"($env.HOME)/.config/copetch/animated-copetch.sh" | path exists) {
^$"($env.HOME)/.config/copetch/animated-copetch.sh"
}
''; '';
}; };
}; };
@@ -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}"
];
};
};
}
@@ -1,6 +1,6 @@
{ ... }: { ... }:
{ {
flake.homeModules.home-gtk = flake.homeModules.home-theme-gtk =
{ config, pkgs, ... }: { config, pkgs, ... }:
{ {
gtk = { gtk = {
+232
View File
@@ -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";
};
};
}
+1 -1
View File
@@ -17,7 +17,7 @@
base07 = "fafbfe"; base07 = "fafbfe";
base08 = "cf7670"; # red / mError base08 = "cf7670"; # red / mError
base09 = "d1ba94"; # orange (approximated, see note above) base09 = "d1ba94"; # orange
base0A = "bfa67a"; # yellow base0A = "bfa67a"; # yellow
base0B = "8ca38a"; # green base0B = "8ca38a"; # green
base0C = "7fa39a"; # cyan base0C = "7fa39a"; # cyan
@@ -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}"
}
}
'';
};
}
+226
View File
@@ -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
'';
};
}
@@ -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}
}
}
}
'';
};
}
+46 -1
View File
@@ -2,13 +2,58 @@
{ {
flake.homeModules.home-theme = flake.homeModules.home-theme =
{ lib, ... }: { 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 { options.elars.theme.palette = lib.mkOption {
type = lib.types.raw; type = lib.types.raw;
description = '' description = ''
Active ThemeNix-shaped base16 palette. Set by exactly one Active ThemeNix-shaped base16 palette. Set by exactly one
`home-theme-*` module (e.g. home-theme-kemuri); consumed by `home-theme-*` module (e.g. home-theme-kemuri); consumed by
home-gtk and home-qt. every `home-theme-<app>` 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).
''; '';
}; };
}; };
@@ -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
}
}
}
'';
};
}
+1 -1
View File
@@ -7,7 +7,7 @@
enable = true; enable = true;
settings = { settings = {
theme = "kanagawa-dragon-copnix"; theme = "kemuri-copnix";
default_layout = "compact"; default_layout = "compact";
default_mode = "normal"; default_mode = "normal";
default_shell = "nu"; default_shell = "nu";