diff --git a/lazy-lock.json b/lazy-lock.json index bf15f4a..773ef45 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -1,15 +1,16 @@ { "LazyVim": { "branch": "main", "commit": "25abbf546d564dc484cf903804661ba12de45507" }, - "SchemaStore.nvim": { "branch": "main", "commit": "21a54161a87ab38b85d8b1eb52cc86c973a5fafe" }, + "SchemaStore.nvim": { "branch": "main", "commit": "fb58187b76d8e086f08686b872b50f52eac57818" }, "blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" }, "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, "catppuccin": { "branch": "main", "commit": "30fa4d122d9b22ad8b2e0ab1b533c8c26c4dde86" }, - "conform.nvim": { "branch": "master", "commit": "3543d000dafbc41cc7761d860cfdb24e82154f75" }, + "claudecode.nvim": { "branch": "main", "commit": "e21a837956c75dd5f617ce0fe80b054312c0829a" }, + "conform.nvim": { "branch": "master", "commit": "b4aab989db276993ea5dcb78872be494ce546521" }, "flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" }, "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, - "fzf-lua": { "branch": "main", "commit": "5d2ba91230356dce4dac52df32ddc6cf5a940d56" }, + "fzf-lua": { "branch": "main", "commit": "ce5a5fa2902933e7b4563ca78210254169463cb6" }, "gitsigns.nvim": { "branch": "main", "commit": "6e3c66548035e50db7bd8e360a29aec6620c3641" }, - "grug-far.nvim": { "branch": "main", "commit": "385d1949dc21d0c39e7a74b4f4a25da18817bc86" }, + "grug-far.nvim": { "branch": "main", "commit": "c5b629399c0f2e436c00df381e44852a13b7313a" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" }, "lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" }, @@ -17,12 +18,12 @@ "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, "mason-nvim-dap.nvim": { "branch": "main", "commit": "86389a3dd687cfaa647b6f44731e492970034baa" }, "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, - "mini.ai": { "branch": "main", "commit": "1cd4f021a05c29acd4ab511c0981da14217daf38" }, - "mini.icons": { "branch": "main", "commit": "b8f6fa6f5a3fd0c56936252edcd691184e5aac0c" }, - "mini.pairs": { "branch": "main", "commit": "1e1ca3f60f58d4050bf814902b472eec9963a5dd" }, - "neo-tree.nvim": { "branch": "main", "commit": "bbeda076c8a2e7d16614287cd70239f577e5bf55" }, - "neotest": { "branch": "master", "commit": "35a59c1f59dbb954d92b74ab64a966a668cea495" }, - "neotest-golang": { "branch": "main", "commit": "fa49d01f28ccb6262914f344a831eec8855e57f1" }, + "mini.ai": { "branch": "main", "commit": "45a26d032d8703f280c69c2ed9fb4e1bfc8f24f9" }, + "mini.icons": { "branch": "main", "commit": "f9a177c11daa7829389b7b6eaaec8b8a5c47052d" }, + "mini.pairs": { "branch": "main", "commit": "3738ea30ff33e0cbf2983dc67319a5468d25b0a9" }, + "neo-tree.nvim": { "branch": "main", "commit": "ed057048a281b418d5318dd5153f9486daa517a3" }, + "neotest": { "branch": "master", "commit": "2cf3544fb55cdd428a9a1b7154aea9c9823426e8" }, + "neotest-golang": { "branch": "main", "commit": "54a82ecf9413473a366b364e4e73da7cab35cef2" }, "neotest-minitest": { "branch": "main", "commit": "4d1c19f80be0efff7656dea76a589c02bf418b68" }, "neotest-python": { "branch": "master", "commit": "ed9b4d794b89044cc32e5476e637936331473c6e" }, "neotest-rspec": { "branch": "main", "commit": "825bc085b7a691860d5cafc5fa7ab140c713e6c8" }, @@ -30,21 +31,21 @@ "noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" }, "nord": { "branch": "master", "commit": "80c1e5321505aeb22b7a9f23eb82f1e193c12470" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, - "nvim-dap": { "branch": "master", "commit": "f777d1d20ed50c2f312e286892c062d9c2f1c6fe" }, + "nvim-dap": { "branch": "master", "commit": "7523676a4be17644587aa47e4d42f6f7646d4727" }, "nvim-dap-go": { "branch": "main", "commit": "b4421153ead5d726603b02743ea40cf26a51ed5f" }, - "nvim-dap-python": { "branch": "master", "commit": "eafd6d3b6175b6f7e5ecaadbcf604a1bb7419351" }, + "nvim-dap-python": { "branch": "master", "commit": "030385d03363988370adaa5cf21fa465daddb088" }, "nvim-dap-ruby": { "branch": "main", "commit": "ba36f9905ca9c6d89e5af5467a52fceeb2bbbf6d" }, "nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" }, "nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" }, - "nvim-lint": { "branch": "master", "commit": "ee04d481d4e6089892c2fb2ad8924b1a053591e1" }, - "nvim-lspconfig": { "branch": "master", "commit": "1c505a2a37c7732fb2a7e290c0f822abfb2ba1c5" }, + "nvim-lint": { "branch": "master", "commit": "f126af5345c7472e9a0cdbe1d1a29209be72c4c4" }, + "nvim-lspconfig": { "branch": "master", "commit": "c8b90ae5cbe21d547b342b05c9266dcb8ca0de8f" }, "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, "nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" }, "nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" }, "persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, - "render-markdown.nvim": { "branch": "main", "commit": "c4ff9acddcf0f79b3187393319adb5cac5865bd3" }, + "render-markdown.nvim": { "branch": "main", "commit": "95994ad668786cd75d0ee6d0b7178bce7c3ca146" }, "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" }, "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, "tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" }, diff --git a/lua/config/options.lua b/lua/config/options.lua index 0b3f484..7f3402f 100644 --- a/lua/config/options.lua +++ b/lua/config/options.lua @@ -5,7 +5,7 @@ vim.g.lazyvim_ruby_lsp = "ruby_lsp" vim.g.lazyvim_ruby_formatter = "standardrb" -vim.g.lazyvim_python_lsp = "basedpyright" +vim.g.lazyvim_python_lsp = "pyright" vim.g.lazyvim_python_ruff = "ruff" vim.opt.termguicolors = true diff --git a/lua/plugins/claudecode.lua b/lua/plugins/claudecode.lua new file mode 100644 index 0000000..31f52c2 --- /dev/null +++ b/lua/plugins/claudecode.lua @@ -0,0 +1,24 @@ +return { + "coder/claudecode.nvim", + dependencies = { "folke/snacks.nvim" }, + config = true, + keys = { + { "a", nil, desc = "AI/Claude Code" }, + { "ac", "ClaudeCode", desc = "Toggle Claude" }, + { "af", "ClaudeCodeFocus", desc = "Focus Claude" }, + { "ar", "ClaudeCode --resume", desc = "Resume Claude" }, + { "aC", "ClaudeCode --continue", desc = "Continue Claude" }, + { "am", "ClaudeCodeSelectModel", desc = "Select Claude model" }, + { "ab", "ClaudeCodeAdd %", desc = "Add current buffer" }, + { "as", "ClaudeCodeSend", mode = "v", desc = "Send to Claude" }, + { + "as", + "ClaudeCodeTreeAdd", + desc = "Add file", + ft = { "NvimTree", "neo-tree", "oil", "minifiles" }, + }, + -- Diff management + { "aa", "ClaudeCodeDiffAccept", desc = "Accept diff" }, + { "ad", "ClaudeCodeDiffDeny", desc = "Deny diff" }, + }, +} diff --git a/lua/plugins/conform.lua b/lua/plugins/conform.lua index aebe9bd..5d88489 100644 --- a/lua/plugins/conform.lua +++ b/lua/plugins/conform.lua @@ -56,11 +56,15 @@ return { yaml = has_prettier_config() and { "prettier" } or { "yamlfix" }, markdown = { "markdownlint" }, ["markdown.mdx"] = { "markdownlint" }, - python = { "ruff_format" }, + python = { "ruff_fix", "ruff_format" }, ruby = { "standardrb" }, eruby = { "erb_lint" }, + htmldjango = { "djlint" }, }, formatters = { + djlint = { + args = { "-", "--reformat" }, + }, erb_lint = { stdin = false, tmpfile_format = ".conform.$RANDOM.$FILENAME", diff --git a/lua/plugins/lint.lua b/lua/plugins/lint.lua new file mode 100644 index 0000000..20b156e --- /dev/null +++ b/lua/plugins/lint.lua @@ -0,0 +1,34 @@ +vim.api.nvim_create_user_command("LintInfo", function() + local filetype = vim.bo.filetype + local linters = require("lint").linters_by_ft[filetype] + + if linters then + print("Linters for " .. filetype .. ": " .. table.concat(linters, ", ")) + else + print("No linters configured for filetype: " .. filetype) + end +end, {}) + +local ns = require("lint").get_namespace("my_linter_name") +vim.diagnostic.config({ virtual_text = true }, ns) + +return { + "mfussenegger/nvim-lint", + opts = { + ignore_errors = false, + linters_by_ft = { + python = { "ruff", "mypy" }, + djangohtml = { "djlint" }, + -- Use the "*" filetype to run linters on all filetypes. + ["*"] = { "typos" }, + -- Use the "_" filetype to run linters on filetypes that don't have other linters configured. + -- ['_'] = { 'fallback linter' }, + }, + linters = { + -- mypy = { + -- -- cmd = vim.fn.expand("~/work/mypy-debug.sh"), + -- -- cwd = "/Users/sean/work/sage", + -- }, + }, + }, +} diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua index 99172f5..3d161aa 100644 --- a/lua/plugins/lsp.lua +++ b/lua/plugins/lsp.lua @@ -8,9 +8,6 @@ return { root_dir = require("lspconfig").util.root_pattern("deno.json", "deno.jsonc"), single_file_support = false, }, - tailwindcss = { - root_dir = require("lspconfig").util.root_pattern("tailwind.config.js", "tailwind.config.ts"), - }, rubocop = { enabled = false }, oxlint = { root_dir = require("lspconfig").util.root_pattern(".oxlintrc.json"), @@ -23,18 +20,6 @@ return { return true -- prevent default setup end, }, - }, - }, - }, - { - "b0o/SchemaStore.nvim", - lazy = true, - version = false, -- last release is way too old - }, - { - "nvim-lspconfig", - opts = { - servers = { jinja_lsp = { filetypes = { "jinja", "html" }, }, @@ -48,4 +33,9 @@ return { }, }, }, + { + "b0o/SchemaStore.nvim", + lazy = true, + version = false, -- last release is way too old + }, } diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua new file mode 100644 index 0000000..05d9f1f --- /dev/null +++ b/lua/plugins/lualine.lua @@ -0,0 +1,22 @@ +local running_linters = function() + local spinner_chars = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" } + local running = require("lint").get_running() + if #running > 0 then + local index = math.floor(vim.loop.now() / 150) % #spinner_chars + 1 + return "linters " .. spinner_chars[index] .. " " .. table.concat(running, ",") + else + return "linters ▪" + end +end + +return { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function(_, opts) + table.insert(opts.sections.lualine_x, { + function() + return running_linters() + end, + }) + end, +} diff --git a/lua/plugins/mason.lua b/lua/plugins/mason.lua index 4902e0b..4e7ef18 100644 --- a/lua/plugins/mason.lua +++ b/lua/plugins/mason.lua @@ -8,6 +8,7 @@ return { "marksman", "yamlls", "jsonls", + -- "pylsp", }, }, }, @@ -15,6 +16,7 @@ return { -- f.k.a. "williamboman/mason.nvim", "mason-org/mason.nvim", opts = { + PATH = "append", ensure_installed = { "oxlint", "nil", @@ -23,8 +25,12 @@ return { "prettierd", "nixfmt", "yamlfix", + "mypy", "jinja-lsp", "django-template-lsp", + "tailwindcss-language-server", + "djlint", + "typos", }, }, },