From 5296090c63384e1c4ba3de95dd04763026da7b5c Mon Sep 17 00:00:00 2001 From: Jakub Trzeciak Date: Wed, 20 Sep 2023 20:43:52 +0200 Subject: nix-colors --- home-manager/.Xresources | 42 ------------------------ home-manager/addons/alacritty.nix | 39 ++++++++++++++++++++++ home-manager/addons/xresources.nix | 35 ++++++++++++++++++++ home-manager/home.nix | 67 ++++++++++++++------------------------ home-manager/schemeFromYAML.nix | 64 ++++++++++++++++++++++++++++++++++++ 5 files changed, 162 insertions(+), 85 deletions(-) delete mode 100644 home-manager/.Xresources create mode 100644 home-manager/addons/alacritty.nix create mode 100644 home-manager/addons/xresources.nix create mode 100644 home-manager/schemeFromYAML.nix (limited to 'home-manager') diff --git a/home-manager/.Xresources b/home-manager/.Xresources deleted file mode 100644 index 9bc01b0..0000000 --- a/home-manager/.Xresources +++ /dev/null @@ -1,42 +0,0 @@ -*.window.background: #181921 -*.window.foreground: #ba5ac9 -*.bar.background: #ba5ac9 -*.bar.foreground: #eceadd -*.mark.foreground: #eceadd - -! special -*.foreground: #eceadd -*.background: #181921 -*.cursorColor: #eceadd - -! black -*.color0: #090618 -*.color8: #413e53 - -! red -*.color1: #e32929 -*.color9: #d94545 - -! green -*.color2: #bdcc27 -*.color10: #bac455 - -! yellow -*.color3: #ff920d -*.color11: #e59e46 - -! blue -*.color4: #1984db -*.color12: #5a9dd4 - -! magenta -*.color5: #af18db -*.color13: #ba5ac9 - -! cyan -*.color6: #55c8b9 -*.color14: #61b5aa - -! white -*.color7: #9ca7b2 -*.color15: #f1f1f1 diff --git a/home-manager/addons/alacritty.nix b/home-manager/addons/alacritty.nix new file mode 100644 index 0000000..8ae52f2 --- /dev/null +++ b/home-manager/addons/alacritty.nix @@ -0,0 +1,39 @@ +{ pkgs, config, ... }: + +{ + home.file = { + ".config/alacritty/alacritty.yml".text = '' + font: + normal: + family: Neo Comic Mono + style: Regular + bold: + family: Neo Comic Mono + style: Bold + size: 12 + + colors: + primary: + background: '0x${config.colorScheme.colors.base00}' + foreground: '0x${config.colorScheme.colors.base05}' + normal: + black: '0x${config.colorScheme.colors.base01}' + red: '0x${config.colorScheme.colors.base08}' + green: '0x${config.colorScheme.colors.base0B}' + yellow: '0x${config.colorScheme.colors.base0A}' + blue: '0x${config.colorScheme.colors.base0D}' + magenta: '0x${config.colorScheme.colors.base0E}' + cyan: '0x${config.colorScheme.colors.base0C}' + white: '0x${config.colorScheme.colors.base06}' + bright: + black: '0x${config.colorScheme.colors.base02}' + red: '0x${config.colorScheme.colors.base12}' + green: '0x${config.colorScheme.colors.base14}' + yellow: '0x${config.colorScheme.colors.base13}' + blue: '0x${config.colorScheme.colors.base16}' + magenta: '0x${config.colorScheme.colors.base17}' + cyan: '0x${config.colorScheme.colors.base15}' + white: '0x${config.colorScheme.colors.base07}' + ''; + }; +} diff --git a/home-manager/addons/xresources.nix b/home-manager/addons/xresources.nix new file mode 100644 index 0000000..9be35a1 --- /dev/null +++ b/home-manager/addons/xresources.nix @@ -0,0 +1,35 @@ +{ pkgs, config, ... }: + +{ + home.file = { + ".config/Xresources".text = '' + *.window.background: #${config.colorScheme.colors.base00} + *.window.foreground: #${config.colorScheme.colors.base0E} + *.bar.background: #${config.colorScheme.colors.base02} + *.bar.foreground: #${config.colorScheme.colors.base05} + *.mark.foreground: #${config.colorScheme.colors.base0E} + + *.foreground: #${config.colorScheme.colors.base05} + *.background: #${config.colorScheme.colors.base00} + *.cursorColor: #${config.colorScheme.colors.base05} + + *.color00: #${config.colorScheme.colors.base01} + *.color01: #${config.colorScheme.colors.base08} + *.color02: #${config.colorScheme.colors.base0B} + *.color03: #${config.colorScheme.colors.base0A} + *.color04: #${config.colorScheme.colors.base0D} + *.color05: #${config.colorScheme.colors.base0E} + *.color06: #${config.colorScheme.colors.base0C} + *.color07: #${config.colorScheme.colors.base06} + + *.color08: #${config.colorScheme.colors.base02} + *.color09: #${config.colorScheme.colors.base12} + *.color10: #${config.colorScheme.colors.base14} + *.color11: #${config.colorScheme.colors.base13} + *.color12: #${config.colorScheme.colors.base16} + *.color13: #${config.colorScheme.colors.base17} + *.color14: #${config.colorScheme.colors.base15} + *.color15: #${config.colorScheme.colors.base07} + ''; + }; +} diff --git a/home-manager/home.nix b/home-manager/home.nix index b46d8ba..10f46be 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -1,11 +1,27 @@ -{ username, pkgs, lib, ... }: - +{ username, nix-colors, config, pkgs, lib, ... }: let nvim-spell-pl-utf8-dict = builtins.fetchurl { url = "http://ftp.vim.org/vim/runtime/spell/pl.utf-8.spl"; sha256 = "1sg7hnjkvhilvh0sidjw5ciih0vdia9vas8vfrd9vxnk9ij51khl"; }; + + lux-scheme = builtins.fetchurl { + url = "https://git.jptrzy.xyz/lux-theme/plain/lux-theme.yaml?h=main"; + }; + + nix-colors-lib = nix-colors.lib.contrib { inherit pkgs; }; + + schemeFromYaml = import ./schemeFromYAML.nix; in { + imports = [ + nix-colors.homeManagerModules.default + ./firefox.nix + ./addons/alacritty.nix + ./addons/xresources.nix + ]; + + colorScheme = schemeFromYaml "lux-scheme" (builtins.readFile lux-scheme); + home.username = "${username}"; home.homeDirectory = "/home/${username}"; @@ -45,41 +61,6 @@ in { ".config/nvim/spell/pl.utf-8.spl".source = nvim-spell-pl-utf8-dict; ".config/sx/sxrc".source = ./sxrc; - ".config/Xresources".source = ./.Xresources; - - ".config/alacritty/alacritty.yml".text = '' - font: - normal: - family: Neo Comic Mono - style: Regular - bold: - family: Neo Comic Mono - style: Bold - size: 12 - - colors: - primary: - background: '0x181921' - foreground: '0xeceadd' - normal: - black: '0x090618' - red: '0xe32929' - green: '0xbdcc27' - yellow: '0xff920d' - blue: '0x1984db' - magenta: '0xaf18db' - cyan: '0x55c8b9' - white: '0x9ca7b2' - bright: - black: '0x413e53' - red: '0xd94545' - green: '0xbac455' - yellow: '0xe59e46' - blue: '0x5a9dd4' - magenta: '0xba5ac9' - cyan: '0x61b5aa' - white: '0xf1f1f1' - ''; ".local/share/gnupg/gpg-agent.conf".text = '' debug-pinentry @@ -107,13 +88,15 @@ in { font.name = "Neo Comic Mono 12"; theme = { - name = "Flat-Remix-GTK-Violet-Dark"; - package = pkgs.flat-remix-gtk; + name = "lux-scheme"; + package = nix-colors-lib.gtkThemeFromScheme { + scheme = config.colorScheme; + }; }; iconTheme = { - name = "Flat-Remix-Violet-Dark"; - package = pkgs.flat-remix-icon-theme; + name = "Adwaita"; + package = pkgs.gnome.adwaita-icon-theme; }; cursorTheme = { @@ -176,6 +159,4 @@ in { }; }; }; - - imports = [ ./firefox.nix ]; } diff --git a/home-manager/schemeFromYAML.nix b/home-manager/schemeFromYAML.nix new file mode 100644 index 0000000..ead10c8 --- /dev/null +++ b/home-manager/schemeFromYAML.nix @@ -0,0 +1,64 @@ +# Based on https://raw.githubusercontent.com/Misterio77/nix-colors/b92df8f5eb1fa20d8e09810c03c9dc0d94ef2820/lib/core/schemeFromYAML.nix + +let + inherit (builtins) + elemAt filter listToAttrs substring replaceStrings stringLength genList; + + # All of these are borrowed from nixpkgs + mapListToAttrs = f: l: listToAttrs (map f l); + escapeRegex = escape (stringToCharacters "\\[{()^$?*+|."); + addContextFrom = a: b: substring 0 0 a + b; + escape = list: replaceStrings list (map (c: "\\${c}") list); + range = first: last: + if first > last then [ ] else genList (n: first + n) (last - first + 1); + stringToCharacters = s: + map (p: substring p 1 s) (range 0 (stringLength s - 1)); + splitString = _sep: _s: + let + sep = builtins.unsafeDiscardStringContext _sep; + s = builtins.unsafeDiscardStringContext _s; + splits = filter builtins.isString (builtins.split (escapeRegex sep) s); + in + map (v: addContextFrom _sep (addContextFrom _s v)) splits; + nameValuePair = name: value: { inherit name value; }; + + # From https://github.com/arcnmx/nixexprs + fromYAML = yaml: + let + stripLine = line: elemAt (builtins.match "(^[^#]*)($|#.*$)" line) 0; + usefulLine = line: builtins.match "[ \\t]*" line == null; + parseString = token: + let match = builtins.match ''([^"]+|"([^"]*)" *)'' token; + in if match == null then + throw ''YAML string parse failed: "${token}"'' + else if elemAt match 1 != null then + elemAt match 1 + else + elemAt match 0; + attrLine = line: + let match = builtins.match "([^ :]+): *(.*)" line; + in if match == null then + throw ''YAML parse failed: "${line}"'' + else + nameValuePair (elemAt match 0) (parseString (elemAt match 1)); + lines = splitString "\n" yaml; + lines' = map stripLine lines; + lines'' = filter usefulLine lines'; + in + mapListToAttrs attrLine lines''; + + convertScheme = slug: set: { + name = set.scheme; + inherit (set) author; + inherit slug; + colors = { + inherit (set) + base00 base01 base02 base03 base04 base05 base06 base07 + base08 base09 base0A base0B base0C base0D base0E base0F + base10 base11 base12 base13 base14 base15 base16 base17; + }; + }; + + schemeFromYAML = slug: content: convertScheme slug (fromYAML content); +in +schemeFromYAML -- cgit v1.2.3