-- vim: foldenable -- load by calling `lua require('plugins')` from your init.vim local g = vim.g -- force packer into a system directory local sysdata = vim.fn.stdpath('data_dirs')[1] local install_path = sysdata .. '/site/pack/packer/start/packer.nvim' if vim.fn.empty(vim.fn.glob(install_path)) > 0 then vim.fn.system({ 'git', 'clone', 'https://github.com/wbthomason/packer.nvim', install_path }) vim.api.nvim_command 'packadd packer.nvim' end if not vim.fn.filewritable(vim.fn.stdpath('cache')) == 2 then return end function disable_distribution_plugins() --{{{ g.loaded_gzip = 1 g.loaded_tar = 1 g.loaded_tarPlugin = 1 g.loaded_zip = 1 g.loaded_zipPlugin = 1 g.loaded_getscript = 1 g.loaded_getscriptPlugin = 1 g.loaded_vimball = 1 g.loaded_vimballPlugin = 1 g.loaded_matchit = 1 -- g.loaded_matchparen = 1 g.loaded_2html_plugin = 1 g.loaded_logiPat = 1 g.loaded_rrhelper = 1 g.loaded_netrw = 1 g.loaded_netrwPlugin = 1 g.loaded_netrwSettings = 1 g.loaded_netrwFileHandlers = 1 end -- }}} return require('packer').startup({function() -- disable built-in plugins disable_distribution_plugins() -- manage packer itself use {'wbthomason/packer.nvim'} -- git status in the sign column use {'mhinz/vim-signify', -- {{{ config = function() local nnoremap = require('astronauta.keymap').nnoremap vim.g.signify_sign_change = '~' nnoremap { ']h', function() vim.fn['sy#jump#next_hunk'](1) end } nnoremap { '[h', function() vim.fn['sy#jump#prev_hunk'](1) end } end} -- }}} use {'tpope/vim-commentary'} -- auto-comment using `gcc` use {'windwp/nvim-autopairs', config = function() require('nvim-autopairs').setup() end} use {'tpope/vim-surround'} -- edit surroundings in pairs use {'justinmk/vim-dirvish'} -- folder browser use {'ggandor/lightspeed.nvim'} use {'jose-elias-alvarez/null-ls.nvim', -- {{{ requires = {'nvim-lua/plenary.nvim'}, config = function() local nls = require('null-ls') nls.config { sources = { nls.builtins.formatting.clang_format, -- c* nls.builtins.formatting.gofumpt, -- go nls.builtins.formatting.json_tool, -- json nls.builtins.formatting.rustfmt, -- rust nls.builtins.formatting.shfmt, -- *sh nls.builtins.formatting.yapf, -- python nls.builtins.diagnostics.shellcheck, -- *sh } } require('lspconfig')['null-ls'].setup { on_attach = require('lsp').my_attach } end} -- }}} use {'neovim/nvim-lspconfig', requires = {'~/devel/projects/spinner.nvim'}, config = function() require('lsp').setup() end} use {'kosayoda/nvim-lightbulb', -- {{{ config = function() require('nvim-lightbulb').update_lightbulb { sign = { enabled = true, priority = 10, }, float = { enabled = true, text = '󱉵 ', win_opts = {}, }, virtual_text = { enabled = false, text = '󱉵 ', }, status_text = { enabled = false, } } vim.fn.sign_define('LightBulbSign', {text="⚐", texthl="LightBulbVirtualText"}) require('utils').augroup2 { lightbulb = { {'CursorHold', '*', "lua require('nvim-lightbulb').update_lightbulb()"} } } end} -- }}} use {'nvim-treesitter/nvim-treesitter', -- {{{ run = ':TSUpdate', requires = { 'nvim-treesitter/completion-treesitter', 'nvim-treesitter/nvim-treesitter-refactor', }, config = function() require('nvim-treesitter.configs').setup { ensure_installed = { "bash", "c", "c_sharp", "css", "dockerfile", "html", "go", "gomod", "javascript", "ledger", "lua", "rust", "typescript", }, highlight = { enable = false, }, indent = { enable = true, }, refactor = { navigation = { enable = true, keymaps = { goto_definition = "", }, }, smart_rename = { enable = true, keymaps = { smart_rename = "grr", }, }, }, } end} -- }}} use {'hrsh7th/nvim-compe', -- {{{ -- requires nvim-autopairs config = function() require('compe').setup { enabled = true, autocomplete = true, preselect = 'enable', documentation = { border = 'single', }, source = { path = true, buffer = true, tags = true, nvim_lsp = true, nvim_lua = true, orgmode = true, ultisnips = true, } } vim.cmd [[ inoremap compe#complete() inoremap compe#close('') ]] require('nvim-autopairs.completion.compe').setup { map_cr = true, map_complete = true, } end} -- }}} use {'nvim-telescope/telescope.nvim', --- {{{ requires = { 'nvim-lua/popup.nvim', 'nvim-lua/plenary.nvim', -- telescope plugins: 'nvim-telescope/telescope-fzf-writer.nvim', }, config = function() local nnoremap = require('astronauta.keymap').nnoremap require('telescope').setup{ defaults = { -- initial_mode = 'input', prompt_prefix = '> ', selection_caret = '* ', sorting_strategy = 'ascending', preview_title = '', layout_strategy = 'bottom_pane', layout_config = { preview_cutoff = 1, height = 20, }, border = true, borderchars = { 'z', prompt = { '─', ' ', ' ', ' ', '─', '─', ' ', ' ' }, results = { ' ' }, -- results = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' }, preview = { '─', '│', '─', '│', '┌', '┐', '┘', '└'}, -- "center" -- { '─', '│', '─', '│', '┌', '┐', '┘', '└'}, -- prompt = {'─', '│', ' ', '│', '┌', '┐', '│', '│'}, -- results = {'─', '│', '─', '│', '├', '┤', '┘', '└'}, -- preview = { '─', '│', '─', '│', '┌', '┐', '┘', '└'}, }, file_previewer = require('telescope.previewers').vim_buffer_cat.new, grep_previewer = require('telescope.previewers').vim_buffer_vimgrep.new, qflist_previewer = require('telescope.previewers').vim_buffer_qflist.new, extensions = { fzf_writer = { use_highlighter = true, minimum_grep_characters = 4, shorten_path = true, } } } } nnoremap { ';q', require('telescope.builtin').quickfix } nnoremap { ';c', require('telescope.builtin').loclist } nnoremap { ';g', require('telescope').extensions.fzf_writer.staged_grep } nnoremap { ';f', require('telescope.builtin').fd } nnoremap { ';l', require('telescope.builtin').current_buffer_fuzzy_find } nnoremap { ';w', require('telescope.builtin').file_browser } nnoremap { ';b', require('telescope.builtin').buffers } nnoremap { ';t', require('telescope.builtin').tags } nnoremap { ';h', require('telescope.builtin').command_history } nnoremap { ';H', require('telescope.builtin').help_tags } nnoremap { ';c', require('telescope.builtin').commands } nnoremap { ';v', function() require('telescope.builtin').find_files({ prompt_title = 'vimrc', previewer = false, cwd = vim.fn.stdpath('config'), }) end } -- LSP stuff nnoremap { ';a', require('telescope.builtin').lsp_code_actions } nnoremap { ';0', require('telescope.builtin').lsp_document_symbols } nnoremap { ';r', require('telescope.builtin').lsp_references } end} -- }}} -- polyfill for some missing stuff use {'tjdevries/astronauta.nvim'} -- snippets use {'SirVer/ultisnips', -- {{{ requires = {'honza/vim-snippets'}, config = function() vim.g.UltiSnipsJumpForwardTrigger = "" vim.g.UltiSnipsJumpBackwardTrigger = "" end} -- }}} -- use {'L3MON4D3/LuaSnip', -- config = "require('plugins._ultisnips')", -- } use {'junegunn/vim-easy-align'} use {'editorconfig/editorconfig-vim', -- {{{ config = function() require('utils').augroup2 { editorconfig = { { 'FileType', 'gitcommit', 'let b:EditorConfig_disable = 1' }, } } end} -- }}} use {'lukas-reineke/indent-blankline.nvim', config = function() vim.g.indent_blankline_char = '▏' end} use {'tpope/vim-repeat'} -- extend '.' to plugins use {'michaeljsmith/vim-indent-object'} -- indentation text-objects use {'kshenoy/vim-signature', disable = true} -- toggle, display and navigate marks use {'norcalli/nvim-colorizer.lua', -- {{{ config = function() require('colorizer').setup(nil, { name = true; RRGGBB = true; RRGGBBAA = false; rgb_fn = true; hsl_fn = true; mode = 'background'; }) end} -- }}} use {'rhysd/git-messenger.vim', -- {{{ config = function() -- vim.g.git_messenger_include_diff = false vim.g.git_messenger_always_into_popup = true vim.g.git_messenger_close_on_cursor_moved = true vim.g.git_messenger_no_default_mappings = true end} -- }}} -- use {'TimUntersberger/neogit', -- config = "require('astronauta.keymap').nnoremap { 'gg', function() require('neogit').open({ kind = 'split' }) end }" -- } use {'liuchengxu/vista.vim'} use {'rhysd/conflict-marker.vim', disable = true} use {'kassio/neoterm', disable = true} -- zettelkasten via neuron use {'oberblastmeister/neuron.nvim', -- {{{ branch = 'unstable', requires = {'nvim-telescope/telescope.nvim'}, config = function() require('neuron').setup { virtual_titles = true, mappings = true, run = nil, neuron_dir = "~/.zk", leader = "gz", } vim.cmd [[ command! NeuronServe lua require('neuron').rib {address = "127.0.0.1:8200", verbose = true} ]] vim.cmd [[ command! NeuronZettels lua require('neuron.telescope').find_zettels {insert = false} ]] vim.cmd [[ command! NeuronZettelsInsert lua require('neuron.telescope').find_zettels {insert = true} ]] vim.cmd [[ command! NeuronTags lua require('neuron.telescope').find_tags() ]] end} -- }}} use {'kristijanhusak/orgmode.nvim', -- {{{ config = function() local nnoremap = require('astronauta.keymap').nnoremap require('orgmode').setup { org_agenda_files = {'$HOME/.zk/.orgmode/*.org'}, org_default_notes_file = '$HOME/.zk/.orgmode/todo.org', org_todo_keywords = {'TODO', 'NEXT', 'WIP', 'DONE'}, org_indent_mode = 'noindent', org_agenda_templates = { t = { description = 'Todo', template = '* TODO %?', }, n = { description = 'Note', template = '* %?', target = '$HOME/.zk/.orgmode/notes.org', }, }, } local pickers = require('telescope.pickers') local finders = require('telescope.finders') nnoremap { ';o', function() pickers.new(opts, { prompt_title = 'Orgmode', finder = finders.new_table(require('orgmode.config'):get_all_files()), }):find() end } vim.cmd [[ command! Orgmode lua require('orgmode').action('agenda.prompt') ]] vim.cmd [[ command! OrgmodeCapture lua require('orgmode').action('capture.refile') ]] vim.cmd [[ command! OrgmodeInsert lua require('orgmode').action('org_mappings.insert_heading_respect_content') ]] vim.cmd [[ command! OrgmodeTodoCycle lua require('orgmode').action('org_mappings.todo_next_state') ]] vim.cmd [[ command! OrgmodeTag lua require('orgmode').action('org_mappings.set_tags') ]] vim.cmd [[ command! OrgmodeArchive lua require('orgmode').action('org_mappings.toggle_archive_tag') ]] end} -- }}} -- languages -- NOTE: these should only be loaded when they are required... -- use {'rhysd/vim-grammarous', -- ft = {'markdown', 'latex', 'tex'} -- } use {'lervag/vimtex', -- {{{ ft = {'latex', 'tex'}, config = function() vim.g.tex_flavor = 'latex' vim.g.vimtex_compiler_enabled = 0 vim.g.vimtex_compiler_method = 'tectonic' vim.g.vimtex_compiler_tectonic = "{'executable': 'tectonic'}" vim.g.vimtex_view_method = 'zathura' -- vim.g.vimtex_view_zathura_check_libsynctex = false -- vim.g.vimtex_view_use_temp_files = true -- vim.g.vimtex_view_forward_search_on_start = false end} -- }}} use {'plasticboy/vim-markdown', -- {{{ ft = {'markdown'}, config = function() vim.g.vim_markdown_folding_disabled = true vim.g.vim_markdown_math = true vim.g.vim_markdown_frontmatter = true vim.g.vim_markdown_json_frontmatter = true vim.g.vim_markdown_toml_frontmatter = true vim.g.vim_markdown_yaml_frontmatter = true -- vim.g.vim_markdown_folding_level = 2 vim.g.vim_markdown_strikethrough = true vim.g.vim_markdown_auto_insert_bullets = true vim.g.vim_markdown_new_list_item_indent = false vim.g.vim_markdown_conceal = true vim.g.vim_markdown_conceal_code_blocks = true end} -- }}} use {'masukomi/vim-markdown-folding', ft = {'markdown'}} use {'jjo/vim-cue', ft = {'cue'}} use {'gentoo/gentoo-syntax'} -- multi-language support with lazy loading -- NOTE: put language specific plugs before this to avoid conflicsts g.polyglot_disabled = { 'autoindent' } use {'sheerun/vim-polyglot'} use {'folke/zen-mode.nvim', -- {{{ config = function() require('zen-mode').setup { window = { backdrop = 1, width = 0.3, -- height = 1, options = { number = false, list = false, }, }, plugins = { options = { enabled = true, ruler = false, showcmd = false, }, twilight = { enabled = true }, } } end} -- }}} use {'folke/twilight.nvim', -- {{{ config = function() require('twilight').setup { context = 15, dimming = { alpha = 0.3, color = { 'Normal', '#ffffff' }, }, } end} -- }}} use {'mhinz/vim-startify', -- {{{ config = function() require('utils').augroup2 { startify = {{ 'FileType', 'startify', [[ IndentBlanklineDisable ]] }} } end} -- }}} use {'ruifm/gitlinker.nvim', -- {{{ requires = {'nvim-lua/plenary.nvim'}, config = function() require('gitlinker').setup { opts = { action_callback = require('gitlinker.actions').copy_to_clipboard, }, } end} -- }}} use {'rktjmp/lush.nvim'} end, config = { package_root = require('packer.util').join_paths(sysdata, 'site', 'pack'), }})