--- PACKAGES {{{ local fn = vim.fn local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim' if fn.empty(fn.glob(install_path)) > 0 then local packer_bootstrap = fn.system({ 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path }) end require('packer').startup(function(use) use 'wbthomason/packer.nvim' use 'neovim/nvim-lspconfig' use { 'hrsh7th/nvim-cmp', requires = { 'neovim/nvim-lspconfig' } } use { 'hrsh7th/cmp-nvim-lsp', requires = { 'hrsh7th/nvim-cmp' } } use { 'hrsh7th/cmp-buffer', requires = { 'hrsh7th/nvim-cmp' } } use { 'hrsh7th/cmp-path', requires = { 'hrsh7th/nvim-cmp' } } use { 'hrsh7th/cmp-nvim-lua', requires = { 'hrsh7th/nvim-cmp' } } use 'hrsh7th/vim-vsnip' use 'hrsh7th/cmp-nvim-lsp-signature-help' use { 'hrsh7th/cmp-vsnip', requires = { 'hrsh7th/nvim-cmp', 'hrsh7th/vim-vsnip' } } use { 'onsails/lspkind.nvim' } use 'ray-x/lsp_signature.nvim' use { 'RishabhRD/nvim-lsputils', requires = { 'RishabhRD/popfix' } } use { 'weilbith/nvim-code-action-menu', cmd = 'CodeActionMenu' } -- use { 'simrat39/symbols-outline.nvim', cmd = 'SymbolsOutline' } use { 'jose-elias-alvarez/null-ls.nvim', requires = { "nvim-lua/plenary.nvim" } } use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' } use 'nvim-treesitter/playground' use 'David-Kunz/treesitter-unit' use({ "yioneko/nvim-yati", requires = "nvim-treesitter/nvim-treesitter" }) use { 'nvim-telescope/telescope.nvim', requires = { 'nvim-lua/popup.nvim', 'nvim-lua/plenary.nvim' } } use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' } -- use {"ellisonleao/gruvbox.nvim"} use { 'morhetz/gruvbox' } -- use 'lifepillar/vim-solarized8' use { 'chrisbra/Colorizer', cmd = 'ColorToggle', keys = { 'n', 'c ColorToggle' } } -- #aaaaaa use { 'kdheepak/lazygit.nvim', keys = { 'n', 'g LazyGit' }, cmd = 'LazyGit' } use { 'lewis6991/gitsigns.nvim', requires = { 'nvim-lua/plenary.nvim' } } use { 'hoob3rt/lualine.nvim', requires = { 'kyazdani42/nvim-web-devicons', opt = true } } use { 'AndrewRadev/linediff.vim', cmd = 'LineDiffAdd' } use 'lukas-reineke/indent-blankline.nvim' use 'b3nj5m1n/kommentary' use 'airblade/vim-rooter' use { 'vlada-dudr/vim-php-cs-fixer', ft = 'php' } use 'editorconfig/editorconfig-vim' use { 'kyazdani42/nvim-tree.lua' } use { 'vim-vdebug/vdebug' } use { 'dyng/ctrlsf.vim', cmd = 'CtrlSF' } use { 'folke/lua-dev.nvim' } use { 'AndrewRadev/tagalong.vim' } use { 'andymass/vim-matchup' } use { 'fpob/nette.vim', ft = 'nette' } use { 'folke/trouble.nvim', requires = "kyazdani42/nvim-web-devicons", cmd = 'TroubleToggle', keys = { 'n', 't TroubleToggle' }, config = function() require('trouble').setup() end } if packer_bootstrap then require('packer').sync() end use { 'ziglang/zig.vim', ft = 'zig' } end) --- PACKAGES }}} --- OPTIONS {{{ vim.o.ruler = true vim.o.mouse = '' vim.o.showcmd = true vim.o.scrolloff = 3 vim.o.ignorecase = true vim.o.smartcase = true vim.o.incsearch = true vim.o.inccommand = 'split' vim.o.hidden = true vim.o.autoread = true vim.o.completeopt = 'menuone,noinsert,noselect' vim.o.tabstop = 4 vim.o.softtabstop = 4 vim.o.swapfile = true vim.o.undofile = true vim.o.expandtab = true vim.o.shiftwidth = 4 vim.o.number = true --vim.o.colorcolumn=0 --vim.o.foldmethod='marker' vim.o.foldcolumn = 'auto:1' vim.o.signcolumn = 'yes' vim.o.list = false vim.o.relativenumber = false vim.o.foldenable = true vim.o.cursorline = true vim.o.autoindent = true vim.o.smartindent = true vim.o.fileencodings = 'ucs-bom,utf-8,default,cp852,latin1' vim.o.path = '**' --vim.o.clipboard = "unnamedplus" -- Buffer vim.cmd([[ augroup forceRecheck au FocusGained,BufEnter * :silent! ! augroup END ]]) -- vim.env.EDITOR = 'nvr' --- OPTIONS }}} --- LSP {{{ --[[ vim.api.nvim_create_autocmd('LspAttach', { callback = function(args) local client = vim.lsp.get_client_by_id(args.data.client_id) if client.server_capabilities.hoverProvider then vim.keymap.set('n', 'K', vim.lsp.buf.hover, { buffer = args.buf }) end end, }) ]] local nvim_lsp = require('lspconfig') 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 require "lsp_signature".on_attach() -- require'completion'.on_attach() -- Mappings. local opts = { noremap = true, silent = true } 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('i', '', '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', 'CodeActionMenu', opts) buf_set_keymap('v', 'ca', 'lua vim.lsp.buf.range_code_action()', opts) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) buf_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) buf_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) buf_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) buf_set_keymap('n', 'F', 'lua vim.lsp.buf.formatting()', opts) buf_set_keymap('v', 'F', 'lua vim.lsp.buf.range_formatting()', opts) end -- Use a loop to conveniently both setup defined servers -- and map buffer local keybindings when the language server attaches local servers = { 'phpactor', 'gopls', 'clangd', 'zls', 'hls', 'tsserver', 'sumneko_lua', 'perlls' } for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { on_attach = on_attach, capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()), } end require 'lspconfig'.phpactor.setup { on_attach = on_attach, capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()), root_dir = function(path) local u = require('lspconfig.util') return u.search_ancestors(startpath, function (path) return not string.find(path, '/vendor/') and ( u.path.exists(u.path.join(path, 'composer.json')) or u.path.exists(u.path.join(path, '.git')) ) end) end } require 'lspconfig'.omnisharp.setup { cmd = { '/usr/bin/omnisharp', '--languageserver', '--hostPID', tostring(pid) }, on_attach = on_attach, capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()) } require 'lspconfig'.powershell_es.setup { bundle_path = '/home/vladimir/devel/PowerShellEditorServices/module', capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()) } --vim.lsp.set_log_level("debug") --- LSP }}} --- CMP {{{ local cmp = require 'cmp' cmp.setup({ -- documentation = true, sources = { { name = 'nvim_lsp' }, { name = 'nvim_lua' }, { name = 'buffer' }, { name = 'path' }, -- { name = 'nvim_lsp_signature_help' }, }, formatting = { format = require 'lspkind'.cmp_format({ -- mode = 'symbol', }), }, window = { -- completion = cmp.config.window.bordered(), -- documentation = cmp.config.window.bordered(), }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.confirm({ select = false }) }), snippet = { expand = function(args) -- For `vsnip` user. vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` user. end } }) --- CMP }}} -- vsnip {{{ vim.cmd 'imap vsnip#jumpable(1) ? \'(vsnip-jump-next)\' : \'\'' vim.cmd 'smap vsnip#jumpable(1) ? \'(vsnip-jump-next)\' : \'\'' vim.cmd 'imap vsnip#jumpable(-1) ? \'(vsnip-jump-prev)\' : \'\'' vim.cmd 'smap vsnip#jumpable(-1) ? \'(vsnip-jump-prev)\' : \'\'' -- vsnip }}} --- gitsigns {{{ require 'gitsigns'.setup {} --- gitsigns }}} -- lualine {{{ require 'lualine'.setup { options = { icons_enabled = true, theme = vim.env.TERM ~= 'linux' and 'gruvbox' or nil, component_separators = { '', '' }, section_separators = { '', '' }, disabled_filetypes = {} }, sections = { lualine_a = { 'mode' }, lualine_b = { 'branch' }, lualine_c = { { 'filename', path = 1 } }, lualine_x = { 'encoding', 'fileformat', 'filetype' }, lualine_y = { 'progress' }, lualine_z = { 'location' } }, inactive_sections = { lualine_a = {}, lualine_b = {}, lualine_c = { { 'filename'} }, lualine_x = { 'location' }, lualine_y = {}, lualine_z = {} }, tabline = {}, extensions = { 'nerdtree' } } -- lualine }}} -- NvimTree {{{ require('nvim-tree').setup({ renderer = { add_trailing = true, special_files = {}, highlight_git = true, indent_markers = { enable = true, }, icons = { show = { file = false, folder = false, folder_arrow = false, git = false } }, }, git = { ignore = true } }) vim.api.nvim_set_keymap('n', '', [[NvimTreeToggle]], {}) vim.api.nvim_set_keymap('n', '', [[NvimTreeFindFile]], {}) -- }}} NvimTree -- Telescope {{{ vim.api.nvim_set_keymap('n', 'b', [[Telescope buffers]], { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', 'f', [[Telescope fd]], { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', 'T', [[Telescope]], { noremap = true, silent = true }) require("telescope").setup { defaults = { preview = { hide_on_startup = true }, --[[ mappings = { i = { [""] = actions.toggle_preview, }, n = { [""] = actions.toggle_preview, }, }, ]] }, pickers = { buffers = { show_all_buffers = true, sort_lastused = false, sort_mru = true, -- theme = "dropdown", mappings = { i = { [""] = "delete_buffer", }, n = { [""] = "delete_buffer", } } } } } require('telescope').load_extension('fzf') --[[ local telescope_ag = vim.api.nvim_create_augroup('Telescope') nvim.nvim_create_autocmd('FileType', { pattern='TelescopePrompt', command = nvim.nvim_buf_set_keymap('n', '' ]] vim.cmd 'augroup Telescope' vim.cmd 'autocmd FileType TelescopePrompt inoremap Telescope buffers initial_mode=insert' vim.cmd 'autocmd FileType TelescopePrompt inoremap Telescope fd initial_mode=insert' vim.cmd 'autocmd FileType TelescopePrompt nnoremap Telescope buffers initial_mode=insert' vim.cmd 'autocmd FileType TelescopePrompt nnoremap Telescope fd initial_mode=insert' vim.cmd 'autocmd FileType TelescopePrompt inoremap Telescope builtin initial_mode=insert' vim.cmd 'autocmd FileType TelescopePrompt nnoremap Telescope builtin initial_mode=insert' vim.cmd 'augroup END' -- Telescope }}} -- Tree sitter {{{ require 'nvim-treesitter.configs'.setup { ensure_installed = 'all', -- one of "all", "maintained" (parsers with maintainers), or a list of languages highlight = { enable = true, }, playground = { enable = true, }, yati = { enable = true, }, incremental_selection = { enable = true, keymaps = { init_selection = "gnn", node_incremental = "+", scope_incremental = "grc", node_decremental = "-", }, }, indent = { -- disable = { "php" },-- php indent SUCKS A LOT enable = false, }, } local ts_parsers = require 'nvim-treesitter.parsers'.get_parser_configs() ts_parsers.xml = { install_info = { url = "https://github.com/dorgnarg/tree-sitter-xml", -- local path or git repo files = { "src/parser.c" }, -- optional entries: branch = "main", -- default branch in case of git repo if different from master generate_requires_npm = false, -- if stand-alone parser without npm dependencies requires_generate_from_grammar = true, -- if folder contains pre-generated src/parser.c }, filetype = "xml", -- if filetype does not match the parser name } vim.api.nvim_set_keymap('x', 'iu', ':lua require"treesitter-unit".select()', { noremap = true }) vim.api.nvim_set_keymap('x', 'au', ':lua require"treesitter-unit".select(true)', { noremap = true }) vim.api.nvim_set_keymap('o', 'iu', ':lua require"treesitter-unit".select()', { noremap = true }) vim.api.nvim_set_keymap('o', 'au', ':lua require"treesitter-unit".select(true)', { noremap = true }) --[[ vim.o.foldmethod = 'expr' vim.o.foldexpr = 'nvim_treesitter#foldexpr()' ]] --- Tree sitter }}} -- Indent lines {{{ vim.g.indent_blankline_filetype_exclude = { 'help', 'NvimTree', 'TelescopePrompt', 'lspinfo' } vim.g.indent_blankline_buftype_exclude = { 'terminal', 'nofile', 'prompt' } -- indent lines }}} -- PHP CS FIXER {{{ vim.g.php_cs_fixer_rules = [[ { "@Symfony":true, "array_syntax":{"syntax":"short"}, "binary_operator_spaces":{"default":"align_single_space_minimal"}, "fully_qualified_strict_types":false } ]] --vim.g.php_cs_fixer_php_path = 'php7' -- Path to PHP vim.g.php_cs_fixer_path = '/usr/bin/php-cs-fixer' -- Path to PHP vim.g.php_cs_fixer_enable_default_mapping = 1 -- Enable the mapping by default (pcd) vim.g.php_cs_fixer_dry_run = 0 -- Call command with dry-run option vim.g.php_cs_fixer_verbose = 0 vim.g.php_cs_fixer_version = 3 -- }}} -- kommentary {{{ kommentary_config = require('kommentary.config') kommentary_config.configure_language("php", { prefer_single_line_comments = true, }) -- kommentary }}} -- NEORAY {{{ vim.cmd [[ if exists('g:neoray') set guifont=Go_Mono:h11 NeoraySet CursorAnimTime 0 NeoraySet Transparency 0.95 NeoraySet TargetTPS 120 NeoraySet ContextMenuOn FALSE NeoraySet BoxDrawingOn TRUE NeoraySet WindowSize 100x40 NeoraySet WindowState none NeoraySet KeyZoomIn <> NeoraySet KeyZoomOut <> endif ]] -- }}} -- rooter {{{ vim.g.rooter_manual_only = 1 -- }}} -- null-ls {{{ local nls = require "null-ls" nls.setup({ on_attach = on_attach, debug = true, sources = { nls.builtins.formatting.xmllint, nls.builtins.formatting.jq, nls.builtins.diagnostics.sqlfluff, nls.builtins.diagnostics.phpstan.with({ cwd = function(params) -- falls back to root if return value is nil return params.root:match("jopixel") and not params.root:match("repo") and "www"; end }), nls.builtins.formatting.phpcsfixer.with({ extra_args = { "--rules", [[ { "@Symfony":true, "nullable_type_declaration_for_default_null_value":true, "array_syntax":{"syntax":"short"}, "binary_operator_spaces":{ "default":"single_space", "operators": { "=>":"align_single_space_minimal", "=":"align_single_space_minimal", "??=":"align_single_space_minimal", "^=":"align_single_space_minimal", "|=":"align_single_space_minimal", "+=":"align_single_space_minimal", "%=":"align_single_space_minimal", "&=":"align_single_space_minimal", "**=":"align_single_space_minimal", "*=":"align_single_space_minimal", "-=":"align_single_space_minimal", ".=":"align_single_space_minimal", "/=":"align_single_space_minimal", "<<=":"align_single_space_minimal", "<=":"align_single_space_minimal", ">=":"align_single_space_minimal", ">>=":"align_single_space_minimal" } }, "fully_qualified_strict_types":false } ]] } }), nls.builtins.diagnostics.shellcheck, nls.builtins.formatting.eslint, -- nls.builtins.diagnostics.eslint, nls.builtins.code_actions.eslint, nls.builtins.diagnostics.yamllint, } }) -- }}} -- Trouble {{{ -- vim.api.nvim_set_keymap('n', 't', 'TroubleToggle', {}) -- }}} TROUBLE -- color handling {{{ local term = vim.env.TERM if (term ~= 'linux' or vim.g.neoray) then vim.cmd('set termguicolors') vim.g.gruvbox_contrast_dark = 'hard' vim.cmd('colorscheme gruvbox') vim.cmd 'highlight link Directory GruvboxGreen' vim.cmd 'highlight link Function GruvboxFg1' vim.cmd 'highlight link Operator GruvboxFg1' end vim.cmd 'highlight link TSVariable Identifier' vim.cmd 'highlight link TSVariableBuiltin Identifier' -- }}} -- {{{ LAYA vim.cmd [[ augroup layaAbbrevs autocmd BufRead,BufNewFile ~/jopixel/**/*.php iabbrev TR $this->obtainer()->translator()->t(); autocmd BufRead,BufNewFile ~/jopixel/**/*.php iabbrev TI $this->obtainer()->translator()->t() autocmd BufRead,BufNewFile ~/jopixel/**/*.php iabbrev LOG $this->obtainer()->logger()->log(); autocmd BufRead,BufNewFile ~/jopixel/**/*.php iabbrev DBG $this->obtainer()->logger()->log('debug', 'debug',); autocmd BufRead,BufNewFile ~/jopixel/**/*.php iabbrev PROD $this->producer() autocmd BufRead,BufNewFile ~/jopixel/**/*.php iabbrev FILE $this->producer()->file() autocmd BufRead,BufNewFile ~/jopixel/**/*.php iabbrev LINK $this->producer()->link($this, '') autocmd BufRead,BufNewFile ~/jopixel/**/*.php iabbrev NW $this->obtainer()->notifications()->warning(); autocmd BufRead,BufNewFile ~/jopixel/**/*.php iabbrev NS $this->obtainer()->notifications()->success(); augroup END ]] -- }}} LAYA -- vim: sw=2: ts=2: fdm=marker: