clean things up

This commit is contained in:
Youwen Wu 2024-10-10 01:14:12 -07:00
parent 7da9807f23
commit 434ace2a77
Signed by: youwen5
GPG key ID: 865658ED1FE61EC3
7 changed files with 160 additions and 286 deletions

163
flake.nix
View file

@ -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!"; description = "A Lua-natic's neovim flake, with extra cats! nixCats!";
@ -38,20 +19,7 @@
url = "github:linrongbin16/lsp-progress.nvim"; url = "github:linrongbin16/lsp-progress.nvim";
flake = false; 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 = outputs =
{ {
self, self,
@ -63,40 +31,21 @@
inherit (nixCats) utils; inherit (nixCats) utils;
luaPath = "${./.}"; luaPath = "${./.}";
forEachSystem = utils.eachSystem nixpkgs.lib.platforms.all; 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 = { extra_pkg_config = {
# allowUnfree = true; # 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 inherit
(forEachSystem ( (forEachSystem (
system: system:
let let
# see :help nixCats.flake.outputs.overlays dependencyOverlays = (import ./nix/overlays.nix) ++ [
dependencyOverlays = # (import ./overlays inputs) ++ # This overlay grabs all the inputs named in the format
[ # `plugins-<pluginName>`
# This overlay grabs all the inputs named in the format # Once we add this overlay to our nixpkgs, we are able to
# `plugins-<pluginName>` # use `pkgs.neovimPlugins`, which is a set of our plugins.
# Once we add this overlay to our nixpkgs, we are able to (utils.standardPluginOverlay inputs)
# use `pkgs.neovimPlugins`, which is a set of our plugins. # add any flake overlays here.
(utils.standardPluginOverlay inputs) ];
# add any flake overlays here.
];
in in
# these overlays will be wrapped with ${system} # these overlays will be wrapped with ${system}
# and we will call the same utils.eachSystem function # and we will call the same utils.eachSystem function
@ -119,27 +68,9 @@
... ...
}@packageDef: }@packageDef:
{ {
# to define and use a new category, simply add a new list to a set here, # lspsAndRuntimeDeps: this section is for dependencies that should be
# and later, you will include categoryname = true; in the set you # available at RUN TIME for plugins. Will be available to PATH within
# provide when you build the package using this builder function. # neovim terminal this includes LSPs
# 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 = { lspsAndRuntimeDeps = {
general = with pkgs; [ general = with pkgs; [
# essential # essential
@ -157,6 +88,8 @@
rustfmt rustfmt
black black
stylua stylua
marksman
tinymist
]; ];
}; };
@ -244,67 +177,19 @@
# libgit2 # 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 :!<packagename>-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 = { packageDefinitions = {
# These are the names of your packages
# you can include as many as you wish.
nvim = nvim =
{ pkgs, ... }: { pkgs, ... }:
{ {
# they contain a settings set defined above
# see :help nixCats.flake.outputs.settings
settings = { settings = {
wrapRc = true; wrapRc = true;
# IMPORTANT:
# your alias may not conflict with your other packages.
aliases = [ aliases = [
"vim" "vim"
"vi" "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 = { categories = {
general = true; general = true;
gitPlugins = 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"; defaultPackageName = "nvim";
in in
# see :help nixCats.flake.outputs.exports
forEachSystem ( forEachSystem (
system: system:
let let
@ -334,20 +215,11 @@
; ;
} categoryDefinitions packageDefinitions; } categoryDefinitions packageDefinitions;
defaultPackage = nixCatsBuilder defaultPackageName; 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; }; pkgs = import nixpkgs { inherit system; };
in 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; packages = utils.mkAllWithDefault defaultPackage;
# choose your package for devShell
# and add whatever else you want in it.
devShells = { devShells = {
default = pkgs.mkShell { default = pkgs.mkShell {
name = defaultPackageName; 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 { overlays = utils.makeOverlays luaPath {
inherit nixpkgs dependencyOverlays extra_pkg_config; inherit nixpkgs dependencyOverlays extra_pkg_config;
} categoryDefinitions packageDefinitions defaultPackageName; } categoryDefinitions packageDefinitions defaultPackageName;
# we also export a nixos module to allow reconfiguration from configuration.nix
nixosModules.default = utils.mkNixosModules { nixosModules.default = utils.mkNixosModules {
inherit inherit
defaultPackageName defaultPackageName
@ -384,7 +250,6 @@
nixpkgs nixpkgs
; ;
}; };
# and the same for home manager
homeModule = utils.mkHomeModules { homeModule = utils.mkHomeModules {
inherit inherit
defaultPackageName defaultPackageName

View file

@ -1,26 +1,28 @@
local lspconfig = require("lspconfig") local lspconfig = require("lspconfig")
lspconfig.lua_ls.setup({ lspconfig.lua_ls.setup({
settings = { settings = {
Lua = { Lua = {
runtime = { runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
version = "LuaJIT", version = "LuaJIT",
}, },
diagnostics = { diagnostics = {
-- Get the language server to recognize the `vim` global -- Get the language server to recognize the `vim` global
globals = { "vim", "nixCats", "MiniBufremove" }, globals = { "vim", "nixCats", "MiniBufremove" },
}, },
workspace = { workspace = {
-- Make the server aware of Neovim runtime files -- Make the server aware of Neovim runtime files
library = vim.api.nvim_get_runtime_file("", true), library = vim.api.nvim_get_runtime_file("", true),
}, },
-- Do not send telemetry data containing a randomized but unique identifier -- Do not send telemetry data containing a randomized but unique identifier
telemetry = { telemetry = {
enable = false, enable = false,
}, },
},
}, },
},
}) })
lspconfig.nixd.setup({}) lspconfig.nixd.setup({})
lspconfig.marksman.setup({})
lspconfig.tinymist.setup({})

View file

@ -0,0 +1,7 @@
return {
"nvim-autopairs",
event = "BufEnter",
after = function()
require("nvim-autopairs").setup()
end,
}

60
lua/plugins/gitsigns.lua Normal file
View file

@ -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", "<leader>gs", gitsigns.stage_hunk)
map("n", "<leader>gr", gitsigns.reset_hunk)
map("v", "<leader>gs", function()
gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
end)
map("v", "<leader>gr", function()
gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
end)
map("n", "<leader>gS", gitsigns.stage_buffer)
map("n", "<leader>gu", gitsigns.undo_stage_hunk)
map("n", "<leader>gR", gitsigns.reset_buffer)
map("n", "<leader>gp", gitsigns.preview_hunk)
map("n", "<leader>gb", function()
gitsigns.blame_line({ full = true })
end)
map("n", "<leader>gb", gitsigns.toggle_current_line_blame)
map("n", "<leader>gd", gitsigns.diffthis)
map("n", "<leader>gD", function()
gitsigns.diffthis("~")
end)
map("n", "<leader>gtd", gitsigns.toggle_deleted)
-- Text object
map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>")
end,
})
end,
}

View file

@ -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,
}

View file

@ -5,65 +5,10 @@ return {
require("plugins.harpoon"), require("plugins.harpoon"),
require("plugins.lualine"), require("plugins.lualine"),
require("plugins.conform"), require("plugins.conform"),
{ require("plugins.lsp-progress"),
"lsp-progress", require("plugins.gitsigns"),
after = function() require("plugins.autopairs"),
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,
},
{ "telescope-ui-select.nvim", priority = 70 }, { "telescope-ui-select.nvim", priority = 70 },
{
"nvim-autopairs",
event = "BufEnter",
after = function()
require("nvim-autopairs").setup()
end,
},
{ {
"nvim-lspconfig", "nvim-lspconfig",
event = "BufEnter", event = "BufEnter",
@ -111,6 +56,7 @@ return {
}, },
{ {
"typst-preview", "typst-preview",
filetypes = { "*.typ" },
after = function() after = function()
require("typst-preview").setup({ require("typst-preview").setup({
dependencies_bin = { dependencies_bin = {
@ -220,66 +166,6 @@ return {
require("mini.hipatterns").setup() require("mini.hipatterns").setup()
end, 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", "<leader>gs", gitsigns.stage_hunk)
map("n", "<leader>gr", gitsigns.reset_hunk)
map("v", "<leader>gs", function()
gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
end)
map("v", "<leader>gr", function()
gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
end)
map("n", "<leader>gS", gitsigns.stage_buffer)
map("n", "<leader>gu", gitsigns.undo_stage_hunk)
map("n", "<leader>gR", gitsigns.reset_buffer)
map("n", "<leader>gp", gitsigns.preview_hunk)
map("n", "<leader>gb", function()
gitsigns.blame_line({ full = true })
end)
map("n", "<leader>gb", gitsigns.toggle_current_line_blame)
map("n", "<leader>gd", gitsigns.diffthis)
map("n", "<leader>gD", function()
gitsigns.diffthis("~")
end)
map("n", "<leader>gtd", gitsigns.toggle_deleted)
-- Text object
map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>")
end,
})
end,
},
{ {
"neogit", "neogit",
cmd = "Neogit", cmd = "Neogit",

3
nix/overlays.nix Normal file
View file

@ -0,0 +1,3 @@
# Overlays for building custom non-trivial plugins
[ (self: super: { }) ]