Migrate to nixvim

This commit is contained in:
Dave Gallant
2024-02-18 16:58:00 -05:00
parent 323256a5ed
commit 61e6743c8c
6 changed files with 462 additions and 348 deletions

View File

@@ -377,38 +377,215 @@ in {
enableZshIntegration = true;
};
neovim = {
nixvim = {
enable = true;
viAlias = true;
vimAlias = true;
# home-manager doesn't yet support `init.lua`
extraConfig = "lua require('init')";
plugins = with pkgs.vimPlugins; [
cmp-nvim-lsp
cmp-path
cmp-treesitter
diffview-nvim
git-blame-nvim
gitsigns-nvim
gruvbox-nvim
lualine-nvim
luasnip
nvim-cmp
colorschemes.gruvbox.enable = true;
plugins = {
cmp-path.enable = true;
cmp-treesitter.enable = true;
commentary.enable = true;
diffview.enable = true;
gitblame.enable = true;
gitsigns.enable = true;
lualine.enable = true;
nvim-cmp.enable = true;
rainbow-delimiters.enable = true;
treesitter.enable = true;
telescope = {
enable = true;
defaults = {
layout_strategy = "vertical";
layout_config = {
vertical = {
width = 0.9;
};
};
};
package = pkgs.vimPlugins.telescope-fzy-native-nvim;
keymaps = {
"<leader>ff" = {
action = "git_files";
desc = "Telescope Git Files";
};
"<leader>fg" = "live_grep";
};
keymapsSilent = true;
};
};
extraPlugins = with pkgs.vimPlugins; [
nvim-lspconfig
nvim-tree-lua
nvim-treesitter.withAllGrammars
nvim-ts-rainbow
nvim-web-devicons
plenary-nvim
telescope-fzy-native-nvim
vim-commentary
vim-markdown
vim-repeat
vim-sneak
vim-surround
];
options = {
autoindent = true;
backup = false;
belloff = "all";
completeopt = [
"menuone"
"noselect"
];
cursorline = true;
expandtab = true;
fillchars = {
diff = "";
eob = " ";
vert = "";
};
hlsearch = true;
ignorecase = true;
incsearch = true;
modelines = 5;
mouse = "a";
number = true;
pumblend = 10;
scrolloff = 3;
shell = "bash";
shiftround = false;
shiftwidth = 2;
showbreak = " ";
showcmd = true;
sidescroll = 0;
sidescrolloff = 3;
smartcase = true;
smarttab = true;
spellcapcheck = "";
splitbelow = true;
splitright = true;
swapfile = false;
switchbuf = "usetab";
tabstop = 2;
termguicolors = true;
wildmenu = true;
};
extraConfigLua = ''
-- Format JSON
vim.cmd([[command! JsonFormat execute "::%!jq '.'"]])
-- Tab shortcuts
vim.api.nvim_set_keymap("n", "<C-n>", "<cmd>tabnew<cr>", { noremap = true })
-- Copy to OS clipboard
vim.api.nvim_set_keymap("v", "<leader>y", '"+y', { noremap = true })
-- Folding
vim.api.nvim_set_keymap("n", "<space>", "za", { silent = true, noremap = true })
-- Remember line number
vim.cmd([[au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif]])
-- Replace visual selection
vim.cmd([[vnoremap <C-r> "hy:%s/<C-r>h//g<left><left>]])
-- Indent YAML
vim.cmd([[au FileType yaml setlocal ts=2 sts=2 sw=2 expandtab]])
-- Indent Python
vim.cmd([[au BufNewFile,BufRead *.py set tabstop=4 softtabstop=4 shiftwidth=4 textwidth=79 expandtab autoindent fileformat=unix]])
-- Highlight whitespace
vim.cmd([[highlight ExtraWhitespace ctermbg=red guibg=red]])
vim.cmd([[match ExtraWhitespace /\s\+$/]])
-------------------------------------------------------------------------------
-- LSP {{{1 -------------------------------------------------------------------
-------------------------------------------------------------------------------
-- See `:help vim.lsp.*` for documentation on any of the below functions
local opts = { noremap=true, silent=true }
vim.api.nvim_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
vim.api.nvim_set_keymap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
vim.api.nvim_set_keymap('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
vim.api.nvim_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
vim.api.nvim_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
-------------------------------------------------------------------------------
-- completion {{{1 -------------------------------------------------------------------
-------------------------------------------------------------------------------
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local cmp = require("cmp")
-------------------------------------------------------------------------------
-- lsp {{{1 -------------------------------------------------------------------
-------------------------------------------------------------------------------
local lspconfig = require "lspconfig"
lspconfig.ansiblels.setup({
capabilities = capabilities,
cmd = {os.getenv("HOME") .. "/.npm-packages/bin/ansible-language-server", "--stdio"};
})
lspconfig.bashls.setup({
capabilities = capabilities,
})
lspconfig.gopls.setup({
capabilities = capabilities,
})
lspconfig.pyright.setup({
capabilities = capabilities,
})
lspconfig.rls.setup({
capabilities = capabilities,
})
lspconfig.rnix.setup({
capabilities = capabilities,
})
lspconfig.solargraph.setup({
capabilities = capabilities,
})
lspconfig.terraformls.setup({
filetypes={"terraform","tf","hcl"},
capabilities = capabilities,
})
lspconfig.tflint.setup({
capabilities = capabilities,
})
lspconfig.yamlls.setup({
capabilities = capabilities,
})
-------------------------------------------------------------------------------
-- Plugins {{{1 ---------------------------------------------------------------
-------------------------------------------------------------------------------
-- status line
require("lualine").setup({
options = {
theme = "gruvbox",
},
})
-- folding
vim.api.nvim_exec(
[[
set foldmethod=expr
set foldlevel=20
set nofoldenable
set foldexpr=nvim_treesitter#foldexpr()
]],
true
)
-- vim-prettier
vim.g["prettier#autoformat"] = 1
-- git-blame
vim.g.gitblame_enabled = 1
'';
};
vscode = {
@@ -455,7 +632,7 @@ in {
};
home.file = {
".config/nvim/lua".source = ./nvim/lua;
# ".config/nvim/lua".source = ./nvim/lua;
".aws/config".source = ./.aws/config;
};
}