Beef up custom color handling
parent
e9120ed0eb
commit
ec4a21cd3d
34
flake.lock
34
flake.lock
|
@ -104,38 +104,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"kakoune-cr-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1651502437,
|
||||
"narHash": "sha256-9sYqDWWnvoNpSYDBsMU6mV8AKLOwgolhzskD2sL7X+Q=",
|
||||
"owner": "alexherbo2",
|
||||
"repo": "kakoune.cr",
|
||||
"rev": "d2b59774382328343cb4e6336f371e15d2a84b96",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "alexherbo2",
|
||||
"repo": "kakoune.cr",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"kitty-themes-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1654224633,
|
||||
"narHash": "sha256-SM7ExyD6cCYXZwxb4Rs1U2P2N9vzhmaUHJJRz/gO3IQ=",
|
||||
"owner": "kovidgoyal",
|
||||
"repo": "kitty-themes",
|
||||
"rev": "f6c2f4e5617ef946b17db8bc18dadc9fad38d32e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "kovidgoyal",
|
||||
"repo": "kitty-themes",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"luar-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
|
@ -208,8 +176,6 @@
|
|||
"flake-utils": "flake-utils",
|
||||
"home-manager": "home-manager",
|
||||
"homebrew-enabled": "homebrew-enabled",
|
||||
"kakoune-cr-src": "kakoune-cr-src",
|
||||
"kitty-themes-src": "kitty-themes-src",
|
||||
"luar-src": "luar-src",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-master": "nixpkgs-master",
|
||||
|
|
|
@ -34,10 +34,6 @@
|
|||
url = github:andreyorst/smarttab.kak;
|
||||
flake = false;
|
||||
};
|
||||
kitty-themes-src = {
|
||||
url = github:kovidgoyal/kitty-themes;
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, darwin, nixpkgs, home-manager, flake-utils, ... }@inputs:
|
||||
|
@ -224,7 +220,7 @@
|
|||
# configs-git-aliases = import ./home/configs/git-aliases.nix;
|
||||
# configs-gh-aliases = import ./home/configs/gh-aliases.nix;
|
||||
configs-starship-symbols = import ./home/configs/starship-symbols.nix;
|
||||
# programs-kakoune-extras = import ./modules/home/programs/kakoune/extras.nix;
|
||||
programs-kakoune-extras = import ./modules/home/programs/kakoune/extras.nix;
|
||||
programs-kitty-extras = import ./modules/home/programs/kitty/extras.nix;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,15 +1,84 @@
|
|||
{ pkgs, ... }: {
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
colorsToKakoune = colors: with colors; {
|
||||
attribute = magenta;
|
||||
builtin = cyan;
|
||||
comment = comment;
|
||||
documentation = comment;
|
||||
enum = red;
|
||||
function = blue;
|
||||
keyword = magenta;
|
||||
meta = foreground;
|
||||
module = blue;
|
||||
operator = magenta;
|
||||
parameter = yellow;
|
||||
string = green;
|
||||
type = magenta;
|
||||
value = orange;
|
||||
variable = white;
|
||||
block = blue;
|
||||
bullet = comment;
|
||||
header = blue;
|
||||
link = cyan;
|
||||
list = foreground;
|
||||
mono = foreground;
|
||||
title = white;
|
||||
BufferPadding = [ background background ];
|
||||
Default = [ foreground background ];
|
||||
PrimarySelection = [ "default" "!${magenta}40" ];
|
||||
SecondarySelection = [ "default" "!${green}40" ];
|
||||
PrimaryCursor = [ "default" "!${blue}80" ];
|
||||
SecondaryCursor = [ "default" "!${green}80" ];
|
||||
PrimaryCursorEol = [ "default" "!${red}80" ];
|
||||
SecondaryCursorEol = [ "default" "!${orange}80" ];
|
||||
LineNumbers = comment;
|
||||
LineNumberCursor = orange;
|
||||
LineNumbersWrapped = [ background background ];
|
||||
MenuForeground = [ active_tab_foreground active_tab_background ];
|
||||
MenuBackground = [ inactive_tab_foreground inactive_tab_background ];
|
||||
MenuInfo = green;
|
||||
Information = [ inactive_tab_foreground inactive_tab_background ];
|
||||
Error = red;
|
||||
StatusLine = [ active_tab_foreground "${active_tab_background}+b" ];
|
||||
StatusLineMode = orange;
|
||||
StatusLineInfo = blue;
|
||||
StatusLineValue = foreground;
|
||||
StatusCursor = [ "default" "!${blue}80" ];
|
||||
Prompt = yellow;
|
||||
MatchingChar = [ "default" comment ];
|
||||
Whitespace = comment;
|
||||
InfoDefault = "Information";
|
||||
InfoBlock = "block";
|
||||
InfoBlockQuote = "quote";
|
||||
InfoBullet = "bullet";
|
||||
InfoHeader = "header";
|
||||
InfoLink = "link";
|
||||
InfoLinkMono = "header";
|
||||
InfoMono = "mono";
|
||||
InfoRule = "comment";
|
||||
InfoDiagnosticError = "InlayDiagnosticError";
|
||||
InfoDiagnosticHint = "InlayDiagnosticHint";
|
||||
InfoDiagnosticInformation = "InlayDiagnosticInfo";
|
||||
InfoDiagnosticWarning = "InlayDiagnosticWarning";
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
kak-lsp
|
||||
];
|
||||
programs.kakoune = {
|
||||
enable = true;
|
||||
|
||||
extras.colors.enable = true;
|
||||
extras.colors.dark = colorsToKakoune pkgs.lib.colors.tokyonight.dark;
|
||||
extras.colors.light = colorsToKakoune pkgs.lib.colors.tokyonight.light;
|
||||
|
||||
config = {
|
||||
autoReload = "yes";
|
||||
|
||||
# colorScheme = "tokyonight";
|
||||
|
||||
hooks = [
|
||||
# smarttab hooks
|
||||
{
|
||||
|
@ -85,8 +154,15 @@
|
|||
showMatching = true;
|
||||
|
||||
showWhitespace.enable = true;
|
||||
showWhitespace.space = " ";
|
||||
|
||||
ui.assistant = "cat";
|
||||
ui.enableMouse = true;
|
||||
|
||||
wrapLines.enable = true;
|
||||
wrapLines.indent = true;
|
||||
wrapLines.marker = "⏎";
|
||||
wrapLines.word = true;
|
||||
};
|
||||
|
||||
extraConfig = ''
|
||||
|
@ -108,4 +184,14 @@
|
|||
tabs-kak
|
||||
];
|
||||
};
|
||||
programs.fish.functions.set-kak-colors = {
|
||||
body = ''
|
||||
if test "$term_background" = light
|
||||
kak-light
|
||||
else
|
||||
kak-dark
|
||||
end
|
||||
'';
|
||||
onVariable = "term_background";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,6 +2,37 @@
|
|||
# Let-In --------------------------------------------------------------------------------------- {{{
|
||||
let
|
||||
inherit (lib) mkIf;
|
||||
colorsToKitty = colors: with colors; {
|
||||
inherit
|
||||
background
|
||||
foreground
|
||||
selection_background
|
||||
selection_foreground
|
||||
tab_bar_background
|
||||
active_tab_background
|
||||
active_tab_foreground
|
||||
inactive_tab_background
|
||||
inactive_tab_foreground;
|
||||
cursor = white;
|
||||
cursor_text_color = background;
|
||||
color0 = black;
|
||||
color8 = black;
|
||||
color1 = red;
|
||||
color9 = red;
|
||||
color2 = green;
|
||||
color10 = lime;
|
||||
color3 = yellow;
|
||||
color11 = orange;
|
||||
color4 = blue;
|
||||
color12 = blue;
|
||||
color5 = magenta;
|
||||
color13 = magenta;
|
||||
color6 = cyan;
|
||||
color14 = cyan;
|
||||
color7 = white;
|
||||
color15 = white;
|
||||
url_color = brightgreen;
|
||||
};
|
||||
in
|
||||
# }}}
|
||||
{
|
||||
|
@ -47,19 +78,18 @@ in
|
|||
# }}}
|
||||
|
||||
# Colors config ------------------------------------------------------------------------------ {{{
|
||||
programs.kitty.extras.colors =
|
||||
let
|
||||
theme = pkgs.lib.colors.tokyonight;
|
||||
in
|
||||
{
|
||||
enable = true;
|
||||
common = theme.common;
|
||||
dark = theme.dark;
|
||||
light = theme.light;
|
||||
};
|
||||
programs.kitty.extras.colors.enable = true;
|
||||
programs.kitty.extras.colors.dark = colorsToKitty pkgs.lib.colors.tokyonight.dark;
|
||||
programs.kitty.extras.colors.light = colorsToKitty pkgs.lib.colors.tokyonight.light;
|
||||
|
||||
programs.fish.functions.set-term-colors = {
|
||||
body = "term-background $term_background";
|
||||
body = ''
|
||||
if test "$term_background" = light
|
||||
term-light
|
||||
else
|
||||
term-dark
|
||||
end
|
||||
'';
|
||||
onVariable = "term_background";
|
||||
};
|
||||
programs.fish.interactiveShellInit = ''
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.programs.kakoune.extras;
|
||||
|
||||
makeKakouneFace = face: name:
|
||||
let
|
||||
mkColor = name:
|
||||
if hasPrefix "#" name
|
||||
then "rgb:${substring 1 (-1) name}"
|
||||
else if hasPrefix "!#" name
|
||||
then "rgba:${substring 2 (-1) name}"
|
||||
else name;
|
||||
value =
|
||||
if isList name
|
||||
then concatStringsSep "," (map mkColor name)
|
||||
else mkColor name;
|
||||
in
|
||||
"face global ${face} ${value}";
|
||||
|
||||
makeKakouneColors = faces:
|
||||
concatStringsSep "\n"
|
||||
([ "# Generated by home-manager" ]
|
||||
++ mapAttrsToList makeKakouneFace faces);
|
||||
|
||||
writeKakouneConfig = file: config: pkgs.writeText file (makeKakouneColors config);
|
||||
|
||||
kakoune-colors = {
|
||||
light = writeKakouneConfig "light.kak" cfg.colors.light;
|
||||
dark = writeKakouneConfig "dark.kak" cfg.colors.dark;
|
||||
};
|
||||
|
||||
kak-background = pkgs.writeShellScriptBin "kak-background" ''
|
||||
for session in $(kak -l); do
|
||||
kak -c $session -e "colorscheme $1;q"
|
||||
done
|
||||
'';
|
||||
kak-light = pkgs.writeShellScriptBin "kak-light" ''
|
||||
${kak-background}/bin/kak-background light
|
||||
'';
|
||||
kak-dark = pkgs.writeShellScriptBin "kak-dark" ''
|
||||
${kak-background}/bin/kak-background dark
|
||||
'';
|
||||
in
|
||||
{
|
||||
options.programs.kakoune.extras = {
|
||||
colors = {
|
||||
enable = mkEnableOption "Custom kakoune color handling";
|
||||
|
||||
dark = mkOption {
|
||||
type = with types; attrsOf (either str (listOf str));
|
||||
description = "Kakoune dark colors";
|
||||
};
|
||||
|
||||
light = mkOption {
|
||||
type = with types; attrsOf (either str (listOf str));
|
||||
description = "Kakoune light colors";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.programs.kakoune.enable {
|
||||
home.packages = mkIf cfg.colors.enable [
|
||||
kak-light
|
||||
kak-dark
|
||||
kak-background
|
||||
];
|
||||
|
||||
xdg.configFile."kak/colors/light.kak".source = kakoune-colors.light;
|
||||
xdg.configFile."kak/colors/dark.kak".source = kakoune-colors.dark;
|
||||
programs.kakoune.extraConfig = ''
|
||||
eval %sh{
|
||||
if is-dark-mode; then
|
||||
echo "colorscheme dark"
|
||||
else
|
||||
echo "colorscheme light"
|
||||
fi
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -16,17 +16,18 @@ let
|
|||
kitty-colors = pkgs.symlinkJoin {
|
||||
name = "kitty-colors";
|
||||
paths = [
|
||||
(writeKittyConfig "dark-colors.conf" cfg.colors.dark)
|
||||
(writeKittyConfig "light-colors.conf" cfg.colors.light)
|
||||
(writeKittyConfig "dark.conf" cfg.colors.dark)
|
||||
(writeKittyConfig "light.conf" cfg.colors.light)
|
||||
];
|
||||
};
|
||||
|
||||
# Shell scripts for changing Kitty colors
|
||||
term-background = pkgs.writeShellScriptBin "term-background" ''
|
||||
# Accepts arguments "light" or "dark". If shell is running in a Kitty window set the colors.
|
||||
# Accepts arguments "light" or "dark".
|
||||
# If shell is running in a Kitty window set the colors.
|
||||
if [ -n "$KITTY_WINDOW_ID" ]; then
|
||||
kitty @ --to $KITTY_LISTEN_ON set-colors --all --configured \
|
||||
${kitty-colors}/"$1"-colors.conf &
|
||||
${kitty-colors}/"$1".conf &
|
||||
fi
|
||||
'';
|
||||
term-light = pkgs.writeShellScriptBin "term-light" ''
|
||||
|
@ -35,7 +36,6 @@ let
|
|||
term-dark = pkgs.writeShellScriptBin "term-dark" ''
|
||||
${term-background}/bin/term-background dark
|
||||
'';
|
||||
|
||||
in
|
||||
{
|
||||
|
||||
|
@ -48,7 +48,7 @@ in
|
|||
When enabled, commands <command>term-dark</command> and <command>term-light</command> will
|
||||
toggle between your dark and a light colors.
|
||||
<command>term-background</command> which accepts one argument (the value of which should
|
||||
be <literal>dark</literal> or <literal>light</literal>) is also avaible.
|
||||
be <literal>dark</literal> or <literal>light</literal>) is also available.
|
||||
(Note that the Kitty setting <literal>allow_remote_control = true</literal> is set to
|
||||
enable this functionality.)
|
||||
'';
|
||||
|
@ -56,7 +56,6 @@ in
|
|||
|
||||
dark = mkOption {
|
||||
type = with types; attrsOf str;
|
||||
default = { };
|
||||
description = ''
|
||||
Kitty color settings for dark background colorscheme.
|
||||
'';
|
||||
|
@ -64,27 +63,10 @@ in
|
|||
|
||||
light = mkOption {
|
||||
type = with types; attrsOf str;
|
||||
default = { };
|
||||
description = ''
|
||||
Kitty color settings for light background colorscheme.
|
||||
'';
|
||||
};
|
||||
|
||||
common = mkOption {
|
||||
type = with types; attrsOf str;
|
||||
default = { };
|
||||
description = ''
|
||||
Kitty color settings that the light and dark background colorschemes share.
|
||||
'';
|
||||
};
|
||||
|
||||
default = mkOption {
|
||||
type = types.enum [ "dark" "light" ];
|
||||
default = "dark";
|
||||
description = ''
|
||||
The colorscheme Kitty opens with.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
useSymbolsFromNerdFont = mkOption {
|
||||
|
@ -140,12 +122,10 @@ in
|
|||
|
||||
programs.kitty.settings = optionalAttrs cfg.colors.enable
|
||||
(
|
||||
|
||||
cfg.colors.common // cfg.colors.${cfg.colors.default} // {
|
||||
{
|
||||
allow_remote_control = "yes";
|
||||
listen_on = "unix:/tmp/mykitty";
|
||||
}
|
||||
|
||||
) // optionalAttrs (cfg.useSymbolsFromNerdFont != "") {
|
||||
|
||||
# https://github.com/ryanoasis/nerd-fonts/wiki/Glyph-Sets-and-Code-Points
|
||||
|
|
|
@ -1,7 +1,15 @@
|
|||
rec {
|
||||
_dark = {
|
||||
{
|
||||
dark = {
|
||||
background = "#1a1b26";
|
||||
foreground = "#a9b1d6";
|
||||
selection_background = "#28344a";
|
||||
selection_foreground = "none";
|
||||
tab_bar_background = "#101014";
|
||||
active_tab_background = "#787c99";
|
||||
active_tab_foreground = "#3d59a1";
|
||||
inactive_tab_background = "#16161e";
|
||||
inactive_tab_foreground = "#9aa5ce";
|
||||
comment = "#565f89";
|
||||
white = "#c0caf5";
|
||||
black = "#414868";
|
||||
red = "#f7768e";
|
||||
|
@ -14,57 +22,22 @@ rec {
|
|||
cyan = "#7dcfff";
|
||||
brightgreen = "#9ece6a";
|
||||
};
|
||||
dark = with _dark; {
|
||||
inherit background foreground;
|
||||
|
||||
# Cursor
|
||||
cursor = white;
|
||||
cursor_text_color = background;
|
||||
|
||||
# Selection
|
||||
selection_background = "#28344a";
|
||||
selection_foreground = "none";
|
||||
|
||||
# Tab bar
|
||||
tab_bar_background = "#101014";
|
||||
active_tab_foreground = "#3d59a1";
|
||||
active_tab_background = "#787c99";
|
||||
inactive_tab_foreground = "#9aa5ce";
|
||||
inactive_tab_background = "#16161e";
|
||||
# black
|
||||
color0 = black;
|
||||
color8 = black;
|
||||
# red
|
||||
color1 = red;
|
||||
color9 = red;
|
||||
# green
|
||||
color2 = green;
|
||||
color10 = lime;
|
||||
# yellow
|
||||
color3 = yellow;
|
||||
color11 = orange;
|
||||
# blue
|
||||
color4 = blue;
|
||||
color12 = blue;
|
||||
# magenta
|
||||
color5 = magenta;
|
||||
color13 = magenta;
|
||||
# cyan
|
||||
color6 = cyan;
|
||||
color14 = cyan;
|
||||
# white
|
||||
color7 = white;
|
||||
color15 = white;
|
||||
# url underline color to fit colors
|
||||
url_color = brightgreen;
|
||||
};
|
||||
_light = {
|
||||
light = rec {
|
||||
background = "#d5d6db";
|
||||
foreground = white;
|
||||
selection_background = "#fafbff";
|
||||
selection_foreground = "none";
|
||||
tab_bar_background = "#e9e9ed";
|
||||
active_tab_foreground = "#d4d6e4";
|
||||
active_tab_background = "#2e7de9";
|
||||
inactive_tab_foreground = "#8990b3";
|
||||
inactive_tab_background = "#c4c8da";
|
||||
comment = "#9699a3";
|
||||
white = "#343b58";
|
||||
black = "#0f0f14";
|
||||
red = "#8c4351";
|
||||
yellow = "#8f5e15";
|
||||
orange = "#343b58";
|
||||
orange = white;
|
||||
green = "#33635c";
|
||||
lime = "#166775";
|
||||
blue = "#34548a";
|
||||
|
@ -72,50 +45,4 @@ rec {
|
|||
cyan = "#0f4b6e";
|
||||
brightgreen = "#485e30";
|
||||
};
|
||||
light = with _light; {
|
||||
inherit background;
|
||||
foreground = white;
|
||||
|
||||
# Cursor
|
||||
cursor = white;
|
||||
cursor_text_color = background;
|
||||
|
||||
# Selection
|
||||
selection_background = "#fafbff";
|
||||
selection_foreground = "none";
|
||||
|
||||
# Tab bar
|
||||
tab_bar_background = "#e9e9ed";
|
||||
active_tab_foreground = "#d4d6e4";
|
||||
active_tab_background = "#2e7de9";
|
||||
inactive_tab_foreground = "#8990b3";
|
||||
inactive_tab_background = "#c4c8da";
|
||||
# black
|
||||
color0 = black;
|
||||
color8 = black;
|
||||
# red
|
||||
color1 = red;
|
||||
color9 = red;
|
||||
# green
|
||||
color2 = green;
|
||||
color10 = lime;
|
||||
# yellow
|
||||
color3 = yellow;
|
||||
color11 = orange;
|
||||
# blue
|
||||
color4 = blue;
|
||||
color12 = blue;
|
||||
# magenta
|
||||
color5 = magenta;
|
||||
color13 = magenta;
|
||||
# cyan
|
||||
color6 = cyan;
|
||||
color14 = cyan;
|
||||
# white
|
||||
color7 = white;
|
||||
color15 = white;
|
||||
# url underline color to fit colors
|
||||
url_color = brightgreen;
|
||||
};
|
||||
common = { };
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ let
|
|||
"dark-mode-notify"
|
||||
"luar"
|
||||
"smarttab-kak"
|
||||
"kitty-themes"
|
||||
];
|
||||
in
|
||||
genAttrs pkgs buildPkg
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
{ kitty-themes-src, stdenv, ... }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "kitty-themes";
|
||||
src = kitty-themes-src;
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
|
||||
cp themes/* $out
|
||||
'';
|
||||
}
|
Loading…
Reference in New Issue