From 434ace2a77e6e8601f2174ce7db6c01bff11b83a Mon Sep 17 00:00:00 2001 From: Youwen Wu Date: Thu, 10 Oct 2024 01:14:12 -0700 Subject: [PATCH] clean things up --- flake.nix | 163 +++-------------------------------- lua/lsp/init.lua | 40 +++++---- lua/plugins/autopairs.lua | 7 ++ lua/plugins/gitsigns.lua | 60 +++++++++++++ lua/plugins/lsp-progress.lua | 51 +++++++++++ lua/plugins/lz-spec.lua | 122 +------------------------- nix/overlays.nix | 3 + 7 files changed, 160 insertions(+), 286 deletions(-) create mode 100644 lua/plugins/autopairs.lua create mode 100644 lua/plugins/gitsigns.lua create mode 100644 lua/plugins/lsp-progress.lua create mode 100644 nix/overlays.nix diff --git a/flake.nix b/flake.nix index 594bf06..b172174 100644 --- a/flake.nix +++ b/flake.nix @@ -1,22 +1,3 @@ -# Copyright (c) 2023 BirdeeHub -# Licensed under the MIT license - -# This is an empty nixCats config. -# you may import this template directly into your nvim folder -# and then add plugins to categories here, -# and call the plugins with their default functions -# within your lua, rather than through the nvim package manager's method. -# Use the help, and the example repository https://github.com/BirdeeHub/nixCats-nvim - -# It allows for easy adoption of nix, -# while still providing all the extra nix features immediately. -# Configure in lua, check for a few categories, set a few settings, -# output packages with combinations of those categories and settings. - -# All the same options you make here will be automatically exported in a form available -# in home manager and in nixosModules, as well as from other flakes. -# each section is tagged with its relevant help section. - { description = "A Lua-natic's neovim flake, with extra cats! nixCats!"; @@ -38,20 +19,7 @@ url = "github:linrongbin16/lsp-progress.nvim"; flake = false; }; - - # see :help nixCats.flake.inputs - # If you want your plugin to be loaded by the standard overlay, - # i.e. if it wasnt on nixpkgs, but doesnt have an extra build step. - # Then you should name it "plugins-something" - # If you wish to define a custom build step not handled by nixpkgs, - # then you should name it in a different format, and deal with that in the - # overlay defined for custom builds in the overlays directory. - # for specific tags, branches and commits, see: - # https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-flake.html#examples - }; - - # see :help nixCats.flake.outputs outputs = { self, @@ -63,40 +31,21 @@ inherit (nixCats) utils; luaPath = "${./.}"; forEachSystem = utils.eachSystem nixpkgs.lib.platforms.all; - # the following extra_pkg_config contains any values - # which you want to pass to the config set of nixpkgs - # import nixpkgs { config = extra_pkg_config; inherit system; } - # will not apply to module imports - # as that will have your system values extra_pkg_config = { # allowUnfree = true; }; - # sometimes our overlays require a ${system} to access the overlay. - # management of this variable is one of the harder parts of using flakes. - - # so I have done it here in an interesting way to keep it out of the way. - - # First, we will define just our overlays per system. - # later we will pass them into the builder, and the resulting pkgs set - # will get passed to the categoryDefinitions and packageDefinitions - # which follow this section. - - # this allows you to use ${pkgs.system} whenever you want in those sections - # without fear. inherit (forEachSystem ( system: let - # see :help nixCats.flake.outputs.overlays - dependencyOverlays = # (import ./overlays inputs) ++ - [ - # This overlay grabs all the inputs named in the format - # `plugins-` - # Once we add this overlay to our nixpkgs, we are able to - # use `pkgs.neovimPlugins`, which is a set of our plugins. - (utils.standardPluginOverlay inputs) - # add any flake overlays here. - ]; + dependencyOverlays = (import ./nix/overlays.nix) ++ [ + # This overlay grabs all the inputs named in the format + # `plugins-` + # Once we add this overlay to our nixpkgs, we are able to + # use `pkgs.neovimPlugins`, which is a set of our plugins. + (utils.standardPluginOverlay inputs) + # add any flake overlays here. + ]; in # these overlays will be wrapped with ${system} # and we will call the same utils.eachSystem function @@ -119,27 +68,9 @@ ... }@packageDef: { - # to define and use a new category, simply add a new list to a set here, - # and later, you will include categoryname = true; in the set you - # provide when you build the package using this builder function. - # see :help nixCats.flake.outputs.packageDefinitions for info on that section. - - # propagatedBuildInputs: - # this section is for dependencies that should be available - # at BUILD TIME for plugins. WILL NOT be available to PATH - # However, they WILL be available to the shell - # and neovim path when using nix develop - propagatedBuildInputs = { - general = - with pkgs; - [ - ]; - }; - - # lspsAndRuntimeDeps: - # this section is for dependencies that should be available - # at RUN TIME for plugins. Will be available to PATH within neovim terminal - # this includes LSPs + # lspsAndRuntimeDeps: this section is for dependencies that should be + # available at RUN TIME for plugins. Will be available to PATH within + # neovim terminal this includes LSPs lspsAndRuntimeDeps = { general = with pkgs; [ # essential @@ -157,6 +88,8 @@ rustfmt black stylua + marksman + tinymist ]; }; @@ -244,67 +177,19 @@ # libgit2 ]; }; - - # environmentVariables: - # this section is for environmentVariables that should be available - # at RUN TIME for plugins. Will be available to path within neovim terminal - # environmentVariables = { - # test = { - # CATTESTVAR = "It worked!"; - # }; - # }; - - # If you know what these are, you can provide custom ones by category here. - # If you dont, check this link out: - # https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/setup-hooks/make-wrapper.sh - # extraWrapperArgs = { - # test = [ - # ''--set CATTESTVAR2 "It worked again!"'' - # ]; - # }; - - # lists of the functions you would have passed to - # python.withPackages or lua.withPackages - - # get the path to this python environment - # in your lua config via - # vim.g.python3_host_prog - # or run from nvim terminal via :!-python3 - # extraPython3Packages = { - # test = (_: [ ]); - # }; - # # populates $LUA_PATH and $LUA_CPATH - # extraLuaPackages = { - # test = [ (_: [ ]) ]; - # }; }; - - # And then build a package with specific categories from above here: - # All categories you wish to include must be marked true, - # but false may be omitted. - # This entire set is also passed to nixCats for querying within the lua. - - # see :help nixCats.flake.outputs.packageDefinitions packageDefinitions = { - # These are the names of your packages - # you can include as many as you wish. nvim = { pkgs, ... }: { - # they contain a settings set defined above - # see :help nixCats.flake.outputs.settings settings = { wrapRc = true; - # IMPORTANT: - # your alias may not conflict with your other packages. aliases = [ "vim" "vi" ]; - # neovim-unwrapped = inputs.neovim-nightly-overlay.packages.${pkgs.system}.neovim; + neovim-unwrapped = pkgs.neovim-unwrapped; }; - # and a set of categories that you want - # (and other information to pass to lua) categories = { general = true; gitPlugins = true; @@ -316,12 +201,8 @@ }; }; }; - # In this section, the main thing you will need to do is change the default package name - # to the name of the packageDefinitions entry you wish to use as the default. defaultPackageName = "nvim"; in - - # see :help nixCats.flake.outputs.exports forEachSystem ( system: let @@ -334,20 +215,11 @@ ; } categoryDefinitions packageDefinitions; defaultPackage = nixCatsBuilder defaultPackageName; - # this is just for using utils such as pkgs.mkShell - # The one used to build neovim is resolved inside the builder - # and is passed to our categoryDefinitions and packageDefinitions pkgs = import nixpkgs { inherit system; }; in { - # these outputs will be wrapped with ${system} by utils.eachSystem - - # this will make a package out of each of the packageDefinitions defined above - # and set the default package to the one passed in here. packages = utils.mkAllWithDefault defaultPackage; - # choose your package for devShell - # and add whatever else you want in it. devShells = { default = pkgs.mkShell { name = defaultPackageName; @@ -363,16 +235,10 @@ } ) // { - - # these outputs will be NOT wrapped with ${system} - - # this will make an overlay out of each of the packageDefinitions defined above - # and set the default overlay to the one named here. overlays = utils.makeOverlays luaPath { inherit nixpkgs dependencyOverlays extra_pkg_config; } categoryDefinitions packageDefinitions defaultPackageName; - # we also export a nixos module to allow reconfiguration from configuration.nix nixosModules.default = utils.mkNixosModules { inherit defaultPackageName @@ -384,7 +250,6 @@ nixpkgs ; }; - # and the same for home manager homeModule = utils.mkHomeModules { inherit defaultPackageName diff --git a/lua/lsp/init.lua b/lua/lsp/init.lua index ba14a63..6eaa588 100644 --- a/lua/lsp/init.lua +++ b/lua/lsp/init.lua @@ -1,26 +1,28 @@ local lspconfig = require("lspconfig") lspconfig.lua_ls.setup({ - settings = { - Lua = { - runtime = { - -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) - version = "LuaJIT", - }, - diagnostics = { - -- Get the language server to recognize the `vim` global - globals = { "vim", "nixCats", "MiniBufremove" }, - }, - workspace = { - -- Make the server aware of Neovim runtime files - library = vim.api.nvim_get_runtime_file("", true), - }, - -- Do not send telemetry data containing a randomized but unique identifier - telemetry = { - enable = false, - }, - }, + settings = { + Lua = { + runtime = { + -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) + version = "LuaJIT", + }, + diagnostics = { + -- Get the language server to recognize the `vim` global + globals = { "vim", "nixCats", "MiniBufremove" }, + }, + workspace = { + -- Make the server aware of Neovim runtime files + library = vim.api.nvim_get_runtime_file("", true), + }, + -- Do not send telemetry data containing a randomized but unique identifier + telemetry = { + enable = false, + }, }, + }, }) lspconfig.nixd.setup({}) +lspconfig.marksman.setup({}) +lspconfig.tinymist.setup({}) diff --git a/lua/plugins/autopairs.lua b/lua/plugins/autopairs.lua new file mode 100644 index 0000000..dc79142 --- /dev/null +++ b/lua/plugins/autopairs.lua @@ -0,0 +1,7 @@ +return { + "nvim-autopairs", + event = "BufEnter", + after = function() + require("nvim-autopairs").setup() + end, +} diff --git a/lua/plugins/gitsigns.lua b/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..c7ed690 --- /dev/null +++ b/lua/plugins/gitsigns.lua @@ -0,0 +1,60 @@ +return { + "gitsigns.nvim", + event = "BufEnter", + after = function() + require("gitsigns").setup({ + on_attach = function(bufnr) + local gitsigns = require("gitsigns") + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Navigation + map("n", "]c", function() + if vim.wo.diff then + vim.cmd.normal({ "]c", bang = true }) + else + gitsigns.nav_hunk("next") + end + end) + + map("n", "[c", function() + if vim.wo.diff then + vim.cmd.normal({ "[c", bang = true }) + else + gitsigns.nav_hunk("prev") + end + end) + + -- Actions + map("n", "gs", gitsigns.stage_hunk) + map("n", "gr", gitsigns.reset_hunk) + map("v", "gs", function() + gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end) + map("v", "gr", function() + gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end) + map("n", "gS", gitsigns.stage_buffer) + map("n", "gu", gitsigns.undo_stage_hunk) + map("n", "gR", gitsigns.reset_buffer) + map("n", "gp", gitsigns.preview_hunk) + map("n", "gb", function() + gitsigns.blame_line({ full = true }) + end) + map("n", "gb", gitsigns.toggle_current_line_blame) + map("n", "gd", gitsigns.diffthis) + map("n", "gD", function() + gitsigns.diffthis("~") + end) + map("n", "gtd", gitsigns.toggle_deleted) + + -- Text object + map({ "o", "x" }, "ih", ":Gitsigns select_hunk") + end, + }) + end, +} diff --git a/lua/plugins/lsp-progress.lua b/lua/plugins/lsp-progress.lua new file mode 100644 index 0000000..11d070d --- /dev/null +++ b/lua/plugins/lsp-progress.lua @@ -0,0 +1,51 @@ +return { + "lsp-progress", + after = function() + require("lsp-progress").setup({ + client_format = function(client_name, spinner, series_messages) + if #series_messages == 0 then + return nil + end + return { + name = client_name, + body = spinner .. " " .. table.concat(series_messages, ", "), + } + end, + format = function(client_messages) + --- @param name string + --- @param msg string? + --- @return string + local function stringify(name, msg) + return msg and string.format("%s %s", name, msg) or name + end + + local sign = "󰆧" -- nf-fa-gear \uf013 + local lsp_clients = vim.lsp.get_clients() + local messages_map = {} + for _, climsg in ipairs(client_messages) do + messages_map[climsg.name] = climsg.body + end + + if #lsp_clients > 0 then + table.sort(lsp_clients, function(a, b) + return a.name < b.name + end) + local builder = {} + for _, cli in ipairs(lsp_clients) do + if type(cli) == "table" and type(cli.name) == "string" and string.len(cli.name) > 0 then + if messages_map[cli.name] then + table.insert(builder, stringify(cli.name, messages_map[cli.name])) + else + table.insert(builder, stringify(cli.name)) + end + end + end + if #builder > 0 then + return sign .. " " .. table.concat(builder, ", ") + end + end + return "" + end, + }) + end, +} diff --git a/lua/plugins/lz-spec.lua b/lua/plugins/lz-spec.lua index 7f193a3..eaa25f9 100644 --- a/lua/plugins/lz-spec.lua +++ b/lua/plugins/lz-spec.lua @@ -5,65 +5,10 @@ return { require("plugins.harpoon"), require("plugins.lualine"), require("plugins.conform"), - { - "lsp-progress", - after = function() - require("lsp-progress").setup({ - client_format = function(client_name, spinner, series_messages) - if #series_messages == 0 then - return nil - end - return { - name = client_name, - body = spinner .. " " .. table.concat(series_messages, ", "), - } - end, - format = function(client_messages) - --- @param name string - --- @param msg string? - --- @return string - local function stringify(name, msg) - return msg and string.format("%s %s", name, msg) or name - end - - local sign = "󰆧" -- nf-fa-gear \uf013 - local lsp_clients = vim.lsp.get_clients() - local messages_map = {} - for _, climsg in ipairs(client_messages) do - messages_map[climsg.name] = climsg.body - end - - if #lsp_clients > 0 then - table.sort(lsp_clients, function(a, b) - return a.name < b.name - end) - local builder = {} - for _, cli in ipairs(lsp_clients) do - if type(cli) == "table" and type(cli.name) == "string" and string.len(cli.name) > 0 then - if messages_map[cli.name] then - table.insert(builder, stringify(cli.name, messages_map[cli.name])) - else - table.insert(builder, stringify(cli.name)) - end - end - end - if #builder > 0 then - return sign .. " " .. table.concat(builder, ", ") - end - end - return "" - end, - }) - end, - }, + require("plugins.lsp-progress"), + require("plugins.gitsigns"), + require("plugins.autopairs"), { "telescope-ui-select.nvim", priority = 70 }, - { - "nvim-autopairs", - event = "BufEnter", - after = function() - require("nvim-autopairs").setup() - end, - }, { "nvim-lspconfig", event = "BufEnter", @@ -111,6 +56,7 @@ return { }, { "typst-preview", + filetypes = { "*.typ" }, after = function() require("typst-preview").setup({ dependencies_bin = { @@ -220,66 +166,6 @@ return { require("mini.hipatterns").setup() end, }, - { - "gitsigns.nvim", - event = "BufEnter", - after = function() - require("gitsigns").setup({ - on_attach = function(bufnr) - local gitsigns = require("gitsigns") - - local function map(mode, l, r, opts) - opts = opts or {} - opts.buffer = bufnr - vim.keymap.set(mode, l, r, opts) - end - - -- Navigation - map("n", "]c", function() - if vim.wo.diff then - vim.cmd.normal({ "]c", bang = true }) - else - gitsigns.nav_hunk("next") - end - end) - - map("n", "[c", function() - if vim.wo.diff then - vim.cmd.normal({ "[c", bang = true }) - else - gitsigns.nav_hunk("prev") - end - end) - - -- Actions - map("n", "gs", gitsigns.stage_hunk) - map("n", "gr", gitsigns.reset_hunk) - map("v", "gs", function() - gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) - end) - map("v", "gr", function() - gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) - end) - map("n", "gS", gitsigns.stage_buffer) - map("n", "gu", gitsigns.undo_stage_hunk) - map("n", "gR", gitsigns.reset_buffer) - map("n", "gp", gitsigns.preview_hunk) - map("n", "gb", function() - gitsigns.blame_line({ full = true }) - end) - map("n", "gb", gitsigns.toggle_current_line_blame) - map("n", "gd", gitsigns.diffthis) - map("n", "gD", function() - gitsigns.diffthis("~") - end) - map("n", "gtd", gitsigns.toggle_deleted) - - -- Text object - map({ "o", "x" }, "ih", ":Gitsigns select_hunk") - end, - }) - end, - }, { "neogit", cmd = "Neogit", diff --git a/nix/overlays.nix b/nix/overlays.nix new file mode 100644 index 0000000..39d9153 --- /dev/null +++ b/nix/overlays.nix @@ -0,0 +1,3 @@ +# Overlays for building custom non-trivial plugins + +[ (self: super: { }) ]