use lua config and switch to nvim-lsp

This commit is contained in:
Charlotte 🦝 Delenk 2022-06-12 20:29:42 +01:00
parent d2d6f8c6e7
commit cded6fcc34
Signed by: darkkirb
GPG key ID: AB2BD8DAF2E37122
4 changed files with 129 additions and 78 deletions

View file

@ -1,7 +1,7 @@
desktop: {pkgs, ...}: { desktop: { pkgs, ... }: {
imports = [ imports = [
../programs/zsh.nix ../programs/zsh.nix
../programs/vim.nix ../programs/vim
../programs/tmux.nix ../programs/tmux.nix
../programs/ssh.nix ../programs/ssh.nix
]; ];
@ -35,7 +35,7 @@ desktop: {pkgs, ...}: {
accounts.email.maildirBasePath = "Maildir"; accounts.email.maildirBasePath = "Maildir";
accounts.email.accounts = rec { accounts.email.accounts = rec {
lotte = { lotte = {
aliases = ["darkkirb@darkkirb.de" "postmaster@darkkirb.de" "postmaster@chir.rs" "postmaster@miifox.net"]; aliases = [ "darkkirb@darkkirb.de" "postmaster@darkkirb.de" "postmaster@chir.rs" "postmaster@miifox.net" ];
gpg = { gpg = {
encryptByDefault = true; encryptByDefault = true;
key = "B4E3D4801C49EC5E"; key = "B4E3D4801C49EC5E";
@ -44,7 +44,7 @@ desktop: {pkgs, ...}: {
imap.host = "mail.chir.rs"; imap.host = "mail.chir.rs";
imapnotify = { imapnotify = {
enable = true; enable = true;
boxes = ["Inbox"]; boxes = [ "Inbox" ];
onNotify = "${pkgs.isync}/bin/mbsync -a || true"; onNotify = "${pkgs.isync}/bin/mbsync -a || true";
onNotifyPost = onNotifyPost =
if desktop if desktop
@ -77,7 +77,7 @@ desktop: {pkgs, ...}: {
lotte lotte
// { // {
address = "mdelenk@hs-mittweida.de"; address = "mdelenk@hs-mittweida.de";
aliases = []; aliases = [ ];
gpg = gpg =
lotte.gpg lotte.gpg
// { // {

View file

@ -1,73 +0,0 @@
{ pkgs, ... }:
let
dsquotes = "''";
in
{
programs.neovim = {
enable = true;
extraConfig = ''
set tabstop=4
set shiftwidth=4
set expandtab
set nocompatible
set number relativenumber
set mouse=a
set hidden
set clipboard=unnamedplus " the *correct* default clipboard thank you
" Give more space for displaying messages.
set cmdheight=2
" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable
" delays and poor user experience.
set updatetime=300
" Don't pass messages to |ins-completion-menu|.
set shortmess+=c
set signcolumn=number
" NerdTree config
" Automatically open NERDTree and move to the previous window
autocmd VimEnter * NERDTree | wincmd p
" Close vim when NERDTree is the only window left
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
" Ban replacing NERDTree
autocmd BufEnter * if bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 |
\ let buf=bufnr() | buffer# | execute "normal! \<C-W>w" | execute 'buffer'.buf | endif
" NerdTree git plugin
" Use nerdfonts
let g:NERDTreeGitStatusUseNerdFonts = 1
" CtrlP config
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlP'
" Tagbar config
nmap <F8> :TagbarToggle<CR>
" ctags path
let g:tagbar_ctags_bin = '${pkgs.universal-ctags}/bin/ctags'
" use poweernline fonts
let g:airline_powerline_fonts = 1
let g:airline_highlighting_cache = 1
'';
plugins = with pkgs.vimPlugins; [
nerdtree
nerdtree-git-plugin
vim-devicons
ctrlp-vim
vim-nix
tagbar
vim-airline
copilot-vim
rust-vim # for proper syntax highlighting
tabline-nvim
nvim-lspconfig
];
extraPackages = with pkgs; [
nodejs_latest
];
};
}

View file

@ -0,0 +1,94 @@
local o = vim.o
local wo = vim.wo
local bo = vim.bo
local map = vim.api.nvim_set_keymap
o.number = "ar"
o.clipboard = "unnamedplus" -- The correct default clipboard
o.cmdheight = 2 -- more space for displaying messages
-- Having longer updatetime (default is 4000ms = 4s) leads to noticeable delays and poor user experience
o.updatetime = 300
-- dont pass messages to |ins-completion-menu|
o.shortmess ..= "c"
wo.number = "relativenumber"
wo.signcolumn = "number"
bo.tabstop = 2
bo.shiftwidth = 2
bo.expandtab = true
-- NerdTree config
-- Automatically open NERDTre and move to the previous window
vim.api.nvim_create_autocmd("VimEnter", {
command = "NERDTree | wincmd p"
})
-- Close vim when NERDTree is the only window left
vim.api.nvim_create_autocmd("BufEnter", {
command = "if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif"
})
-- Ban replacing NERDTree
vim.api.nvim_create_autocmd("BufEnter", {
command = "if bufname('#') =~ 'NERD_tree_\\d\\+' && bufname('%') !~ 'NERD_tree_\\d\\+' && winnr('$') > 1 | let buf=bufnr() | buffer# | execute \"normal! \\<C-W>w\" | execute 'buffer'.buf | endif"
})
-- Use NerdFonts
vim.api.nvim_set_var("NERDTreeGitStatusUseNerdFonts", 1)
-- CtrlP config
vim.api.nvim_set_var("ctrlp_map", "<c-p>")
vim.api.nvim_set_var("ctrlp_cmd", "CtrlP")
-- Tagbar config
map('n', "<F8>", ":TagbarToggle<CR>")
-- use powerline fonts
vim.api.nvim_set_var("airline_powerline_fonts", 1)
vim.api.nvim_set_var("airline_highlighting_cache", 1)
-- Mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
local opts = { noremap=true, silent=true }
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
-- Enable completion triggered by <c-x><c-o>
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap=true, silent=true, buffer=bufnr }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set('n', '<space>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
vim.keymap.set('n', '<space>f', vim.lsp.buf.formatting, bufopts)
end
-- Use a loop to conveniently call 'setup' on multiple servers and
-- map buffer local keybindings when the language server attaches
local servers = { 'rust_analyzer' }
for _, lsp in pairs(servers) do
require('lspconfig')[lsp].setup {
on_attach = on_attach,
flags = {
-- This will be the default in neovim 0.7+
debounce_text_changes = 150,
}
}
end

View file

@ -0,0 +1,30 @@
{ pkgs, ... }:
let
dsquotes = "''";
in
{
programs.neovim = {
enable = true;
extraPackages = with pkgs; [
universal-ctags
rust-analyzer
];
extraConfig = ''
lua require("base")
'';
plugins = with pkgs.vimPlugins; [
nerdtree
nerdtree-git-plugin
vim-devicons
ctrlp-vim
vim-nix
tagbar
vim-airline
copilot-vim
rust-vim # for proper syntax highlighting
tabline-nvim
nvim-lspconfig
];
};
xdg.configFile."nvim/lua/base.lua".source = ./base.lua;
}