From: Skullheadx Date: Sat, 16 May 2026 21:25:32 +0000 (-0400) Subject: nvf neovim X-Git-Url: http://git.skullheadx.com/sitemap.xml?a=commitdiff_plain;h=ea2b4fd5424bb96710e1d78f62233155437a87c9;p=nixos.git nvf neovim --- diff --git a/flake.lock b/flake.lock index 7882b6b..5def3af 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,42 @@ { "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1751685974, + "narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=", + "ref": "refs/heads/main", + "rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1", + "revCount": 92, + "type": "git", + "url": "https://git.lix.systems/lix-project/flake-compat.git" + }, + "original": { + "type": "git", + "url": "https://git.lix.systems/lix-project/flake-compat.git" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nvf", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "hjem": { "inputs": { "nix-darwin": "nix-darwin", @@ -21,6 +58,21 @@ "type": "github" } }, + "mnw": { + "locked": { + "lastModified": 1777828893, + "narHash": "sha256-gVWVnmyNr74BVKfhMMZDWkhx2699dhmZ2g0W8TTHtkk=", + "owner": "Gerg-L", + "repo": "mnw", + "rev": "c1c0b544bfabe6669b5a6a0383ccb475fe60258b", + "type": "github" + }, + "original": { + "owner": "Gerg-L", + "repo": "mnw", + "type": "github" + } + }, "my-dmenu": { "inputs": { "nixpkgs": [ @@ -121,6 +173,28 @@ "type": "github" } }, + "ndg": { + "inputs": { + "nixpkgs": [ + "nvf", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776882296, + "narHash": "sha256-DWZozXwMsgvUqfVlL1mQ8dOxW7GJ/8CdyaDN+1niZRg=", + "owner": "feel-co", + "repo": "ndg", + "rev": "ab7d78d4884b3a34968cf9fa3d16c0c1246d5c6e", + "type": "github" + }, + "original": { + "owner": "feel-co", + "ref": "refs/tags/v2.6.0", + "repo": "ndg", + "type": "github" + } + }, "nix-darwin": { "inputs": { "nixpkgs": [ @@ -158,6 +232,31 @@ "type": "github" } }, + "nvf": { + "inputs": { + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "mnw": "mnw", + "ndg": "ndg", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1778963095, + "narHash": "sha256-x1rkZ2QL7stCTq/IjIBK9JuvfMPz6nyhaFKhvLXfjks=", + "owner": "notashelf", + "repo": "nvf", + "rev": "49bb322eba1a6c1ad201d15eefde5469c53b08d7", + "type": "github" + }, + "original": { + "owner": "notashelf", + "repo": "nvf", + "type": "github" + } + }, "root": { "inputs": { "hjem": "hjem", @@ -166,7 +265,23 @@ "my-slstatus": "my-slstatus", "my-st": "my-st", "my-surf": "my-surf", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "nvf": "nvf" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index 3d4f4c1..fa473f0 100644 --- a/flake.nix +++ b/flake.nix @@ -32,6 +32,10 @@ url = "github:Skullheadx/dmenu"; inputs.nixpkgs.follows = "nixpkgs"; }; + nvf = { + url = "github:notashelf/nvf"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -44,15 +48,26 @@ my-dwm, my-st, my-dmenu, + nvf, }@inputs: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + customNeovim = nvf.lib.neovimConfiguration { + inherit pkgs; + modules = [ ./nvf/nvf.nix ]; + }; + in { nixosConfigurations.nepsis = nixpkgs.lib.nixosSystem { - specialArgs = { inherit inputs; }; + specialArgs = { inherit inputs customNeovim; }; modules = [ hjem.nixosModules.default ./configuration.nix ./overlays.nix ]; }; + + packages.${system}.my-neovim = customNeovim.neovim; }; } diff --git a/nvf/keymaps.nix b/nvf/keymaps.nix new file mode 100644 index 0000000..61cdcc8 --- /dev/null +++ b/nvf/keymaps.nix @@ -0,0 +1,468 @@ +{ ... }: +[ + # Top Pickers & Explorer + { + key = ""; + mode = "n"; + silent = true; + desc = "Smart Find Files"; + action = "lua Snacks.picker.smart()"; + } + { + key = "f\/"; + mode = "n"; + silent = true; + desc = "Grep"; + action = "lua Snacks.picker.grep()"; + } + { + key = ":"; + mode = "n"; + silent = true; + desc = "Command History"; + action = "lua Snacks.picker.command_history()"; + } + { + key = "e"; + mode = "n"; + silent = true; + desc = "File Explorer"; + action = "lua Snacks.explorer()"; + } + + # Find + { + key = "fb"; + mode = "n"; + silent = true; + desc = "Buffers"; + action = "lua Snacks.picker.buffers()"; + } + { + key = "fc"; + mode = "n"; + silent = true; + desc = "Find Config File"; + action = "lua Snacks.picker.files({ cwd = vim.fn.stdpath('config') })"; + } + { + key = "ff"; + mode = "n"; + silent = true; + desc = "Find Files"; + action = "lua Snacks.picker.files()"; + } + { + key = "fg"; + mode = "n"; + silent = true; + desc = "Find Git Files"; + action = "lua Snacks.picker.git_files()"; + } + { + key = "fp"; + mode = "n"; + silent = true; + desc = "Projects"; + action = "lua Snacks.picker.projects()"; + } + { + key = "fr"; + mode = "n"; + silent = true; + desc = "Recent"; + action = "lua Snacks.picker.recent()"; + } + + # Git + { + key = "gb"; + mode = "n"; + silent = true; + desc = "Git Branches"; + action = "lua Snacks.picker.git_branches()"; + } + { + key = "gl"; + mode = "n"; + silent = true; + desc = "Git Log"; + action = "lua Snacks.picker.git_log()"; + } + { + key = "gL"; + mode = "n"; + silent = true; + desc = "Git Log Line"; + action = "lua Snacks.picker.git_log_line()"; + } + { + key = "gs"; + mode = "n"; + silent = true; + desc = "Git Status"; + action = "lua Snacks.picker.git_status()"; + } + { + key = "gS"; + mode = "n"; + silent = true; + desc = "Git Stash"; + action = "lua Snacks.picker.git_stash()"; + } + { + key = "gd"; + mode = "n"; + silent = true; + desc = "Git Diff (Hunks)"; + action = "lua Snacks.picker.git_diff()"; + } + { + key = "gf"; + mode = "n"; + silent = true; + desc = "Git Log File"; + action = "lua Snacks.picker.git_log_file()"; + } + + # GitHub + { + key = "gi"; + mode = "n"; + silent = true; + desc = "GitHub Issues (open)"; + action = "lua Snacks.picker.gh_issue()"; + } + { + key = "gI"; + mode = "n"; + silent = true; + desc = "GitHub Issues (all)"; + action = "lua Snacks.picker.gh_issue({ state = 'all' })"; + } + { + key = "gp"; + mode = "n"; + silent = true; + desc = "GitHub Pull Requests (open)"; + action = "lua Snacks.picker.gh_pr()"; + } + { + key = "gP"; + mode = "n"; + silent = true; + desc = "GitHub Pull Requests (all)"; + action = "lua Snacks.picker.gh_pr({ state = 'all' })"; + } + + # Grep + { + key = "sb"; + mode = "n"; + silent = true; + desc = "Buffer Lines"; + action = "lua Snacks.picker.lines()"; + } + { + key = "sB"; + mode = "n"; + silent = true; + desc = "Grep Open Buffers"; + action = "lua Snacks.picker.grep_buffers()"; + } + { + key = "fg"; + mode = "n"; + silent = true; + desc = "Grep"; + action = "lua Snacks.picker.grep()"; + } + { + key = "fw"; + mode = [ + "n" + "x" + ]; + silent = true; + desc = "Visual selection or word"; + action = "lua Snacks.picker.grep_word()"; + } + + # Search + { + key = "s\""; + mode = "n"; + silent = true; + desc = "Registers"; + action = "lua Snacks.picker.registers()"; + } + { + key = "sa"; + mode = "n"; + silent = true; + desc = "Autocmds"; + action = "lua Snacks.picker.autocmds()"; + } + { + key = "sc"; + mode = "n"; + silent = true; + desc = "Command History"; + action = "lua Snacks.picker.command_history()"; + } + { + key = "sC"; + mode = "n"; + silent = true; + desc = "Commands"; + action = "lua Snacks.picker.commands()"; + } + { + key = "sd"; + mode = "n"; + silent = true; + desc = "Diagnostics"; + action = "lua Snacks.picker.diagnostics()"; + } + { + key = "sD"; + mode = "n"; + silent = true; + desc = "Buffer Diagnostics"; + action = "lua Snacks.picker.diagnostics_buffer()"; + } + { + key = "sh"; + mode = "n"; + silent = true; + desc = "Help Pages"; + action = "lua Snacks.picker.help()"; + } + { + key = "sH"; + mode = "n"; + silent = true; + desc = "Highlights"; + action = "lua Snacks.picker.highlights()"; + } + { + key = "si"; + mode = "n"; + silent = true; + desc = "Icons"; + action = "lua Snacks.picker.icons()"; + } + { + key = "sj"; + mode = "n"; + silent = true; + desc = "Jumps"; + action = "lua Snacks.picker.jumps()"; + } + { + key = "sk"; + mode = "n"; + silent = true; + desc = "Keymaps"; + action = "lua Snacks.picker.keymaps()"; + } + { + key = "sl"; + mode = "n"; + silent = true; + desc = "Location List"; + action = "lua Snacks.picker.loclist()"; + } + { + key = "sm"; + mode = "n"; + silent = true; + desc = "Marks"; + action = "lua Snacks.picker.marks()"; + } + { + key = "sM"; + mode = "n"; + silent = true; + desc = "Man Pages"; + action = "lua Snacks.picker.man()"; + } + { + key = "sq"; + mode = "n"; + silent = true; + desc = "Quickfix List"; + action = "lua Snacks.picker.qflist()"; + } + { + key = "f"; + mode = "n"; + silent = true; + desc = "Resume"; + action = "lua Snacks.picker.resume()"; + } + { + key = "su"; + mode = "n"; + silent = true; + desc = "Undo History"; + action = "lua Snacks.picker.undo()"; + } + + # LSP + { + key = "gd"; + mode = "n"; + silent = true; + desc = "Goto Definition"; + action = "lua Snacks.picker.lsp_definitions()"; + } + { + key = "gD"; + mode = "n"; + silent = true; + desc = "Goto Declaration"; + action = "lua Snacks.picker.lsp_declarations()"; + } + { + key = "gr"; + mode = "n"; + silent = true; + nowait = true; + desc = "References"; + action = "lua Snacks.picker.lsp_references()"; + } + { + key = "gI"; + mode = "n"; + silent = true; + desc = "Goto Implementation"; + action = "lua Snacks.picker.lsp_implementations()"; + } + { + key = "gy"; + mode = "n"; + silent = true; + desc = "Goto Type Definition"; + action = "lua Snacks.picker.lsp_type_definitions()"; + } + { + key = "ls"; + mode = "n"; + silent = true; + desc = "LSP Symbols"; + action = "lua Snacks.picker.lsp_symbols()"; + } + { + key = "lS"; + mode = "n"; + silent = true; + desc = "LSP Workspace Symbols"; + action = "lua Snacks.picker.lsp_workspace_symbols()"; + } + + # Other + { + key = "z"; + mode = "n"; + silent = true; + desc = "Toggle Zen Mode"; + action = "lua Snacks.zen()"; + } + { + key = "ss"; + mode = "n"; + silent = true; + desc = "Toggle Scratch Buffer"; + action = "lua Snacks.scratch()"; + } + { + key = "sf"; + mode = "n"; + silent = true; + desc = "Select Scratch Buffer"; + action = "lua Snacks.scratch.select()"; + } + { + key = "bc"; + mode = "n"; + silent = true; + desc = "Delete Buffer"; + action = "lua Snacks.bufdelete()"; + } + { + key = "br"; + mode = "n"; + silent = true; + desc = "Rename File"; + action = "lua Snacks.rename.rename_file()"; + } + { + key = "gB"; + mode = [ + "n" + "v" + ]; + silent = true; + desc = "Git Browse"; + action = "lua Snacks.gitbrowse()"; + } + { + key = "gg"; + mode = "n"; + silent = true; + desc = "Lazygit"; + action = "lua Snacks.lazygit()"; + } + { + key = ",t"; + mode = "n"; + silent = true; + desc = "Toggle Terminal"; + action = "lua Snacks.terminal()"; + } + { + key = ",t"; + mode = "t"; + silent = true; + desc = "which_key_ignore"; + action = "lua Snacks.terminal()"; + } + + { + key = "w"; + mode = [ + "n" + "o" + "x" + ]; + action = "lua require('spider').motion('w')"; + } + { + key = "e"; + mode = [ + "n" + "o" + "x" + ]; + action = "lua require('spider').motion('e')"; + } + { + key = "b"; + mode = [ + "n" + "o" + "x" + ]; + action = "lua require('spider').motion('b')"; + } + { + key = "ge"; + mode = [ + "n" + "o" + "x" + ]; + action = "lua require('spider').motion('ge')"; + } +] diff --git a/nvf/nvf.nix b/nvf/nvf.nix new file mode 100644 index 0000000..ff1a3db --- /dev/null +++ b/nvf/nvf.nix @@ -0,0 +1,290 @@ +{ pkgs, ... }: +{ + config.vim = { + # core + syntaxHighlighting = true; + binds.whichKey.enable = true; + + # ui + theme = { + enable = true; + name = "tokyonight"; + style = "storm"; + transparent = true; + }; + + statusline.lualine.enable = true; + ui = { + noice.enable = true; + illuminate.enable = true; + nvim-highlight-colors.enable = true; + borders = { + enable = true; + globalStyle = "rounded"; + }; + }; + mini.icons.enable = true; + + visuals = { + nvim-web-devicons.enable = true; + rainbow-delimiters.enable = true; + tiny-devicons-auto-colors.enable = true; + indent-blankline.enable = true; + highlight-undo.enable = true; + }; + dashboard.alpha = { + enable = true; + theme = "theta"; + }; + + # navigation + navigation = { + harpoon = { + enable = true; + mappings = { + file1 = "1"; + file2 = "2"; + file3 = "3"; + file4 = "4"; + listMarks = "'"; + markFile = "."; + }; + setupOpts.defaults = { + save_on_toggle = true; + sync_on_ui_close = true; + }; + }; + }; + + # lsp + lsp = { + enable = true; + formatOnSave = true; + inlayHints.enable = true; + + lightbulb = { + enable = true; + autocmd.enable = true; + }; + lspconfig.enable = true; + otter-nvim.enable = true; + }; + + notes.todo-comments.enable = true; + + spellcheck = { + enable = true; + }; + comments.comment-nvim = { + enable = true; + + mappings.toggleCurrentLine = "/"; + # mappings.toggleOpLeaderLine = "/"; + # mappings.toggleOpLeaderBlock = "/"; + # mappings.toggleCurrentBlock = "/"; + mappings.toggleSelectedLine = "/"; + # mappings.toggleSelectedBlock = "/"; + + setupOpts.mappings.basic = true; + setupOpts.mappings.extra = true; + }; + + languages = { + nix = { + enable = true; + format = { + enable = true; + type = [ "alejandra" ]; + }; + lsp = { + enable = true; + servers = [ "nixd" ]; + }; + treesitter.enable = true; + }; + sql.enable = true; + typescript.enable = true; + python.enable = true; + zig.enable = true; + markdown.enable = true; + html.enable = true; + go.enable = true; + lua.enable = true; + assembly.enable = true; + bash.enable = true; + clang.enable = true; + css.enable = true; + typst.enable = true; + }; + + treesitter = { + enable = true; + autotagHtml = true; + context.enable = true; + # fold = true; + grammars = pkgs.vimPlugins.nvim-treesitter.allGrammars; + }; + + diagnostics.nvim-lint = { + enable = true; + lint_after_save = true; + }; + + # plugins + extraPlugins = { + spider = { + package = pkgs.vimPlugins.nvim-spider; + }; + }; + + utility = { + multicursors.enable = true; + surround.enable = true; + nix-develop.enable = true; + preview = { + glow.enable = true; + }; + sleuth.enable = true; + snacks-nvim = { + enable = true; + + setupOpts = { + bigfile.enable = true; + dashboard = { + enable = false; + }; + explorer.enable = true; + indent.enable = true; + input.enable = true; + + notifier = { + enable = true; + timeout = 3000; + }; + + picker = { + enable = true; + }; + quickfile.enable = true; + scope.enable = true; + scroll.enable = true; + statuscolumn.enable = true; + words.enable = true; + + styles.notification = { + # wo.wrap = true; + }; + }; + }; + }; + + autocomplete.blink-cmp = { + enable = true; + friendly-snippets.enable = true; + # mappings = { + # close = ""; # abort / close the menu + # complete = ""; # trigger completion manually + # confirm = ""; # confirm selected item + # next = ""; # select next completion item + # previous = ""; # select previous completion item + # scrollDocsDown = ""; # scroll docs down + # scrollDocsUp = ""; # scroll docs up + # }; + setupOpts = { + signature.enabled = true; + cmdline.keymap.preset = "default"; + keymap.preset = "default"; + completion.documentation.auto_show = true; + }; + sourcePlugins = { + lsp = { + package = "cmp-nvim-lsp"; + }; + buffer = { + package = "cmp-buffer"; + }; + path = { + package = "cmp-path"; + }; + luasnip = { + package = "cmp-luasnip"; + }; + spell = { + package = "blink-cmp-spell"; + }; + emoji = { + package = "blink-emoji-nvim"; + }; + ripgrep.enable = true; + spell.enable = true; + }; + }; + + autopairs.nvim-autopairs.enable = true; + + # keymaps + keymaps = import ./keymaps.nix { }; + + # tools + extraPackages = with pkgs; [ + ripgrep + lazygit + fd + imagemagick + alejandra + nixd + ghostscript + tectonic + + # language server + bash-language-server + clang-tools + docker-language-server + gopls + golangci-lint-langserver + vscode-langservers-extracted + emmet-language-server + lua-language-server + marksman + nixd + basedpyright + ruff + sqls + deno + vtsls + yaml-language-server + zls + + # formatter + shfmt + gofumpt + prettierd + prettier + jq + stylua + nixpkgs-fmt + sqlfluff + prettypst + + # linter + shellcheck + cppcheck + hadolint + fish + golangci-lint + selene + markdownlint-cli2 + statix + eslint + yamllint + + # debugger + lldb + delve + python313Packages.debugpy + + # tree sitter + tree-sitter + ]; + }; +} diff --git a/vim.nix b/vim.nix index 0e81b04..c496418 100644 --- a/vim.nix +++ b/vim.nix @@ -1,4 +1,10 @@ -{ config, pkgs, ... }: +{ + config, + pkgs, + + customNeovim, + ... +}: { environment.systemPackages = with pkgs; [ @@ -10,127 +16,112 @@ exec ${pkgs.nvi}/bin/vi "$@" ''; }) + + customNeovim.neovim ]; environment.etc."vimrc".text = '' - set autoread - au FocusGained,BufEnter * silent! checktime + set autoread + au FocusGained,BufEnter * silent! checktime - " :W sudo saves the file - " (useful for handling the permission-denied error) - command! W execute 'w !sudo tee % > /dev/null' edit! + " Turn on the Wild menu + set wildmenu - " Turn on the Wild menu - set wildmenu + " Ignore compiled files + set wildignore=*.o,*~,*.pyc + set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store - " Ignore compiled files - set wildignore=*.o,*~,*.pyc - set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store + set ruler - set ruler + set ignorecase + set smartcase + set hlsearch + set incsearch + set lazyredraw + set magic + set showmatch - set ignorecase - set smartcase - set hlsearch - set incsearch - set lazyredraw - set magic - set showmatch + syntax enable + set noswapfile - syntax enable - set noswapfile + " Use spaces instead of tabs + set expandtab - " Use spaces instead of tabs - set expandtab + " Be smart when using tabs ;) + set smarttab - " Be smart when using tabs ;) - set smarttab + " 1 tab == 4 spaces + set shiftwidth=4 + set tabstop=4 - " 1 tab == 4 spaces - set shiftwidth=4 - set tabstop=4 + set ai "Auto indent + set si "Smart indent + set wrap "Wrap lines - " Linebreak on 500 characters - set lbr - set tw=500 + " Always show the status line + set laststatus=2 - set ai "Auto indent - set si "Smart indent - set wrap "Wrap lines + set number relativenumber - " Always show the status line - set laststatus=2 - set number relativenumber - - - " Force the cursor to a Block when Vim starts - let &t_ti = &t_ti . "\e[2 q" - let &t_te = &t_te . "\e[2 q" - let &t_EI = "\e[2 q" - let &t_SI = "\e[2 q" + " Force the cursor to a Block when Vim starts + let &t_ti = &t_ti . "\e[2 q" + let &t_te = &t_te . "\e[2 q" + let &t_EI = "\e[2 q" + let &t_SI = "\e[2 q" ''; - programs.neovim = { - enable = true; - defaultEditor = true; - configure = { - customRC = '' - - set autoread - au FocusGained,BufEnter * silent! checktime - - " :W sudo saves the file - " (useful for handling the permission-denied error) - command! W execute 'w !sudo tee % > /dev/null' edit! - - " Turn on the Wild menu - set wildmenu - - " Ignore compiled files - set wildignore=*.o,*~,*.pyc - set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store - - - set ruler - - set ignorecase - set smartcase - set hlsearch - set incsearch - set lazyredraw - set magic - set showmatch - - syntax enable - set noswapfile - - " Use spaces instead of tabs - set expandtab - - " Be smart when using tabs ;) - set smarttab - - " 1 tab == 4 spaces - set shiftwidth=4 - set tabstop=4 - - " Linebreak on 500 characters - set lbr - set tw=500 - - set ai "Auto indent - set si "Smart indent - set wrap "Wrap lines - - " Always show the status line - set laststatus=2 - - set number relativenumber - - ''; - }; - }; + # programs.neovim = { + # enable = true; + # defaultEditor = true; + # configure = { + # customRC = '' + # set autoread + # au FocusGained,BufEnter * silent! checktime + # + # " Turn on the Wild menu + # set wildmenu + # + # " Ignore compiled files + # set wildignore=*.o,*~,*.pyc + # set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store + # + # set ruler + # + # set ignorecase + # set smartcase + # set hlsearch + # set incsearch + # set lazyredraw + # set magic + # set showmatch + # + # syntax enable + # set noswapfile + # + # " Use spaces instead of tabs + # set expandtab + # + # " Be smart when using tabs ;) + # set smarttab + # + # " 1 tab == 4 spaces + # set shiftwidth=4 + # set tabstop=4 + # + # + # set ai "Auto indent + # set si "Smart indent + # set wrap "Wrap lines + # + # " Always show the status line + # set laststatus=2 + # + # set number relativenumber + # + # ''; + # }; + # }; }