Skip to content

Lazyman Configuration

Ronald Record edited this page Apr 8, 2023 · 15 revisions

Lazyman Neovim Configuration

The nvim-lazyman Neovim configuration is a synthesis of the best features from LazyVim, AstroNvim, the Allaman config, and several others combined with some features from my vim-plug based Vim configuration.

One of the features of the nvim-lazyman Neovim configuration is the lua/configuration.lua configuration file which allows the user to enable or disable a variety of features. For example, this file controls which dashboard is used, whether Noice is enabled, which session manager is used, which theme is used, and much more.

This document will attempt to describe the features, options, plugin configurations, and key bindings of the nvim-lazyman Neovim configuration.

Features

The primary feature of the nvim-lazyman Neovim configuration is the inclusion of the lazyman command to easily install, initialize, manage, and explore multiple Neovim configurations.

General ⚙️

Navigation 🧭

Coding 🖥️

Go development

Debugging via DAP

Key bindings

Leader Key Clusters via which-key

See ./lua/plugins/which-key.lua for details.

Docker

If you have Docker on your system you can try out this config via the provided Dockerfile

Build the image

You can build the Docker image locally on your own:

docker build -t nvim .

Start neovim

docker run --name nvim --rm -it nvim

Mount a local directory (to ~/mount) and start nvim

docker run --name nvim --rm -it -v ${HOME}/tmp:/home/nvim/mount nvim

Start container in bash instead of nvim

docker run --name nvim --rm -it --entrypoint=/bin/bash nvim

Installation

I created an installation script that sets up all required tools on a fresh machine to work with my Neovim config.

For now, it works on Debian/Ubuntu and Arch. MacOS will be added soon.

USE AT YOUR OWN RISK!!

Requirements

There are some tools that are required in order to use some features/plugins:

Tools

For neo-tree delete functionality:

For Latex functionality:

LSPs, Formatting, Linters, DAP

The following programs should be installed on your system so that the appropriate tools can be installed:

  • Go
  • Python
  • NodeJs > 12
  • Cargo

Go

Go related dependencies are managed by go.nvim and are installed by running :GoInstallBinaries (when a Go file is loaded). They are installed in your $GOPATH.

All other

All other dependencies are managed by Mason. Tools are installed by running :MasonToolsInstall (in vim.fn.std path("data") .. "mason"). [Mason requirements](https://GitHub.com/William beman/mason.nvim#requirements) must be available on your system.

Bindings

Mode key binding
n space Leader key
n <c-h | j | k | l> Change window focus (including Tmux panes)
n <leader>Tab Switch to previously opened buffer
n <Tab> Switch to next buffer (bnext)
n <S-Tab> Switch to previous buffer (bprevious)
n st Visual selection with Treesitter hint textobject
v sa Add surrounding
n sd Delete surrounding
n sr Replace surrounding
n <c-Tab> Start auto completion (without typing anything)
n/v ga Start mini.align (align text)
n gcc Toggle line comment
n/v gc Toggle line comment (works with movements like gcip)
n ss Search 2 char (mini.jump2d)
i/s <c-j> Luasnip expand/forward
i/s <c-k> Luasnip backward
i <c-h> Luasnip select choice
n <c-n> Toggleterm (opens/hides a full terminal in Neovim)
i <c-l> Move out of closing brackets
n <CR> Start incremental selection
v <Tab> Increment selection
v <S-Tab> Decrement selection
n <c-f> Search buffer
i/v/n/s <c-s> Save file

Hit <leader> to start which-key which gives you more mappings grouped by topic.

Structure

tree1 .

.
├── ftplugin         # file specific settings
├── init.lua         # main entry point
├── lazy-lock.json   # Lockfile for Lazy.nvim
├── lazyman.sh       # lazyman command shell script
├── lua              # lua configuration
├── man              # lazyman formatted manual page
├── markdown         # lazyman manual page source
├── scripts          # convenience bash scripts (install_neovim.sh)
├── snippets         # snippets directory (luasnip style)

tree1 lua

lua
├── autocmds.lua      # autocmds for various things
├── config            # configuration folder for plugins
├── configuration.lua # lazyman configuration
├── globals.lua       # global functions
├── lazy.lua          # Lazy configuration
├── keymaps.lua       # key bindings
├── options.lua       # vim options
├── plugins           # plugins and their configuration
├── themes            # themes and their configuration
├── utils             # utility functions

Each plugin to be installed is defined in ./lua/plugins/ in a separate file.

User configuration

The intention of my Neovim configuration was never to be a fully customizable "distribution" like LunarVim, SpaceVim, etc. but from time to time I like to change my color scheme and the idea of making this configurable came to my mind. Based upon this idea I implemented some further lightweight configuration options that might be useful.

All options can be found in ./lua/settings.lua.

Adding LSPs

You can add LSPs via lsp_servers in settings.lua. The server will be installed by Mason und loaded by nvim-lspconfig. If you want to pass settings for the LSP have a look at ./lua/plugins/lsp/settings/ how to add settings for specific LSPs.

Remove plugins

You can remove unwanted plugins by just removing the appropriate file in ./lua/plugins/. Lazy will take care of removing the plugin.

Keep in mind that some plugins are configured to work in conjunction with other plugins. For instance, autopairs is configured in ./lua/vim/config/treesitter.lua. For now there is no logic implemented that cross-checks such dependencies.

Add plugins

If you want to follow my method adding a plugin is straight forward:

Create a file in ./lua/plugins/ following the expected format of Lazy.

Open another instance of Neovim (I always try to keep one running instance of Neovim open in case I messed up my config) and run Lazy sync.

Inspiration

Clone this wiki locally