# TODO vim illuminate # TODO keybinds # TODO dap dapui # TODO neotree focsed shows lualine wrongly (full instead of nothing) # TODO lualine inactive ------ is ugly # TODO move lines. gomove again? # TODO vim-wordmotion vs https://github.com/chrisgrieser/nvim-various-textobjs # TODO blankline cur indent too bright { imports = [ ./alpha.nix ./appearance.nix ./completion.nix ./git.nix ./globals.nix ./languages.nix ./lsp.nix ./misc.nix ./neo-tree.nix ./onedark.nix ./web-devicons.nix ]; programs.nixvim = { enable = true; # TODO for wayland: # clipboard.providers.wl-copy.enable = true; luaLoader.enable = true; globals.mapleader = ","; # Hide line numbers in terminal windows autoCmd = [ { event = [ "BufEnter" "BufWinEnter" ]; pattern = [ "term://*" ]; callback.__raw = # lua '' function() vim.bo.number = false end ''; } { event = [ "WinEnter" ]; pattern = [ "*" ]; callback.__raw = # lua '' function() pcall(function() if vim.bo.buftype == "nofile" or vim.bo.buftype == "help" then vim.cmd "DisableWhitespace" else vim.cmd "EnableWhitespace" end end) end ''; } ]; # TODO split into files keymaps = let keymap = mode: key: action: desc: { inherit action key mode; options = { silent = true; inherit desc; }; }; in [ # ------------------------------------------------------------------------------------------------- # General # ------------------------------------------------------------------------------------------------- # Shift + scroll with cursor locked to position (keymap [ "n" "v" ] "" "" "") (keymap [ "n" "v" ] "" "" "") (keymap [ "i" ] "" "" "") (keymap [ "i" ] "" "" "") # Shift + Alt + change the current window size (keymap [ "n" ] "" ":resize -2" "") (keymap [ "n" ] "" ":resize +2" "") (keymap [ "n" ] "" ":vertical resize -2" "") (keymap [ "n" ] "" ":vertical resize +2" "") # Allow exiting terminal mode (keymap [ "t" ] "" "" "") # Allow C-w in terminal mode (keymap [ "t" ] "" "" "") # Open fixed size terminal window at the bottom (keymap [ "n" ] "" ":belowright new | setlocal wfh | resize 10 | terminal" "Open Terminal") # ------------------------------------------------------------------------------------------------- # Language server # ------------------------------------------------------------------------------------------------- (keymap [ "n" ] "gD" "lua vim.lsp.buf.declaration()" "Goto declaration") (keymap [ "n" ] "gd" "lua require('telescope.builtin').lsp_definitions()" "Goto definition") (keymap [ "n" ] "K" "lua vim.lsp.buf.hover()" "Hover") (keymap [ "n" ] "gi" "lua require('telescope.builtin').lsp_implementations()" "Goto implementation") (keymap [ "n" ] "" "lua vim.lsp.buf.signature_help()" "Signature Help") (keymap [ "n" ] "wa" "lua vim.lsp.buf.add_workspace_folder()" "Add workspace folder") (keymap [ "n" ] "wr" "lua vim.lsp.buf.remove_workspace_folder()" "Remove workspace folder") (keymap [ "n" ] "wl" "lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))" "List workspace folders" ) (keymap [ "n" ] "gt" "lua require('telescope.builtin').lsp_type_definitions()" "Goto type-definition") (keymap [ "n" ] "r" "lua vim.lsp.buf.rename()" "Rename") (keymap [ "n" ] "a" "lua vim.lsp.buf.code_action()" "Code Action") (keymap [ "n" ] "gr" "lua require('telescope.builtin').lsp_references()" "References") (keymap [ "n" ] "gl" "lua vim.diagnostic.open_float()" "Diagnostic float") (keymap [ "n" ] "[d" "lua vim.diagnostic.goto_prev()" "Next diagnostic") (keymap [ "n" ] "]d" "lua vim.diagnostic.goto_next()" "Previous diagnostic") (keymap [ "n" ] "q" "lua vim.diagnostic.setloclist()" "Show diagnostic quickfix list") (keymap [ "n" ] "f" "lua vim.lsp.buf.format { async = true }" "Format code") # ------------------------------------------------------------------------------------------------- # Plugin: Easy Align # ------------------------------------------------------------------------------------------------- (keymap [ "n" ] "A" "(EasyAlign)" "Easy-Align") (keymap [ "v" ] "A" "(EasyAlign)" "Easy-Align") # ------------------------------------------------------------------------------------------------- # Plugin: Undotree # ------------------------------------------------------------------------------------------------- (keymap [ "n" ] "u" ":UndotreeToggle" "Undotree") # ------------------------------------------------------------------------------------------------- # Plugin: Better Whitespace # ------------------------------------------------------------------------------------------------- (keymap [ "n" ] "$" ":StripWhitespace" "Strip whitespace") # ------------------------------------------------------------------------------------------------- # Plugin: Neotree # ------------------------------------------------------------------------------------------------- # Mappings to open the tree / find the current file (keymap [ "n" ] "t" ":Neotree toggle" "Filetree toggle") (keymap [ "n" ] "T" ":Neotree reveal" "Filetree reveal current file") (keymap [ "n" ] "G" ":Neotree float git_status" "Show git status") (keymap [ "n" ] "b" ":Neotree float buffers" "Show open buffers") # ------------------------------------------------------------------------------------------------- # Plugin: Sandwich # ------------------------------------------------------------------------------------------------- (keymap [ "n" "v" ] "m" "(operator-sandwich-add)" "Sandwich Add") (keymap [ "n" "v" ] "M" "(operator-sandwich-delete)" "Sandwich Delete") (keymap [ "n" "v" ] "" "(operator-sandwich-replace)" "Sandwich Replace") # ------------------------------------------------------------------------------------------------- # Plugin: gomove # ------------------------------------------------------------------------------------------------- #(keymap ["n"] "" "GoNSMLeft" "") #(keymap ["n"] "" "GoNSMDown" "") #(keymap ["n"] "" "GoNSMUp" "") #(keymap ["n"] "" "GoNSMRight" "") (keymap [ "x" ] "" "GoVSMLeft" "") (keymap [ "x" ] "" "GoVSMDown" "") (keymap [ "x" ] "" "GoVSMUp" "") (keymap [ "x" ] "" "GoVSMRight" "") #(keymap ["n"] "" "GoNSDLeft" "") #(keymap ["n"] "" "GoNSDDown" "") #(keymap ["n"] "" "GoNSDUp" "") #(keymap ["n"] "" "GoNSDRight" "") (keymap [ "x" ] "" "GoVSDLeft" "") (keymap [ "x" ] "" "GoVSDDown" "") (keymap [ "x" ] "" "GoVSDUp" "") (keymap [ "x" ] "" "GoVSDRight" "") # ------------------------------------------------------------------------------------------------- # Plugin: wordmotion # ------------------------------------------------------------------------------------------------- (keymap [ "x" "o" ] "ie" "WordMotion_iw" "inside subword") # ------------------------------------------------------------------------------------------------- # Plugin: telescope # ------------------------------------------------------------------------------------------------- (keymap [ "n" "v" ] "" "lua require('telescope.builtin').find_files()" "Telescope find files") (keymap [ "n" "v" ] "g" "lua require('telescope.builtin').live_grep()" "Telescope live grep") (keymap [ "n" "v" ] "b" "lua require('telescope.builtin').buffers()" "Telescope buffers") # ------------------------------------------------------------------------------------------------- # Plugin: textcase # ------------------------------------------------------------------------------------------------- (keymap [ "n" ] "C" "TextCaseOpenTelescopeQuickChange" "Change word case") (keymap [ "n" ] "cu" "lua require('textcase').current_word('to_upper_case')" "To UPPER CASE" ) (keymap [ "n" ] "cl" "lua require('textcase').current_word('to_lower_case')" "To lower case" ) (keymap [ "n" ] "cs" "lua require('textcase').current_word('to_snake_case')" "To snake_case" ) (keymap [ "n" ] "cd" "lua require('textcase').current_word('to_dash_case')" "To dash-case" ) (keymap [ "n" ] "cn" "lua require('textcase').current_word('to_constant_case')" "To CONSTANT_CASE" ) (keymap [ "n" ] "cd" "lua require('textcase').current_word('to_dot_case')" "To dot.case") (keymap [ "n" ] "ca" "lua require('textcase').current_word('to_phrase_case')" "To Phrase case" ) (keymap [ "n" ] "cc" "lua require('textcase').current_word('to_camel_case')" "To camelCase" ) (keymap [ "n" ] "cp" "lua require('textcase').current_word('to_pascal_case')" "To PascalCase" ) (keymap [ "n" ] "ct" "lua require('textcase').current_word('to_title_case')" "To Title Case" ) (keymap [ "n" ] "cf" "lua require('textcase').current_word('to_path_case')" "To path/case" ) (keymap [ "n" ] "cU" "lua require('textcase').lsp_rename('to_upper_case')" "LSP Rename: To UPPER CASE" ) (keymap [ "n" ] "cL" "lua require('textcase').lsp_rename('to_lower_case')" "LSP Rename: To lower case" ) (keymap [ "n" ] "cS" "lua require('textcase').lsp_rename('to_snake_case')" "LSP Rename: To snake_case" ) (keymap [ "n" ] "cD" "lua require('textcase').lsp_rename('to_dash_case')" "LSP Rename: To dash-case" ) (keymap [ "n" ] "cN" "lua require('textcase').lsp_rename('to_constant_case')" "LSP Rename: To CONSTANT_CASE" ) (keymap [ "n" ] "cD" "lua require('textcase').lsp_rename('to_dot_case')" "LSP Rename: To dot.case" ) (keymap [ "n" ] "cA" "lua require('textcase').lsp_rename('to_phrase_case')" "LSP Rename: To Phrase case" ) (keymap [ "n" ] "cC" "lua require('textcase').lsp_rename('to_camel_case')" "LSP Rename: To camelCase" ) (keymap [ "n" ] "cP" "lua require('textcase').lsp_rename('to_pascal_case')" "LSP Rename: To PascalCase" ) (keymap [ "n" ] "cT" "lua require('textcase').lsp_rename('to_title_case')" "LSP Rename: To Title Case" ) (keymap [ "n" ] "cF" "lua require('textcase').lsp_rename('to_path_case')" "LSP Rename: To path/case" ) # ------------------------------------------------------------------------------------------------- # Plugin: Neogit # ------------------------------------------------------------------------------------------------- (keymap [ "n" "v" ] "g" "lua require('neogit').open()" "Open Neogit") ]; }; home.sessionVariables.EDITOR = "nvim"; home.shellAliases.vimdiff = "nvim -d"; }