From 605da54f245abc2004b70f719fa1ebae382bd79f Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Wed, 2 Mar 2022 13:54:52 +0100 Subject: [PATCH] home: vim: switch to 'lualine' --- home/vim/default.nix | 3 +- home/vim/plugin/settings/lightline.vim | 85 -------------------------- home/vim/plugin/settings/lualine.vim | 63 +++++++++++++++++++ 3 files changed, 64 insertions(+), 87 deletions(-) delete mode 100644 home/vim/plugin/settings/lightline.vim create mode 100644 home/vim/plugin/settings/lualine.vim diff --git a/home/vim/default.nix b/home/vim/default.nix index ea964cc..76d3425 100644 --- a/home/vim/default.nix +++ b/home/vim/default.nix @@ -31,8 +31,8 @@ in plugins = with pkgs.vimPlugins; [ # Theming - lightline-vim # Fancy status bar vim-gruvbox8 # Nice dark theme + lualine-nvim # A lua-based status line # tpope essentials vim-commentary # Easy comments @@ -64,7 +64,6 @@ in git-messenger-vim # A simple blame window # LSP and linting - lightline-lsp lsp_lines-nvim # Show diagnostics *over* regions null-ls-nvim # LSP integration for linters and formatters (nvim-treesitter.withPlugins (_: pkgs.tree-sitter.allGrammars)) # Better highlighting diff --git a/home/vim/plugin/settings/lightline.vim b/home/vim/plugin/settings/lightline.vim deleted file mode 100644 index 14079f6..0000000 --- a/home/vim/plugin/settings/lightline.vim +++ /dev/null @@ -1,85 +0,0 @@ -" Initialise light-line setting structure -let g:lightline={} - -" Use the wombat colorscheme -let g:lightline.colorscheme='wombat' - -" Status-line for active buffer -let g:lightline.active={ - \ 'left': [ - \ [ 'mode', 'paste' ], - \ [ 'gitbranch', 'readonly', 'filename', 'modified' ], - \ [ 'spell' ], - \ ], - \ 'right': [ - \ [ 'lineinfo' ], - \ [ 'percent' ], - \ [ 'fileformat', 'fileencoding', 'filetype' ], - \ [ 'linter_errors', 'linter_warnings', 'linter_infos', 'linter_hints', 'linter_ok' ], - \ [ 'ctags_status' ], - \ ] - \ } - -" Status-line for inactive buffer -let g:lightline.inactive={ - \ 'left': [ - \ [ 'filename' ], - \ ], - \ 'right': [ - \ [ 'lineinfo' ], - \ [ 'percent' ], - \ ], - \ } - -" Which component should be written using which function -let g:lightline.component_function={ - \ 'readonly': 'LightlineReadonly', - \ 'modified': 'LightlineModified', - \ 'gitbranch': 'LightlineFugitive', - \ } - -" Which component can be expanded by using which function -let g:lightline.component_expand={ - \ 'linter_hints': 'lightline#lsp#hints', - \ 'linter_infos': 'lightline#lsp#infos', - \ 'linter_warnings': 'lightline#lsp#warnings', - \ 'linter_errors': 'lightline#lsp#errors', - \ 'linter_ok': 'lightline#lsp#ok', - \ } - -" How to color custom components -let g:lightline.component_type={ - \ 'readonly': 'error', - \ 'linter_hints': 'right', - \ 'linter_infos': 'right', - \ 'linter_warnings': 'warning', - \ 'linter_errors': 'error', - \ 'linter_ok': 'right', - \ } - -" Show pretty icons instead of text for linting status -let g:lightline#lsp#indicator_hints='🔍' -let g:lightline#lsp#indicator_infos='ℹ' -let g:lightline#lsp#indicator_warnings='◆' -let g:lightline#lsp#indicator_errors='✗' -let g:lightline#lsp#indicator_ok='✓' - - -" Show a lock icon when editing a read-only file when it makes sense -function! LightlineReadonly() - return &ft!~?'help\|vimfiler\|netrw' && &readonly ? '🔒' : '' -endfunction - -" Show a '+' when the buffer is modified, '-' if not, when it makes sense -function! LightlineModified() - return &ft=~'help\|vimfiler\|netrw' ? '' : &modified ? '+' : &modifiable ? '' : '-' -endfunction - -" Show branch name with nice icon in status line, when it makes sense -function! LightlineFugitive() - if &ft!~?'help\|vimfiler\|netrw' && exists('*fugitive#head') - let branch=fugitive#head() - return branch!=#'' ? ' '.branch : '' - endif - return '' -endfunction diff --git a/home/vim/plugin/settings/lualine.vim b/home/vim/plugin/settings/lualine.vim new file mode 100644 index 0000000..15e3a80 --- /dev/null +++ b/home/vim/plugin/settings/lualine.vim @@ -0,0 +1,63 @@ +lua << EOF +local lualine = require("lualine") +local utils = require("ambroisie.utils") + +local function list_spell_languages() + if not vim.opt.spell:get() then + return "" + end + + return table.concat(vim.opt.spelllang:get(), ", ") +end + +local function list_lsp_clients() + local client_names = utils.list_lsp_clients() + + if #client_names == 0 then + return "" + end + + return "[ " .. table.concat(client_names, " ") .. " ]" +end + +lualine.setup({ + options = { + icons_enabled = false, + section_separators = "", + component_separators = "|", + }, + sections = { + lualine_a = { + { "mode" }, + }, + lualine_b = { + { "branch" }, + { "filename", symbols = { readonly = "🔒" } }, + }, + lualine_c = { + { list_spell_languages }, + }, + lualine_x = { + { list_lsp_clients }, + { + "diagnostics", + -- Only use the diagnostics API + sources = { "nvim_diagnostic" }, + }, + }, + lualine_y = { + { "fileformat" }, + { "encoding" }, + { "filetype" }, + }, + lualine_z = { + "location", + }, + }, + extensions = { + "fugitive", + "fzf", + "quickfix", + }, +}) +EOF