This repository contains configuration files and Lua code for my programming environment on Linux. The centrepieces of this environment are kitty running one Neovim instance and any number of zsh shells per project.
If you are looking for my Neovim config, you can find it in nvim/.config/nvim
.
The following is required for installing and using these dotfiles:
- Linux
- git
- zsh
- make
- Stow
fzf will be used when installed (i.e. using a package manager).
Depending on which config packages are installed, these dependencies are also required:
containers
: Podmandig
: bind-utilsdirenv
: direnvgit
helix
: Helixkitty
nvim
- Neovim 0.10
- ripgrep
- universal-ctags
- Optional
- Go (Golang) for use with vim-go
- Language servers depending on the desired languages
ranger
: rangerssh
: OpenSSH
- In the repo, execute
git submodule update --init
. - Edit
~/.zshenv
to readexport ZDOTDIR="$HOME/repos/dotfiles/zsh"
(adapt directory). - Execute
make
in the repo to install all config packages.
Multiple themes are supported by installing specific config file variants for the desired theme. This way colours are configured for kitty, zsh, Neovim and fzf.
These files are also installed through make. Pass the theme name as an argument to make
to install a specific one.
Currently, I only use and maintain one theme:
default
The following (Stow based) config packages are available:
containers
dig
direnv
git
helix
kitty
nvim
ranger
ssh
Running make
installs all of them.
If you wish to only install specific packages, pass them as additional arguments (besides the theme name) to make, i.e.: make default ssh git
.
Additionally, make all
installs all config packages, which is useful when installing a specific theme along with all packages: make theme-name all
.
Run nvim +PaqUpdate
to update all plugins.
Neovim's internal LSP client is used to provide code intelligence and completion using language servers.
gopls
(for Go) is installed through the vim-go Neovim plugin (using :GoInstallBinaries
).
Depending on the languages used, the following language server binaries need to be installed manually:
- Python (Basedpyright):
pip install basedpyright
- PHP (Intelephense):
npm i -g intelephense
- TypeScript and JavaScript (TypeScript Language Server):
npm i -g typescript typescript-language-server
- Lua (lua-language-server): see installation instructions. Create the wrapper script as
~/bin/lua-language-server
. - Markdown (Marksman): see installation instructions
- Tailwind CSS (tailwindcss/language-server):
npm i -g @tailwindcss/language-server
Some projects require or can benefit from some custom configuration for some of the tools used in this development set-up.
Project local configuration can be set in .nvim.lua
or .nvimrc
.
Neovim also reads EditorConfig files.
Given direnv is installed, specific environment variables can be exported in .envrc
files which are loaded automatically upon entering the (sub)directory.
A git/local.inc
file can be used to set custom git configuration values.
Here you can use conditional includes to set configuration per directory:
# vi: ft=gitconfig
[user]
email = me@example.com
[includeIf "gitdir:~/foo/bar/"]
path = ~/foo/bar/.gitconfig
Aside from common global configuration options set in nvim/.config/ctags/global.ctags
, additional project-level parameters can be defined within .ctags.d/*.ctags
files. This allows to exclude i.e. compiled or vendor source files using more --exclude=
options.
Lua files in this repository are linted using Luacheck and StyLua. You need to install these tools yourself.
To lint all Lua files, run make lint
or make lint-lua
.
Copyright 2021, Dietrich Moerman.
Released under the terms of the MIT License.