|
| 1 | +-- Full SilkCircuit theme integration for AstroNvim with all features |
| 2 | +-- Drop this file in ~/.config/nvim/lua/plugins/silkcircuit.lua |
| 3 | + |
| 4 | +return { |
| 5 | + -- SilkCircuit theme with full configuration |
| 6 | + { |
| 7 | + "silkcircuit/silkcircuit-nvim", |
| 8 | + lazy = false, |
| 9 | + priority = 1000, |
| 10 | + config = function() |
| 11 | + require("silkcircuit").setup({ |
| 12 | + compile = true, |
| 13 | + terminal_colors = true, |
| 14 | + integrations = { |
| 15 | + -- Core integrations |
| 16 | + treesitter = true, |
| 17 | + lsp = true, |
| 18 | + telescope = true, |
| 19 | + neotree = true, |
| 20 | + notify = true, |
| 21 | + which_key = true, |
| 22 | + dashboard = true, |
| 23 | + alpha = true, |
| 24 | + lualine = true, |
| 25 | + bufferline = true, |
| 26 | + gitsigns = true, |
| 27 | + indent_blankline = true, |
| 28 | + cmp = true, |
| 29 | + dap_ui = true, |
| 30 | + noice = true, |
| 31 | + hop = true, |
| 32 | + leap = true, |
| 33 | + rainbow_delimiters = true, |
| 34 | + }, |
| 35 | + styles = { |
| 36 | + comments = { italic = true }, |
| 37 | + keywords = { bold = true }, |
| 38 | + functions = { bold = true, italic = true }, |
| 39 | + variables = { italic = false }, |
| 40 | + conditionals = { italic = true }, |
| 41 | + loops = { italic = true }, |
| 42 | + booleans = { bold = true }, |
| 43 | + constants = { bold = true }, |
| 44 | + }, |
| 45 | + on_highlights = function(highlights, colors) |
| 46 | + -- Enhanced LSP highlights |
| 47 | + highlights.LspReferenceText = { bg = colors.bg_highlight } |
| 48 | + highlights.LspReferenceRead = { bg = colors.bg_highlight } |
| 49 | + highlights.LspReferenceWrite = { bg = colors.bg_highlight } |
| 50 | + |
| 51 | + -- Better search highlighting |
| 52 | + highlights.Search = { bg = colors.glow_purple, fg = colors.bg } |
| 53 | + highlights.IncSearch = { bg = colors.glow_pink, fg = colors.bg } |
| 54 | + |
| 55 | + -- Enhanced selection |
| 56 | + highlights.Visual = { bg = colors.purple_muted } |
| 57 | + |
| 58 | + -- Popup menu styling |
| 59 | + highlights.Pmenu = { bg = colors.bg_popup, fg = colors.fg } |
| 60 | + highlights.PmenuSel = { bg = colors.glow_purple, fg = colors.bg } |
| 61 | + end, |
| 62 | + }) |
| 63 | + end, |
| 64 | + }, |
| 65 | + |
| 66 | + -- Configure AstroUI with SilkCircuit theme |
| 67 | + { |
| 68 | + "AstroNvim/astroui", |
| 69 | + ---@type AstroUIOpts |
| 70 | + opts = function() |
| 71 | + local get_hlgroup = require("astroui").get_hlgroup |
| 72 | + return { |
| 73 | + colorscheme = "silkcircuit", |
| 74 | + highlights = { |
| 75 | + init = { |
| 76 | + Normal = { bg = "NONE" }, -- Optional: transparency |
| 77 | + }, |
| 78 | + silkcircuit = function(self) |
| 79 | + local colors = require("silkcircuit.palette").colors |
| 80 | + return { |
| 81 | + -- AstroNvim specific highlights |
| 82 | + StatusLine = { bg = colors.bg_highlight }, |
| 83 | + StatusLineNC = { bg = colors.bg_dark }, |
| 84 | + WinBar = { bg = "NONE" }, |
| 85 | + WinBarNC = { bg = "NONE" }, |
| 86 | + |
| 87 | + -- Telescope enhancements |
| 88 | + TelescopePromptBorder = { fg = colors.glow_pink }, |
| 89 | + TelescopeResultsBorder = { fg = colors.purple }, |
| 90 | + TelescopePreviewBorder = { fg = colors.glow_cyan }, |
| 91 | + TelescopeSelection = { bg = colors.bg_highlight, bold = true }, |
| 92 | + |
| 93 | + -- Neo-tree styling |
| 94 | + NeoTreeNormal = { bg = colors.bg_dark }, |
| 95 | + NeoTreeNormalNC = { bg = colors.bg_dark }, |
| 96 | + NeoTreeWinSeparator = { fg = colors.purple_muted, bg = "NONE" }, |
| 97 | + |
| 98 | + -- Which-key styling |
| 99 | + WhichKeyFloat = { bg = colors.bg_dark }, |
| 100 | + WhichKeyBorder = { fg = colors.purple }, |
| 101 | + |
| 102 | + -- Dashboard/Alpha |
| 103 | + AlphaHeader = { fg = colors.glow_purple, bold = true }, |
| 104 | + AlphaButtons = { fg = colors.pink }, |
| 105 | + AlphaShortcut = { fg = colors.glow_cyan, bold = true }, |
| 106 | + AlphaFooter = { fg = colors.purple_muted, italic = true }, |
| 107 | + } |
| 108 | + end, |
| 109 | + }, |
| 110 | + status = { |
| 111 | + separators = { |
| 112 | + left = { "", "" }, |
| 113 | + right = { "", "" }, |
| 114 | + tab = { "", "" }, |
| 115 | + }, |
| 116 | + colors = function(colors) |
| 117 | + local silkcircuit = require("silkcircuit.palette").colors |
| 118 | + return { |
| 119 | + -- Override status colors with SilkCircuit palette |
| 120 | + blue = silkcircuit.glow_purple, |
| 121 | + green = silkcircuit.green, |
| 122 | + yellow = silkcircuit.yellow_bright, |
| 123 | + orange = silkcircuit.orange, |
| 124 | + red = silkcircuit.glow_pink, |
| 125 | + purple = silkcircuit.purple, |
| 126 | + cyan = silkcircuit.glow_cyan, |
| 127 | + |
| 128 | + -- Git colors |
| 129 | + git_branch_fg = silkcircuit.glow_purple, |
| 130 | + git_added = silkcircuit.green, |
| 131 | + git_changed = silkcircuit.yellow_bright, |
| 132 | + git_removed = silkcircuit.glow_pink, |
| 133 | + } |
| 134 | + end, |
| 135 | + }, |
| 136 | + icons = { |
| 137 | + -- Cyberpunk-style loading animation |
| 138 | + LSPLoading1 = "◢", |
| 139 | + LSPLoading2 = "◣", |
| 140 | + LSPLoading3 = "◤", |
| 141 | + LSPLoading4 = "◥", |
| 142 | + }, |
| 143 | + } |
| 144 | + end, |
| 145 | + }, |
| 146 | + |
| 147 | + -- Rainbow delimiters with SilkCircuit colors |
| 148 | + { |
| 149 | + "HiPhish/rainbow-delimiters.nvim", |
| 150 | + dependencies = { "silkcircuit/silkcircuit-nvim" }, |
| 151 | + event = "User AstroFile", |
| 152 | + config = function() |
| 153 | + local rainbow_delimiters = require("rainbow-delimiters") |
| 154 | + |
| 155 | + -- Define SilkCircuit rainbow colors |
| 156 | + vim.api.nvim_set_hl(0, "RainbowDelimiterRed", { fg = "#ff79c6" }) |
| 157 | + vim.api.nvim_set_hl(0, "RainbowDelimiterYellow", { fg = "#f1fa8c" }) |
| 158 | + vim.api.nvim_set_hl(0, "RainbowDelimiterBlue", { fg = "#80ffea" }) |
| 159 | + vim.api.nvim_set_hl(0, "RainbowDelimiterOrange", { fg = "#ffb86c" }) |
| 160 | + vim.api.nvim_set_hl(0, "RainbowDelimiterGreen", { fg = "#50fa7b" }) |
| 161 | + vim.api.nvim_set_hl(0, "RainbowDelimiterViolet", { fg = "#bd93f9" }) |
| 162 | + vim.api.nvim_set_hl(0, "RainbowDelimiterCyan", { fg = "#8be9fd" }) |
| 163 | + |
| 164 | + vim.g.rainbow_delimiters = { |
| 165 | + strategy = { |
| 166 | + [""] = rainbow_delimiters.strategy["global"], |
| 167 | + vim = rainbow_delimiters.strategy["local"], |
| 168 | + }, |
| 169 | + query = { |
| 170 | + [""] = "rainbow-delimiters", |
| 171 | + lua = "rainbow-blocks", |
| 172 | + }, |
| 173 | + highlight = { |
| 174 | + "RainbowDelimiterRed", |
| 175 | + "RainbowDelimiterYellow", |
| 176 | + "RainbowDelimiterBlue", |
| 177 | + "RainbowDelimiterOrange", |
| 178 | + "RainbowDelimiterGreen", |
| 179 | + "RainbowDelimiterViolet", |
| 180 | + "RainbowDelimiterCyan", |
| 181 | + }, |
| 182 | + } |
| 183 | + end, |
| 184 | + }, |
| 185 | + |
| 186 | + -- Enhanced Neo-tree configuration (optional) |
| 187 | + { |
| 188 | + "nvim-neo-tree/neo-tree.nvim", |
| 189 | + opts = function(_, opts) |
| 190 | + return require("astrocore").extend_tbl(opts, { |
| 191 | + window = { |
| 192 | + width = 35, |
| 193 | + mappings = { |
| 194 | + ["Y"] = "copy_selector", -- Custom copy path functionality |
| 195 | + }, |
| 196 | + }, |
| 197 | + filesystem = { |
| 198 | + filtered_items = { |
| 199 | + hide_dotfiles = false, |
| 200 | + hide_gitignored = false, |
| 201 | + }, |
| 202 | + follow_current_file = { |
| 203 | + enabled = true, |
| 204 | + leave_dirs_open = false, |
| 205 | + }, |
| 206 | + }, |
| 207 | + -- Custom command to copy various path formats |
| 208 | + commands = { |
| 209 | + copy_selector = function(state) |
| 210 | + local node = state.tree:get_node() |
| 211 | + local filepath = node:get_id() |
| 212 | + local filename = node.name |
| 213 | + local modify = vim.fn.fnamemodify |
| 214 | + |
| 215 | + local results = { |
| 216 | + filepath, |
| 217 | + modify(filepath, ":."), |
| 218 | + modify(filepath, ":~"), |
| 219 | + filename, |
| 220 | + modify(filename, ":r"), |
| 221 | + modify(filename, ":e"), |
| 222 | + } |
| 223 | + |
| 224 | + vim.ui.select({ |
| 225 | + "1. Absolute path: " .. results[1], |
| 226 | + "2. Path relative to CWD: " .. results[2], |
| 227 | + "3. Path relative to HOME: " .. results[3], |
| 228 | + "4. Filename: " .. results[4], |
| 229 | + "5. Filename without extension: " .. results[5], |
| 230 | + "6. Extension of the filename: " .. results[6], |
| 231 | + }, { prompt = "Choose to copy to clipboard:" }, function(choice) |
| 232 | + if choice then |
| 233 | + local i = tonumber(choice:sub(1, 1)) |
| 234 | + if i then |
| 235 | + vim.fn.setreg("+", results[i]) |
| 236 | + vim.notify("Copied: " .. results[i]) |
| 237 | + end |
| 238 | + end |
| 239 | + end) |
| 240 | + end, |
| 241 | + }, |
| 242 | + }) |
| 243 | + end, |
| 244 | + }, |
| 245 | + |
| 246 | + -- Ensure termguicolors is enabled |
| 247 | + { |
| 248 | + "AstroNvim/astrocore", |
| 249 | + opts = { |
| 250 | + options = { |
| 251 | + opt = { |
| 252 | + termguicolors = true, |
| 253 | + }, |
| 254 | + }, |
| 255 | + }, |
| 256 | + }, |
| 257 | +} |
0 commit comments