├── src ├── plaintext │ ├── carburetor.txt │ ├── carburetor-cool.txt │ └── carburetor-warm.txt ├── base16 │ ├── cool.yaml │ ├── warm.yaml │ └── regular.yaml ├── foot │ ├── carburetor-cool.ini │ ├── carburetor-light.ini │ ├── carburetor-warm.ini │ └── carburetor-regular.ini ├── wezterm │ ├── carburetor.toml │ ├── carburetor-cool.toml │ └── carburetor-warm.toml ├── userstyle.css ├── nvim.lua └── patch.sh ├── nix ├── home │ ├── wezterm.nix │ ├── hyprland.nix │ ├── zed.nix │ ├── foot.nix │ ├── hyprlock.nix │ ├── vesktop.nix │ ├── webcord.nix │ ├── vicinae.nix │ ├── default.nix │ └── gtk.nix ├── pkgs │ ├── foot.nix │ ├── base16.nix │ ├── hyprland.nix │ ├── papirus-folders.nix │ ├── zed.nix │ ├── hyprlock.nix │ ├── gtk.nix │ ├── discord.nix │ └── default.nix ├── docs.nix └── lib.nix ├── flake.lock ├── whiskers.json ├── flake.nix ├── docs └── home.md ├── patch.tera ├── LICENSE └── README.md /src/plaintext/carburetor.txt: -------------------------------------------------------------------------------- 1 | #ffd7d9 2 | #ffb3b8 3 | #ff7eb6 4 | #fa4d56 5 | #ff8389 6 | #ff832b 7 | #fddc69 8 | #42be65 9 | #3ddbd9 10 | #82cfff 11 | #78a9ff 12 | #4589ff 13 | #be95ff 14 | #d4bbff 15 | #f4f4f4 16 | #e0e0e0 17 | #c6c6c6 18 | #a8a8a8 19 | #8d8d8d 20 | #6f6f6f 21 | #525252 22 | #393939 23 | #262626 24 | #161616 25 | #0b0b0b 26 | #000000 27 | -------------------------------------------------------------------------------- /src/plaintext/carburetor-cool.txt: -------------------------------------------------------------------------------- 1 | #ffd7d9 2 | #ffb3b8 3 | #ff7eb6 4 | #d4bbff 5 | #fa4d56 6 | #ff8389 7 | #ff832b 8 | #fddc69 9 | #42be65 10 | #3ddbd9 11 | #82cfff 12 | #78a9ff 13 | #4589ff 14 | #be95ff 15 | #f2f4f8 16 | #dde1E6 17 | #c1c7cd 18 | #a2a9b0 19 | #878d96 20 | #697077 21 | #4d5358 22 | #343a3f 23 | #21272a 24 | #121619 25 | #090b0c 26 | #000000 27 | -------------------------------------------------------------------------------- /src/plaintext/carburetor-warm.txt: -------------------------------------------------------------------------------- 1 | #ffd7d9 2 | #ffb3b8 3 | #ff7eb6 4 | #d4bbff 5 | #fa4d56 6 | #ff8389 7 | #ff832b 8 | #fddc69 9 | #42be65 10 | #3ddbd9 11 | #82cfff 12 | #78a9ff 13 | #4589ff 14 | #be95ff 15 | #f7f3f2 16 | #e5e0df 17 | #cac5c4 18 | #ada8a8 19 | #8f8b8b 20 | #726e6e 21 | #565151 22 | #3c3838 23 | #272525 24 | #171414 25 | #0b0a0a 26 | #000000 27 | -------------------------------------------------------------------------------- /nix/home/wezterm.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { config, lib, ... }: 3 | { 4 | options.${name}.themes.wezterm.enable = lib.mkEnableOption "installing ${name} themes to wezterm"; 5 | config = lib.mkIf config.${name}.themes.wezterm.enable { 6 | xdg.configFile."wezterm/colors" = { 7 | source = ../../src/wezterm; 8 | recursive = true; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /nix/home/hyprland.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { 3 | pkgs, 4 | config, 5 | lib, 6 | ... 7 | }: 8 | { 9 | options.${name}.themes.hyprland.enable = lib.mkEnableOption "installing ${name} for hyprland"; 10 | config = lib.mkIf config.${name}.themes.hyprland.enable { 11 | xdg.configFile."hypr" = { 12 | source = pkgs.${name}.hyprland; 13 | recursive = true; 14 | }; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /nix/pkgs/foot.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { pkgs, fetchFromGitHub, ... }: 3 | pkgs."${name}".tools.mkWhiskersDerivation { 4 | pname = "foot"; 5 | version = "0-unstable-2025-07-20"; 6 | src = fetchFromGitHub { 7 | owner = "catppuccin"; 8 | repo = "foot"; 9 | rev = "8d263e0e6b58a6b9ea507f71e4dbf6870aaf8507"; 10 | hash = "sha256-bpGVDESE6Pr7kaFgfAWJ/5KC9mRPlv2ciYwRr6jcIKs="; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /nix/pkgs/base16.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { pkgs, fetchFromGitHub, ... }: 3 | pkgs."${name}".tools.mkWhiskersDerivation { 4 | pname = "base16"; 5 | version = "0-unstable-2024-04-10"; 6 | src = fetchFromGitHub { 7 | owner = "catppuccin"; 8 | repo = "base16"; 9 | rev = "99aa911b29c9c7972f7e1d868b6242507efd508c"; 10 | hash = "sha256-HHodDRrlcBVWGE3MN0i6UvUn30zY/JFEbgeUpnZG5C0="; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /nix/home/zed.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { 3 | config, 4 | pkgs, 5 | lib, 6 | ... 7 | }: 8 | { 9 | options.${name}.themes.zed.enable = lib.mkEnableOption "installing ${name} themes to zed"; 10 | config = lib.mkIf config.${name}.themes.zed.enable { 11 | xdg.configFile = { 12 | "zed" = { 13 | source = pkgs.${name}.zed; 14 | recursive = true; 15 | }; 16 | }; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /nix/pkgs/hyprland.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { pkgs, fetchFromGitHub, ... }: 3 | pkgs."${name}".tools.mkWhiskersDerivation { 4 | pname = "hyprland"; 5 | version = "1.3-unstable-2024-06-19"; 6 | src = fetchFromGitHub { 7 | owner = "catppuccin"; 8 | repo = "hyprland"; 9 | rev = "c388ac55563ddeea0afe9df79d4bfff0096b146b"; 10 | hash = "sha256-xSa/z0Pu+ioZ0gFH9qSo9P94NPkEMovstm1avJ7rvzM="; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /nix/home/foot.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { 3 | pkgs, 4 | config, 5 | lib, 6 | ... 7 | }: 8 | let 9 | cfg = config.${name}.themes.foot; 10 | options = config.${name}.config; 11 | in 12 | { 13 | options.${name}.themes.foot.enable = lib.mkEnableOption "installing ${name} for hyprland"; 14 | config = lib.mkIf cfg.enable { 15 | programs.foot.settings.main.include = pkgs.${name}.foot + "/themes/${name}-${options.variant}.ini"; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /nix/home/hyprlock.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { 3 | config, 4 | pkgs, 5 | lib, 6 | ... 7 | }: 8 | { 9 | options.${name}.themes.hyprlock.enable = lib.mkEnableOption "installing ${name} for hyprlock"; 10 | config = lib.mkIf config.${name}.themes.hyprlock.enable { 11 | xdg.configFile."hypr/hyprlock.conf".source = 12 | pkgs.${name}.hyprlock.override { inherit (config.${name}.config) variant accent; } 13 | + "/hyprlock.conf"; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /src/base16/cool.yaml: -------------------------------------------------------------------------------- 1 | scheme: "carburetor cool" 2 | author: "https://github.com/ozwaldorf/carburetor" 3 | base00: "171414" # base 4 | base01: "0b0a0a" # mantle 5 | base02: "272525" # surface0 6 | base03: "3c3838" # surface1 7 | base04: "565151" # surface2 8 | base05: "f7f3f2" # text 9 | base06: "fed7d9" # rosewater 10 | base07: "be95ff" # lavender 11 | base08: "fa4d56" # red 12 | base09: "fe832b" # peach 13 | base0A: "fddc69" # yellow 14 | base0B: "42be65" # green 15 | base0C: "3ddbd9" # teal 16 | base0D: "4589ff" # blue 17 | base0E: "d4bbff" # mauve 18 | base0F: "ffb3b8" # flamingo 19 | -------------------------------------------------------------------------------- /src/base16/warm.yaml: -------------------------------------------------------------------------------- 1 | scheme: "carburetor warm" 2 | author: "https://github.com/ozwaldorf/carburetor" 3 | base00: "121619" # base 4 | base01: "090b0c" # mantle 5 | base02: "21272a" # surface0 6 | base03: "343a3f" # surface1 7 | base04: "4d5358" # surface2 8 | base05: "f2f4f8" # text 9 | base06: "fed7d9" # rosewater 10 | base07: "be95ff" # lavender 11 | base08: "fa4d56" # red 12 | base09: "fe832b" # peach 13 | base0A: "fddc69" # yellow 14 | base0B: "42be65" # green 15 | base0C: "3ddbd9" # teal 16 | base0D: "4589ff" # blue 17 | base0E: "d4bbff" # mauve 18 | base0F: "ffb3b8" # flamingo 19 | -------------------------------------------------------------------------------- /src/base16/regular.yaml: -------------------------------------------------------------------------------- 1 | scheme: "carburetor regular" 2 | author: "https://github.com/ozwaldorf/carburetor" 3 | base00: "161616" # base 4 | base01: "0b0b0b" # mantle 5 | base02: "262626" # surface0 6 | base03: "393939" # surface1 7 | base04: "525252" # surface2 8 | base05: "f4f4f4" # text 9 | base06: "fed7d9" # rosewater 10 | base07: "be95ff" # lavender 11 | base08: "fa4d56" # red 12 | base09: "fe832b" # peach 13 | base0A: "fddc69" # yellow 14 | base0B: "42be65" # green 15 | base0C: "3ddbd9" # teal 16 | base0D: "4589ff" # blue 17 | base0E: "d4bbff" # mauve 18 | base0F: "ffb3b8" # flamingo 19 | -------------------------------------------------------------------------------- /nix/home/vesktop.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { 3 | config, 4 | pkgs, 5 | lib, 6 | ... 7 | }: 8 | let 9 | cfg = config.${name}.themes.vesktop; 10 | in 11 | { 12 | options.${name}.themes.vesktop = { 13 | enable = lib.mkEnableOption "installing ${name} themes for vesktop"; 14 | transparency = lib.mkEnableOption "transparency in background colors"; 15 | }; 16 | config = lib.mkIf cfg.enable { 17 | xdg.configFile."vesktop/themes" = { 18 | source = pkgs.${name}.discord.override { inherit (cfg) transparency; }; 19 | recursive = true; 20 | }; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /nix/home/webcord.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { 3 | config, 4 | pkgs, 5 | lib, 6 | ... 7 | }: 8 | let 9 | cfg = config.${name}.themes.webcord; 10 | options = config.${name}.config; 11 | in 12 | { 13 | options.${name}.themes.webcord = { 14 | enable = lib.mkEnableOption "installing ${name} for webcord"; 15 | transparency = lib.mkEnableOption "transparency in background colors"; 16 | }; 17 | config = lib.mkIf cfg.enable { 18 | xdg.configFile."WebCord/Themes/${name}".source = 19 | pkgs.${name}.discord.override { inherit (cfg) transparency; } + "/${name}-${options.variant}.css"; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "nixpkgs": { 4 | "locked": { 5 | "lastModified": 1760965567, 6 | "narHash": "sha256-0JDOal5P7xzzAibvD0yTE3ptyvoVOAL0rcELmDdtSKg=", 7 | "owner": "NixOS", 8 | "repo": "nixpkgs", 9 | "rev": "cb82756ecc37fa623f8cf3e88854f9bf7f64af93", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "owner": "NixOS", 14 | "ref": "nixpkgs-unstable", 15 | "repo": "nixpkgs", 16 | "type": "github" 17 | } 18 | }, 19 | "root": { 20 | "inputs": { 21 | "nixpkgs": "nixpkgs" 22 | } 23 | } 24 | }, 25 | "root": "root", 26 | "version": 7 27 | } 28 | -------------------------------------------------------------------------------- /src/foot/carburetor-cool.ini: -------------------------------------------------------------------------------- 1 | [cursor] 2 | color=000000 fed7d9 3 | 4 | [colors] 5 | foreground=f7f3f2 6 | background=171414 7 | 8 | regular0=3c3838 9 | regular1=fa4d56 10 | regular2=42be65 11 | regular3=fddc69 12 | regular4=4589ff 13 | regular5=ff7eb6 14 | regular6=3ddbd9 15 | regular7=e5e0df 16 | 17 | bright0=565151 18 | bright1=fa4d56 19 | bright2=42be65 20 | bright3=fddc69 21 | bright4=4589ff 22 | bright5=ff7eb6 23 | bright6=3ddbd9 24 | bright7=cac5c4 25 | 26 | 16=fe832b 27 | 17=fed7d9 28 | 29 | selection-foreground=f7f3f2 30 | selection-background=444141 31 | 32 | search-box-no-match=000000 fa4d56 33 | search-box-match=f7f3f2 272525 34 | 35 | jump-labels=000000 fe832b 36 | urls=4589ff 37 | -------------------------------------------------------------------------------- /src/foot/carburetor-light.ini: -------------------------------------------------------------------------------- 1 | [cursor] 2 | color=eff1f5 dc8a78 3 | 4 | [colors] 5 | foreground=4c4f69 6 | background=eff1f5 7 | 8 | regular0=5c5f77 9 | regular1=d20f39 10 | regular2=40a02b 11 | regular3=df8e1d 12 | regular4=1e66f5 13 | regular5=ea76cb 14 | regular6=179299 15 | regular7=acb0be 16 | 17 | bright0=6c6f85 18 | bright1=d20f39 19 | bright2=40a02b 20 | bright3=df8e1d 21 | bright4=1e66f5 22 | bright5=ea76cb 23 | bright6=179299 24 | bright7=bcc0cc 25 | 26 | 16=fe640b 27 | 17=dc8a78 28 | 29 | selection-foreground=4c4f69 30 | selection-background=ccced7 31 | 32 | search-box-no-match=dce0e8 d20f39 33 | search-box-match=4c4f69 ccd0da 34 | 35 | jump-labels=dce0e8 fe640b 36 | urls=1e66f5 37 | -------------------------------------------------------------------------------- /src/foot/carburetor-warm.ini: -------------------------------------------------------------------------------- 1 | [cursor] 2 | color=000000 fed7d9 3 | 4 | [colors] 5 | foreground=f2f4f8 6 | background=121619 7 | 8 | regular0=343a3f 9 | regular1=fa4d56 10 | regular2=42be65 11 | regular3=fddc69 12 | regular4=4589ff 13 | regular5=ff7eb6 14 | regular6=3ddbd9 15 | regular7=dde1e6 16 | 17 | bright0=4d5358 18 | bright1=fa4d56 19 | bright2=42be65 20 | bright3=fddc69 21 | bright4=4589ff 22 | bright5=ff7eb6 23 | bright6=3ddbd9 24 | bright7=c1c7cd 25 | 26 | 16=fe832b 27 | 17=fed7d9 28 | 29 | selection-foreground=f2f4f8 30 | selection-background=3e4246 31 | 32 | search-box-no-match=000000 fa4d56 33 | search-box-match=f2f4f8 21272a 34 | 35 | jump-labels=000000 fe832b 36 | urls=4589ff 37 | -------------------------------------------------------------------------------- /src/foot/carburetor-regular.ini: -------------------------------------------------------------------------------- 1 | [cursor] 2 | color=000000 fed7d9 3 | 4 | [colors] 5 | foreground=f4f4f4 6 | background=161616 7 | 8 | regular0=393939 9 | regular1=fa4d56 10 | regular2=42be65 11 | regular3=fddc69 12 | regular4=4589ff 13 | regular5=ff7eb6 14 | regular6=3ddbd9 15 | regular7=e0e0e0 16 | 17 | bright0=525252 18 | bright1=fa4d56 19 | bright2=42be65 20 | bright3=fddc69 21 | bright4=4589ff 22 | bright5=ff7eb6 23 | bright6=3ddbd9 24 | bright7=c6c6c6 25 | 26 | 16=fe832b 27 | 17=fed7d9 28 | 29 | selection-foreground=f4f4f4 30 | selection-background=424242 31 | 32 | search-box-no-match=000000 fa4d56 33 | search-box-match=f4f4f4 262626 34 | 35 | jump-labels=000000 fe832b 36 | urls=4589ff 37 | -------------------------------------------------------------------------------- /nix/pkgs/papirus-folders.nix: -------------------------------------------------------------------------------- 1 | { 2 | name, 3 | variantNames, 4 | defaultAccent, 5 | ... 6 | }: 7 | { 8 | pkgs, 9 | lib, 10 | stdenvNoCC, 11 | catppuccin-papirus-folders, 12 | variant ? variantNames.mocha, 13 | accent ? defaultAccent, 14 | ... 15 | }: 16 | let 17 | inherit (pkgs."${name}") tools; 18 | flavor = tools.toFlavor variant; 19 | in 20 | stdenvNoCC.mkDerivation { 21 | name = "${name}-papirus-folders"; 22 | version = catppuccin-papirus-folders.version; 23 | src = (catppuccin-papirus-folders.override { inherit flavor accent; }).out; 24 | nativeBuildInputs = [ tools.patch ]; 25 | patchPhase = '' 26 | ${name}-patch ${flavor} false share/icons 27 | ''; 28 | installPhase = '' 29 | mkdir -p $out/share 30 | cp -R share/icons $out/share 31 | ''; 32 | } 33 | -------------------------------------------------------------------------------- /nix/pkgs/zed.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { pkgs, fetchFromGitHub, ... }: 3 | pkgs."${name}".tools.mkWhiskersDerivation { 4 | pname = "zed"; 5 | version = "0.2.11-unstable-2024-09-09"; 6 | src = fetchFromGitHub { 7 | owner = "catppuccin"; 8 | repo = "zed"; 9 | rev = "ba6aa143158585ca92294cf994ac8cfbe74b56c7"; 10 | hash = "sha256-T+f/sM5BYz+hLc3RVVhn38C+Sfr0XHtsRWzTd5JPVTI="; 11 | }; 12 | patches = [ 13 | (pkgs.writeText "current_line.patch" '' 14 | --- a/zed.tera 15 | +++ b/zed.tera 16 | @@ -79,3 +79,3 @@ whiskers: 17 | "editor.subheader.background": "#{{c.mantle.hex}}", 18 | - "editor.active_line.background": "#{{ c.text | mod(opacity=0.05) | get(key="hex") }}", 19 | + "editor.active_line.background": "#{{ c.text | mod(opacity=0.02) | get(key="hex") }}", 20 | "editor.highlighted_line.background": null, 21 | '') 22 | ]; 23 | } 24 | -------------------------------------------------------------------------------- /nix/home/vicinae.nix: -------------------------------------------------------------------------------- 1 | { name, ... }: 2 | { 3 | pkgs, 4 | config, 5 | lib, 6 | ... 7 | }: 8 | let 9 | cfg = config.${name}.themes.foot; 10 | options = config.${name}.config; 11 | in 12 | { 13 | options.${name}.themes.vicinae.enable = lib.mkEnableOption "installing ${name} for vicinae"; 14 | config = lib.mkIf cfg.enable { 15 | services.vicinae.themes.carburetor = { 16 | version = "1.0"; 17 | appearance = "dark"; 18 | # icon = /path/to/icon.png; 19 | name = "carburetor"; 20 | description = "High contrast theme based on IBM Carbon"; 21 | palette = { 22 | background = "#161616"; 23 | foreground = "#f4f4f4"; 24 | blue = "#4589ff"; 25 | green = "#42be65"; 26 | magenta = "#ff7eb6"; 27 | orange = "#ff832b"; 28 | purple = "#be95ff"; 29 | red = "#fa4d56"; 30 | yellow = "#fddc69"; 31 | cyan = "#3ddbd9"; 32 | }; 33 | }; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /src/wezterm/carburetor.toml: -------------------------------------------------------------------------------- 1 | [colors] 2 | background = '#161616' 3 | foreground = '#f4f4f4' 4 | cursor_bg = '#f4f4f4' 5 | cursor_border = '#f4f4f4' 6 | cursor_fg = '#161616' 7 | 8 | ansi = [ 9 | '#262626', 10 | '#fa4d56', 11 | '#42be65', 12 | '#ff832b', 13 | '#4589ff', 14 | '#ff7eb6', 15 | '#3ddbd9', 16 | '#c6c6c6', 17 | ] 18 | brights = [ 19 | '#393939', 20 | '#ff8389', 21 | '#42be65', 22 | '#fddc69', 23 | '#78a9ff', 24 | '#ffb3b8', 25 | '#82cfff', 26 | '#e0e0e0', 27 | ] 28 | 29 | [colors.tab_bar] 30 | background = "#0b0b0b" 31 | 32 | [colors.tab_bar.active_tab] 33 | bg_color = '#4589ff' 34 | fg_color = '#f4f4f4' 35 | intensity = 'Normal' 36 | italic = false 37 | strikethrough = false 38 | underline = 'None' 39 | 40 | [colors.tab_bar.inactive_tab] 41 | bg_color = "#0b0b0b" 42 | fg_color = '#f4f4f4' 43 | intensity = 'Normal' 44 | italic = false 45 | strikethrough = false 46 | underline = 'None' 47 | 48 | [colors.tab_bar.new_tab] 49 | bg_color = '#0b0b0b' 50 | fg_color = '#f4f4f4' 51 | intensity = 'Normal' 52 | italic = false 53 | strikethrough = false 54 | underline = 'None' 55 | 56 | [metadata] 57 | name = 'Carburetor' 58 | -------------------------------------------------------------------------------- /src/wezterm/carburetor-cool.toml: -------------------------------------------------------------------------------- 1 | [colors] 2 | background = '#121619' 3 | foreground = '#f2f4f8' 4 | cursor_bg = '#f2f4f8' 5 | cursor_border = '#f2f4f8' 6 | cursor_fg = '#121619' 7 | 8 | ansi = [ 9 | '#21272a', 10 | '#fa4d56', 11 | '#42be65', 12 | '#ff832b', 13 | '#4589ff', 14 | '#ff7eb6', 15 | '#3ddbd9', 16 | '#c1c7cd', 17 | ] 18 | brights = [ 19 | '#343a3f', 20 | '#ff8389', 21 | '#42be65', 22 | '#fddc69', 23 | '#78a9ff', 24 | '#ffb3b8', 25 | '#82cfff', 26 | '#dde1E6', 27 | ] 28 | 29 | [colors.tab_bar] 30 | background = "#090b0c" 31 | 32 | [colors.tab_bar.active_tab] 33 | bg_color = '#4589ff' 34 | fg_color = '#f2f4f8' 35 | intensity = 'Normal' 36 | italic = false 37 | strikethrough = false 38 | underline = 'None' 39 | 40 | [colors.tab_bar.inactive_tab] 41 | bg_color = "#090b0c" 42 | fg_color = '#f2f4f8' 43 | intensity = 'Normal' 44 | italic = false 45 | strikethrough = false 46 | underline = 'None' 47 | 48 | [colors.tab_bar.new_tab] 49 | bg_color = '#090b0c' 50 | fg_color = '#f2f4f8' 51 | intensity = 'Normal' 52 | italic = false 53 | strikethrough = false 54 | underline = 'None' 55 | 56 | [metadata] 57 | name = 'Carburetor Cool' 58 | -------------------------------------------------------------------------------- /src/wezterm/carburetor-warm.toml: -------------------------------------------------------------------------------- 1 | [colors] 2 | background = '#171414' 3 | foreground = '#f7f3f2' 4 | cursor_bg = '#f7f3f2' 5 | cursor_border = '#f7f3f2' 6 | cursor_fg = '#171414' 7 | 8 | ansi = [ 9 | '#272525', 10 | '#fa4d56', 11 | '#42be65', 12 | '#ff832b', 13 | '#4589ff', 14 | '#ff7eb6', 15 | '#3ddbd9', 16 | '#cac5c4', 17 | ] 18 | brights = [ 19 | '#3c3838', 20 | '#ff8389', 21 | '#42be65', 22 | '#fddc69', 23 | '#78a9ff', 24 | '#ffb3b8', 25 | '#82cfff', 26 | '#e5e0df', 27 | ] 28 | 29 | [colors.tab_bar] 30 | background = "#0b0a0a" 31 | 32 | [colors.tab_bar.active_tab] 33 | bg_color = '#4589ff' 34 | fg_color = '#f7f3f2' 35 | intensity = 'Normal' 36 | italic = false 37 | strikethrough = false 38 | underline = 'None' 39 | 40 | [colors.tab_bar.inactive_tab] 41 | bg_color = "#0b0a0a" 42 | fg_color = '#f7f3f2' 43 | intensity = 'Normal' 44 | italic = false 45 | strikethrough = false 46 | underline = 'None' 47 | 48 | [colors.tab_bar.new_tab] 49 | bg_color = '#0b0a0a' 50 | fg_color = '#f7f3f2' 51 | intensity = 'Normal' 52 | italic = false 53 | strikethrough = false 54 | underline = 'None' 55 | 56 | [metadata] 57 | name = 'Carburetor Warm' 58 | -------------------------------------------------------------------------------- /nix/home/default.nix: -------------------------------------------------------------------------------- 1 | args@{ 2 | name, 3 | variantNames, 4 | defaultAccent, 5 | ... 6 | }: 7 | { lib, ... }: 8 | { 9 | imports = [ 10 | (import ./foot.nix args) 11 | (import ./gtk.nix args) 12 | (import ./hyprland.nix args) 13 | (import ./hyprlock.nix args) 14 | (import ./webcord.nix args) 15 | (import ./wezterm.nix args) 16 | (import ./vesktop.nix args) 17 | (import ./zed.nix args) 18 | (import ./vicinae.nix args) 19 | ]; 20 | 21 | options.${name}.config = { 22 | variant = lib.mkOption { 23 | description = "Theme variant to use"; 24 | type = lib.types.enum (builtins.attrValues variantNames); 25 | default = variantNames.mocha; 26 | }; 27 | accent = lib.mkOption { 28 | description = "Theme accent color to use"; 29 | type = lib.types.enum [ 30 | "rosewater" 31 | "flamingo" 32 | "pink" 33 | "mauve" 34 | "red" 35 | "maroon" 36 | "peach" 37 | "yellow" 38 | "green" 39 | "teal" 40 | "sky" 41 | "sapphire" 42 | "blue" 43 | "lavender" 44 | ]; 45 | default = defaultAccent; 46 | }; 47 | }; 48 | } 49 | -------------------------------------------------------------------------------- /nix/pkgs/hyprlock.nix: -------------------------------------------------------------------------------- 1 | { 2 | name, 3 | variantNames, 4 | defaultAccent, 5 | ... 6 | }: 7 | { 8 | pkgs, 9 | lib, 10 | stdenvNoCC, 11 | fetchFromGitHub, 12 | fetchurl, 13 | variant ? variantNames.mocha, 14 | accent ? defaultAccent, 15 | avatarPng ? fetchurl { 16 | url = "https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/logos/exports/1544x1544_circle.png"; 17 | hash = "sha256-A85wBdJ2StkgODmxtNGfbNq8PU3G3kqnBAwWvQXVtqo="; 18 | }, 19 | backgroundPng ? "", 20 | ... 21 | }: 22 | let 23 | src = fetchFromGitHub { 24 | owner = "catppuccin"; 25 | repo = "hyprlock"; 26 | rev = "958e70b1cd8799defd16dee070d07f977d4fd76b"; 27 | hash = "sha256-l4CbAUeb/Tg603QnZ/VWxuGqRBztpHN0HLX/h8ndc5w="; 28 | }; 29 | in 30 | stdenvNoCC.mkDerivation { 31 | inherit src; 32 | name = "${name}-hyprlock"; 33 | version = "0-unstable-2024-08-06"; 34 | patchPhase = '' 35 | sed -i \ 36 | -e 's:mocha:${variant}:Ig' \ 37 | -e 's:~/.face:${avatarPng}:Ig' \ 38 | -e 's:~/.config/background:${backgroundPng}:Ig' \ 39 | hyprlock.conf 40 | ''; 41 | installPhase = '' 42 | mkdir -p $out 43 | cp hyprlock.conf $out 44 | ''; 45 | } 46 | -------------------------------------------------------------------------------- /nix/docs.nix: -------------------------------------------------------------------------------- 1 | rootModule: pkgs: 2 | let 3 | gitHubDeclaration = user: repo: branch: subpath: { 4 | url = "https://github.com/${user}/${repo}/blob/${branch}/${subpath}"; 5 | name = "<${repo}/${subpath}>"; 6 | }; 7 | prefixPath = toString ./..; 8 | transformOptions = 9 | opt: 10 | opt 11 | // { 12 | declarations = map ( 13 | decl: 14 | if pkgs.lib.hasPrefix prefixPath (toString decl) then 15 | gitHubDeclaration "ozwaldorf" "carburetor" "main" ( 16 | pkgs.lib.removePrefix "/" (pkgs.lib.removePrefix prefixPath (toString decl)) 17 | ) 18 | else if decl == "lib/modules.nix" then 19 | gitHubDeclaration "NixOS" "nixpkgs" "master" decl 20 | else 21 | decl 22 | ) opt.declarations; 23 | }; 24 | 25 | eval = pkgs.lib.evalModules { 26 | modules = [ 27 | rootModule 28 | { _module.check = false; } 29 | ]; 30 | }; 31 | optionsDoc = pkgs.nixosOptionsDoc { 32 | inherit transformOptions; 33 | options = builtins.removeAttrs eval.options [ "_module" ]; 34 | }; 35 | in 36 | pkgs.runCommand "docs" { } '' 37 | mkdir $out 38 | ln -s ${optionsDoc.optionsCommonMark} $out/home.md 39 | '' 40 | -------------------------------------------------------------------------------- /nix/pkgs/gtk.nix: -------------------------------------------------------------------------------- 1 | { 2 | name, 3 | variantNames, 4 | defaultAccent, 5 | ... 6 | }: 7 | { 8 | pkgs, 9 | stdenvNoCC, 10 | catppuccin-gtk, 11 | variant ? variantNames.mocha, 12 | accents ? [ defaultAccent ], 13 | transparency ? false, 14 | ... 15 | }@extraArgs: 16 | let 17 | inherit (pkgs."${name}") tools; 18 | flavor = tools.toFlavor variant; 19 | in 20 | stdenvNoCC.mkDerivation { 21 | name = "${name}-gtk"; 22 | version = catppuccin-gtk.version; 23 | src = 24 | ( 25 | catppuccin-gtk.override { 26 | inherit accents; 27 | variant = flavor; 28 | } 29 | // extraArgs 30 | ).out; 31 | nativeBuildInputs = [ tools.patch ]; 32 | patchPhase = '' 33 | ${name}-patch ${flavor} ${pkgs.lib.trivial.boolToString transparency} share/themes 34 | ls share/themes | while read output; do 35 | RENAME=''${output/catppuccin/${name}} 36 | RENAME=''${RENAME/mocha/${variantNames.mocha}} 37 | RENAME=''${RENAME/macchiato/${variantNames.macchiato}} 38 | RENAME=''${RENAME/frappe/${variantNames.frappe}} 39 | RENAME=''${RENAME/latte/${variantNames.latte}} 40 | if [ "$output" != "$RENAME" ]; then 41 | mv -v share/themes/$output share/themes/$RENAME 42 | fi 43 | done 44 | ''; 45 | installPhase = '' 46 | mkdir -p $out 47 | cp -R share $out 48 | ''; 49 | } 50 | -------------------------------------------------------------------------------- /nix/lib.nix: -------------------------------------------------------------------------------- 1 | { 2 | # Create a custom overlay for a theme. 3 | # 4 | # ```nix 5 | # pkgs = import nixpkgs { 6 | # inherit system; 7 | # overlays = [ 8 | # (inputs.carburetor.lib.mkCustomThemeOverlay { 9 | # name = "foo-theme"; 10 | # variantNames = { 11 | # mocha = "darker"; 12 | # macchiato = "dark"; 13 | # frappe = "medium"; 14 | # latte = "light"; 15 | # }; 16 | # defaultAccent = "mauve"; 17 | # whiskersJson = ./path/to/whiskers.json; 18 | # }) 19 | # ]; 20 | # } 21 | # ``` 22 | mkCustomThemeOverlay = args: import ./pkgs args; 23 | 24 | # Create a custom home manager module to install themes with. 25 | # Must be paired with `mkCustomThemeOverlay`, using identical input, 26 | # for the packages to be accessable. 27 | # 28 | # ```nix 29 | # imports = [ 30 | # (inputs.carburetor.lib.mkCustomHomeManagerModule { 31 | # name = "foo-theme"; 32 | # variantNames = { 33 | # mocha = "darker"; 34 | # macchiato = "dark"; 35 | # frappe = "medium"; 36 | # latte = "light"; 37 | # }; 38 | # defaultAccent = "mauve"; 39 | # whiskersJson = ./path/to/whiskers.json; 40 | # }) 41 | # ]; 42 | # 43 | # foo-theme = { 44 | # config.variant = "darker" 45 | # themes = { 46 | # wezterm.enable = true; 47 | # zed.enable = true; 48 | # }; 49 | # }; 50 | # ``` 51 | mkCustomHomeManagerModule = args: import ./home/default.nix args; 52 | 53 | mkDocs = homeModule: pkgs: import ./docs.nix homeModule pkgs; 54 | } 55 | -------------------------------------------------------------------------------- /nix/pkgs/discord.nix: -------------------------------------------------------------------------------- 1 | { name, variantNames, ... }: 2 | { 3 | pkgs, 4 | stdenvNoCC, 5 | fetchFromGitHub, 6 | mkYarnPackage, 7 | yarn, 8 | 9 | transparency ? false, 10 | ... 11 | }: 12 | let 13 | src = fetchFromGitHub { 14 | owner = "catppuccin"; 15 | repo = "discord"; 16 | rev = "70acffa079429bc4a0290d6699b66471c3ec4fd3"; 17 | hash = "sha256-oyVZxdr4UacRMOCDdjSl2B/X5ySYTOD5iCOq0MLSxD4="; 18 | }; 19 | deps = mkYarnPackage { 20 | inherit src; 21 | name = "${name}-discord-modules"; 22 | nativeBuildInputs = [ pkgs."${name}".tools.patch ]; 23 | postBuild = '' 24 | ${name}-patch all ${pkgs.lib.trivial.boolToString transparency} node_modules/@catppuccin/palette 25 | ''; 26 | }; 27 | in 28 | stdenvNoCC.mkDerivation { 29 | inherit src; 30 | name = "${name}-discord"; 31 | version = "0-unstable-2024-10-02"; 32 | nativeBuildInputs = [ yarn ]; 33 | buildPhase = '' 34 | mkdir node_modules 35 | find ${deps}/libexec/catppuccin-discord/{,deps/catppuccin-discord/}node_modules -mindepth 1 -maxdepth 1 -exec ln -vs "{}" node_modules/ ';' 36 | yarn build 37 | 38 | # Replace name and variant texts 39 | find . -type f -exec sed -i \ 40 | -e 's:catppuccin/discord:ozwaldorf/carburetor:g' \ 41 | -e 's:soothing pastel theme:Carburetor theme:gI' \ 42 | -e 's/catppuccin/${name}/gI' \ 43 | -e 's/mocha/${variantNames.mocha}/gI' \ 44 | -e 's/macchiato/${variantNames.macchiato}/gI' \ 45 | -e 's/é/e/g' \ 46 | -e 's/frappe/${variantNames.frappe}/gI' \ 47 | -e 's/latte/${variantNames.latte}/gI' \ 48 | {} \; 49 | 50 | ''; 51 | installPhase = '' 52 | mkdir $out 53 | cp dist/dist/catppuccin-mocha.theme.css $out/${name}-${variantNames.mocha}.css 54 | cp dist/dist/catppuccin-macchiato.theme.css $out/${name}-${variantNames.macchiato}.css 55 | cp dist/dist/catppuccin-frappe.theme.css $out/${name}-${variantNames.frappe}.css 56 | cp dist/dist/catppuccin-latte.theme.css $out/${name}-${variantNames.latte}.css 57 | ''; 58 | } 59 | -------------------------------------------------------------------------------- /src/userstyle.css: -------------------------------------------------------------------------------- 1 | /* Replace the color definition in any catppuccin userstyle port */ 2 | 3 | /* Carburetor Warm */ 4 | @frappe: { 5 | @rosewater: #ffd7d9; 6 | @flamingo: #ffb3b8; 7 | @pink: #ff7eb6; 8 | @mauve: #d4bbff; 9 | @red: #fa4d56; 10 | @maroon: #ff8389; 11 | @peach: #ff832b; 12 | @yellow: #fddc69; 13 | @green: #42be65; 14 | @teal: #3ddbd9; 15 | @sky: #82cfff; 16 | @sapphire: #78a9ff; 17 | @blue: #4589ff; 18 | @lavender: #be95ff; 19 | @text: #f7f3f2; 20 | @subtext1: #e5e0df; 21 | @subtext0: #cac5c4; 22 | @overlay2: #ada8a8; 23 | @overlay1: #8f8b8b; 24 | @overlay0: #726e6e; 25 | @surface2: #565151; 26 | @surface1: #3c3838; 27 | @surface0: #272525; 28 | @base: #171414; 29 | @mantle: #0b0a0a; 30 | @crust: #000000; 31 | } 32 | 33 | /* Carburetor Cool */ 34 | @macchiato: { 35 | @rosewater: #ffd7d9; 36 | @flamingo: #ffb3b8; 37 | @pink: #ff7eb6; 38 | @mauve: #d4bbff; 39 | @red: #fa4d56; 40 | @maroon: #ff8389; 41 | @peach: #ff832b; 42 | @yellow: #fddc69; 43 | @green: #42be65; 44 | @teal: #3ddbd9; 45 | @sky: #82cfff; 46 | @sapphire: #78a9ff; 47 | @blue: #4589ff; 48 | @lavender: #be95ff; 49 | @text: #f2f4f8; 50 | @subtext1: #dde1E6; 51 | @subtext0: #c1c7cd; 52 | @overlay2: #a2a9b0; 53 | @overlay1: #878d96; 54 | @overlay0: #697077; 55 | @surface2: #4d5358; 56 | @surface1: #343a3f; 57 | @surface0: #21272a; 58 | @base: #121619; 59 | @mantle: #090b0c; 60 | @crust: #000000; 61 | } 62 | 63 | /* Carburetor */ 64 | @mocha: { 65 | @rosewater: #ffd7d9; 66 | @flamingo: #ffb3b8; 67 | @pink: #ff7eb6; 68 | @mauve: #d4bbff; 69 | @red: #fa4d56; 70 | @maroon: #ff8389; 71 | @peach: #ff832b; 72 | @yellow: #fddc69; 73 | @green: #42be65; 74 | @teal: #3ddbd9; 75 | @sky: #82cfff; 76 | @sapphire: #78a9ff; 77 | @blue: #4589ff; 78 | @lavender: #be95ff; 79 | @text: #f4f4f4; 80 | @subtext1: #e0e0e0; 81 | @subtext0: #c6c6c6; 82 | @overlay2: #a8a8a8; 83 | @overlay1: #8d8d8d; 84 | @overlay0: #6f6f6f; 85 | @surface2: #525252; 86 | @surface1: #393939; 87 | @surface0: #262626; 88 | @base: #161616; 89 | @mantle: #0b0b0b; 90 | @crust: #000000; 91 | } 92 | -------------------------------------------------------------------------------- /whiskers.json: -------------------------------------------------------------------------------- 1 | { 2 | "mocha": { 3 | "rosewater": "fed7d9", 4 | "flamingo": "ffb3b8", 5 | "pink": "ff7eb6", 6 | "mauve": "d4bbff", 7 | "red": "fa4d56", 8 | "maroon": "ff8389", 9 | "peach": "fe832b", 10 | "yellow": "fddc69", 11 | "green": "42be65", 12 | "teal": "3ddbd9", 13 | "sky": "82cffe", 14 | "sapphire": "78a9ff", 15 | "blue": "4589ff", 16 | "lavender": "be95ff", 17 | "text": "f4f4f4", 18 | "subtext1": "e0e0e0", 19 | "subtext0": "c6c6c6", 20 | "overlay2": "a8a8a8", 21 | "overlay1": "8d8d8d", 22 | "overlay0": "6f6f6f", 23 | "surface2": "525252", 24 | "surface1": "393939", 25 | "surface0": "262626", 26 | "base": "161616", 27 | "mantle": "0b0b0b", 28 | "crust": "000000" 29 | }, 30 | "macchiato": { 31 | "rosewater": "fed7d9", 32 | "flamingo": "ffb3b8", 33 | "pink": "ff7eb6", 34 | "red": "fa4d56", 35 | "maroon": "ff8389", 36 | "peach": "fe832b", 37 | "yellow": "fddc69", 38 | "green": "42be65", 39 | "teal": "3ddbd9", 40 | "sky": "82cffe", 41 | "sapphire": "78a9ff", 42 | "blue": "4589ff", 43 | "lavender": "be95ff", 44 | "mauve": "d4bbff", 45 | "text": "f2f4f8", 46 | "subtext1": "dde1E6", 47 | "subtext0": "c1c7cd", 48 | "overlay2": "a2a9b0", 49 | "overlay1": "878d96", 50 | "overlay0": "697077", 51 | "surface2": "4d5358", 52 | "surface1": "343a3f", 53 | "surface0": "21272a", 54 | "base": "121619", 55 | "mantle": "090b0c", 56 | "crust": "000000" 57 | }, 58 | "frappe": { 59 | "rosewater": "fed7d9", 60 | "flamingo": "ffb3b8", 61 | "pink": "ff7eb6", 62 | "mauve": "d4bbff", 63 | "red": "fa4d56", 64 | "maroon": "ff8389", 65 | "peach": "fe832b", 66 | "yellow": "fddc69", 67 | "green": "42be65", 68 | "teal": "3ddbd9", 69 | "sky": "82cffe", 70 | "sapphire": "78a9ff", 71 | "blue": "4589ff", 72 | "lavender": "be95ff", 73 | "text": "f7f3f2", 74 | "subtext1": "e5e0df", 75 | "subtext0": "cac5c4", 76 | "overlay2": "ada8a8", 77 | "overlay1": "8f8b8b", 78 | "overlay0": "726e6e", 79 | "surface2": "565151", 80 | "surface1": "3c3838", 81 | "surface0": "272525", 82 | "base": "171414", 83 | "mantle": "0b0a0a", 84 | "crust": "000000" 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /nix/home/gtk.nix: -------------------------------------------------------------------------------- 1 | { 2 | name, 3 | variantNames, 4 | defaultAccent, 5 | ... 6 | }: 7 | { 8 | config, 9 | pkgs, 10 | lib, 11 | ... 12 | }: 13 | { 14 | options.${name}.themes.gtk = { 15 | enable = lib.mkEnableOption "installing and configuring gtk themes"; 16 | transparency = lib.mkEnableOption "transparency in background colors"; 17 | icon = lib.mkEnableOption "installing patched papirus icons"; 18 | gnomeShellTheme = lib.mkEnableOption "installing gtk theme for GNOME Shell"; 19 | size = lib.mkOption { 20 | description = "Size variant for gtk"; 21 | type = lib.types.enum [ 22 | "standard" 23 | "compact" 24 | ]; 25 | default = "standard"; 26 | }; 27 | tweaks = lib.mkOption { 28 | description = "Tweaks for gtk"; 29 | type = lib.types.listOf ( 30 | lib.types.enum [ 31 | "black" 32 | "rimless" 33 | "float" 34 | ] 35 | ); 36 | default = [ ]; 37 | }; 38 | }; 39 | 40 | config = 41 | let 42 | cfg = config.${name}.themes.gtk; 43 | options = config.${name}.config; 44 | gtkName = "${name}-${options.variant}-${options.accent}-${cfg.size}${ 45 | if cfg.tweaks != [ ] then "+" + lib.concatStringsSep "," cfg.tweaks else "" 46 | }"; 47 | in 48 | lib.mkMerge [ 49 | # Configure gtk theme 50 | (lib.mkIf cfg.enable { 51 | gtk.theme = { 52 | name = gtkName; 53 | package = pkgs.${name}.gtk.override { 54 | inherit (cfg) size tweaks transparency; 55 | inherit (options) variant; 56 | accents = [ options.accent ]; 57 | }; 58 | }; 59 | }) 60 | 61 | # Configure icon theme 62 | (lib.mkIf cfg.icon { 63 | gtk.iconTheme = 64 | let 65 | # use the light icon theme for latte variants 66 | polarity = if options.variant == variantNames.latte then "Light" else "Dark"; 67 | in 68 | { 69 | name = "Papirus-${polarity}"; 70 | package = pkgs.${name}.papirus-folders.override { inherit (options) accent variant; }; 71 | }; 72 | }) 73 | 74 | # Configure gnome shell theme 75 | (lib.mkIf cfg.gnomeShellTheme { 76 | home.packages = [ pkgs.gnomeExtensions.user-themes ]; 77 | 78 | dconf.settings = { 79 | "org/gnome/shell" = { 80 | disable-user-extensions = false; 81 | enabled-extensions = [ "user-theme@gnome-shell-extensions.gcampax.github.com" ]; 82 | }; 83 | "org/gnome/shell/extensions/user-theme" = { 84 | inherit (config.gtk.theme) name; 85 | }; 86 | "org/gnome/desktop/interface" = { 87 | color-scheme = if options.variant == variantNames.latte then "default" else "prefer-dark"; 88 | }; 89 | }; 90 | }) 91 | ]; 92 | } 93 | -------------------------------------------------------------------------------- /src/nvim.lua: -------------------------------------------------------------------------------- 1 | -- Packer.nvim example config 2 | 3 | use({ 4 | "catppuccin/nvim", 5 | as = "catppuccin", 6 | config = function() 7 | require("catppuccin").setup({ 8 | color_overrides = { 9 | -- Carburetor 10 | mocha = { 11 | rosewater = "#ffd7d9", 12 | flamingo = "#ffb3b8", 13 | pink = "#ff7eb6", 14 | mauve = "#d4bbff", 15 | red = "#fa4d56", 16 | maroon = "#ff8389", 17 | peach = "#ff832b", 18 | yellow = "#fddc69", 19 | green = "#42be65", 20 | teal = "#3ddbd9", 21 | sky = "#82cfff", 22 | sapphire = "#78a9ff", 23 | blue = "#4589ff", 24 | lavender = "#be95ff", 25 | text = "#f4f4f4", 26 | subtext1 = "#e0e0e0", 27 | subtext0 = "#c6c6c6", 28 | overlay2 = "#a8a8a8", 29 | overlay1 = "#8d8d8d", 30 | overlay0 = "#6f6f6f", 31 | surface2 = "#525252", 32 | surface1 = "#393939", 33 | surface0 = "#262626", 34 | base = "#161616", 35 | mantle = "#0b0b0b", 36 | crust = "#000000" 37 | }, 38 | -- Carburetor Cool 39 | macchiato = { 40 | rosewater = "#ffd7d9", 41 | flamingo = "#ffb3b8", 42 | pink = "#ff7eb6", 43 | red = "#fa4d56", 44 | maroon = "#ff8389", 45 | peach = "#ff832b", 46 | yellow = "#fddc69", 47 | green = "#42be65", 48 | teal = "#3ddbd9", 49 | sky = "#82cfff", 50 | sapphire = "#78a9ff", 51 | blue = "#4589ff", 52 | lavender = "#be95ff", 53 | mauve = "#d4bbff", 54 | text = "#f2f4f8", 55 | subtext1 = "#dde1E6", 56 | subtext0 = "#c1c7cd", 57 | overlay2 = "#a2a9b0", 58 | overlay1 = "#878d96", 59 | overlay0 = "#697077", 60 | surface2 = "#4d5358", 61 | surface1 = "#343a3f", 62 | surface0 = "#21272a", 63 | base = "#121619", 64 | mantle = "#090b0c", 65 | crust = "#000000" 66 | }, 67 | -- Carburetor Warm 68 | frappe = { 69 | rosewater = "#ffd7d9", 70 | flamingo = "#ffb3b8", 71 | pink = "#ff7eb6", 72 | mauve = "#d4bbff", 73 | red = "#fa4d56", 74 | maroon = "#ff8389", 75 | peach = "#ff832b", 76 | yellow = "#fddc69", 77 | green = "#42be65", 78 | teal = "#3ddbd9", 79 | sky = "#82cfff", 80 | sapphire = "#78a9ff", 81 | blue = "#4589ff", 82 | lavender = "#be95ff", 83 | text = "#f7f3f2", 84 | subtext1 = "#e5e0df", 85 | subtext0 = "#cac5c4", 86 | overlay2 = "#ada8a8", 87 | overlay1 = "#8f8b8b", 88 | overlay0 = "#726e6e", 89 | surface2 = "#565151", 90 | surface1 = "#3c3838", 91 | surface0 = "#272525", 92 | base = "#171414", 93 | mantle = "#0b0a0a", 94 | crust = "#000000" 95 | } 96 | } 97 | }) 98 | end 99 | }) 100 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "Carburetor's theme and customized tooling flake"; 3 | inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; 4 | nixConfig = { 5 | extra-substituters = [ "https://cache.garnix.io" ]; 6 | extra-trusted-public-keys = [ "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" ]; 7 | }; 8 | outputs = 9 | { self, nixpkgs }: 10 | let 11 | themeLib = import ./nix/lib.nix; 12 | carburetorTheme = { 13 | name = "carburetor"; 14 | whiskersJson = ./whiskers.json; 15 | variantNames = { 16 | mocha = "regular"; 17 | macchiato = "warm"; 18 | frappe = "cool"; 19 | latte = "light"; 20 | }; 21 | defaultAccent = "blue"; 22 | }; 23 | carburetorOverlay = themeLib.mkCustomThemeOverlay carburetorTheme; 24 | carburetorHomeModule = themeLib.mkCustomHomeManagerModule carburetorTheme; 25 | 26 | inherit (nixpkgs) lib; 27 | forSystem = 28 | system: 29 | import nixpkgs { 30 | inherit system; 31 | overlays = [ carburetorOverlay ]; 32 | }; 33 | forAllSystems = fun: lib.genAttrs lib.systems.flakeExposed (system: fun (forSystem system)); 34 | in 35 | { 36 | # Nix library for custom catppuccin themes 37 | lib = themeLib; 38 | # Carburetor theme overlay 39 | overlays = rec { 40 | default = carburetorOverlay; 41 | # If experiencing nixpkgs errors, reuse the locked nixpkgs and just insert the package set 42 | insert = 43 | final: prev: 44 | (lib.attrsets.getAttrs (builtins.attrNames (default null null)) (forSystem final.system)); 45 | }; 46 | # Carburetor home manager module 47 | homeManagerModules.default = carburetorHomeModule; 48 | 49 | packages = forAllSystems ( 50 | pkgs: 51 | # Export all raw theme packages 52 | lib.removeAttrs pkgs.carburetor [ "tools" ] 53 | // { 54 | # Patch tool 55 | inherit (pkgs.carburetor.tools) patch; 56 | # Home module documentation 57 | docs = themeLib.mkDocs carburetorHomeModule pkgs; 58 | } 59 | ); 60 | 61 | # Standalone home manager usage example 62 | homeConfigurations.example = 63 | (builtins.getFlake "github:nix-community/home-manager/e1391fb22e18a36f57e6999c7a9f966dc80ac073") 64 | .lib.homeManagerConfiguration 65 | { 66 | pkgs = import nixpkgs { 67 | system = "x86_64-linux"; 68 | overlays = [ self.overlays.default ]; 69 | }; 70 | modules = [ 71 | self.homeManagerModules.default 72 | { 73 | home = { 74 | username = "example"; 75 | homeDirectory = "/home/example"; 76 | stateVersion = "24.05"; 77 | }; 78 | 79 | carburetor = { 80 | config = { 81 | variant = "regular"; 82 | accent = "blue"; 83 | }; 84 | themes = { 85 | foot.enable = true; 86 | gtk = { 87 | enable = true; 88 | transparency = true; 89 | icon = true; 90 | # size = "compact"; 91 | # tweaks = "float"; 92 | # gnomeShellTheme = true; 93 | }; 94 | hyprland.enable = true; 95 | hyprlock.enable = true; 96 | webcord = { 97 | enable = true; 98 | transparency = true; 99 | }; 100 | wezterm.enable = true; 101 | zed.enable = true; 102 | }; 103 | }; 104 | } 105 | ]; 106 | }; 107 | 108 | # `nix develop` 109 | devShells = forAllSystems (pkgs: { 110 | default = pkgs.mkShell { 111 | packages = with pkgs; [ 112 | carburetor.tools.patch 113 | nix-update 114 | ]; 115 | }; 116 | }); 117 | 118 | # `nix fmt` 119 | formatter = forAllSystems (pkgs: pkgs.nixfmt-rfc-style); 120 | }; 121 | } 122 | -------------------------------------------------------------------------------- /src/patch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | flavor=$1 3 | transparent=$2 4 | path=$3 5 | if [[ -z "$flavor" || -z "$transparent" || -z "$path" ]]; then 6 | echo "Usage: $0 " 7 | exit 1 8 | fi 9 | 10 | patch () { 11 | echo "Patching $flavor colors with carburetor $1" 12 | 13 | ARGS=() 14 | for r in "${COLORS[@]}"; do 15 | ARGS+=("-e s/$r/Ig") 16 | done 17 | 18 | # shellcheck disable=SC20.7 19 | find "$path" -type f -exec sed -i ${ARGS[@]} {} + 20 | } 21 | 22 | case "$flavor" in 23 | all) 24 | $0 mocha "$2" "$3" 25 | $0 macchiato "$2" "$3" 26 | $0 frappe "$2" "$3" 27 | ;; 28 | 29 | mocha) 30 | # Carburetor 31 | export COLORS=( 32 | "#f5e0dc/#fed7d9" 33 | "#f2cdcd/#ffb3b8" 34 | "#f5c2e7/#ff7eb6" 35 | "#cba6f7/#d4bbff" 36 | "#f38ba8/#fa4d56" 37 | "#eba0ac/#ff8389" 38 | "#fab387/#fe832b" 39 | "#f9e2af/#fddc69" 40 | "#a6e3a1/#42be65" 41 | "#94e2d5/#3ddbd9" 42 | "#89dceb/#82cffe" 43 | "#74c7ec/#78a9ff" 44 | "#89b4fa/#4589ff" 45 | "#b4befe/#be95ff" 46 | "#cdd6f4/#f4f4f4" 47 | "#bac2de/#e0e0e0" 48 | "#a6adc8/#c6c6c6" 49 | "#9399b2/#a8a8a8" 50 | "#7f849c/#8d8d8d" 51 | "#6c7086/#6f6f6f" 52 | ) 53 | if [ "$transparent" != "true" ]; then 54 | COLORS+=( 55 | "#585b70/#525252" 56 | "#45475a/#393939" 57 | "#313244/#262626" 58 | "#1e1e2e/#161616" 59 | "#181825/#0b0b0b" 60 | "#11111b/#000000" 61 | ) 62 | else 63 | COLORS+=( 64 | "#585b70/rgba(82,82,82,0.70)" 65 | "#45475a/rgba(57,57,57,0.70)" 66 | "#313244/rgba(38,38,38,0.70)" 67 | "#1e1e2e/rgba(22,22,22,0.70)" 68 | "#181825/rgba(11,11,11,0.70)" 69 | "#11111b/rgba(0,0,0,0.70)" 70 | ) 71 | fi 72 | patch;; 73 | 74 | # Carburetor Cool 75 | macchiato) 76 | export COLORS=( 77 | "#f4dbd6/#fed7d9" 78 | "#f0c6c6/#ffb3b8" 79 | "#f5bde6/#ff7eb6" 80 | "#c6a0f6/#d4bbff" 81 | "#ed8796/#fa4d56" 82 | "#ee99a0/#ff8389" 83 | "#f5a97f/#fe832b" 84 | "#eed49f/#fddc69" 85 | "#a6da95/#42be65" 86 | "#8bd5ca/#3ddbd9" 87 | "#91d7e3/#82cffe" 88 | "#7dc4e4/#78a9ff" 89 | "#8aadf4/#4589ff" 90 | "#b7bdf8/#be95ff" 91 | "#cad3f5/#f2f4f8" 92 | "#b8c0e0/#dde1e6" 93 | "#a5adcb/#c1c7cd" 94 | "#939ab7/#a2a9b0" 95 | "#8087a2/#878d96" 96 | "#6e738d/#697077" 97 | ) 98 | if [ "$transparent" != "true" ]; then 99 | COLORS+=( 100 | "#5b60.7/#4d5358" 101 | "#494d64/#343a3f" 102 | "#363a4f/#21272a" 103 | "#24273a/#121619" 104 | "#1e2030/#090b0c" 105 | "#181926/#000000" 106 | ) 107 | else 108 | COLORS+=( 109 | "#626880/rgba(77,83,88,0.70)" 110 | "#51576d/rgba(52,58,63,0.70)" 111 | "#414559/rgba(33,39,42,0.70)" 112 | "#303446/rgba(18,22,25,0.70)" 113 | "#292c3c/rgba(9,11,12,0.70)" 114 | "#232634/rgba(0,0,0,0.70)" 115 | ) 116 | fi 117 | patch;; 118 | 119 | # Carburetor Warm 120 | frappe) 121 | export COLORS=( 122 | "#f2d5cf/#fed7d9" 123 | "#eebebe/#ffb3b8" 124 | "#f4b8e4/#ff7eb6" 125 | "#ca9ee6/#d4bbff" 126 | "#e78284/#fa4d56" 127 | "#ea999c/#ff8389" 128 | "#ef9f76/#fe832b" 129 | "#e5c890/#fddc69" 130 | "#a6d189/#42be65" 131 | "#81c8be/#3ddbd9" 132 | "#99d1db/#82cffe" 133 | "#85c1dc/#78a9ff" 134 | "#8caaee/#4589ff" 135 | "#babbf1/#be95ff" 136 | "#c6d0f5/#f7f3f2" 137 | "#b5bfe2/#e5e0df" 138 | "#a5adce/#cac5c4" 139 | "#949cbb/#ada8a8" 140 | "#838ba7/#8f8b8b" 141 | "#737994/#726e6e" 142 | ) 143 | if [ "$transparent" != "true" ]; then 144 | COLORS+=( 145 | "#626880/#565151" 146 | "#51576d/#3c3838" 147 | "#414559/#272525" 148 | "#303446/#171414" 149 | "#292c3c/#0b0a0a" 150 | "#232634/#000000" 151 | ) 152 | else 153 | COLORS+=( 154 | "#626880/rgba(86,81,81,0.70)" 155 | "#51576d/rgba(60,56,56,0.70)" 156 | "#414559/rgba(39,37,37,0.70)" 157 | "#303446/rgba(23,20,20,0.70)" 158 | "#292c3c/rgba(11,10,10,0.70)" 159 | "#232634/rgba(0,0,0,0.70)" 160 | ) 161 | fi 162 | patch;; 163 | 164 | *) 165 | echo "invalid flavor argument $flavor" 166 | ;; 167 | esac 168 | -------------------------------------------------------------------------------- /docs/home.md: -------------------------------------------------------------------------------- 1 | ## carburetor\.config\.accent 2 | 3 | Theme accent color to use 4 | 5 | 6 | 7 | *Type:* 8 | one of “rosewater”, “flamingo”, “pink”, “mauve”, “red”, “maroon”, “peach”, “yellow”, “green”, “teal”, “sky”, “sapphire”, “blue”, “lavender” 9 | 10 | 11 | 12 | *Default:* 13 | ` "blue" ` 14 | 15 | 16 | 17 | ## carburetor\.config\.variant 18 | 19 | 20 | 21 | Theme variant to use 22 | 23 | 24 | 25 | *Type:* 26 | one of “cool”, “light”, “warm”, “regular” 27 | 28 | 29 | 30 | *Default:* 31 | ` "regular" ` 32 | 33 | 34 | 35 | ## carburetor\.themes\.foot\.enable 36 | 37 | 38 | 39 | Whether to enable installing carburetor for hyprland\. 40 | 41 | 42 | 43 | *Type:* 44 | boolean 45 | 46 | 47 | 48 | *Default:* 49 | ` false ` 50 | 51 | 52 | 53 | *Example:* 54 | ` true ` 55 | 56 | 57 | 58 | ## carburetor\.themes\.gtk\.enable 59 | 60 | 61 | 62 | Whether to enable installing and configuring gtk themes\. 63 | 64 | 65 | 66 | *Type:* 67 | boolean 68 | 69 | 70 | 71 | *Default:* 72 | ` false ` 73 | 74 | 75 | 76 | *Example:* 77 | ` true ` 78 | 79 | 80 | 81 | ## carburetor\.themes\.gtk\.gnomeShellTheme 82 | 83 | 84 | 85 | Whether to enable installing gtk theme for GNOME Shell\. 86 | 87 | 88 | 89 | *Type:* 90 | boolean 91 | 92 | 93 | 94 | *Default:* 95 | ` false ` 96 | 97 | 98 | 99 | *Example:* 100 | ` true ` 101 | 102 | 103 | 104 | ## carburetor\.themes\.gtk\.icon 105 | 106 | 107 | 108 | Whether to enable installing patched papirus icons\. 109 | 110 | 111 | 112 | *Type:* 113 | boolean 114 | 115 | 116 | 117 | *Default:* 118 | ` false ` 119 | 120 | 121 | 122 | *Example:* 123 | ` true ` 124 | 125 | 126 | 127 | ## carburetor\.themes\.gtk\.size 128 | 129 | 130 | 131 | Size variant for gtk 132 | 133 | 134 | 135 | *Type:* 136 | one of “standard”, “compact” 137 | 138 | 139 | 140 | *Default:* 141 | ` "standard" ` 142 | 143 | 144 | 145 | ## carburetor\.themes\.gtk\.transparency 146 | 147 | 148 | 149 | Whether to enable transparency in background colors\. 150 | 151 | 152 | 153 | *Type:* 154 | boolean 155 | 156 | 157 | 158 | *Default:* 159 | ` false ` 160 | 161 | 162 | 163 | *Example:* 164 | ` true ` 165 | 166 | 167 | 168 | ## carburetor\.themes\.gtk\.tweaks 169 | 170 | 171 | 172 | Tweaks for gtk 173 | 174 | 175 | 176 | *Type:* 177 | list of (one of “black”, “rimless”, “float”) 178 | 179 | 180 | 181 | *Default:* 182 | ` [ ] ` 183 | 184 | 185 | 186 | ## carburetor\.themes\.hyprland\.enable 187 | 188 | 189 | 190 | Whether to enable installing carburetor for hyprland\. 191 | 192 | 193 | 194 | *Type:* 195 | boolean 196 | 197 | 198 | 199 | *Default:* 200 | ` false ` 201 | 202 | 203 | 204 | *Example:* 205 | ` true ` 206 | 207 | 208 | 209 | ## carburetor\.themes\.hyprlock\.enable 210 | 211 | 212 | 213 | Whether to enable installing carburetor for hyprlock\. 214 | 215 | 216 | 217 | *Type:* 218 | boolean 219 | 220 | 221 | 222 | *Default:* 223 | ` false ` 224 | 225 | 226 | 227 | *Example:* 228 | ` true ` 229 | 230 | 231 | 232 | ## carburetor\.themes\.vesktop\.enable 233 | 234 | 235 | 236 | Whether to enable installing carburetor themes for vesktop\. 237 | 238 | 239 | 240 | *Type:* 241 | boolean 242 | 243 | 244 | 245 | *Default:* 246 | ` false ` 247 | 248 | 249 | 250 | *Example:* 251 | ` true ` 252 | 253 | 254 | 255 | ## carburetor\.themes\.vesktop\.transparency 256 | 257 | 258 | 259 | Whether to enable transparency in background colors\. 260 | 261 | 262 | 263 | *Type:* 264 | boolean 265 | 266 | 267 | 268 | *Default:* 269 | ` false ` 270 | 271 | 272 | 273 | *Example:* 274 | ` true ` 275 | 276 | 277 | 278 | ## carburetor\.themes\.vicinae\.enable 279 | 280 | 281 | 282 | Whether to enable installing carburetor for vicinae\. 283 | 284 | 285 | 286 | *Type:* 287 | boolean 288 | 289 | 290 | 291 | *Default:* 292 | ` false ` 293 | 294 | 295 | 296 | *Example:* 297 | ` true ` 298 | 299 | 300 | 301 | ## carburetor\.themes\.webcord\.enable 302 | 303 | 304 | 305 | Whether to enable installing carburetor for webcord\. 306 | 307 | 308 | 309 | *Type:* 310 | boolean 311 | 312 | 313 | 314 | *Default:* 315 | ` false ` 316 | 317 | 318 | 319 | *Example:* 320 | ` true ` 321 | 322 | 323 | 324 | ## carburetor\.themes\.webcord\.transparency 325 | 326 | 327 | 328 | Whether to enable transparency in background colors\. 329 | 330 | 331 | 332 | *Type:* 333 | boolean 334 | 335 | 336 | 337 | *Default:* 338 | ` false ` 339 | 340 | 341 | 342 | *Example:* 343 | ` true ` 344 | 345 | 346 | 347 | ## carburetor\.themes\.wezterm\.enable 348 | 349 | 350 | 351 | Whether to enable installing carburetor themes to wezterm\. 352 | 353 | 354 | 355 | *Type:* 356 | boolean 357 | 358 | 359 | 360 | *Default:* 361 | ` false ` 362 | 363 | 364 | 365 | *Example:* 366 | ` true ` 367 | 368 | 369 | 370 | ## carburetor\.themes\.zed\.enable 371 | 372 | 373 | 374 | Whether to enable installing carburetor themes to zed\. 375 | 376 | 377 | 378 | *Type:* 379 | boolean 380 | 381 | 382 | 383 | *Default:* 384 | ` false ` 385 | 386 | 387 | 388 | *Example:* 389 | ` true ` 390 | 391 | 392 | -------------------------------------------------------------------------------- /nix/pkgs/default.nix: -------------------------------------------------------------------------------- 1 | args@{ 2 | name, 3 | variantNames, 4 | whiskersJson, 5 | defaultAccent, 6 | ... 7 | }: 8 | final: prev: { 9 | # Theme namespace 10 | "${name}" = 11 | let 12 | mkThemePackage = module: prev.callPackage (import module args) { }; 13 | in 14 | { 15 | # Tools used to create theme packages 16 | tools = { 17 | # Generic patching tool 18 | patch = prev.stdenvNoCC.mkDerivation { 19 | name = "${name}-patch"; 20 | src = ../../.; 21 | nativeBuildInputs = [ prev.catppuccin-whiskers ]; 22 | installPhase = '' 23 | mkdir -p $out/bin 24 | ${prev.lib.meta.getExe prev.catppuccin-whiskers} --dry-run --color-overrides ${whiskersJson} patch.tera > $out/bin/${name}-patch 25 | chmod +x $out/bin/${name}-patch 26 | ''; 27 | meta = { 28 | mainProgram = "${name}-patch"; 29 | }; 30 | }; 31 | 32 | # Utility to create a derivation based on a source that supports whiskers and provides a tera template. 33 | mkWhiskersDerivation = 34 | { 35 | # Theme name 36 | theme ? name, 37 | # Package name 38 | pname, 39 | 40 | # Glob is used by default to let bash find the tera file in the project root 41 | whiskersPath ? "*.tera", 42 | # Output format needed for the template 43 | whiskersOutput ? "json", 44 | # Overrides to pass 45 | whiskersOverrides ? "{}", 46 | # Color overrides file to pass 47 | whiskersColorOverrides ? whiskersJson, 48 | 49 | # Inner mkDerivation function to use 50 | mkDerivation ? prev.stdenvNoCC.mkDerivation, 51 | 52 | nativeBuildInputs ? [ ], 53 | ... 54 | }@inputs: 55 | mkDerivation ( 56 | { 57 | name = theme + "-" + pname; 58 | nativeBuildInputs = nativeBuildInputs ++ [ 59 | prev.tree 60 | prev.catppuccin-whiskers 61 | ]; 62 | buildPhase = '' 63 | runHook preBuild 64 | 65 | CMD='${prev.lib.meta.getExe prev.catppuccin-whiskers} 66 | ${whiskersPath} 67 | -o ${whiskersOutput} 68 | --color-overrides ${whiskersColorOverrides}' 69 | 70 | $CMD 71 | 72 | # Perform a dry run and capture the list of output files 73 | IFS=$'\n' export files=($( 74 | $CMD --dry-run | awk -F 'into ' '{print $2}' 75 | )) 76 | 77 | # Replace name and variant texts 78 | find . -type f -exec sed -i \ 79 | -e 's/catppuccin/${theme}/gI' \ 80 | -e 's/soothing pastel theme/${theme} theme/gI' \ 81 | -e 's/mocha/${variantNames.mocha}/gI' \ 82 | -e 's/macchiato/${variantNames.macchiato}/gI' \ 83 | -e 's/é/e/g' \ 84 | -e 's/frappe/${variantNames.frappe}/gI' \ 85 | -e 's/latte/${variantNames.latte}/gI' \ 86 | {} \; 87 | 88 | runHook postBuild 89 | ''; 90 | # Installation phase. By default; will iterate over `$files` whiskers output 91 | # and copy them to $out, and rename them to the `whiskersRename` option 92 | installPhase = '' 93 | runHook preInstall 94 | shopt -s nocasematch 95 | mkdir -p $out 96 | for output in "''${files[@]}"; do 97 | echo "Renaming and copying $output" 98 | 99 | RENAME=''${output/catppuccin/${theme}} 100 | RENAME=''${RENAME/mocha/${variantNames.mocha}} 101 | RENAME=''${RENAME/macchiato/${variantNames.macchiato}} 102 | RENAME=''${RENAME/frappe/${variantNames.frappe}} 103 | RENAME=''${RENAME/latte/${variantNames.latte}} 104 | if [ "$output" != "$RENAME" ]; then 105 | cp $output $RENAME 106 | fi 107 | cp -r --parent $RENAME $out 108 | done 109 | 110 | runHook postInstall 111 | ''; 112 | } 113 | // inputs 114 | ); 115 | 116 | toFlavor = 117 | variant: 118 | { 119 | "${variantNames.mocha}" = "mocha"; 120 | "${variantNames.macchiato}" = "macchiato"; 121 | "${variantNames.frappe}" = "frappe"; 122 | "${variantNames.latte}" = "latte"; 123 | } 124 | ."${variant}"; 125 | 126 | }; 127 | 128 | "base16" = mkThemePackage ./base16.nix; 129 | "discord" = mkThemePackage ./discord.nix; 130 | "foot" = mkThemePackage ./foot.nix; 131 | "gtk" = mkThemePackage ./gtk.nix; 132 | "hyprland" = mkThemePackage ./hyprland.nix; 133 | "hyprlock" = mkThemePackage ./hyprlock.nix; 134 | "papirus-folders" = mkThemePackage ./papirus-folders.nix; 135 | "zed" = mkThemePackage ./zed.nix; 136 | }; 137 | } 138 | -------------------------------------------------------------------------------- /patch.tera: -------------------------------------------------------------------------------- 1 | --- 2 | whiskers: 3 | version: "2.4.0" 4 | --- 5 | #!/usr/bin/env bash 6 | flavor=$1 7 | transparent=$2 8 | path=$3 9 | if [[ -z "$flavor" || -z "$transparent" || -z "$path" ]]; then 10 | echo "Usage: $0 " 11 | exit 1 12 | fi 13 | 14 | patch () { 15 | echo "Patching $flavor colors with carburetor $1" 16 | 17 | ARGS=() 18 | for r in "${COLORS[@]}"; do 19 | ARGS+=("-e s/$r/Ig") 20 | done 21 | 22 | # shellcheck disable=SC20.7 23 | find "$path" -type f -exec sed -i ${ARGS[@]} {} + 24 | } 25 | 26 | case "$flavor" in 27 | all) 28 | $0 mocha "$2" "$3" 29 | $0 macchiato "$2" "$3" 30 | $0 frappe "$2" "$3" 31 | ;; 32 | 33 | mocha) 34 | {% set c = flavors.mocha.colors -%} 35 | # Carburetor 36 | export COLORS=( 37 | "#f5e0dc/#{{c.rosewater.hex}}" 38 | "#f2cdcd/#{{c.flamingo.hex}}" 39 | "#f5c2e7/#{{c.pink.hex}}" 40 | "#cba6f7/#{{c.mauve.hex}}" 41 | "#f38ba8/#{{c.red.hex}}" 42 | "#eba0ac/#{{c.maroon.hex}}" 43 | "#fab387/#{{c.peach.hex}}" 44 | "#f9e2af/#{{c.yellow.hex}}" 45 | "#a6e3a1/#{{c.green.hex}}" 46 | "#94e2d5/#{{c.teal.hex}}" 47 | "#89dceb/#{{c.sky.hex}}" 48 | "#74c7ec/#{{c.sapphire.hex}}" 49 | "#89b4fa/#{{c.blue.hex}}" 50 | "#b4befe/#{{c.lavender.hex}}" 51 | "#cdd6f4/#{{c.text.hex}}" 52 | "#bac2de/#{{c.subtext1.hex}}" 53 | "#a6adc8/#{{c.subtext0.hex}}" 54 | "#9399b2/#{{c.overlay2.hex}}" 55 | "#7f849c/#{{c.overlay1.hex}}" 56 | "#6c7086/#{{c.overlay0.hex}}" 57 | ) 58 | if [ "$transparent" != "true" ]; then 59 | COLORS+=( 60 | "#585b70/#{{c.surface2.hex}}" 61 | "#45475a/#{{c.surface1.hex}}" 62 | "#313244/#{{c.surface0.hex}}" 63 | "#1e1e2e/#{{c.base.hex}}" 64 | "#181825/#{{c.mantle.hex}}" 65 | "#11111b/#{{c.crust.hex}}" 66 | ) 67 | else 68 | COLORS+=( 69 | "#585b70/{{css_rgba(color=c.surface2 | mod(opacity=0.7)) | replace(from=" ", to="")}}" 70 | "#45475a/{{css_rgba(color=c.surface1 | mod(opacity=0.7)) | replace(from=" ", to="")}}" 71 | "#313244/{{css_rgba(color=c.surface0 | mod(opacity=0.7)) | replace(from=" ", to="")}}" 72 | "#1e1e2e/{{css_rgba(color=c.base | mod(opacity=0.7)) | replace(from=" ", to="")}}" 73 | "#181825/{{css_rgba(color=c.mantle | mod(opacity=0.7)) | replace(from=" ", to="")}}" 74 | "#11111b/{{css_rgba(color=c.crust | mod(opacity=0.7)) | replace(from=" ", to="")}}" 75 | ) 76 | fi 77 | patch;; 78 | 79 | # Carburetor Cool 80 | macchiato) 81 | {% set c = flavors.macchiato.colors -%} 82 | export COLORS=( 83 | "#f4dbd6/#{{c.rosewater.hex}}" 84 | "#f0c6c6/#{{c.flamingo.hex}}" 85 | "#f5bde6/#{{c.pink.hex}}" 86 | "#c6a0f6/#{{c.mauve.hex}}" 87 | "#ed8796/#{{c.red.hex}}" 88 | "#ee99a0/#{{c.maroon.hex}}" 89 | "#f5a97f/#{{c.peach.hex}}" 90 | "#eed49f/#{{c.yellow.hex}}" 91 | "#a6da95/#{{c.green.hex}}" 92 | "#8bd5ca/#{{c.teal.hex}}" 93 | "#91d7e3/#{{c.sky.hex}}" 94 | "#7dc4e4/#{{c.sapphire.hex}}" 95 | "#8aadf4/#{{c.blue.hex}}" 96 | "#b7bdf8/#{{c.lavender.hex}}" 97 | "#cad3f5/#{{c.text.hex}}" 98 | "#b8c0e0/#{{c.subtext1.hex}}" 99 | "#a5adcb/#{{c.subtext0.hex}}" 100 | "#939ab7/#{{c.overlay2.hex}}" 101 | "#8087a2/#{{c.overlay1.hex}}" 102 | "#6e738d/#{{c.overlay0.hex}}" 103 | ) 104 | if [ "$transparent" != "true" ]; then 105 | COLORS+=( 106 | "#5b60.7/#{{c.surface2.hex}}" 107 | "#494d64/#{{c.surface1.hex}}" 108 | "#363a4f/#{{c.surface0.hex}}" 109 | "#24273a/#{{c.base.hex}}" 110 | "#1e2030/#{{c.mantle.hex}}" 111 | "#181926/#{{c.crust.hex}}" 112 | ) 113 | else 114 | COLORS+=( 115 | "#626880/{{css_rgba(color=c.surface2 | mod(opacity=0.7)) | replace(from=" ", to="")}}" 116 | "#51576d/{{css_rgba(color=c.surface1 | mod(opacity=0.7)) | replace(from=" ", to="")}}" 117 | "#414559/{{css_rgba(color=c.surface0 | mod(opacity=0.7)) | replace(from=" ", to="")}}" 118 | "#303446/{{css_rgba(color=c.base | mod(opacity=0.7)) | replace(from=" ", to="")}}" 119 | "#292c3c/{{css_rgba(color=c.mantle | mod(opacity=0.7)) | replace(from=" ", to="")}}" 120 | "#232634/{{css_rgba(color=c.crust | mod(opacity=0.7)) | replace(from=" ", to="")}}" 121 | ) 122 | fi 123 | patch;; 124 | 125 | # Carburetor Warm 126 | frappe) 127 | {% set c = flavors.frappe.colors -%} 128 | export COLORS=( 129 | "#f2d5cf/#{{c.rosewater.hex}}" 130 | "#eebebe/#{{c.flamingo.hex}}" 131 | "#f4b8e4/#{{c.pink.hex}}" 132 | "#ca9ee6/#{{c.mauve.hex}}" 133 | "#e78284/#{{c.red.hex}}" 134 | "#ea999c/#{{c.maroon.hex}}" 135 | "#ef9f76/#{{c.peach.hex}}" 136 | "#e5c890/#{{c.yellow.hex}}" 137 | "#a6d189/#{{c.green.hex}}" 138 | "#81c8be/#{{c.teal.hex}}" 139 | "#99d1db/#{{c.sky.hex}}" 140 | "#85c1dc/#{{c.sapphire.hex}}" 141 | "#8caaee/#{{c.blue.hex}}" 142 | "#babbf1/#{{c.lavender.hex}}" 143 | "#c6d0f5/#{{c.text.hex}}" 144 | "#b5bfe2/#{{c.subtext1.hex}}" 145 | "#a5adce/#{{c.subtext0.hex}}" 146 | "#949cbb/#{{c.overlay2.hex}}" 147 | "#838ba7/#{{c.overlay1.hex}}" 148 | "#737994/#{{c.overlay0.hex}}" 149 | ) 150 | if [ "$transparent" != "true" ]; then 151 | COLORS+=( 152 | "#626880/#{{c.surface2.hex}}" 153 | "#51576d/#{{c.surface1.hex}}" 154 | "#414559/#{{c.surface0.hex}}" 155 | "#303446/#{{c.base.hex}}" 156 | "#292c3c/#{{c.mantle.hex}}" 157 | "#232634/#{{c.crust.hex}}" 158 | ) 159 | else 160 | COLORS+=( 161 | "#626880/{{css_rgba(color=c.surface2 | mod(opacity=0.7)) | replace(from=" ", to="")}}" 162 | "#51576d/{{css_rgba(color=c.surface1 | mod(opacity=0.7)) | replace(from=" ", to="")}}" 163 | "#414559/{{css_rgba(color=c.surface0 | mod(opacity=0.7)) | replace(from=" ", to="")}}" 164 | "#303446/{{css_rgba(color=c.base | mod(opacity=0.7)) | replace(from=" ", to="")}}" 165 | "#292c3c/{{css_rgba(color=c.mantle | mod(opacity=0.7)) | replace(from=" ", to="")}}" 166 | "#232634/{{css_rgba(color=c.crust | mod(opacity=0.7)) | replace(from=" ", to="")}}" 167 | ) 168 | fi 169 | patch;; 170 | 171 | *) 172 | echo "invalid flavor argument $flavor" 173 | ;; 174 | esac 175 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Carburetor 2 | 3 | A functional and high contrast colorscheme inspired by IBM Carbon. 4 | 5 | ## Table of Contents 6 | 7 | 1. [Previews](#previews) 8 | 2. [Usage](#usage) 9 | 1. [Nix](#nix) 10 | 1. [Overlay](#overlay) 11 | 2. [Home Manager](#home-manager) 12 | 3. [Making your own themes!](#making-your-own-themes) 13 | 2. [Patch Tool](#patch-tool) 14 | 1. [Discord](#discord) 15 | 3. [Catppuccin Whiskers](#catppuccin-whiskers) 16 | 1. [Zed](#zed) 17 | 4. [Userstyles](#userstyles) 18 | 5. [Config Examples](#config-examples) 19 | 1. [Nvim](#nvim) 20 | 2. [Wezterm](#wezterm) 21 | 3. [Base16](#base16) 22 | 3. [Honorable Mentions](#honorable-mentions) 23 | 24 | ## Previews 25 | 26 | ### Carburetor Regular 27 | ![image](https://github.com/user-attachments/assets/843df0c7-58a1-4885-8c82-e29821b2b28c) 28 | 29 | ### Carburetor Cool 30 | ![image](https://github.com/user-attachments/assets/1ba6adc0-cb47-44bd-bdd5-2b20f3fb12dc) 31 | 32 | ### Carburetor Warm 33 | ![image](https://github.com/user-attachments/assets/bfb99aa6-ebb2-42c3-9b4f-3e887c020b7d) 34 | 35 | ## Usage 36 | 37 | The current form of this scheme is as a direct patch for [catppuccin](https://github.com/catppuccin/catppuccin) ports. 38 | 39 | ### Nix 40 | 41 | Add carburetor flake to your inputs: 42 | 43 | ```nix 44 | inputs = { 45 | carburetor.url = "github:ozwaldorf/carburetor"; 46 | } 47 | ``` 48 | 49 | #### Overlay 50 | 51 | Add the overlay to your nixpkgs to insert the theme's package set: 52 | 53 | ```nix 54 | pkgs = import nixpkgs { 55 | inherit system; 56 | overlays = [ inputs.carburetor.overlays.default ]; 57 | }; 58 | ``` 59 | 60 | This provides the following raw theme packages: 61 | 62 | - `pkgs.carburetor.base16` - whiskers base16 config 63 | - `pkgs.carburetor.gtk` - patched gtk theme 64 | - `pkgs.carburetor.hyprland` - whiskers hyprland themes 65 | - `pkgs.carburetor.hyprlock` - patched hyprlock config 66 | - `pkgs.carburetor.discord` - patched discord css 67 | - `pkgs.carburetor.papirus-folders` - patched papirus folders 68 | - `pkgs.carburetor.zed` - whiskers zed theme 69 | 70 | And the following tools: 71 | 72 | - `pkgs.carburetor.tools.patch` - [src/patch.sh](./src/patch.sh) 73 | - `pkgs.carburetor.tools.mkWhiskersDerivation` - Create a derivation from a source's whiskers template and output the files 74 | 75 | #### Home Manager 76 | 77 | > Note: The theme's nixpkgs overlay *MUST* be used for the home manager modules to work. 78 | 79 | Example home configuration: 80 | 81 | ```nix 82 | # import the carburetor module 83 | imports = [ inputs.carburetor.homeManagerModules.default ]; 84 | 85 | # configure carburetor theme installation 86 | carburetor = { 87 | config = { 88 | variant = "regular"; 89 | accent = "blue"; 90 | }; 91 | themes = { 92 | gtk = { 93 | enable = true; 94 | transparency = true; 95 | icon = true; 96 | # size = "compact"; 97 | # tweaks = "float"; 98 | # gnomeShellTheme = true; 99 | }; 100 | hyprland.enable = true; 101 | hyprlock.enable = true; 102 | webcord = { 103 | enable = true; 104 | transparency = true; 105 | }; 106 | wezterm.enable = true; 107 | zed.enable = true; 108 | }; 109 | }; 110 | ``` 111 | 112 | Detailed documentation on options is available at [docs/home.md](./docs/home.md). 113 | A complete standalone home configuration example can be found in the main flake.nix, under `homeConfigurations.example`. 114 | 115 | #### Making your own themes! 116 | 117 | Carburetor's nix flake can be used as a library to implement an overlay and home module for a custom catppuccin based theme, based on a color override file for whiskers. Usage is exactly the same as above, but tailored to the themes name and custom variants. Anywhere `carburetor` is referenced, `your-theme` will be used instead. 118 | 119 | These custom themes can be defined and used directly in a nixos/home manager derivation, or used in a popular colorscheme's flake to provide theming for nix users: 120 | 121 | ```nix 122 | { 123 | description = "Example theme flake"; 124 | inputs.carburetor.url = "github:ozwaldorf/carburetor"; 125 | outputs = { self, carburetor }: 126 | let 127 | # Configuration for the custom theme 128 | exampleTheme = { 129 | # Theme name used in all packages and configuration options. 130 | name = "example-theme"; 131 | # Variant names to replace with 132 | variantNames = { 133 | mocha = "darker"; 134 | macchiato = "dark"; 135 | frappe = "medium"; 136 | latte = "light"; 137 | }; 138 | # Default accent to select in configuration options 139 | defaultAccent = "pink"; 140 | # Path to a whiskers color override file for the theme 141 | whiskersJson = ./path/to/whiskers.json; 142 | }; 143 | # Create an overlay for the theme packages 144 | exampleThemeOverlay = carburetor.lib.mkCustomThemeOverlay exampleTheme; 145 | # Create a home manager module for configuring the themes 146 | exampleThemeHomeModule = carburetor.lib.mkCustomHomeManagerModule exampleTheme; 147 | in 148 | { 149 | # Output the overlay and module for flake consumers 150 | overlays.default = exampleThemeOverlay; 151 | homeManagerModules.default = exampleThemeHomeModule; 152 | }; 153 | }; 154 | ``` 155 | 156 | --- 157 | 158 | ### Patch Tool 159 | 160 | There is a simple bash script for patching any existing catppuccin port's hex colors to carburetor. Note that some ports use a css pre-processor to create variations of colors, so they will need to be patched beforehand and then compiled, like [discord](#discord). 161 | 162 | ```bash 163 | ./patch.sh 164 | 165 | Options: 166 | FLAVOR: all | mocha | macchiato | frappe 167 | TRANSPARENCY: true | false 168 | ``` 169 | 170 | #### Discord 171 | 172 | To patch the [discord](https://github.com/catppuccin/discord) catppuccin port, run the following: 173 | 174 | ```bash 175 | # Clone the port 176 | git clone https://github.com/catppuccin/discord && cd discord 177 | 178 | # Install dependencies 179 | yarn install 180 | 181 | # Patch each flavor 182 | ../src/patch.sh all false node_modules/@catppuccin/palette 183 | 184 | # Build the port 185 | yarn build 186 | 187 | # Install a theme (webcord specific, for other projects check their docs) 188 | # cp dist/dist/catppuccin-mocha.theme.css ~/.config/WebCord/Themes/carburator 189 | # cp dist/dist/catppuccin-macchiato.theme.css ~/.config/WebCord/Themes/carburator-cool 190 | # cp dist/dist/catppuccin-frappe.theme.css ~/.config/WebCord/Themes/carburator-warm 191 | ``` 192 | 193 | --- 194 | 195 | ### Catppuccin `whiskers` 196 | 197 | Catppuccin has a tool called [whiskers](https://github.com/catppuccin/whiskers) which is used to create color schemes from template files. The [`whiskers.json`](examples/whiskers.json) file can be used to generate a Carburetor color scheme for any template file that works with `whiskers`. 198 | 199 | A list of available catppuccin ports can be found at [arewewhiskersyet.com](https://arewewhiskersyet.com/). 200 | 201 | #### Zed 202 | 203 | The same process should apply for whichever program you would like to create a Carburetor color scheme for. 204 | 205 | 1. [Install whiskers](https://github.com/catppuccin/whiskers?tab=readme-ov-file#installation) 206 | 2. Download the [template file for Zed](https://github.com/catppuccin/zed/blob/main/zed.tera) 207 | 3. (Optional) customize the template file as you like (e.g. changing the names of color schemes, etc.). Documentation for the template syntax `whiskers` uses is available [here](https://github.com/catppuccin/whiskers?tab=readme-ov-file#template). 208 | 4. Run (customizing the input filename and output format for your template): 209 | ``` 210 | whiskers --color-overrides whiskers.json zed.tera 211 | ``` 212 | 5. `whiskers` should generate one or more color scheme files, dependent on the template. For Zed, it generates a `themes` directory with color scheme files for each accent color. 213 | 6. Install your color scheme! 214 | 215 | --- 216 | 217 | ### Userstyles 218 | 219 | A fork of the Catppuccin userstyles is maintained at [carburetor-userstyles](https://github.com/ozwaldorf/carburetor-userstyles/) and synced periodically. 220 | Over 100 websites are supported with auto-updates setup correctly. 221 | 222 | --- 223 | 224 | ### Config Examples 225 | 226 | #### Nvim 227 | 228 | [catppuccin.nvim](https://github.com/catppuccin/nvim) can be easily configured to use carburetor colors, shown [here](src/nvim.lua). 229 | 230 | #### Wezterm 231 | 232 | The wezterm color configs can be found [here](src/wezterm) and can be copied into `~/.config/wezterm/colors/`. 233 | 234 | You will then have the set of colorschemes available: 235 | 236 | - `Carburetor` 237 | - `Carburetor Cool` 238 | - `Carburetor Warm` 239 | 240 | #### Foot 241 | 242 | A set of foot terminal configs can be found at [src/foot](./src/foot). 243 | 244 | #### Base16 245 | 246 | A set of base16 configuration files for carburetor can be found at [src/base16](./src/base16) 247 | 248 | ## Honorable Mentions 249 | 250 | Heavily inspired from [oxocarbon](https://github.com/nyoom-engineering/oxocarbon/). 251 | 252 | ## Development 253 | 254 | ```bash 255 | # update theme sources 256 | nix-update -F --build --commit --version=branch 257 | 258 | # generate docs 259 | nix build .\#docs && cp -L result/* docs 260 | 261 | # generate patch tool 262 | whiskers --dry-run --color-overrides ./whiskers.json patch.tera > src/patch.sh 263 | ``` 264 | --------------------------------------------------------------------------------