From f8e3204979be8670507ef92fe3c61ba13a8ed57a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vili=20Sinerv=C3=A4?= Date: Fri, 29 Nov 2024 02:41:01 +0200 Subject: [PATCH] Transition to nixvim --- development.nix | 216 ++++++++++++++++++++++++------------------------ 1 file changed, 110 insertions(+), 106 deletions(-) diff --git a/development.nix b/development.nix index f725834..e8a71b1 100644 --- a/development.nix +++ b/development.nix @@ -1,4 +1,12 @@ -{ config, pkgs, ... }: +{ pkgs, ... }: +let + nixvim = import ( + builtins.fetchGit { + url = "https://github.com/nix-community/nixvim"; + ref = "nixos-24.05"; + } + ); +in { #################### Git configuration #################### programs.git = { @@ -22,123 +30,119 @@ #################### Packages #################### environment.systemPackages = with pkgs; [ - nodejs-slim nixfmt-rfc-style nixd ]; #################### Neovim configuration #################### - programs.neovim = { + imports = [ nixvim.nixosModules.nixvim ]; + + programs.nixvim = { enable = true; defaultEditor = true; vimAlias = true; - configure = { - packages.myVimPackage = with pkgs.vimPlugins; { - start = [ - nerdtree - nerdtree-git-plugin - vim-gitgutter - vim-fugitive - vim-tmux-navigator - vim-sleuth - coc-nvim - coc-pairs - coc-clangd - coc-cmake - coc-docker - coc-json - coc-markdownlint - coc-pyright - coc-rust-analyzer - coc-sh - coc-toml - coc-tsserver - coc-yaml - ]; + colorschemes.vscode.enable = true; + + globals.mapleader = " "; + + opts = { + colorcolumn = "100"; + cursorline = true; + number = true; + showcmd = true; + signcolumn = "yes"; + + scrolloff = 16; + shiftwidth = 3; + tabstop = 3; + }; + + keymaps = [ + { + key = ""; + action = "TmuxNavigateLeft"; + options.silent = true; + } + { + key = ""; + action = "TmuxNavigateDown"; + options.silent = true; + } + { + key = ""; + action = "TmuxNavigateUp"; + options.silent = true; + } + { + key = ""; + action = "TmuxNavigateRight"; + options.silent = true; + } + ]; + + # TODO Autocomplete + # TODO Filebrowser + # TODO Check desireable keybinds and commands for all plugins + plugins = { + gitsigns.enable = true; + lualine = { + enable = true; + iconsEnabled = false; + }; + markdown-preview.enable = true; + nix.enable = true; + rainbow-delimiters.enable = true; + sleuth.enable = true; + tmux-navigator = { + enable = true; + settings.no_mappings = true; + }; + treesitter = { + enable = true; + folding = true; + indent = true; + nixGrammars = true; }; - customRC = - let - coc-config = "${pkgs.writeTextDir "coc-settings.json" '' - { - "workspace.ignoredFolders": [ - "$HOME", - "$HOME/.cargo/**", - "$HOME/.rustup/**" - ], - rust-analyzer.inlayHints.bindingModeHints.enable: true, - rust-analyzer.inlayHints.closureReturnTypeHints.enable: "always", - rust-analyzer.inlayHints.discriminantHints.enable: "always", - rust-analyzer.inlayHints.expressionAdjustmentHints.enable: "always", - rust-analyzer.inlayHints.expressionAdjustmentHints.hideOutsideUnsafe: true, - rust-analyzer.inlayHints.lifetimeElisionHints.enable: "always", - rust-analyzer.inlayHints.lifetimeElisionHints.useParameterNames: true, - - "languageserver": { - "nix": { - "command": "nixd", - "filetypes": ["nix"] - } - } - } - ''}"; - in - '' - syntax on - set foldmethod=syntax - set number - set colorcolumn=100 - set signcolumn=yes - let NERDTreeShowLineNumbers=1 + # cmp-vsnip.enable = true; + friendly-snippets.enable = true; + nvim-autopairs.enable = true; - set background=dark + lsp = { + enable = true; + keymaps = { + diagnostic = { + "j" = "goto_next"; + "k" = "goto_prev"; + }; + lspBuf = { + K = "hover"; + gD = "references"; + gd = "definition"; + gi = "implementation"; + gt = "type_definition"; + }; + }; + servers = { + clangd.enable = true; + cmake.enable = true; + dockerls.enable = true; + docker-compose-language-service.enable = true; + eslint.enable = true; + html.enable = true; + jsonls.enable = true; + nixd.enable = true; + pylsp.enable = true; + rust-analyzer = { + enable = true; + installCargo = true; + installRustc = true; + }; + yamlls.enable = true; + }; + }; + lsp-format.enable = true; - set showcmd - set scrolloff=16 - - filetype plugin indent on - set autoindent - set shiftwidth=3 - set tabstop=3 - - " Some servers have issues with backup files, see #649 - set nobackup - set nowritebackup - " Having longer updatetime (default is 4000 ms = 4s) leads to noticeable - " delays and poor user experience - set updatetime=300 - - " Make to accept selected completion item or notify coc.nvim to format - " u breaks current undo, please make your own choice. - inoremap coc#pum#visible() ? coc#pum#confirm() - \: "\u\\=coc#on_enter()\" - " Navigate suggestion list with tab and shift-tab - inoremap coc#pum#visible() ? coc#pum#next(1) : "\" - inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" - - " If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree. - autocmd BufEnter * if winnr() == winnr('h') && bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 | - \ let buf=bufnr() | buffer# | execute "normal! \w" | execute 'buffer'.buf | endif - - " Start NERDTree. If a file is specified, move the cursor to its window. - autocmd StdinReadPre * let s:std_in=1 - autocmd VimEnter * NERDTree | if argc() > 0 || exists('s:std_in') | wincmd p | endif - - let g:coc_config_home = "${coc-config}" - - let g:tmux_navigator_no_mappings = 1 - noremap :TmuxNavigateLeft - noremap :TmuxNavigateDown - noremap :TmuxNavigateUp - noremap :TmuxNavigateRight - - augroup nixcmd - autocmd! - autocmd BufWritePre *.nix mkview - autocmd BufWritePre *.nix %!nixfmt - autocmd BufWritePost *.nix loadview - augroup END - ''; }; }; }