From 695fede97d9fd5bf2ebd28bb4671d0454fd3e6e9 Mon Sep 17 00:00:00 2001 From: foxora Date: Tue, 24 Feb 2026 19:54:52 +0000 Subject: [PATCH] orgmode fixed, added comment plugin, added formatter --- homemanager/vim/lua/lsp/lsp.lua | 144 +++++++++--------- homemanager/vim/lua/plugins/comment.lua | 23 +++ homemanager/vim/lua/plugins/format.lua | 33 +++++ homemanager/vim/lua/plugins/init.lua | 18 ++- homemanager/vim/lua/plugins/neocord.lua | 5 - homemanager/vim/lua/plugins/orgmode.lua | 16 ++ homemanager/vim/lua/plugins/telescope.lua | 106 ++++++++++---- homemanager/vim/lua/plugins/treesitter.lua | 162 ++++++++++----------- homemanager/vim/nixcats.nix | 31 ++-- 9 files changed, 329 insertions(+), 209 deletions(-) create mode 100644 homemanager/vim/lua/plugins/comment.lua create mode 100644 homemanager/vim/lua/plugins/format.lua delete mode 100644 homemanager/vim/lua/plugins/neocord.lua create mode 100644 homemanager/vim/lua/plugins/orgmode.lua diff --git a/homemanager/vim/lua/lsp/lsp.lua b/homemanager/vim/lua/lsp/lsp.lua index 85615f3..ab01d57 100644 --- a/homemanager/vim/lua/lsp/lsp.lua +++ b/homemanager/vim/lua/lsp/lsp.lua @@ -1,97 +1,95 @@ local servers = {} servers.lua_ls = { - settings = { - Lua = { - formatters = { - ignoreComments = false, - }, - signatureHelp = { enable = true }, - diagnostics = { - globals = { 'nixCats', 'vim' }, - -- disable = { 'missing-fields' }, - }, - workspace = { - -- make the server aware of the neovim runtime files - library = vim.api.nvim_get_runtime_file("", true), - checkThirdParty = false, - }, - }, - telemetry = { enabled = false }, - }, + settings = { + Lua = { + formatters = { + ignoreComments = false, + }, + signatureHelp = { enable = true }, + diagnostics = { + globals = { "nixCats", "vim" }, + -- disable = { 'missing-fields' }, + }, + workspace = { + -- make the server aware of the neovim runtime files + library = vim.api.nvim_get_runtime_file("", true), + checkThirdParty = false, + }, + }, + telemetry = { enabled = false }, + }, } servers.nil_ls = { - settings = {}, + settings = {}, } local rust_analyzer_cmd = os.getenv("RUST_ANALYZER_CMD") servers.rust_analyzer = { - cmd = { rust_analyzer_cmd }, - settings = { - server = { - -- For debugging rust-analyzer, to see log location do :LspInfo in neovim - -- extraEnv = { {["RA_LOG"]="project_model=debug"} }, - }, - cargo = { - allFeatures = false, - allTargets = false, - buildScripts = { enable = true }, - target = "x86_64-unknown-linux-gnu", - }, - diagnostics = { - enable = true, - }, - }, + cmd = { rust_analyzer_cmd }, + settings = { + server = { + -- For debugging rust-analyzer, to see log location do :LspInfo in neovim + -- extraEnv = { {["RA_LOG"]="project_model=debug"} }, + }, + cargo = { + allFeatures = false, + allTargets = false, + buildScripts = { enable = true }, + target = "x86_64-unknown-linux-gnu", + }, + diagnostics = { + enable = true, + }, + }, } servers.hls = { - settings = {}, + settings = {}, } - -- Taken from nixCats example: -- If you were to comment out this autocommand -- and instead pass the on attach function directly to -- nvim-lspconfig, it would do the same thing. -- come to think of it, it might be better because then lspconfig doesnt have to be called before lsp attach? -- but you would still end up triggering on a FileType event anyway, so, it makes little difference. -vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('nixCats-lsp-attach', { clear = true }), - callback = function(event) - require('lsp.capabilities').on_attach(vim.lsp.get_client_by_id(event.data.client_id), event.buf) - end +vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("nixCats-lsp-attach", { clear = true }), + callback = function(event) + require("lsp.capabilities").on_attach(vim.lsp.get_client_by_id(event.data.client_id), event.buf) + end, }) -require("lze").load { - { - "nvim-lspconfig", - event = "FileType", - after = function(plugin) - -- Just register configs, don't enable yet - for server_name, cfg in pairs(servers) do - vim.lsp.config(server_name, { - capabilities = require('lsp.capabilities').get(server_name), - settings = (cfg or {}).settings, - filetypes = (cfg or {}).filetypes, - cmd = (cfg or {}).cmd, - root_pattern = (cfg or {}).root_pattern, - }) - end - - -- Enable on-demand per filetype - for server_name, cfg in pairs(servers) do - local filetypes = cfg.filetypes or vim.lsp.config[server_name].filetypes - if filetypes then - vim.api.nvim_create_autocmd('FileType', { - pattern = filetypes, - callback = function() - vim.lsp.enable(server_name) - end, - }) - end - end - end, - }, -} +require("lze").load({ + { + "nvim-lspconfig", + event = "FileType", + after = function(plugin) + -- Just register configs, don't enable yet + for server_name, cfg in pairs(servers) do + vim.lsp.config(server_name, { + capabilities = require("lsp.capabilities").get(server_name), + settings = (cfg or {}).settings, + filetypes = (cfg or {}).filetypes, + cmd = (cfg or {}).cmd, + root_pattern = (cfg or {}).root_pattern, + }) + end + -- Enable on-demand per filetype + for server_name, cfg in pairs(servers) do + local filetypes = cfg.filetypes or vim.lsp.config[server_name].filetypes + if filetypes then + vim.api.nvim_create_autocmd("FileType", { + pattern = filetypes, + callback = function() + vim.lsp.enable(server_name) + end, + }) + end + end + end, + }, +}) diff --git a/homemanager/vim/lua/plugins/comment.lua b/homemanager/vim/lua/plugins/comment.lua new file mode 100644 index 0000000..caae704 --- /dev/null +++ b/homemanager/vim/lua/plugins/comment.lua @@ -0,0 +1,23 @@ +return { + { + "comment.nvim", + event = { "BufReadPost", "BufNewFile" }, + after = function(plugin) + require("Comment").setup({ + toggler = { + line = "cc", + block = "bc", + }, + opleader = { + line = "c", + block = "b", + }, + extra = { + above = "c", + below = "co", + eol = "cA", + }, + }) + end, + }, +} diff --git a/homemanager/vim/lua/plugins/format.lua b/homemanager/vim/lua/plugins/format.lua new file mode 100644 index 0000000..c6caf1c --- /dev/null +++ b/homemanager/vim/lua/plugins/format.lua @@ -0,0 +1,33 @@ +-- docs -> https://github.com/stevearc/conform.nvim +return { + { + "conform.nvim", + enabled = nixCats("format") or false, + keys = { + { "p", desc = "Format File (pretty :3)" }, + }, + after = function(plugin) + local conform = require("conform") + + conform.setup({ + formatters_by_ft = { + lua = nixCats("lang.lua") and { "stylua" } or nil, + nix = nixCats("lang.nix") and { "nixfmt" } or nil, + rust = nixCats("lang.rust") and { "rustfmt", lsp_format = "fallback" } or nil, + haskell = nixCats("lang.haskell") and { "ormolu" } or nil, + }, + format_on_save = { + timeout_ms = 500, + }, + }) + + vim.keymap.set({ "n", "v" }, "p", function() + conform.format({ + lsp_fallback = false, + async = false, + timeout_ms = 1000, + }) + end, { desc = "Format File (pretty :3)" }) + end, + }, +} diff --git a/homemanager/vim/lua/plugins/init.lua b/homemanager/vim/lua/plugins/init.lua index 20c38db..a42487b 100644 --- a/homemanager/vim/lua/plugins/init.lua +++ b/homemanager/vim/lua/plugins/init.lua @@ -1,8 +1,10 @@ -require("lze").load { - { import = "plugins.dressing", }, - { import = "plugins.telescope", }, - { import = "plugins.treesitter", }, - { import = "plugins.fyler", }, - { import = "plugins.mini-hipatterns", }, - --{ import = "plugins.neocord", }, -} +require("lze").load({ + { import = "plugins.dressing" }, + { import = "plugins.telescope" }, + { import = "plugins.treesitter" }, + { import = "plugins.fyler" }, + { import = "plugins.mini-hipatterns" }, + { import = "plugins.orgmode" }, + { import = "plugins.format" }, + { import = "plugins.comment" }, +}) diff --git a/homemanager/vim/lua/plugins/neocord.lua b/homemanager/vim/lua/plugins/neocord.lua deleted file mode 100644 index 5efb242..0000000 --- a/homemanager/vim/lua/plugins/neocord.lua +++ /dev/null @@ -1,5 +0,0 @@ -return { - { - "neocord", - }, -} diff --git a/homemanager/vim/lua/plugins/orgmode.lua b/homemanager/vim/lua/plugins/orgmode.lua new file mode 100644 index 0000000..aae46cb --- /dev/null +++ b/homemanager/vim/lua/plugins/orgmode.lua @@ -0,0 +1,16 @@ +# options: https://github.com/nvim-orgmode/orgmode/blob/master/docs/installation.org +return { + { + "nvim-orgmode/orgmode", + event = { "FileType" }, + ft = { "org" }, + after = function(plugin) + require("orgmode").setup({ + org_agenda_files = "~/.orgmode/**/*", + org_default_notes_file = "~/.orgmode/refile.org", + }) + + vim.lsp.enable("org") + end, + }, +} diff --git a/homemanager/vim/lua/plugins/telescope.lua b/homemanager/vim/lua/plugins/telescope.lua index 919f3bd..a61f19c 100644 --- a/homemanager/vim/lua/plugins/telescope.lua +++ b/homemanager/vim/lua/plugins/telescope.lua @@ -1,36 +1,78 @@ return { - { - "telescope.nvim", - cmd = { "Telescope" }, - keys = { - { "f", function() return require('telescope.builtin').find_files() end, mode = {"n"}, desc = 'Telescope search [F]iles' }, - { "tr", function() return require('telescope.builtin').oldfiles() end, mode = {"n"}, desc = '[T]elescope search [R]ecent files' }, - { "ts", function() return require('telescope.builtin').live_grep() end, mode = {"n"}, desc = '[T]elescope [S]earch cwd with grep' }, - { "tw", function() return require('telescope.builtin').grep_string() end, mode = {"n"}, desc = '[T]elescope search current [W]ord' }, - { "tk", function() return require('telescope.builtin').keymaps() end, mode = {"n"}, desc = '[T]elescope search [K]eymaps' }, - { "tb", function() return require('telescope.builtin').buffers() end, mode = {"n"}, desc = '[T]elescope search [B]uffers' }, - }, - load = function (name) - vim.cmd.packadd(name) - vim.cmd.packadd("telescope-fzf-native.nvim") - end, - after = function(plugin) - local telescope = require("telescope") - local actions = require("telescope.actions") + { + "telescope.nvim", + cmd = { "Telescope" }, + keys = { + { + "f", + function() + return require("telescope.builtin").find_files() + end, + mode = { "n" }, + desc = "Telescope search [F]iles", + }, + { + "tr", + function() + return require("telescope.builtin").oldfiles() + end, + mode = { "n" }, + desc = "[T]elescope search [R]ecent files", + }, + { + "ts", + function() + return require("telescope.builtin").live_grep() + end, + mode = { "n" }, + desc = "[T]elescope [S]earch cwd with grep", + }, + { + "tw", + function() + return require("telescope.builtin").grep_string() + end, + mode = { "n" }, + desc = "[T]elescope search current [W]ord", + }, + { + "tk", + function() + return require("telescope.builtin").keymaps() + end, + mode = { "n" }, + desc = "[T]elescope search [K]eymaps", + }, + { + "tb", + function() + return require("telescope.builtin").buffers() + end, + mode = { "n" }, + desc = "[T]elescope search [B]uffers", + }, + }, + load = function(name) + vim.cmd.packadd(name) + vim.cmd.packadd("telescope-fzf-native.nvim") + end, + after = function(plugin) + local telescope = require("telescope") + local actions = require("telescope.actions") - telescope.setup { - defaults = { - mappings = { - i = { - [""] = actions.move_selection_previous, -- move to prev result - [""] = actions.move_selection_next, -- move to next result - [""] = actions.send_selected_to_qflist + actions.open_qflist - } - } - } - } + telescope.setup({ + defaults = { + mappings = { + i = { + [""] = actions.move_selection_previous, -- move to prev result + [""] = actions.move_selection_next, -- move to next result + [""] = actions.send_selected_to_qflist + actions.open_qflist, + }, + }, + }, + }) - pcall(telescope.load_extension, "fzf") - end, - }, + pcall(telescope.load_extension, "fzf") + end, + }, } diff --git a/homemanager/vim/lua/plugins/treesitter.lua b/homemanager/vim/lua/plugins/treesitter.lua index 489ecf9..55984c7 100644 --- a/homemanager/vim/lua/plugins/treesitter.lua +++ b/homemanager/vim/lua/plugins/treesitter.lua @@ -2,94 +2,94 @@ -- https://github.com/BirdeeHub/nixCats-nvim/blob/3c9bc4d7123e1b48d92f25ba505b889af541e897/templates/example/lua/myLuaConf/plugins/treesitter.lua return { - { - "nvim-treesitter", - lazy = false, - after = function (plugin) - --@param buf integer - --@param language string - local function treesitter_try_attach(buf, language) - --check if parser exists and load it - if not vim.treesitter.language.add(language) then - return - end + { + "nvim-treesitter", + lazy = false, + after = function(plugin) + --@param buf integer + --@param language string + local function treesitter_try_attach(buf, language) + --check if parser exists and load it + if not vim.treesitter.language.add(language) then + return + end - -- enables syntax highlight and other treesitter features - vim.treesitter.start(buf, language) + -- enables syntax highlight and other treesitter features + vim.treesitter.start(buf, language) - -- enables treesitter based folds - vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" + -- enables treesitter based folds + vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" - -- enables treesiter based indentation - vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" - end + -- enables treesiter based indentation + vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" + end - local available_parsers = require("nvim-treesitter").get_available() - vim.api.nvim_create_autocmd("FileType", { - callback = function(args) - local buf, filetype = args.buf, args.match - local language = vim.treesitter.language.get_lang(filetype) - if not language then - return - end + local available_parsers = require("nvim-treesitter").get_available() + vim.api.nvim_create_autocmd("FileType", { + callback = function(args) + local buf, filetype = args.buf, args.match + local language = vim.treesitter.language.get_lang(filetype) + if not language then + return + end - local installed_parsers = require("nvim-treesitter").get_installed("parsers") + local installed_parsers = require("nvim-treesitter").get_installed("parsers") - if vim.tbl_contains(installed_parsers, language) then - -- enable the parser if it is installed - treesitter_try_attach(buf, language) - elseif vim.tbl_contains(available_parsers, language) then - -- if a parser is available in `nvim-treesitter` enable it after ensuring it is installed - require("nvim-treesitter").install(language):await(function() - treesitter_try_attach(buf, language) - end) - else - -- try to enable treesitter features in case the parser exists but is not available from `nvim-treesitter` - treesitter_try_attach(buf, language) - end - end, - }) - end, - }, - { - "nvim-treesitter-textobjects", - lazy = false, - before = function(plugin) - vim.g.no_plugin_maps = true - end, - after = function(plugin) - require("nvim-treesitter-textobjects").setup { - select = { - lookahead = true, - selection_modes = { - ['@parameter.outer'] = 'v', -- charwise - ['@function.outer'] = 'V', -- linewise - }, - include_surrounding_whitespace = false, + if vim.tbl_contains(installed_parsers, language) then + -- enable the parser if it is installed + treesitter_try_attach(buf, language) + elseif vim.tbl_contains(available_parsers, language) then + -- if a parser is available in `nvim-treesitter` enable it after ensuring it is installed + require("nvim-treesitter").install(language):await(function() + treesitter_try_attach(buf, language) + end) + else + -- try to enable treesitter features in case the parser exists but is not available from `nvim-treesitter` + treesitter_try_attach(buf, language) + end + end, + }) + end, }, - } + { + "nvim-treesitter-textobjects", + lazy = false, + before = function(plugin) + vim.g.no_plugin_maps = true + end, + after = function(plugin) + require("nvim-treesitter-textobjects").setup({ + select = { + lookahead = true, + selection_modes = { + ["@parameter.outer"] = "v", -- charwise + ["@function.outer"] = "V", -- linewise + }, + include_surrounding_whitespace = false, + }, + }) - -- keymaps - vim.keymap.set({ "x", "o" }, "am", function() - require "nvim-treesitter-textobjects.select".select_textobject("@function.outer", "textobjects") - end) - vim.keymap.set({ "x", "o" }, "im", function() - require "nvim-treesitter-textobjects.select".select_textobject("@function.inner", "textobjects") - end) - vim.keymap.set({ "x", "o" }, "ac", function() - require "nvim-treesitter-textobjects.select".select_textobject("@class.outer", "textobjects") - end) - vim.keymap.set({ "x", "o" }, "ic", function() - require "nvim-treesitter-textobjects.select".select_textobject("@class.inner", "textobjects") - end) - -- You can also use captures from other query groups like `locals.scm` - vim.keymap.set({ "x", "o" }, "as", function() - require "nvim-treesitter-textobjects.select".select_textobject("@local.scope", "locals") - end) + -- keymaps + vim.keymap.set({ "x", "o" }, "am", function() + require("nvim-treesitter-textobjects.select").select_textobject("@function.outer", "textobjects") + end) + vim.keymap.set({ "x", "o" }, "im", function() + require("nvim-treesitter-textobjects.select").select_textobject("@function.inner", "textobjects") + end) + vim.keymap.set({ "x", "o" }, "ac", function() + require("nvim-treesitter-textobjects.select").select_textobject("@class.outer", "textobjects") + end) + vim.keymap.set({ "x", "o" }, "ic", function() + require("nvim-treesitter-textobjects.select").select_textobject("@class.inner", "textobjects") + end) + -- You can also use captures from other query groups like `locals.scm` + vim.keymap.set({ "x", "o" }, "as", function() + require("nvim-treesitter-textobjects.select").select_textobject("@local.scope", "locals") + end) - -- NOTE: for more textobjects options, see the following link. - -- This template is using the new `main` branch of the repo. - -- https://github.com/nvim-treesitter/nvim-treesitter-textobjects/tree/main - end, - }, + -- NOTE: for more textobjects options, see the following link. + -- This template is using the new `main` branch of the repo. + -- https://github.com/nvim-treesitter/nvim-treesitter-textobjects/tree/main + end, + }, } diff --git a/homemanager/vim/nixcats.nix b/homemanager/vim/nixcats.nix index 02d3581..32b54cc 100644 --- a/homemanager/vim/nixcats.nix +++ b/homemanager/vim/nixcats.nix @@ -58,14 +58,17 @@ in lang = with pkgs; { lua = [ lua-language-server + stylua ]; nix = [ nil nix-doc + nixfmt ]; rust = with pkgs; [ cargo rust-analyzer + rustfmt ]; haskell = with pkgs; [ haskell-language-server @@ -82,7 +85,6 @@ in nvim-web-devicons base16-nvim mini-nvim - orgmode (pkgs.vimUtils.buildVimPlugin { pname = "candyland-nvim"; @@ -100,28 +102,29 @@ in nvim-treesitter.withAllGrammars ]; }; - optionalPlugins = { - general = with pkgs.vimPlugins; [ + optionalPlugins = with pkgs.vimPlugins; { + general = [ + orgmode ]; - ui = with pkgs.vimPlugins; [ + ui = [ dressing-nvim ]; - qol = with pkgs.vimPlugins; [ + qol = [ undotree mini-hipatterns ]; - telescope = with pkgs.vimPlugins; [ + telescope = [ telescope-nvim telescope-fzf-native-nvim telescope-ui-select-nvim ]; - fyler = with pkgs.vimPlugins; [ + fyler = [ fyler-nvim ]; - lsp = with pkgs.vimPlugins; [ + lsp = [ nvim-lspconfig ]; - completion = with pkgs.vimPlugins; [ + completion = [ blink-cmp nvim-cmp luasnip @@ -136,7 +139,13 @@ in cmp-cmdline-history lspkind-nvim ]; - lang = with pkgs.vimPlugins; { + format = [ + conform-nvim + ]; + comment = [ + comment-nvim + ]; + lang = { }; }; @@ -187,6 +196,8 @@ in fyler = true; lsp = true; completion = true; + format = true; + comment = true; treesitter = true; lang = {