From 985cffe45db242a6fed9bee46f991da754a268e0 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 1 Sep 2022 18:04:54 +0200 Subject: [PATCH 001/130] Lint - typescript & typescriptreact --- README.md | 7 +++---- eslint.json | 30 ++++++++++++++++++++++++++++++ lua/plugins/nvim-lint.lua | 4 +++- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cd2f55d..aa1f634 100644 --- a/README.md +++ b/README.md @@ -73,10 +73,6 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - try https://github.com/slevomat/coding-standard - [ ] force type return - [ ] force strict - - [ ] javascript - - simple quote - - [ ] react - - [ ] typescript - [ ] lua - [ ] nginx - [ ] docker @@ -84,6 +80,9 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - [ ] ruby - [ ] python - [ ] shell + - [X] javascript + - [X] react + - [X] typescript ### Done - [X] spell check, FR & EN diff --git a/eslint.json b/eslint.json index 22abc7f..fdd4ab4 100644 --- a/eslint.json +++ b/eslint.json @@ -1,5 +1,35 @@ { "env": { "es6": true + }, + "rules": { + "constructor-super": ["error"], + "no-const-assign": "error", + "no-warning-comments": "warn", + "array-bracket-spacing": ["warn", "never"], + "brace-style": ["warn", "1tbs", {"allowSingleLine": true}], + "comma-spacing": ["warn"], + "comma-style": ["warn", "first"], + "computed-property-spacing": ["warn", "never"], + "function-call-argument-newline": ["warn", "consistent"], + "jsx-quotes": ["warn", "prefer-double"], + "key-spacing": ["warn", {"beforeColon": false, "afterColon": true}], + "max-len": ["warn", {"ignoreTrailingComments": true}], + "newline-before-return": "warn", + "no-console": "warn", + "no-else-return": "warn", + "no-empty": "warn", + "no-eq-null": "warn", + "no-mixed-spaces-and-tabs": ["warn"], + "no-multiple-empty-lines": ["warn"], + "no-tabs": ["warn"], + "no-trailing-spaces": ["warn"], + "no-unneeded-ternary": "warn", + "no-useless-return": "warn", + "prefer-destructuring": "warn", + "quotes": ["warn", "single", {"avoidEscape": true}], + "rest-spread-spacing": ["warn", "never"], + "semi-spacing": ["warn", {"before": false, "after": false}], + "semi-style": ["warn", "last"] } } diff --git a/lua/plugins/nvim-lint.lua b/lua/plugins/nvim-lint.lua index f306b61..0522f3c 100644 --- a/lua/plugins/nvim-lint.lua +++ b/lua/plugins/nvim-lint.lua @@ -2,7 +2,7 @@ local lint = require 'lint' local linters = lint.linters -- JS -linters.eslint.cmd = '/usr/lib/node_modules/eslint/bin/eslint.js' +linters.eslint.cmd = '/usr/local/bin/eslint' local eslint = require('lint.linters.eslint') eslint.args = { '-c=/home/tarik/.config/nvim/eslint.json', @@ -21,6 +21,8 @@ phpcs.args = { -- All lint.linters_by_ft = { javascript = {'eslint'}, + typescript = {'eslint'}, + typescriptreact = {'eslint'}, php = {'phpcs'} } From f87088df2a17222968e0f9ae5746c20b29f5b092 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 1 Sep 2022 18:04:54 +0200 Subject: [PATCH 002/130] Lint - JS add new roule for indentation --- eslint.json | 1 + 1 file changed, 1 insertion(+) diff --git a/eslint.json b/eslint.json index fdd4ab4..130cdc9 100644 --- a/eslint.json +++ b/eslint.json @@ -5,6 +5,7 @@ "rules": { "constructor-super": ["error"], "no-const-assign": "error", + "indent": ["warn", 2], "no-warning-comments": "warn", "array-bracket-spacing": ["warn", "never"], "brace-style": ["warn", "1tbs", {"allowSingleLine": true}], From 01dfe3dce6f41b85eb01b7f49b1f663244009d1a Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 1 Sep 2022 21:17:08 +0200 Subject: [PATCH 003/130] COC - Fix undefined function --- README.md | 1 + lua/options.lua | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/README.md b/README.md index aa1f634..291ae2f 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - [ ] python - [ ] shell - [X] javascript + - [ ] Set icon in signs column for error & warn - [X] react - [X] typescript diff --git a/lua/options.lua b/lua/options.lua index e969bf3..63b0f49 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -37,6 +37,14 @@ vim.cmd([[ augroup end ]]) +-- COC +vim.cmd([[ + function! CheckBackspace() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' + endfunction +]]) + -- Mapping vim.api.nvim_set_keymap('n', '', ':e!', { noremap = true }) vim.api.nvim_set_keymap('n', 'e', ':NvimTreeToggle', { noremap = true }) From b8c44a86947cb0a7e9228c973c3d86d63fa7e1d1 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 1 Sep 2022 21:21:05 +0200 Subject: [PATCH 004/130] Refactor --- lua/mapping.lua | 4 ++++ lua/options.lua | 14 ++++---------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/lua/mapping.lua b/lua/mapping.lua index 4c72857..7643154 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -28,6 +28,10 @@ vim.cmd([[ inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" ]]) +vim.api.nvim_set_keymap('n', '', ':e!', { noremap = true }) +vim.api.nvim_set_keymap('n', 'e', ':NvimTreeToggle', { noremap = true }) +vim.api.nvim_set_keymap('n', 't', ':lua toggleThemeLight()', { noremap = true }) + --[[ FIXME documentation on hover -- > Error on notification "doHover": hover provider not found for current buffer, your language server doesn't support it -- So install server php diff --git a/lua/options.lua b/lua/options.lua index 63b0f49..75d63e2 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -37,6 +37,10 @@ vim.cmd([[ augroup end ]]) +function toggleThemeLight() + vim.o.background = vim.o.background == 'dark' and 'light' or 'dark' +end + -- COC vim.cmd([[ function! CheckBackspace() abort @@ -44,13 +48,3 @@ vim.cmd([[ return !col || getline('.')[col - 1] =~# '\s' endfunction ]]) - --- Mapping -vim.api.nvim_set_keymap('n', '', ':e!', { noremap = true }) -vim.api.nvim_set_keymap('n', 'e', ':NvimTreeToggle', { noremap = true }) - -function toggleThemeLight() - vim.o.background = vim.o.background == 'dark' and 'light' or 'dark' -end - -vim.api.nvim_set_keymap('n', 't', ':lua toggleThemeLight()', { noremap = true }) From 634da6429545a913ed632d64c99313217ada7c83 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 1 Sep 2022 23:05:30 +0200 Subject: [PATCH 005/130] README - Update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 291ae2f..5cfd776 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - https://github.com/SirVer/ultisnips - *just a library of snippets* https://github.com/honza/vim-snippets - [X] linter (nvim-lint) + - [ ] custom icons for error and warning - for: - [ ] php - `phpcs -e *.php` Explain a standard by showing the sniffs it includes @@ -81,7 +82,6 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - [ ] python - [ ] shell - [X] javascript - - [ ] Set icon in signs column for error & warn - [X] react - [X] typescript From 5f823f3612e5c380ed4534c623837efbba28239c Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 2 Sep 2022 00:29:31 +0200 Subject: [PATCH 006/130] PHPCs - Update rules --- standard.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/standard.xml b/standard.xml index c245460..1326d74 100644 --- a/standard.xml +++ b/standard.xml @@ -31,11 +31,12 @@ - + + From 3ea9d6f0d0ab24034ebadf608d2b7d2833166ffd Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 2 Sep 2022 21:26:45 +0200 Subject: [PATCH 007/130] README & phpcs - Update doc & update rules for php --- README.md | 7 ++++++- standard.xml | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 5cfd776..d738629 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - [ ] smart indentation on paste from clipboard - https://github.com/neovim/neovim/issues/3566 - `]p` +- [ ] bad auto indentation ### With plugin - [X] a nice completion please @@ -68,7 +69,7 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - for: - [ ] php - `phpcs -e *.php` Explain a standard by showing the sniffs it includes - - `phpcs -e *.php` Explain a standard by showing the sniffs it includes + - `phpcs -s *.php` Show sniff codes in all reports - `phpcs -i` Show a list of installed coding standards - [ ] force type hint - try https://github.com/slevomat/coding-standard @@ -84,6 +85,10 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - [X] javascript - [X] react - [X] typescript + - [ ] barbar + - [ ] fix strange order + - [ ] nvim-lint + - [ ] disable auto folding ### Done - [X] spell check, FR & EN diff --git a/standard.xml b/standard.xml index 1326d74..de399e6 100644 --- a/standard.xml +++ b/standard.xml @@ -10,6 +10,16 @@ - force strict - to check https://github.com/slevomat/coding-standard --> + + + + + + + + + + @@ -20,24 +30,33 @@ - - + + + - + + - - - - - + + + + + + + + + + - + + + From c9409a476132ed47d87701abfb9f6b1ea65555ac Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 8 Sep 2022 00:15:48 +0200 Subject: [PATCH 008/130] Lint - Php, update rules --- standard.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/standard.xml b/standard.xml index de399e6..cce8c65 100644 --- a/standard.xml +++ b/standard.xml @@ -11,10 +11,12 @@ - to check https://github.com/slevomat/coding-standard --> + + @@ -39,6 +41,9 @@ + + + From 39a485d4eb9657791a510f0d6a9fb7c01271f9aa Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 8 Sep 2022 00:15:48 +0200 Subject: [PATCH 009/130] Lint - Php, update rules --- standard.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/standard.xml b/standard.xml index cce8c65..21fb047 100644 --- a/standard.xml +++ b/standard.xml @@ -13,10 +13,12 @@ + + @@ -35,6 +37,8 @@ + + @@ -50,6 +54,8 @@ + + @@ -59,6 +65,7 @@ + From eec757bf4e5e6186c8e39607698e2ae106948561 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 8 Sep 2022 18:49:35 +0200 Subject: [PATCH 010/130] Lint & Doc - Update rule for php --- README.md | 1 + standard.xml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/README.md b/README.md index d738629..f3f1431 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - [ ] fix strange order - [ ] nvim-lint - [ ] disable auto folding + - [ ] nice buffer when i commit with fugitive and test from git hook is launched ### Done - [X] spell check, FR & EN diff --git a/standard.xml b/standard.xml index 21fb047..9fb294a 100644 --- a/standard.xml +++ b/standard.xml @@ -39,6 +39,7 @@ + @@ -58,6 +59,7 @@ + From 3a8809864fd1f62965344fc4fb549e2104e9cbb8 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 8 Sep 2022 18:49:35 +0200 Subject: [PATCH 011/130] Lint & Doc - Update rule for php --- standard.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/standard.xml b/standard.xml index 9fb294a..85af7dc 100644 --- a/standard.xml +++ b/standard.xml @@ -26,6 +26,7 @@ + @@ -55,9 +56,12 @@ + + + @@ -68,6 +72,7 @@ + From e28d85bcaed57891b93e0790d18fcf5c131abeb0 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 8 Sep 2022 18:49:35 +0200 Subject: [PATCH 012/130] Lint - Update rule for js --- eslint.json | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/eslint.json b/eslint.json index 130cdc9..b3a37fc 100644 --- a/eslint.json +++ b/eslint.json @@ -3,30 +3,31 @@ "es6": true }, "rules": { - "constructor-super": ["error"], - "no-const-assign": "error", - "indent": ["warn", 2], - "no-warning-comments": "warn", "array-bracket-spacing": ["warn", "never"], "brace-style": ["warn", "1tbs", {"allowSingleLine": true}], - "comma-spacing": ["warn"], + "comma-spacing": "warn", "comma-style": ["warn", "first"], "computed-property-spacing": ["warn", "never"], + "constructor-super": "error", "function-call-argument-newline": ["warn", "consistent"], + "indent": ["warn", 2], "jsx-quotes": ["warn", "prefer-double"], "key-spacing": ["warn", {"beforeColon": false, "afterColon": true}], "max-len": ["warn", {"ignoreTrailingComments": true}], "newline-before-return": "warn", + "newline-per-chained-call": "warn", "no-console": "warn", + "no-const-assign": "error", "no-else-return": "warn", "no-empty": "warn", "no-eq-null": "warn", - "no-mixed-spaces-and-tabs": ["warn"], - "no-multiple-empty-lines": ["warn"], - "no-tabs": ["warn"], - "no-trailing-spaces": ["warn"], + "no-mixed-spaces-and-tabs": "warn", + "no-multiple-empty-lines": "warn", + "no-tabs": "warn", + "no-trailing-spaces": "warn", "no-unneeded-ternary": "warn", "no-useless-return": "warn", + "no-warning-comments": "warn", "prefer-destructuring": "warn", "quotes": ["warn", "single", {"avoidEscape": true}], "rest-spread-spacing": ["warn", "never"], From 2643f80ec8fa47c76f12bf6060c079437f44f689 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 17 Sep 2022 00:49:53 +0200 Subject: [PATCH 013/130] README - Update tasks --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f3f1431..459c083 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - [X] react - [X] typescript - [ ] barbar - - [ ] fix strange order + - [ ] uninstall it, find one work well with tab - [ ] nvim-lint - [ ] disable auto folding - [ ] nice buffer when i commit with fugitive and test from git hook is launched From fd62da89cbe32b945ea0559f347e4aa2e627b0f1 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 8 Nov 2022 11:53:06 +0000 Subject: [PATCH 014/130] Spell - Updated dics --- spell/en.utf-8.add | 1 + spell/en.utf-8.add.spl | Bin 45 -> 59 bytes 2 files changed, 1 insertion(+) diff --git a/spell/en.utf-8.add b/spell/en.utf-8.add index a059bb7..a122003 100644 --- a/spell/en.utf-8.add +++ b/spell/en.utf-8.add @@ -1 +1,2 @@ javascript +import/! diff --git a/spell/en.utf-8.add.spl b/spell/en.utf-8.add.spl index 571c0bfce0e78291c666a8b46550f265735fc96a..1690f678a185fb1fdc972d4d609024626d91270f 100644 GIT binary patch delta 36 rcmdP3mJ9RrEiOpS$uauRz`&r)l$pht%UHme&sfA*!pI~rQ9u>|v^ogH delta 22 dcmcE46$tb6EiOpS$uauRz`!8Jm^D#O763@)1_J;9 From 8ef6931e60fc0bed37afcc1a9dba9a9e10480376 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 8 Nov 2022 16:17:49 +0000 Subject: [PATCH 015/130] Lint - PHP update rules --- standard.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/standard.xml b/standard.xml index 85af7dc..3fd4024 100644 --- a/standard.xml +++ b/standard.xml @@ -38,6 +38,8 @@ + + From d6d70b2b3868723b3103a5a8d4068ca8475c2f62 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sun, 4 Dec 2022 22:43:10 +0000 Subject: [PATCH 016/130] Too much things - fold, spell update, phpcs rules --- lua/options.lua | 9 ++++++++- spell/en.utf-8.add | 1 + spell/en.utf-8.add.spl | Bin 59 -> 72 bytes standard.xml | 2 ++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lua/options.lua b/lua/options.lua index 75d63e2..6e3706a 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -8,7 +8,14 @@ vim.opt.mouse = 'a' -- Display vim.o.backspace = 'indent,eol,start' -- backspace works on every char in insert mode vim.o.synmaxcol = 300 -- stop syntax highlight after x lines for performance -vim.o.foldmethod = 'syntax' -- use language syntax to generate folds +-- There are six methods to select folds: +-- manual manually define folds +-- indent more indent means a higher fold level +-- expr specify an expression to define folds +-- syntax folds defined by syntax highlighting +-- diff folds for unchanged text +-- marker folds defined by markers in the text +vim.o.foldmethod = 'manual' -- use language syntax to generate folds vim.o.showbreak = '↪' -- character to show when line is broken vim.o.signcolumn = 'yes' vim.opt.termguicolors = true diff --git a/spell/en.utf-8.add b/spell/en.utf-8.add index a122003..56c6237 100644 --- a/spell/en.utf-8.add +++ b/spell/en.utf-8.add @@ -1,2 +1,3 @@ javascript import/! +entry/! diff --git a/spell/en.utf-8.add.spl b/spell/en.utf-8.add.spl index 1690f678a185fb1fdc972d4d609024626d91270f..161628915426db80b05c0f6906b8ae1df70c72e5 100644 GIT binary patch delta 49 zcmcEa&<^wTEiOpS$uauRz`&rxoSK=%n8#ScSj1S#$Rxm+%UHme59Ba1Fz}R2l#>Mj DKvfGz delta 36 rcmeaUmJ9RrEiOpS$uauRz`&r)l$pht%UHme&sfA*!pI~rQCk)OxI75@ diff --git a/standard.xml b/standard.xml index 3fd4024..19a8033 100644 --- a/standard.xml +++ b/standard.xml @@ -23,6 +23,7 @@ + @@ -75,6 +76,7 @@ + From e010ccc23edf860e16dfd14410034422cdf058bd Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 20 Dec 2022 15:57:18 +0100 Subject: [PATCH 017/130] Refactor a little --- lua/options.lua | 62 +++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index 6e3706a..dd34c04 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -1,13 +1,14 @@ +local opt = vim.opt + vim.g.mapleader = ',' -- basic settings -vim.o.encoding = 'utf-8' -vim.o.completeopt = 'menuone,noselect' -vim.opt.mouse = 'a' +opt.encoding = 'utf-8' +opt.completeopt = 'menuone,noselect' +opt.mouse = 'a' -- Display -vim.o.backspace = 'indent,eol,start' -- backspace works on every char in insert mode -vim.o.synmaxcol = 300 -- stop syntax highlight after x lines for performance +opt.synmaxcol = 300 -- stop syntax highlight after x lines for performance -- There are six methods to select folds: -- manual manually define folds -- indent more indent means a higher fold level @@ -15,27 +16,29 @@ vim.o.synmaxcol = 300 -- stop syntax highlight after x lines for performance -- syntax folds defined by syntax highlighting -- diff folds for unchanged text -- marker folds defined by markers in the text -vim.o.foldmethod = 'manual' -- use language syntax to generate folds -vim.o.showbreak = '↪' -- character to show when line is broken -vim.o.signcolumn = 'yes' -vim.opt.termguicolors = true +opt.foldmethod = 'manual' -- use language syntax to generate folds +opt.showbreak = '↪' -- character to show when line is broken +opt.signcolumn = 'yes' +opt.termguicolors = true vim.cmd([[ au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif ]]) -vim.o.spelllang = 'en,fr' -vim.o.spell = true +opt.spelllang = 'en,fr' +opt.spell = true -- Sidebar -vim.o.number = true -vim.o.numberwidth = 3 -- always reserve 3 spaces for line number -vim.o.ignorecase = true -- ignore letter case when searching -vim.o.smartcase = true -- case insentive unless capitals used in search +opt.number = true +opt.numberwidth = 3 -- always reserve 3 spaces for line number +-- Search +opt.ignorecase = true -- ignore letter case when searching +opt.smartcase = true -- case insentive unless capitals used in search --- Tabs -vim.o.smartindent = true -vim.o.tabstop = 2 -- 1 tab = 2 spaces -vim.o.shiftwidth = 2 -- indentation rule -vim.o.expandtab = true -- expand tab to spaces +-- Indentation +opt.smartindent = true +opt.tabstop = 2 -- 1 tab = 2 spaces +opt.shiftwidth = 2 -- indentation rule +opt.expandtab = true -- expand tab to spaces +opt.autoindent = true vim.cmd([[ augroup tab_for_python @@ -44,11 +47,26 @@ vim.cmd([[ augroup end ]]) +-- Backspace +opt.backspace = 'indent,eol,start' -- backspace works on every char in insert mode +opt.iskeyword:append('-') +opt.iskeyword:append('$') + +-- cursor +opt.cursorline = true + +-- Clipboard +opt.clipboard:append('unnamedplus') + function toggleThemeLight() - vim.o.background = vim.o.background == 'dark' and 'light' or 'dark' + opt.background = opt.background == 'dark' and 'light' or 'dark' end --- COC +-- Split +opt.splitright = true +opt.splitbelow = true + +-- COC TODO move it in plugin file vim.cmd([[ function! CheckBackspace() abort let col = col('.') - 1 From 5d15794cf66761797f04d2cc2ce4ea4606f5fc8c Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 20 Dec 2022 16:18:19 +0100 Subject: [PATCH 018/130] Refactor plugins setting --- lua/plugins.lua | 259 +++++++++++++++++++++++++++--------------------- 1 file changed, 145 insertions(+), 114 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 5434c31..361f50a 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -1,123 +1,154 @@ --- Compile each time this file is edited & source it ! +local ensure_packer = function() + 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 + fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) + vim.cmd [[packadd packer.nvim]] + return true + end + return false +end + +local packer_bootstrap = ensure_packer() + +-- Compile & sync each time this file is edited & source it ! vim.cmd([[ augroup packer_user_config autocmd! - autocmd BufWritePost plugins.lua source | PackerCompile + autocmd BufWritePost plugins.lua source | PackerSync augroup end ]]) +local status, packer = pcall(require, "packer") +if not status then + return +end + return require('packer').startup(function(use) - use 'wbthomason/packer.nvim' - - use 'tpope/vim-fugitive' -- Git commands - use 'EdenEast/nightfox.nvim' -- Themes - use { - 'navarasu/onedark.nvim', -- Themes - config = function() require'plugins.onedark' end - } - use { - 'romgrk/barbar.nvim', - requires = {'kyazdani42/nvim-web-devicons'}, - config = function() require'plugins.barbar' end - } - use 'nelstrom/vim-visual-star-search' - use { - 'feline-nvim/feline.nvim', - branch = '0.5-compat', - config = function() require'plugins.feline' end - } - use 'junegunn/goyo.vim' - use { - 'nvim-treesitter/nvim-treesitter', - config = function() require'plugins.treesitter' end - } - use { - 'kyazdani42/nvim-tree.lua', - opt = true, - requires = { - 'kyazdani42/nvim-web-devicons', - }, - cmd = {'NvimTreeToggle', 'NvimTreeFindFile'}, - config = function() require'plugins.tree' end - } - use { - 'nvim-telescope/telescope.nvim', - tag = '0.1.0', - requires = {'nvim-lua/plenary.nvim'}, - config = function() require'plugins.telescope' end - } - use { - 'lukas-reineke/indent-blankline.nvim', - config = function() require'plugins.indent-blankline' end - } - use { - 'kylechui/nvim-surround', - tag = '*', -- Use for stability; omit to use `main` branch for the latest features - config = function() require'nvim-surround'.setup() end - } - use { - 'terrortylor/nvim-comment', - config = function() require'nvim_comment'.setup() end - } - use { - 'windwp/nvim-autopairs', - config = function() require'nvim-autopairs'.setup() end - } - use { - --[[ - You have to install coc extension or configure language servers for LSP support. - Install extensions like: - :CocInstall coc-json coc-tsserver - ]] - 'neoclide/coc.nvim', - branch = 'release', - config = function() require'plugins.coc' end - } - use 'tjdevries/overlength.vim' - use { - 'mfussenegger/nvim-lint', - requires = {'eslint/eslint', 'squizlabs/PHP_CodeSniffer'}, - config = function() require'plugins.nvim-lint' end - } - - use { - 'lewis6991/gitsigns.nvim', - config = function() - require('gitsigns').setup { - on_attach = function(bufnr) - local gs = package.loaded.gitsigns - - local function map(mode, l, r, opts) - opts = opts or {} - opts.buffer = bufnr - vim.keymap.set(mode, l, r, opts) - end - - -- Couldn’t move those in mappin.lua - -- Navigation - map('n', ']c', function() - if vim.wo.diff then return ']c' end - vim.schedule(function() gs.next_hunk() end) - return '' - end, {expr=true}) - - map('n', '[c', function() - if vim.wo.diff then return '[c' end - vim.schedule(function() gs.prev_hunk() end) - return '' - end, {expr=true}) - - -- Actions - map({'n', 'v'}, 'hs', ':Gitsigns stage_hunk') - map({'n', 'v'}, 'hr', ':Gitsigns reset_hunk') - map('n', 'hu', gs.undo_stage_hunk) - map('n', 'hp', gs.preview_hunk) - map('n', 'hb', function() gs.blame_line{full=true} end) - map('n', 'tb', gs.toggle_current_line_blame) - map('n', 'hd', gs.diffthis) + use 'wbthomason/packer.nvim' + + use 'tpope/vim-fugitive' -- Git commands + + use 'EdenEast/nightfox.nvim' -- Themes + + use { + 'navarasu/onedark.nvim', -- Themes + config = function() require'plugins.onedark' end + } + + use 'nelstrom/vim-visual-star-search' + + use { + 'feline-nvim/feline.nvim', + branch = '0.5-compat', + config = function() require'plugins.feline' end + } + + use 'junegunn/goyo.vim' + + use { + 'nvim-treesitter/nvim-treesitter', + config = function() require'plugins.treesitter' end + } + + use { + 'kyazdani42/nvim-tree.lua', + opt = true, + requires = { + 'kyazdani42/nvim-web-devicons', + }, + cmd = {'NvimTreeToggle', 'NvimTreeFindFile'}, + config = function() require'plugins.tree' end + } + + use { + 'nvim-telescope/telescope.nvim', + tag = '0.1.0', + requires = {'nvim-lua/plenary.nvim'}, + config = function() require'plugins.telescope' end + } + + use { + 'lukas-reineke/indent-blankline.nvim', + config = function() require'plugins.indent-blankline' end + } + + use { + 'kylechui/nvim-surround', + tag = '*', -- Use for stability; omit to use `main` branch for the latest features + config = function() require'nvim-surround'.setup() end + } + + use { + 'terrortylor/nvim-comment', + config = function() require'nvim_comment'.setup() end + } + + use { + 'windwp/nvim-autopairs', + config = function() require'nvim-autopairs'.setup() end + } + + use { + --[[ + You have to install coc extension or configure language servers for LSP support. + Install extensions like: + :CocInstall coc-json coc-tsserver + ]] + 'neoclide/coc.nvim', + branch = 'release', + config = function() require'plugins.coc' end + } + + use 'tjdevries/overlength.vim' + + use { + 'mfussenegger/nvim-lint', + requires = {'eslint/eslint', 'squizlabs/PHP_CodeSniffer'}, + config = function() require'plugins.nvim-lint' end + } + + use { + 'lewis6991/gitsigns.nvim', + config = function() + require('gitsigns').setup { + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) end - } - end - } + + -- Couldn’t move those in mappin.lua + -- Navigation + map('n', ']c', function() + if vim.wo.diff then return ']c' end + vim.schedule(function() gs.next_hunk() end) + return '' + end, {expr=true}) + + map('n', '[c', function() + if vim.wo.diff then return '[c' end + vim.schedule(function() gs.prev_hunk() end) + return '' + end, {expr=true}) + + -- Actions + map({'n', 'v'}, 'hs', ':Gitsigns stage_hunk') + map({'n', 'v'}, 'hr', ':Gitsigns reset_hunk') + map('n', 'hu', gs.undo_stage_hunk) + map('n', 'hp', gs.preview_hunk) + map('n', 'hb', function() gs.blame_line{full=true} end) + map('n', 'tb', gs.toggle_current_line_blame) + map('n', 'hd', gs.diffthis) + end + } + end + } + + if packer_bootstrap then + require("packer").sync() end -) +end) From 1a57ef35d3d45759776ceb83cc5fa8050bec4405 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 20 Dec 2022 16:29:38 +0100 Subject: [PATCH 019/130] Refactor mappings --- lua/mapping.lua | 11 +++++++---- lua/options.lua | 2 -- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lua/mapping.lua b/lua/mapping.lua index 7643154..50d4da2 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -1,15 +1,18 @@ -local map = vim.api.nvim_set_keymap +vim.g.mapleader = ',' +local map = vim.api.nvim_set_keymap noremap = {noremap = true} +-- general +map('n', 'x', '"_x', noremap) +map('n', '+', '', noremap) +map('n', '-', '', noremap) + -- Telescope map('n', 'ff', ":Telescope find_files prompt_prefix= 🔍  find_command=rg,--ignore,--hidden,--files ", noremap) map('n', 'fg', ":Telescope git_files prompt_prefix=  ", noremap) map('n', 'ft', ":Telescope help_tags prompt_prefix=  ", noremap) ---[[ tab, barbar - no more vim-tab used, only buffer, have to quit explitly for the last buffer -]] map('n', 'w', ":BufferDelete", noremap) map('n', 'q', ":quit", noremap) diff --git a/lua/options.lua b/lua/options.lua index dd34c04..62b4e59 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -1,7 +1,5 @@ local opt = vim.opt -vim.g.mapleader = ',' - -- basic settings opt.encoding = 'utf-8' opt.completeopt = 'menuone,noselect' From 4d48b0ddac3327246c20ec4a7e6de13234589856 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 20 Dec 2022 16:44:59 +0100 Subject: [PATCH 020/130] Add 2 plugins: vim-tmux-navigator & vim-ReplaceWithRegister --- lua/plugins.lua | 6 ++++++ lua/plugins/feline.lua | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 361f50a..a18c1b0 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -31,6 +31,8 @@ return require('packer').startup(function(use) use 'EdenEast/nightfox.nvim' -- Themes + use 'kyazdani42/nvim-web-devicons' + use { 'navarasu/onedark.nvim', -- Themes config = function() require'plugins.onedark' end @@ -148,6 +150,10 @@ return require('packer').startup(function(use) end } + use("christoomey/vim-tmux-navigator") -- tmux & split window navigation + + use("inkarkat/vim-ReplaceWithRegister") -- replace with register contents using motion (gr + motion) + if packer_bootstrap then require("packer").sync() end diff --git a/lua/plugins/feline.lua b/lua/plugins/feline.lua index 2810b97..7547be6 100644 --- a/lua/plugins/feline.lua +++ b/lua/plugins/feline.lua @@ -14,5 +14,4 @@ local gruvbox = { yellow = '#d79921', } -local feline = require('feline') -feline.setup({theme = gruvbox}) +require('feline').setup({theme = gruvbox}) From 6e1157063c95f9bd9eff54f9b1a4c269913c2aa1 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 20 Dec 2022 18:31:53 +0100 Subject: [PATCH 021/130] Completion - Start to use another completion plugin --- lua/mapping.lua | 15 ------------ lua/plugins.lua | 58 +++++++++++++++++++++++++++++++++++++-------- lua/plugins/coc.lua | 3 --- 3 files changed, 48 insertions(+), 28 deletions(-) delete mode 100644 lua/plugins/coc.lua diff --git a/lua/mapping.lua b/lua/mapping.lua index 50d4da2..4ac4e58 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -16,21 +16,6 @@ map('n', 'ft', ":Telescope help_tags prompt_prefix=  ", norem map('n', 'w', ":BufferDelete", noremap) map('n', 'q', ":quit", noremap) --- COC --- Confirm selection with ctr space -vim.cmd([[ - inoremap coc#pum#visible() ? coc#pum#confirm() : "\" -]]) - --- Cycle suggestion with tab ↓ and s-tab ↑ -vim.cmd([[ - inoremap - \ coc#pum#visible() ? coc#pum#next(1) : - \ CheckBackspace() ? "\" : - \ coc#refresh() - inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" -]]) - vim.api.nvim_set_keymap('n', '', ':e!', { noremap = true }) vim.api.nvim_set_keymap('n', 'e', ':NvimTreeToggle', { noremap = true }) vim.api.nvim_set_keymap('n', 't', ':lua toggleThemeLight()', { noremap = true }) diff --git a/lua/plugins.lua b/lua/plugins.lua index a18c1b0..4c8edfa 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -91,16 +91,54 @@ return require('packer').startup(function(use) config = function() require'nvim-autopairs'.setup() end } - use { - --[[ - You have to install coc extension or configure language servers for LSP support. - Install extensions like: - :CocInstall coc-json coc-tsserver - ]] - 'neoclide/coc.nvim', - branch = 'release', - config = function() require'plugins.coc' end - } + -- autocompletion + use{ + 'hrsh7th/nvim-cmp', + config = function() + local cmp = require'cmp' + local luasnip = require'luasnip' + local lspkind = require'lspkind' + + require('cmp').setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + + mapping = cmp.mapping.preset.insert({ + -- [""] = cmp.mapping.scroll_docs(-4), -- TODO find default map + -- [""] = cmp.mapping.scroll_docs(4), -- TODO find default map + -- [""] = cmp.mapping.complete(), -- show completion suggestions + [""] = cmp.mapping.abort(), -- close completion window + [""] = cmp.mapping.confirm({ select = false }), + }), + + -- sources for autocompletion + sources = cmp.config.sources({ + { name = "nvim_lsp" }, -- lsp + { name = "luasnip" }, -- snippets + { name = "buffer" }, -- text within current buffer + { name = "path" }, -- file system paths + }), + + -- configure lspkind for vs-code like icons + formatting = { + format = lspkind.cmp_format({ + maxwidth = 50, + ellipsis_char = "...", + }), + }, + } + end + } -- completion plugin + use("hrsh7th/cmp-buffer") -- source for text in buffer + use("hrsh7th/cmp-path") -- source for file system paths + use("onsails/lspkind.nvim") -- vs-code like icons for autocompletion + + -- snippets + use("L3MON4D3/LuaSnip") -- snippet engine + use("saadparwaiz1/cmp_luasnip") -- for autocompletion use 'tjdevries/overlength.vim' diff --git a/lua/plugins/coc.lua b/lua/plugins/coc.lua deleted file mode 100644 index 617abdb..0000000 --- a/lua/plugins/coc.lua +++ /dev/null @@ -1,3 +0,0 @@ -vim.cmd([[ - autocmd ColorScheme * hi CocMenuSel ctermbg=237 guibg=#13354A -]]) From 534e9f0490caeead879457f8151fe636db6987b4 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 20 Dec 2022 21:54:05 +0100 Subject: [PATCH 022/130] Lsp add support of it --- lua/plugins.lua | 211 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 205 insertions(+), 6 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 4c8edfa..09b882f 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -19,11 +19,6 @@ vim.cmd([[ augroup end ]]) -local status, packer = pcall(require, "packer") -if not status then - return -end - return require('packer').startup(function(use) use 'wbthomason/packer.nvim' @@ -132,14 +127,215 @@ return require('packer').startup(function(use) } end } -- completion plugin + use("hrsh7th/cmp-buffer") -- source for text in buffer + use("hrsh7th/cmp-path") -- source for file system paths - use("onsails/lspkind.nvim") -- vs-code like icons for autocompletion -- snippets use("L3MON4D3/LuaSnip") -- snippet engine + use("saadparwaiz1/cmp_luasnip") -- for autocompletion + -- managing & installing lsp servers, linters & formatters + use{ + "williamboman/mason.nvim", + config = function() + local mason = require'mason' + mason.setup() + end + } -- in charge of managing lsp servers, linters & formatters + + use{ + "williamboman/mason-lspconfig.nvim", + config = function() + local mason_lspconfig = require'mason-lspconfig' + mason_lspconfig.setup({ + ensure_installed = { + 'cssls', + 'dockerls', + 'eslint', + 'html', + 'jsonls', + 'marksman', + 'psalm', + 'ruby_ls', + 'sqlls', + 'sumneko_lua', + 'tailwindcss', + 'tsserver', + } + }) + end + } -- bridges gap b/w mason & lspconfig + + -- configuring lsp servers + use{ + "neovim/nvim-lspconfig", + config = function() + local lspconfig = require'lspconfig' + local cmp_nvim_lsp = require'cmp_nvim_lsp' + local typescript = require'typescript' + + local keymap = vim.keymap -- for conciseness + + -- enable keybinds only for when lsp server available + local on_attach = function(client, bufnr) + -- keybind options + local opts = { noremap = true, silent = true, buffer = bufnr } + + -- set keybinds + keymap.set("n", "gf", "Lspsaga lsp_finder", opts) -- show definition, references + keymap.set("n", "gD", "lua vim.lsp.buf.declaration()", opts) -- got to declaration + keymap.set("n", "gd", "Lspsaga peek_definition", opts) -- see definition and make edits in window + keymap.set("n", "gi", "lua vim.lsp.buf.implementation()", opts) -- go to implementation + keymap.set("n", "ca", "Lspsaga code_action", opts) -- see available code actions + keymap.set("n", "rn", "Lspsaga rename", opts) -- smart rename + keymap.set("n", "D", "Lspsaga show_line_diagnostics", opts) -- show diagnostics for line + keymap.set("n", "d", "Lspsaga show_cursor_diagnostics", opts) -- show diagnostics for cursor + keymap.set("n", "[d", "Lspsaga diagnostic_jump_prev", opts) -- jump to previous diagnostic in buffer + keymap.set("n", "]d", "Lspsaga diagnostic_jump_next", opts) -- jump to next diagnostic in buffer + keymap.set("n", "K", "Lspsaga hover_doc", opts) -- show documentation for what is under cursor + keymap.set("n", "o", "LSoutlineToggle", opts) -- see outline on right hand side + + -- typescript specific keymaps (e.g. rename file and update imports) + if client.name == "tsserver" then + keymap.set("n", "rf", ":TypescriptRenameFile") -- rename file and update imports + keymap.set("n", "oi", ":TypescriptOrganizeImports") -- organize imports (not in youtube nvim video) + keymap.set("n", "ru", ":TypescriptRemoveUnused") -- remove unused variables (not in youtube nvim video) + end + end + + -- used to enable autocompletion (assign to every lsp server config) + local capabilities = cmp_nvim_lsp.default_capabilities() + + -- Change the Diagnostic symbols in the sign column (gutter) + -- (not in youtube nvim video) + local signs = { Error = " ", Warn = " ", Hint = "😒", Info = " " } + for type, icon in pairs(signs) do + local hl = "DiagnosticSign" .. type + vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) + end + + -- configure html server + lspconfig["html"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- configure typescript server with plugin + typescript.setup({ + server = { + capabilities = capabilities, + on_attach = on_attach, + }, + }) + + -- configure css server + lspconfig["cssls"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- configure tailwindcss server + lspconfig["tailwindcss"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- configure lua server (with special settings) + lspconfig["sumneko_lua"].setup({ + capabilities = capabilities, + on_attach = on_attach, + settings = { -- custom settings for lua + Lua = { + -- make the language server recognize "vim" global + diagnostics = { + globals = { "vim" }, + }, + workspace = { + -- make language server aware of runtime files + library = { + [vim.fn.expand("$VIMRUNTIME/lua")] = true, + [vim.fn.stdpath("config") .. "/lua"] = true, + }, + }, + }, + }, + }) + + -- configure dockerls server + lspconfig["dockerls"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- configure eslint server + lspconfig["eslint"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- configure jsonls server + lspconfig["jsonls"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- configure marksman server + lspconfig["marksman"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- configure psalm server + lspconfig["psalm"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- configure ruby_ls server + lspconfig["ruby_ls"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + + -- configure sqlls server + lspconfig["sqlls"].setup({ + capabilities = capabilities, + on_attach = on_attach, + }) + end + } -- easily configure language servers + + use("hrsh7th/cmp-nvim-lsp") -- for autocompletion + + use{ + "glepnir/lspsaga.nvim", + branch = "main", + config = function() + local saga = require'lspsaga' + + saga.init_lsp_saga({ + -- keybinds for navigation in lspsaga window + move_in_saga = { prev = "", next = "" }, + -- use enter to open file with finder + finder_action_keys = { + open = "", + }, + -- use enter to open file with definition preview + definition_action_keys = { + edit = "", + } + }) + + end + } -- enhanced lsp uis + + use("jose-elias-alvarez/typescript.nvim") -- additional functionality for typescript server (e.g. rename file & update imports) + + use("onsails/lspkind.nvim") -- vs-code like icons for autocompletion + use 'tjdevries/overlength.vim' use { @@ -152,6 +348,9 @@ return require('packer').startup(function(use) 'lewis6991/gitsigns.nvim', config = function() require('gitsigns').setup { + signs = { + delete = { hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' } + }, on_attach = function(bufnr) local gs = package.loaded.gitsigns From b71f7cd60495bf4b1b13610fa4d325256e140572 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 20 Dec 2022 21:59:24 +0100 Subject: [PATCH 023/130] Plugin add nvim-ts-autotag --- lua/plugins.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 09b882f..6bdfb68 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -81,10 +81,9 @@ return require('packer').startup(function(use) config = function() require'nvim_comment'.setup() end } - use { - 'windwp/nvim-autopairs', - config = function() require'nvim-autopairs'.setup() end - } + use('windwp/nvim-autopairs') + + use('windwp/nvim-ts-autotag') -- autocompletion use{ From 28974b8eeeaf5f74a2d0cf3e9217330ce8979dfb Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 20 Dec 2022 22:12:26 +0100 Subject: [PATCH 024/130] Treesitter and completion --- lua/plugins.lua | 22 +++++++++++++++++++++- lua/plugins/treesitter.lua | 10 +++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 6bdfb68..dbd9485 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -81,7 +81,27 @@ return require('packer').startup(function(use) config = function() require'nvim_comment'.setup() end } - use('windwp/nvim-autopairs') + use{ + 'windwp/nvim-autopairs', + config = function() + local autopairs = require'nvim-autopairs' + + -- configure autopairs + autopairs.setup({ + check_ts = true, -- enable treesitter + ts_config = { + lua = {"string"}, -- don't add pairs in lua string treesitter nodes + javascript = {"template_string"}, -- don't add pairs in javscript template_string treesitter nodes + }, + }) + + local cmp_autopairs = require'nvim-autopairs.completion.cmp' + local cmp = require'cmp' + + -- make autopairs and completion work together + cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done()) + end + } use('windwp/nvim-ts-autotag') diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua index c5d4dbb..e35b1a0 100644 --- a/lua/plugins/treesitter.lua +++ b/lua/plugins/treesitter.lua @@ -1,5 +1,13 @@ require('nvim-treesitter.configs').setup { - -- A list of parser names, or 'all' + -- enable syntax highlighting + highlight = { + enable = true, + }, + -- enable indentation + indent = {enable = true}, + -- enable autotagging (w/ nvim-ts-autotag plugin) + autotag = {enable = true}, + -- ensure these language parsers are installed ensure_installed = { 'css', 'dockerfile', From 92c642eee09ff93348281ffc4d04c43cc89e7366 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 21 Dec 2022 22:28:56 +0000 Subject: [PATCH 025/130] README - List plugins More details --- README.md | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 459c083..75674de 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,51 @@ To check run `:checkhealth` in neovim - Check latest version of `pynvim` is installed (via pip) - Check npm neovim is installed, but still no enough -## Plugin manager: Packer +## Plugins +### Plugin manager: Packer ### For the first use [source](https://github.com/wbthomason/packer.nvim#quickstart) +### List + +`PackerStatus` +- LuaSnip +- PHP_CodeSniffer +- cmp-buffer +- cmp-nvim-lsp +- cmp-path +- cmp_luasnip +- eslint +- feline.nvim +- gitsigns.nvim +- goyo.vim +- indent-blankline.nvim +- lspkind.nvim +- lspsaga.nvim +- mason-lspconfig.nvim +- mason.nvim +- nightfox.nvim +- nvim-autopairs +- nvim-cmp +- nvim-comment +- nvim-lint +- nvim-lspconfig +- nvim-surround +- nvim-tree.lua (not loaded) +- nvim-treesitter +- nvim-ts-autotag +- nvim-web-devicons +- onedark.nvim +- overlength.vim +- packer.nvim +- plenary.nvim +- telescope.nvim +- typescript.nvim +- vim-ReplaceWithRegister +- vim-fugitive +- vim-tmux-navigator +- vim-visual-star-search + > To get started, first clone this repository to somewhere on your packpath, e.g.: ```shell git clone --depth 1 https://github.com/wbthomason/packer.nvim\ From 5c7f32884dbd8a93796df7af0973351268d09a4f Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 21 Dec 2022 22:40:01 +0000 Subject: [PATCH 026/130] Plugin - Add mintabline --- README.md | 4 +++- lua/plugins.lua | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 75674de..1170924 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ To check run `:checkhealth` in neovim ### List -`PackerStatus` +`PackerStatus` : + - LuaSnip - PHP_CodeSniffer - cmp-buffer @@ -38,6 +39,7 @@ To check run `:checkhealth` in neovim - lspsaga.nvim - mason-lspconfig.nvim - mason.nvim +- mintabline.vim - nightfox.nvim - nvim-autopairs - nvim-cmp diff --git a/lua/plugins.lua b/lua/plugins.lua index dbd9485..2c07064 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -409,6 +409,7 @@ return require('packer').startup(function(use) use("christoomey/vim-tmux-navigator") -- tmux & split window navigation use("inkarkat/vim-ReplaceWithRegister") -- replace with register contents using motion (gr + motion) + use("sangdol/mintabline.vim") if packer_bootstrap then require("packer").sync() From 3f24c20c4b18a742e23a35b7559ef3f87ea48d29 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 21 Dec 2022 22:44:22 +0000 Subject: [PATCH 027/130] Mapping - update some and refactor --- lua/mapping.lua | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/lua/mapping.lua b/lua/mapping.lua index 4ac4e58..793b6b5 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -1,29 +1,21 @@ vim.g.mapleader = ',' local map = vim.api.nvim_set_keymap -noremap = {noremap = true} +local noremap = {noremap = true} -- general map('n', 'x', '"_x', noremap) map('n', '+', '', noremap) map('n', '-', '', noremap) +map('n', 'w', ":q", noremap) +map('n', 'q', ":qa", noremap) + +map('n', '', ':e!', noremap) +map('n', 'e', ':NvimTreeToggle', noremap) +map('n', 't', ':lua toggleThemeLight()', noremap) + -- Telescope map('n', 'ff', ":Telescope find_files prompt_prefix= 🔍  find_command=rg,--ignore,--hidden,--files ", noremap) map('n', 'fg', ":Telescope git_files prompt_prefix=  ", noremap) map('n', 'ft', ":Telescope help_tags prompt_prefix=  ", noremap) - -map('n', 'w', ":BufferDelete", noremap) -map('n', 'q', ":quit", noremap) - -vim.api.nvim_set_keymap('n', '', ':e!', { noremap = true }) -vim.api.nvim_set_keymap('n', 'e', ':NvimTreeToggle', { noremap = true }) -vim.api.nvim_set_keymap('n', 't', ':lua toggleThemeLight()', { noremap = true }) - ---[[ FIXME documentation on hover --- > Error on notification "doHover": hover provider not found for current buffer, your language server doesn't support it --- So install server php -]] -vim.cmd([[ - nnoremap h :call CocActionAsync('doHover') -]]) From 769791dfb72420253a088aed06048a475af03352 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 21 Dec 2022 23:43:12 +0000 Subject: [PATCH 028/130] Snippets - Create my first snippet --- README.md | 1 + lua/plugins.lua | 9 +++++++-- my_snippets/package.json | 13 +++++++++++++ my_snippets/snippets/javascript.json | 6 ++++++ 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 my_snippets/package.json create mode 100644 my_snippets/snippets/javascript.json diff --git a/README.md b/README.md index 1170924..f79e7f8 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ To check run `:checkhealth` in neovim `PackerStatus` : - LuaSnip + - Some useful inspiration for snippets: https://github.com/rafamadriz/friendly-snippets - PHP_CodeSniffer - cmp-buffer - cmp-nvim-lsp diff --git a/lua/plugins.lua b/lua/plugins.lua index 2c07064..ccbf5f4 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -151,8 +151,13 @@ return require('packer').startup(function(use) use("hrsh7th/cmp-path") -- source for file system paths - -- snippets - use("L3MON4D3/LuaSnip") -- snippet engine + -- snippet engine + use{ + "L3MON4D3/LuaSnip", + config = function() + require("luasnip.loaders.from_vscode").lazy_load({paths = "~/.config/nvim/my_snippets"}) + end + } use("saadparwaiz1/cmp_luasnip") -- for autocompletion diff --git a/my_snippets/package.json b/my_snippets/package.json new file mode 100644 index 0000000..7aaebc4 --- /dev/null +++ b/my_snippets/package.json @@ -0,0 +1,13 @@ +{ + "name": "tariks-snippets", + "contributes": { + "snippets": [ + { + "language": [ + "javascript" + ], + "path": "./snippets/javascript.json" + } + ] + } +} diff --git a/my_snippets/snippets/javascript.json b/my_snippets/snippets/javascript.json new file mode 100644 index 0000000..84ee85d --- /dev/null +++ b/my_snippets/snippets/javascript.json @@ -0,0 +1,6 @@ +{ + "console.log": { + "prefix": "c", + "body": "console.log(${0})" + } +} From d4ec824e5620837139bcd1c55e9edcb9dca6d7f4 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 21 Dec 2022 23:57:55 +0000 Subject: [PATCH 029/130] Treesitter - Support git now --- README.md | 27 ++++++++++++++++++++++++++- lua/plugins/treesitter.lua | 3 +++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f79e7f8..b8581fd 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ To check run `:checkhealth` in neovim ### List -`PackerStatus` : +
+ `PackerStatus` : - LuaSnip - Some useful inspiration for snippets: https://github.com/rafamadriz/friendly-snippets @@ -50,6 +51,29 @@ To check run `:checkhealth` in neovim - nvim-surround - nvim-tree.lua (not loaded) - nvim-treesitter + - git_rebase + - gitattributes + - gitcommit + - css + - dockerfile + - html + - javascript + - jsdoc + - json + - json5 + - lua + - make + - markdown + - ninja + - php + - python + - regex + - ruby + - scss + - sql + - tsx + - typescript + - yaml - nvim-ts-autotag - nvim-web-devicons - onedark.nvim @@ -62,6 +86,7 @@ To check run `:checkhealth` in neovim - vim-fugitive - vim-tmux-navigator - vim-visual-star-search +
> To get started, first clone this repository to somewhere on your packpath, e.g.: ```shell diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua index e35b1a0..6c8132c 100644 --- a/lua/plugins/treesitter.lua +++ b/lua/plugins/treesitter.lua @@ -9,6 +9,9 @@ require('nvim-treesitter.configs').setup { autotag = {enable = true}, -- ensure these language parsers are installed ensure_installed = { + 'git_rebase', + 'gitattributes', + 'gitcommit', 'css', 'dockerfile', 'html', From 4b4c53a1e70f3691ef4cb54c1e5ee4c3236e115e Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Dec 2022 00:06:26 +0000 Subject: [PATCH 030/130] Theme - Fix toggle dark | light --- README.md | 4 ++++ lua/mapping.lua | 1 - lua/plugins.lua | 2 +- lua/plugins/onedark.lua | 4 +++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b8581fd..ecb538f 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,10 @@ Neovim must be above **0.5** to work well with lua config, and some plugin need **0.7** version. +## Commands + +- `t` to switch dark|light theme + ## Some resources - https://teukka.tech/luanvim.html - https://github.com/nanotee/nvim-lua-guide diff --git a/lua/mapping.lua b/lua/mapping.lua index 793b6b5..9455c6a 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -13,7 +13,6 @@ map('n', 'q', ":qa", noremap) map('n', '', ':e!', noremap) map('n', 'e', ':NvimTreeToggle', noremap) -map('n', 't', ':lua toggleThemeLight()', noremap) -- Telescope map('n', 'ff', ":Telescope find_files prompt_prefix= 🔍  find_command=rg,--ignore,--hidden,--files ", noremap) diff --git a/lua/plugins.lua b/lua/plugins.lua index ccbf5f4..c03ad64 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -26,7 +26,7 @@ return require('packer').startup(function(use) use 'EdenEast/nightfox.nvim' -- Themes - use 'kyazdani42/nvim-web-devicons' + use 'kyazdani42/nvim-web-devicons' -- Icons use { 'navarasu/onedark.nvim', -- Themes diff --git a/lua/plugins/onedark.lua b/lua/plugins/onedark.lua index c25985b..844dfbf 100644 --- a/lua/plugins/onedark.lua +++ b/lua/plugins/onedark.lua @@ -1,5 +1,7 @@ require('onedark').setup{ -- dark, darker, warm, warmer - style = 'warm' + style = 'warm', + toggle_style_list = {'warm', 'light'}, + toggle_style_key = 't' } require('onedark').load() From 9d7e04b0801046fb138fd283c8a7085ccc700def Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Dec 2022 00:07:51 +0000 Subject: [PATCH 031/130] README - Clean it from wishes --- README.md | 97 ++++++------------------------------------------------- 1 file changed, 10 insertions(+), 87 deletions(-) diff --git a/README.md b/README.md index ecb538f..018ad41 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,16 @@ To check run `:checkhealth` in neovim ### For the first use [source](https://github.com/wbthomason/packer.nvim#quickstart) + +> To get started, first clone this repository to somewhere on your packpath, e.g.: +```shell +git clone --depth 1 https://github.com/wbthomason/packer.nvim\ + ~/.local/share/nvim/site/pack/packer/start/packer.nvim +``` +> You must run this or `PackerSync` whenever you make changes to your plugin configuration +> Regenerate compiled loader file +> `:PackerCompile` + ### List
@@ -92,15 +102,6 @@ To check run `:checkhealth` in neovim - vim-visual-star-search
-> To get started, first clone this repository to somewhere on your packpath, e.g.: -```shell -git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - ~/.local/share/nvim/site/pack/packer/start/packer.nvim -``` -> You must run this or `PackerSync` whenever you make changes to your plugin configuration -> Regenerate compiled loader file -> `:PackerCompile` - ## External dependencies - `ripgrep` - `fd-find` @@ -115,81 +116,3 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - `composer` - `phpcs` - `composer global require "squizlabs/php_codesniffer=*"` [source](https://github.com/squizlabs/PHP_CodeSniffer#composer) - -
- What i want - -### Maybe without plug-in -- [ ] find lua version of a vim option -- [ ] nice & robust setting for tags -- [ ] smart indentation on paste from clipboard - - https://github.com/neovim/neovim/issues/3566 - - `]p` -- [ ] bad auto indentation - -### With plugin -- [X] a nice completion please - - [ ] Order suggestion: - 1. definition (with tags?) - 2. buffer - 3. clipboard never - - [ ] Documentation on hover -- [ ] snippets - - https://github.com/SirVer/ultisnips - - *just a library of snippets* https://github.com/honza/vim-snippets -- [X] linter (nvim-lint) - - [ ] custom icons for error and warning - - for: - - [ ] php - - `phpcs -e *.php` Explain a standard by showing the sniffs it includes - - `phpcs -s *.php` Show sniff codes in all reports - - `phpcs -i` Show a list of installed coding standards - - [ ] force type hint - - try https://github.com/slevomat/coding-standard - - [ ] force type return - - [ ] force strict - - [ ] lua - - [ ] nginx - - [ ] docker - - [ ] sql - - [ ] ruby - - [ ] python - - [ ] shell - - [X] javascript - - [X] react - - [X] typescript - - [ ] barbar - - [ ] uninstall it, find one work well with tab - - [ ] nvim-lint - - [ ] disable auto folding - - [ ] nice buffer when i commit with fugitive and test from git hook is launched - -### Done -- [X] spell check, FR & EN -- [X] on fresh open file, jump line of the history -- [X] mouse to click & scroll -- [X] max line length highlight -- [X] keep column width for gitsigns -- [X] barbar - - [X] use tab instead classic buffer - - [X] visual order cycling - Using only buffer & no vim tab make it OK, - but have to quit explicitly the last buffer -- [X] switch dark / light theme -- [X] succeed to put plug-in config in a separate file -- [X] pair -- [X] visual search -- [X] Visual status bar -- [X] markdown ? Not easy for code blocks - - Finally no plug-in for markdown, the visual out of the box suit to me. - Just add goyo, having a clear space when I'm not coding -- [X] ~~like ctrlp~~ telescope -- [X] indent setting by language -- [X] jump chunk to chunk -- [X] like vim gutter -- [X] comment quickly -- [X] surround -- [X] compile when needed -- [X] like nerdtree -- [X] map f5 to `:e!` -
From 6021d736713de10b90be4fbb17d6c658199551cc Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Dec 2022 22:47:07 +0000 Subject: [PATCH 032/130] Status line - custom it --- README.md | 6 +- lua/plugins.lua | 10 +- lua/plugins/feline.lua | 243 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 236 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 018ad41..6d6ee22 100644 --- a/README.md +++ b/README.md @@ -41,15 +41,16 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - LuaSnip - Some useful inspiration for snippets: https://github.com/rafamadriz/friendly-snippets +- goyo.vim +- onedark.nvim +- feline.nvim - PHP_CodeSniffer - cmp-buffer - cmp-nvim-lsp - cmp-path - cmp_luasnip - eslint -- feline.nvim - gitsigns.nvim -- goyo.vim - indent-blankline.nvim - lspkind.nvim - lspsaga.nvim @@ -90,7 +91,6 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - yaml - nvim-ts-autotag - nvim-web-devicons -- onedark.nvim - overlength.vim - packer.nvim - plenary.nvim diff --git a/lua/plugins.lua b/lua/plugins.lua index c03ad64..208f046 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -28,19 +28,19 @@ return require('packer').startup(function(use) use 'kyazdani42/nvim-web-devicons' -- Icons - use { - 'navarasu/onedark.nvim', -- Themes + use { -- Themes + 'navarasu/onedark.nvim', config = function() require'plugins.onedark' end } - use 'nelstrom/vim-visual-star-search' - - use { + use { -- status line 'feline-nvim/feline.nvim', branch = '0.5-compat', config = function() require'plugins.feline' end } + use 'nelstrom/vim-visual-star-search' + use 'junegunn/goyo.vim' use { diff --git a/lua/plugins/feline.lua b/lua/plugins/feline.lua index 7547be6..9a17a41 100644 --- a/lua/plugins/feline.lua +++ b/lua/plugins/feline.lua @@ -1,17 +1,230 @@ -local gruvbox = { - fg = '#928374', - bg = '#1F2223', - black ='#1B1B1B', - skyblue = '#458588', - cyan = '#83a597', - green = '#689d6a', - oceanblue = '#1d2021', - magenta = '#fb4934', - orange = '#fabd2f', - red = '#cc241d', - violet = '#b16286', - white = '#ebdbb2', - yellow = '#d79921', +local status, feline = pcall(require, "feline") + +if not status then + return +end + +local one_monokai = { + fg = "#abb2bf", + bg = "#282c34", + green = "#98c379", + yellow = "#e5c07b", + purple = "#c678dd", + orange = "#d19a66", + peanut = "#f6d5a4", + red = "#e06c75", + aqua = "#61afef", + darkblue = "#282c34", + dark_red = "#f75f5f", +} + +local vi_mode_colors = { + NORMAL = "green", + OP = "green", + INSERT = "gray", + VISUAL = "purple", + LINES = "orange", + BLOCK = "dark_red", + REPLACE = "red", + COMMAND = "aqua", +} + +local c = { + vim_mode = { + provider = { + name = "vi_mode", + opts = { + show_mode_name = true, + padding = "center", + }, + }, + hl = function() + return { + fg = require("feline.providers.vi_mode").get_mode_color(), + style = "bold", + name = "NeovimModeHLColor", + } + end, + left_sep = "block", + right_sep = "block", + }, + gitBranch = { + provider = "git_branch", + icon = ' ', + hl = { + fg = "gray", + style = "bold", + }, + left_sep = "block", + right_sep = "block", + }, + gitDiffAdded = { + provider = "git_diff_added", + icon = '✔ ', + hl = { + fg = "green", + }, + left_sep = "block", + right_sep = "block", + }, + gitDiffRemoved = { + provider = "git_diff_removed", + icon = '🗶 ', + hl = { + fg = "red", + }, + left_sep = "block", + right_sep = "block", + }, + gitDiffChanged = { + provider = "git_diff_changed", + icon = '🟓 ', + hl = { + fg = "yellow", + }, + left_sep = "block", + right_sep = "block", + }, + separator = { + provider = "", + }, + fileinfo = { + provider = { + name = "file_info", + opts = { + type = "relative-short", + }, + }, + hl = { + }, + left_sep = " ", + right_sep = " ", + }, + diagnostic_errors = { + provider = "diagnostic_errors", + hl = { + fg = "red", + }, + }, + diagnostic_warnings = { + provider = "diagnostic_warnings", + hl = { + fg = "yellow", + }, + }, + diagnostic_hints = { + provider = "diagnostic_hints", + hl = { + fg = "aqua", + }, + }, + diagnostic_info = { + provider = "diagnostic_info", + hl = { + bg = "darkblue" + } + }, + lsp_client_names = { + provider = "lsp_client_names", + hl = { + fg = "purple", + style = "bold", + }, + left_sep = "block", + right_sep = "block", + }, + file_type = { + provider = { + name = "file_type", + opts = { + filetype_icon = true, + case = "titlecase", + }, + }, + hl = { + fg = "red", + style = "bold", + }, + left_sep = "block", + right_sep = "block", + }, + file_encoding = { + provider = "file_encoding", + hl = { + fg = "orange", + style = "italic", + }, + left_sep = "block", + right_sep = "block", + }, + position = { + provider = "position", + hl = { + fg = "green", + style = "bold", + }, + left_sep = "block", + right_sep = "block", + }, + line_percentage = { + provider = "line_percentage", + hl = { + fg = "aqua", + style = "bold", + }, + left_sep = "block", + right_sep = "block", + }, + scroll_bar = { + provider = "scroll_bar", + hl = { + fg = "yellow", + style = "bold", + }, + }, +} + +local left = { + c.vim_mode, + c.gitBranch, + c.gitDiffAdded, + c.gitDiffRemoved, + c.gitDiffChanged, + c.separator, +} + +local middle = { + c.fileinfo, + c.diagnostic_errors, + c.diagnostic_warnings, + c.diagnostic_info, + c.diagnostic_hints, +} + +local right = { + c.lsp_client_names, + c.file_type, + c.file_encoding, + c.position, + c.line_percentage, + c.scroll_bar, +} + +local components = { + active = { + left, + middle, + right, + }, + inactive = { + left, + middle, + right, + }, } -require('feline').setup({theme = gruvbox}) +feline.setup({ + components = components, + theme = one_monokai, + vi_mode_colors = vi_mode_colors, +}) From 60e43d25f13aa63b6c3a94826f7f6a02787a6a84 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Dec 2022 22:59:05 +0000 Subject: [PATCH 033/130] Polish --- lua/plugins.lua | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 208f046..b334040 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -48,7 +48,7 @@ return require('packer').startup(function(use) config = function() require'plugins.treesitter' end } - use { + use { -- need neovim > 0.8 'kyazdani42/nvim-tree.lua', opt = true, requires = { @@ -105,8 +105,7 @@ return require('packer').startup(function(use) use('windwp/nvim-ts-autotag') - -- autocompletion - use{ + use{ -- autocompletion 'hrsh7th/nvim-cmp', config = function() local cmp = require'cmp' @@ -120,13 +119,9 @@ return require('packer').startup(function(use) end, }, - mapping = cmp.mapping.preset.insert({ - -- [""] = cmp.mapping.scroll_docs(-4), -- TODO find default map - -- [""] = cmp.mapping.scroll_docs(4), -- TODO find default map - -- [""] = cmp.mapping.complete(), -- show completion suggestions - [""] = cmp.mapping.abort(), -- close completion window - [""] = cmp.mapping.confirm({ select = false }), - }), + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.confirm({ select = false }), + }), -- sources for autocompletion sources = cmp.config.sources({ @@ -140,19 +135,18 @@ return require('packer').startup(function(use) formatting = { format = lspkind.cmp_format({ maxwidth = 50, - ellipsis_char = "...", + ellipsis_char = "…", }), }, } end - } -- completion plugin + } use("hrsh7th/cmp-buffer") -- source for text in buffer use("hrsh7th/cmp-path") -- source for file system paths - -- snippet engine - use{ + use{ -- snippet engine "L3MON4D3/LuaSnip", config = function() require("luasnip.loaders.from_vscode").lazy_load({paths = "~/.config/nvim/my_snippets"}) From 3b2a3918fb66f059a06175e2f60eedb6dc9c9531 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Dec 2022 23:02:56 +0000 Subject: [PATCH 034/130] Plugin - Exit nvim-cmp config --- lua/plugins.lua | 34 +--------------------------------- lua/plugins/nvim-cmp.lua | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 33 deletions(-) create mode 100644 lua/plugins/nvim-cmp.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index b334040..83902a2 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -107,39 +107,7 @@ return require('packer').startup(function(use) use{ -- autocompletion 'hrsh7th/nvim-cmp', - config = function() - local cmp = require'cmp' - local luasnip = require'luasnip' - local lspkind = require'lspkind' - - require('cmp').setup { - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - - mapping = cmp.mapping.preset.insert({ - [""] = cmp.mapping.confirm({ select = false }), - }), - - -- sources for autocompletion - sources = cmp.config.sources({ - { name = "nvim_lsp" }, -- lsp - { name = "luasnip" }, -- snippets - { name = "buffer" }, -- text within current buffer - { name = "path" }, -- file system paths - }), - - -- configure lspkind for vs-code like icons - formatting = { - format = lspkind.cmp_format({ - maxwidth = 50, - ellipsis_char = "…", - }), - }, - } - end + config = function() require'plugins.nvim-cmp' end } use("hrsh7th/cmp-buffer") -- source for text in buffer diff --git a/lua/plugins/nvim-cmp.lua b/lua/plugins/nvim-cmp.lua new file mode 100644 index 0000000..2bb1cce --- /dev/null +++ b/lua/plugins/nvim-cmp.lua @@ -0,0 +1,31 @@ +local cmp = require'cmp' +local luasnip = require'luasnip' +local lspkind = require'lspkind' + +require('cmp').setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.confirm({ select = false }), + }), + + -- sources for autocompletion + sources = cmp.config.sources({ + { name = "nvim_lsp" }, -- lsp + { name = "luasnip" }, -- snippets + { name = "buffer" }, -- text within current buffer + { name = "path" }, -- file system paths + }), + + -- configure lspkind for vs-code like icons + formatting = { + format = lspkind.cmp_format({ + maxwidth = 50, + ellipsis_char = "…", + }), + }, +} From 95013da34032ccd0a1173dd3d82e4442ebd86ded Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Dec 2022 23:19:08 +0000 Subject: [PATCH 035/130] Mason - Refactor config --- lua/plugins.lua | 48 ++++----------------------------- lua/plugins/mason-lspconfig.lua | 17 ++++++++++++ lua/plugins/nvim-autopairs.lua | 16 +++++++++++ 3 files changed, 38 insertions(+), 43 deletions(-) create mode 100644 lua/plugins/mason-lspconfig.lua create mode 100644 lua/plugins/nvim-autopairs.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index 83902a2..7409eea 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -83,24 +83,7 @@ return require('packer').startup(function(use) use{ 'windwp/nvim-autopairs', - config = function() - local autopairs = require'nvim-autopairs' - - -- configure autopairs - autopairs.setup({ - check_ts = true, -- enable treesitter - ts_config = { - lua = {"string"}, -- don't add pairs in lua string treesitter nodes - javascript = {"template_string"}, -- don't add pairs in javscript template_string treesitter nodes - }, - }) - - local cmp_autopairs = require'nvim-autopairs.completion.cmp' - local cmp = require'cmp' - - -- make autopairs and completion work together - cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done()) - end + config = function() require'plugins.nvim-autopairs' end } use('windwp/nvim-ts-autotag') @@ -121,38 +104,17 @@ return require('packer').startup(function(use) end } - use("saadparwaiz1/cmp_luasnip") -- for autocompletion + use("saadparwaiz1/cmp_luasnip") -- snippet autocompletion - -- managing & installing lsp servers, linters & formatters + -- managing & installing lsp servers, linters & formatters use{ "williamboman/mason.nvim", - config = function() - local mason = require'mason' - mason.setup() - end + config = function() require'mason'.setup() end } -- in charge of managing lsp servers, linters & formatters use{ "williamboman/mason-lspconfig.nvim", - config = function() - local mason_lspconfig = require'mason-lspconfig' - mason_lspconfig.setup({ - ensure_installed = { - 'cssls', - 'dockerls', - 'eslint', - 'html', - 'jsonls', - 'marksman', - 'psalm', - 'ruby_ls', - 'sqlls', - 'sumneko_lua', - 'tailwindcss', - 'tsserver', - } - }) - end + config = function() require'plugins.mason-lspconfig' end } -- bridges gap b/w mason & lspconfig -- configuring lsp servers diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua new file mode 100644 index 0000000..c349d38 --- /dev/null +++ b/lua/plugins/mason-lspconfig.lua @@ -0,0 +1,17 @@ +local mason_lspconfig = require'mason-lspconfig' +mason_lspconfig.setup({ + ensure_installed = { + 'cssls', + 'dockerls', + 'eslint', + 'html', + 'jsonls', + 'marksman', + 'psalm', + 'ruby_ls', + 'sqlls', + 'sumneko_lua', + 'tailwindcss', + 'tsserver', + } +}) diff --git a/lua/plugins/nvim-autopairs.lua b/lua/plugins/nvim-autopairs.lua new file mode 100644 index 0000000..8b0d9e6 --- /dev/null +++ b/lua/plugins/nvim-autopairs.lua @@ -0,0 +1,16 @@ +local autopairs = require'nvim-autopairs' + +-- configure autopairs +autopairs.setup({ + check_ts = true, -- enable treesitter + ts_config = { + lua = {"string"}, -- don't add pairs in lua string treesitter nodes + javascript = {"template_string"}, -- don't add pairs in javscript template_string treesitter nodes + }, +}) + +local cmp_autopairs = require'nvim-autopairs.completion.cmp' +local cmp = require'cmp' + +-- make autopairs and completion work together +cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done()) From 565f7404bf5b5f6ff4029e4157748813d37d9dbb Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Dec 2022 23:22:49 +0000 Subject: [PATCH 036/130] Nvim-lspconfig - Refactor config --- lua/plugins.lua | 135 +-------------------------------- lua/plugins/nvim-lspconfig.lua | 132 ++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+), 134 deletions(-) create mode 100644 lua/plugins/nvim-lspconfig.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index 7409eea..5375622 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -120,140 +120,7 @@ return require('packer').startup(function(use) -- configuring lsp servers use{ "neovim/nvim-lspconfig", - config = function() - local lspconfig = require'lspconfig' - local cmp_nvim_lsp = require'cmp_nvim_lsp' - local typescript = require'typescript' - - local keymap = vim.keymap -- for conciseness - - -- enable keybinds only for when lsp server available - local on_attach = function(client, bufnr) - -- keybind options - local opts = { noremap = true, silent = true, buffer = bufnr } - - -- set keybinds - keymap.set("n", "gf", "Lspsaga lsp_finder", opts) -- show definition, references - keymap.set("n", "gD", "lua vim.lsp.buf.declaration()", opts) -- got to declaration - keymap.set("n", "gd", "Lspsaga peek_definition", opts) -- see definition and make edits in window - keymap.set("n", "gi", "lua vim.lsp.buf.implementation()", opts) -- go to implementation - keymap.set("n", "ca", "Lspsaga code_action", opts) -- see available code actions - keymap.set("n", "rn", "Lspsaga rename", opts) -- smart rename - keymap.set("n", "D", "Lspsaga show_line_diagnostics", opts) -- show diagnostics for line - keymap.set("n", "d", "Lspsaga show_cursor_diagnostics", opts) -- show diagnostics for cursor - keymap.set("n", "[d", "Lspsaga diagnostic_jump_prev", opts) -- jump to previous diagnostic in buffer - keymap.set("n", "]d", "Lspsaga diagnostic_jump_next", opts) -- jump to next diagnostic in buffer - keymap.set("n", "K", "Lspsaga hover_doc", opts) -- show documentation for what is under cursor - keymap.set("n", "o", "LSoutlineToggle", opts) -- see outline on right hand side - - -- typescript specific keymaps (e.g. rename file and update imports) - if client.name == "tsserver" then - keymap.set("n", "rf", ":TypescriptRenameFile") -- rename file and update imports - keymap.set("n", "oi", ":TypescriptOrganizeImports") -- organize imports (not in youtube nvim video) - keymap.set("n", "ru", ":TypescriptRemoveUnused") -- remove unused variables (not in youtube nvim video) - end - end - - -- used to enable autocompletion (assign to every lsp server config) - local capabilities = cmp_nvim_lsp.default_capabilities() - - -- Change the Diagnostic symbols in the sign column (gutter) - -- (not in youtube nvim video) - local signs = { Error = " ", Warn = " ", Hint = "😒", Info = " " } - for type, icon in pairs(signs) do - local hl = "DiagnosticSign" .. type - vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) - end - - -- configure html server - lspconfig["html"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - - -- configure typescript server with plugin - typescript.setup({ - server = { - capabilities = capabilities, - on_attach = on_attach, - }, - }) - - -- configure css server - lspconfig["cssls"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - - -- configure tailwindcss server - lspconfig["tailwindcss"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - - -- configure lua server (with special settings) - lspconfig["sumneko_lua"].setup({ - capabilities = capabilities, - on_attach = on_attach, - settings = { -- custom settings for lua - Lua = { - -- make the language server recognize "vim" global - diagnostics = { - globals = { "vim" }, - }, - workspace = { - -- make language server aware of runtime files - library = { - [vim.fn.expand("$VIMRUNTIME/lua")] = true, - [vim.fn.stdpath("config") .. "/lua"] = true, - }, - }, - }, - }, - }) - - -- configure dockerls server - lspconfig["dockerls"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - - -- configure eslint server - lspconfig["eslint"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - - -- configure jsonls server - lspconfig["jsonls"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - - -- configure marksman server - lspconfig["marksman"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - - -- configure psalm server - lspconfig["psalm"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - - -- configure ruby_ls server - lspconfig["ruby_ls"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - - -- configure sqlls server - lspconfig["sqlls"].setup({ - capabilities = capabilities, - on_attach = on_attach, - }) - end + config = function() require'plugins.nvim-lspconfig' end } -- easily configure language servers use("hrsh7th/cmp-nvim-lsp") -- for autocompletion diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua new file mode 100644 index 0000000..54e5da7 --- /dev/null +++ b/lua/plugins/nvim-lspconfig.lua @@ -0,0 +1,132 @@ +local lspconfig = require'lspconfig' +local cmp_nvim_lsp = require'cmp_nvim_lsp' +local typescript = require'typescript' + +local keymap = vim.keymap -- for conciseness + +-- enable keybinds only for when lsp server available +local on_attach = function(client, bufnr) + -- keybind options + local opts = { noremap = true, silent = true, buffer = bufnr } + + -- set keybinds + keymap.set("n", "gf", "Lspsaga lsp_finder", opts) -- show definition, references + keymap.set("n", "gD", "lua vim.lsp.buf.declaration()", opts) -- got to declaration + keymap.set("n", "gd", "Lspsaga peek_definition", opts) -- see definition and make edits in window + keymap.set("n", "gi", "lua vim.lsp.buf.implementation()", opts) -- go to implementation + keymap.set("n", "ca", "Lspsaga code_action", opts) -- see available code actions + keymap.set("n", "rn", "Lspsaga rename", opts) -- smart rename + keymap.set("n", "D", "Lspsaga show_line_diagnostics", opts) -- show diagnostics for line + keymap.set("n", "d", "Lspsaga show_cursor_diagnostics", opts) -- show diagnostics for cursor + keymap.set("n", "[d", "Lspsaga diagnostic_jump_prev", opts) -- jump to previous diagnostic in buffer + keymap.set("n", "]d", "Lspsaga diagnostic_jump_next", opts) -- jump to next diagnostic in buffer + keymap.set("n", "K", "Lspsaga hover_doc", opts) -- show documentation for what is under cursor + keymap.set("n", "o", "LSoutlineToggle", opts) -- see outline on right hand side + + -- typescript specific keymaps (e.g. rename file and update imports) + if client.name == "tsserver" then + keymap.set("n", "rf", ":TypescriptRenameFile") -- rename file and update imports + keymap.set("n", "oi", ":TypescriptOrganizeImports") -- organize imports (not in youtube nvim video) + keymap.set("n", "ru", ":TypescriptRemoveUnused") -- remove unused variables (not in youtube nvim video) + end +end + +-- used to enable autocompletion (assign to every lsp server config) +local capabilities = cmp_nvim_lsp.default_capabilities() + +-- Change the Diagnostic symbols in the sign column (gutter) +-- (not in youtube nvim video) +local signs = { Error = " ", Warn = " ", Hint = "😒", Info = " " } +for type, icon in pairs(signs) do + local hl = "DiagnosticSign" .. type + vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) +end + +-- configure html server +lspconfig["html"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- configure typescript server with plugin +typescript.setup({ + server = { + capabilities = capabilities, + on_attach = on_attach, + }, +}) + +-- configure css server +lspconfig["cssls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- configure tailwindcss server +lspconfig["tailwindcss"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- configure lua server (with special settings) +lspconfig["sumneko_lua"].setup({ + capabilities = capabilities, + on_attach = on_attach, + settings = { -- custom settings for lua + Lua = { + -- make the language server recognize "vim" global + diagnostics = { + globals = { "vim" }, + }, + workspace = { + -- make language server aware of runtime files + library = { + [vim.fn.expand("$VIMRUNTIME/lua")] = true, + [vim.fn.stdpath("config") .. "/lua"] = true, + }, + }, + }, + }, +}) + +-- configure dockerls server +lspconfig["dockerls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- configure eslint server +lspconfig["eslint"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- configure jsonls server +lspconfig["jsonls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- configure marksman server +lspconfig["marksman"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- configure psalm server +lspconfig["psalm"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- configure ruby_ls server +lspconfig["ruby_ls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- configure sqlls server +lspconfig["sqlls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) From 1b7f5460e340fbb9164712dedf807b9d426aaf37 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Dec 2022 23:22:49 +0000 Subject: [PATCH 037/130] Lspsaga-nvim - Refactor config --- lua/plugins.lua | 18 +----------------- lua/plugins/lspsaga-nvim.lua | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 17 deletions(-) create mode 100644 lua/plugins/lspsaga-nvim.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index 5375622..d7bdef1 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -128,23 +128,7 @@ return require('packer').startup(function(use) use{ "glepnir/lspsaga.nvim", branch = "main", - config = function() - local saga = require'lspsaga' - - saga.init_lsp_saga({ - -- keybinds for navigation in lspsaga window - move_in_saga = { prev = "", next = "" }, - -- use enter to open file with finder - finder_action_keys = { - open = "", - }, - -- use enter to open file with definition preview - definition_action_keys = { - edit = "", - } - }) - - end + config = function() require'plugins.lspsaga-nvim' end } -- enhanced lsp uis use("jose-elias-alvarez/typescript.nvim") -- additional functionality for typescript server (e.g. rename file & update imports) diff --git a/lua/plugins/lspsaga-nvim.lua b/lua/plugins/lspsaga-nvim.lua new file mode 100644 index 0000000..a9873fa --- /dev/null +++ b/lua/plugins/lspsaga-nvim.lua @@ -0,0 +1,14 @@ +local saga = require'lspsaga' + +saga.init_lsp_saga({ + -- keybinds for navigation in lspsaga window + move_in_saga = { prev = "", next = "" }, + -- use enter to open file with finder + finder_action_keys = { + open = "", + }, + -- use enter to open file with definition preview + definition_action_keys = { + edit = "", + } +}) From c9d752b9effa29e6c01b7da09ecbb949cf3d9824 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Dec 2022 23:36:52 +0000 Subject: [PATCH 038/130] Gitsigns - Refactor config --- lua/plugins.lua | 40 +--------------------------------------- lua/plugins/gitsigns.lua | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 39 deletions(-) create mode 100644 lua/plugins/gitsigns.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index d7bdef1..09be2d3 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -145,45 +145,7 @@ return require('packer').startup(function(use) use { 'lewis6991/gitsigns.nvim', - config = function() - require('gitsigns').setup { - signs = { - delete = { hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' } - }, - on_attach = function(bufnr) - local gs = package.loaded.gitsigns - - local function map(mode, l, r, opts) - opts = opts or {} - opts.buffer = bufnr - vim.keymap.set(mode, l, r, opts) - end - - -- Couldn’t move those in mappin.lua - -- Navigation - map('n', ']c', function() - if vim.wo.diff then return ']c' end - vim.schedule(function() gs.next_hunk() end) - return '' - end, {expr=true}) - - map('n', '[c', function() - if vim.wo.diff then return '[c' end - vim.schedule(function() gs.prev_hunk() end) - return '' - end, {expr=true}) - - -- Actions - map({'n', 'v'}, 'hs', ':Gitsigns stage_hunk') - map({'n', 'v'}, 'hr', ':Gitsigns reset_hunk') - map('n', 'hu', gs.undo_stage_hunk) - map('n', 'hp', gs.preview_hunk) - map('n', 'hb', function() gs.blame_line{full=true} end) - map('n', 'tb', gs.toggle_current_line_blame) - map('n', 'hd', gs.diffthis) - end - } - end + config = function() require'plugins.gitsigns' end } use("christoomey/vim-tmux-navigator") -- tmux & split window navigation diff --git a/lua/plugins/gitsigns.lua b/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..ce9c2be --- /dev/null +++ b/lua/plugins/gitsigns.lua @@ -0,0 +1,36 @@ +require('gitsigns').setup { + signs = { + delete = { hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' } + }, + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Navigation + map('n', ']c', function() + if vim.wo.diff then return ']c' end + vim.schedule(function() gs.next_hunk() end) + return '' + end, {expr=true}) + + map('n', '[c', function() + if vim.wo.diff then return '[c' end + vim.schedule(function() gs.prev_hunk() end) + return '' + end, {expr=true}) + + -- Actions + map({'n', 'v'}, 'hs', ':Gitsigns stage_hunk') + map({'n', 'v'}, 'hr', ':Gitsigns reset_hunk') + map('n', 'hu', gs.undo_stage_hunk) + map('n', 'hp', gs.preview_hunk) + map('n', 'hb', function() gs.blame_line{full=true} end) + map('n', 'tb', gs.toggle_current_line_blame) + map('n', 'hd', gs.diffthis) + end +} From 50db5c1874eb58de8fc729c1ed665bb957ef4514 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 23 Dec 2022 00:23:40 +0000 Subject: [PATCH 039/130] Gitsigns - Refactor & enable blame line --- lua/plugins/gitsigns.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lua/plugins/gitsigns.lua b/lua/plugins/gitsigns.lua index ce9c2be..2e922b2 100644 --- a/lua/plugins/gitsigns.lua +++ b/lua/plugins/gitsigns.lua @@ -1,7 +1,13 @@ require('gitsigns').setup { signs = { - delete = { hl = 'GitSignsDelete', text = '-', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' } + delete = { + hl = 'GitSignsDelete', + text = '-', + numhl='GitSignsDeleteNr', + linehl='GitSignsDeleteLn' + } }, + current_line_blame = true, on_attach = function(bufnr) local gs = package.loaded.gitsigns From ce01296b22336c810f81ed762e8f8fa4f1f608c1 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 23 Dec 2022 00:24:55 +0000 Subject: [PATCH 040/130] README - Add commands for gitsigns --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 6d6ee22..38b4a6d 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,18 @@ and some plugin need **0.7** version. - `t` to switch dark|light theme +### GitSigns + +- `]c` next hunk +- `[c` next hunk +- `hs` stage hunk +- `hr` reset hunk +- `hu` undo hunk +- `hp` preview hunk +- `hb` preview hunk in popup +- `tb` preview hunk in line +- `hd` diff current file + ## Some resources - https://teukka.tech/luanvim.html - https://github.com/nanotee/nvim-lua-guide From 46d8fb757dfa658efa0cb4200a5f4d2f1de81fb2 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 23 Dec 2022 00:29:00 +0000 Subject: [PATCH 041/130] README & Goyo - Add command for new map toggling Goyo --- README.md | 3 +++ lua/mapping.lua | 3 +++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 38b4a6d..b15ea83 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ and some plugin need **0.7** version. ## Commands +### Visual - `t` to switch dark|light theme +- `g` toggle goyo view mode ### GitSigns @@ -20,6 +22,7 @@ and some plugin need **0.7** version. - `tb` preview hunk in line - `hd` diff current file + ## Some resources - https://teukka.tech/luanvim.html - https://github.com/nanotee/nvim-lua-guide diff --git a/lua/mapping.lua b/lua/mapping.lua index 9455c6a..1c86ed9 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -14,6 +14,9 @@ map('n', 'q', ":qa", noremap) map('n', '', ':e!', noremap) map('n', 'e', ':NvimTreeToggle', noremap) +-- Goyo +map('n', 'g', ":Goyo ", noremap) + -- Telescope map('n', 'ff', ":Telescope find_files prompt_prefix= 🔍  find_command=rg,--ignore,--hidden,--files ", noremap) map('n', 'fg', ":Telescope git_files prompt_prefix=  ", noremap) From 82d062dc34efbd0904b5284bac53bc166002faf8 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 23 Dec 2022 00:29:00 +0000 Subject: [PATCH 042/130] README - Add commands --- README.md | 12 ++++++++++++ lua/mapping.lua | 3 +-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b15ea83..206c983 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,14 @@ and some plugin need **0.7** version. ## Commands +### General +- `+` Increase first number in line after the cursor +- `-` Decrease first number in line after the cursor +- `w` Close buffer +- `q` Quit all +- `` Refresh buffer +- `e` Refresh buffer + ### Visual - `t` to switch dark|light theme - `g` toggle goyo view mode @@ -22,6 +30,10 @@ and some plugin need **0.7** version. - `tb` preview hunk in line - `hd` diff current file +### Telescope +- `ff` find file +- `fg` find file with git +- `ft` find file with tag ## Some resources - https://teukka.tech/luanvim.html diff --git a/lua/mapping.lua b/lua/mapping.lua index 1c86ed9..4ebcaed 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -4,7 +4,6 @@ local map = vim.api.nvim_set_keymap local noremap = {noremap = true} -- general -map('n', 'x', '"_x', noremap) map('n', '+', '', noremap) map('n', '-', '', noremap) @@ -12,7 +11,7 @@ map('n', 'w', ":q", noremap) map('n', 'q', ":qa", noremap) map('n', '', ':e!', noremap) -map('n', 'e', ':NvimTreeToggle', noremap) +map('n', 'e', ':NvimTreeToggle', noremap) -- Goyo map('n', 'g', ":Goyo ", noremap) From 472a11ab3772afc847339f2d891782b8a1ed0ea0 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 23 Dec 2022 00:47:56 +0000 Subject: [PATCH 043/130] README - Add commands --- README.md | 48 ++++++++++++++++++++++++++++++---- lua/mapping.lua | 1 + lua/plugins/barbar.lua | 22 ---------------- lua/plugins/nvim-lspconfig.lua | 2 +- 4 files changed, 45 insertions(+), 28 deletions(-) delete mode 100644 lua/plugins/barbar.lua diff --git a/README.md b/README.md index 206c983..6b1d102 100644 --- a/README.md +++ b/README.md @@ -7,14 +7,17 @@ and some plugin need **0.7** version. ## Commands ### General -- `+` Increase first number in line after the cursor -- `-` Decrease first number in line after the cursor -- `w` Close buffer -- `q` Quit all + +- `+` increase first number in line after the cursor +- `-` decrease first number in line after the cursor +- `o` close other splits +- `w` close buffer +- `q` quit all - `` Refresh buffer -- `e` Refresh buffer +- `e` refresh buffer ### Visual + - `t` to switch dark|light theme - `g` toggle goyo view mode @@ -31,24 +34,58 @@ and some plugin need **0.7** version. - `hd` diff current file ### Telescope + - `ff` find file - `fg` find file with git - `ft` find file with tag +### Saga + +- `` & `` to move + +### Completion + +- `` to choose selected suggestion + +### Lspsaga + +- `gf` show definition +- `gD` got to declaration +- `gd` see definition +- `gi` go to implementation +- `ca` see available code actions +- `rn` smart rename +- `D` show diagnostics +- `[d` go to next dianostic +- `]d` go to previous dianostic +- `K` show documentation +- `s` show structure + +#### Typescript specific + +- `rf` rename file & update imports +- `oi` organize imports +- `ru` remove unused variables + ## Some resources + - https://teukka.tech/luanvim.html - https://github.com/nanotee/nvim-lua-guide - https://medium.com/linux-with-michael/a-list-of-all-my-main-neovim-plugins-8ac4ae107e16 - https://vonheikemen.github.io/devlog/tools/build-your-first-lua-config-for-neovim/ ## Satisfying (trying) checkhealth + To check run `:checkhealth` in neovim - Check latest version of `pynvim` is installed (via pip) - Check npm neovim is installed, but still no enough ## Plugins + ### Plugin manager: Packer + ### For the first use + [source](https://github.com/wbthomason/packer.nvim#quickstart) @@ -130,6 +167,7 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ ## External dependencies + - `ripgrep` - `fd-find` - `python3` diff --git a/lua/mapping.lua b/lua/mapping.lua index 4ebcaed..b8cd3d6 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -7,6 +7,7 @@ local noremap = {noremap = true} map('n', '+', '', noremap) map('n', '-', '', noremap) +map('n', 'o', ":on", noremap) map('n', 'w', ":q", noremap) map('n', 'q', ":qa", noremap) diff --git a/lua/plugins/barbar.lua b/lua/plugins/barbar.lua deleted file mode 100644 index c64c84a..0000000 --- a/lua/plugins/barbar.lua +++ /dev/null @@ -1,22 +0,0 @@ -require('bufferline').setup { - tabpages = false -} - --- to shift tabs when nerdtree is open -vim.api.nvim_create_autocmd('BufWinEnter', { - pattern = '*', - callback = function() - if vim.bo.filetype == 'NvimTree' then - require'bufferline.state'.set_offset(31, 'FileTree') - end - end -}) - -vim.api.nvim_create_autocmd('BufWinLeave', { - pattern = '*', - callback = function() - if vim.fn.expand(''):match('NvimTree') then - require'bufferline.state'.set_offset(0) - end - end -}) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 54e5da7..d298cdf 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -21,7 +21,7 @@ local on_attach = function(client, bufnr) keymap.set("n", "[d", "Lspsaga diagnostic_jump_prev", opts) -- jump to previous diagnostic in buffer keymap.set("n", "]d", "Lspsaga diagnostic_jump_next", opts) -- jump to next diagnostic in buffer keymap.set("n", "K", "Lspsaga hover_doc", opts) -- show documentation for what is under cursor - keymap.set("n", "o", "LSoutlineToggle", opts) -- see outline on right hand side + keymap.set("n", "s", "LSoutlineToggle", opts) -- see outline on right hand side -- typescript specific keymaps (e.g. rename file and update imports) if client.name == "tsserver" then From 8f225ff023bf83fc3ac54d27c23ab5d440b439ec Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 23 Dec 2022 00:55:06 +0000 Subject: [PATCH 044/130] README - Add screeshot --- README.md | 2 ++ screenshot.png | Bin 0 -> 118707 bytes 2 files changed, 2 insertions(+) create mode 100644 screenshot.png diff --git a/README.md b/README.md index 6b1d102..8e23324 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # nvim +![screenshot](./screenshot.png) + ## Notes Neovim must be above **0.5** to work well with lua config, and some plugin need **0.7** version. diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..bea8099d56bd17b6ceb00e960d8f5d9ba7ccdb81 GIT binary patch literal 118707 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 WSc=&FIteD=t1U< zvEwte?b(3{$biW8%9KB79`M6f@Kqw}X7Qqw38?lBbHR(-OHOh4(7)?MhjrxA;)%Zs zQIavc>3^a#qIjMTQ^V{T;(kw_N4;9z{2o#gOjf*dSnwhyE}tk;WiKN8b=0AUO4y;b zWO|)kt$Y{+GN=`r$F;uGiM-`1E(2*%-hAwK{PD1Lef0f}-M0pQOU}FQ0EGi3b#(ZW z;#J=eAaPL(;+z%Hw1d)TE0W*3ZK)Cz!@~{l?nZmz3?`JX@p^M7m>e4(lBvcngujRA zzpu3y%YuBQ1mWG|2v^X*bz_g+bn%AS>$9aCWjbWvJ=|KgF+Z_2f5|8OKXp#_jA^vi zRstO(heroM0A>8;PI%>Ee;+}3P>T&t4guL3Q*Jz8 z(+KRoGH^`^;r$)n_J&^_W)h`BHYE}f~Hg#ajZPa7F)4`$=-V9Blo+?S$F1!dhM9%z~{ zpP<=&ykrJs6-1GbF{lUoPS+Xju^V9KhKg_)Ci&0Q&sJp)J z-k;UCkHee7Sbq1F&UPyg@|<+W>_nMqch^IC%+P1qUUF+SohQ)~v=)@R0*?7!sW4xp zklV4Zkw1%vRDe(b3>SxxRWSKUk6m4DTxJ}17Gu7AExyK98*7kNM^z2y8;q=){2IRBji|Tqb1}z#6m7^R;&B*P zes-99z5T?|`hm_PC~u2iZbwpxiroVzXD83U7X-b&cLFdXYH?BUeB1h(jGMPYpseLT z$?!FfM%D4PleIW$Rs6PJTWC<+ZO@iuaU7PU_di5;o~p7k8tgkMX**&io5d?XuJ!Yv zo1X#Ca_9p6Re1-8$cS#}F}1ljiPu5y=G9cR(roZf@Y z7H>1X$>*i>WLfr6obnRnm8hn+v+h2S)!JCmghe&bBii3)@Dk`&S;jR~yIJU$4Z+a< z$q1O-!Q%I;rgimxML?^L9WV+hpXh)TF#aWWoqKF63n1N2gBTj0w&5dlOj{)gPyVl9iO@AiyG$Vv=A(D&Xzp3ljlHVN^=XSW$XEypLRR+Uimq}Uj3_28ZJL+UA-LPh5X}w_N?1%q ziC|YmNoPgK#b8hidefgYUxl$_^4yPQyzq&PTPn#Q%eu-_QTWsNok3V&lw@W9*c>Z| zZdIIZZ`#&J;e2(GPpW~fE!1=jFaQV7{Tx3|6|D!tVjaAN3{u^yEL`m~C~n$q!;Xjn z)+-}0XGNWCP8!XOgNg-f@LS1L@JbM~)CW4z`+R^x*OqibNxg(gHwS){5G`LCDP|e$ zVf>Vo*mzfg+t|lurHVwyp+Dhobp8Q@r>Dae%^MCAUml&=W#0Um8X6J68lmab$5AfIS{sYEFL&;*Bd+0RAF7;u<98;LW?!;g4CN@;jAtB?`Qy0PImGg7f(Na(W*Zc zd@oVVz%h7TqPhJr{bL*u^e`Mi%_FHwE92dL{ z$XWZ4C>8dB>gDkE8OrKu=A}dWei)QP2=Vztj}`!5Cf5)VJjl*oi05or<7LRq|Kzcp zBmW3oTe^(6Jck0r;hnCwZU%77HCR$&eIW3-Ja+2Q3}fLxPm6ZNX*y>@0>S}^WeK^j znn2{_{nel?ZJ=6N!@fx%)6*u=1Xfiq$N#%gwS)Z*m4%a!d9AjgYn^{fo933Ka9|ZL zDvm8=DS2WgGYbD&jJNXunfwi`nMbkhjBmRh1trtB7GHGuiFUEnxH&>+>%}rvG@vIX zL*r4c01nT}_w`2tuG_7SaVLneyv^c+tn?Kq7+m;YoqK}uBA*jk)m=kV(?Jgj?+wVy ztZI&a3VFMqt&WgQjjZWP;|5zSKK`a^uC#M`5QW$sugpL3=Gy^hQgTJwEl&#DZ6h@M z;L^@Sl+^5o+MYv{^MVPGInpAv8d%+LRt6{?FOLlVM{FMh;9tjK>sdW!pge8O1Kh#! zwlXh#^s)(kWq2C!mhQ!wl}NbmyXlHTAU3TH1=qg{cTL;NV>1tqdAwNpZl7)aO>QDI z)OA6wmG#dQCvB*rN0reNwq+HnXEWb>COY_jUU*2)CW{ju|Ll}38l(y#i_BE{19}5l zO+G>-Q~(GGkf~HQrM5JBF>0;#4v^a?6o4H$cj!zmkD)rpgF{EN{cimQzq(-6_EuGY zM0#;~g2UEk0{PL~aha)v=UBT#1@GmEMm`*y$iZew=E`Tf0Onvm6WDIB3mDV3-M5Yh;)j>Nta@7XD&oSMy; zARvhWEuHe7+d)?SZ|H2IfL!mwUn)b`{(Y*FU&&`|*5=(eSAVmKZ~eA@s)OM%rHpP% z{>^#Xc@z;fgtftUE+fI-P!8@U!z;=LdeCNkdOWlT7aaxrdK}Niz5@u6Fun0lB;XN1 z=ac3nSTxmEc{5Y(wTGo{;(OWJ6!Pxr)Qih|r)zbi?YCrdMG6$NSe+s)lE?_VlmjP< ziFVm_FP84+cAO*I*WHB5C$GMR z=WD;{J(}WEN9)cM0zcPoqD@Pn-hyc`TmTeC1SA8I-aF=E^>76L|Eu>jJf%P$x9C3q z7p>;|-0caN3ad*hEtRJ|Uj3-^hn5={?V+HA_AS(;?t~&%qaTG^Q=%(O|1dVNky)Qs zct7mwYI71vK<5w)`4^rCAW3f@*Q6N6kE=A56t;xxlH5$~FAlwsuLzuk^1Ymj;QPNJ zVf+s{q@s+K4U#&_JOZsWP~1NZt&cFl>(uIp9j%Wi&3D#kjgTadt#r0XJ6w#RP4uhq zp03>`h1BYMttU`>tvhCbHts{GUS{@MW(t>mS~D>GYmiBt%S!Db{U+o8fi()2ZiA{9 zid+{O>v`c6NHQ3dlG{Hwp=8Jumh}UJ<{P5!veOPv(BA+G3%f&p2;usxwz`f4GDRY1 zVgOjD+PZJJR9$7gY3ahCvhEKCc|)K9{s$tDa1lDtfO-`A?F(WGcuD=u;hk^c=a*rh z6tORIbwADb(3Y+JenEa&goXnsiAR!^(M)6<% zDZzS(K>y;syM1QClJ*wBf;n-S7&A~iC8{pJ&USc-Qc(vRVMt`O+@Lq(cC{Z72o0Zi zo?rP?@&G}E&b`w--vG8PF*4GI5~I+)d304uRHgG54V$}Uq{>l|WC_7lkpP(s97Te> zU(~v{mZ+VChd`wtfH=Rs(U-bqgUA>$oDoW!^ON(40X9^@JN>j$(4vTM<(NU*W{cy% zZOc&>81)}yra|E|dco`6)Zbpp#_#NuXDd&^{c{;TE&>Jx9Ck3Y#v{xdqY}=q zFRNunZ{7fuwjjt^C?ud8s`u?%2SZla>Q9aE`Q)RSFH^imH~|0IFWzfN+%OPjjr;I{ z3$1Iv0Ov=742`Rbf?gq>%&n5d7)rDca%zUI9NcI=8z90MMgKvIED!w<;We(7v!~UF zn=*T!6_2EACW}4CP~ThAh})9|zv-kx!1qq&if6+u&i30Vm9)!b4m;b2m!($Fet+ea z;Ms-`91bz7Aae+*rl?w_T9RQ2x->%+`AUUrjG5=xg%u-Ec1?S>W)6QHVa!YFl2c<0 z|6b(Unr-Wf)paC;o7Jl1VQ#XNWzaBpEfiZEtpDJ7L93s?>buW;wHnZBkG_789pY*G zPY^0-tDPyZ1P+?g(2T8HzfDP>96}M$rRUs8p4ZgTWG!u4S)JI>sZVSwONW(A z-Q#5Mh0zY}M#s%RxUGHerN!1{VfQh*5GhenUv>W4M>!tDR1Q_rrIgH)aRLy{MOSHd z$o@?8tF|{+Y|JV=H7dS~3co|7gM6R&Hf>fxi?{2|!EjC03j;hQ_7cEY#xBgqZ1%^hOy0>nA`+Br%H?Wl*81qF~4TCz%MBIYt#!A1U5Zl~hMpa(6BCq7LKSrezxFAGTe z4*9(;yk5Ms$9*PNdkqwjEN4}`H0&R??=(3{qVe|7KZBCacLQ7$)2-E&1Xxo{8X;V+!J?L&7No5F`zjK~r% zxUZsSb&X>&>gD7X&K-C_R!S}ofs?nnr8?vNrb5A+a;+Ae8M=3sMUenO6G^DgQ~>j} z3Sks?&6X0cpY&eqEECn4li*f7Ph-`}Vn@l3Xh|N>fZ|d>QRl(4X5ZL?SHipKBr7(9 z7RRqD!m1eK9Zq}7;Hw|0X}peiSAE)T#A>oI6YUsnU+O)?IT1RmCybtd|LPi*%4%TV zPVUvnHaTvO@huQfGSN&dsMU~}2V&pv3aA^ECHW=54#1b+r|Ek=TZm#%l&HjoFRk9e z@7U8LAGYYzLgd1-Q=afjHG{P58dwN?$J= z^TH|Lq+0jo^szfi$vvY_ZIHq^H=Oj1-R#F=#!QEDIYmph1qvtD0!J|p7#;c_CV(&e z3>8wFDN&$Jhrq;_OUs)vPl)C8JN(DT**_)D=(&~a6f@G9eMXd!!lH0)3td?J zb#CoRQvJI|HZh=xTZaXIwq)pQ^@K;=L zAjD<;^v#$IxL5`uyU`V6w-(jN5n79wH>(H`E(2|rE3Eh(Cyb>9ib2ZKJL&rigZ6bV z5D*KW0JGDsf4G?6`;{cfssYJ+isI4m_*d)w65F=Z3wM*>iqmPvE2UTO{yQ}_W_@l|zR+0xr-v?~IXPAr@h%cC>SYutDXy%>>6$#YXjeBhZF` z&Lh2&#R0ZQFZ1p5@gF$*@O;$3C7anIjldO?kmiza^k^A=-|5hHj>&|3R%8`eGF)QQ zGLhm3h+YDN&M9|Tor=bDp4nSsM;8)}u6~}NWR0#C69NR2R43t}J`hWJgM&Azruzcn zrhXrdU-=sM0MGr_v4z=4<3llya zo5cm;44ULvIkrip^sC$M(e7-pQ=Ff3?;ziTBE6Y8)5%W9Pg6qXh+cY1*tq0eid$H0 zjV{d!@BBLKwhu$<9I|fJvyrizOT=zJL69deLFJrj5-cZ*`NNz0Hp14A7d2_Wy+xq` z1*vqbm`$B?dzLKI*6uus%_Sx++FxokL>wB@M6~e7b|MQaQ}_bGSp-kkrzv?`Aaruo zF+JMSwVSR5z9%mPW?bHzES1kt#F=26A_saPo9r6^x+MGZ`^K^^G7}tZu#v49E4PEk z{htCQ#t$|*w>HlhZhLBh3YFxQvA^)-c2j0@+Hr_@W7FG-ac}M(wBWb)*m;DLr|%sp z_2u@YN_1$_7%1v?j;OpX40y%gKR6~3$t{d`NydF!ZZ(?0i@80ynEpUS_;~XZ;val} z#?fpi9>eB*t#F;)BUO@X=j9>D?a9Ky%Yil3n!U<@bwSo1Q~x23jq2s$w|4;4pcyMo*5joAEVUxkl&X^~qhT%aE8XzHCi= zeM8O0M#R&Vwu3l1zcRUKs@=jZoW3RS>~3Dxn+zVeXD_P!Xj?a5SGk3D6Fj!_n4Byi zJEw!GE2GK&;!05tZj73ItA0V&G&&t`Z zPX;GK>wWLy&@H7C*YhB@71)S?lbhRxy*4%a5;CyyKP6%AC+ZPe;W2xW!oodXT(*nH z9O&KZzzjLes@tB62@Hmrhr95TNMm){m))st8FoV(FB8z2Rg5#D_HYrB{xiFdBKv^N zpJkbTNK62oJQCj&&AXyYPO5f$Z%%h@r)UVjg`}}A;(FpCN6Y`|7H_e`2VA0DbogCX z96Pzx>Pf5VQ}&~i+eJ*3UU6Z}ulnbkNjZz%H9L#-9+M~YQB~CBypeIu&bP_4Bix*) zYfVe>I7IC{9C(pf=)WtTZ=z2Fx{%gZr;vde*38I@B5l`kRWLsUTD?oB(&~{p2dzxx=g1+iqn-Vf z*@~Xg?s>4hdRWJGyZk(N(X((!cAElvhKtsQR82X2KP)!Z$Pj)uy|ATpCSYM}MW>K< zhGsr_807iEo~ zOgK%wy$=FU{cS|dqfO?j7$Ie1`T4{keX3mL*EA%U)9pAK!pXyW`v7o9Ve;QANc0 z*-Q;!e3rNsL!?;gCUO=rVpS6GS6zO`6f#{G3-)vqd`+q}*kWW7w0S8M0{}>qWSgA0 zdE0skeJBpluiX&GF;3kOZky&CU%6=f$N0QA;I@XMJB_(@ zo%)~X0J}z(>Lv{iJ=LJ^SZI36eDKcf&#pLolgCPiV$hA|uD?}mMA1{5`b$HI)CX$D z*F3%}@i~ev$iXI zvwtRK(mL5D967(?vu2zopRj9gtYDGa?*Er;=?3@Vm=xQb8;*^cd5SPsgpvIac6I!Z z2>%er;a`$3h{0sxZ$+C6)sDJ9mMgWBQ>AQ61>7f_Z|Ka`$F~>`%3;;#tJggVZ~Xfj zo(oNRe%-&Xz$XgkQJqleA!ilKklF0NvN(O^UDyU+I;U0%r&AZ{xIxxFo@v2DVQ+rB zLhS!j4*qMw*wufTQhpCf{^u{Jr$YqQlOU1AzXfT~%S#3j{XcW_PT6qdP`{7j(R;5L z9af7k#`pL6j-##JLf@irQ~Fm#5iTS4s*W=d1^D8vnBv2qRrdKP#wv4B)+;#E{Gy@) zNt@SX?+B0GFfvks{~xQ_(};UYOb;tI6GuB>%g`^4eE!4mpS%>}o7hT*{{hEeGb#SV z%u`}mKr*-U)LO*;4(eyhS1p~}XZJ2CRov<}PJ$@l2`+C!_LP)h9)$RD;#GJicrHUDt2#p*+GYtBuY?;qS8 z;VgE0<6+G9f~oQbMYP~@24V!tO)yCLLbzuP40UILFCW31V}J6C!JC8k22$z_;P^b| z4~X^J)U2~yr(Ek-Rt~gSM2kJTJAPYr=MyT^U=QUInLDgKsb5@X*N{ijcxTATtQRiC z?|udC%4+3KQQtS7{B;>4a(b&gMe*JId5frUdY!6Hz3t|lfrUt1>2zP3<>O#`2n^z~ zeKpj&-q0tG*iD)%QgE%CgGiQOM3h9^c&OUe;53>~1iJ5zu~3@y6o?DC!F~sZZ@*+e zIlbda9H-u)Wz@GhIt{mS^$s~Za~OWE=@MQ{?(Fk|V|l}l6j<+rjG<5ECahRy z>UnTs7jw~>*=!HVhzzgjbLB0D4f%A3IpAc1VzsU<=`KuL+Iaja{9<1h5qP7xD-VLM zLtuONmKaf<#=p-i7h1IR(wSALV*G9#E1Ke*$7|t36)>#={80)&Zm*reJy~u|O^bJ| zENp?*hWeS_1LUIG)v-4eS_siUBhinJF3M;Cj;5#APW#8;vqbxgonnG8d_)zP+}IIs zp9VkwqLI?V9$yeb{~=8Khi+mW&avM_-!s@F+!+NR@je5Nkl$W=;nmm6->|1bnKh1k z;8g;3{E?zAD}L*phunc+rnhlT&X*M4x^2v*sD}|ypEy*uR^@yY+*%&rmp6Xk*j!n3 zN)visW;*Xc6J@S;q-(HGiwK1L5s1 zT?{}6Lh}HAp_<&)@ns&Ut=#JA4(kk0MzIs}e9x1a z5#W-KB2Q}!5?(B~xk#Golb~g@dA@P%Q!wTmfsbr7CrnS8LmOu1ehgVgN-T{+;2q`y zFZ}P7CTbSp5656@_{TjdtKGC@Q}np=kR`J&&A6J;2H0WTX)rz8aL|5rhVa$4nUfK7 zVDa^3Ul`Vu^@>;`xX#HRR-G|_jbq4Q96(hLKj@x5pY*tX2v=EADkhRONn4r!B~!~3 zt&}db=3~bJ+tr8EV4$kz?_m`f3??dewO^U3Fmhf^Ohk^io!=TEh)L@4emfA4JN4uk z*!9o7BQozRMEhA(O$_hx*YB1>*Vx%cbUYn=VnpG~C~z0>ao708B@rhqlhWAb;HfPk zK!R~tyQ~top6cF>3!&Q|#pf9&gd@QnUfdPpytV=>@m|dU00v7o+3RP|>hB9#2Fo%H z8&*i+y?p`o-0;(ZSbF)WLf0V}y=P*8|4EAn95_*;ZQgD(TUy^vb{%WgDnS-o$_v3P zUxe?nIhkE7d3Nazj5j%LZyU+M4-QG61HKHD;2PbmHb&VWLfhA?t!u=+>6^xz|7-FR zro?9Pch0y5PEBMWGahf`70z?^rm=w+9$r5$6zyhux_PrB-UiXKNI)C6G=AV)mWgGG zCX>Q{3cyaKmM(wR`tjY3v?~=bbj+1mO2e0_WV{a!RmO(gTcK1+V}0x-fP0xX zpa8z!8Lg!nJV!zYFjPm13-Id#0`t5Iz~=o0^b;Yqv`Mjl3JzSS6%_cjwB`;y8%W6; z-e+a0YBA~yPuwT)d0T}FYD(u3<4kirst?rIx36$JgH~eRub@9{F$digZ^Tjcjw&&| zAaP2rAc_C%AuTbsr%0}?3N-|wRH_KZ!v#y!3n>7+P4>5fxK9?M5mct9ZL`{i>zKJW?&iZMR{^xw|ePy)P~ z-({t$u$4uZ%-bZnrC_53s&T5vGXje8?ZbaX+v)%S9QBvjCAChFvH_-nl*kZRoX1o+ zv-hCTf_~nK&Z8xs!lYLDnQrUU4`Z(GZ)()qy1-k#M`_-z!)f`RIe7Q+m5)7nj#+U( zhpD5pa+M?;Sg)RIRQ_0_){1=v(c7P))CQI$BgBO02<2D41Isk*V9(Sm;hZ0;X^@9R zG`88P5i0JLh+E?-HYjGIxe3i+Ca}0!y2Xu^4H;nm(eoNDD*vRucuwkW$}JBhSNU$L z?~M~hEZHLK8+MTK&70cW*ghOIQlnQ_)=h0^Jc;i#Sr|8ed?T+6*mf}SPO82ZyGx|h zOtSotG-$>tXq+%Jz8M~tij(QX?A2*=9%E19Z<^Kj&>0j=iqY{Ai@|O^l76NsFAN=x zGB3Ze|7<#svf6(4+=32Q5#lH}MQrWrBP48~&2HIB@kn#$=v(hXX3FB{B!ZyypMOZ) zXl#El;i=v_dwHeuCq*v6C(;BA6+;QTx;5@cW;>p+P{XR z?$03h_VVNsJHO>c)yF^ACFpf(%GHFK*M-~9JMQB>1f3{G%T>&TB`7m6hr`vKNmsP1 zvXLP_vX3)kbp1644j`NAv`s)m=){AMKTY(m9RKDiKhAlWRlb{)ax4F1JwGP%HW^r6 zo_MghRJP5d$(c7>JwGTqj0+W`q%1II`om>%$`MQ#LtfHckxD0(Gp&06m6ZXfA(2ju ztWrEKVAmo`=GN}+7k`^)ju=K&?^*p_;mSl>S19vuRFd`0TWO=6dn(I~^xhL$6fRmerI(HhA_LtJx~pq7wm`%Z#7(s-@JrQ6 z8|ozfQB6IudkFw!%Wd+q7uzKaGTDM1msDdgLgOI5i=uUFGrMxSEVYOCek#LqPb-;1 zjkbF|cyB8dgGT++<6#^pE;KH_8fHsd4(#B5@yxsVl)Gv3XboM|j8|3JqsmGODvkky zo=09S-QSlM(S$c9#{4}V2bJD^2=6@L+fy&=Jgn(j+Q{n$JCXQP8;X3#!ya9Z<`eX8 zltKzbz$*u*pwejx<{!epLxb5bll>o-cWJp@BR2--(a#%Mvs5|v)~0NDvk_vcty!9KQolAnD@!?Z-brPsFk^+nd&m!3^7vkA^hD3R z`k{%Ks66Lkr~9)ET&_mZ9u{4p_^mb;3)_ibvd4Z_k}ZXK-j~AfxmNX!hXdKcrp+(= zHIr4g?xFht-}$~ueBQm8Id*I9it8=g=~CW`Jl@$-MHOY@D@WK2>&29b)&|StlQgR5 z6@L32grQ$k1;sSAI&H>lzs@iq7|P>*)~%V7on#c0(zKk$s(?T+sD&?bX0vUyn7K!d zjQ(NelYHKf3!yAfSFLNZWGmj|GT1eyb?af(o=Xdh2y3zJ_sVq>&?``>g$i_>8-bop zhq?aTbcb+d8M2fXcKfUN#yX1#(srS!c(i=jyAc;sNLJ(>M@5D%*Eui8Czi>LgN=O* z{b^bYQAIbtwFfzKy<-`gZRqq%;}@OWb($GC?KYrEM3=vE=t{eGSl~F=A~2_4NgECa z0C*DQxsR6n_^=Om_m8-V$1=q{`RJc~EH`}Vdwa@#uD})@S5uvBx5D*vcLH{$^(6pw zaMAb)qkDW2Qi9f3XwjD>rhX&Op_LPp8PxEwp_zZ)<8U=FRanW>@AGzcxpqEY9Q4pV zuqW!|*rK}VFBwByQ{WNMbyhi@Ri(YZg*dXZbOnRw?_kx-%d{)j*f*E zuD|c$K6&WxpraQT_ddH%#xOkW9Y6ThDwlK}pkdB1sa9j!N_PKlkgk5up{2dfW~MZW zEQYyh7Bpk#OWo(`hAqN3*Ph!|Jf;M@xUo@1POEhK9!-g%bxfE`M7UnSrfy;9ZG_O` z+VSr`qpJaqxvDW5!3X_fS+drf2uMP0KSuY7elgW8*;({}@3&p7z|YQnr|u&Vf3abe zt;}t%TcOgxdOf6!jc~QyvevMVglqbnM;jha^)GYuU9MExG^q3@h~YPpmpS)?p74!k zS(wOA5tXJDabmlQW7q&9GWEw*RKeY||L02Ub-!Fv^uzk+|9$x%{@?$0tF_N+8Y-ei ze=X&gR_}>M2u4=sj+oDI%L^u>kG!oJ@nb;L;6}8g*V8nNaA6i#ezC(wb@YW>rNnsr z-C4eGiWnj-Hfj8o_4&+G-eph4=_SMy#)+b;8fk^?Qlz-76$Rk;`e+%;Pisz5tir_P)re9SjNhBw~SANRP zo8YIJ-rCv@?lPwfQB?j!W&@_;wa^?Qc2T{3Y{`@=gyYk_&fA?O}U6u#x{qG(`#Wt^ZSr| z)BvGP(19D}*wJ4HzbWBJZb3UnNtw$5)?h@1>%vHofmLv-_D|MIIO1U8JY6FK680}7 z^5irB&ouA%PyY^lleOvp3Wj{7XWP|b&YjSqlG-U~Jv%lo#zg{j2pjtq{uLq;<)MkF z^#e+xFFT$1OELD`qx>-h{;HrWBTcs1uw$moO7FTp(cqtVSvQAJ2QvnexIN=1evp@A z;#XzmUP9^3#!gCIbJquCr(3ykgQ6)+oXd~w2R^(Kz1CZpmz6W5UiJWh&Dug?fHzGZ z5a_g7I&e25t)1-n1@DANMc=1m+gb3CF9D}p&3k^m`}jlm&XN5!f@cmMdX--TzV=iY zhQTrevCmT0{BE&5+QC#g!f#PcGl;w|gWJ!XRzCV(ZLf%Z(>t@wBW$NC`i5K-u~4*X zXY1&1G!hwY)GUr(5mWAQ_u+kcz$&FA^Qo7;Jd4Jj@pv~La!1v0x$-!EhUo9jgiamj z92FfPFsz;ggH6Q2O7!{i#)X%jqR5ACGa){H<8PJiCZ}~Edm$O7VcFb)$zQLPfj;Fo z5hTHdwXGo*pAuYqLXcW#U3kC{n*enVs{obKL|TAGV!q33?ku^AN#$2EVTBn{LtU-XQ#Sn{TetLPZF$CX0p!OTL6)A4f%mpvc$oTk3e68HUf-d zjNyD{C`U45_>$IjCnJYD1<95B`xjIF7dLm-Jm4<{D(ND3vD?8ZX^(pJLm4HK=NM8twIazy{dk~ z>Yw#K6&H0o;#292LlfofoDp*yvW&G8_MAIb*KGQD)qh6CRaJ_FmLMfFH50p!JAQP2 z_Gq?p5{@-iYbKV!uFbS*#`iqEDI^^ifL_SI=XCA#aYUn9gC+5;E^5*JcOX?*T{_kX z+BVsSx@WLffL+gV{nZ;ccKxt~-h^%B z(Y3JSEH(!N^;<>R^_w;8R|OqJ+P7;t-M^Bp)Cq-PT#7b zm@PDJS1aWYiHq_RXafQT?y2C|_tVByX{?gDhxJtr8N#7hkeGnfl7=X+Ch*}8bMdr6 z!R7{Wh%Jzl%%>#kXdSPltj)Zct?CrBko1zq zR;`w{wtbR}k^O7EMl%s4wtF+*@=Y7Z$_W_Vj|iROZ?^dcOfM`N`liej-(tQ980I_?uItYy zwyx`UyfdvMC#p@hK*C=ppu2<^y6>EL_r1SHG-`-s78e0JcJxHV3g02hk|jkpT2SkL zO{&ig-MWgtibR-pulrSfL%XT?=QQCL&zrP)@A`HdPJ-x-d?tnNI#>HA+h3P^ace{{ zm6|67yjZIdJE!$K>x*l@XJ5S*XE>(-l~#~}TQAy$?bpx6?`r!CAvcH+2Wic0yQg4i zpc(_K&vy=`9y)Ph&$EP`XhI{sIGQB=^qA(Dh;Q}xK72203dblPv#g~foHpiho*=#I z9ZeR4SSuLbPQ{2jJmc9zot?cNv{JFXyI7P}rWnzqgbH#MJ;}~zPOj{>Pcx$Yhzv)y5CO@t@(Rh)eioW+i$>AY>33 z0rsh}NZm{d?{O0{7G=Yav6PG>!~jGov&-ejBX^Kwcswyh$!TgTtZub32rj{=F8rjP zqhYyAwM#ZMv0zmDxGz<#K@)2E3~<6)j#Q{B|Jf?|6d%z|895;EJI)A=yd5oR`rl8g z(hJR^qh&2-i`?2N?$x)t+jhotnVde0zC`hnAq9ojZv?AuMYV_mwI-`IbjxY1`}%tS ze5}=H0vvhz!daLM6o8(|`V1qopQ=TGK+ams5l0EsUweqCFhyp{v$05!XGg0&ulay+ zXs^JAeVf)(<4oK!<*~P}CS1~d@eCyzOjhyLI|c9X-_C|2v({gjfTG5kk5JB+0t;vyN)Sv zJ?jCT&L6+LRF}y$!neVk!`EJ+j3h$(WIMllxAZlwog6`8*fma{eC*AYPAkOCU_i&= zPDZyT9AEOU-lNSc-c@z>Ttt&TaSKPTA`;ae_ySNJ=&i7NANek)Ahqjdeu*Aws~b#_ zu1ZoVLtLEGs`|hcgForgYh`xj3OaW;tIA2JFfW8mp)n#`K*R=l4Ju7!r?c8}#gM2j z!|3%W4Ii;0lxO5w*K^W)-&dmkIcj;;z3SFR85v+AKxCndG`e?=KL2)h)r1sTqP_tV z0gRtqebq5Zjy!7=Gkc|XXneM{C{5y#^H#>1?@aA|9zX~fnG^p#T|oh$8uKx{)PgYTjJ0UWZV8&S$N2#Fb2Lj$h zoAQY%GTxw>C|gijf{pN9)wl)&33IVT_m^Mg7n{azQt+k-sgE)~E6~Gi?fQkZL<0nCA_{eMOeHj@pKom9MGBPx}pGxgRC>J{Hf6Wml9xE<6T~OXnaWQq?gnXLmRP@bz=l(q@HM zpLz~CthORG-YnMzR2E?j;b-GnVyLY-z>c*`E=mWo^2Bib>EY9Qh?doxuKexq63_(9s?r?pGP4-&F0|^Li&{kMQX>M%xMfM zdG=aDvg)3~&W!J!XbkNo>xvP#vVf!xsDU`~U9}Zj<-}86px_YLxbYFYOvhikrL}dX zpg&@;iad^MRU-vCcM7wHfm^6G(^Myk7K6}D2ze&%$=o%)yFp{nn+&>6W= z0yn*>x0v{0F&dVqDiL@(9^hAp&d30Xpfd#4{%h}xj#H;2_S-5aOh1tBrUkL45y)!GKX)5MDapK}}KH~v%B+m!`( z$x393Iy!3*oA$^%Rf(a~f#O?2m)QEGsgL)B3oGLoo51G@ z+}w;kJ6Jc-yYst^dp}rBznDC8TP%{-EGdbgo=G=d%0~K>JL8mSR=YlrVd<{r)L|G6 zjOCwXpwP8U=PA3h!u!R-m^2w`ULhH!Hn?-x=E08{p(7V+K2Hd1(UQtH5c#f9C6q98 zbmm6VxSMjD==kbS?^g<4FoV}^GD`bTKOe~=V35=OLG3pxPfNtpJYkV5i=ac`%#t$m zGEcp+uTbYM9S5Q^!^(~qDEn*|7xPwib=s5Z_dfYtKLzH%yf>}it2=%t-pi}!3e&y< zvj;p}UyZO>-dHP`fzGB^42p)Fbt;G0-l?>^^MM}4$oR{O9}=rrDbiSr3Fv`iR#s#X zg?y=Z4%OcU8RQZ9wZhhv#_*pF^ACOEE4}&;FqyuLu?{|IO*k+Db zOv2^-+9rori!FVMu1vI6nD;|iGK@7XP`xBgB-D@s(S?HKNlEt>y3mCX36M>CgdjCZ z(rXFcBP5MTP7tz@A)^q1u1i}yQv`n3_SV)A6JD@Uwpl^bTuC)z*0k^wwDBX``D-p} z%c{wv4|x|WC2JoNRo|6Zn17JgPU}m_2v62frF|c#wi^BtoU4m!&asoH$YU6fB$24m z^fB2(_nSti&F}cN%K>Gh-xeQ!0KOqWom+Q`l%^ylC8_Hh4S1c|^kxl5A`P^HnY{uQ z7c#-Av5K;;3+MURE>h^hVVS;7vZ}MG-#J(7+FX7ys=m!gz?e*&NNJZ&Gbfbo10W@qC z)el0E&ZIY)6@0Hjj&1|CQV}w(i76kW?4dXIXrq=zwSG3AqhT~3TuIcoD@Pgig>FkB zCFh)HgNwDx#Ow{K)b>BW60_-Gt+B1_52u6cybVpS9~P(=zXVVX!`36)Qo(9ftK z3Mvs9`}M2l6(`7N!GVULrQu_EK3%T`*g5}J7cAH zXsCs#`qtt>DI~ zZthdkYRq$&VAq2*I}X#lL&|vyeG+$NiA#@zTGGKL1{!q-L4=ZL^rY5J*!{Zmuw!u;1*G4$+t6|mn}^ZZqp5dKqy+Q(RopAb7T zhjO7bBJsL>Xs&ha}N=w2c_g`of(CUgjTvmIbT zG7o8Ak3@dKH8B=rOm2Ke)kdaNu&H&qcezNMq&466JQbU+r+joUd@8v&iDhfT!0pV; zWNLrx0IOBV(ZOXe3_Q{hAr#;*hVGQKBMX@?24+gJ{K0#sH4%$ke+whjVJZ0TBv%;q2?_s&{@e1 zGbZvQ$GJ|N^Io? z!&AM~*kMeufG~=0@~3(Fx$B`k^O16=AhA~={O6CE1y zIW}5904#;zMo}?YQ);cp!pgRE{8}DdHO$>_(Cw;GV($F60!No1A&`KoW%c)nZtVvX z4TSYHBCJQ98>cGtD!H5R9$`Kd^Yz<;#V;yxS2SgEtHtW9@{aoJ#RL@68u1k)0eKEy zE2T@f?IHv~Uy%tLTW_0b8W}Epe_BvZ7qR&JHO|lA!BeVc1Rc! z;CDu4n>tlfEeSAttTeQjIs~m5rTob+j_iu20{=>L2Zz?H$>|7s-er{8+2wr(B^6pC z{A~8a?M*Nr=(Ea)d+j~x>qO7CJLN84 z=T>nDsL&X3gFgmocaj-69C|QvIm5-kq)@^r-tp}+mMuo`7ZMTC!-8K+22Evvu9pXn z;Nmkp9NB}X7aR#Y4kBHE*7F%p_run-OdHR}=(6w6{JqY8C2my^pvPo%z4Y|5C!)-g zXCz9y+nBT{f)(U}3nfjDeJ@+n;@o1ew1tA@MNH3-7(d5h?>#C0Rv0P!a zu2)42Ni&G?Gx5+roaX!e_2s5>LD8%(FsxvPb*#_71gi|^>iO}zvW;|Sp*>`(Lw%YDzs*&=f#$nCpJHC zC?e7ZL_|79mFwLRind}Rpw|Xay5!^#B~fJshUCs?;(uDs5ia;Y<<;9Rkk%0F#@<&| zfd8QFpqz;7lnti{2xO`j>v`$mVj)ZHB1ZjPNs-f73n_477nMoj2K^sCRJb_BHj8d{ z?|6@o_*bXb^Qelz-~xJAfti1}MS5sloyx#)%m~WDV}>6&A!c#P>Bmbn|3B#%sU79l z%~vAyiEEdpe@E#8u!`;2689hAF4EM$iUeWE1^)+FU^(f~PCB{DUf182uIq$do+Lj- zH8q6it;cDXTe0~Zc+%0IUsnE`zUEoRLvshimp-2x6|~J0Q?omdt_1Xl-Czq|P=duH z%)F8Mb#3?RN@LjXI-TNMgMW<%x$ADwqJi5(jPcDbMvpp!u87p+P;yDV2Y}#MJjwQ- zdrWocT2mmFUxOMS5|=dc)p9P`|4t%web%%gmPCZYNHP(q_QveO1Du92m0YN9cFs*V z`G_DqW#htjA+-n-628!X(%e`1ICDMpg5`Wse@c`GYgoC$O2^!DIO^{p%^KBt5~ zUYY7Y`n>$G=@PTUasV2p`HO}wucRCMPbMqoDR)yv!@lGX?i7J{_18Gympb+FX}C|{ zq|jLfYQ!;AeMbGdXY{q`Eoo`2^_XR^I9p6W3!bOwk$qOQ|G85FBL)W_aDKe~(e-RSND16_2`1Tt=?Hx^4 zE)nEyHg+Txen!Y2RO4CwHLfOHUIYj91WmMW$I$RegQpu8sfn{V@13Iwnp*d(=SJ@(*AEL7P!VWb*zWh}j9CGXltjaJ9*0C4L~_ zXsF0a8Hc%U)gu3YaUJ~56n*Y>I^i%DH}4_U<3Ndu-}x3!<2^m%G)Bam zl!rcz9M5XwH(DuQzPC)Q)8}_&kVWn42eutj>YeVn<*_8qUp={kycqI?)z4_k3XMn)uI-JPtDRCiu^J9SU=f3&mVr9Ut^c~ zH%;mm`}_Zxu>RD$73&wha@Q0vhM8a6F3ua``giMUiWNaz|Nrh1HqV_tR{Da4{_S9a zUgMK(hl^myzg+EjaPn38v)6ekVBEJmZGYj)lzg5{ht1b9?A@)Wjqnqoinv)*YZ7O9 zWgDzV9ArA@)HAkbv{5(>C^3B`sB0%4CjN^U-8@i1tDjZO(nJ8BBQijz}FvsF2{)m&#Q}Puq{~uXDdwa z>lbnf+uc8bt-})9jK@J`XC-6}0p+RiMn}D_D`34Wvp;hx&tJ^1>?|#U(16$h!}j?F zOfQfVunnJCYe*q9Ht&7(=G_WX#&&ey=ivMM%iNh%RA>F4zBciTR%{RsNepK}=;@u=PvZ z6%t??1ye31Z%@_9>RZ@y;kVO^E@7(qK}1AF{L90^dyCff!k|ZN%~R*SGoROGN8^B? z-OBlnRo6}@F2RgacxAwKuG>YJIjQ!_QL+z(N9_kH;Zy4@<)o6H|8ID&9)Vh(yVr4~ znDWUnJoXJj`(^Kef2I9JVTUkZTeW7u+0AEvlRouB4}y_&p}T>xH-!Hin2hP2Ad`N6 zWq<#mnx?H1d3$j&yop=+wwCFX$G+Xlr*19vvSJ(-k~(ZC+>-A~)k_07fD13d|A9T9 z8ck7+_L4ldW^73bROq?$Q;vE(neYJ#vEI%Xzx6h(5ku5^lP{dQoCp;FE-LG#Bx95-QIkXK zv)B%Fg!Q}K-62hn3s*UZwYoj1O$z_CmB@H_W#+rYo`FyTrZ82wW!c~381_9Y@7l&O zY;oJ$H7@*Sa@s8p^C$LsoRo8>RLx;1)MN* zJG&CGg|9D!?u?}ssB3-JE+Tw z#z#h$r5K~a_N{Wlf8@%hyM94^+6L~P?rELu_%N(^2hyE`Yw8_Nd;!*5C&G-y{wzh& zoz&E;)2kRZdK&9^u1fGsvaV(#$+YWg$k(u#`>YkC?IG?nDvg#I?kA*H)yK?{1o8P3m);YrOlxQkTfGn1v|eyu^bXFzt4-q~D1tljdpB zb%J>>vW1I7KFm{AE?+8&z0N$1IiCH92(7W`--)CQJelI3ikpKo_h=UpXG`Ay8Tq>Z z1-@MFzXg!gj>y;4>Xs9frM^i~oDEA2`hSBS;V%^E(|BTP{~PoOc$-K#eku~Q7sAFe zRucc?1BTqLl%V@%KSUX_DHbI|e$f`q-o*Ws?Xyct{{#VP)xpXRFXiC$GD_ajmV@4* zEeXVKOdjE(cmUV>bB50l4tNzjZ3)h7DiCBYk@)U*%LC^R#=p0GnbvdU%czZoLWr4b zjAE+eRd-uj_8`*^N)8B&#Y@npRp;opF+m^Q8C#KW7aR5;YO+3SOk3u%*puQh;v#u> zv>^;brN~u_9*Ah&yu)>a0O+3TmY?1JaJoe)Oh}lQ)!iYWacsp7XbU_Huw3E3e-t_t z_=3OEW_lCe0B>)-$B9~JA?Sm*s5cNhsLvo6d8}Pz;vv&?Ks!5;JU>1N z#0>F&Bu7FfKa5w!kN>)yzDMLal;q%E>S;UUQQvwz+|n*ivp8v|on$f3=r0bZ@z)kU zKN=Q37CCR2D9S&xP*=`Lt@UA7&Wjms$LbkTIk@}P}$F;(HPC4 zvq(LMOC+qh8EZ^UGGzMF{e^;Zluyv47?A62EB}^yTwoWc@8t7VpJhke;E0Gk*C*1a z{%zwB13v?!YD>S+^j}EFJM*ctup1;U{^bib-U9~R({Z)uIE^5XK8}ubZ64e zf-CC*&q&Mx5d{PL!swq~iMfuSX)aPD0o~3DwcfpZr=+Chw)g473qoK_=fek{=-Z#r zPzZ_lg1hmcGwe}y|0W*?T@Xg~bhhQF!E)8yDU(buN?HXEMbcNQO08=KczBOc3YWcp zOaENEV<@)G_Y52in2;n9glYF7ekIS~NtA1+VNanF*{B%$ zFvSN<7KW+OM1~C*o^C)OW$%)LTThMrggx!0WN!D|fm+|_!hD(?Oy!Lm)_dK1cJ*eR zYC+V=t+zc@HrvFc7+^nOuHZBT*x0RrS$q*cf?L4?)zEABuwQ=E-a@Re-mCA}y6VVn zw@-QgF5t@cs`{~_F{^Lr4Wr&=m@tnLuQ{=ir4k+rr#26ByHvSfolvfYt`Dyt1-74t}LKw+A8wZywpq>DEOqZSG-N7reaOr2M6X1nr{~q41e%ol!OKMp(Td7=^(z#Td*|-^OeRJv133db#(W9%c}(lTFldSS@x|Nr zSTD&>=DA&ld}E0zKRYdw%bF)x-~yu>!z+aB;-{0uW~1AuXD8_r;iT`~xFqqqmki<< zDdg2ru5_Y@iuj{PXG~qA6 zD4P@fR^>C>et4GQ<0W3o+j6g>aisiDJxGyvfOSeL%6Yz0|Wau3=R2;AmMtul5|NI_{ft&-omB`~k#zCY3FK97V_vd8K=;#j}gsJ;Y!eI55ySHp>#*6jB~^Ym9a z>I8HoPp{eEs#V$<0&0XAO*%G-bQ9fueq#fKFYY~ihE!TEP`~$ix3GLC5Qv}#+7h5t zOK873ke=+mpo!}+Y_WZ##exR^GP1kcp#qFo>!A*0o*L%p({_`iA@wZWsQkv9$iTIC z=+!>7aj}i&wC?4)RQoum4L~SiTL!&d@Jj4LJ;U+*HsqRxaIk)@|vBTjVR=B4eA@A z7RT@<6N-h$mk7O9rmuGml?DNxT&Ru0#&gIdm=$*f@UsTmxAgv}FM%}2?T=x6NC1iS zyUl>%B95ZDSx--R3!CrhFn3A)Vlve5 zhvu_RSWFDDm^}~^z!83Wg&Am3oHCG;87!)9tm8v@Y~w^aXq=g1Aj~D8za(qxG{OLh z$`X^<4q#+tjqH4Kr7m8J)r^E^K4+=dB%L3Bb_4>BWR>$Bck}D4LyIlbUU0pr&bm6I zm4|aXSd&>KwvU>?T#lx7u>h~s+2JXju&l%F(6x+}+hbyY1fEw6u`h7|-sDyVT#62| zs=YfQft|ZSp9rRorn?;XjtRh=YI95lHqDfGsLLZ#MqUc z%#}ViyKXgw-6q;xT9yJi9Gta#!8I_KLLYO5LI;+%{^rmq$vKHP`7O^zvtOKJ&ObZH z`r8u#9V2izT0t#=X71Si>Jscf&9@fwQj^;Jw3lKaiotR_APE3CiRq=k=GEt{TKLsG zL~E_$sc^>3pJ%%Yw>SeQ{nl|r za+cSw^R=)7>~*hqdh|~drJikVlIXR5RqOlO3%^Q0~Z$;+pV6_+m}>> zdPey6w?4;T-+k4hVZSe#xUKYiq|9raZz&U5dI)0!zKwTw8cYp)Lj|kkra{-CQHJKc zTo(7(st0V)A|QArg~hd9M0ft#N_lm~MRs%l zx%5i+na9pG^qPWZbxfPSaP9T0xz{N|#$#v5y(ECwsZu;WvAPEhUeaMz)^O&h6Amx6 zaVX)2%=uwyp6ex zwP;+K4|rf?t{h?azu7u#6HhNXYsT>%H#!qkUsRA4uR>6yQ75f zr#vJqD-18?VveK1IAG_Jdi}vRck|!Pm6y%yN5oH5$y!5S0;~H38CEAug$=XSb0qIs zXywqOKAtrX3-g^ew00F5h1JO_&Rf3elJ&mbx~K<_`>|ilMpfHhlR-rA=g(hS;|06< z?G3WJUDt{xIn!-=OyP@Od?ewZx_T2%@=jLoboBV)8i8thA(al*{_u@vvF2lYtp6E~hBQ=8=nbp?9zOTlba(;36Z|yYWNEY+5 zDoxOi*M9c%Dr?@dI15GIpCA@q5<$bGCV&VNpP+2?cpmj*%n9LU3O%(Qsu)ui-$Zq z%6TklK3r8uCJVf|G~>b%Dr1ul<YKd`q`qfc8vXmoYK2uy&nk&VA8+YGW9AR8GsWV zf-H$=@cR1qH!A!AmHvv&7F zT}gFxBomesQB}=G+l87fyxJuF5gG8sLT!P6EmB{M+Q>)gu-JL$z8upWDp%cjQX?_7)R(RKMr!aGk;(A?wmTk+8srr?AVH`G7L3_A zsvSFf>DuwL^hpf>SI%iv*)_wbreQG%skb!o&VjJF#x)~IU>D|f`>f~Q5OG(h7d7&K za6S{a?e&g&T0E;ohK6(OUCnK)l`ci1Ei6>*E5X@1+@ z%m_+AT!3Bci%h9X-;a$4wXTd-~#w>1HyQ`M+9wtAIF` zt_!qr4emC$y99UlAPMdc!QDx44-#C0hv4q+?(Py?f(M;D=bZ0uCH|5NAYbJH#sX%%M5Wh^r7Y7CjwpBz_jC^55@NQ9Rb}P&S-*6!*@Vluvu!XP%AliX=$cf$yXE+D+1Lce&|NXM6`{&I7Tl`_A)_ zIT@2)H=tIHCspv*4=uUtR5!2&2~0bo`KO;R7zQSHN5fGVDejepnMV zrMS{injEw}~5(Pe-kM;km#jy{oo z1sYVE8LRzMI;{QlBC{;1f!FfLN%!pMD%sjvWVw@S$ z(4rLs)F-)ICP4(5QL@|YNkvBY!8k}xm9%;bu9GWtjpR|L^imYv1Srr4p^BgW60nbJ z3xD2KL>xduE-;}uxPk(t=1>v!*WpKPzJ+{;#?Ns9X3i+60Ap4xs03|T49B~72@$_3 zU3L55_I|GME6&8wKWBRDWOawavUZ2t=UqkW@uSC>PYxYo9dvH-V{zQpPs5r;`1@F5 zz~;;_>ouCx!9E%k(3ROvu{cRpY?FNUa;}yyR$&}r+U(?4s{waAFEJxTo6>KGE+^?) z;h1I=F(}`kR9PaC428DHu|rBCqFl|HTwP;x`KP=>_YZ@GD8le&qF6i)yCU&>6XeKo zuG)kRW_mVpP$#}R4U|M-z&gijk5{8VhwIvg)4t^{9OBq)u#hgYlXFOr|2Z^+8^00y zz|}^AAHE^7;*JOM2=x=Mp~$r-%|Vs7?$AC%e(ccyhF_{qPk;>sDSZFcEEn&(>S>mN zX{pR{hn>L9p;i5ocQc+o!k=1a=A!j-)j4jn5z)T)o$jH7pW{fVGkvA!uc=JGk2@ut zfre-f+H-q>iG_H^{>Ifvch*Oy1(EnznDHA-V+&K*092rR+B7GZs71w25E<6sYj0sm z&j=Kdoo2l6AKqSPC9>;`@LRWnfCL++IG_CcCrMwQ1I{4ZVzK2zq$Y4>LnF<}Y1UXT zlZ!bsvTOsPaz_uBOyt+FqgkH44?`H9U9Mk~X;}m}eVyq^;UiWr>kmLO=|9Dc5rEOO zpD21N!mfi@UCQ39j|lQEJ7~eDVo3vgL?Z5kaHH9w^0nBNH!R^1rZ%u&F59|_^ea#D4juglqyEkGXd8R4frx_DnE7$jTl7%t^lp}mwu)A)LiMWk^z}pZHKYw zIp>)Hy1Q8@B#6z`%<{3_kr0c<<)A+pfE?U85TXh12fp;NT9NZ}Y!DE-hgQp_r{$xr zgjapg*rGwWhZ5^wa?M)vGV&o5eQ&)(SilG->#%k_{NmXG<8D20sDx(j`Db_hxnVy2 zZDu++^C;>6xBxLHX+zM((ou?y?@V%FY-*)aF!CF)Bxz$vZtp+#tzP0-n8rYbi1ja6 zJNj9=QLC7bpl3ag%#jknNK+tFgaA;Y7is<_9L_z63S;sU#I8|^bB-Iy*%4IoMDKkB zevmt*smU>H55{qac6QyhK8GCG64Nadtyj~i2KayjNj*^M|k76oE`FH#}WJB+aC~MDrS)K1BA#=n4Xi*hq2xf5ga=kEDHlc-ALqkk=8*@ zA;RgJ{k4ki?xA)SET4&eXS&i`YEhaYN0!uDu!8;$?Z&z-(_B`D^pZ0!3z`FKV zm5E!6ZToQIznACw@7ufT27*x!#tjB~FH&t!SW%18oOW6Xh^tO5Ks7m^LS*lAM|{mct_r?(upq>} zeqn2|7|S?!$#`fXvMYPj|BVO9r|xWN8>lY0-5RB)q!5~2dmOL1!H%v0E4fddoG!gS z3E=$k@)cZbOZ#y5Jai|Ry6JLAO9T6?OPssRg+s-jQEP+%?@-t=R#(wXY4=xKYo6Ll zMoTlDiL~ro_vjhv&tE&?1!Km?@UtRh#CKjkp7Gin0N{5xTqBwvC8)8qCGINOGi|Pq zf9&tfeZ@4ANmjt0S#^0y%A<6Btxo7Wi2X(TP>b85Xw+u+f>(qjZg`dnMBhy|^k>Gb zp#i@N|E$q%K6C7{gCjQzmLzT`DXz0}GfXm)sqynF?XF+2|6O2Z-g{Qn_ceVxQo+kJ zPopaVB>)Z+k7bHO+4$w-4+pV`22w#D;j_I~LBUTfV{En!3-P>NhHNW3jmM|zj3jOk zO}RqsLcUfV|1U`FG6$r(?EeQATlbr8@Df@SLHw9tCQCmSyEn|vZG6HLYA!Vq@MBu6x5{TGP+GBxP~;Ns%) z@bJu(Mx&{5;~nUoGd7$C+Es&pc9c5qlBp1aokwcrz-@t1ZDC{Iu}dnjW^i&iieDJh z8jWQ1nw?!sXBQS`HwD?P@2YrYpiT@}RQk6Qekl)zg+PszX;s%vW(R5O9EQf`{nd-%si> zENbdlW4t_~SKQ9n>(c2pymN)_21|>Wg$-;`d>iWeu|%{ITas8SpoH>e_POCT71h~_ zZno+dy-|AN4;%{CBVxh}p$}U#s-wh^VR@oL{9!q;^C^5VQ_4^%kpGPTmVqGPh`XHs zAlGTL&O8Ze@y(w>j^hXbfsrK_aZo*4Jy26B9-G&oaJ7{6-G(m&-`Yp~h-PQFf5~^@051 zXuEms@*xHtb(uoEO#g*+t`)kpYx4Z9d1w#&UjW??i^bY&WyZi4RA@ zC01on9fxY+D4CfBGaAqL4K7~_x&Lvb7XRNq7&Xk-%Obkz8A-IxcegPbNRhMO>`gy| zK!04-J2)21mE>oc$j3R{h8=E{I>+5>5HV}=x6xvWT*(ya>xYTy{+;b#?gE|1{KW4M{Px*ykENM(>Np{&0q4XTbyhO)p5ozW!vAkqcJ!d4j#-E4a zbZXPSvZs$J{yR_1bK4MqjM{sTxzghLEOR2+m$;rBic4H=1J&v#xPD#+Z0jk$$mjnJ ztY2EqW_ns)r~FuARaoM_zuSdRm>A7XI9sTI^tS_l35EKU z_}mcyzNJY@pcbdQiOs6>=0l9Jai^_tnLejJJ;nTQD#Fo3_fUP)$-T{m)WHK3xns69 zF$fT8HuZGAvzr^Bo^s>|z(|cr(L9awpM{F+J4Xu^NpADS-K@d4wjrEjO53K$%R>Rv zs4xj~u-eMH8T}&r+cuWYeain@9O5n(9?whfW?o8hUL^Rzi(gGGMaAZ-85UVBNIWAg zAtYSDemR-@)$YG->c?$ruJG5`k>iu7p(FzMawM;D>Q)8Ww|6llHH2ho-Tr;%;`$$> ziSH>ABq-9?scBLo*ztFu#1P@BxE(I`V`lIF($+mVI(pV{s8j5JglJH$lw zPvXVAHZ^ra5DLk?;F);v;1BmTzECyUmM0-|BDVi+xpd}iE!-q1yPchH-#L6Bqj2B6 zLwCH5*&ol!EB_$4qiEIdbeBdJKa6@_#1dd^cTA!eZ3Gf>kXODDmG+{lXxh zz}>iWs{h_AkvzHoYpnb)z6Du!KaYu;)iqXW%83=pBjk>|vnu+8o#*OHmeb!+tCAmqn5H?h6`rvjf`O zaN}k@3$8DMJOw00ZH~`_=Pum@?1K{3hgzV;oJ^}|JPAZ#&(5^R@>7$!w6qHJk@NQ7 zmMgj2p?)insVhist23syeWC05gZ1dCjrC0m+oo=15+p0(FjMr|*Z*i&R%5!9_)-sF z;E%$BQ#croc6= zDba74Weg6lf1Jf}XvF!3bGsy|6c{AFV1R4LXiPZ<(4U*HD*fN@u?qK1i@CNuZ)^&&%BoAJ!C}R{l45)4@Mb~&r{`wrn zskngE<0uSCJ9`SEgT1ZA3c|tKBN4dKjB%!6@ce% zI-VpWJ?YYh{yWp!(IyD1b9~-ZN^WRZO<(4s^Q+pb@hex!`8e)d_|CNg1ZXzxJ9KHC_?6m&*R-~MVurN8-I#Tp6U&~F zK^BVhbZJn<_t((KT4zU;023e=!vhvQuZ63y5)~ z8*$rrXr%uv;nVx^e7A%CwtI&x*VN}V$ICtP`RAP{%;gzci9g-pK~Y{({N2YU8Aq?Y z-EeB|qQa(TiYC3_%d0LL zK%f4&`7${uGnLqzkA>&7-K&z8KTpjM&7Kyu(wUU{F$(Y9;Yn%Pz1Ep_*y=Ak{I)A< zc!dOA^>ivi{+qYb9-Up-T?O%zB6(i_nQs<9XnTn^e^+_0yq_K_v7(UeSQ6+!gdKYJ z9ZaC$LOroL))-D@X6ipQw9mZDAr2Ib(T2_Y({Cn##ehZKzDAnXV2+rA%_izeDd6tR zY$*~c9U{DUx3N=8`EkGp*OIfE9-O1!J2s`nxI-l(FB=i6klwJjuahYwIK^2L@`y!6;XP$Gyw44~IrO7(fPk z9-d6bN-^L8RB|keA*nG%rHBpf^hP2*u**E%5h^;1Dsh8n0Q=aMQIwarvpAGw-qFFZ z*YV8!!S5{w)sId&2NZ3ZxwXH{d9FLbYhTz|5`JMI^FQ6AKEndzf-?A;xBGq5-F zC+K%%cM)UXrHyzCdKQ=NuXf)J3cfLjn_qEv;Hp(BXkbu_@OFhh5vjjezyPslPZYOusK6EbZILna3cL>=$slzQ0~&C4egeeIj^%>cyrjf?H(L!TvP3f7{y zW+xu+3?OW&BFo>bqy$^GDQW=z!xS}(D&CclYE9(#$Z`3xB9%Kj_zI)iRw0Axc=8T4 zQ@ip8+7!HF82gVUKJBLd_leN1E?={x^{4I69fg-fPVgae2&-qi`Q!Vr3=`q6IafXR zuA~J}3P~w>*iavS)$d}(0zp)J9rlujs6mDDk42$`@H9-YS$(9ju^lRCfVRO-6lH6j zhg7yva(bb;cT>@^(#8)*@zBg~-!nzP_SyF@Jh;bAfq%}L4a&H?)*j0mBer^mI`!Gb zvIf}-S@crQOP>`zA<5y#mA-!z75mOv{lyzokYXB1eIGWGQno|8;x^H;8%~WbFuR^_ zmh|`mKz@hCNYCE;BtCqQUH!L1yNPSd$`35(xGxT6%UL^rxACiVQa8QlTngTcvmCFz z-W=LZZJnf#pMqA3&dVPN6|a?T_fH%vSDUIlxKV-p{n6~UMSR+^nkkXlC9kvYE0rZ0 zM+4U>x}wRoYFAf_6!Gzv@U>s}7iDBwJa0635uUjMzrB9YN8Yb`fZz5{-8&KUv6&R! z9&@i<3jLl-DV}eMpcrliMYMeULuKf8H{N@$U8Qtgl6erIfS%>$eXJ&$$WE(G7{PDn zqRXS7UQe=N((St1RjkXT6+bCt<_d4+ zw%{>vL;WLQt+QgUc)6DKIr-+^VN5Wv?DglNpLGP>hC5Th3#0~^+RwIMSEW|ZvR=R^ z?~M*z&k7!b{;Uqqqu|5Sdk>XPknP3K`n1Quno4A z2DNEZ_1#Yt$O?+_!1__67(Zq5UUElp(&D$vQ4U+Ftd$e%cW=)w=Ur zf_T!~6KIVn)GwZ!gxNv2gkzm)tl4T`1{G63uQ<(7jc8Vb|7!h$hji7nOcej}_h}U- z{vm|grYx{afM@HQ*gNg->PRrl0;^ZHdw;W3ls^wQtFuZspWbrI?_`6w7IJ`GAJRCLa}2BJ6jiw%Rvl6g`A6q2xjR#(cg6 zC_u(uY0HjX;?^+a!PfP5a1aO?~a`QqZ#D_o=!> z-Td*4^R&07g0#ixbb7|l2qPcmhuVE1*T1*KQzFkNHO_O5ZM;_18gC-Df_wz1Gn5{d z#~R5SZcDZk!!x`&{!fmV+y&)Azpf_YTlsqyw0uo3*De=Ui??P&zIC6Z=xZgg`<$E~ z=K7Z9ur0frNkc=6A${lFG;SpI+c_@D4J@$@l9yM;P=2-~aUG}2uHAWS8+F>d=n{TS z)j~s~aq!+gP?x?1VWviZDveJ0yW2Ypc79|ca!JHR*~f@-tujQ?-8L} zQ^95x>z(MdwGBzptQKD2a~qAfE921|b9+Dp7LFGzdGXPaAEia<>JLo)*vbU8Lc{d- zgSL^U$3tvuWMz;~JY0lEGUarflaA^E(vP;(;MFl#$ z)6k`m;Ec-HrJve}i<@rx731ObD*QnWJRqWYV=>N}2zW#n5{Nb}7A!r3<4v9C#^Vs_ z=>^Y-l|4-~f}m{{&s6;4`)h!FksW6{!Uz)GqmZpap%FHRh;hdVin0~yLvTft${BA5 z49+*6!?2GLC|pRijBd8K(=+_3as26bp89!~OmR99a5^A+)S z4LKqJ5yo(!_jZqDwYItV#Kxo+C5_njlsOqv?Y`UxqyF1*y;;hFlcs)o2-27!2wfmt z5FsOjAq6EA7O2juShVk84X(-Z0gpd^fCA{1Tlv2nRK(J$+`*^gGzUoAM#(R+zaL#$ z6|hgomFM>G%o5l*b8wYpFyB->ws~0YMcO=5w}@ zhyXh%&bUUmq)>28zz#vsjxE3n&vlYc)aPL1kXZI?-;u>OmrGGViyWYX9b8pyXpDu` zwl}m%iE489vYbM_U-=x6h1xB6t|AV{?wu{|WigXM*`c5S7fb+UD$NWStE%?#yL)%m zxW(2?TbPG)bG3>O66)2TF~z>F5ibxd}{bbudhbW-LWoEp@)s& z|28rKOL`xq#89#=5vX+Q!H#EYukExvSjuBDR-2to_P*wGdV14)=>;aWCY%`Yhy|jZ zQvXBu^LKgey41&K8OX)qB4DU7RYD zq9mfArlwWEP>Qh<%b;oT+ybc>Qj~ZZd8%UIFv##=g$)TB5Cjnu{Xr^Q2!s49Y_2eE zSUX>%1IuHCpyj`165qqn1mHq2%aUcm6Gi$muk55b<5q40fHB)Ak#GKzdD;rD;!wcM zuJ<8!&=5f}s<#yP0JOfTSkd<5n6EGht{RXFVU0nNLQ<&l(Jd(4b_y3Ne`3ni;Hn4) z8&yOrs=Vo1O!9`@)A<|h3)bTc?+j|>U9IyyZuU;t6> zbuOF+1^_7J#tCqBSIeVc*VMWzHUNU+!i2ZZzMI7l#g-F!H*DAHld#7alVBH5MaXih`+sTS_ZS0!Od~{4lqJ@P94j$Rz zjh9C*JavCzQZR?;W4oqQdv5InpYyMECiN`KBIthgswJVMUY-)ZhXRt`&Ld%gPma2b z;>%U5)t^K4m7x-oiFu~<@Yh}ZT443obcksbS@jK4%)Utt66qbRbBH!LXD{Mc7-X~T z37JX4n0V(qD|AWsZ@NDfkVOt!PfkpY8MewulM2l2^@*t=va>0%krSX007xeBX6r=A zvV1v*ekyOfam~|oCL2Mj{AV#<9M&a^&WIz4)SN(f))3(X;!x)jx&IDLAB3QY)*&w? zuK9Saq;)>m;T%jtja8$+zia(BeJ%1KE6zIypD=andK!=aI^O+b$F<2Eboe+@T#7$i zJ;^tkgXGH9`kQFN(GsxVt$IPuL6)kyw)-LJz@+e$h?*!?LP_#vyVYq-7X>RmnSkc& z5rx3>W<~sF{-#siV>kF-Wpl}T;7M;hGI{#>qzBZ=Vb92aAKwMeM1Qbx8{_@GK%$?0tqSV`%clP3Ha(y#F0;Ha#Sm5vgW2JPPokiZa7mqRKP~(HD zH2I7U6RW|a&Ujs6vvWGn_^%ha(X}6k23b+>EVc2VrlgC7Ody7I!|=YCX7zMagll^c zz_bE1IC{-Y)ey-%VPO=sJ6~qN)0e`QbyPY%t?PF!SRrs#fKGF z$)vArru5rqsqU+{8)DQDZ>2mPn1nQ^?LRdeA90KUC5T{8@j}^$E$lYcC6u7uLKpzZ zhRC)tiMKnRg}8H~n;KksezGJgb#mR?F{5T(a zO(XyCCR&m6+c$9Ob=C;xFf#~a0-C&E0pgt_4UhwPGk{yC$*D3W0g`vU=?dXkuE>Xg zH_`9j-<=wIJ8!^ux|snUAnd~%is9nx%w@S_`QQh zVRBi<6FUIVaBZkDWb*ZKlk(}Ttz$I7StL}CJSt+*EN=u{OV#bo{x*NY9k_v(iP2|> z^=ii~*UV5Hqk;0Sl~;u^ZeaaFc8`=OrJ=TzC0`mc~78Bo2pvpt8Mgrb#f zCoGqql|g?u8c*VIdf8y{ohYSz?I)pgjZZ;b?INh^qC;wki$fF>d}TFs1O8Z*D=-EP z-0Zkc#d{c)E9PI3#3u^`EA&(|O8OwXEx5G~w2Y1QS6p(p<}>LrTKs;emnFOAk3^&Q zskHSWOAur>u&h$SLn0p85_&L$Nn2$83XzTCD_l@8E^q53-0Ye1xP$UWA+_u6v{`9ab(k)5?ZaWWd79u(pv=7E8L!2{)Y( z0%FO<LRLE*nr?`Nl(Gf2ebk zd1>!+6KU;#Kooz>F51A}*@i_;+oKAi9$^d~=D!PeiWo}ctQ^*NsoojxtT{K5Yd!61 z{GH=I5~Y4~G}HC=_wSb*16MwhGXecBU+)twCRE;ahw=cQ@?YTa>-B%F4nPl?QFEPnS=*#Tc-af!tuDm=(LkM%y~aF1MSjfZ$fQ(wq`CE*3}WUD z&n{P^_q$+2>(?Oju|%dj?0A)kMnSs=-GJVHojUi(=86!+9^>_{)P9)YfRr7qzuEM4uh5!sl zpR7)4JNsO7oC1COa66qpC{%<=FY^irr4~Qi{3eAt7<>wUfe)6M$Sy5QL8j4>w;{~< zW>wy>SvoTRL`5JG?7o2I5V`Wr)-tr(>Ss|y%N#4jo4Vzhr&mBxTD@h4aeBL|th+l` zfs&j`Ptufk_E1;PfDUgr3x;XbA@YfUL*_<(J;z^HMyETVR(TKaQxDle8Gdv@|&zzF`~0h$DHRKdZ=iRT`*iPZZlI3wD5XZ)Po zZSh<%&H1!3ypu7C4}s`jVE+yPIAkgRQ?-|GIXY}XoiW736T zCx~b1vy6WsVsPH(?S56$+4`lg>f-xW^K10hhgp-VimH=4|MOIm33jt*=bM#P@BLWG zrgfJ!d@Z%Ngh?*8*P1D}z1GhxJe+k%$<54sN9DqHs)?vV;C#3gw$}rgL0H6vF0Zpv zGl_u?MXm5B!D5ew?d_|Qc$=?9nNf4R_@)oj+jdpF?Q0Z(wxM^iqPLyy<`Z+z;i=I2 za({7ZoLdw76T{ZPvZ%{`VO61&Rf^KP=Wh33cYVqk=j9lP+X?<3yD(V%joWJ6Dir>B z5yd~`)FCHT_+vX&KfP8ONLwyxr(sJh1oGeWR{B{LITu9MHFyZ!DM^meP;qWP%?S2+ z^U@wvO)0p0`J75BQLDVM++P^Uw;;HVEm@g0m0iRxZk}c7uifHJ^Xq(g1;|I_hbJNS z64Qd22Y%fdv>KFdqCHx)t6>ug@bXGtppIW23VXdbs_6}WO1=}Q5afFq{K2JHRd;nW zNr%Sw=B9q@WHZ`jHK$L$JiqcBXrF4m-^(5!=G7y7f4XZ_a+jd`S&X!oT@QWU%&Pc%92vJ#kS91%*7Np=+sh^4)9B+ zOm0Ina!X&4qO*a#-_rNg3N(roMIW+p{lO3OYHMG|0O;=8D1@$#(d!b?0PdC`zRbYq zCdUIqUsKPetW)l&{E&3?*=R&*VKhvwSn5|j)kH!DG1Z%0gPShKCy=H^a~rxe{(cGL0Q zR#r6T1ELT*x1^DZTnH37x5JGMa!Ts`d<-mX!fN}=6XlUF)df?aSxYSkNPiHWnpMmC z=(|z20Lp!awAW}HE*BJVaK>@TB(Z!Ep^`ap#x`xNRrv-HNsyW&&I?Ic1V1f3#kD}B zrXRb?eg4*-h7*_$AyOYa*GKt_;7^pBfNI1ryXH)++P^UQUPMe)Yv1vJkZ(*!LPPEF zqb>zs24%0$^)CFi8N{=;_}3f3Mg9{gS!0TRi^h}cOLmbeuQ)_aWP-iY6{Il+XrASY z(d3mBbspCcx+2n7dSpBi&3~9He?RMp(Xk=@k8~yStX*mXHTLu$AqFE?g!=41HcT_^ zH%L74A7adIhFGu2znqr{JLv!GSBdohe?zdS`czEQ`oT>MBxf0rmsXLglraAK{{T`x BrxE}F literal 0 HcmV?d00001 From 054124ad2f891d8e30bf19b5efb83ea2ae077619 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 23 Dec 2022 00:55:06 +0000 Subject: [PATCH 045/130] README - Add resource link --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8e23324..720470d 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,7 @@ and some plugin need **0.7** version. - https://github.com/nanotee/nvim-lua-guide - https://medium.com/linux-with-michael/a-list-of-all-my-main-neovim-plugins-8ac4ae107e16 - https://vonheikemen.github.io/devlog/tools/build-your-first-lua-config-for-neovim/ +- https://github.com/josean-dev/dev-environment-files ## Satisfying (trying) checkhealth From 061b5b273fcd2ea721c6edff10c34b16068fb1e5 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 23 Dec 2022 01:02:03 +0000 Subject: [PATCH 046/130] README - Fix screenshot --- lua/plugins.lua | 2 -- screenshot.png | Bin 118707 -> 75252 bytes 2 files changed, 2 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 09be2d3..7f28a7a 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -24,8 +24,6 @@ return require('packer').startup(function(use) use 'tpope/vim-fugitive' -- Git commands - use 'EdenEast/nightfox.nvim' -- Themes - use 'kyazdani42/nvim-web-devicons' -- Icons use { -- Themes diff --git a/screenshot.png b/screenshot.png index bea8099d56bd17b6ceb00e960d8f5d9ba7ccdb81..79bda474a61c614539725a351fac3f5cd033cd20 100644 GIT binary patch literal 75252 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 agp^~fU1=CJu%zJFs=3+=)f#215B~#SARM9q literal 118707 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 WSc=&FIteD=t1U< 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 BrxE}F From 35d70c1d25d134eee197b44682c2b9e41aff835c Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sun, 25 Dec 2022 18:00:34 +0100 Subject: [PATCH 047/130] Fix navigation split --- README.md | 69 +--------------------------- lua/plugins.lua | 5 +- lua/plugins/nvim-tmux-navigation.lua | 10 ++++ 3 files changed, 15 insertions(+), 69 deletions(-) create mode 100644 lua/plugins/nvim-tmux-navigation.lua diff --git a/README.md b/README.md index 720470d..7ed1bc9 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ and some plugin need **0.7** version. - `q` quit all - `` Refresh buffer - `e` refresh buffer +- `` to move into panes ### Visual @@ -101,74 +102,6 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ > Regenerate compiled loader file > `:PackerCompile` -### List - -

