diff --git a/config/home-manager/base.nix b/config/home-manager/base.nix index 403ab8b2..e85267f7 100644 --- a/config/home-manager/base.nix +++ b/config/home-manager/base.nix @@ -1,7 +1,7 @@ -desktop: {pkgs, ...}: { +desktop: { pkgs, ... }: { imports = [ ../programs/zsh.nix - ../programs/vim.nix + ../programs/vim ../programs/tmux.nix ../programs/ssh.nix ]; @@ -35,7 +35,7 @@ desktop: {pkgs, ...}: { accounts.email.maildirBasePath = "Maildir"; accounts.email.accounts = rec { 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 = { encryptByDefault = true; key = "B4E3D4801C49EC5E"; @@ -44,7 +44,7 @@ desktop: {pkgs, ...}: { imap.host = "mail.chir.rs"; imapnotify = { enable = true; - boxes = ["Inbox"]; + boxes = [ "Inbox" ]; onNotify = "${pkgs.isync}/bin/mbsync -a || true"; onNotifyPost = if desktop @@ -77,7 +77,7 @@ desktop: {pkgs, ...}: { lotte // { address = "mdelenk@hs-mittweida.de"; - aliases = []; + aliases = [ ]; gpg = lotte.gpg // { diff --git a/config/programs/vim.nix b/config/programs/vim.nix deleted file mode 100644 index f33b1a93..00000000 --- a/config/programs/vim.nix +++ /dev/null @@ -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! \w" | execute 'buffer'.buf | endif - - " NerdTree git plugin - " Use nerdfonts - let g:NERDTreeGitStatusUseNerdFonts = 1 - - " CtrlP config - let g:ctrlp_map = '' - let g:ctrlp_cmd = 'CtrlP' - - " Tagbar config - nmap :TagbarToggle - - - - " 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 - ]; - }; -} diff --git a/config/programs/vim/base.lua b/config/programs/vim/base.lua new file mode 100644 index 00000000..a237f7d2 --- /dev/null +++ b/config/programs/vim/base.lua @@ -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 +-- don’t 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! \\w\" | execute 'buffer'.buf | endif" +}) + +-- Use NerdFonts +vim.api.nvim_set_var("NERDTreeGitStatusUseNerdFonts", 1) + +-- CtrlP config +vim.api.nvim_set_var("ctrlp_map", "") +vim.api.nvim_set_var("ctrlp_cmd", "CtrlP") + +-- Tagbar config +map('n', "", ":TagbarToggle") + +-- 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', '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', '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 + 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', '', vim.lsp.buf.signature_help, bufopts) + vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) + vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) + vim.keymap.set('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, bufopts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) + vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) + vim.keymap.set('n', '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 diff --git a/config/programs/vim/default.nix b/config/programs/vim/default.nix new file mode 100644 index 00000000..08317079 --- /dev/null +++ b/config/programs/vim/default.nix @@ -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; +}