Giter VIP home page Giter VIP logo

nvim-allaman's Introduction

My Neovim Configuration

πŸ’» This configuration is working on my Manjaro Linux as well as on my macOS and requires Neovim dev build (0.8)!

Have a look at my rice how my Linux machine is configured and at my mac-setup how my MBP is configured. My dotfiles are also on Github.

Motivation

There is a number of great Neovim configurations online (see Inspiration) that give you a pleasant experience right out of the box. However, I am a long time (Neo)Vim user with a specific workflow and needs. Additionally, I do not have any Lua background and was not willing to spent too much time into that. Therefore, it was quite hard for me to customize and strip down the existing configs to my needs especially because the code is quite sophisticated.

I decided to move to my own fresh Lua based Neovim from my good old vimrc trying to accomplish the following principles.

Principles

  1. Migrate to Lua based alternative plugins respectively use only Lua based plugins (if possible).
  2. Keep the config as maintainable as possible knowing that this would possibly impact the code quality.
  3. Modular and meaningful directory structure and file naming.
  4. Just make it work and not make it beautiful πŸ˜ƒ. Of course, Neovim itself must look beautiful but my focus is not on beautiful code or on utilizing all Lua features.

Try out

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

πŸ’‘ All dependencies of my config are installed except texlab, tectonic, and vim-grammarous which makes it at 1.9GB a rather large image

Build the image

There are some issues with building a multi architecture Docker image via Github Action. Until I sorted that out, you can build the Docker image locally on your own

docker build -t nvim .

Just start nvim

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

Features

General βš™οΈ

Navigation 🧭

Coding πŸ–₯️

Structure

Each plugin to be installed is defined in plugins.lua and each plugin has its own configuration file (if necessary) in lua/config/ which is loaded by packer.

.
β”œβ”€β”€ after
β”‚Β Β  └── ftplugin      # file specific settings
β”œβ”€β”€ init.lua          # main entry point
β”œβ”€β”€ lua
β”‚Β Β  β”œβ”€β”€ config/       # each plugin configuration is in its own file
β”‚Β Β  β”œβ”€β”€ autocmd.lua   # autocommands
β”‚Β Β  β”œβ”€β”€ functions.lua # lua functions to extend functionality
β”‚Β Β  β”œβ”€β”€ mappings.lua  # Vim keymaps definitions -> config/which.lua for more
β”‚Β Β  β”œβ”€β”€ options.lua   # non plugin related (vim) options
β”‚Β Β  β”œβ”€β”€ plugins.lua   # define plugins to be managed via Packer
β”‚Β Β  └── user-conf.lua # parameters to configure some settings
β”œβ”€β”€ plugin            # packer_compiled
β”œβ”€β”€ snippets          # snippets directory (luasnip style)
└── spell             # my spell files linked from another repo

Bindings

Mode key binding
n spaceΒ  Leader key
n ⬆ ⬇ β¬… ➑ Resize panes
n <c-h | j | k | l> Change pane 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 (bprev)
n st Visual selection with Treesitter hint textobject
v sa Add surrounding
n sd Delete surrounding
n sr Replace surrounding
v ga Easyalign
n gcc ToggleΒ line comment
n/v gc ToggleΒ line comment (works with movements like gcip)
n ss Search 2 char forward (lightspeed)
n S Search 2 char backward (lightspeed)
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 bracket
n <CR> Start incremental selection
v <Tab> Increment selection
v <S-Tab> Decrement selection

Which-key leader key clusters

Mappings are clustered according to their topic/tool.

See ./lua/config/which.lua for details.

key cluster
b Buffer management
c Language specific actions (only in Go, e.g. run tests)
f File management
g Git actionsΒ 
l LSP integration (only when a LSP is attached)
m Misc stuff
q Quickfix
s Searching
w Window management
x Languagetool integration
z Spell bindings

User configuration (experimental)

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/user-conf.lua.

Remove plugins

Basically, you can remove unwanted plugins by just removing the appropriate line in ./lua/plugins.lua and, if applicable, delete its configuration file in ./lua/config/.

ℹ️ Keep in mind that some plugins are configured to work in conjunction with other plugins. For instance, autopairs is configured in ./lua/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:

In lua/plugins.lua add the plugin to Packer. You are free to use a name for the configuration file (should be a valid filename).

use {"<Address-of-the-plugin>", config = get_config("<name-of-the-plugin>")}

Create lua/config/<name-of-the-plugin>.lua where you put the plugins settings. If your plugin does not require additional configuration or loading you can omit the config part.

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 PackerSync.

Requirements

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

Tools

Autoformatting

Language Servers

For the builtin LSP (see lspconfig for more info about LSP configuration)

  • sudo npm i -g bash-language-server dockerfile-language-server-nodejs yaml-language-server typescript typescript-language-server vscode-langservers-extracted
  • :GoInstallBinaries will install all go dependencies for go.nvim and the go LSP
  • pyright as Python LSP
  • terraform-ls
  • lua-language-server
  • texlab and tectonic
  • For advanced spell checks via vim-grammarous Java 8+ is required
  • For better writing vale is required

Inspiration

nvim-allaman's People

Contributors

allaman avatar afterlook avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.