{ pkgs, lib, config, ... }: { config = { programs.nixvim = { autoCmd = [ # Turn off relativenumber only for insert mode { event = "InsertEnter"; pattern = "*"; command = "set norelativenumber"; } { event = "InsertLeave"; pattern = "*"; command = "set relativenumber"; } ]; extraPlugins = with pkgs.vimPlugins; [ nvim-scrollview # Scroll bar ]; keymaps = [ # barbar { key = ""; action = "BufferPrevious"; options = { silent = true; }; } { key = ""; action = "BufferNext"; options = { silent = true; }; } # TODO https://www.reddit.com/r/neovim/comments/mbj8m5/how_to_setup_ctrlshiftkey_mappings_in_neovim_and/ { key = ""; action = "BufferMovePrevious"; options = { silent = true; }; } { key = ""; action = "BufferMoveNext"; options = { silent = true; }; } # TODO gotos don't work { key = ""; action = "BufferGoto 1"; options = { silent = true; }; } { key = ""; action = "BufferGoto 2"; options = { silent = true; }; } { key = ""; action = "BufferGoto 3"; options = { silent = true; }; } { key = ""; action = "BufferGoto 4"; options = { silent = true; }; } { key = ""; action = "BufferGoto 5"; options = { silent = true; }; } { key = ""; action = "BufferGoto 6"; options = { silent = true; }; } { key = ""; action = "BufferGoto 7"; options = { silent = true; }; } { key = ""; action = "BufferGoto 8"; options = { silent = true; }; } { key = ""; action = "BufferGoto 9"; options = { silent = true; }; } { key = ""; action = "BufferLast"; options = { silent = true; }; } { key = "gb"; action = "BufferPick"; options = { silent = true; }; } # TODO Other useful options? ]; options = { showmode = false; number = true; relativenumber = true; title = true; }; plugins = { # Tablinee barbar.enable = true; # TODO Investigate bufferline? # Status line lualine = with config.lib.stylix.colors.withHashtag; let normal = { fg = base05; bg = base01; }; inverted = { fg = base00; bg = base03; }; normal_ina = { fg = base02; bg = base01; }; inverted_ina = { fg = base00; bg = base02; }; in rec { enable = true; inactiveSections = sections; sections = { lualine_a = [ { name = ''string.format('%d', vim.fn.line('$'))''; } "location" ]; lualine_b = [ "mode" ]; lualine_c = [{ name = "filename"; extraConfig = { path = 1; # Relative path symbols = { modified = "●"; newfile = "󰻭"; readonly = "󰏯"; unnamed = "󱀶"; }; }; }]; lualine_x = (lib.mapAttrsToList (diag_name: diag_color: { name = "diagnostics"; extraConfig = { color.bg = diag_color; colored = false; separator = { left = ""; right = ""; }; sections = [ diag_name ]; }; }) { error = base08; warn = base0A; hint = base0C; info = base0B; }); lualine_y = [{ name = "diff"; extraConfig = { diff_color = { added.fg = base0B; modified.fg = base0A; removed.fg = base08; }; symbols = { added = " "; modified = " "; removed = " "; }; }; } "branch"]; lualine_z = [ "filetype" "fileformat" "encoding" ]; }; theme = (lib.mapAttrs (mode_name: mode_color: { a = inverted; b = inverted // { bg = mode_color; gui = "bold"; }; c = normal; x = inverted; y = inverted; z = inverted // { bg = mode_color; }; }) { normal = base0D; insert = base0B; visual = base0F; replace = base08; command = base0E; }) // { inactive = { a = inverted_ina; b = normal_ina // { bg = base00; gui = "bold"; }; c = normal_ina; x = inverted_ina; y = inverted_ina; z = normal_ina // { bg = base00; }; }; }; }; }; }; }; }