mirror of
https://github.com/buckley310/nixos-config.git
synced 2024-12-21 19:24:15 +00:00
merge vim config
This commit is contained in:
parent
cb1f353e6a
commit
c7e0ebea7f
9 changed files with 404 additions and 13 deletions
|
@ -1,5 +1,10 @@
|
|||
{ ... }:
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
environment.variables.EDITOR = "nvim";
|
||||
environment.systemPackages = [
|
||||
pkgs.bck-nvim
|
||||
];
|
||||
|
||||
users.users.sean = {
|
||||
uid = 2000;
|
||||
isNormalUser = true;
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
let
|
||||
alias = cmd: pkgs.writeShellScriptBin cmd ''
|
||||
exec nix run github:buckley310/vim -- "$@"
|
||||
'';
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [
|
||||
(alias "vi")
|
||||
(alias "vim")
|
||||
];
|
||||
}
|
68
pkgs/bck-nvim/default.nix
Normal file
68
pkgs/bck-nvim/default.nix
Normal file
|
@ -0,0 +1,68 @@
|
|||
{ lib
|
||||
, neovim-unwrapped
|
||||
, vimPlugins
|
||||
, wrapNeovim
|
||||
|
||||
# LSP
|
||||
, black
|
||||
, efm-langserver
|
||||
, lua-language-server
|
||||
, nil
|
||||
, nodePackages
|
||||
, pyright
|
||||
, vscode-langservers-extracted
|
||||
, yaml-language-server
|
||||
}:
|
||||
|
||||
let
|
||||
luafiles = lib.concatLines (map
|
||||
(x: "luafile ${./lua}/${x}")
|
||||
(builtins.attrNames (builtins.readDir ./lua))
|
||||
);
|
||||
|
||||
extraPath = lib.concatLines (map
|
||||
(p: "let $PATH .= ':${p}/bin'")
|
||||
[
|
||||
black
|
||||
efm-langserver
|
||||
lua-language-server
|
||||
nil
|
||||
nodePackages.prettier
|
||||
nodePackages.typescript-language-server
|
||||
pyright
|
||||
vscode-langservers-extracted
|
||||
yaml-language-server
|
||||
]
|
||||
);
|
||||
|
||||
in
|
||||
wrapNeovim neovim-unwrapped {
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
configure = {
|
||||
packages.bck.start = with vimPlugins; [
|
||||
# cmp
|
||||
cmp-buffer
|
||||
cmp-nvim-lsp
|
||||
cmp-path
|
||||
cmp_luasnip
|
||||
luasnip
|
||||
nvim-cmp
|
||||
# other
|
||||
bufferline-nvim
|
||||
comment-nvim
|
||||
gitsigns-nvim
|
||||
indent-blankline-nvim
|
||||
lualine-nvim
|
||||
nvim-lspconfig
|
||||
nvim-tree-lua
|
||||
nvim-treesitter.withAllGrammars
|
||||
nvim-web-devicons
|
||||
project-nvim
|
||||
telescope-nvim
|
||||
vim-code-dark
|
||||
vim-tmux-navigator
|
||||
];
|
||||
customRC = extraPath + luafiles;
|
||||
};
|
||||
}
|
30
pkgs/bck-nvim/lua/0-nvimtree.lua
Normal file
30
pkgs/bck-nvim/lua/0-nvimtree.lua
Normal file
|
@ -0,0 +1,30 @@
|
|||
vim.g.loaded_netrw = 1
|
||||
vim.g.loaded_netrwPlugin = 1
|
||||
|
||||
vim.opt.termguicolors = true
|
||||
vim.cmd("colorscheme codedark")
|
||||
|
||||
vim.keymap.set('n', '<space>e', '<cmd>NvimTreeToggle<cr>')
|
||||
|
||||
local function my_on_attach(bufnr)
|
||||
local api = require('nvim-tree.api')
|
||||
local function opts(desc)
|
||||
return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
|
||||
end
|
||||
|
||||
api.config.mappings.default_on_attach(bufnr)
|
||||
vim.keymap.set('n', 'l', api.node.open.edit, opts('Open'))
|
||||
vim.keymap.set('n', 'h', api.node.navigate.parent_close, opts('Close Directory'))
|
||||
end
|
||||
|
||||
require("nvim-tree").setup({
|
||||
on_attach = my_on_attach,
|
||||
disable_netrw = true,
|
||||
hijack_netrw = true,
|
||||
sync_root_with_cwd = true,
|
||||
respect_buf_cwd = true,
|
||||
update_focused_file = {
|
||||
enable = true,
|
||||
update_root = true
|
||||
},
|
||||
})
|
25
pkgs/bck-nvim/lua/1-lualine.lua
Normal file
25
pkgs/bck-nvim/lua/1-lualine.lua
Normal file
|
@ -0,0 +1,25 @@
|
|||
local sections = require('lualine').get_config().sections
|
||||
sections.lualine_x = {
|
||||
function()
|
||||
local bufnr = vim.api.nvim_get_current_buf()
|
||||
local clients = vim.lsp.buf_get_clients(bufnr)
|
||||
if next(clients) == nil then
|
||||
return ''
|
||||
end
|
||||
local c = {}
|
||||
for _, client in pairs(clients) do
|
||||
table.insert(c, client.name)
|
||||
end
|
||||
return '\u{f013} ' .. table.concat(c, ',')
|
||||
end,
|
||||
'filetype',
|
||||
}
|
||||
|
||||
require('lualine').setup({
|
||||
options = {
|
||||
disabled_filetypes = { 'NvimTree' },
|
||||
},
|
||||
sections = sections,
|
||||
})
|
||||
|
||||
vim.cmd("set noshowmode")
|
37
pkgs/bck-nvim/lua/4-cmp.lua
Normal file
37
pkgs/bck-nvim/lua/4-cmp.lua
Normal file
|
@ -0,0 +1,37 @@
|
|||
local cmp = require('cmp')
|
||||
|
||||
cmp.setup({
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
require('luasnip').lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
window = {
|
||||
completion = cmp.config.window.bordered(),
|
||||
documentation = cmp.config.window.bordered(),
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert({
|
||||
['<CR>'] = cmp.mapping.confirm({ select = false }),
|
||||
['<Tab>'] = cmp.mapping.confirm({ select = true }),
|
||||
}),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'nvim_lsp' },
|
||||
{ name = 'luasnip' },
|
||||
}, {
|
||||
{ name = 'buffer' },
|
||||
})
|
||||
})
|
||||
|
||||
cmp.setup.cmdline({ '/', '?' }, {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = {
|
||||
{ name = 'buffer' }
|
||||
}
|
||||
})
|
||||
|
||||
cmp.setup.cmdline(':', {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = {
|
||||
{ name = 'path' }
|
||||
}
|
||||
})
|
141
pkgs/bck-nvim/lua/5-lsp.lua
Normal file
141
pkgs/bck-nvim/lua/5-lsp.lua
Normal file
|
@ -0,0 +1,141 @@
|
|||
local lspconfig = require('lspconfig')
|
||||
local capabilities = require('cmp_nvim_lsp').default_capabilities()
|
||||
|
||||
----------------------------------------------------------------
|
||||
lspconfig.lua_ls.setup({
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
Lua = {
|
||||
diagnostics = {
|
||||
globals = { "vim" }
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
lspconfig.pyright.setup({
|
||||
capabilities = capabilities,
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
lspconfig.tsserver.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = function(client, _)
|
||||
client.server_capabilities.documentFormattingProvider = false
|
||||
end,
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
lspconfig.html.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = function(client, _)
|
||||
client.server_capabilities.documentFormattingProvider = false
|
||||
end,
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
lspconfig.cssls.setup({
|
||||
capabilities = capabilities,
|
||||
on_attach = function(client, _)
|
||||
client.server_capabilities.documentFormattingProvider = false
|
||||
end,
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
lspconfig.nil_ls.setup({
|
||||
capabilities = capabilities,
|
||||
cmd = { "nil" },
|
||||
settings = {
|
||||
['nil'] = {
|
||||
formatting = {
|
||||
command = { "nixpkgs-fmt" },
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
lspconfig.yamlls.setup({
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
yaml = {
|
||||
schemas = {
|
||||
kubernetes = "/*.yaml",
|
||||
},
|
||||
customTags = {
|
||||
-- https://github.com/aws-cloudformation/cfn-lint-visual-studio-code/blob/3ff0b8cc1bbfc34448c865b54deff8c7d030beba/server/src/cfnSettings.ts
|
||||
"!And sequence",
|
||||
"!If sequence",
|
||||
"!Not sequence",
|
||||
"!Equals sequence",
|
||||
"!Or sequence",
|
||||
"!FindInMap sequence",
|
||||
"!Base64 scalar",
|
||||
"!Join sequence",
|
||||
"!Cidr sequence",
|
||||
"!Ref scalar",
|
||||
"!Sub scalar",
|
||||
"!Sub sequence",
|
||||
"!GetAtt scalar",
|
||||
"!GetAtt sequence",
|
||||
"!GetAZs mapping",
|
||||
"!GetAZs scalar",
|
||||
"!ImportValue mapping",
|
||||
"!ImportValue scalar",
|
||||
"!Select sequence",
|
||||
"!Split sequence",
|
||||
},
|
||||
},
|
||||
},
|
||||
on_attach = function(client, _)
|
||||
client.server_capabilities.documentFormattingProvider = true
|
||||
end,
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
----------------------------------------------------------------
|
||||
----------------------------------------------------------------
|
||||
local efmprettier = {
|
||||
{
|
||||
formatStdin = true,
|
||||
formatCommand = "prettier --stdin-filepath ${INPUT}",
|
||||
}
|
||||
}
|
||||
lspconfig.efm.setup({
|
||||
filetypes = {
|
||||
"css",
|
||||
"html",
|
||||
"javascript",
|
||||
"typescript",
|
||||
"python",
|
||||
},
|
||||
init_options = {
|
||||
documentFormatting = true
|
||||
},
|
||||
settings = {
|
||||
languages = {
|
||||
css = efmprettier,
|
||||
html = efmprettier,
|
||||
javascript = efmprettier,
|
||||
typescript = efmprettier,
|
||||
python = {
|
||||
{
|
||||
formatStdin = true,
|
||||
formatCommand = "black --quiet -",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
callback = function(e)
|
||||
for _, client in pairs(vim.lsp.buf_get_clients(e.buf)) do
|
||||
if client.supports_method("textDocument/formatting") then
|
||||
return vim.lsp.buf.format()
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
40
pkgs/bck-nvim/lua/8-other-plugins.lua
Normal file
40
pkgs/bck-nvim/lua/8-other-plugins.lua
Normal file
|
@ -0,0 +1,40 @@
|
|||
require('nvim-treesitter.configs').setup({
|
||||
highlight = {
|
||||
enable = true,
|
||||
},
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
require('project_nvim').setup({
|
||||
detection_methods = { "pattern" },
|
||||
patterns = { ".git", "flake.nix", "package.json" },
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
require('Comment').setup({})
|
||||
|
||||
----------------------------------------------------------------
|
||||
require("bufferline").setup({
|
||||
options = {
|
||||
separator_style = "slant"
|
||||
}
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
vim.cmd("highlight NonText guifg=#404040")
|
||||
require("ibl").setup({
|
||||
scope = { enabled = false },
|
||||
indent = { char = "\u{258f}" },
|
||||
})
|
||||
|
||||
----------------------------------------------------------------
|
||||
require('gitsigns').setup({})
|
||||
vim.cmd("set signcolumn=yes") -- signcolumn=number ?
|
||||
vim.cmd("highlight GitSignsAdd ctermfg=2 guifg=#009900")
|
||||
vim.cmd("highlight GitSignsChange ctermfg=3 guifg=#bbbb00")
|
||||
vim.cmd("highlight GitSignsDelete ctermfg=1 guifg=#ff2222")
|
||||
vim.keymap.set('n', '<space>gl', '<cmd>lua require("gitsigns").blame_line()<cr>')
|
||||
vim.keymap.set('n', '<space>gp', '<cmd>lua require("gitsigns").preview_hunk()<cr>')
|
||||
vim.keymap.set('n', '<space>gr', '<cmd>lua require("gitsigns").reset_hunk()<cr>')
|
||||
vim.keymap.set('n', '<space>gs', '<cmd>lua require("gitsigns").stage_hunk()<cr>')
|
||||
vim.keymap.set('n', '<space>gu', '<cmd>lua require("gitsigns").reset_buffer_index()<cr>')
|
57
pkgs/bck-nvim/lua/9-misc.lua
Normal file
57
pkgs/bck-nvim/lua/9-misc.lua
Normal file
|
@ -0,0 +1,57 @@
|
|||
vim.cmd("set mouse=")
|
||||
vim.cmd("set number relativenumber")
|
||||
vim.cmd("set nowrap")
|
||||
vim.cmd("set scrolloff=9")
|
||||
vim.cmd("set tabstop=4")
|
||||
vim.cmd("set shiftwidth=4")
|
||||
vim.cmd("set ignorecase smartcase")
|
||||
|
||||
vim.keymap.set('n', '<space>ff', '<cmd>Telescope find_files<cr>')
|
||||
vim.keymap.set('n', '<space>fr', '<cmd>Telescope oldfiles<cr>')
|
||||
vim.keymap.set('n', '<space>fg', '<cmd>Telescope git_files<cr>')
|
||||
|
||||
vim.keymap.set('n', '>', '>>^')
|
||||
vim.keymap.set('n', '<', '<<^')
|
||||
vim.keymap.set('v', '<', '<gv^')
|
||||
vim.keymap.set('v', '>', '>gv^')
|
||||
|
||||
vim.keymap.set('n', '<A-j>', '}')
|
||||
vim.keymap.set('n', '<A-k>', '{')
|
||||
vim.keymap.set('v', '<A-j>', '}')
|
||||
vim.keymap.set('v', '<A-k>', '{')
|
||||
|
||||
vim.keymap.set('n', '<space>w', '<cmd>w<cr>')
|
||||
vim.keymap.set('n', '<space>q', '<cmd>q<cr>')
|
||||
vim.keymap.set('n', '<space>c', '<cmd>:bdelete<cr>')
|
||||
vim.keymap.set('n', '<A-h>', '<cmd>bprevious<cr>')
|
||||
vim.keymap.set('n', '<A-l>', '<cmd>bnext<cr>')
|
||||
|
||||
vim.keymap.set('n', "<C-Up>", "<cmd>resize -2<cr>")
|
||||
vim.keymap.set('n', "<C-Down>", "<cmd>resize +2<cr>")
|
||||
vim.keymap.set('n', "<C-Left>", "<cmd>vertical resize -2<cr>")
|
||||
vim.keymap.set('n', "<C-Right>", "<cmd>vertical resize +2<cr>")
|
||||
|
||||
vim.cmd("autocmd TermOpen * setlocal nonumber norelativenumber")
|
||||
for _, key in pairs({ 'h', 'j', 'k', 'l' }) do
|
||||
for _, mod in pairs({ 'C', 'A' }) do
|
||||
vim.keymap.set(
|
||||
't',
|
||||
'<' .. mod .. '-' .. key .. '>',
|
||||
'<C-\\><C-n><' .. mod .. '-' .. key .. '>',
|
||||
{ remap = true }
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd('TextYankPost', {
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
end
|
||||
})
|
||||
|
||||
local fname = os.getenv("HOME") .. "/.bck-nvim.lua"
|
||||
local f = io.open(fname, "r")
|
||||
if f ~= nil then
|
||||
io.close(f)
|
||||
vim.cmd('luafile ' .. fname)
|
||||
end
|
Loading…
Reference in a new issue