From dabaf26e2f23758f52458670dcbb49a0911858d9 Mon Sep 17 00:00:00 2001 From: lucy Date: Wed, 25 Feb 2026 10:25:03 +0100 Subject: [PATCH] add templates for foot and pywalfox, improve neovim template --- config.toml | 11 ++- templates/Colors.qml | 92 +---------------------- templates/foot.ini | 31 ++++++++ templates/hyprland.conf | 2 +- templates/kitty.conf | 2 +- templates/nvim.lua | 157 +++++++++++++--------------------------- templates/pywalfox.json | 22 ++++++ 7 files changed, 120 insertions(+), 197 deletions(-) create mode 100644 templates/foot.ini create mode 100644 templates/pywalfox.json diff --git a/config.toml b/config.toml index d368a92..9ad2e09 100644 --- a/config.toml +++ b/config.toml @@ -3,10 +3,10 @@ reload_apps = true - [templates.nvim] input_path = "~/.config/matugen/templates/nvim.lua" -output_path = "~/.config/nvim/colors/wallust.lua" +output_path = "~/.config/nvim/lua/config/generated.lua" +post_hook = 'pkill -SIGUSR1 nvim' [templates.gtk3] input_path = "~/.config/matugen/templates/gtk.css" @@ -49,3 +49,10 @@ input_path = "~/.config/matugen/templates/kitty.conf" output_path = "~/.config/kitty/colors.conf" post_hook = "pkill -SIGUSR1 kitty" +[templates.pywalfox] +input_path = '~/.config/matugen/templates/pywalfox.json' +output_path = '~/.cache/wal/colors.json' +post_hook = 'pywalfox update' +[templates.foot] +input_path = '~/.config/matugen/templates/foot.ini' +output_path = '~/.config/foot/colors.ini' diff --git a/templates/Colors.qml b/templates/Colors.qml index beeb0d3..09933d9 100644 --- a/templates/Colors.qml +++ b/templates/Colors.qml @@ -1,91 +1,7 @@ -pragma Singleton import QtQuick -import Quickshell -Singleton { - id: customColors - - // --- Core Colors --- - readonly property color primary: "{{colors.primary.default.hex}}" - readonly property color onPrimaryColor: "{{colors.on_primary.default.hex}}" - readonly property color primaryContainer: "{{colors.primary_container.default.hex}}" - readonly property color onPrimaryContainerColor: "{{colors.on_primary_container.default.hex}}" - readonly property color inversePrimary: "{{colors.inverse_primary.default.hex}}" - - readonly property color secondary: "{{colors.secondary.default.hex}}" - readonly property color onSecondaryColor: "{{colors.on_secondary.default.hex}}" - readonly property color secondaryContainer: "{{colors.secondary_container.default.hex}}" - readonly property color onSecondaryContainerColor: "{{colors.on_secondary_container.default.hex}}" - - readonly property color tertiary: "{{colors.tertiary.default.hex}}" - readonly property color onTertiaryColor: "{{colors.on_tertiary.default.hex}}" - readonly property color tertiaryContainer: "{{colors.tertiary_container.default.hex}}" - readonly property color onTertiaryContainerColor: "{{colors.on_tertiary_container.default.hex}}" - - readonly property color error: "{{colors.error.default.hex}}" - readonly property color onErrorColor: "{{colors.on_error.default.hex}}" - readonly property color errorContainer: "{{colors.error_container.default.hex}}" - readonly property color onErrorContainerColor: "{{colors.on_error_container.default.hex}}" - - readonly property color background: "{{colors.background.default.hex}}" - readonly property color onBackgroundColor: "{{colors.on_background.default.hex}}" - - // --- Surfaces --- - readonly property color surface: "{{colors.surface.default.hex}}" - readonly property color onSurfaceColor: "{{colors.on_surface.default.hex}}" - readonly property color surfaceVariant: "{{colors.surface_variant.default.hex}}" - readonly property color onSurfaceVariantColor: "{{colors.on_surface_variant.default.hex}}" - readonly property color inverseSurface: "{{colors.inverse_surface.default.hex}}" - readonly property color inverseOnSurface: "{{colors.inverse_on_surface.default.hex}}" - - readonly property color surfaceDim: "{{colors.surface_dim.default.hex}}" - readonly property color surfaceBright: "{{colors.surface_bright.default.hex}}" - readonly property color surfaceContainerLowest: "{{colors.surface_container_lowest.default.hex}}" - readonly property color surfaceContainerLow: "{{colors.surface_container_low.default.hex}}" - readonly property color surfaceContainer: "{{colors.surface_container.default.hex}}" - readonly property color surfaceContainerHigh: "{{colors.surface_container_high.default.hex}}" - readonly property color surfaceContainerHighest: "{{colors.surface_container_highest.default.hex}}" - - // --- Outlines & Shadows --- - readonly property color outline: "{{colors.outline.default.hex}}" - readonly property color outlineVariant: "{{colors.outline_variant.default.hex}}" - readonly property color shadow: "{{colors.shadow.default.hex}}" - readonly property color scrim: "{{colors.scrim.default.hex}}" - - // --- Fixed Colors (useful for things that shouldn't change drastically in dark mode) --- - readonly property color primaryFixed: "{{colors.primary_fixed.default.hex}}" - readonly property color primaryFixedDim: "{{colors.primary_fixed_dim.default.hex}}" - readonly property color onPrimaryFixedColor: "{{colors.on_primary_fixed.default.hex}}" - readonly property color onPrimaryFixedVariant: "{{colors.on_primary_fixed_variant.default.hex}}" - - readonly property color secondaryFixed: "{{colors.secondary_fixed.default.hex}}" - readonly property color secondaryFixedDim: "{{colors.secondary_fixed_dim.default.hex}}" - readonly property color onSecondaryFixedColor: "{{colors.on_secondary_fixed.default.hex}}" - readonly property color onSecondaryFixedVariant: "{{colors.on_secondary_fixed_variant.default.hex}}" - - readonly property color tertiaryFixed: "{{colors.tertiary_fixed.default.hex}}" - readonly property color tertiaryFixedDim: "{{colors.tertiary_fixed_dim.default.hex}}" - readonly property color onTertiaryFixedColor: "{{colors.on_tertiary_fixed.default.hex}}" - readonly property color onTertiaryFixedVariant: "{{colors.on_tertiary_fixed_variant.default.hex}}" - - // --- Legacy / Terminal Mappings (color0 - color15) --- - readonly property color color0: "{{colors.surface.default.hex}}" - readonly property color color1: "{{colors.error.default.hex}}" - readonly property color color2: "{{colors.primary.default.hex}}" - readonly property color color3: "{{colors.tertiary.default.hex}}" - readonly property color color4: "{{colors.secondary.default.hex}}" - readonly property color color5: "{{colors.primary_container.default.hex}}" - readonly property color color6: "{{colors.secondary_container.default.hex}}" - readonly property color color7: "{{colors.on_surface.default.hex}}" - readonly property color color8: "{{colors.surface_variant.default.hex}}" - readonly property color color9: "{{colors.error_container.default.hex}}" - readonly property color color10: "{{colors.inverse_primary.default.hex}}" - readonly property color color11: "{{colors.on_tertiary_container.default.hex}}" - readonly property color color12: "{{colors.on_secondary_container.default.hex}}" - readonly property color color13: "{{colors.on_primary_container.default.hex}}" - readonly property color color14: "{{colors.on_surface_variant.default.hex}}" - readonly property color color15: "{{colors.inverse_surface.default.hex}}" - - // Helper alias for common needs - readonly property color cursor: primary +QtObject { + <* for name, value in colors *> + readonly property color {{name}}: "{{value.default.hex}}" + <* endfor *> } diff --git a/templates/foot.ini b/templates/foot.ini new file mode 100644 index 0000000..0c87989 --- /dev/null +++ b/templates/foot.ini @@ -0,0 +1,31 @@ +[colors] +alpha=1.0 +background={{ colors.background.default.hex_stripped }} +foreground={{ colors.on_surface.default.hex_stripped }} +regular0={{ colors.surface.default.hex_stripped }} +regular1={{ colors.error.default.hex_stripped }} +regular2={{ colors.primary.default.hex_stripped }} +regular3={{ colors.tertiary.default.hex_stripped }} +regular4={{ colors.on_primary_container.default.hex_stripped }} +regular5={{ colors.on_secondary_container.default.hex_stripped }} +regular6={{ colors.secondary.default.hex_stripped }} +regular7={{ colors.on_surface.default.hex_stripped }} +bright0={{ colors.surface_bright.default.hex_stripped }} +bright1={{ colors.error.default.hex_stripped }} +bright2={{ colors.primary.default.hex_stripped }} +bright3={{ colors.tertiary.default.hex_stripped }} +bright4={{ colors.on_primary_container.default.hex_stripped }} +bright5={{ colors.on_secondary_container.default.hex_stripped }} +bright6={{ colors.secondary.default.hex_stripped }} +bright7={{ colors.on_surface.default.hex_stripped }} +dim0=45475A +dim1=F38BA8 +dim2=A6E3A1 +dim3=F9E2AF +dim4=89B4FA +dim5=F5C2E7 +dim6=94E2D5 +dim7=BAC2DE +selection-foreground={{ colors.primary.default.hex_stripped }} +selection-background={{ colors.on_primary.default.hex_stripped }} +cursor={{ colors.surface_variant.default.hex_stripped }} {{ colors.on_surface.default.hex_stripped }} diff --git a/templates/hyprland.conf b/templates/hyprland.conf index 105fc00..fd96cb9 100644 --- a/templates/hyprland.conf +++ b/templates/hyprland.conf @@ -1,5 +1,5 @@ # Hyprland with colors from matugen general { - col.active_border = rgba({{colors.on_background.default.hex_stripped}}ff) + col.active_border = rgba({{colors.primary.default.hex_stripped}}ff) col.inactive_border = rgba({{colors.surface.default.hex_stripped}}ee) } diff --git a/templates/kitty.conf b/templates/kitty.conf index d44ab1c..3dab07a 100644 --- a/templates/kitty.conf +++ b/templates/kitty.conf @@ -1,7 +1,7 @@ # The kitty terminal template for matugen cursor {{colors.primary.default.hex}} -background {{colors.background.default.hex | set_saturation: 2.0 }} +background {{colors.surface.default.hex}} foreground {{colors.on_background.default.hex}} color0 {{colors.surface.default.hex}} diff --git a/templates/nvim.lua b/templates/nvim.lua index 819f79d..3d839c7 100644 --- a/templates/nvim.lua +++ b/templates/nvim.lua @@ -1,115 +1,62 @@ --- Matugen Theme -vim.cmd("hi clear") -if vim.fn.exists("syntax_on") then - vim.cmd("syntax reset") -end -vim.g.colors_name = "matugen" +-- Generated by Matugen -local c = { - bg = "{{colors.background.default.hex}}", - fg = "{{colors.on_background.default.hex}}", - cursor = "{{colors.primary.default.hex}}", - c0 = "{{colors.surface.default.hex}}", - c1 = "{{colors.error.default.hex}}", - c2 = "{{colors.primary.default.hex}}", - c3 = "{{colors.tertiary.default.hex}}", - c4 = "{{colors.secondary.default.hex}}", - c5 = "{{colors.primary_container.default.hex}}", - c6 = "{{colors.secondary_container.default.hex}}", - c7 = "{{colors.on_surface.default.hex}}", - c8 = "{{colors.surface_variant.default.hex}}", - c9 = "{{colors.error_container.default.hex}}", - c10 = "{{colors.inverse_primary.default.hex}}", - c11 = "{{colors.on_tertiary_container.default.hex}}", - c12 = "{{colors.on_secondary_container.default.hex}}", - c13 = "{{colors.on_primary_container.default.hex}}", - c14 = "{{colors.on_surface_variant.default.hex}}", - c15 = "{{colors.inverse_surface.default.hex}}", - tbg = "{{colors.surface.default.hex | set_lightness: 4.0}}", -- Matugen filters usually not inline -} +require("base16-colorscheme").setup({ + base00 = "{{colors.background.default.hex}}", + base01 = "{{colors.surface_container_lowest.default.hex}}", + base02 = "{{colors.surface_container_low.default.hex}}", + base03 = "{{colors.outline_variant.default.hex}}", + base04 = "{{colors.on_surface_variant.default.hex}}", + base05 = "{{colors.on_surface.default.hex}}", + base06 = "{{colors.inverse_on_surface.default.hex}}", + base07 = "{{colors.surface_bright.default.hex}}", -local hl = function(group, opts) - vim.api.nvim_set_hl(0, group, opts) + base08 = "{{colors.tertiary.default.hex | lighten: -5}}", + base09 = "{{colors.tertiary.default.hex}}", + base0A = "{{colors.secondary.default.hex}}", + base0B = "{{colors.primary.default.hex}}", + base0C = "{{colors.tertiary_container.default.hex}}", + base0D = "{{colors.primary_container.default.hex}}", + base0E = "{{colors.secondary_container.default.hex}}", + base0F = "{{colors.secondary.default.hex | lighten: -10}}", +}) + +-- We first theme base16, but we also need to fix some other colors that don't +-- contrast well by default + +-- Helper function to set multiple highlight groups at once +local function set_hl_mutliple(groups, value) + for _, v in pairs(groups) do + vim.api.nvim_set_hl(0, v, value) + end end --- Base -hl("Normal", { fg = c.fg, bg = c.bg }) -hl("Cursor", { fg = c.bg, bg = c.cursor }) -hl("LineNr", { fg = c.c8 }) -hl("CursorLine", { bg = c.c0 }) -hl("StatusLine", { fg = c.fg, bg = c.c0 }) --- Harpoon Colors -hl("HarpoonInactive", { fg = c.fg, bg = c.bg }) -hl("HarpoonActive", { fg = c.bg, bg = c.c2 }) -hl("HarpoonNumberInactive", { fg = c.fg, bg = c.bg }) -hl("HarpoonNumberActive", { fg = c.bg, bg = c.c2 }) -hl("TabLineFill", { fg = c.fg, bg = c.bg }) --- Syntax -hl("Comment", { fg = c.c8, italic = true }) -hl("Constant", { fg = c.c3 }) -hl("String", { fg = c.c2 }) -hl("Identifier", { fg = c.c4 }) -hl("Function", { fg = c.c4, bold = true }) -hl("Statement", { fg = c.c5 }) -hl("Keyword", { fg = c.c5 }) -hl("Type", { fg = c.c6 }) -hl("Special", { fg = c.c1 }) +-- Make selected text stand out more +vim.api.nvim_set_hl(0, "Visual", { + bg = "{{colors.primary_container.default.hex}}", + fg = "{{colors.on_primary_container.default.hex}}", -- normal text contrast +}) --- UI -hl("Pmenu", { fg = c.fg, bg = c.c0 }) -hl("PmenuSel", { fg = c.c0, bg = c.c4 }) -hl("WinSeparator", { fg = c.c8 }) +-- Make "string" text contrast better +set_hl_mutliple({ "String", "TSString" }, { + fg = "{{colors.tertiary.default.hex | lighten: -15.0 }}", +}) --- BARBAR -hl("BufferCurrent", { fg = c.fg, bg = c.bg, bold = true }) -hl("BufferCurrentIndex", { fg = c.c4, bg = c.bg }) -hl("BufferCurrentMod", { fg = c.c3, bg = c.bg }) -hl("BufferCurrentSign", { fg = c.c4, bg = c.bg }) -hl("BufferCurrentTarget", { fg = c.c1, bg = c.bg, bold = true }) +-- Grey out comments +set_hl_mutliple({ "TSComment", "Comment" }, { + fg = "{{colors.outline.default.hex}}", + italic = true, +}) -hl("BufferInactive", { fg = c.c8, bg = c.bg }) -hl("BufferInactiveIndex", { fg = c.c8, bg = c.bg }) -hl("BufferInactiveMod", { fg = c.c8, bg = c.bg }) -hl("BufferInactiveSign", { fg = c.c8, bg = c.bg }) -hl("BufferInactiveTarget", { fg = c.c8, bg = c.bg, bold = true }) +-- Color in other highlight groups as you see fit! -hl("BufferVisible", { fg = c.fg, bg = c.c0 }) -hl("BufferVisibleIndex", { fg = c.fg, bg = c.c0 }) -hl("BufferVisibleMod", { fg = c.c3, bg = c.c0 }) -hl("BufferVisibleSign", { fg = c.c4, bg = c.c0 }) -hl("BufferVisibleTarget", { fg = c.c1, bg = c.c0, bold = true }) +set_hl_mutliple({ "TSMethod", "Method" }, { + fg = "{{colors.tertiary.default.hex}}", +}) -hl("BufferTabpageFill", { fg = c.c0, bg = c.bg }) -hl("TelescopeNormal", { bg = c.tbg }) +set_hl_mutliple({ "TSFunction", "Function" }, { + fg = "{{colors.secondary.default.hex}}", +}) --- MARKDOWN -hl("RenderMarkdownH1", { fg = c.c4, bold = true }) -hl("RenderMarkdownH2", { fg = c.c3, bold = true }) -hl("RenderMarkdownH3", { fg = c.c2, bold = true }) -hl("RenderMarkdownH4", { fg = c.c5, bold = true }) -hl("RenderMarkdownH5", { fg = c.c6, bold = true }) -hl("RenderMarkdownH6", { fg = c.c1, bold = true }) - -hl("RenderMarkdownH1Bg", { bg = c.c0 }) -hl("RenderMarkdownH2Bg", { bg = c.c0 }) -hl("RenderMarkdownH3Bg", { bg = c.c0 }) -hl("RenderMarkdownH4Bg", { bg = c.c0 }) -hl("RenderMarkdownH5Bg", { bg = c.c0 }) -hl("RenderMarkdownH6Bg", { bg = c.c0 }) - -hl("RenderMarkdownCode", { bg = c.tbg }) -hl("RenderMarkdownCodeInline", { fg = c.c4, bg = c.tbg }) - -hl("RenderMarkdownBullet", { fg = c.c3 }) -hl("RenderMarkdownQuote", { fg = c.c8 }) -hl("RenderMarkdownDash", { fg = c.c8 }) -hl("RenderMarkdownSign", { fg = c.c8 }) - -hl("RenderMarkdownInfo", { fg = c.c4, bg = c.c0 }) -hl("RenderMarkdownSuccess", { fg = c.c2, bg = c.c0 }) -hl("RenderMarkdownWarn", { fg = c.c3, bg = c.c0 }) -hl("RenderMarkdownError", { fg = c.c1, bg = c.c0 }) -hl("RenderMarkdownHint", { fg = c.c6, bg = c.c0 }) - -hl("RenderMarkdownUnchecked", { fg = c.c8 }) -hl("RenderMarkdownChecked", { fg = c.c2 }) +set_hl_mutliple({ "Keyword", "TSKeyword", "TSKeywordFunction", "TSRepeat" }, { + fg = "{{colors.inverse_primary.default.hex}}", +}) diff --git a/templates/pywalfox.json b/templates/pywalfox.json new file mode 100644 index 0000000..9ddf17f --- /dev/null +++ b/templates/pywalfox.json @@ -0,0 +1,22 @@ +{ + "wallpaper": "{{image}}", + "alpha": "100", + "colors": { + "color0": "{{colors.background.default.hex}}", + "color1": "", + "color2": "", + "color3": "", + "color4": "", + "color5": "", + "color6": "", + "color7": "", + "color8": "", + "color9": "", + "color10": "{{colors.primary.default.hex}}", + "color11": "", + "color12": "", + "color13": "{{colors.surface_bright.default.hex}}", + "color14": "", + "color15": "{{colors.on_surface.default.hex}}" + } +}