- `PackerStatus` : - -- LuaSnip - - Some useful inspiration for snippets: https://github.com/rafamadriz/friendly-snippets -- goyo.vim -- onedark.nvim -- feline.nvim -- PHP_CodeSniffer -- cmp-buffer -- cmp-nvim-lsp -- cmp-path -- cmp_luasnip -- eslint -- gitsigns.nvim -- indent-blankline.nvim -- lspkind.nvim -- lspsaga.nvim -- mason-lspconfig.nvim -- mason.nvim -- mintabline.vim -- nightfox.nvim -- nvim-autopairs -- nvim-cmp -- nvim-comment -- nvim-lint -- nvim-lspconfig -- nvim-surround -- nvim-tree.lua (not loaded) -- nvim-treesitter - - git_rebase - - gitattributes - - gitcommit - - css - - dockerfile - - html - - javascript - - jsdoc - - json - - json5 - - lua - - make - - markdown - - ninja - - php - - python - - regex - - ruby - - scss - - sql - - tsx - - typescript - - yaml -- nvim-ts-autotag -- nvim-web-devicons -- overlength.vim -- packer.nvim -- plenary.nvim -- telescope.nvim -- typescript.nvim -- vim-ReplaceWithRegister -- vim-fugitive -- vim-tmux-navigator -- vim-visual-star-search -
- ## External dependencies - `ripgrep` diff --git a/lua/plugins.lua b/lua/plugins.lua index 7f28a7a..c3465a4 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -146,7 +146,10 @@ return require('packer').startup(function(use) config = function() require'plugins.gitsigns' end } - use("christoomey/vim-tmux-navigator") -- tmux & split window navigation + use{ + "alexghergh/nvim-tmux-navigation", + config = function() require'plugins.nvim-tmux-navigation' end + } -- tmux & split window navigation use("inkarkat/vim-ReplaceWithRegister") -- replace with register contents using motion (gr + motion) use("sangdol/mintabline.vim") diff --git a/lua/plugins/nvim-tmux-navigation.lua b/lua/plugins/nvim-tmux-navigation.lua new file mode 100644 index 0000000..e1e60fe --- /dev/null +++ b/lua/plugins/nvim-tmux-navigation.lua @@ -0,0 +1,10 @@ +local nvim_tmux_nav = require('nvim-tmux-navigation') + +nvim_tmux_nav.setup { + disable_when_zoomed = true -- defaults to false +} + +vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateLeft) +vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateDown) +vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateUp) +vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateRight) From 99cb68aa20ef48f50f52b77a57ea5252c4df8020 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 28 Dec 2022 18:14:22 +0100 Subject: [PATCH 048/130] Indent - Set make file correctly --- lua/options.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/options.lua b/lua/options.lua index 62b4e59..91827aa 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -42,6 +42,7 @@ vim.cmd([[ augroup tab_for_python autocmd FileType python setlocal ts=4 sts=4 sw=4 expandtab autocmd FileType php setlocal ts=4 sts=4 sw=4 expandtab + autocmd FileType make setlocal ts=4 sts=4 sw=4 augroup end ]]) From 5494a92383b014b0d5d48b52ccf7f2066eca78fe Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 30 Dec 2022 12:53:40 +0100 Subject: [PATCH 049/130] Treesitter - import safely --- lua/plugins/treesitter.lua | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua index 6c8132c..ef612cd 100644 --- a/lua/plugins/treesitter.lua +++ b/lua/plugins/treesitter.lua @@ -1,4 +1,11 @@ -require('nvim-treesitter.configs').setup { +-- import nvim-treesitter plugin safely +local status, treesitter = pcall(require, "nvim-treesitter.configs") + +if not status then + return +end + +treesitter.setup { -- enable syntax highlighting highlight = { enable = true, @@ -9,11 +16,11 @@ require('nvim-treesitter.configs').setup { autotag = {enable = true}, -- ensure these language parsers are installed ensure_installed = { + 'css', + 'dockerfile', 'git_rebase', 'gitattributes', 'gitcommit', - 'css', - 'dockerfile', 'html', 'javascript', 'jsdoc', From ee5b22f8dbd3e1d613776b17e611f8ec44e11ab7 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 30 Dec 2022 12:53:40 +0100 Subject: [PATCH 050/130] Nvim-ts-autotag - import nvim-treesitter config safely --- lua/plugins.lua | 5 ++++- lua/plugins/nvim-ts-autotag.lua | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 lua/plugins/nvim-ts-autotag.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index c3465a4..6946aa8 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -84,7 +84,10 @@ return require('packer').startup(function(use) config = function() require'plugins.nvim-autopairs' end } - use('windwp/nvim-ts-autotag') + use{ + 'windwp/nvim-ts-autotag', + config = function() require'plugins.nvim-ts-autotag' end + } use{ -- autocompletion 'hrsh7th/nvim-cmp', diff --git a/lua/plugins/nvim-ts-autotag.lua b/lua/plugins/nvim-ts-autotag.lua new file mode 100644 index 0000000..c10f4ea --- /dev/null +++ b/lua/plugins/nvim-ts-autotag.lua @@ -0,0 +1,12 @@ +-- import nvim-treesitter plugin safely +local status, treesitter = pcall(require, "nvim-treesitter.configs") + +if not status then + return +end + +treesitter.setup { + autotag = { + enable = true, + } +} From 2ea571af63f1320cfe37a9b5a3cb6b4d75124055 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 30 Dec 2022 13:35:29 +0100 Subject: [PATCH 051/130] Nvim-surround - add empty dict to setup --- lua/plugins.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 6946aa8..23b2162 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -71,7 +71,7 @@ return require('packer').startup(function(use) use { 'kylechui/nvim-surround', tag = '*', -- Use for stability; omit to use `main` branch for the latest features - config = function() require'nvim-surround'.setup() end + config = function() require'nvim-surround'.setup({}) end } use { From 0429916ddb795134764e08078d6067ae376e1d65 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 31 Dec 2022 03:08:31 +0100 Subject: [PATCH 052/130] Syntax - highlight kitty syntax --- lua/plugins.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/plugins.lua b/lua/plugins.lua index 23b2162..ccda51b 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -46,6 +46,8 @@ return require('packer').startup(function(use) config = function() require'plugins.treesitter' end } + use 'fladson/vim-kitty' + use { -- need neovim > 0.8 'kyazdani42/nvim-tree.lua', opt = true, @@ -155,6 +157,7 @@ return require('packer').startup(function(use) } -- tmux & split window navigation use("inkarkat/vim-ReplaceWithRegister") -- replace with register contents using motion (gr + motion) + use("sangdol/mintabline.vim") if packer_bootstrap then From 649311a40dd9f4a4c7d8c850bf1007721fa90581 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 3 Jan 2023 17:50:08 +0100 Subject: [PATCH 053/130] Fix move split like tmux --- lua/mapping.lua | 6 ++++++ lua/plugins.lua | 5 +---- lua/plugins/nvim-tmux-navigation.lua | 10 ---------- 3 files changed, 7 insertions(+), 14 deletions(-) delete mode 100644 lua/plugins/nvim-tmux-navigation.lua diff --git a/lua/mapping.lua b/lua/mapping.lua index b8cd3d6..39a53bc 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -21,3 +21,9 @@ map('n', 'g', ":Goyo ", noremap) map('n', 'ff', ":Telescope find_files prompt_prefix= 🔍  find_command=rg,--ignore,--hidden,--files ", noremap) map('n', 'fg', ":Telescope git_files prompt_prefix=  ", noremap) map('n', 'ft', ":Telescope help_tags prompt_prefix=  ", noremap) + +-- Vim-tmux-navigator +map('n', "", ":TmuxNavigateLeft", noremap) +map('n', "", ":TmuxNavigateDown", noremap) +map('n', "", ":TmuxNavigateUp", noremap) +map('n', "", ":TmuxNavigateRight", noremap) diff --git a/lua/plugins.lua b/lua/plugins.lua index ccda51b..a17c983 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -151,10 +151,7 @@ return require('packer').startup(function(use) config = function() require'plugins.gitsigns' end } - use{ - "alexghergh/nvim-tmux-navigation", - config = function() require'plugins.nvim-tmux-navigation' end - } -- tmux & split window navigation + use("christoomey/vim-tmux-navigator") -- tmux & split window navigation use("inkarkat/vim-ReplaceWithRegister") -- replace with register contents using motion (gr + motion) diff --git a/lua/plugins/nvim-tmux-navigation.lua b/lua/plugins/nvim-tmux-navigation.lua deleted file mode 100644 index e1e60fe..0000000 --- a/lua/plugins/nvim-tmux-navigation.lua +++ /dev/null @@ -1,10 +0,0 @@ -local nvim_tmux_nav = require('nvim-tmux-navigation') - -nvim_tmux_nav.setup { - disable_when_zoomed = true -- defaults to false -} - -vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateLeft) -vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateDown) -vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateUp) -vim.keymap.set('n', "", nvim_tmux_nav.NvimTmuxNavigateRight) From f056f68c6bcf71517374b2420e925f77840763d9 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 14 Jan 2023 09:45:35 +0100 Subject: [PATCH 054/130] Plugins - Add vim-wordmotion for smart motion inside words --- lua/plugins.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/plugins.lua b/lua/plugins.lua index a17c983..0b3d71f 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -76,6 +76,8 @@ return require('packer').startup(function(use) config = function() require'nvim-surround'.setup({}) end } + use 'chaoren/vim-wordmotion' -- Smart motion inside words + use { 'terrortylor/nvim-comment', config = function() require'nvim_comment'.setup() end From 8b2c1be193ef87af584bcb2c26714e01c333aa54 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 14 Jan 2023 10:06:08 +0100 Subject: [PATCH 055/130] Fix lspsaga configuration --- lua/plugins/lspsaga-nvim.lua | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/lua/plugins/lspsaga-nvim.lua b/lua/plugins/lspsaga-nvim.lua index a9873fa..a798d9b 100644 --- a/lua/plugins/lspsaga-nvim.lua +++ b/lua/plugins/lspsaga-nvim.lua @@ -1,14 +1,2 @@ local saga = require'lspsaga' - -saga.init_lsp_saga({ - -- keybinds for navigation in lspsaga window - move_in_saga = { prev = "", next = "" }, - -- use enter to open file with finder - finder_action_keys = { - open = "", - }, - -- use enter to open file with definition preview - definition_action_keys = { - edit = "", - } -}) +saga.setup({}) From 46d42fa95799115d15590cf934fabc7b7c7d1bfe Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 14 Jan 2023 10:11:33 +0100 Subject: [PATCH 056/130] Plugins - Add impatient to speed up --- init.lua | 2 ++ lua/plugins.lua | 2 ++ 2 files changed, 4 insertions(+) diff --git a/init.lua b/init.lua index 122d435..bd40a5d 100644 --- a/init.lua +++ b/init.lua @@ -1,3 +1,5 @@ +require('impatient') + vim.g['python3_host_prog'] = '/usr/bin/python3' require('options') diff --git a/lua/plugins.lua b/lua/plugins.lua index 0b3d71f..904bc8b 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -22,6 +22,8 @@ vim.cmd([[ return require('packer').startup(function(use) use 'wbthomason/packer.nvim' + use 'lewis6991/impatient.nvim' + use 'tpope/vim-fugitive' -- Git commands use 'kyazdani42/nvim-web-devicons' -- Icons From cd388a046495748d1f5f6012d3fc558bd89b5c70 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 14 Jan 2023 10:49:15 +0100 Subject: [PATCH 057/130] Plugins - Sort it --- lua/plugins.lua | 161 +++++++++++++++++++++--------------------------- 1 file changed, 70 insertions(+), 91 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 904bc8b..d89ac0b 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -20,146 +20,125 @@ vim.cmd([[ ]]) return require('packer').startup(function(use) - use 'wbthomason/packer.nvim' + -- CORE + use 'wbthomason/packer.nvim' use 'lewis6991/impatient.nvim' + -- configuring lsp servers + use{ + "neovim/nvim-lspconfig", + config = function() require'plugins.nvim-lspconfig' end + } -- easily configure language servers + use{ + "williamboman/mason.nvim", + config = function() require'mason'.setup() end + } -- in charge of managing lsp servers, linters & formatters + use{ + "williamboman/mason-lspconfig.nvim", + config = function() require'plugins.mason-lspconfig' end + } -- bridges gap b/w mason & lspconfig + use{ + "glepnir/lspsaga.nvim", + branch = "main", + config = function() require'plugins.lspsaga-nvim' end + } -- enhanced lsp uis - use 'tpope/vim-fugitive' -- Git commands - - use 'kyazdani42/nvim-web-devicons' -- Icons - - use { -- Themes - 'navarasu/onedark.nvim', - config = function() require'plugins.onedark' end - } - - use { -- status line - 'feline-nvim/feline.nvim', - branch = '0.5-compat', - config = function() require'plugins.feline' end - } - - use 'nelstrom/vim-visual-star-search' - - use 'junegunn/goyo.vim' - + -- SYNTAX use { 'nvim-treesitter/nvim-treesitter', config = function() require'plugins.treesitter' end } - use 'fladson/vim-kitty' - - use { -- need neovim > 0.8 - 'kyazdani42/nvim-tree.lua', - opt = true, - requires = { - 'kyazdani42/nvim-web-devicons', - }, - cmd = {'NvimTreeToggle', 'NvimTreeFindFile'}, - config = function() require'plugins.tree' end - } - - use { - 'nvim-telescope/telescope.nvim', - tag = '0.1.0', - requires = {'nvim-lua/plenary.nvim'}, - config = function() require'plugins.telescope' end - } - use { 'lukas-reineke/indent-blankline.nvim', config = function() require'plugins.indent-blankline' end } + use 'tjdevries/overlength.vim' + use { + 'mfussenegger/nvim-lint', + requires = {'eslint/eslint', 'squizlabs/PHP_CodeSniffer'}, + config = function() require'plugins.nvim-lint' end + } + -- EDITING use { 'kylechui/nvim-surround', tag = '*', -- Use for stability; omit to use `main` branch for the latest features config = function() require'nvim-surround'.setup({}) end } - use 'chaoren/vim-wordmotion' -- Smart motion inside words - use { 'terrortylor/nvim-comment', config = function() require'nvim_comment'.setup() end } - use{ 'windwp/nvim-autopairs', config = function() require'plugins.nvim-autopairs' end } - use{ 'windwp/nvim-ts-autotag', config = function() require'plugins.nvim-ts-autotag' end } - - use{ -- autocompletion - 'hrsh7th/nvim-cmp', - config = function() require'plugins.nvim-cmp' end - } - - use("hrsh7th/cmp-buffer") -- source for text in buffer - - use("hrsh7th/cmp-path") -- source for file system paths - use{ -- snippet engine "L3MON4D3/LuaSnip", config = function() require("luasnip.loaders.from_vscode").lazy_load({paths = "~/.config/nvim/my_snippets"}) end } - - use("saadparwaiz1/cmp_luasnip") -- snippet autocompletion - - -- managing & installing lsp servers, linters & formatters - use{ - "williamboman/mason.nvim", - config = function() require'mason'.setup() end - } -- in charge of managing lsp servers, linters & formatters - - use{ - "williamboman/mason-lspconfig.nvim", - config = function() require'plugins.mason-lspconfig' end - } -- bridges gap b/w mason & lspconfig - - -- configuring lsp servers - use{ - "neovim/nvim-lspconfig", - config = function() require'plugins.nvim-lspconfig' end - } -- easily configure language servers - - use("hrsh7th/cmp-nvim-lsp") -- for autocompletion - - use{ - "glepnir/lspsaga.nvim", - branch = "main", - config = function() require'plugins.lspsaga-nvim' end - } -- enhanced lsp uis - + use("inkarkat/vim-ReplaceWithRegister") -- replace with register contents using motion (gr + motion) use("jose-elias-alvarez/typescript.nvim") -- additional functionality for typescript server (e.g. rename file & update imports) + use 'nelstrom/vim-visual-star-search' - use("onsails/lspkind.nvim") -- vs-code like icons for autocompletion - - use 'tjdevries/overlength.vim' - - use { - 'mfussenegger/nvim-lint', - requires = {'eslint/eslint', 'squizlabs/PHP_CodeSniffer'}, - config = function() require'plugins.nvim-lint' end + -- -- COMPLETION + use{ -- autocompletion + 'hrsh7th/nvim-cmp', + config = function() require'plugins.nvim-cmp' end } + use("saadparwaiz1/cmp_luasnip") -- snippet autocompletion + use("hrsh7th/cmp-nvim-lsp") -- for autocompletion + use("hrsh7th/cmp-buffer") -- source for text in buffer + use("hrsh7th/cmp-path") -- source for file system paths + -- managing & installing lsp servers, linters & formatters + -- -- GIT + use 'tpope/vim-fugitive' -- Git commands use { 'lewis6991/gitsigns.nvim', config = function() require'plugins.gitsigns' end } + -- NAVIGATION + use { -- need neovim > 0.8 + 'kyazdani42/nvim-tree.lua', + opt = true, + requires = { + 'kyazdani42/nvim-web-devicons', + }, + cmd = {'NvimTreeToggle', 'NvimTreeFindFile'}, + config = function() require'plugins.tree' end + } + use { + 'nvim-telescope/telescope.nvim', + tag = '0.1.0', + requires = {'nvim-lua/plenary.nvim'}, + config = function() require'plugins.telescope' end + } use("christoomey/vim-tmux-navigator") -- tmux & split window navigation - use("inkarkat/vim-ReplaceWithRegister") -- replace with register contents using motion (gr + motion) - + -- UI + use { + 'navarasu/onedark.nvim', + config = function() require'plugins.onedark' end + } + use { -- status line + 'feline-nvim/feline.nvim', + branch = '0.5-compat', + config = function() require'plugins.feline' end + } use("sangdol/mintabline.vim") + use 'kyazdani42/nvim-web-devicons' + use("onsails/lspkind.nvim") -- vs-code like icons for autocompletion + use 'junegunn/goyo.vim' if packer_bootstrap then require("packer").sync() From 9db5a21e6844aebcae7780469fe176474dff20b9 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 14 Jan 2023 11:28:18 +0100 Subject: [PATCH 058/130] Plugins - Some description documentation --- lua/plugins.lua | 77 ++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index d89ac0b..4fc4d48 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -22,93 +22,92 @@ vim.cmd([[ return require('packer').startup(function(use) -- CORE - use 'wbthomason/packer.nvim' - use 'lewis6991/impatient.nvim' - -- configuring lsp servers - use{ + use 'wbthomason/packer.nvim' -- Plugin manager + use 'lewis6991/impatient.nvim' -- Speed up neovim + use{ -- Configuring lsp servers "neovim/nvim-lspconfig", config = function() require'plugins.nvim-lspconfig' end - } -- easily configure language servers - use{ + } + use{ -- Install and manage LSP servers, DAP servers, linters, and formatters "williamboman/mason.nvim", config = function() require'mason'.setup() end - } -- in charge of managing lsp servers, linters & formatters - use{ + } + use{ -- Bridges mason.nvim with the lspconfig plugin "williamboman/mason-lspconfig.nvim", config = function() require'plugins.mason-lspconfig' end - } -- bridges gap b/w mason & lspconfig - use{ + } + use{ -- Light-weight lsp plugin based on neovim's built-in lsp "glepnir/lspsaga.nvim", branch = "main", config = function() require'plugins.lspsaga-nvim' end - } -- enhanced lsp uis + } -- SYNTAX - use { + use { -- Provide a way to use the interface for tree-sitter in Neovim + -- and to provide some basic functionality such as highlighting based on it 'nvim-treesitter/nvim-treesitter', config = function() require'plugins.treesitter' end } - use 'fladson/vim-kitty' - use { + use 'fladson/vim-kitty' -- Syntax highlight for kitty configuration + use { -- Indentation guides 'lukas-reineke/indent-blankline.nvim', config = function() require'plugins.indent-blankline' end } - use 'tjdevries/overlength.vim' - use { + use 'tjdevries/overlength.vim' -- Highlight overlength lines + use { -- Linters 'mfussenegger/nvim-lint', requires = {'eslint/eslint', 'squizlabs/PHP_CodeSniffer'}, config = function() require'plugins.nvim-lint' end } -- EDITING - use { + use { -- Surround selections 'kylechui/nvim-surround', tag = '*', -- Use for stability; omit to use `main` branch for the latest features config = function() require'nvim-surround'.setup({}) end } use 'chaoren/vim-wordmotion' -- Smart motion inside words - use { + use { -- Easy comment 'terrortylor/nvim-comment', config = function() require'nvim_comment'.setup() end } - use{ + use{ -- Auto complete pairs symbols 'windwp/nvim-autopairs', config = function() require'plugins.nvim-autopairs' end } - use{ + use{ -- Autoclose and autorename html tag 'windwp/nvim-ts-autotag', config = function() require'plugins.nvim-ts-autotag' end } - use{ -- snippet engine + use{ -- Snippet engine "L3MON4D3/LuaSnip", config = function() require("luasnip.loaders.from_vscode").lazy_load({paths = "~/.config/nvim/my_snippets"}) end } - use("inkarkat/vim-ReplaceWithRegister") -- replace with register contents using motion (gr + motion) - use("jose-elias-alvarez/typescript.nvim") -- additional functionality for typescript server (e.g. rename file & update imports) - use 'nelstrom/vim-visual-star-search' + use("inkarkat/vim-ReplaceWithRegister") -- Replace with register contents using motion (gr + motion) + use("jose-elias-alvarez/typescript.nvim") -- Additional functionality for typescript server (e.g. rename file & update imports) + use 'nelstrom/vim-visual-star-search' -- Search based selection -- -- COMPLETION - use{ -- autocompletion + use{ -- Completion engine 'hrsh7th/nvim-cmp', config = function() require'plugins.nvim-cmp' end } - use("saadparwaiz1/cmp_luasnip") -- snippet autocompletion - use("hrsh7th/cmp-nvim-lsp") -- for autocompletion - use("hrsh7th/cmp-buffer") -- source for text in buffer - use("hrsh7th/cmp-path") -- source for file system paths - -- managing & installing lsp servers, linters & formatters + use("saadparwaiz1/cmp_luasnip") -- Snippet autocompletion + use("hrsh7th/cmp-nvim-lsp") -- For autocompletion + use("hrsh7th/cmp-buffer") -- Source for text in buffer + use("hrsh7th/cmp-path") -- Source for file system paths -- -- GIT use 'tpope/vim-fugitive' -- Git commands - use { + use { -- Git symbols in gutter & jump and handle hunks 'lewis6991/gitsigns.nvim', config = function() require'plugins.gitsigns' end } -- NAVIGATION - use { -- need neovim > 0.8 + use { -- File explorer neovim > 0.8 'kyazdani42/nvim-tree.lua', opt = true, requires = { @@ -117,28 +116,28 @@ return require('packer').startup(function(use) cmd = {'NvimTreeToggle', 'NvimTreeFindFile'}, config = function() require'plugins.tree' end } - use { + use { -- Fuzzy finder 'nvim-telescope/telescope.nvim', tag = '0.1.0', requires = {'nvim-lua/plenary.nvim'}, config = function() require'plugins.telescope' end } - use("christoomey/vim-tmux-navigator") -- tmux & split window navigation + use("christoomey/vim-tmux-navigator") -- Tmux & split window navigation -- UI - use { + use { -- Themes 'navarasu/onedark.nvim', config = function() require'plugins.onedark' end } - use { -- status line + use { -- Status line 'feline-nvim/feline.nvim', branch = '0.5-compat', config = function() require'plugins.feline' end } - use("sangdol/mintabline.vim") - use 'kyazdani42/nvim-web-devicons' + use("sangdol/mintabline.vim") -- Add symbol in tab + use 'kyazdani42/nvim-web-devicons' -- Icons use("onsails/lspkind.nvim") -- vs-code like icons for autocompletion - use 'junegunn/goyo.vim' + use 'junegunn/goyo.vim' -- Distraction free visualisation if packer_bootstrap then require("packer").sync() From 6ffcabe5540b5df6d2ff24a0f228d48c1710abfc Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 14 Jan 2023 11:47:27 +0100 Subject: [PATCH 059/130] Plugins - Add easy align --- README.md | 3 +++ lua/mapping.lua | 25 ++++++++++++++----------- lua/plugins.lua | 35 ++++++++++++++++++----------------- 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 7ed1bc9..0931018 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,9 @@ and some plugin need **0.7** version. - `oi` organize imports - `ru` remove unused variables +#### Easy align +- `=` interactively align selection + ## Some resources - https://teukka.tech/luanvim.html diff --git a/lua/mapping.lua b/lua/mapping.lua index 39a53bc..5142be5 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -7,23 +7,26 @@ local noremap = {noremap = true} map('n', '+', '', noremap) map('n', '-', '', noremap) -map('n', 'o', ":on", noremap) -map('n', 'w', ":q", noremap) -map('n', 'q', ":qa", noremap) +map('n', 'o', ':on', noremap) +map('n', 'w', ':q', noremap) +map('n', 'q', ':qa', noremap) map('n', '', ':e!', noremap) map('n', 'e', ':NvimTreeToggle', noremap) -- Goyo -map('n', 'g', ":Goyo ", noremap) +map('n', 'g', ':Goyo ', noremap) -- Telescope -map('n', 'ff', ":Telescope find_files prompt_prefix= 🔍  find_command=rg,--ignore,--hidden,--files ", noremap) -map('n', 'fg', ":Telescope git_files prompt_prefix=  ", noremap) -map('n', 'ft', ":Telescope help_tags prompt_prefix=  ", noremap) +map('n', 'ff', ':Telescope find_files prompt_prefix= 🔍  find_command=rg,--ignore,--hidden,--files ', noremap) +map('n', 'fg', ':Telescope git_files prompt_prefix=  ', noremap) +map('n', 'ft', ':Telescope help_tags prompt_prefix=  ', noremap) -- Vim-tmux-navigator -map('n', "", ":TmuxNavigateLeft", noremap) -map('n', "", ":TmuxNavigateDown", noremap) -map('n', "", ":TmuxNavigateUp", noremap) -map('n', "", ":TmuxNavigateRight", noremap) +map('n', '', ':TmuxNavigateLeft', noremap) +map('n', '', ':TmuxNavigateDown', noremap) +map('n', '', ':TmuxNavigateUp', noremap) +map('n', '', ':TmuxNavigateRight', noremap) + +-- Vim-easy-align +map('v', '=', ':LiveEasyAlign', noremap) diff --git a/lua/plugins.lua b/lua/plugins.lua index 4fc4d48..78722e9 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -25,20 +25,20 @@ return require('packer').startup(function(use) use 'wbthomason/packer.nvim' -- Plugin manager use 'lewis6991/impatient.nvim' -- Speed up neovim use{ -- Configuring lsp servers - "neovim/nvim-lspconfig", + 'neovim/nvim-lspconfig', config = function() require'plugins.nvim-lspconfig' end } use{ -- Install and manage LSP servers, DAP servers, linters, and formatters - "williamboman/mason.nvim", + 'williamboman/mason.nvim', config = function() require'mason'.setup() end } use{ -- Bridges mason.nvim with the lspconfig plugin - "williamboman/mason-lspconfig.nvim", + 'williamboman/mason-lspconfig.nvim', config = function() require'plugins.mason-lspconfig' end } use{ -- Light-weight lsp plugin based on neovim's built-in lsp - "glepnir/lspsaga.nvim", - branch = "main", + 'glepnir/lspsaga.nvim', + branch = 'main', config = function() require'plugins.lspsaga-nvim' end } @@ -80,24 +80,25 @@ return require('packer').startup(function(use) config = function() require'plugins.nvim-ts-autotag' end } use{ -- Snippet engine - "L3MON4D3/LuaSnip", + 'L3MON4D3/LuaSnip', config = function() - require("luasnip.loaders.from_vscode").lazy_load({paths = "~/.config/nvim/my_snippets"}) + require('luasnip.loaders.from_vscode').lazy_load({paths = '~/.config/nvim/my_snippets'}) end } - use("inkarkat/vim-ReplaceWithRegister") -- Replace with register contents using motion (gr + motion) - use("jose-elias-alvarez/typescript.nvim") -- Additional functionality for typescript server (e.g. rename file & update imports) + use('inkarkat/vim-ReplaceWithRegister') -- Replace with register contents using motion (gr + motion) + use('jose-elias-alvarez/typescript.nvim') -- Additional functionality for typescript server (e.g. rename file & update imports) use 'nelstrom/vim-visual-star-search' -- Search based selection + use 'junegunn/vim-easy-align' -- -- COMPLETION use{ -- Completion engine 'hrsh7th/nvim-cmp', config = function() require'plugins.nvim-cmp' end } - use("saadparwaiz1/cmp_luasnip") -- Snippet autocompletion - use("hrsh7th/cmp-nvim-lsp") -- For autocompletion - use("hrsh7th/cmp-buffer") -- Source for text in buffer - use("hrsh7th/cmp-path") -- Source for file system paths + use('saadparwaiz1/cmp_luasnip') -- Snippet autocompletion + use('hrsh7th/cmp-nvim-lsp') -- For autocompletion + use('hrsh7th/cmp-buffer') -- Source for text in buffer + use('hrsh7th/cmp-path') -- Source for file system paths -- -- GIT use 'tpope/vim-fugitive' -- Git commands @@ -122,7 +123,7 @@ return require('packer').startup(function(use) requires = {'nvim-lua/plenary.nvim'}, config = function() require'plugins.telescope' end } - use("christoomey/vim-tmux-navigator") -- Tmux & split window navigation + use('christoomey/vim-tmux-navigator') -- Tmux & split window navigation -- UI use { -- Themes @@ -134,12 +135,12 @@ return require('packer').startup(function(use) branch = '0.5-compat', config = function() require'plugins.feline' end } - use("sangdol/mintabline.vim") -- Add symbol in tab + use('sangdol/mintabline.vim') -- Add symbol in tab use 'kyazdani42/nvim-web-devicons' -- Icons - use("onsails/lspkind.nvim") -- vs-code like icons for autocompletion + use('onsails/lspkind.nvim') -- vs-code like icons for autocompletion use 'junegunn/goyo.vim' -- Distraction free visualisation if packer_bootstrap then - require("packer").sync() + require('packer').sync() end end) From 0847fb96c4399d0e4a85517077f5b0b8312619a8 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 24 Jan 2023 16:35:27 +0100 Subject: [PATCH 060/130] Config - Delete unnecessaries parentheses --- lua/plugins.lua | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 78722e9..05d8150 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -85,8 +85,8 @@ return require('packer').startup(function(use) require('luasnip.loaders.from_vscode').lazy_load({paths = '~/.config/nvim/my_snippets'}) end } - use('inkarkat/vim-ReplaceWithRegister') -- Replace with register contents using motion (gr + motion) - use('jose-elias-alvarez/typescript.nvim') -- Additional functionality for typescript server (e.g. rename file & update imports) + use 'inkarkat/vim-ReplaceWithRegister' -- Replace with register contents using motion (gr + motion) + use 'jose-elias-alvarez/typescript.nvim' -- Additional functionality for typescript server (e.g. rename file & update imports) use 'nelstrom/vim-visual-star-search' -- Search based selection use 'junegunn/vim-easy-align' @@ -95,10 +95,10 @@ return require('packer').startup(function(use) 'hrsh7th/nvim-cmp', config = function() require'plugins.nvim-cmp' end } - use('saadparwaiz1/cmp_luasnip') -- Snippet autocompletion - use('hrsh7th/cmp-nvim-lsp') -- For autocompletion - use('hrsh7th/cmp-buffer') -- Source for text in buffer - use('hrsh7th/cmp-path') -- Source for file system paths + use 'saadparwaiz1/cmp_luasnip' -- Snippet autocompletion + use 'hrsh7th/cmp-nvim-lsp' -- For autocompletion + use 'hrsh7th/cmp-buffer' -- Source for text in buffer + use 'hrsh7th/cmp-path' -- Source for file system paths -- -- GIT use 'tpope/vim-fugitive' -- Git commands @@ -123,7 +123,7 @@ return require('packer').startup(function(use) requires = {'nvim-lua/plenary.nvim'}, config = function() require'plugins.telescope' end } - use('christoomey/vim-tmux-navigator') -- Tmux & split window navigation + use 'christoomey/vim-tmux-navigator' -- Tmux & split window navigation -- UI use { -- Themes @@ -135,9 +135,9 @@ return require('packer').startup(function(use) branch = '0.5-compat', config = function() require'plugins.feline' end } - use('sangdol/mintabline.vim') -- Add symbol in tab + use 'sangdol/mintabline.vim' -- Add symbol in tab use 'kyazdani42/nvim-web-devicons' -- Icons - use('onsails/lspkind.nvim') -- vs-code like icons for autocompletion + use 'onsails/lspkind.nvim' -- vs-code like icons for autocompletion use 'junegunn/goyo.vim' -- Distraction free visualisation if packer_bootstrap then From 4f0f91052b664cc0f5d7d7418eb2ffb49c993941 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 24 Jan 2023 16:44:39 +0100 Subject: [PATCH 061/130] Remove dead code --- lua/options.lua | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index 91827aa..42e1a5b 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -57,18 +57,6 @@ opt.cursorline = true -- Clipboard opt.clipboard:append('unnamedplus') -function toggleThemeLight() - opt.background = opt.background == 'dark' and 'light' or 'dark' -end - -- Split opt.splitright = true opt.splitbelow = true - --- COC TODO move it in plugin file -vim.cmd([[ - function! CheckBackspace() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' - endfunction -]]) From dc134b116efbb839b60fb213364fbd0c3a3d1a24 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 24 Jan 2023 16:51:23 +0100 Subject: [PATCH 062/130] Goyo & limelight together --- lua/plugins.lua | 6 +++++- lua/plugins/goyo.lua | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 lua/plugins/goyo.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index 05d8150..50886c7 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -138,7 +138,11 @@ return require('packer').startup(function(use) use 'sangdol/mintabline.vim' -- Add symbol in tab use 'kyazdani42/nvim-web-devicons' -- Icons use 'onsails/lspkind.nvim' -- vs-code like icons for autocompletion - use 'junegunn/goyo.vim' -- Distraction free visualisation + use { -- Distraction free visualisation + 'junegunn/goyo.vim', + config = function() require'plugins.goyo' end + } + use 'junegunn/limelight.vim' -- Focus line if packer_bootstrap then require('packer').sync() diff --git a/lua/plugins/goyo.lua b/lua/plugins/goyo.lua new file mode 100644 index 0000000..c3867c5 --- /dev/null +++ b/lua/plugins/goyo.lua @@ -0,0 +1,6 @@ +vim.cmd([[ + augroup goyo_and_co + autocmd! User GoyoEnter Limelight + autocmd! User GoyoLeave Limelight! + augroup end +]]) From 9741004f1a4e90642d01e5824f93fc48ef0fccce Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 24 Jan 2023 17:13:57 +0100 Subject: [PATCH 063/130] Resolve #9 space check checkbox in markdown --- lua/mapping.lua | 6 ++++++ lua/plugins.lua | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lua/mapping.lua b/lua/mapping.lua index 5142be5..679636d 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -30,3 +30,9 @@ map('n', '', ':TmuxNavigateRight', noremap) -- Vim-easy-align map('v', '=', ':LiveEasyAlign', noremap) + +-- Mardown togglecheck +-- -- toggle checked / create checkbox if it doesn't exist +map('n', '', ":lua require('markdown-togglecheck').toggle()", noremap) +-- -- toggle checkbox (it doesn't remember toggle state and always creates [ ]) +map('n', '', ":lua require('markdown-togglecheck').toggle_box()", noremap) diff --git a/lua/plugins.lua b/lua/plugins.lua index 50886c7..ab05490 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -89,8 +89,18 @@ return require('packer').startup(function(use) use 'jose-elias-alvarez/typescript.nvim' -- Additional functionality for typescript server (e.g. rename file & update imports) use 'nelstrom/vim-visual-star-search' -- Search based selection use 'junegunn/vim-easy-align' + use({ + 'NFrid/markdown-togglecheck', + requires = 'NFrid/treesitter-utils', + config = function() + -- -- toggle checked / create checkbox if it doesn't exist + -- vim.api.nvim_set_keymap('n', 'nn', require('markdown-togglecheck').toggle) + -- -- toggle checkbox (it doesn't remember toggle state and always creates [ ]) + -- vim.api.nvim_set_keymap('n', 'nN', require('markdown-togglecheck').toggle_box) + end + }) - -- -- COMPLETION + -- COMPLETION use{ -- Completion engine 'hrsh7th/nvim-cmp', config = function() require'plugins.nvim-cmp' end From 13f3461aca062df4e236e2ae26bcfea0b4e96efc Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 1 Feb 2023 16:15:55 +0000 Subject: [PATCH 064/130] Spell - Update dicts --- spell/en.utf-8.add | 1 + spell/en.utf-8.add.spl | Bin 72 -> 86 bytes 2 files changed, 1 insertion(+) diff --git a/spell/en.utf-8.add b/spell/en.utf-8.add index 56c6237..1b87b28 100644 --- a/spell/en.utf-8.add +++ b/spell/en.utf-8.add @@ -1,3 +1,4 @@ javascript import/! entry/! +Remove/! diff --git a/spell/en.utf-8.add.spl b/spell/en.utf-8.add.spl index 161628915426db80b05c0f6906b8ae1df70c72e5..685cc7af90cbfe797d70b5d4f00dfa003d32aaaa 100644 GIT binary patch literal 86 zcmWIZ^erw(&B-zP&%nT7$ xRm7ObSi)GuSjosFz?jQez?cu@FfuUkmM|tVmH}}w cV=_=A6DU){$iSEiRFe-BPi15h0vZ7U0B0l+TL1t6 literal 72 zcmWIZ^erw(&B-zP&%nT-! Date: Wed, 1 Feb 2023 16:45:17 +0000 Subject: [PATCH 065/130] Yaml - Configure lsp and tab space --- lua/options.lua | 5 +++-- lua/plugins/mason-lspconfig.lua | 1 + lua/plugins/nvim-lspconfig.lua | 6 ++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index 42e1a5b..0c42615 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -39,10 +39,11 @@ opt.expandtab = true -- expand tab to spaces opt.autoindent = true vim.cmd([[ - augroup tab_for_python + augroup tab_for_4_spaces autocmd FileType python setlocal ts=4 sts=4 sw=4 expandtab autocmd FileType php setlocal ts=4 sts=4 sw=4 expandtab - autocmd FileType make setlocal ts=4 sts=4 sw=4 + autocmd FileType make setlocal ts=4 sts=4 sw=4 expandtab + autocmd FileType yaml setlocal ts=4 sts=4 sw=4 expandtab augroup end ]]) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index c349d38..49d2b3a 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -13,5 +13,6 @@ mason_lspconfig.setup({ 'sumneko_lua', 'tailwindcss', 'tsserver', + 'yamlls' } }) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index d298cdf..12bc45d 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -130,3 +130,9 @@ lspconfig["sqlls"].setup({ capabilities = capabilities, on_attach = on_attach, }) + +-- configure yamlls +lspconfig["yamlls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) From 07304cc904aafe5fb04e6a6be46ae2338dc36bc2 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 1 Feb 2023 21:52:11 +0000 Subject: [PATCH 066/130] Better completion for php --- lua/plugins.lua | 6 ++++++ lua/plugins/mason-lspconfig.lua | 3 ++- lua/plugins/nvim-lspconfig.lua | 14 +++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index ab05490..ca4b8b7 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -103,6 +103,12 @@ return require('packer').startup(function(use) -- COMPLETION use{ -- Completion engine 'hrsh7th/nvim-cmp', + requires = { + "onsails/lspkind-nvim", -- Icons on the popups + "hrsh7th/cmp-nvim-lsp", -- LSP source for nvim-cmp + "saadparwaiz1/cmp_luasnip", -- Snippets source + "L3MON4D3/LuaSnip" + }, config = function() require'plugins.nvim-cmp' end } use 'saadparwaiz1/cmp_luasnip' -- Snippet autocompletion diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index 49d2b3a..53f2d00 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -5,9 +5,10 @@ mason_lspconfig.setup({ 'dockerls', 'eslint', 'html', + 'intelephense', 'jsonls', 'marksman', - 'psalm', + 'phpactor', 'ruby_ls', 'sqlls', 'sumneko_lua', diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 12bc45d..f839e3e 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -114,9 +114,21 @@ lspconfig["marksman"].setup({ }) -- configure psalm server -lspconfig["psalm"].setup({ +lspconfig["phpactor"].setup({ capabilities = capabilities, on_attach = on_attach, + init_options = { + ["language_server_phpstan.enabled"] = false, + ["language_server_psalm.enabled"] = false, + } +}) + +lspconfig["intelephense"].setup({ + capabilities = capabilities, + on_attach = on_attach, + flags = { + debounce_text_changes = 150, + }, }) -- configure ruby_ls server From 7ea0446cba7359a0667d5e4a15e7b69e6708c7b7 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 1 Feb 2023 22:10:59 +0000 Subject: [PATCH 067/130] Update README --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0931018..29cbee5 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,9 @@ and some plugin need **0.7** version. ### Completion +Some lsp server work only inside project folder, +needing *git* or *composer*… + - `` to choose selected suggestion ### Lspsaga @@ -80,6 +83,7 @@ and some plugin need **0.7** version. - https://medium.com/linux-with-michael/a-list-of-all-my-main-neovim-plugins-8ac4ae107e16 - https://vonheikemen.github.io/devlog/tools/build-your-first-lua-config-for-neovim/ - https://github.com/josean-dev/dev-environment-files +- https://marioyepes.com/neovim-ide-with-lua-for-web-development/ ## Satisfying (trying) checkhealth @@ -119,4 +123,3 @@ git clone --depth 1 https://github.com/wbthomason/packer.nvim\ - https://www.nerdfonts.com/ - `composer` - `phpcs` - - `composer global require "squizlabs/php_codesniffer=*"` [source](https://github.com/squizlabs/PHP_CodeSniffer#composer) From b60360a2a8257a080ed6988f4e915ae863a27736 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 2 Feb 2023 16:48:00 +0100 Subject: [PATCH 068/130] Disable impatient for now --- init.lua | 2 +- lua/plugins.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/init.lua b/init.lua index bd40a5d..447fc3e 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,4 @@ -require('impatient') +-- require('impatient') -- FIXME not properly installed vim.g['python3_host_prog'] = '/usr/bin/python3' diff --git a/lua/plugins.lua b/lua/plugins.lua index ca4b8b7..1b3fa9f 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -23,7 +23,7 @@ return require('packer').startup(function(use) -- CORE use 'wbthomason/packer.nvim' -- Plugin manager - use 'lewis6991/impatient.nvim' -- Speed up neovim + -- use 'lewis6991/impatient.nvim' -- Speed up neovim use{ -- Configuring lsp servers 'neovim/nvim-lspconfig', config = function() require'plugins.nvim-lspconfig' end From b2ab69d9261fce4601a5b31d90d12728d00d6b0e Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 8 Feb 2023 19:38:29 +0100 Subject: [PATCH 069/130] Change plugin for overlength highlight --- lua/plugins.lua | 5 ++++- lua/plugins/overlength.lua | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 lua/plugins/overlength.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index 1b3fa9f..b4b1c0a 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -53,7 +53,10 @@ return require('packer').startup(function(use) 'lukas-reineke/indent-blankline.nvim', config = function() require'plugins.indent-blankline' end } - use 'tjdevries/overlength.vim' -- Highlight overlength lines + use { -- Highlight overlength lines + 'lcheylus/overlength.nvim', + config = function() require'plugins.overlength' end + } use { -- Linters 'mfussenegger/nvim-lint', requires = {'eslint/eslint', 'squizlabs/PHP_CodeSniffer'}, diff --git a/lua/plugins/overlength.lua b/lua/plugins/overlength.lua new file mode 100644 index 0000000..adddb29 --- /dev/null +++ b/lua/plugins/overlength.lua @@ -0,0 +1,33 @@ +require('overlength').setup({ + -- Overlength highlighting enabled by default + enabled = true, + + -- Colors for highlight by specifying a ctermbg and bg + -- ctermbg = 'darkgrey', + bg = '#260000', + + -- Mode to use textwidth local options + -- 0: Don't use textwidth at all, always use config.default_overlength. + -- 1: Use `textwidth, unless it's 0, then use config.default_overlength. + -- 2: Always use textwidth. There will be no highlighting where + -- textwidth == 0, unless added explicitly + textwidth_mode = 1, + -- Default overlength with no filetype + default_overlength = 120, + -- How many spaces past your overlength to start highlighting + grace_length = 1, + -- Highlight only the column or until the end of the line + highlight_to_eol = true, + + -- List of filetypes to disable overlength highlighting + disable_ft = { + 'qf', + 'help', + 'man', + 'packer', + 'NvimTree', + 'Telescope', + 'WhichKey', + 'markdown' + } +}) From cd164ffb6246b25a52fa4cca17630e025d33bc2c Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 8 Feb 2023 20:29:34 +0100 Subject: [PATCH 070/130] Lint php - Start to use another phpcs standard --- lua/plugins/nvim-lint.lua | 1 + standard.xml | 84 +-------------------------------------- 2 files changed, 3 insertions(+), 82 deletions(-) diff --git a/lua/plugins/nvim-lint.lua b/lua/plugins/nvim-lint.lua index 0522f3c..6a893a6 100644 --- a/lua/plugins/nvim-lint.lua +++ b/lua/plugins/nvim-lint.lua @@ -14,6 +14,7 @@ local phpcs = require('lint.linters.phpcs') phpcs.args = { '-q', '--standard=/home/tarik/.config/nvim/standard.xml', + '--extensions=php', '--report=json', '-' } diff --git a/standard.xml b/standard.xml index 19a8033..59af198 100644 --- a/standard.xml +++ b/standard.xml @@ -1,85 +1,5 @@ - My custom Zend coding standard. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + My custom standard. + From d6dd634feea8efcc3638816e21affc2fe913bc87 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sun, 12 Feb 2023 13:10:44 +0000 Subject: [PATCH 071/130] Add lsp server for Ruby --- lua/plugins/mason-lspconfig.lua | 1 + lua/plugins/nvim-lspconfig.lua | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index 53f2d00..7285887 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -10,6 +10,7 @@ mason_lspconfig.setup({ 'marksman', 'phpactor', 'ruby_ls', + 'solargraph', 'sqlls', 'sumneko_lua', 'tailwindcss', diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index f839e3e..f606eb9 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -137,6 +137,12 @@ lspconfig["ruby_ls"].setup({ on_attach = on_attach, }) +-- configure solargraph server +lspconfig["solargraph"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + -- configure sqlls server lspconfig["sqlls"].setup({ capabilities = capabilities, From 869dbd3912b98069245e114790d0ce955e04b363 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sun, 12 Feb 2023 13:15:49 +0000 Subject: [PATCH 072/130] Fix deprecated lsp server --- lua/plugins/mason-lspconfig.lua | 2 +- lua/plugins/nvim-lspconfig.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index 7285887..6886ef9 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -12,7 +12,7 @@ mason_lspconfig.setup({ 'ruby_ls', 'solargraph', 'sqlls', - 'sumneko_lua', + 'lua_ls', 'tailwindcss', 'tsserver', 'yamlls' diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index f606eb9..68e2de2 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -69,7 +69,7 @@ lspconfig["tailwindcss"].setup({ }) -- configure lua server (with special settings) -lspconfig["sumneko_lua"].setup({ +lspconfig["lua_ls"].setup({ capabilities = capabilities, on_attach = on_attach, settings = { -- custom settings for lua From 31bd2451618b20e61c36a39f0494ea52214a6738 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sun, 12 Feb 2023 13:29:16 +0000 Subject: [PATCH 073/130] New awesome plugin for rails from TPope --- README.md | 25 +++++++++++++++++++++++++ lua/plugins.lua | 1 + 2 files changed, 26 insertions(+) diff --git a/README.md b/README.md index 29cbee5..08fa656 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,31 @@ needing *git* or *composer*… - `oi` organize imports - `ru` remove unused variables +#### Ruby On Rails specific + +- `:A` alternate between file & test +- `:R` jump to related controller->view +- `:Emodel` jump to related model +- `:Smodel` same but in split +- `:Vmodel` same but in vsplit +- `:Tmodel` same but in tab +- `:Eview` jump to related view +- `:Sview` same but in split +- `:Vview` same but in vsplit +- `:Tview` same but in tab +- `:Econtroller` jump to related controller +- `:Scontroller` same but in split +- `:Vcontroller` same but in vsplit +- `:Tcontroller` same but in tab +- `:Emodel foo!` to automatically create the file with the standard boilerplate if it doesn't exist +- `:Rails console` to call `rails console` +- `:Generate controller ControllerName` generate controller and loads the generated files into the quickfix list +- `:Rails` (with no arguments) to run the current test, spec, or feature +- `:.Rails` to do a focused run of just the method, example, or scenario on the current line +- `:Extract {file}` replaces the desired range (typically selected in visual line mode) with render '{file}' + - `help rails-:Extract` +- `:help rails-navigation` + #### Easy align - `=` interactively align selection diff --git a/lua/plugins.lua b/lua/plugins.lua index b4b1c0a..4eb0636 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -62,6 +62,7 @@ return require('packer').startup(function(use) requires = {'eslint/eslint', 'squizlabs/PHP_CodeSniffer'}, config = function() require'plugins.nvim-lint' end } + use 'tpope/vim-rails' -- EDITING use { -- Surround selections From 18eb394181d654f3d8d592c532456db537c207e3 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sun, 12 Feb 2023 13:42:03 +0000 Subject: [PATCH 074/130] Add end wise plugin --- lua/plugins.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lua/plugins.lua b/lua/plugins.lua index 4eb0636..325ec90 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -63,6 +63,15 @@ return require('packer').startup(function(use) config = function() require'plugins.nvim-lint' end } use 'tpope/vim-rails' + use { + 'RRethy/nvim-treesitter-endwise', + config = function() require'nvim-treesitter.configs'.setup { + endwise = { + enable = true, + } + } + end + } -- EDITING use { -- Surround selections From d7cb1d28396835ed4596a619862e5f9038f9e16c Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sun, 12 Feb 2023 13:59:46 +0000 Subject: [PATCH 075/130] Fix back indent on insert period --- lua/plugins/treesitter.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua index ef612cd..e3c9aec 100644 --- a/lua/plugins/treesitter.lua +++ b/lua/plugins/treesitter.lua @@ -11,7 +11,10 @@ treesitter.setup { enable = true, }, -- enable indentation - indent = {enable = true}, + indent = { + enable = true, + disable = { 'ruby' } + }, -- enable autotagging (w/ nvim-ts-autotag plugin) autotag = {enable = true}, -- ensure these language parsers are installed From fe0c09513bf46e7cf1daae0c34c7b7014a934ed2 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sun, 12 Feb 2023 14:28:50 +0000 Subject: [PATCH 076/130] Configure live filter of nvim-tree --- lua/plugins/tree.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lua/plugins/tree.lua b/lua/plugins/tree.lua index 1b382ff..f88daa9 100644 --- a/lua/plugins/tree.lua +++ b/lua/plugins/tree.lua @@ -3,6 +3,10 @@ require('nvim-tree').setup { dotfiles = false, custom = {'.git'} }, - open_on_tab = true, - hijack_cursor = true + open_on_tab = true, -- Keep tree on new tab + hijack_cursor = true, -- Keeps the cursor on the first letter of the filename when moving in the tree. + live_filter = { + prefix = "[] ", + always_show_folders = false + } } From 1a0c0ebc23e55e494ae5757a3e84bf1a67d7fca2 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sun, 12 Feb 2023 16:41:47 +0000 Subject: [PATCH 077/130] New plugin for start screen --- lua/plugins.lua | 6 +++++ lua/plugins/dashboard.lua | 48 ++++++++++++++++++++++++++++++++++++++ lua/plugins/overlength.lua | 3 ++- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 lua/plugins/dashboard.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index 325ec90..5c806e0 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -153,6 +153,12 @@ return require('packer').startup(function(use) config = function() require'plugins.telescope' end } use 'christoomey/vim-tmux-navigator' -- Tmux & split window navigation + use { + 'glepnir/dashboard-nvim', + event = 'VimEnter', + config = function() require'plugins.dashboard' end, + requires = {'nvim-tree/nvim-web-devicons'} + } -- UI use { -- Themes diff --git a/lua/plugins/dashboard.lua b/lua/plugins/dashboard.lua new file mode 100644 index 0000000..b574e7a --- /dev/null +++ b/lua/plugins/dashboard.lua @@ -0,0 +1,48 @@ +require('dashboard').setup { + theme = 'hyper', + config = { + week_header = { + enable = true + }, + shortcut = { + { + icon = '', + desc = ' Neovim', + action = 'vim.cmd("cd ~/.config/nvim | edit README.md | NvimTreeToggle")', + key = 'n' + }, + { + icon = '', + desc = ' Zsh', + action = 'vim.cmd("cd ~/.config/zsh | edit README.md | NvimTreeToggle")', + key = 'z' + }, + { + icon = '', + desc = ' Tmux', + action = 'vim.cmd("cd ~/.config/tmux | edit README.md | NvimTreeToggle")', + key = 't' + }, + { + icon = '龎', + desc = ' Docs', + action = 'vim.cmd("cd ~/.local/docs | edit README.md | NvimTreeToggle")', + key = 'd' + }, + }, + packages = { + enable = false + }, + project = { + limit = 3, + icon = '', + label = '', + action = 'Telescope find_files cwd=' + }, + footer = { + '', + '"La porte du changement ne peut s’ouvrir que de l’intérieur."', + 'Jacques Salomé' + } + } +} diff --git a/lua/plugins/overlength.lua b/lua/plugins/overlength.lua index adddb29..84ed7f0 100644 --- a/lua/plugins/overlength.lua +++ b/lua/plugins/overlength.lua @@ -28,6 +28,7 @@ require('overlength').setup({ 'NvimTree', 'Telescope', 'WhichKey', - 'markdown' + 'markdown', + 'dashboard' } }) From 42645eaf4fe103985f4c5e6b2e97dcf6cb572ba1 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 13 Feb 2023 23:42:05 +0000 Subject: [PATCH 078/130] Ruby add lint too --- lua/plugins/nvim-lint.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/plugins/nvim-lint.lua b/lua/plugins/nvim-lint.lua index 6a893a6..cb6db3d 100644 --- a/lua/plugins/nvim-lint.lua +++ b/lua/plugins/nvim-lint.lua @@ -24,7 +24,8 @@ lint.linters_by_ft = { javascript = {'eslint'}, typescript = {'eslint'}, typescriptreact = {'eslint'}, - php = {'phpcs'} + php = {'phpcs'}, + ruby = {'ruby'} } vim.cmd('autocmd BufEnter,BufWritePost,InsertLeave * lua require("lint").try_lint()') From ac22a2ed64d98718e7a2e02014abde74946267e1 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 18 Feb 2023 15:06:59 +0100 Subject: [PATCH 079/130] Update translation --- spell/en.utf-8.add | 1 + spell/en.utf-8.add.spl | Bin 86 -> 111 bytes 2 files changed, 1 insertion(+) diff --git a/spell/en.utf-8.add b/spell/en.utf-8.add index 1b87b28..84dd1bc 100644 --- a/spell/en.utf-8.add +++ b/spell/en.utf-8.add @@ -2,3 +2,4 @@ javascript import/! entry/! Remove/! +$parameters/! diff --git a/spell/en.utf-8.add.spl b/spell/en.utf-8.add.spl index 685cc7af90cbfe797d70b5d4f00dfa003d32aaaa..b419652de1356ce436e801a338b3e2bf0dd2fcac 100644 GIT binary patch delta 74 zcmWH`cM0?KEiOpS$uauRz`)?gs*;+SRm51pn8;WJ#JP;Aj3q!^#8}M8B*2&l0WEiOpS$uauRz`$V1lA4)S#F)oe!dS#u$;c$Yn9Eqem=EMIGBEH?bkPO? DRtO8q From e012fbaed301933c254680c08ba79cdef9373c1c Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 25 Feb 2023 09:55:47 +0000 Subject: [PATCH 080/130] LSP - Add volar lsp server for Vue --- lua/plugins/mason-lspconfig.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index 6886ef9..040ef55 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -15,6 +15,7 @@ mason_lspconfig.setup({ 'lua_ls', 'tailwindcss', 'tsserver', + 'volar', 'yamlls' } }) From f8adb162a85593d1edccc9f5c632bffe0702d801 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 25 Feb 2023 10:12:59 +0000 Subject: [PATCH 081/130] Vue.js - configure volar lsp config --- lua/plugins/nvim-lspconfig.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 68e2de2..d86bad4 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -35,8 +35,7 @@ end local capabilities = cmp_nvim_lsp.default_capabilities() -- Change the Diagnostic symbols in the sign column (gutter) --- (not in youtube nvim video) -local signs = { Error = " ", Warn = " ", Hint = "😒", Info = " " } +local signs = { Error = " ", Warn = " ", Hint = "󰋇 ", Info = " " } for type, icon in pairs(signs) do local hl = "DiagnosticSign" .. type vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) @@ -154,3 +153,9 @@ lspconfig["yamlls"].setup({ capabilities = capabilities, on_attach = on_attach, }) + +-- configure volar +lspconfig["volar"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) From dfa87cd779b6935996d850a2748f63b0d124042a Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 11 Apr 2023 14:53:27 +0200 Subject: [PATCH 082/130] Telescope - Add map to search with grep --- README.md | 1 + lua/mapping.lua | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 08fa656..44957a2 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ and some plugin need **0.7** version. - `ff` find file - `fg` find file with git - `ft` find file with tag +- `fgg` find file with grep ### Saga diff --git a/lua/mapping.lua b/lua/mapping.lua index 679636d..e995699 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -20,6 +20,7 @@ map('n', 'g', ':Goyo ', noremap) -- Telescope map('n', 'ff', ':Telescope find_files prompt_prefix= 🔍  find_command=rg,--ignore,--hidden,--files ', noremap) map('n', 'fg', ':Telescope git_files prompt_prefix=  ', noremap) +map('n', 'fgg', ':Telescope live_grep prompt_prefix= 🔎 ', noremap) map('n', 'ft', ':Telescope help_tags prompt_prefix=  ', noremap) -- Vim-tmux-navigator From 1274646f83bcf727e19064a2366dc78fab24c21a Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 20 Apr 2023 11:04:42 +0200 Subject: [PATCH 083/130] Update spell --- spell/en.utf-8.add | 1 + spell/en.utf-8.add.spl | Bin 111 -> 122 bytes 2 files changed, 1 insertion(+) diff --git a/spell/en.utf-8.add b/spell/en.utf-8.add index 84dd1bc..eefd4c1 100644 --- a/spell/en.utf-8.add +++ b/spell/en.utf-8.add @@ -3,3 +3,4 @@ import/! entry/! Remove/! $parameters/! +class/! diff --git a/spell/en.utf-8.add.spl b/spell/en.utf-8.add.spl index b419652de1356ce436e801a338b3e2bf0dd2fcac..f6dd997d7ce86cb4d8b0658aea2da66c157a835c 100644 GIT binary patch delta 61 zcmd0=5)AY7EiOpS$uauRz`zj7rjk5SKt?HtF_DpxfkCpEF^{o?u?WPLu4K$*EMUxs J@+P`y0|3<~4Iuyk delta 50 zcmb=*7YOt8EiOpS$uauRz`)?gsxnbfMk0@~gt3T`k%2*~k};RDfH5D+o9M3%08P*f ASO5S3 From 5387ba9797d0a026e4ab783300e7b1a4d83fb898 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 13 Jun 2023 16:55:48 +0200 Subject: [PATCH 084/130] Nvim - Handle mixed types (css, js) with ruby templates (erb) --- lua/options.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lua/options.lua b/lua/options.lua index 0c42615..723fa9c 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -45,6 +45,11 @@ vim.cmd([[ autocmd FileType make setlocal ts=4 sts=4 sw=4 expandtab autocmd FileType yaml setlocal ts=4 sts=4 sw=4 expandtab augroup end + + augroup un_explicit_files + autocmd BufRead,BufNewFile *.js.erb setfiletype javascript + autocmd BufRead,BufNewFile *.css.erb setfiletype css + augroup end ]]) -- Backspace From 4a9de739fc5835793e19d4e431d5eda1d01c088f Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 13 Jun 2023 16:56:51 +0200 Subject: [PATCH 085/130] Nvim - Update dict --- spell/en.utf-8.add | 2 ++ spell/en.utf-8.add.spl | Bin 122 -> 134 bytes 2 files changed, 2 insertions(+) diff --git a/spell/en.utf-8.add b/spell/en.utf-8.add index eefd4c1..a0b2e24 100644 --- a/spell/en.utf-8.add +++ b/spell/en.utf-8.add @@ -4,3 +4,5 @@ entry/! Remove/! $parameters/! class/! +if/! +cci/! diff --git a/spell/en.utf-8.add.spl b/spell/en.utf-8.add.spl index f6dd997d7ce86cb4d8b0658aea2da66c157a835c..e5f893c8f12e120f1bf2be5e5a645f357a6b732b 100644 GIT binary patch delta 60 zcmb Date: Wed, 14 Jun 2023 11:20:18 +0200 Subject: [PATCH 086/130] Filetypes - Fix multiple types --- lua/options.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index 723fa9c..7543b32 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -47,8 +47,8 @@ vim.cmd([[ augroup end augroup un_explicit_files - autocmd BufRead,BufNewFile *.js.erb setfiletype javascript - autocmd BufRead,BufNewFile *.css.erb setfiletype css + autocmd BufRead,BufNewFile *.js.erb setfiletype javascript.erb + autocmd BufRead,BufNewFile *.css.erb setfiletype css.erb augroup end ]]) From 1e500df3b37f97b99edd85a3c4c1aa4a997699af Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 14 Aug 2023 11:14:58 +0200 Subject: [PATCH 087/130] Explorer - Change plugin --- lua/mapping.lua | 2 +- lua/plugins.lua | 14 +++++++------- lua/plugins/tree.lua | 12 ------------ 3 files changed, 8 insertions(+), 20 deletions(-) delete mode 100644 lua/plugins/tree.lua diff --git a/lua/mapping.lua b/lua/mapping.lua index e995699..ed6b440 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -12,7 +12,7 @@ map('n', 'w', ':q', noremap) map('n', 'q', ':qa', noremap) map('n', '', ':e!', noremap) -map('n', 'e', ':NvimTreeToggle', noremap) +map('n', 'e', ':Neotree toggle', noremap) -- Goyo map('n', 'g', ':Goyo ', noremap) diff --git a/lua/plugins.lua b/lua/plugins.lua index 5c806e0..2b5f350 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -137,14 +137,14 @@ return require('packer').startup(function(use) } -- NAVIGATION - use { -- File explorer neovim > 0.8 - 'kyazdani42/nvim-tree.lua', - opt = true, + use { + 'nvim-neo-tree/neo-tree.nvim', + branch = "v3.x", requires = { - 'kyazdani42/nvim-web-devicons', - }, - cmd = {'NvimTreeToggle', 'NvimTreeFindFile'}, - config = function() require'plugins.tree' end + 'nvim-lua/plenary.nvim', + 'nvim-tree/nvim-web-devicons', + 'MunifTanjim/nui.nvim' + } } use { -- Fuzzy finder 'nvim-telescope/telescope.nvim', diff --git a/lua/plugins/tree.lua b/lua/plugins/tree.lua deleted file mode 100644 index f88daa9..0000000 --- a/lua/plugins/tree.lua +++ /dev/null @@ -1,12 +0,0 @@ -require('nvim-tree').setup { - filters = { - dotfiles = false, - custom = {'.git'} - }, - open_on_tab = true, -- Keep tree on new tab - hijack_cursor = true, -- Keeps the cursor on the first letter of the filename when moving in the tree. - live_filter = { - prefix = "[] ", - always_show_folders = false - } -} From 598e44f9883eccb34e891d3450c7e7d3f3a657f2 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 14 Aug 2023 11:17:33 +0200 Subject: [PATCH 088/130] CORE - Do not track spell folder anymore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 47ad858..c9d442c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ plugin/* +spell/* From df2a0e36c04729db6406d612f0e09e6382f44ca2 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 14 Aug 2023 11:26:15 +0200 Subject: [PATCH 089/130] Mason - Fix mason lsp configuration --- lua/plugins.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/plugins.lua b/lua/plugins.lua index 2b5f350..88875c4 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -33,7 +33,9 @@ return require('packer').startup(function(use) config = function() require'mason'.setup() end } use{ -- Bridges mason.nvim with the lspconfig plugin + 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', + 'neovim/nvim-lspconfig', config = function() require'plugins.mason-lspconfig' end } use{ -- Light-weight lsp plugin based on neovim's built-in lsp From 7e262b031166ecea7fff5386a274ddf3f7be83cf Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 14 Aug 2023 17:45:26 +0200 Subject: [PATCH 090/130] Tint - New plugin to tint unfocused buffer --- lua/plugins.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lua/plugins.lua b/lua/plugins.lua index 88875c4..f51c00a 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -180,6 +180,10 @@ return require('packer').startup(function(use) config = function() require'plugins.goyo' end } use 'junegunn/limelight.vim' -- Focus line + use { + 'levouh/tint.nvim', + config = function() require'tint'.setup() end + } if packer_bootstrap then require('packer').sync() From 96e61d0fb2bbb9f60687e7e78bcb39298850ae8f Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 14 Aug 2023 17:56:13 +0200 Subject: [PATCH 091/130] SmartOpen - Start to use & test it --- lua/plugins.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lua/plugins.lua b/lua/plugins.lua index f51c00a..54fd891 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -154,6 +154,16 @@ return require('packer').startup(function(use) requires = {'nvim-lua/plenary.nvim'}, config = function() require'plugins.telescope' end } + use { + 'danielfalk/smart-open.nvim', + branch = '0.2.x', + config = function() + require'telescope'.load_extension('smart_open') + end, + requires = { + {'kkharji/sqlite.lua'} + } + } use 'christoomey/vim-tmux-navigator' -- Tmux & split window navigation use { 'glepnir/dashboard-nvim', From 324cb9208b934c33977d80bbed41ab85c35a3acc Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 15 Aug 2023 00:56:20 +0200 Subject: [PATCH 092/130] Mason & lspconfig - Fix lspconfig loaded twice --- lua/plugins.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 54fd891..c0d0064 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -33,9 +33,7 @@ return require('packer').startup(function(use) config = function() require'mason'.setup() end } use{ -- Bridges mason.nvim with the lspconfig plugin - 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', - 'neovim/nvim-lspconfig', config = function() require'plugins.mason-lspconfig' end } use{ -- Light-weight lsp plugin based on neovim's built-in lsp @@ -150,7 +148,7 @@ return require('packer').startup(function(use) } use { -- Fuzzy finder 'nvim-telescope/telescope.nvim', - tag = '0.1.0', + tag = '0.1.2', requires = {'nvim-lua/plenary.nvim'}, config = function() require'plugins.telescope' end } From 4faffa1587eef346a5d3dbcbfbeaab029e9e0fdc Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 15 Aug 2023 00:57:15 +0200 Subject: [PATCH 093/130] Bekaboo - Configure it as optional, waiting 0.10 version of neovim --- lua/plugins.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lua/plugins.lua b/lua/plugins.lua index c0d0064..1272049 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -146,6 +146,11 @@ return require('packer').startup(function(use) 'MunifTanjim/nui.nvim' } } + use { + 'Bekaboo/dropbar.nvim', + -- disable = true + opt = true -- optional + } use { -- Fuzzy finder 'nvim-telescope/telescope.nvim', tag = '0.1.2', From 7d9347e1e7a8a98feda2b8ab76d3366a36451fb8 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 15 Aug 2023 00:58:04 +0200 Subject: [PATCH 094/130] Forgotten comment --- lua/plugins.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 1272049..a28cc99 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -157,7 +157,7 @@ return require('packer').startup(function(use) requires = {'nvim-lua/plenary.nvim'}, config = function() require'plugins.telescope' end } - use { + use { -- Smarter fuzzy finder 'danielfalk/smart-open.nvim', branch = '0.2.x', config = function() From 8827792ad782b5681fc3932d77886561db17cee1 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 1 Sep 2023 10:50:35 +0200 Subject: [PATCH 095/130] Mason: Fix duplicate mason use? --- lua/plugins.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/plugins.lua b/lua/plugins.lua index a28cc99..17e6814 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -33,6 +33,7 @@ return require('packer').startup(function(use) config = function() require'mason'.setup() end } use{ -- Bridges mason.nvim with the lspconfig plugin + "williamboman/mason.nvim", 'williamboman/mason-lspconfig.nvim', config = function() require'plugins.mason-lspconfig' end } From 4cd391699ee85703c3ab468af2df81a845bf0cdc Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 7 Nov 2023 10:58:01 +0100 Subject: [PATCH 096/130] Indent-blankline: Show blank line with space --- lua/plugins/indent-blankline.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/plugins/indent-blankline.lua b/lua/plugins/indent-blankline.lua index 2d61543..22e4e5d 100644 --- a/lua/plugins/indent-blankline.lua +++ b/lua/plugins/indent-blankline.lua @@ -2,6 +2,6 @@ require("indent_blankline").setup { char = '┆', show_current_context = true, -- globally enable or not show_current_context_start = true, -- signature (or just start object) context - show_trailing_blankline_indent = false, + show_trailing_blankline_indent = true, show_first_indent_level= false, } From c22b487348f779f8549112c4eaddbf0d19a8e58d Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 15 Nov 2023 15:33:58 +0000 Subject: [PATCH 097/130] Python: configure lsp & linter --- lua/plugins/mason-lspconfig.lua | 6 +++++- lua/plugins/nvim-lspconfig.lua | 22 +++++++--------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index 040ef55..f3883bf 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -7,15 +7,19 @@ mason_lspconfig.setup({ 'html', 'intelephense', 'jsonls', + 'lua_ls', 'marksman', 'phpactor', + 'pylsp', 'ruby_ls', 'solargraph', 'sqlls', - 'lua_ls', 'tailwindcss', 'tsserver', 'volar', 'yamlls' + }, + pip = { + upgrade_pip = true } }) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index d86bad4..8b4f139 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -41,13 +41,13 @@ for type, icon in pairs(signs) do vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) end --- configure html server +-- Lsp list: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md + lspconfig["html"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure typescript server with plugin typescript.setup({ server = { capabilities = capabilities, @@ -55,19 +55,16 @@ typescript.setup({ }, }) --- configure css server lspconfig["cssls"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure tailwindcss server lspconfig["tailwindcss"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure lua server (with special settings) lspconfig["lua_ls"].setup({ capabilities = capabilities, on_attach = on_attach, @@ -88,31 +85,26 @@ lspconfig["lua_ls"].setup({ }, }) --- configure dockerls server lspconfig["dockerls"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure eslint server lspconfig["eslint"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure jsonls server lspconfig["jsonls"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure marksman server lspconfig["marksman"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure psalm server lspconfig["phpactor"].setup({ capabilities = capabilities, on_attach = on_attach, @@ -130,32 +122,32 @@ lspconfig["intelephense"].setup({ }, }) --- configure ruby_ls server lspconfig["ruby_ls"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure solargraph server lspconfig["solargraph"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure sqlls server lspconfig["sqlls"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure yamlls lspconfig["yamlls"].setup({ capabilities = capabilities, on_attach = on_attach, }) --- configure volar lspconfig["volar"].setup({ capabilities = capabilities, on_attach = on_attach, }) + +lspconfig["pylsp"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) From 6c8ead29513a654a47c7e370f5dbb39e3520a0a3 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 17 Nov 2023 15:45:41 +0100 Subject: [PATCH 098/130] Show readme in a popup - Paste example --- lua/options.lua | 41 +++++++++++++++++++++++++++++++++++++++++ lua/plugins.lua | 1 + 2 files changed, 42 insertions(+) diff --git a/lua/options.lua b/lua/options.lua index 7543b32..e3c4eb6 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -66,3 +66,44 @@ opt.clipboard:append('unnamedplus') -- Split opt.splitright = true opt.splitbelow = true + +-- WIP use popup to read my neovim READM Ehttps://dev.to/____marcell/how-to-create-an-ui-menu-in-neovim-2k6a +local popup = require("plenary.popup") +local Win_id + +function ShowPopup(content, cb) + local height = 20 + local width = 30 + local borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" } + + -- TODO how to find a documentation about options? + -- https://github.com/nvim-lua/plenary.nvim/blob/master/lua/plenary/popup/init.lua + Win_id = popup.create(content, { + title = "My Neovim README", + highlight = "MyNeovimREADMEWindow", + line = math.floor(((vim.o.lines - height) / 2) - 1), + col = math.floor((vim.o.columns - width) / 2), + minwidth = width, + minheight = height, + borderchars = borderchars, + callback = cb, + }) + local buffer = vim.api.nvim_win_get_buf(Win_id) + vim.api.nvim_buf_set_keymap(buffer, "n", "q", "lua CloseMenu()", { silent=false }) +end + +function CloseMenu() + vim.api.nvim_win_close(Win_id, true) +end + +function PreviewReadme() + local content = { + "~/.config/nvim/README.md" + } + + local callback_after_click = function(_, sel) + print("it works") + end + + ShowPopup(content, callback_after_click) +end diff --git a/lua/plugins.lua b/lua/plugins.lua index 17e6814..26d033f 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -42,6 +42,7 @@ return require('packer').startup(function(use) branch = 'main', config = function() require'plugins.lspsaga-nvim' end } + use "nvim-lua/plenary.nvim" -- SYNTAX use { -- Provide a way to use the interface for tree-sitter in Neovim From 040f3e3ad6b4050c8c377993a9a45a24f20d5159 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 17 Nov 2023 22:03:18 +0000 Subject: [PATCH 099/130] Show readme in a popup - Use readme as content --- lua/options.lua | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index e3c4eb6..9b46b25 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -97,10 +97,7 @@ function CloseMenu() end function PreviewReadme() - local content = { - "~/.config/nvim/README.md" - } - + local content = vim.fn.readfile("/home/tarik/.config/nvim/README.md") local callback_after_click = function(_, sel) print("it works") end From 7ae563737334f9185eec594a5ff0ff4d0012fc4a Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 17 Nov 2023 22:19:51 +0000 Subject: [PATCH 100/130] Show readme in a popup - Set width --- lua/options.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index 9b46b25..661c948 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -73,17 +73,16 @@ local Win_id function ShowPopup(content, cb) local height = 20 - local width = 30 + local width = 60 local borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" } - -- TODO how to find a documentation about options? -- https://github.com/nvim-lua/plenary.nvim/blob/master/lua/plenary/popup/init.lua Win_id = popup.create(content, { title = "My Neovim README", highlight = "MyNeovimREADMEWindow", line = math.floor(((vim.o.lines - height) / 2) - 1), col = math.floor((vim.o.columns - width) / 2), - minwidth = width, + maxwidth = width, minheight = height, borderchars = borderchars, callback = cb, From 0c08b18ed424f7d2b051cfd3b8c50159099f1827 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 17 Nov 2023 22:24:08 +0000 Subject: [PATCH 101/130] Show readme in a popup - Map it --- lua/mapping.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/mapping.lua b/lua/mapping.lua index ed6b440..8bfb8f3 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -13,6 +13,7 @@ map('n', 'q', ':qa', noremap) map('n', '', ':e!', noremap) map('n', 'e', ':Neotree toggle', noremap) +map('n', 'r', ':lua PreviewReadme()', noremap) -- Goyo map('n', 'g', ':Goyo ', noremap) From 7d05ef3d76da8d88a02cde3e560b8f8c94449f30 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 17 Nov 2023 22:25:22 +0000 Subject: [PATCH 102/130] Show readme in a popup - Fix documentation --- lua/options.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/options.lua b/lua/options.lua index 661c948..7a67807 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -67,7 +67,8 @@ opt.clipboard:append('unnamedplus') opt.splitright = true opt.splitbelow = true --- WIP use popup to read my neovim READM Ehttps://dev.to/____marcell/how-to-create-an-ui-menu-in-neovim-2k6a +-- Preview README.md +-- Way found here: https://dev.to/____marcell/how-to-create-an-ui-menu-in-neovim-2k6a local popup = require("plenary.popup") local Win_id From 51a2bf091bd7d3db6a61d3665497900f56804844 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Sat, 18 Nov 2023 17:01:56 +0000 Subject: [PATCH 103/130] Show readme in a popup - Set height --- lua/options.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index 7a67807..42f78a0 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -57,7 +57,7 @@ opt.backspace = 'indent,eol,start' -- backspace works on every char in insert mo opt.iskeyword:append('-') opt.iskeyword:append('$') --- cursor +-- Cursor opt.cursorline = true -- Clipboard @@ -84,7 +84,7 @@ function ShowPopup(content, cb) line = math.floor(((vim.o.lines - height) / 2) - 1), col = math.floor((vim.o.columns - width) / 2), maxwidth = width, - minheight = height, + maxheight = height, borderchars = borderchars, callback = cb, }) From 60dd5d7ac196e2bf59c6544968b684b8d9f76845 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 20 Nov 2023 15:06:16 +0000 Subject: [PATCH 104/130] Show readme in a popup - Set (hardcoded) filetype to makrdown --- lua/options.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index 42f78a0..1d82406 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -70,7 +70,7 @@ opt.splitbelow = true -- Preview README.md -- Way found here: https://dev.to/____marcell/how-to-create-an-ui-menu-in-neovim-2k6a local popup = require("plenary.popup") -local Win_id +local buffer_id function ShowPopup(content, cb) local height = 20 @@ -78,7 +78,7 @@ function ShowPopup(content, cb) local borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" } -- https://github.com/nvim-lua/plenary.nvim/blob/master/lua/plenary/popup/init.lua - Win_id = popup.create(content, { + buffer_id = popup.create(content, { title = "My Neovim README", highlight = "MyNeovimREADMEWindow", line = math.floor(((vim.o.lines - height) / 2) - 1), @@ -88,12 +88,14 @@ function ShowPopup(content, cb) borderchars = borderchars, callback = cb, }) - local buffer = vim.api.nvim_win_get_buf(Win_id) + + local buffer = vim.api.nvim_win_get_buf(buffer_id) vim.api.nvim_buf_set_keymap(buffer, "n", "q", "lua CloseMenu()", { silent=false }) + vim.api.nvim_command('set ft=markdown') end function CloseMenu() - vim.api.nvim_win_close(Win_id, true) + vim.api.nvim_win_close(buffer_id, true) end function PreviewReadme() From a0e66cf6b6056ad6efc5691097b1c10ab4147606 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 20 Nov 2023 15:27:25 +0000 Subject: [PATCH 105/130] Show readme in a popup - Avoid highlight & callback --- lua/options.lua | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index 1d82406..5a5f9b7 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -80,7 +80,6 @@ function ShowPopup(content, cb) -- https://github.com/nvim-lua/plenary.nvim/blob/master/lua/plenary/popup/init.lua buffer_id = popup.create(content, { title = "My Neovim README", - highlight = "MyNeovimREADMEWindow", line = math.floor(((vim.o.lines - height) / 2) - 1), col = math.floor((vim.o.columns - width) / 2), maxwidth = width, @@ -99,10 +98,8 @@ function CloseMenu() end function PreviewReadme() - local content = vim.fn.readfile("/home/tarik/.config/nvim/README.md") - local callback_after_click = function(_, sel) - print("it works") - end + local readme_path = "/home/tarik/.config/nvim/README.md" + local content = vim.fn.readfile(readme_path) - ShowPopup(content, callback_after_click) + ShowPopup(content) end From 46f1365ef75974c33618cbc9c8788c528c12431c Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 28 Nov 2023 14:11:14 +0000 Subject: [PATCH 106/130] Indent Blank Line - Fix config --- lua/plugins.lua | 2 +- lua/plugins/indent-blankline.lua | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 lua/plugins/indent-blankline.lua diff --git a/lua/plugins.lua b/lua/plugins.lua index 26d033f..6d2035c 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -53,7 +53,7 @@ return require('packer').startup(function(use) use 'fladson/vim-kitty' -- Syntax highlight for kitty configuration use { -- Indentation guides 'lukas-reineke/indent-blankline.nvim', - config = function() require'plugins.indent-blankline' end + config = function() require('ibl').setup() end } use { -- Highlight overlength lines 'lcheylus/overlength.nvim', diff --git a/lua/plugins/indent-blankline.lua b/lua/plugins/indent-blankline.lua deleted file mode 100644 index 22e4e5d..0000000 --- a/lua/plugins/indent-blankline.lua +++ /dev/null @@ -1,7 +0,0 @@ -require("indent_blankline").setup { - char = '┆', - show_current_context = true, -- globally enable or not - show_current_context_start = true, -- signature (or just start object) context - show_trailing_blankline_indent = true, - show_first_indent_level= false, -} From 6aed6a0e0acd90036fc239692d144015851352aa Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 29 Nov 2023 11:19:20 +0000 Subject: [PATCH 107/130] File type - set all *.env.* to sh --- lua/options.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/options.lua b/lua/options.lua index 5a5f9b7..d825a26 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -49,6 +49,7 @@ vim.cmd([[ augroup un_explicit_files autocmd BufRead,BufNewFile *.js.erb setfiletype javascript.erb autocmd BufRead,BufNewFile *.css.erb setfiletype css.erb + autocmd BufRead,BufNewFile *.env.* setfiletype sh augroup end ]]) From 6cc74a16f416a8d7d7b4cd8cb47389744aead02d Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 17 Jan 2024 09:43:39 +0100 Subject: [PATCH 108/130] Indent blank line - Ignore dashboard startup --- lua/plugins.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 6d2035c..93a8b8e 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -53,7 +53,13 @@ return require('packer').startup(function(use) use 'fladson/vim-kitty' -- Syntax highlight for kitty configuration use { -- Indentation guides 'lukas-reineke/indent-blankline.nvim', - config = function() require('ibl').setup() end + config = function() require('ibl').setup({ + exclude = { + filetypes = { + 'dashboard' + } + } + }) end } use { -- Highlight overlength lines 'lcheylus/overlength.nvim', From 3488200b3ba1646dd8ddead1b842bc329ee45364 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 17 Jan 2024 09:50:23 +0100 Subject: [PATCH 109/130] Mason & MasonLspconfig - Remove mason dependency to avoid double requires --- lua/plugins.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 93a8b8e..befd122 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -33,7 +33,6 @@ return require('packer').startup(function(use) config = function() require'mason'.setup() end } use{ -- Bridges mason.nvim with the lspconfig plugin - "williamboman/mason.nvim", 'williamboman/mason-lspconfig.nvim', config = function() require'plugins.mason-lspconfig' end } From 2972389165c4dae27c1855da7da6f394181316cc Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 17 Jan 2024 10:05:04 +0100 Subject: [PATCH 110/130] mason-lspconfig - Remove phpactor --- lua/plugins/mason-lspconfig.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index f3883bf..accec38 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -9,7 +9,6 @@ mason_lspconfig.setup({ 'jsonls', 'lua_ls', 'marksman', - 'phpactor', 'pylsp', 'ruby_ls', 'solargraph', From 274eccd82fa0283f1aa1e6326bd5f7d023900bd7 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 17 Jan 2024 10:06:20 +0100 Subject: [PATCH 111/130] mason-lspconfig - Setup mason --- lua/plugins/mason-lspconfig.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index accec38..9a81233 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -1,3 +1,4 @@ +require'mason'.setup() local mason_lspconfig = require'mason-lspconfig' mason_lspconfig.setup({ ensure_installed = { From 39478aaddc82ae735d6175324ca1f8ffa93bc6a5 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 17 Jan 2024 12:16:26 +0100 Subject: [PATCH 112/130] LSP - Use black as formatter for python --- lua/plugins/nvim-lspconfig.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 8b4f139..d571118 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -22,6 +22,7 @@ local on_attach = function(client, bufnr) keymap.set("n", "]d", "Lspsaga diagnostic_jump_next", opts) -- jump to next diagnostic in buffer keymap.set("n", "K", "Lspsaga hover_doc", opts) -- show documentation for what is under cursor keymap.set("n", "s", "LSoutlineToggle", opts) -- see outline on right hand side + keymap.set("n", "f", "lua vim.lsp.buf.format {async = true}", opts) -- format current buffer -- typescript specific keymaps (e.g. rename file and update imports) if client.name == "tsserver" then @@ -150,4 +151,13 @@ lspconfig["volar"].setup({ lspconfig["pylsp"].setup({ capabilities = capabilities, on_attach = on_attach, + settings = { + pylsp = { + plugins = { + -- formatter options + -- `:PylspInstall python-lsp-black` was needed + black = { enabled = true }, + }, + }, + }, }) From 3367c5df69de058030650a7bb08b81d5a365b9a3 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 17 Jan 2024 13:31:29 +0100 Subject: [PATCH 113/130] LSP - Use isort as formatter for python --- lua/plugins/nvim-lspconfig.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index d571118..c38b437 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -157,6 +157,9 @@ lspconfig["pylsp"].setup({ -- formatter options -- `:PylspInstall python-lsp-black` was needed black = { enabled = true }, + -- import sorting + -- `:PylspInstall pyls-isort` was needed + pyls_isort = { enabled = true }, }, }, }, From 85347d89e06576de72dce09c13b6a99f23b619fd Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 17 Jan 2024 14:16:37 +0100 Subject: [PATCH 114/130] LSP - Use mypy for static type checking for python --- lua/plugins/nvim-lspconfig.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index c38b437..494da7c 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -157,6 +157,8 @@ lspconfig["pylsp"].setup({ -- formatter options -- `:PylspInstall python-lsp-black` was needed black = { enabled = true }, + -- static typing check + pylsp_mypy = { enabled = true }, -- import sorting -- `:PylspInstall pyls-isort` was needed pyls_isort = { enabled = true }, From 407ec816bd6727861f87a87aa465db991faf7dd4 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Tue, 20 Feb 2024 00:15:17 +0100 Subject: [PATCH 115/130] LSP - Use pyright for nice python completion --- lua/plugins/mason-lspconfig.lua | 1 + lua/plugins/nvim-lspconfig.lua | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index 9a81233..0f59bb1 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -11,6 +11,7 @@ mason_lspconfig.setup({ 'lua_ls', 'marksman', 'pylsp', + 'pyright', 'ruby_ls', 'solargraph', 'sqlls', diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 494da7c..d256393 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -148,6 +148,7 @@ lspconfig["volar"].setup({ on_attach = on_attach, }) +-- Just for plugins linter lspconfig["pylsp"].setup({ capabilities = capabilities, on_attach = on_attach, @@ -166,3 +167,22 @@ lspconfig["pylsp"].setup({ }, }, }) + +-- Nice completion +lspconfig["pyright"].setup({ + capabilities = capabilities, + on_attach = on_attach, + settings = { + pyright = { + autoImportCompletion = true + }, + python = { + analysis = { + autoSearchPaths = true, + diagnosticMode = 'openFilesOnly', + useLibraryCodeForTypes = true, + typeCheckingMode = 'off' + } + } + } +}) From 62ebfe53f95fd7ed18c3267c99f00636e67af0a2 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 22 Feb 2024 11:59:59 +0100 Subject: [PATCH 116/130] Mapping - Update map for telescope --- README.md | 6 +++--- lua/mapping.lua | 9 ++++----- lua/plugins/nvim-lspconfig.lua | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 44957a2..df3bbab 100644 --- a/README.md +++ b/README.md @@ -38,10 +38,9 @@ and some plugin need **0.7** version. ### Telescope -- `ff` find file -- `fg` find file with git +- `f` find file with git +- `fg` find file with grep - `ft` find file with tag -- `fgg` find file with grep ### Saga @@ -67,6 +66,7 @@ needing *git* or *composer*… - `]d` go to previous dianostic - `K` show documentation - `s` show structure +- `f` format current buffer #### Typescript specific diff --git a/lua/mapping.lua b/lua/mapping.lua index 8bfb8f3..be2f161 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -1,7 +1,7 @@ vim.g.mapleader = ',' local map = vim.api.nvim_set_keymap -local noremap = {noremap = true} +local noremap = { noremap = true } -- general map('n', '+', '', noremap) @@ -19,10 +19,9 @@ map('n', 'r', ':lua PreviewReadme()', noremap) map('n', 'g', ':Goyo ', noremap) -- Telescope -map('n', 'ff', ':Telescope find_files prompt_prefix= 🔍  find_command=rg,--ignore,--hidden,--files ', noremap) -map('n', 'fg', ':Telescope git_files prompt_prefix=  ', noremap) -map('n', 'fgg', ':Telescope live_grep prompt_prefix= 🔎 ', noremap) -map('n', 'ft', ':Telescope help_tags prompt_prefix=  ', noremap) +map('n', 'f', ':Telescope git_files prompt_prefix=  ', noremap) +map('n', 'fg', ':Telescope live_grep prompt_prefix= 🔎 ', noremap) +map('n', 'ft', ':Telescope help_tags prompt_prefix=  ', noremap) -- Vim-tmux-navigator map('n', '', ':TmuxNavigateLeft', noremap) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index d256393..4715523 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -22,7 +22,7 @@ local on_attach = function(client, bufnr) keymap.set("n", "]d", "Lspsaga diagnostic_jump_next", opts) -- jump to next diagnostic in buffer keymap.set("n", "K", "Lspsaga hover_doc", opts) -- show documentation for what is under cursor keymap.set("n", "s", "LSoutlineToggle", opts) -- see outline on right hand side - keymap.set("n", "f", "lua vim.lsp.buf.format {async = true}", opts) -- format current buffer + keymap.set("n", "f", "lua vim.lsp.buf.format {async = true}", opts) -- format current buffer -- typescript specific keymaps (e.g. rename file and update imports) if client.name == "tsserver" then From 39f55251be9af3b5ac2eb46739e31985b66ab463 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 15 May 2024 09:07:27 +0200 Subject: [PATCH 117/130] LspConfig - Fix deprecated ruby lsp --- lua/plugins/nvim-lspconfig.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 4715523..3500659 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -123,7 +123,7 @@ lspconfig["intelephense"].setup({ }, }) -lspconfig["ruby_ls"].setup({ +lspconfig["ruby_lsp"].setup({ capabilities = capabilities, on_attach = on_attach, }) From 49219c2b1632f1033a868c647e79b146a2ab861c Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 22 May 2024 11:12:40 +0200 Subject: [PATCH 118/130] Dashboard - Fix neotree bad command --- lua/plugins/dashboard.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/plugins/dashboard.lua b/lua/plugins/dashboard.lua index b574e7a..3b35bab 100644 --- a/lua/plugins/dashboard.lua +++ b/lua/plugins/dashboard.lua @@ -8,25 +8,25 @@ require('dashboard').setup { { icon = '', desc = ' Neovim', - action = 'vim.cmd("cd ~/.config/nvim | edit README.md | NvimTreeToggle")', + action = 'vim.cmd("cd ~/.config/nvim | edit README.md | Neotree toggle")', key = 'n' }, { icon = '', desc = ' Zsh', - action = 'vim.cmd("cd ~/.config/zsh | edit README.md | NvimTreeToggle")', + action = 'vim.cmd("cd ~/.config/zsh | edit README.md | Neotree toggle")', key = 'z' }, { icon = '', desc = ' Tmux', - action = 'vim.cmd("cd ~/.config/tmux | edit README.md | NvimTreeToggle")', + action = 'vim.cmd("cd ~/.config/tmux | edit README.md | Neotree toggle")', key = 't' }, { icon = '龎', desc = ' Docs', - action = 'vim.cmd("cd ~/.local/docs | edit README.md | NvimTreeToggle")', + action = 'vim.cmd("cd ~/.local/docs | edit README.md | Neotree toggle")', key = 'd' }, }, From feb5afe5b3a73202b0f44b02b0ab171597dcff79 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 5 Jun 2024 14:47:11 +0200 Subject: [PATCH 119/130] Mapping - Add fugitive resume previous search map --- lua/mapping.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/mapping.lua b/lua/mapping.lua index be2f161..646052a 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -22,6 +22,7 @@ map('n', 'g', ':Goyo ', noremap) map('n', 'f', ':Telescope git_files prompt_prefix=  ', noremap) map('n', 'fg', ':Telescope live_grep prompt_prefix= 🔎 ', noremap) map('n', 'ft', ':Telescope help_tags prompt_prefix=  ', noremap) +map('n', 'fr', ':Telescope resume prompt_prefix=  ', noremap) -- Vim-tmux-navigator map('n', '', ':TmuxNavigateLeft', noremap) From aeb8366fa23a470361c2f8d7e61e8b581b709213 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 12 Jun 2024 16:45:02 +0200 Subject: [PATCH 120/130] LSP - Fix ruby reference --- lua/plugins/mason-lspconfig.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index 0f59bb1..f179425 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -12,7 +12,7 @@ mason_lspconfig.setup({ 'marksman', 'pylsp', 'pyright', - 'ruby_ls', + 'ruby_lsp', 'solargraph', 'sqlls', 'tailwindcss', From ebd46f45404522e9433f33784264ba1c1fb4ed8a Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Wed, 12 Jun 2024 17:13:12 +0200 Subject: [PATCH 121/130] Telescope - Fix telescope search & update mappings --- lua/mapping.lua | 9 +++++---- lua/plugins.lua | 12 +----------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/lua/mapping.lua b/lua/mapping.lua index 646052a..4cba3a9 100644 --- a/lua/mapping.lua +++ b/lua/mapping.lua @@ -19,10 +19,11 @@ map('n', 'r', ':lua PreviewReadme()', noremap) map('n', 'g', ':Goyo ', noremap) -- Telescope -map('n', 'f', ':Telescope git_files prompt_prefix=  ', noremap) -map('n', 'fg', ':Telescope live_grep prompt_prefix= 🔎 ', noremap) -map('n', 'ft', ':Telescope help_tags prompt_prefix=  ', noremap) -map('n', 'fr', ':Telescope resume prompt_prefix=  ', noremap) +map('n', 'f', ':Telescope git_files prompt_prefix=  ', noremap) +map('n', 'ff', ':Telescope find_files hidden=true no_ignore=true prompt_prefix=  ', noremap) +map('n', 'fg', ':Telescope live_grep prompt_prefix= 󰈞 ', noremap) +map('n', 'ft', ':Telescope help_tags prompt_prefix=  ', noremap) +map('n', 'fr', ':Telescope resume prompt_prefix=  ', noremap) -- Vim-tmux-navigator map('n', '', ':TmuxNavigateLeft', noremap) diff --git a/lua/plugins.lua b/lua/plugins.lua index befd122..06f9ae4 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -160,20 +160,10 @@ return require('packer').startup(function(use) } use { -- Fuzzy finder 'nvim-telescope/telescope.nvim', - tag = '0.1.2', + tag = '0.1.6', requires = {'nvim-lua/plenary.nvim'}, config = function() require'plugins.telescope' end } - use { -- Smarter fuzzy finder - 'danielfalk/smart-open.nvim', - branch = '0.2.x', - config = function() - require'telescope'.load_extension('smart_open') - end, - requires = { - {'kkharji/sqlite.lua'} - } - } use 'christoomey/vim-tmux-navigator' -- Tmux & split window navigation use { 'glepnir/dashboard-nvim', From a95fe4cd77be07847cbec4b3c1414b223ea12f11 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 20 Jun 2024 16:54:45 +0200 Subject: [PATCH 122/130] Gitsigns - Fix deprecated config --- lua/plugins/gitsigns.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lua/plugins/gitsigns.lua b/lua/plugins/gitsigns.lua index 2e922b2..2aa28d5 100644 --- a/lua/plugins/gitsigns.lua +++ b/lua/plugins/gitsigns.lua @@ -1,11 +1,11 @@ require('gitsigns').setup { signs = { - delete = { - hl = 'GitSignsDelete', - text = '-', - numhl='GitSignsDeleteNr', - linehl='GitSignsDeleteLn' - } + add = { text = '┃' }, + change = { text = '┃' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + untracked = { text = '┆' }, }, current_line_blame = true, on_attach = function(bufnr) From 0410d351901675be1a25f21afef0ed040f7cec30 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 13 Feb 2025 15:41:02 +0100 Subject: [PATCH 123/130] LSP - Try to fix typescript server --- lua/plugins/mason-lspconfig.lua | 2 +- lua/plugins/nvim-lspconfig.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index f179425..fa3e45e 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -16,7 +16,7 @@ mason_lspconfig.setup({ 'solargraph', 'sqlls', 'tailwindcss', - 'tsserver', + 'ts_ls', 'volar', 'yamlls' }, diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 3500659..8e41004 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -25,7 +25,7 @@ local on_attach = function(client, bufnr) keymap.set("n", "f", "lua vim.lsp.buf.format {async = true}", opts) -- format current buffer -- typescript specific keymaps (e.g. rename file and update imports) - if client.name == "tsserver" then + if client.name == "ts_ls" then keymap.set("n", "rf", ":TypescriptRenameFile") -- rename file and update imports keymap.set("n", "oi", ":TypescriptOrganizeImports") -- organize imports (not in youtube nvim video) keymap.set("n", "ru", ":TypescriptRemoveUnused") -- remove unused variables (not in youtube nvim video) From fa44ee6e680b27665ec059a999fc0d102ae14141 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 1 Sep 2025 09:48:12 +0200 Subject: [PATCH 124/130] LSP - Fix vue server name for mason --- lua/plugins/mason-lspconfig.lua | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index fa3e45e..be08836 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -17,10 +17,7 @@ mason_lspconfig.setup({ 'sqlls', 'tailwindcss', 'ts_ls', - 'volar', + 'vue_ls', 'yamlls' }, - pip = { - upgrade_pip = true - } }) From b3dd7ba2845b7bd6e3ea6b9aeb82d3ddb4fee37c Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 1 Sep 2025 10:05:29 +0200 Subject: [PATCH 125/130] LSP - Remove unused, warminsh plugin --- lua/plugins.lua | 1 - lua/plugins/nvim-lspconfig.lua | 15 --------------- 2 files changed, 16 deletions(-) diff --git a/lua/plugins.lua b/lua/plugins.lua index 06f9ae4..3003508 100644 --- a/lua/plugins.lua +++ b/lua/plugins.lua @@ -106,7 +106,6 @@ return require('packer').startup(function(use) end } use 'inkarkat/vim-ReplaceWithRegister' -- Replace with register contents using motion (gr + motion) - use 'jose-elias-alvarez/typescript.nvim' -- Additional functionality for typescript server (e.g. rename file & update imports) use 'nelstrom/vim-visual-star-search' -- Search based selection use 'junegunn/vim-easy-align' use({ diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 8e41004..a6d4d09 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -1,6 +1,5 @@ local lspconfig = require'lspconfig' local cmp_nvim_lsp = require'cmp_nvim_lsp' -local typescript = require'typescript' local keymap = vim.keymap -- for conciseness @@ -23,13 +22,6 @@ local on_attach = function(client, bufnr) keymap.set("n", "K", "Lspsaga hover_doc", opts) -- show documentation for what is under cursor keymap.set("n", "s", "LSoutlineToggle", opts) -- see outline on right hand side keymap.set("n", "f", "lua vim.lsp.buf.format {async = true}", opts) -- format current buffer - - -- typescript specific keymaps (e.g. rename file and update imports) - if client.name == "ts_ls" then - keymap.set("n", "rf", ":TypescriptRenameFile") -- rename file and update imports - keymap.set("n", "oi", ":TypescriptOrganizeImports") -- organize imports (not in youtube nvim video) - keymap.set("n", "ru", ":TypescriptRemoveUnused") -- remove unused variables (not in youtube nvim video) - end end -- used to enable autocompletion (assign to every lsp server config) @@ -49,13 +41,6 @@ lspconfig["html"].setup({ on_attach = on_attach, }) -typescript.setup({ - server = { - capabilities = capabilities, - on_attach = on_attach, - }, -}) - lspconfig["cssls"].setup({ capabilities = capabilities, on_attach = on_attach, From 634247d251a90e0568a60e2e976703b952ffd871 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Mon, 1 Sep 2025 10:15:18 +0200 Subject: [PATCH 126/130] Carefully call plugin (maybe is not installed yet) --- lua/options.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/options.lua b/lua/options.lua index d825a26..0f7c6d7 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -70,7 +70,7 @@ opt.splitbelow = true -- Preview README.md -- Way found here: https://dev.to/____marcell/how-to-create-an-ui-menu-in-neovim-2k6a -local popup = require("plenary.popup") +local status = pcall(require, "plenary.popup") local buffer_id function ShowPopup(content, cb) From e9d5533829cdce5327e40d0ae4e379f54fe6cee5 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 16 Apr 2026 15:02:49 +0200 Subject: [PATCH 127/130] Fix deprecation --- lua/plugins/mason-lspconfig.lua | 3 +- lua/plugins/nvim-lspconfig.lua | 72 +++-------- lua/plugins/nvim-lspconfig.lua.backup | 173 ++++++++++++++++++++++++++ spell/en.utf-8.add | 2 + spell/en.utf-8.add.spl | Bin 134 -> 222 bytes 5 files changed, 195 insertions(+), 55 deletions(-) create mode 100644 lua/plugins/nvim-lspconfig.lua.backup diff --git a/lua/plugins/mason-lspconfig.lua b/lua/plugins/mason-lspconfig.lua index be08836..6a38167 100644 --- a/lua/plugins/mason-lspconfig.lua +++ b/lua/plugins/mason-lspconfig.lua @@ -11,7 +11,7 @@ mason_lspconfig.setup({ 'lua_ls', 'marksman', 'pylsp', - 'pyright', + 'basedpyright', 'ruby_lsp', 'solargraph', 'sqlls', @@ -20,4 +20,5 @@ mason_lspconfig.setup({ 'vue_ls', 'yamlls' }, + automatic_enable = true, }) diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index a6d4d09..0b88e95 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -1,4 +1,3 @@ -local lspconfig = require'lspconfig' local cmp_nvim_lsp = require'cmp_nvim_lsp' local keymap = vim.keymap -- for conciseness @@ -36,22 +35,22 @@ end -- Lsp list: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md -lspconfig["html"].setup({ +vim.lsp.config('html', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["cssls"].setup({ +vim.lsp.config('cssls', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["tailwindcss"].setup({ +vim.lsp.config('tailwindcss', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["lua_ls"].setup({ +vim.lsp.config('lua_ls', { capabilities = capabilities, on_attach = on_attach, settings = { -- custom settings for lua @@ -71,27 +70,27 @@ lspconfig["lua_ls"].setup({ }, }) -lspconfig["dockerls"].setup({ +vim.lsp.config('dockerls', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["eslint"].setup({ +vim.lsp.config('eslint', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["jsonls"].setup({ +vim.lsp.config('jsonls', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["marksman"].setup({ +vim.lsp.config('marksman', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["phpactor"].setup({ +vim.lsp.config('phpactor', { capabilities = capabilities, on_attach = on_attach, init_options = { @@ -100,7 +99,7 @@ lspconfig["phpactor"].setup({ } }) -lspconfig["intelephense"].setup({ +vim.lsp.config('intelephense', { capabilities = capabilities, on_attach = on_attach, flags = { @@ -108,66 +107,31 @@ lspconfig["intelephense"].setup({ }, }) -lspconfig["ruby_lsp"].setup({ +vim.lsp.config('ruby_lsp', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["solargraph"].setup({ +vim.lsp.config('solargraph', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["sqlls"].setup({ +vim.lsp.config('sqlls', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["yamlls"].setup({ +vim.lsp.config('yamlls', { capabilities = capabilities, on_attach = on_attach, }) -lspconfig["volar"].setup({ +vim.lsp.config('volar', { capabilities = capabilities, on_attach = on_attach, }) --- Just for plugins linter -lspconfig["pylsp"].setup({ - capabilities = capabilities, - on_attach = on_attach, - settings = { - pylsp = { - plugins = { - -- formatter options - -- `:PylspInstall python-lsp-black` was needed - black = { enabled = true }, - -- static typing check - pylsp_mypy = { enabled = true }, - -- import sorting - -- `:PylspInstall pyls-isort` was needed - pyls_isort = { enabled = true }, - }, - }, - }, -}) - --- Nice completion -lspconfig["pyright"].setup({ - capabilities = capabilities, - on_attach = on_attach, - settings = { - pyright = { - autoImportCompletion = true - }, - python = { - analysis = { - autoSearchPaths = true, - diagnosticMode = 'openFilesOnly', - useLibraryCodeForTypes = true, - typeCheckingMode = 'off' - } - } - } -}) +-- pylsp and pyright not in vim.lsp.config, using vim.lsp.enable +vim.lsp.enable('pylsp', true) +vim.lsp.enable('basedpyright', true) diff --git a/lua/plugins/nvim-lspconfig.lua.backup b/lua/plugins/nvim-lspconfig.lua.backup new file mode 100644 index 0000000..a6d4d09 --- /dev/null +++ b/lua/plugins/nvim-lspconfig.lua.backup @@ -0,0 +1,173 @@ +local lspconfig = require'lspconfig' +local cmp_nvim_lsp = require'cmp_nvim_lsp' + +local keymap = vim.keymap -- for conciseness + +-- enable keybinds only for when lsp server available +local on_attach = function(client, bufnr) + -- keybind options + local opts = { noremap = true, silent = true, buffer = bufnr } + + -- set keybinds + keymap.set("n", "gf", "Lspsaga lsp_finder", opts) -- show definition, references + keymap.set("n", "gD", "lua vim.lsp.buf.declaration()", opts) -- got to declaration + keymap.set("n", "gd", "Lspsaga peek_definition", opts) -- see definition and make edits in window + keymap.set("n", "gi", "lua vim.lsp.buf.implementation()", opts) -- go to implementation + keymap.set("n", "ca", "Lspsaga code_action", opts) -- see available code actions + keymap.set("n", "rn", "Lspsaga rename", opts) -- smart rename + keymap.set("n", "D", "Lspsaga show_line_diagnostics", opts) -- show diagnostics for line + keymap.set("n", "d", "Lspsaga show_cursor_diagnostics", opts) -- show diagnostics for cursor + keymap.set("n", "[d", "Lspsaga diagnostic_jump_prev", opts) -- jump to previous diagnostic in buffer + keymap.set("n", "]d", "Lspsaga diagnostic_jump_next", opts) -- jump to next diagnostic in buffer + keymap.set("n", "K", "Lspsaga hover_doc", opts) -- show documentation for what is under cursor + keymap.set("n", "s", "LSoutlineToggle", opts) -- see outline on right hand side + keymap.set("n", "f", "lua vim.lsp.buf.format {async = true}", opts) -- format current buffer +end + +-- used to enable autocompletion (assign to every lsp server config) +local capabilities = cmp_nvim_lsp.default_capabilities() + +-- Change the Diagnostic symbols in the sign column (gutter) +local signs = { Error = " ", Warn = " ", Hint = "󰋇 ", Info = " " } +for type, icon in pairs(signs) do + local hl = "DiagnosticSign" .. type + vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) +end + +-- Lsp list: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md + +lspconfig["html"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["cssls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["tailwindcss"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["lua_ls"].setup({ + capabilities = capabilities, + on_attach = on_attach, + settings = { -- custom settings for lua + Lua = { + -- make the language server recognize "vim" global + diagnostics = { + globals = { "vim" }, + }, + workspace = { + -- make language server aware of runtime files + library = { + [vim.fn.expand("$VIMRUNTIME/lua")] = true, + [vim.fn.stdpath("config") .. "/lua"] = true, + }, + }, + }, + }, +}) + +lspconfig["dockerls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["eslint"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["jsonls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["marksman"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["phpactor"].setup({ + capabilities = capabilities, + on_attach = on_attach, + init_options = { + ["language_server_phpstan.enabled"] = false, + ["language_server_psalm.enabled"] = false, + } +}) + +lspconfig["intelephense"].setup({ + capabilities = capabilities, + on_attach = on_attach, + flags = { + debounce_text_changes = 150, + }, +}) + +lspconfig["ruby_lsp"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["solargraph"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["sqlls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["yamlls"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +lspconfig["volar"].setup({ + capabilities = capabilities, + on_attach = on_attach, +}) + +-- Just for plugins linter +lspconfig["pylsp"].setup({ + capabilities = capabilities, + on_attach = on_attach, + settings = { + pylsp = { + plugins = { + -- formatter options + -- `:PylspInstall python-lsp-black` was needed + black = { enabled = true }, + -- static typing check + pylsp_mypy = { enabled = true }, + -- import sorting + -- `:PylspInstall pyls-isort` was needed + pyls_isort = { enabled = true }, + }, + }, + }, +}) + +-- Nice completion +lspconfig["pyright"].setup({ + capabilities = capabilities, + on_attach = on_attach, + settings = { + pyright = { + autoImportCompletion = true + }, + python = { + analysis = { + autoSearchPaths = true, + diagnosticMode = 'openFilesOnly', + useLibraryCodeForTypes = true, + typeCheckingMode = 'off' + } + } + } +}) diff --git a/spell/en.utf-8.add b/spell/en.utf-8.add index a0b2e24..d723b03 100644 --- a/spell/en.utf-8.add +++ b/spell/en.utf-8.add @@ -6,3 +6,5 @@ $parameters/! class/! if/! cci/! +test_current_config_connections +log_progress/! diff --git a/spell/en.utf-8.add.spl b/spell/en.utf-8.add.spl index e5f893c8f12e120f1bf2be5e5a645f357a6b732b..38448e3280bdfc4b43eb8997de7922411e1fad79 100644 GIT binary patch literal 222 zcmXYsyAA>&5JkCEmd4iD89%_ku-Mkt7{VG1`v~ABev)6Q2Ue0{=FXW1TrXXoeT?U? zG3K*5Iv<`f70tRUVS~I1mXu|;)t542AIRH1CavK*NJDKgN9 vZp5iYt@-3xF`yT`-En0~Z?wHAOX#|%>WQdlR2{LZ5$d3!G2YN+zOtSl7ndqm literal 134 zcmXYqy$XOZ5Q8rroW)ICeFERY!BudSQlZjnX^Y^~Yy3F~fqc2Uu^&<}&UKfFOhv1W zT_XZ!M9RY;QxOTORN4U|jU}Pi2^(pAvr|1}@m$^iD6@7@37Ux|$q*j%Y#ek|@#Qx+ Dda4*U From 3fa58e6663e01ecb0667f48a69ae1f5bfbccead9 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Fri, 12 Jun 2026 10:34:51 +0200 Subject: [PATCH 128/130] Fix lsps --- eslint.config.js | 40 ++++++++++++++++++++++++++++++++++ eslint.json | 37 ------------------------------- lua/plugins/nvim-lint.lua | 3 ++- lua/plugins/nvim-lspconfig.lua | 40 +++++++++++++++++++++++++++++++--- 4 files changed, 79 insertions(+), 41 deletions(-) create mode 100644 eslint.config.js delete mode 100644 eslint.json diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..d9b0884 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,40 @@ +export default [ + { + rules: { + 'array-bracket-spacing': ['warn', 'never'], + 'brace-style': ['warn', '1tbs', { allowSingleLine: true }], + 'comma-spacing': 'warn', + 'comma-style': ['warn', 'first'], + 'computed-property-spacing': ['warn', 'never'], + 'constructor-super': 'error', + 'function-call-argument-newline': ['warn', 'consistent'], + indent: ['warn', 2], + 'jsx-quotes': ['warn', 'prefer-double'], + 'key-spacing': ['warn', { beforeColon: false, afterColon: true }], + 'max-len': ['warn', { ignoreTrailingComments: true }], + 'newline-before-return': 'warn', + 'newline-per-chained-call': 'warn', + 'no-console': 'warn', + 'no-const-assign': 'error', + 'no-else-return': 'warn', + 'no-empty': 'warn', + 'no-eq-null': 'warn', + 'no-mixed-spaces-and-tabs': 'warn', + 'no-multiple-empty-lines': 'warn', + 'no-tabs': 'warn', + 'no-trailing-spaces': 'warn', + 'no-unneeded-ternary': 'warn', + 'no-useless-return': 'warn', + 'no-warning-comments': 'warn', + 'prefer-destructuring': 'warn', + quotes: ['warn', 'single', { avoidEscape: true }], + 'rest-spread-spacing': ['warn', 'never'], + 'semi-spacing': ['warn', { before: false, after: false }], + 'semi-style': ['warn', 'last'], + }, + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + }, +] diff --git a/eslint.json b/eslint.json deleted file mode 100644 index b3a37fc..0000000 --- a/eslint.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "env": { - "es6": true - }, - "rules": { - "array-bracket-spacing": ["warn", "never"], - "brace-style": ["warn", "1tbs", {"allowSingleLine": true}], - "comma-spacing": "warn", - "comma-style": ["warn", "first"], - "computed-property-spacing": ["warn", "never"], - "constructor-super": "error", - "function-call-argument-newline": ["warn", "consistent"], - "indent": ["warn", 2], - "jsx-quotes": ["warn", "prefer-double"], - "key-spacing": ["warn", {"beforeColon": false, "afterColon": true}], - "max-len": ["warn", {"ignoreTrailingComments": true}], - "newline-before-return": "warn", - "newline-per-chained-call": "warn", - "no-console": "warn", - "no-const-assign": "error", - "no-else-return": "warn", - "no-empty": "warn", - "no-eq-null": "warn", - "no-mixed-spaces-and-tabs": "warn", - "no-multiple-empty-lines": "warn", - "no-tabs": "warn", - "no-trailing-spaces": "warn", - "no-unneeded-ternary": "warn", - "no-useless-return": "warn", - "no-warning-comments": "warn", - "prefer-destructuring": "warn", - "quotes": ["warn", "single", {"avoidEscape": true}], - "rest-spread-spacing": ["warn", "never"], - "semi-spacing": ["warn", {"before": false, "after": false}], - "semi-style": ["warn", "last"] - } -} diff --git a/lua/plugins/nvim-lint.lua b/lua/plugins/nvim-lint.lua index cb6db3d..ee28afc 100644 --- a/lua/plugins/nvim-lint.lua +++ b/lua/plugins/nvim-lint.lua @@ -5,7 +5,8 @@ local linters = lint.linters linters.eslint.cmd = '/usr/local/bin/eslint' local eslint = require('lint.linters.eslint') eslint.args = { - '-c=/home/tarik/.config/nvim/eslint.json', + '--config', + '/home/tarik/.config/nvim/eslint.config.js', } -- PHP diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index 0b88e95..c2c62e9 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -78,6 +78,12 @@ vim.lsp.config('dockerls', { vim.lsp.config('eslint', { capabilities = capabilities, on_attach = on_attach, + settings = { + options = { + overrideConfigFile = vim.fn.expand('~/.config/nvim/eslint.config.js') + }, + useFlatConfig = true + } }) vim.lsp.config('jsonls', { @@ -132,6 +138,34 @@ vim.lsp.config('volar', { on_attach = on_attach, }) --- pylsp and pyright not in vim.lsp.config, using vim.lsp.enable -vim.lsp.enable('pylsp', true) -vim.lsp.enable('basedpyright', true) +vim.lsp.config('pylsp', { + capabilities = capabilities, + on_attach = on_attach, + settings = { + pylsp = { + plugins = { + black = { enabled = true }, + pylsp_mypy = { enabled = true }, + pyls_isort = { enabled = true }, + }, + }, + }, +}) + +vim.lsp.config('basedpyright', { + capabilities = capabilities, + on_attach = on_attach, + settings = { + basedpyright = { + autoImportCompletion = true + }, + python = { + analysis = { + autoSearchPaths = true, + diagnosticMode = 'openFilesOnly', + useLibraryCodeForTypes = true, + typeCheckingMode = 'off' + } + } + } +}) From 050e18d9ab2d68ee67f1a06894f5eefbfefc15ee Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 18 Jun 2026 16:49:32 +0200 Subject: [PATCH 129/130] Fix auto indent on js file --- lua/options.lua | 4 ++++ lua/plugins/nvim-lint.lua | 3 ++- lua/plugins/nvim-lspconfig.lua | 26 +++++++++++++++++++++----- lua/plugins/treesitter.lua | 3 ++- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/lua/options.lua b/lua/options.lua index 0f7c6d7..628ad39 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -46,6 +46,10 @@ vim.cmd([[ autocmd FileType yaml setlocal ts=4 sts=4 sw=4 expandtab augroup end + augroup vue_indent + autocmd FileType vue setlocal nosmartindent autoindent indentexpr=HtmlIndent() + augroup end + augroup un_explicit_files autocmd BufRead,BufNewFile *.js.erb setfiletype javascript.erb autocmd BufRead,BufNewFile *.css.erb setfiletype css.erb diff --git a/lua/plugins/nvim-lint.lua b/lua/plugins/nvim-lint.lua index ee28afc..de81168 100644 --- a/lua/plugins/nvim-lint.lua +++ b/lua/plugins/nvim-lint.lua @@ -26,7 +26,8 @@ lint.linters_by_ft = { typescript = {'eslint'}, typescriptreact = {'eslint'}, php = {'phpcs'}, - ruby = {'ruby'} + ruby = {'ruby'}, + vue = {'eslint'} } vim.cmd('autocmd BufEnter,BufWritePost,InsertLeave * lua require("lint").try_lint()') diff --git a/lua/plugins/nvim-lspconfig.lua b/lua/plugins/nvim-lspconfig.lua index c2c62e9..38bd06c 100644 --- a/lua/plugins/nvim-lspconfig.lua +++ b/lua/plugins/nvim-lspconfig.lua @@ -35,6 +35,27 @@ end -- Lsp list: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md +vim.lsp.config('ts_ls', { + capabilities = capabilities, + on_attach = on_attach, + filetypes = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact', 'vue' }, + init_options = { + plugins = { + { + name = '@vue/typescript-plugin', + location = vim.fn.expand('~/.local/share/nvim/mason/packages/vue-language-server/node_modules/@vue/typescript-plugin'), + languages = { 'javascript', 'typescript', 'vue' }, + }, + }, + }, +}) + +vim.lsp.config('vue_ls', { + capabilities = capabilities, + on_attach = on_attach, + filetypes = {'vue'}, +}) + vim.lsp.config('html', { capabilities = capabilities, on_attach = on_attach, @@ -133,11 +154,6 @@ vim.lsp.config('yamlls', { on_attach = on_attach, }) -vim.lsp.config('volar', { - capabilities = capabilities, - on_attach = on_attach, -}) - vim.lsp.config('pylsp', { capabilities = capabilities, on_attach = on_attach, diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua index e3c9aec..13e60a8 100644 --- a/lua/plugins/treesitter.lua +++ b/lua/plugins/treesitter.lua @@ -13,7 +13,7 @@ treesitter.setup { -- enable indentation indent = { enable = true, - disable = { 'ruby' } + disable = { 'ruby', 'vue' } }, -- enable autotagging (w/ nvim-ts-autotag plugin) autotag = {enable = true}, @@ -41,6 +41,7 @@ treesitter.setup { 'sql', 'tsx', 'typescript', + 'vue', 'yaml' }, -- Automatically install missing parsers when entering buffer From a39914f99854977067799e4b87e6cf50d7ac9e43 Mon Sep 17 00:00:00 2001 From: Tarik Amar Date: Thu, 18 Jun 2026 17:17:48 +0200 Subject: [PATCH 130/130] Remove backup --- lua/plugins/nvim-lspconfig.lua.backup | 173 -------------------------- 1 file changed, 173 deletions(-) delete mode 100644 lua/plugins/nvim-lspconfig.lua.backup diff --git a/lua/plugins/nvim-lspconfig.lua.backup b/lua/plugins/nvim-lspconfig.lua.backup deleted file mode 100644 index a6d4d09..0000000 --- a/lua/plugins/nvim-lspconfig.lua.backup +++ /dev/null @@ -1,173 +0,0 @@ -local lspconfig = require'lspconfig' -local cmp_nvim_lsp = require'cmp_nvim_lsp' - -local keymap = vim.keymap -- for conciseness - --- enable keybinds only for when lsp server available -local on_attach = function(client, bufnr) - -- keybind options - local opts = { noremap = true, silent = true, buffer = bufnr } - - -- set keybinds - keymap.set("n", "gf", "Lspsaga lsp_finder", opts) -- show definition, references - keymap.set("n", "gD", "lua vim.lsp.buf.declaration()", opts) -- got to declaration - keymap.set("n", "gd", "Lspsaga peek_definition", opts) -- see definition and make edits in window - keymap.set("n", "gi", "lua vim.lsp.buf.implementation()", opts) -- go to implementation - keymap.set("n", "ca", "Lspsaga code_action", opts) -- see available code actions - keymap.set("n", "rn", "Lspsaga rename", opts) -- smart rename - keymap.set("n", "D", "Lspsaga show_line_diagnostics", opts) -- show diagnostics for line - keymap.set("n", "d", "Lspsaga show_cursor_diagnostics", opts) -- show diagnostics for cursor - keymap.set("n", "[d", "Lspsaga diagnostic_jump_prev", opts) -- jump to previous diagnostic in buffer - keymap.set("n", "]d", "Lspsaga diagnostic_jump_next", opts) -- jump to next diagnostic in buffer - keymap.set("n", "K", "Lspsaga hover_doc", opts) -- show documentation for what is under cursor - keymap.set("n", "s", "LSoutlineToggle", opts) -- see outline on right hand side - keymap.set("n", "f", "lua vim.lsp.buf.format {async = true}", opts) -- format current buffer -end - --- used to enable autocompletion (assign to every lsp server config) -local capabilities = cmp_nvim_lsp.default_capabilities() - --- Change the Diagnostic symbols in the sign column (gutter) -local signs = { Error = " ", Warn = " ", Hint = "󰋇 ", Info = " " } -for type, icon in pairs(signs) do - local hl = "DiagnosticSign" .. type - vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) -end - --- Lsp list: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md - -lspconfig["html"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["cssls"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["tailwindcss"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["lua_ls"].setup({ - capabilities = capabilities, - on_attach = on_attach, - settings = { -- custom settings for lua - Lua = { - -- make the language server recognize "vim" global - diagnostics = { - globals = { "vim" }, - }, - workspace = { - -- make language server aware of runtime files - library = { - [vim.fn.expand("$VIMRUNTIME/lua")] = true, - [vim.fn.stdpath("config") .. "/lua"] = true, - }, - }, - }, - }, -}) - -lspconfig["dockerls"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["eslint"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["jsonls"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["marksman"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["phpactor"].setup({ - capabilities = capabilities, - on_attach = on_attach, - init_options = { - ["language_server_phpstan.enabled"] = false, - ["language_server_psalm.enabled"] = false, - } -}) - -lspconfig["intelephense"].setup({ - capabilities = capabilities, - on_attach = on_attach, - flags = { - debounce_text_changes = 150, - }, -}) - -lspconfig["ruby_lsp"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["solargraph"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["sqlls"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["yamlls"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - -lspconfig["volar"].setup({ - capabilities = capabilities, - on_attach = on_attach, -}) - --- Just for plugins linter -lspconfig["pylsp"].setup({ - capabilities = capabilities, - on_attach = on_attach, - settings = { - pylsp = { - plugins = { - -- formatter options - -- `:PylspInstall python-lsp-black` was needed - black = { enabled = true }, - -- static typing check - pylsp_mypy = { enabled = true }, - -- import sorting - -- `:PylspInstall pyls-isort` was needed - pyls_isort = { enabled = true }, - }, - }, - }, -}) - --- Nice completion -lspconfig["pyright"].setup({ - capabilities = capabilities, - on_attach = on_attach, - settings = { - pyright = { - autoImportCompletion = true - }, - python = { - analysis = { - autoSearchPaths = true, - diagnosticMode = 'openFilesOnly', - useLibraryCodeForTypes = true, - typeCheckingMode = 'off' - } - } - } -})