diff --git a/.config/nvim/lua/config/coq.lua b/.config/nvim/lua/config/coq.lua new file mode 100644 index 0000000..cab62c7 --- /dev/null +++ b/.config/nvim/lua/config/coq.lua @@ -0,0 +1,27 @@ +local g = vim.g + +g.coq_settings = { + auto_start = "shut-up" +} + +vim.api.nvim_set_keymap("i", "", 'pumvisible() ? "\\" : "\\"', { + expr = true +}) + +vim.api.nvim_set_keymap("i", "", 'pumvisible() ? "\\" : "\\"', { + expr = true +}) + +--Set completeopt to have a better completion experience +vim.o.completeopt = "menuone,noinsert,noselect" + +--Avoid showing message extra message when using completion +vim.o.shortmess = vim.o.shortmess .. "c" + +vim.g.completion_chain_complete_list = { + default = { + { complete_items = { 'lsp', "buffer", "buffers" } }, + { mode = { '' } }, + { mode = { '' } } + }, +} diff --git a/.config/nvim/lua/config/ctrlp.lua b/.config/nvim/lua/config/ctrlp.lua new file mode 100644 index 0000000..fb7ba53 --- /dev/null +++ b/.config/nvim/lua/config/ctrlp.lua @@ -0,0 +1,15 @@ +local g = vim.g + +g.ctrlp_map = "t" +-- g.ctrlp_use_caching = 1 +-- g.ctrlp_clear_cache_on_exit = 0 +-- g.ctrlp_cache_dir = "./.vim/cache/ctrlp" +g.ctrlp_user_command = { + '.git', 'git --git-dir=%s/.git ls-files -oc --exclude-standard' +} + +--Limit max number of files +--This prevents me from indexing my entire HOME by accident +g.ctrlp_max_files = 1000 +--Also limit recursion depth +g.ctrlp_max_depth = 10 diff --git a/.config/nvim/lua/config/fugitive.lua b/.config/nvim/lua/config/fugitive.lua new file mode 100644 index 0000000..b88014a --- /dev/null +++ b/.config/nvim/lua/config/fugitive.lua @@ -0,0 +1,7 @@ +-- tpope/vim-fugitive +nmap("gg", ":Git") +nmap("gc", ":Git commit") +nmap("gp", ":Git push") +nmap("gd", ":Gdiffsplit!") +nmap("gm", ":Git mergetool") +nmap("gb", ":Git blame") diff --git a/.config/nvim/lua/config/gitgutter.lua b/.config/nvim/lua/config/gitgutter.lua new file mode 100644 index 0000000..2736f69 --- /dev/null +++ b/.config/nvim/lua/config/gitgutter.lua @@ -0,0 +1,3 @@ +local g = vim.g + +g.gitgutter_map_keys = 0 diff --git a/.config/nvim/lua/config/lspconfig.lua b/.config/nvim/lua/config/lspconfig.lua new file mode 100644 index 0000000..a31420a --- /dev/null +++ b/.config/nvim/lua/config/lspconfig.lua @@ -0,0 +1,45 @@ +-- neovim/neovim-lspconfig +local function on_attach(client, bufnr) + local opts = { + silent = true, + noremap = true, + } + local function buf_nmap(mapping, cmd) vim.api.nvim_buf_set_keymap(bufnr, "n", mapping, cmd, opts) end + + -- Jump to definition + buf_nmap("gd", "lua vim.lsp.buf.definition()") + -- Format current buffer on write + vim.api.nvim_command([[autocmd BufWritePre lua vim.lsp.buf.formatting_seq_sync()]]) + -- Show diagnostics for current line + buf_nmap("dd", "lua vim.lsp.diagnostic.show_line_diagnostics()") + -- Jump between diagnostic messages + buf_nmap("dj", "lua vim.lsp.diagnostic.goto_next()") + buf_nmap("dk", "lua vim.lsp.diagnostic.goto_previous()") + -- Rename symbol under cursor + buf_nmap("dr", "lua vim.lsp.buf.rename()") + -- Show hover info + buf_nmap("df", "lua vim.lsp.buf.hover()") +end + +-- Comes with clang +require'lspconfig'.clangd.setup{on_attach = on_attach} +-- NPM: dockerfile-language-server-nodejs +require'lspconfig'.dockerls.setup{} +-- Pacman: haskell-language-server +-- AUR: haskell-language-server-bin +-- GH: https://github.com/haskell/haskell-language-server +require'lspconfig'.hls.setup{ + on_attach = on_attach, + settings = { + haskell = { + formattingProvider = "stylish-haskell" + } + } +} +-- Pacman: rust-analyzer +-- GH: https://github.com/rust-analyzer/rust-analyzer +require'lspconfig'.rust_analyzer.setup{on_attach = on_attach} +-- Installed using R shell: +-- `install.packages('languageserver')` +-- GH: https://github.com/REditorSupport/languageserver +require'lspconfig'.r_language_server.setup{} diff --git a/.config/nvim/lua/config/nerdtree.lua b/.config/nvim/lua/config/nerdtree.lua new file mode 100644 index 0000000..ac8bc2b --- /dev/null +++ b/.config/nvim/lua/config/nerdtree.lua @@ -0,0 +1,29 @@ +local g = vim.g + +g.NERDTreeIgnore = { + '^\\.vim$[[dir]]', + '^\\.vscode$[[dir]]', '.*\\.code-workspace$[[file]]', '^\\.idea$[[dir]]', + '^__pycache__$[[dir]]', '^\\.pytest_cache$[[dir]]', '^venv$[[dir]]', + '\\.egg-info$[[dir]]', '^dist$[[dir]]', '^build$[[dir]]', + '^\\.eggs$[[dir]]', + '^out$[[dir]]', + '^\\.git$[[dir]]', + '^\\.stack-work$[[dir]]', '\\.lock$', + '^CMakeFiles$[[dir]]', '^CMakeCache.txt$[[file]]', + '.pdf$[[file]]', + '^node_modules$[[dir]]' +} + +g.NERDTreeShowHidden = 1 +g.NERDTreeMinimalUI = 1 +g.NERDTreeDirArrows = 1 +g.NERDTreeQuitOnOpen = 1 +g.NERDTreeChDirMode = 0 +g.NERDTreeNaturalSort = 1 +g.NERDTreeShowFiles = 1 +g.NERDTreeShowLineNumbers = 0 +g.NERDTreeWinPos = 'left' +g.NERDTreeMinimalMenu = 1 +g.NERDTreeAutoDeleteBuffer = 1 + +nmap("tt", ":NERDTreeFind") diff --git a/.config/nvim/lua/config/tagbar.lua b/.config/nvim/lua/config/tagbar.lua new file mode 100644 index 0000000..edb178c --- /dev/null +++ b/.config/nvim/lua/config/tagbar.lua @@ -0,0 +1,12 @@ +local g = vim.g + +g.tagbar_map_nexttag = "J" +g.tagbar_map_prevtag = "K" +g.tagbar_map_showproto = "u" +g.tagbar_sort = 0 +g.tagbar_compact = 1 +g.tagbar_autoshowtag = 1 +g.no_status_line = 1 +g.tagbar_autoclose = 1 + +nmap("tr", ":TagbarToggle") diff --git a/.config/nvim/lua/config/toggleterm.lua b/.config/nvim/lua/config/toggleterm.lua new file mode 100644 index 0000000..e146b56 --- /dev/null +++ b/.config/nvim/lua/config/toggleterm.lua @@ -0,0 +1,15 @@ +vim.o.hidden = true + +require("toggleterm").setup { + -- open_mapping = "r", + direction = "float", + insert_mappings = false, + start_in_insert = false +} + +nmap("rr", ":ToggleTerm") +nmap("ry", ":1ToggleTerm") +nmap("ru", ":2ToggleTerm") +nmap("ri", ":3ToggleTerm") +nmap("ro", ":4ToggleTerm") +nmap("rp", ":5ToggleTerm") diff --git a/.config/nvim/lua/config/treesitter.lua b/.config/nvim/lua/config/treesitter.lua new file mode 100644 index 0000000..79d52b6 --- /dev/null +++ b/.config/nvim/lua/config/treesitter.lua @@ -0,0 +1,3 @@ +require"nvim-treesitter.configs".setup { + highlight = { enable = true } +} diff --git a/.config/nvim/lua/config/v.lua b/.config/nvim/lua/config/v.lua new file mode 100644 index 0000000..8f4c5c1 --- /dev/null +++ b/.config/nvim/lua/config/v.lua @@ -0,0 +1,3 @@ +local g = vim.g + +g.v_autofmt_bufwritepre = 1 diff --git a/.config/nvim/lua/keys.lua b/.config/nvim/lua/keys.lua index aa0322f..defabce 100644 --- a/.config/nvim/lua/keys.lua +++ b/.config/nvim/lua/keys.lua @@ -1,5 +1,6 @@ imap("jk", "") -imap("", "") + +vim.api.nvim_exec("inoremap ", false) -- Navigate splits nmap("h", ":wincmd h") diff --git a/.config/nvim/lua/plugins.lua b/.config/nvim/lua/plugins.lua index bd28ddb..f2ed91a 100644 --- a/.config/nvim/lua/plugins.lua +++ b/.config/nvim/lua/plugins.lua @@ -4,206 +4,113 @@ -- Largely inspired by https://github.com/wbthomason/packer.nvim#bootstrapping local fn = vim.fn local g = vim.g + +-- Install packer if it isn't present local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' if fn.empty(fn.glob(install_path)) > 0 then - fn.system({'git', 'clone', 'https://github.com/wbthomason/packer.nvim', install_path}) - vim.api.nvim_command('packadd packer.nvim') + packer_bootstrap = fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) + vim.cmd [[ packadd packer.nvim ]] end -require('packer').startup(function() +require('packer').startup(function(use) use "wbthomason/packer.nvim" -- Improves boot times -- use {"lewis6991/impatient.nvim", rocks = 'mpack'} - use "ctrlpvim/ctrlp.vim" - use "tpope/vim-fugitive" + + -- Fuzzy search engine + use { + "ctrlpvim/ctrlp.vim", + setup = [[require('config.ctrlp')]] + } + + -- Git client + use { + "tpope/vim-fugitive", + config = [[require('config.fugitive')]] + } + + -- Shortcuts for commenting out code use "tpope/vim-commentary" + + -- Shortcuts for surrounding pieces of text use "tpope/vim-surround" - use "majutsushi/tagbar" - use "airblade/vim-gitgutter" + + -- Shows ctags in a sidebar + use { + "majutsushi/tagbar", + config = [[require('config.tagbar')]] + } + + -- Shows git diff markers + use { + "airblade/vim-gitgutter", + config = [[require('config.gitgutter')]] + } + use "hynek/vim-python-pep8-indent" use "michaeljsmith/vim-indent-object" - use "preservim/nerdtree" - use "cespare/vim-toml" + + -- File explorer + use { + "preservim/nerdtree", + config = [[require('config.nerdtree')]] + } + use "jiangmiao/auto-pairs" + + -- Align text use "godlygeek/tabular" + + -- Automatically load a .editorconfig file if found use "editorconfig/editorconfig-vim" - use "neovim/nvim-lspconfig" - -- use "hrsh7th/nvim-compe" - use "marko-cerovac/material.nvim" - use {"ms-jpq/coq_nvim", branch="coq"} - use {"nvim-treesitter/nvim-treesitter", run=":TSUpdate"} - use "akinsho/nvim-toggleterm.lua" + + -- Pre-configured LSP stuff + use { + "neovim/nvim-lspconfig", + config = [[require('config.lspconfig')]] + } + + -- Beautiful treesitter-compatible theme + use { + "marko-cerovac/material.nvim", + config = function() + vim.cmd("colorscheme material") + -- color material + nmap("c", [[lua require('material.functions').toggle_style()]]) + end + } + + -- Autocomplete engine + use { + "ms-jpq/coq_nvim", + branch = "coq", + config = [[require('config.coq')]] + } + + -- Better syntax highlighting + use { + "nvim-treesitter/nvim-treesitter", + run = ":TSUpdate", + config = [[require('config.treesitter')]] + } + + -- Toggleable terminals + use { + "akinsho/nvim-toggleterm.lua", + config = [[require('config.toggleterm')]] + } + -- LaTeX editing use "lervag/vimtex" + + -- V support + use { + "ollykel/v-vim", + config = [[require('config.v')]] + } + + if packer_bootstrap then + require('packer').sync() + end end) - - --- =====PLUGIN CONFIGS===== -g.coq_settings = {auto_start = "shut-up"} - --- ctrlpvim/ctrlp.vim -g.ctrlp_map = "t" -g.ctrlp_use_caching = 1 -g.ctrlp_clear_cache_on_exit = 0 -g.ctrlp_cache_dir = "./.vim/cache/ctrlp" -g.ctrlp_user_command = { - '.git', 'git --git-dir=%s/.git ls-files -oc --exclude-standard' -} - ---Limit max number of files ---This prevents me from indexing my entire HOME by accident -g.ctrlp_max_files = 10000 ---Also limit recursion depth -g.ctrlp_max_depth = 40 - --- tpope/vim-fugitive -nmap("gg", ":Git") -nmap("gc", ":Git commit") -nmap("gp", ":Git push") -nmap("gd", ":Gdiffsplit!") -nmap("gm", ":Git mergetool") -nmap("gb", ":Git blame") - --- airblade/vim-gitgutter -g.gitgutter_map_keys = 0 - --- indentline -g.indentLine_char_list = {'|', '¦', '┆', '┊'} - --- preservim/nerdtree -g.NERDTreeIgnore = { - '^\\.vim$[[dir]]', - '^\\.vscode$[[dir]]', '.*\\.code-workspace$[[file]]', '^\\.idea$[[dir]]', - '^__pycache__$[[dir]]', '^\\.pytest_cache$[[dir]]', '^venv$[[dir]]', - '\\.egg-info$[[dir]]', '^dist$[[dir]]', '^build$[[dir]]', - '^\\.eggs$[[dir]]', - '^out$[[dir]]', - '^\\.git$[[dir]]', - '^\\.stack-work$[[dir]]', '\\.lock$', - '^CMakeFiles$[[dir]]', '^CMakeCache.txt$[[file]]', - '.pdf$[[file]]', - '^node_modules$[[dir]]' -} - -g.NERDTreeShowHidden = 1 -g.NERDTreeMinimalUI = 1 -g.NERDTreeDirArrows = 1 -g.NERDTreeQuitOnOpen = 1 -g.NERDTreeChDirMode = 0 -g.NERDTreeNaturalSort = 1 -g.NERDTreeShowFiles = 1 -g.NERDTreeShowLineNumbers = 0 -g.NERDTreeWinPos = 'left' -g.NERDTreeMinimalMenu = 1 -g.NERDTreeAutoDeleteBuffer = 1 - -nmap("tt", ":NERDTreeFind") - --- majutsushi/tagbar -g.tagbar_map_nexttag = "J" -g.tagbar_map_prevtag = "K" -g.tagbar_map_showproto = "u" -g.tagbar_sort = 0 -g.tagbar_compact = 1 -g.tagbar_autoshowtag = 1 -g.no_status_line = 1 -g.tagbar_autoclose = 1 - -nmap("tr", ":TagbarToggle") - --- neovim/neovim-lspconfig -local function on_attach(client, bufnr) - local opts = { - silent = true, - noremap = true, - } - local function buf_nmap(mapping, cmd) vim.api.nvim_buf_set_keymap(bufnr, "n", mapping, cmd, opts) end - - -- Jump to definition - buf_nmap("gd", "lua vim.lsp.buf.definition()") - -- Format current buffer on write - vim.api.nvim_command([[autocmd BufWritePre lua vim.lsp.buf.formatting_seq_sync()]]) - -- Show diagnostics for current line - buf_nmap("dd", "lua vim.lsp.diagnostic.show_line_diagnostics()") - -- Jump between diagnostic messages - buf_nmap("dj", "lua vim.lsp.diagnostic.goto_next()") - buf_nmap("dk", "lua vim.lsp.diagnostic.goto_previous()") - -- Rename symbol under cursor - buf_nmap("dr", "lua vim.lsp.buf.rename()") - -- Show hover info - buf_nmap("df", "lua vim.lsp.buf.hover()") -end - --- Comes with clang -require'lspconfig'.clangd.setup{on_attach = on_attach} --- NPM: dockerfile-language-server-nodejs -require'lspconfig'.dockerls.setup{} --- Pacman: haskell-language-server --- AUR: haskell-language-server-bin --- GH: https://github.com/haskell/haskell-language-server -require'lspconfig'.hls.setup{ - on_attach = on_attach, - settings = { - haskell = { - formattingProvider = "stylish-haskell" - } - } -} --- Pacman: rust-analyzer --- GH: https://github.com/rust-analyzer/rust-analyzer -require'lspconfig'.rust_analyzer.setup{on_attach = on_attach} --- Installed using R shell: --- `install.packages('languageserver')` --- GH: https://github.com/REditorSupport/languageserver -require'lspconfig'.r_language_server.setup{} - --- material --- require('material').set() --- colorscheme matieral --- vim.o.colors_name = "material" -vim.cmd("colorscheme material") --- color material -nmap("c", [[lua require('material.functions').toggle_style()]]) - --- nvim-lua/completion-nvim ---Use and to navigate through popup menu -vim.api.nvim_set_keymap("i", "", 'pumvisible() ? "\\" : "\\"', { - expr = true -}) -vim.api.nvim_set_keymap("i", "", 'pumvisible() ? "\\" : "\\"', { - expr = true -}) - ---Set completeopt to have a better completion experience -vim.o.completeopt = "menuone,noinsert,noselect" - ---Avoid showing message extra message when using completion -vim.o.shortmess = vim.o.shortmess .. "c" - -vim.g.completion_chain_complete_list = { - default = { - { complete_items = { 'lsp', "buffer", "buffers" } }, - { mode = { '' } }, - { mode = { '' } } - }, -} - -require"nvim-treesitter.configs".setup { - highlight = { enable = true } -} - -vim.o.hidden = true -require("toggleterm").setup { - -- open_mapping = "r", - direction = "float", - insert_mappings = false, - start_in_insert = false -} - -nmap("rr", ":ToggleTerm") -nmap("ry", ":1ToggleTerm") -nmap("ru", ":2ToggleTerm") -nmap("ri", ":3ToggleTerm") -nmap("ro", ":4ToggleTerm") -nmap("rp", ":5ToggleTerm") diff --git a/.config/nvim/lua/settings.lua b/.config/nvim/lua/settings.lua index 4f0ca72..b3e24e5 100644 --- a/.config/nvim/lua/settings.lua +++ b/.config/nvim/lua/settings.lua @@ -37,15 +37,18 @@ o.smartcase = true -- Don't highlight search results after search is finished o.hlsearch = false +local swap_dir = vim.fn.stdpath('data') .. '/swap' +local undo_dir = vim.fn.stdpath('data') .. '/undo' + -- Create swap files o.swapfile = true -- Where to store the swap files; I store mine in the current directory -o.directory = "./.vim/swap//" +o.directory = swap_dir o.backup = false o.undofile = true -o.undodir = "./.vim/undo//" +o.undodir = undo_dir o.updatetime = 250 diff --git a/.tmux.conf b/.tmux.conf index 12845ba..88c4f5e 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1,6 +1,3 @@ -<<<<<<< Updated upstream -set -s escape-time 0 -======= # Change prefix to Ctrl-a unbind C-b set -g prefix C-a @@ -24,4 +21,3 @@ bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R ->>>>>>> Stashed changes