From a33fdfdc2764d8555998e83a0e82d838ef34fd00 Mon Sep 17 00:00:00 2001 From: Dave Gallant Date: Sat, 25 Sep 2021 22:05:32 -0400 Subject: [PATCH] Add neoclip --- flake.lock | 1 + home/nvim/lua/init.lua | 424 ++++++++++++++++++++--------------------- 2 files changed, 209 insertions(+), 216 deletions(-) diff --git a/flake.lock b/flake.lock index 2ccdb94..9d8e062 100644 --- a/flake.lock +++ b/flake.lock @@ -75,6 +75,7 @@ "inputs": { "flake-utils": "flake-utils", "nixpkgs": [ + "neovim-nightly-overlay", "nixpkgs" ] }, diff --git a/home/nvim/lua/init.lua b/home/nvim/lua/init.lua index 3419557..a37828c 100644 --- a/home/nvim/lua/init.lua +++ b/home/nvim/lua/init.lua @@ -1,269 +1,272 @@ ----------------------------------------------------------------------------- -- Options {{{1 --------------------------------------------------------------- ------------------------------------------------------------------------------- -vim.opt.autoindent = true -- maintain indent of current line -vim.opt.backup = false -- don't make backups before writing -vim.opt.belloff = 'all' -- never ring the bell for any reason -vim.opt.breakindent = true -vim.opt.completeopt = 'menuone' -- show menu even if there is only one candidate (for nvim-compe) -vim.opt.completeopt = vim.opt.completeopt + 'noselect' -- don't automatically select canditate (for nvim-compe) -vim.opt.cursorline = true -- highlight current line -vim.opt.expandtab = true -- always use spaces instead of tabs -vim.opt.fillchars = { - diff = '∙', -- BULLET OPERATOR (U+2219, UTF-8: E2 88 99) - eob = ' ', -- NO-BREAK SPACE (U+00A0, UTF-8: C2 A0) to suppress ~ at EndOfBuffer - vert = '┃', -- BOX DRAWINGS HEAVY VERTICAL (U+2503, UTF-8: E2 94 83) +vim.opt.autoindent = true -- maintain indent of current line +vim.opt.backup = false -- don't make backups before writing +vim.opt.belloff = "all" -- never ring the bell for any reason +vim.opt.breakindent = true +vim.opt.completeopt = "menuone" -- show menu even if there is only one candidate (for nvim-compe) +vim.opt.completeopt = vim.opt.completeopt + "noselect" -- don't automatically select canditate (for nvim-compe) +vim.opt.cursorline = true -- highlight current line +vim.opt.expandtab = true -- always use spaces instead of tabs +vim.opt.fillchars = { + diff = "∙", -- BULLET OPERATOR (U+2219, UTF-8: E2 88 99) + eob = " ", -- NO-BREAK SPACE (U+00A0, UTF-8: C2 A0) to suppress ~ at EndOfBuffer + vert = "┃", -- BOX DRAWINGS HEAVY VERTICAL (U+2503, UTF-8: E2 94 83) } -vim.opt.hlsearch = true -vim.opt.ignorecase = true -vim.opt.incsearch = true -vim.opt.mouse = 'a' -- enable mouse -vim.opt.shiftwidth = 2 -vim.opt.showcmd = true -vim.opt.smartcase = true -vim.opt.tabstop = 2 -vim.opt.wildmenu = true +vim.opt.hlsearch = true +vim.opt.ignorecase = true +vim.opt.incsearch = true +vim.opt.mouse = "a" -- enable mouse +vim.opt.shiftwidth = 2 +vim.opt.showcmd = true +vim.opt.smartcase = true +vim.opt.tabstop = 2 +vim.opt.wildmenu = true -vim.opt.modelines = 5 -- scan this many lines looking for modeline -vim.opt.number = true -- show line numbers in gutter -vim.opt.pumblend = 10 -- pseudo-transparency for popup-menu -vim.opt.relativenumber = true -- show relative numbers in gutter -vim.opt.scrolloff = 3 -- start scrolling 3 lines before edge of viewport +vim.opt.modelines = 5 -- scan this many lines looking for modeline +vim.opt.number = true -- show line numbers in gutter +vim.opt.pumblend = 10 -- pseudo-transparency for popup-menu +vim.opt.relativenumber = true -- show relative numbers in gutter +vim.opt.scrolloff = 3 -- start scrolling 3 lines before edge of viewport -vim.opt.spellcapcheck = '' -- don't check for capital letters at start of sentence -vim.opt.splitbelow = true -- open horizontal splits below current window -vim.opt.splitright = true -- open vertical splits to the right of the current window -vim.opt.suffixes = vim.opt.suffixes - '.h' -- don't sort header files at lower priority -vim.opt.swapfile = false -- don't create swap files -vim.opt.switchbuf = 'usetab' -- try to reuse windows/tabs when switching buffers -vim.opt.synmaxcol = 200 -- don't bother syntax highlighting long lines -vim.opt.tabstop = 2 -- spaces per tab -vim.opt.termguicolors = true -- use guifg/guibg instead of ctermfg/ctermbg in terminal +vim.opt.spellcapcheck = "" -- don't check for capital letters at start of sentence +vim.opt.splitbelow = true -- open horizontal splits below current window +vim.opt.splitright = true -- open vertical splits to the right of the current window +vim.opt.suffixes = vim.opt.suffixes - ".h" -- don't sort header files at lower priority +vim.opt.swapfile = false -- don't create swap files +vim.opt.switchbuf = "usetab" -- try to reuse windows/tabs when switching buffers +vim.opt.synmaxcol = 200 -- don't bother syntax highlighting long lines +vim.opt.tabstop = 2 -- spaces per tab +vim.opt.termguicolors = true -- use guifg/guibg instead of ctermfg/ctermbg in terminal -vim.opt.shell = 'bash' -- shell to use for `!`, `:!`, `system()` etc. -vim.opt.shiftround = false -- don't always indent by multiple of shiftwidth -vim.opt.shiftwidth = 2 -- spaces per tab (when shifting) -vim.opt.shortmess = vim.opt.shortmess + 'A' -- ignore annoying swapfile messages -vim.opt.shortmess = vim.opt.shortmess + 'I' -- no splash screen -vim.opt.shortmess = vim.opt.shortmess + 'O' -- file-read message overwrites previous -vim.opt.shortmess = vim.opt.shortmess + 'T' -- truncate non-file messages in middle -vim.opt.shortmess = vim.opt.shortmess + 'W' -- don't echo "[w]"/"[written]" when writing -vim.opt.shortmess = vim.opt.shortmess + 'a' -- use abbreviations in messages eg. `[RO]` instead of `[readonly]` -vim.opt.shortmess = vim.opt.shortmess + 'c' -- completion messages -vim.opt.shortmess = vim.opt.shortmess + 'o' -- overwrite file-written messages -vim.opt.shortmess = vim.opt.shortmess + 't' -- truncate file messages at start -vim.opt.showbreak = '↳ ' -- DOWNWARDS ARROW WITH TIP RIGHTWARDS (U+21B3, UTF-8: E2 86 B3) -vim.opt.showcmd = false -- don't show extra info at end of command line -vim.opt.sidescroll = 0 -- sidescroll in jumps because terminals are slow -vim.opt.sidescrolloff = 3 -- same as scrolloff, but for columns -vim.opt.smarttab = true -- / indent/dedent in leading whitespace +vim.opt.shell = "bash" -- shell to use for `!`, `:!`, `system()` etc. +vim.opt.shiftround = false -- don't always indent by multiple of shiftwidth +vim.opt.shiftwidth = 2 -- spaces per tab (when shifting) +vim.opt.shortmess = vim.opt.shortmess + "A" -- ignore annoying swapfile messages +vim.opt.shortmess = vim.opt.shortmess + "I" -- no splash screen +vim.opt.shortmess = vim.opt.shortmess + "O" -- file-read message overwrites previous +vim.opt.shortmess = vim.opt.shortmess + "T" -- truncate non-file messages in middle +vim.opt.shortmess = vim.opt.shortmess + "W" -- don't echo "[w]"/"[written]" when writing +vim.opt.shortmess = vim.opt.shortmess + "a" -- use abbreviations in messages eg. `[RO]` instead of `[readonly]` +vim.opt.shortmess = vim.opt.shortmess + "c" -- completion messages +vim.opt.shortmess = vim.opt.shortmess + "o" -- overwrite file-written messages +vim.opt.shortmess = vim.opt.shortmess + "t" -- truncate file messages at start +vim.opt.showbreak = "↳ " -- DOWNWARDS ARROW WITH TIP RIGHTWARDS (U+21B3, UTF-8: E2 86 B3) +vim.opt.showcmd = false -- don't show extra info at end of command line +vim.opt.sidescroll = 0 -- sidescroll in jumps because terminals are slow +vim.opt.sidescrolloff = 3 -- same as scrolloff, but for columns +vim.opt.smarttab = true -- / indent/dedent in leading whitespace -- Format JSON -vim.cmd[[command! JsonFormat execute "::%!jq '.'"]] +vim.cmd([[command! JsonFormat execute "::%!jq '.'"]]) -- Tab shortcuts -vim.api.nvim_set_keymap("n", "", "tabnew", - {noremap = true} -) +vim.api.nvim_set_keymap("n", "", "tabnew", { noremap = true }) -- Copy to OS clipboard -vim.api.nvim_set_keymap("v", "y", "\"+y", - {noremap = true} -) +vim.api.nvim_set_keymap("v", "y", '"+y', { noremap = true }) -- Folding -vim.api.nvim_set_keymap("n", "", "za", - {silent = true, noremap = true} -) +vim.api.nvim_set_keymap("n", "", "za", { silent = true, noremap = true }) -- Map gx to xdg-open -vim.api.nvim_set_keymap("n", "gx", ":execute 'silent! !xdg-open ' . shellescape(expand(''), 1)", - {silent = true, noremap = true} +vim.api.nvim_set_keymap( + "n", + "gx", + ":execute 'silent! !xdg-open ' . shellescape(expand(''), 1)", + { silent = true, noremap = true } ) --Set colorscheme vim.o.termguicolors = true -vim.cmd[[colorscheme gruvbox]] +vim.cmd([[colorscheme gruvbox]]) -- Use tab as trigger keys -vim.cmd[[imap (completion_smart_tab)]] -vim.cmd[[imap (completion_smart_s_tab)]] +vim.cmd([[imap (completion_smart_tab)]]) +vim.cmd([[imap (completion_smart_s_tab)]]) -- Remember line number -vim.cmd[[au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif]] +vim.cmd([[au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif]]) -- Replace visual selection -vim.cmd[[vnoremap "hy:%s/h//g]] +vim.cmd([[vnoremap "hy:%s/h//g]]) -- Indent YAML -vim.cmd[[au FileType yaml setlocal ts=2 sts=2 sw=2 expandtab]] +vim.cmd([[au FileType yaml setlocal ts=2 sts=2 sw=2 expandtab]]) -- Indent Python -vim.cmd[[au BufNewFile,BufRead *.py set tabstop=4 softtabstop=4 shiftwidth=4 textwidth=79 expandtab autoindent fileformat=unix]] +vim.cmd([[au BufNewFile,BufRead *.py set tabstop=4 softtabstop=4 shiftwidth=4 textwidth=79 expandtab autoindent fileformat=unix]]) -- Highlight whitespace -vim.cmd[[highlight ExtraWhitespace ctermbg=red guibg=red]] -vim.cmd[[match ExtraWhitespace /\s\+$/]] +vim.cmd([[highlight ExtraWhitespace ctermbg=red guibg=red]]) +vim.cmd([[match ExtraWhitespace /\s\+$/]]) ------------------------------------------------------------------------------- -- LSP {{{1 ------------------------------------------------------------------- ------------------------------------------------------------------------------- -require'lspconfig'.bashls.setup{} -require'lspconfig'.gopls.setup{} -require'lspconfig'.pyright.setup{} -require'lspconfig'.rls.setup{} -require'lspconfig'.rnix.setup{} -require'lspconfig'.solargraph.setup{} -require'lspconfig'.terraformls.setup{} -require'lspconfig'.tflint.setup{} -require'lspconfig'.yamlls.setup{} +require("lspconfig").bashls.setup({}) +require("lspconfig").gopls.setup({}) +require("lspconfig").pyright.setup({}) +require("lspconfig").rls.setup({}) +require("lspconfig").rnix.setup({}) +require("lspconfig").solargraph.setup({}) +require("lspconfig").terraformls.setup({}) +require("lspconfig").tflint.setup({}) +require("lspconfig").yamlls.setup({}) ------------------------------------------------------------------------------- -- packer {{{1 ------------------------------------------------------------------- ------------------------------------------------------------------------------- -require('packer').startup(function() - use { 'ms-jpq/coq_nvim', branch = 'coq'} -- main one - use { 'ms-jpq/coq.artifacts', branch= 'artifacts'} -- 9000+ Snippets +require("packer").startup(function() + use({ "ms-jpq/coq_nvim", branch = "coq" }) -- main one + use({ "ms-jpq/coq.artifacts", branch = "artifacts" }) -- 9000+ Snippets + use({ + "AckslD/nvim-neoclip.lua", + config = function() + require("neoclip").setup() + end, + }) end) ------------------------------------------------------------------------------- -- Plugins {{{1 --------------------------------------------------------------- ------------------------------------------------------------------------------- -- gitlinker -require"gitlinker".setup() +require("gitlinker").setup() -- status line -require('lualine').setup { - options = { - theme = 'gruvbox' - } -} +require("lualine").setup({ + options = { + theme = "gruvbox", + }, +}) -- treesitter -require('nvim-treesitter.configs').setup({ - ensure_installed = "all", +require("nvim-treesitter.configs").setup({ + ensure_installed = "all", - highlight = { - enable = true, - custom_captures = { - -- [""] = "", - -- ["keyword"] = "TSString", - }, - }, + highlight = { + enable = true, + custom_captures = { + -- [""] = "", + -- ["keyword"] = "TSString", + }, + }, - indent = { - enable = true - }, + indent = { + enable = true, + }, - rainbow = { - enable = true, - extended_mode = true - }, + rainbow = { + enable = true, + extended_mode = true, + }, }) -- folding -vim.api.nvim_exec([[ +vim.api.nvim_exec( + [[ set foldmethod=expr set foldlevel=20 set nofoldenable set foldexpr=nvim_treesitter#foldexpr() -]], true) +]], + true +) -- trouble -require("trouble").setup { - { - position = "bottom", -- position of the list can be: bottom, top, left, right - height = 10, -- height of the trouble list when position is top or bottom - width = 50, -- width of the list when position is left or right - icons = true, -- use devicons for filenames - mode = "lsp_workspace_diagnostics", -- "lsp_workspace_diagnostics", "lsp_document_diagnostics", "quickfix", "lsp_references", "loclist" - fold_open = "", -- icon used for open folds - fold_closed = "", -- icon used for closed folds - action_keys = { -- key mappings for actions in the trouble list - -- map to {} to remove a mapping, for example: - -- close = {}, - close = "q", -- close the list - cancel = "", -- cancel the preview and get back to your last window / buffer / cursor - refresh = "r", -- manually refresh - jump = {"", ""}, -- jump to the diagnostic or open / close folds - open_split = { "" }, -- open buffer in new split - open_vsplit = { "" }, -- open buffer in new vsplit - open_tab = { "" }, -- open buffer in new tab - jump_close = {"o"}, -- jump to the diagnostic and close the list - toggle_mode = "m", -- toggle between "workspace" and "document" diagnostics mode - toggle_preview = "P", -- toggle auto_preview - hover = "K", -- opens a small popup with the full multiline message - preview = "p", -- preview the diagnostic location - close_folds = {"zM", "zm"}, -- close all folds - open_folds = {"zR", "zr"}, -- open all folds - toggle_fold = {"zA", "za"}, -- toggle fold of current file - previous = "k", -- preview item - next = "j" -- next item - }, - indent_lines = true, -- add an indent guide below the fold icons - auto_open = false, -- automatically open the list when you have diagnostics - auto_close = false, -- automatically close the list when you have no diagnostics - auto_preview = true, -- automatically preview the location of the diagnostic. to close preview and go back to last window - auto_fold = false, -- automatically fold a file trouble list at creation - signs = { - -- icons / text used for a diagnostic - error = "", - warning = "", - hint = "", - information = "", - other = "﫠" - }, - use_lsp_diagnostic_signs = false -- enabling this will use the signs defined in your lsp client - } -} -vim.api.nvim_set_keymap("n", "xx", "Trouble", - {silent = true, noremap = true} +require("trouble").setup({ + { + position = "bottom", -- position of the list can be: bottom, top, left, right + height = 10, -- height of the trouble list when position is top or bottom + width = 50, -- width of the list when position is left or right + icons = true, -- use devicons for filenames + mode = "lsp_workspace_diagnostics", -- "lsp_workspace_diagnostics", "lsp_document_diagnostics", "quickfix", "lsp_references", "loclist" + fold_open = "", -- icon used for open folds + fold_closed = "", -- icon used for closed folds + action_keys = { -- key mappings for actions in the trouble list + close = "q", -- close the list + cancel = "", -- cancel the preview and get back to your last window / buffer / cursor + refresh = "r", -- manually refresh + jump = { "", "" }, -- jump to the diagnostic or open / close folds + open_split = { "" }, -- open buffer in new split + open_vsplit = { "" }, -- open buffer in new vsplit + open_tab = { "" }, -- open buffer in new tab + jump_close = { "o" }, -- jump to the diagnostic and close the list + toggle_mode = "m", -- toggle between "workspace" and "document" diagnostics mode + toggle_preview = "P", -- toggle auto_preview + hover = "K", -- opens a small popup with the full multiline message + preview = "p", -- preview the diagnostic location + close_folds = { "zM", "zm" }, -- close all folds + open_folds = { "zR", "zr" }, -- open all folds + toggle_fold = { "zA", "za" }, -- toggle fold of current file + previous = "k", -- preview item + next = "j", -- next item + }, + indent_lines = true, -- add an indent guide below the fold icons + auto_open = false, -- automatically open the list when you have diagnostics + auto_close = false, -- automatically close the list when you have no diagnostics + auto_preview = true, -- automatically preview the location of the diagnostic. to close preview and go back to last window + auto_fold = false, -- automatically fold a file trouble list at creation + signs = { + -- icons / text used for a diagnostic + error = "", + warning = "", + hint = "", + information = "", + other = "﫠", + }, + use_lsp_diagnostic_signs = false, -- enabling this will use the signs defined in your lsp client + }, +}) +vim.api.nvim_set_keymap("n", "xx", "Trouble", { silent = true, noremap = true }) +vim.api.nvim_set_keymap( + "n", + "xw", + "Trouble lsp_workspace_diagnostics", + { silent = true, noremap = true } ) -vim.api.nvim_set_keymap("n", "xw", "Trouble lsp_workspace_diagnostics", - {silent = true, noremap = true} -) -vim.api.nvim_set_keymap("n", "xd", "Trouble lsp_document_diagnostics", - {silent = true, noremap = true} -) -vim.api.nvim_set_keymap("n", "xl", "Trouble loclist", - {silent = true, noremap = true} -) -vim.api.nvim_set_keymap("n", "xq", "Trouble quickfix", - {silent = true, noremap = true} -) -vim.api.nvim_set_keymap("n", "gR", "Trouble lsp_references", - {silent = true, noremap = true} +vim.api.nvim_set_keymap( + "n", + "xd", + "Trouble lsp_document_diagnostics", + { silent = true, noremap = true } ) +vim.api.nvim_set_keymap("n", "xl", "Trouble loclist", { silent = true, noremap = true }) +vim.api.nvim_set_keymap("n", "xq", "Trouble quickfix", { silent = true, noremap = true }) +vim.api.nvim_set_keymap("n", "gR", "Trouble lsp_references", { silent = true, noremap = true }) -- twilight -require("twilight").setup { - dimming = { - alpha = 0.25, -- amount of dimming - -- we try to get the foreground from the highlight groups or fallback color - color = { "Normal", "#cccccc" }, - }, - context = 10, -- amount of lines we will try to show around the current line - expand = { -- for treesitter, we we always try to expand to the top-most ancestor with these types - "function", - "method", - "table", - "if_statement", - }, - exclude = {}, -- exclude these filetypes -} +require("twilight").setup({ + dimming = { + alpha = 0.25, -- amount of dimming + -- we try to get the foreground from the highlight groups or fallback color + color = { "Normal", "#cccccc" }, + }, + context = 10, -- amount of lines we will try to show around the current line + expand = { -- for treesitter, we we always try to expand to the top-most ancestor with these types + "function", + "method", + "table", + "if_statement", + }, + exclude = {}, -- exclude these filetypes +}) -- hound.nvim -require("hound").setup { - hound_base_url = "http://hound", -- Rely on Tailscale's MagicDNS - hound_port = 6080, -- the port hound is running on - search_results_buffer = "tabnew", -- how to open the search results (vsplit, split, tabnew) - display_file_match_urls = true, -- whether or not urls should be displayed alongside file matches - hound_url_pattern = "https://github.com/{repo}/blob/{revision}/{path}", -- the format of the url displayed for file matches +require("hound").setup({ + hound_base_url = "http://hound", -- Rely on Tailscale's MagicDNS + hound_port = 6080, -- the port hound is running on + search_results_buffer = "tabnew", -- how to open the search results (vsplit, split, tabnew) + display_file_match_urls = true, -- whether or not urls should be displayed alongside file matches + hound_url_pattern = "https://github.com/{repo}/blob/{revision}/{path}", -- the format of the url displayed for file matches +}) +vim.api.nvim_set_keymap("n", "hs", ":Hound", { silent = true, noremap = true }) + +-- neoclip +require('telescope').load_extension('neoclip') -} -vim.api.nvim_set_keymap("n", "hs", ":Hound", - {silent = true, noremap = true} -) -- vim-go vim.g.go_auto_sameids = 0 @@ -286,9 +289,9 @@ vim.g.go_highlight_trailing_whitespace_error = 0 vim.g.go_highlight_types = 1 vim.g.go_highlight_variable_assignments = 1 vim.g.go_highlight_variable_declarations = 1 -vim.g.go_rename_command = 'gopls' +vim.g.go_rename_command = "gopls" vim.g.go_metalinter_autosave = 1 -vim.g.go_metalinter_autosave_enabled = {'golint', 'govet'} +vim.g.go_metalinter_autosave_enabled = { "golint", "govet" } -- vim-terraform vim.g.terraform_align = 1 @@ -307,29 +310,19 @@ vim.g.vim_markdown_frontmatter = 1 vim.g.vim_markdown_new_list_item_indent = 0 -- vim-prettier -vim.g['prettier#autoformat'] = 1 +vim.g["prettier#autoformat"] = 1 -- git-blame vim.g.gitblame_enabled = 0 -- telescope -vim.api.nvim_set_keymap("n", "ff", "Telescope find_files", - {silent = true, noremap = true} -) -vim.api.nvim_set_keymap("n", "fg", "Telescope live_grep", - {silent = true, noremap = true} -) +vim.api.nvim_set_keymap("n", "ff", "Telescope find_files", { silent = true, noremap = true }) +vim.api.nvim_set_keymap("n", "fg", "Telescope live_grep", { silent = true, noremap = true }) -- NvimTree -vim.api.nvim_set_keymap("n", "n", "NvimTreeToggle", - {noremap = true} -) -vim.api.nvim_set_keymap("n", "r", "NvimTreeRefresh", - {noremap = true} -) -vim.api.nvim_set_keymap("n", "nf", "NvimTreeFindFile", - {noremap = true} -) +vim.api.nvim_set_keymap("n", "n", "NvimTreeToggle", { noremap = true }) +vim.api.nvim_set_keymap("n", "r", "NvimTreeRefresh", { noremap = true }) +vim.api.nvim_set_keymap("n", "nf", "NvimTreeFindFile", { noremap = true }) -- syntastic vim.g.syntastic_always_populate_loc_list = 1 @@ -338,5 +331,4 @@ vim.g.syntastic_check_on_open = 1 vim.g.syntastic_check_on_wq = 0 -- completion-nvim -vim.cmd[[autocmd BufEnter * lua require'completion'.on_attach()]] - +vim.cmd([[autocmd BufEnter * lua require'completion'.on_attach()]])