From 2515d681244209a1e16ae3aae1a2976b6b6af480 Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Fri, 24 Feb 2023 22:58:57 +0000 Subject: [PATCH] Initial Neovim setup --- users/tsv/home.nix | 21 ++++++- users/tsv/nvim/init.lua | 49 ++++++++++++++++ users/tsv/nvim/init.vim | 96 -------------------------------- users/tsv/nvim/lua/tsv/remap.lua | 20 +++++++ 4 files changed, 88 insertions(+), 98 deletions(-) create mode 100644 users/tsv/nvim/init.lua delete mode 100644 users/tsv/nvim/init.vim create mode 100644 users/tsv/nvim/lua/tsv/remap.lua diff --git a/users/tsv/home.nix b/users/tsv/home.nix index 6875f25..40a159e 100644 --- a/users/tsv/home.nix +++ b/users/tsv/home.nix @@ -60,8 +60,23 @@ programs.neovim = { enable = true; - plugins = [ - pkgs.vimPlugins.packer-nvim + plugins = with pkgs.vimPlugins; [ + telescope-nvim + gruvbox-nvim + nvim-treesitter.withAllGrammars + nvim-web-devicons + nvim-tree-lua + vim-fugitive + git-messenger-vim + nvim-lspconfig + nvim-cmp + cmp-treesitter + cmp-path + cmp-nvim-lsp + cmp-buffer + nvim-dap + nvim-dap-ui + vimwiki ]; }; @@ -69,6 +84,8 @@ home.file.".tmux.conf".source = ./tmux.conf; xdg.configFile."git/config".source = ./git/config; xdg.configFile."git/config_foxsoft".source = ./git/config_foxsoft; + xdg.configFile."nvim/init.lua".source = ./nvim/init.lua; + xdg.configFile."nvim/lua/tsv/remap.lua".source = ./nvim/lua/tsv/remap.lua; home.file.".ssh/config".source = ./ssh/config; home.file.".LESS_TERMCAP".source = ./LESS_TERMCAP; services.syncthing.enable = true; diff --git a/users/tsv/nvim/init.lua b/users/tsv/nvim/init.lua new file mode 100644 index 0000000..5486b73 --- /dev/null +++ b/users/tsv/nvim/init.lua @@ -0,0 +1,49 @@ +require("tsv.remap") + +--- Basic stuff +local set = vim.opt +set.autoindent = true +set.tabstop = 2 +set.shiftwidth = 2 +set.softtabstop = 2 +set.expandtab = true +set.number = true +set.relativenumber = true +--- Appearance +set.cursorline = true +vim.o.background = "dark" +require("gruvbox").setup({ + transparent_mode = true, +}) +vim.cmd([[colorscheme gruvbox]]) + +-- Nvim-tree +require("nvim-tree").setup({ + sort_by = "case_sensitive", + filters = { + dotfiles = true, + }, +}) + +-- Treesitter +require'nvim-treesitter.configs'.setup { + sync_install = false, + auto_install = false, + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, +} + +-- Completion and LSP +require'cmp'.setup { + sources = { + { name = 'nvim_lsp' } + } +} +require'lspconfig'.solargraph.setup {} + +-- Vimwiki +vim.cmd([[ + let g:vimwiki_list = [{'path': '$HOME/notes/', 'syntax': 'markdown', 'ext': '.md'}] +]]) diff --git a/users/tsv/nvim/init.vim b/users/tsv/nvim/init.vim deleted file mode 100644 index 76e155b..0000000 --- a/users/tsv/nvim/init.vim +++ /dev/null @@ -1,96 +0,0 @@ -if empty(glob('~/.vim/autoload/plug.vim')) - silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs - \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim -endif - -" Run PlugInstall if there are missing plugins -autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) - \| PlugInstall --sync | source $MYVIMRC -\| endif - -call plug#begin() - Plug 'nvim-lua/plenary.nvim' - Plug 'morhetz/gruvbox' - Plug 'preservim/nerdtree' - Plug 'neovim/nvim-lspconfig' - Plug 'hrsh7th/nvim-cmp' - Plug 'nvim-telescope/telescope.nvim' - Plug 'thoughtbot/vim-rspec' - Plug 'tpope/vim-rails' - Plug 'tpope/vim-endwise' - Plug 'ryanoasis/vim-devicons' -call plug#end() - -set nocompatible -set showmatch -set ignorecase -set mouse=v -set hlsearch -set incsearch -set tabstop=2 -set softtabstop=2 -set expandtab -set shiftwidth=2 -set autoindent -set number -set relativenumber -set wildmode=longest,list -set cc=80 -filetype plugin indent on -set clipboard=unnamedplus -set cursorline - -:autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red -colorscheme gruvbox - -lua << EOF -require'lspconfig'.solargraph.setup{} - -local nvim_lsp = require('lspconfig') - --- 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) - local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end - local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end - - --Enable completion triggered by - buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') - - -- Mappings. - local opts = { noremap=true, silent=true } - - -- See `:help vim.lsp.*` for documentation on any of the below functions - buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) - buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) - buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) - buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) - buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) - buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) - buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) - buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) - buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) - buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) - buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) - buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) - buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) - buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) - buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) - buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) - buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) - -end - --- Use a loop to conveniently call 'setup' on multiple servers and --- map buffer local keybindings when the language server attaches -local servers = { "solargraph" } -for _, lsp in ipairs(servers) do - nvim_lsp[lsp].setup { - on_attach = on_attach, - flags = { - debounce_text_changes = 150, - } -} -end -EOF - diff --git a/users/tsv/nvim/lua/tsv/remap.lua b/users/tsv/nvim/lua/tsv/remap.lua new file mode 100644 index 0000000..398721c --- /dev/null +++ b/users/tsv/nvim/lua/tsv/remap.lua @@ -0,0 +1,20 @@ +vim.g.mapleader = " " +vim.keymap.set("n", "pv", vim.cmd.Ex) + +-- Telescope +local builtin = require('telescope.builtin') +vim.keymap.set('n', 'tf', builtin.find_files, {}) -- Open files +vim.keymap.set('n', 'ts', builtin.live_grep, {}) -- Grep files +vim.keymap.set('n', 'tb', builtin.buffers, {}) -- Neovim buffers +vim.keymap.set('n', 'tr', builtin.resume, {}) +-- Git functionality (all start tg) +vim.keymap.set('n', 'tgf', builtin.git_files, {}) +vim.keymap.set('n', 'tgc', builtin.git_commits, {}) +vim.keymap.set('n', 'tgb', builtin.git_branches, {}) +-- Then checkout with CR, track with C-t and rebase with C-r! + +-- Fugitive +vim.keymap.set("n", "gs", vim.cmd.Git); + +-- Nvim-tree +vim.keymap.set("n", "nt", vim.cmd.NvimTreeToggle, {})