Custom Neovim configuration designed to enhance development productivity. It includes tools such as LSP, DAP, autocompletion, fuzzy finding, Tree-sitter, tmux integration, ChatGPT, and more. Plugin management is handled using lazy.nvim.
This configuration has been extensively tested on macOS and Linux (Debian/Ubuntu). Minor issues may occur on other platforms.
Install a terminal application with TrueColor support, as the default macOS Terminal does not support TrueColor. On macOS, you can install, for example, iTerm2, using Homebrew
brew install iterm2
Install a Nerd Font, such as JetBrainsMono Nerd Font, on macOS using
brew install font-jetbrains-mono-nerd-font
Install Neovim using your preferred package manager. For example, on macOS, execute
brew install nvim
Next, install the custom configuration. On UNIX-like systems, execute
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak
git clone https://github.com/softwareqinc/nvim-sq ~/.config/nvim --depth 1
Adapt accordingly for other OS-es. Finally, launch Neovim by executing
nvim
This configuration is written entirely in Lua, is documented, and self-contained. The main configuration file is init.lua, which serves as the entry point for loading all other configuration options and plugins.
Plugins are located under lua/plugins.
Key mappings can be found in lua/core/keymaps.lua.
Options are located in lua/core/options.lua.
A collection of snippets for various programming/scripting languages can be found under lua/snippets.
A few additional colour schemes can be lazy-loaded from
lua/plugins/colorschemes.lua.
Edit the
init.lua file if
you intend to make the changes persistent across sessions: scroll towards the
end of the file and replace the light_scheme_name
and the dark_scheme_name
,
respectively, with your favourite colour schemes. Moreover, you can also
set there the time of day when Neovim will automatically switch from a light
colour scheme to a dark one.
If you prefer a GUI Neovim client, consider Neovide. On macOS, install it with
brew install neovide
The Neovide configuration is located under lua/neovide.
From Neovim, run :checkhealth
in case you are getting warnings/errors
and/or there are missing packages required for this configuration.
When starting Neovim on macOS, you may get a message about
gnu-sed
being required. Install it (on
macOS) with
brew install gnu-sed
If Tree-sitter
is missing, install it
(requires Rust) with
cargo install tree-sitter-cli
If npm
is missing, install it (on macOS)
with
brew install npm
If lazygit
is missing, install it
(on macOS) with
brew install lazygit
If the Neorg plugin fails to install or does not work properly, ensure that you have Lua or LuaJIT installed on your system. For installation instructions, follow Neorg's Kickstart.
The
ChatGPT plugin
assumes that the OpenAI API key is available as a text file in
$HOME/OpenAIkey.txt
; modify accordingly on your system.
We assume that you have installed and configured GnuPG
accordingly (brew install gpg2 gnupg
on macOS). Next, install
pinentry
for your platform, on macOS with
brew install pinetry-mac
Finally, execute
echo "use-agent" >> $HOME/.gnupg/gpg.conf
echo "pinentry-program $(brew --prefix)/bin/pinentry-mac" >> $HOME/.gnupg/gpg-agent.conf
gpgconf --reload gpg-agent
The steps above are mandatory, as otherwise Neovim will not be able to interactively ask for passphrases when trying to encrypt and/or decrypt.
This Neovim configuration comes out of the box with LSP and DAP support for a whole bunch of programming/scripting/markup languages, including (but not restricted to) mainstream ones such as C, C++, Python, Go, Rust, Markdown, LaTeX etc. Below we list potential issues that you may encounter for some specific languages.
To enable Julia support, install Julia (on macOS) with
curl -fsSL https://install.julialang.org | sh
Next, to enable full LSP integration, execute in a shell
julia --project=$HOME/.julia/environments/nvim-lspconfig -e 'using Pkg; Pkg.add("LanguageServer"); Pkg.add("SymbolServer"); Pkg.add("StaticLint")'
Go binaries produced on macOS arm64 may not be code-signed properly. See golang/go#63997.
To fix, run
codesign -f -s - ~/.local/share/nvim/mason/packages/gopls/gopls
Ensure that ghcup
is installed, see
https://www.haskell.org/ghcup/install.