i love aurora <3
This commit is contained in:
parent
c9fa3dbe4c
commit
b795d6ca9a
17 changed files with 928 additions and 24 deletions
|
|
@ -12,6 +12,7 @@
|
||||||
../modules/term/foot.nix
|
../modules/term/foot.nix
|
||||||
|
|
||||||
../modules/editor/helix.nix
|
../modules/editor/helix.nix
|
||||||
|
../modules/editor/neovim
|
||||||
|
|
||||||
../modules/apps/firefox.nix
|
../modules/apps/firefox.nix
|
||||||
../modules/apps/thunderbird.nix
|
../modules/apps/thunderbird.nix
|
||||||
|
|
|
||||||
247
homes/modules/editor/neovim/default.nix
Normal file
247
homes/modules/editor/neovim/default.nix
Normal file
|
|
@ -0,0 +1,247 @@
|
||||||
|
# TODO: look into changing to this:
|
||||||
|
# https://github.com/BirdeeHub/nix-wrapper-modules
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
mpkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit
|
||||||
|
(inputs.nixcats)
|
||||||
|
utils
|
||||||
|
;
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
inputs.nixcats.homeModule
|
||||||
|
];
|
||||||
|
|
||||||
|
config = {
|
||||||
|
# this value, nixCats is the defaultPackageName you pass to mkNixosModules
|
||||||
|
# it will be the namespace for your options.
|
||||||
|
nixCats = {
|
||||||
|
enable = true;
|
||||||
|
nixpkgs_version = inputs.nixpkgs-unstable;
|
||||||
|
# this will add the overlays from ./overlays and also,
|
||||||
|
# add any plugins in inputs named "plugins-pluginName" to pkgs.neovimPlugins
|
||||||
|
# It will not apply to overall system, just nixCats.
|
||||||
|
addOverlays =
|
||||||
|
# (import ./overlays inputs) ++
|
||||||
|
[
|
||||||
|
(utils.standardPluginOverlay inputs)
|
||||||
|
];
|
||||||
|
# see the packageDefinitions below.
|
||||||
|
# This says which of those to install.
|
||||||
|
packageNames = ["cryvim"];
|
||||||
|
|
||||||
|
luaPath = "${./.}";
|
||||||
|
|
||||||
|
# the .replace vs .merge options are for modules based on existing configurations,
|
||||||
|
# they refer to how multiple categoryDefinitions get merged together by the module.
|
||||||
|
# for useage of this section, refer to :h nixCats.flake.outputs.categories
|
||||||
|
categoryDefinitions.replace = {
|
||||||
|
pkgs,
|
||||||
|
settings,
|
||||||
|
categories,
|
||||||
|
extra,
|
||||||
|
name,
|
||||||
|
mkNvimPlugin,
|
||||||
|
...
|
||||||
|
} @ packageDef: {
|
||||||
|
lspsAndRuntimeDeps = with pkgs; {
|
||||||
|
general = [
|
||||||
|
ripgrep
|
||||||
|
fd
|
||||||
|
];
|
||||||
|
treesitter = [
|
||||||
|
tree-sitter
|
||||||
|
];
|
||||||
|
lang = {
|
||||||
|
lua = [
|
||||||
|
lua-language-server
|
||||||
|
stylua
|
||||||
|
];
|
||||||
|
nix = [
|
||||||
|
nil
|
||||||
|
nix-doc # TODO: i forgot what this is for
|
||||||
|
nixfmt
|
||||||
|
];
|
||||||
|
rust = [
|
||||||
|
cargo
|
||||||
|
mpkgs.rust-analyzer
|
||||||
|
rustfmt
|
||||||
|
];
|
||||||
|
zig = [
|
||||||
|
pkgs.zls # FIX: using spkgs version as zls is broken rn ;-;
|
||||||
|
];
|
||||||
|
elixir = [
|
||||||
|
elixir-ls
|
||||||
|
];
|
||||||
|
gleam = [
|
||||||
|
gleam
|
||||||
|
];
|
||||||
|
haskell = [
|
||||||
|
haskell-language-server
|
||||||
|
ormolu
|
||||||
|
];
|
||||||
|
java = [
|
||||||
|
jdt-language-server
|
||||||
|
javaPackages.compiler.openjdk17
|
||||||
|
javaPackages.compiler.openjdk21
|
||||||
|
];
|
||||||
|
protobuf = [
|
||||||
|
protols
|
||||||
|
buf
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
startupPlugins = with pkgs.vimPlugins; {
|
||||||
|
general = [
|
||||||
|
lze
|
||||||
|
plenary-nvim
|
||||||
|
nvim-notify
|
||||||
|
nvim-web-devicons
|
||||||
|
base16-nvim
|
||||||
|
mini-nvim
|
||||||
|
];
|
||||||
|
treesitter = [
|
||||||
|
nvim-treesitter-textobjects
|
||||||
|
nvim-treesitter.withAllGrammars
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
optionalPlugins = with pkgs.vimPlugins; {
|
||||||
|
general = [
|
||||||
|
];
|
||||||
|
ui = [
|
||||||
|
dressing-nvim
|
||||||
|
];
|
||||||
|
qol = [
|
||||||
|
undotree
|
||||||
|
mini-hipatterns
|
||||||
|
];
|
||||||
|
telescope = [
|
||||||
|
telescope-nvim
|
||||||
|
telescope-fzf-native-nvim
|
||||||
|
telescope-ui-select-nvim
|
||||||
|
];
|
||||||
|
fyler = [
|
||||||
|
fyler-nvim
|
||||||
|
];
|
||||||
|
lsp = [
|
||||||
|
nvim-lspconfig
|
||||||
|
];
|
||||||
|
completion = [
|
||||||
|
blink-cmp
|
||||||
|
nvim-cmp
|
||||||
|
luasnip
|
||||||
|
friendly-snippets
|
||||||
|
cmp_luasnip
|
||||||
|
cmp-buffer
|
||||||
|
cmp-path
|
||||||
|
cmp-nvim-lua
|
||||||
|
cmp-nvim-lsp
|
||||||
|
cmp-cmdline
|
||||||
|
cmp-nvim-lsp-signature-help
|
||||||
|
cmp-cmdline-history
|
||||||
|
lspkind-nvim
|
||||||
|
];
|
||||||
|
format = [
|
||||||
|
conform-nvim
|
||||||
|
];
|
||||||
|
comment = [
|
||||||
|
comment-nvim
|
||||||
|
];
|
||||||
|
lang = {
|
||||||
|
java = [
|
||||||
|
nvim-jdtls
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# shared libraries to be added to LD_LIBRARY_PATH
|
||||||
|
# variable available to nvim runtime
|
||||||
|
sharedLibraries = {
|
||||||
|
general = with pkgs; [
|
||||||
|
# libgit2
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
environmentVariables = {
|
||||||
|
lang = {
|
||||||
|
rust.lsp = {
|
||||||
|
# it literally won't see the rust-analyzer provided to it
|
||||||
|
# if you don't use an envrionment variable to tell it
|
||||||
|
RUST_ANALYZER_CMD = "${mpkgs.rust-analyzer}/bin/rust-analyzer";
|
||||||
|
};
|
||||||
|
elixir.lsp = {
|
||||||
|
ELIXIR_LS_CMD = "${pkgs.elixir-ls}/scripts/language_server.sh";
|
||||||
|
};
|
||||||
|
java.lsp = {
|
||||||
|
JAVA_HOME = "${pkgs.javaPackages.compiler.openjdk17}";
|
||||||
|
OPENJDK_17 = "${pkgs.javaPackages.compiler.openjdk17}";
|
||||||
|
OPENJDK_21 = "${pkgs.javaPackages.compiler.openjdk21}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
extraWrapperArgs = {};
|
||||||
|
# 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 = {};
|
||||||
|
# populates $LUA_PATH and $LUA_CPATH
|
||||||
|
extraLuaPackages = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
# see :help nixCats.flake.outputs.packageDefinitions
|
||||||
|
packageDefinitions.replace = {
|
||||||
|
# these are the names of your packages
|
||||||
|
# you can include as many as you wish.
|
||||||
|
cryvim = {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 = [
|
||||||
|
"cvim"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
# and a set of categories that you want
|
||||||
|
# (and other information to pass to lua)
|
||||||
|
categories = {
|
||||||
|
general = true;
|
||||||
|
|
||||||
|
ui = true;
|
||||||
|
qol = true;
|
||||||
|
telescope = true;
|
||||||
|
fyler = true;
|
||||||
|
lsp = true;
|
||||||
|
completion = true;
|
||||||
|
treesitter = true;
|
||||||
|
format = true;
|
||||||
|
comment = true;
|
||||||
|
|
||||||
|
lang = {
|
||||||
|
lua = true;
|
||||||
|
nix = true;
|
||||||
|
rust = true;
|
||||||
|
zig = true;
|
||||||
|
elixir = true;
|
||||||
|
gleam = true;
|
||||||
|
haskell = true;
|
||||||
|
java = true;
|
||||||
|
protobuf = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
9
homes/modules/editor/neovim/init.lua
Normal file
9
homes/modules/editor/neovim/init.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
vim.g.mapleader = " "
|
||||||
|
|
||||||
|
vim.opt.termguicolors = true -- use terminal colors
|
||||||
|
vim.opt.relativenumber = true
|
||||||
|
vim.opt.wrap = false
|
||||||
|
vim.opt.colorcolumn = "80"
|
||||||
|
|
||||||
|
require("plugins")
|
||||||
|
require("lsp")
|
||||||
66
homes/modules/editor/neovim/lua/lsp/capabilities.lua
Normal file
66
homes/modules/editor/neovim/lua/lsp/capabilities.lua
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.on_attach(_, bufnr)
|
||||||
|
-- we create a function that lets us more easily define mappings specific
|
||||||
|
-- for LSP related items. It sets the mode, buffer and description for us each time.
|
||||||
|
|
||||||
|
local nmap = function(keys, func, desc)
|
||||||
|
if desc then
|
||||||
|
desc = "LSP: " .. desc
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.keymap.set("n", keys, func, { buffer = bufnr, desc = desc })
|
||||||
|
end
|
||||||
|
|
||||||
|
nmap("<leader>rn", vim.lsp.buf.rename, "[R]e[n]ame")
|
||||||
|
nmap("<leader>ca", vim.lsp.buf.code_action, "[C]ode [A]ction")
|
||||||
|
|
||||||
|
nmap("gd", vim.lsp.buf.definition, "[G]oto [D]efinition")
|
||||||
|
|
||||||
|
-- NOTE: why are these functions that call the telescope builtin?
|
||||||
|
-- because otherwise they would load telescope eagerly when this is defined.
|
||||||
|
-- due to us using the on_require handler to make sure it is available.
|
||||||
|
if nixCats("general.telescope") then
|
||||||
|
nmap("gr", function()
|
||||||
|
require("telescope.builtin").lsp_references()
|
||||||
|
end, "[G]oto [R]eferences")
|
||||||
|
nmap("gI", function()
|
||||||
|
require("telescope.builtin").lsp_implementations()
|
||||||
|
end, "[G]oto [I]mplementation")
|
||||||
|
nmap("<leader>ds", function()
|
||||||
|
require("telescope.builtin").lsp_document_symbols()
|
||||||
|
end, "[D]ocument [S]ymbols")
|
||||||
|
nmap("<leader>ws", function()
|
||||||
|
require("telescope.builtin").lsp_dynamic_workspace_symbols()
|
||||||
|
end, "[W]orkspace [S]ymbols")
|
||||||
|
nmap("<leader>dd", "<cmd>Telescope diagnostics bufnr=0<CR>", "[D]ocument [D]iagnostics")
|
||||||
|
nmap("<leader>wd", "<cmd>Telescope diagnostics<CR>", "[W]orkspace [D]iagnostics")
|
||||||
|
end -- TODO: someone who knows the builtin versions of these to do instead help me out please.
|
||||||
|
|
||||||
|
nmap("<leader>D", vim.lsp.buf.type_definition, "Type [D]efinition")
|
||||||
|
nmap("<leader>e", vim.diagnostic.open_float, "Show [E]rror")
|
||||||
|
|
||||||
|
-- See `:help K` for why this keymap
|
||||||
|
nmap("K", vim.lsp.buf.hover, "Hover Documentation")
|
||||||
|
nmap("<C-k>", vim.lsp.buf.signature_help, "Signature Documentation")
|
||||||
|
|
||||||
|
-- Lesser used LSP functionality
|
||||||
|
nmap("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration")
|
||||||
|
nmap("<leader>wa", vim.lsp.buf.add_workspace_folder, "[W]orkspace [A]dd Folder")
|
||||||
|
nmap("<leader>wr", vim.lsp.buf.remove_workspace_folder, "[W]orkspace [R]emove Folder")
|
||||||
|
nmap("<leader>wl", function()
|
||||||
|
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
||||||
|
end, "[W]orkspace [L]ist Folders")
|
||||||
|
|
||||||
|
-- Create a command `:Format` local to the LSP buffer
|
||||||
|
vim.api.nvim_buf_create_user_command(bufnr, "Format", function(_)
|
||||||
|
vim.lsp.buf.format()
|
||||||
|
end, { desc = "Format current buffer with LSP" })
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.get(server_name)
|
||||||
|
local capabilities = require("blink.cmp").get_lsp_capabilities()
|
||||||
|
|
||||||
|
return capabilities
|
||||||
|
end
|
||||||
|
return M
|
||||||
103
homes/modules/editor/neovim/lua/lsp/completion.lua
Normal file
103
homes/modules/editor/neovim/lua/lsp/completion.lua
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"friendly-snippets",
|
||||||
|
dep_of = { "blink.cmp" },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"blink.cmp",
|
||||||
|
event = { "InsertEnter", "CmdlineEnter" },
|
||||||
|
on_require = "blink",
|
||||||
|
load = function(name)
|
||||||
|
vim.cmd.packadd(name)
|
||||||
|
end,
|
||||||
|
after = function(plugin)
|
||||||
|
local blink = require("blink.cmp")
|
||||||
|
|
||||||
|
blink.setup({
|
||||||
|
keymap = {
|
||||||
|
["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
|
||||||
|
["<C-e>"] = { "hide", "fallback" },
|
||||||
|
["<C-y>"] = { "select_and_accept", "fallback" },
|
||||||
|
|
||||||
|
["<C-k>"] = { "select_prev", "fallback_to_mappings" },
|
||||||
|
["<C-j>"] = { "select_next", "fallback_to_mappings" },
|
||||||
|
["<Up>"] = { "select_prev", "fallback" },
|
||||||
|
["<Down>"] = { "select_next", "fallback" },
|
||||||
|
|
||||||
|
["<C-b>"] = { "scroll_documentation_up", "fallback" },
|
||||||
|
["<C-f>"] = { "scroll_documentation_down", "fallback" },
|
||||||
|
|
||||||
|
["<Tab>"] = { "snippet_forward", "fallback" },
|
||||||
|
["<S-Tab>"] = { "snippet_backward", "fallback" },
|
||||||
|
|
||||||
|
["<C-S-k>"] = { "show_signature", "hide_signature", "fallback" },
|
||||||
|
},
|
||||||
|
|
||||||
|
appearance = {
|
||||||
|
nerd_font_variant = "mono",
|
||||||
|
},
|
||||||
|
|
||||||
|
sources = {
|
||||||
|
default = { "lsp", "path", "snippets", "buffer" },
|
||||||
|
providers = {
|
||||||
|
lsp = {
|
||||||
|
name = "LSP",
|
||||||
|
module = "blink.cmp.sources.lsp",
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
|
path = {
|
||||||
|
name = "Path",
|
||||||
|
module = "blink.cmp.sources.path",
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
|
snippets = {
|
||||||
|
name = "Snippets",
|
||||||
|
module = "blink.cmp.sources.snippets",
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
|
buffer = {
|
||||||
|
name = "Buffer",
|
||||||
|
module = "blink.cmp.sources.buffer",
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
completion = {
|
||||||
|
accept = {
|
||||||
|
auto_brackets = {
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
menu = {
|
||||||
|
border = "rounded",
|
||||||
|
max_height = 12,
|
||||||
|
scrolloff = 2,
|
||||||
|
|
||||||
|
draw = {
|
||||||
|
columns = {
|
||||||
|
{ "kind_icon", gap = 1 },
|
||||||
|
{ "label", "label_description", gap = 1 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
documentation = {
|
||||||
|
auto_show = false,
|
||||||
|
window = {
|
||||||
|
border = "rounded",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
signature = {
|
||||||
|
enabled = true,
|
||||||
|
window = {
|
||||||
|
border = "rounded",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
20
homes/modules/editor/neovim/lua/lsp/indentation.lua
Normal file
20
homes/modules/editor/neovim/lua/lsp/indentation.lua
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = { "lua", "nix", "gleam" },
|
||||||
|
callback = function()
|
||||||
|
vim.opt_local.shiftwidth = 2
|
||||||
|
vim.opt_local.tabstop = 2
|
||||||
|
vim.opt_local.expandtab = true
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("User", {
|
||||||
|
pattern = "TelescopePreviewerLoaded",
|
||||||
|
callback = function(args)
|
||||||
|
local ft = args.data.filetype
|
||||||
|
if vim.tbl_contains({ "lua", "nix", "gleam", "rust" }, ft) then
|
||||||
|
vim.bo.shiftwidth = 2
|
||||||
|
vim.bo.tabstop = 2
|
||||||
|
vim.bo.expandtab = true
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
6
homes/modules/editor/neovim/lua/lsp/init.lua
Normal file
6
homes/modules/editor/neovim/lua/lsp/init.lua
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
require("lze").load({
|
||||||
|
{ import = "lsp.completion" },
|
||||||
|
})
|
||||||
|
|
||||||
|
require("lsp.indentation")
|
||||||
|
require("lsp.lsp")
|
||||||
134
homes/modules/editor/neovim/lua/lsp/lsp.lua
Normal file
134
homes/modules/editor/neovim/lua/lsp/lsp.lua
Normal file
|
|
@ -0,0 +1,134 @@
|
||||||
|
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 },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
servers.nil_ls = {
|
||||||
|
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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
servers.zls = {
|
||||||
|
settings = {},
|
||||||
|
}
|
||||||
|
|
||||||
|
local elixir_ls_cmd = os.getenv("ELIXIR_LS_CMD")
|
||||||
|
servers.elixirls = {
|
||||||
|
cmd = { elixir_ls_cmd },
|
||||||
|
settings = {},
|
||||||
|
}
|
||||||
|
|
||||||
|
servers.gleam = {
|
||||||
|
settings = {},
|
||||||
|
}
|
||||||
|
|
||||||
|
servers.hls = {
|
||||||
|
settings = {},
|
||||||
|
}
|
||||||
|
|
||||||
|
local java_home = os.getenv("JAVA_HOME")
|
||||||
|
servers.jdtls = {
|
||||||
|
settings = {
|
||||||
|
java = {
|
||||||
|
contentProvider = { preferred = "fernflower" },
|
||||||
|
configuration = {
|
||||||
|
runtimes = {
|
||||||
|
{
|
||||||
|
name = "OpenJDK 17",
|
||||||
|
path = os.getenv("OPENJDK_17"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = "OpenJDK 21",
|
||||||
|
path = os.getenv("OPENJDK_21"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
servers.protols = {
|
||||||
|
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,
|
||||||
|
})
|
||||||
|
|
||||||
|
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,
|
||||||
|
},
|
||||||
|
})
|
||||||
23
homes/modules/editor/neovim/lua/plugins/comment.lua
Normal file
23
homes/modules/editor/neovim/lua/plugins/comment.lua
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"comment.nvim",
|
||||||
|
event = { "BufReadPost", "BufNewFile" },
|
||||||
|
after = function(plugin)
|
||||||
|
require("Comment").setup({
|
||||||
|
toggler = {
|
||||||
|
line = "<leader>cc",
|
||||||
|
block = "<leader>bc",
|
||||||
|
},
|
||||||
|
opleader = {
|
||||||
|
line = "<leader>c",
|
||||||
|
block = "<leader>b",
|
||||||
|
},
|
||||||
|
extra = {
|
||||||
|
above = "<leader>c<S-o>",
|
||||||
|
below = "<leader>co",
|
||||||
|
eol = "<leader>cA",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
5
homes/modules/editor/neovim/lua/plugins/dressing.lua
Normal file
5
homes/modules/editor/neovim/lua/plugins/dressing.lua
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"dressing.nvim",
|
||||||
|
},
|
||||||
|
}
|
||||||
34
homes/modules/editor/neovim/lua/plugins/format.lua
Normal file
34
homes/modules/editor/neovim/lua/plugins/format.lua
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
-- docs -> https://github.com/stevearc/conform.nvim
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"conform.nvim",
|
||||||
|
enabled = nixCats("format") or false,
|
||||||
|
keys = {
|
||||||
|
{ "<leader>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,
|
||||||
|
proto = nixCats("lang.protobuf") and { "buf" } or nil,
|
||||||
|
},
|
||||||
|
format_on_save = {
|
||||||
|
timeout_ms = 500,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.keymap.set({ "n", "v" }, "<leader>p", function()
|
||||||
|
conform.format({
|
||||||
|
lsp_fallback = false,
|
||||||
|
async = false,
|
||||||
|
timeout_ms = 1000,
|
||||||
|
})
|
||||||
|
end, { desc = "Format File (pretty :3)" })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
22
homes/modules/editor/neovim/lua/plugins/fyler.lua
Normal file
22
homes/modules/editor/neovim/lua/plugins/fyler.lua
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"fyler.nvim",
|
||||||
|
cmd = { "Fyler" },
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>tf",
|
||||||
|
function()
|
||||||
|
return require("fyler").toggle({ kind = "split_right" })
|
||||||
|
end,
|
||||||
|
mode = { "n" },
|
||||||
|
desc = "Open [F]yler",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
load = function(name)
|
||||||
|
vim.cmd.packadd(name)
|
||||||
|
end,
|
||||||
|
after = function(plugin)
|
||||||
|
local fyler = require("fyler").setup()
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
9
homes/modules/editor/neovim/lua/plugins/init.lua
Normal file
9
homes/modules/editor/neovim/lua/plugins/init.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
require("lze").load({
|
||||||
|
{ import = "plugins.dressing" },
|
||||||
|
{ import = "plugins.telescope" },
|
||||||
|
{ import = "plugins.treesitter" },
|
||||||
|
{ import = "plugins.fyler" },
|
||||||
|
{ import = "plugins.mini-hipatterns" },
|
||||||
|
{ import = "plugins.format" },
|
||||||
|
{ import = "plugins.comment" },
|
||||||
|
})
|
||||||
76
homes/modules/editor/neovim/lua/plugins/mini-hipatterns.lua
Normal file
76
homes/modules/editor/neovim/lua/plugins/mini-hipatterns.lua
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"mini.hipatterns",
|
||||||
|
after = function(plugin)
|
||||||
|
local hipatterns = require("mini.hipatterns")
|
||||||
|
|
||||||
|
-- Returns hex color group for matching short hex color.
|
||||||
|
--
|
||||||
|
---@param match string
|
||||||
|
---@return string
|
||||||
|
local hex_color_short = function(_, match)
|
||||||
|
local style = "fg" -- 'fg' or 'bg', for extmark_opts_inline use 'fg'
|
||||||
|
local r, g, b = match:sub(2, 2), match:sub(3, 3), match:sub(4, 4)
|
||||||
|
local hex = string.format("#%s%s%s%s%s%s", r, r, g, g, b, b)
|
||||||
|
return hipatterns.compute_hex_color_group(hex, style)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Returns hex color group for matching alpha hex color.
|
||||||
|
--
|
||||||
|
---@param match string
|
||||||
|
---@return string
|
||||||
|
local hex_color_alpha = function(_, match)
|
||||||
|
local style = "fg" -- 'fg' or 'bg', for extmark_opts_inline use 'fg'
|
||||||
|
local r, g, b = match:sub(2, 3), match:sub(4, 5), match:sub(6, 7)
|
||||||
|
local hex = string.format("#%s%s%s", r, g, b)
|
||||||
|
return hipatterns.compute_hex_color_group(hex, style)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Returns extmark opts for highlights with virtual inline text.
|
||||||
|
--
|
||||||
|
---@param data table Includes `hl_group`, `full_match` and more.
|
||||||
|
---@return table
|
||||||
|
local extmark_opts_inline = function(_, _, data)
|
||||||
|
return {
|
||||||
|
virt_text = { { "", data.hl_group } },
|
||||||
|
virt_text_pos = "inline",
|
||||||
|
right_gravity = false,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Returns extmark opts for highlights with virtual inline text.
|
||||||
|
--
|
||||||
|
---@param data table Includes `hl_group`, `full_match` and more.
|
||||||
|
---@return table
|
||||||
|
local extmark_opts_inline_alpha = function(_, _, data)
|
||||||
|
return {
|
||||||
|
virt_text = { { "", data.hl_group } },
|
||||||
|
virt_text_pos = "inline",
|
||||||
|
right_gravity = false,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
hipatterns.setup({
|
||||||
|
highlighters = {
|
||||||
|
-- #rrggbb
|
||||||
|
hex_color = hipatterns.gen_highlighter.hex_color({
|
||||||
|
style = "inline",
|
||||||
|
inline_text = "",
|
||||||
|
}),
|
||||||
|
-- #rgb
|
||||||
|
hex_color_short = {
|
||||||
|
pattern = "#%x%x%x%f[%X]",
|
||||||
|
group = hex_color_short,
|
||||||
|
extmark_opts = extmark_opts_inline,
|
||||||
|
},
|
||||||
|
-- #rrggbbaa
|
||||||
|
hex_color_alpha = {
|
||||||
|
pattern = "#%x%x%x%x%x%x%x%x%f[%X]",
|
||||||
|
group = hex_color_alpha,
|
||||||
|
extmark_opts = extmark_opts_inline_alpha,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
78
homes/modules/editor/neovim/lua/plugins/telescope.lua
Normal file
78
homes/modules/editor/neovim/lua/plugins/telescope.lua
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"telescope.nvim",
|
||||||
|
cmd = { "Telescope" },
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>f",
|
||||||
|
function()
|
||||||
|
return require("telescope.builtin").find_files()
|
||||||
|
end,
|
||||||
|
mode = { "n" },
|
||||||
|
desc = "Telescope search [F]iles",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>tr",
|
||||||
|
function()
|
||||||
|
return require("telescope.builtin").oldfiles()
|
||||||
|
end,
|
||||||
|
mode = { "n" },
|
||||||
|
desc = "[T]elescope search [R]ecent files",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>ts",
|
||||||
|
function()
|
||||||
|
return require("telescope.builtin").live_grep()
|
||||||
|
end,
|
||||||
|
mode = { "n" },
|
||||||
|
desc = "[T]elescope [S]earch cwd with grep",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>tw",
|
||||||
|
function()
|
||||||
|
return require("telescope.builtin").grep_string()
|
||||||
|
end,
|
||||||
|
mode = { "n" },
|
||||||
|
desc = "[T]elescope search current [W]ord",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>tk",
|
||||||
|
function()
|
||||||
|
return require("telescope.builtin").keymaps()
|
||||||
|
end,
|
||||||
|
mode = { "n" },
|
||||||
|
desc = "[T]elescope search [K]eymaps",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"<leader>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 = {
|
||||||
|
["<C-k>"] = actions.move_selection_previous, -- move to prev result
|
||||||
|
["<C-j>"] = actions.move_selection_next, -- move to next result
|
||||||
|
["<C-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
pcall(telescope.load_extension, "fzf")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
95
homes/modules/editor/neovim/lua/plugins/treesitter.lua
Normal file
95
homes/modules/editor/neovim/lua/plugins/treesitter.lua
Normal file
|
|
@ -0,0 +1,95 @@
|
||||||
|
-- to help me write this after nvim-treesitter updated, i used:
|
||||||
|
-- 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
|
||||||
|
|
||||||
|
-- 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 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 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,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- 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,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
programs.nixvim = {
|
|
||||||
enable = true;
|
|
||||||
# TODO: allow clipboard to be configurable based on system clipboard
|
|
||||||
colorschemes.dracula.enable = true;
|
|
||||||
plugins = {
|
|
||||||
lualine.enable = true;
|
|
||||||
treesitter.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
opts = {
|
|
||||||
number = true;
|
|
||||||
tabstop = 4;
|
|
||||||
softtabstop = 4;
|
|
||||||
shiftwidth = 4;
|
|
||||||
};
|
|
||||||
|
|
||||||
clipboard.providers.wl-copy.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue