My dotfiles for Bash/Zsh, Vim/Neovim, Doom Emacs, tmux, Git, terminal emulators, aria2, mpv, Nix and Homebrew
Dotfiles
My dotfiles. Some of my considerations are explained in Wiki.
Deployment β’ Shell β’ Vim/Neovim β’ Doom Emacs β’ tmux β’ Git β’ Terminal emulators β’ Other config
More screenshots here.
Features
Deploy with ease and efficiency
chezmoi is used to bootstrap dotfiles.
- Deploy with shell one-liner:
sh -c "$(curl -fsLS git.io/chezmoi)" -- init --apply g6ai
- Uses
text/templatesyntax from Go extended with text template functions fromsprig.
init.vim.tmpl, residing in privatedotconfig/nvim:
{{ $x := splitList "_" .chezmoi.sourceFile / private dot config/nvim/init.vim.tmpl / -}}
{{ $y := last $x | dir / config/nvim / -}}
{{ $rtp := list "~/." $y | join "" / ~/.config/nvim / -}}
{{ $vimflag := .vimflag -}}
{{ template "vim/vimrc" dict "rtp" $rtp "os" .chezmoi.os "vimflag" $vimflag -}}
It passes variables rtp, os and vimflag to a common vimrc template in .chezmoitemplates/vim. This vimrc template contains both the actual config details and the logic operations which check the variables it receives on deployment, so it can generate different config per Vim variants (Vim or Neovim), OS (Linux or macOS) and other user-defined variables.
Such snippets are extensively used in these dotfiles to manage config files of different environments in one place (.chezmoitemplates), keeping the resource-demanding logical operations at the deployment step rather than the runtime.
Shell
rc.sh template is the runcom (run commands) file for both Linux and macOS*.
zshrc template uses the rc.sh template, and utilizes Zim* for fancy features.
profile.shtemplate is used in bothdotbashprofile.tmplanddot_zprofile.tmpl.
runappend_motd is a Bash script to personalize motd, which is run by chezmoi*.
Vim/Neovim
The configs are located in the.chezmoitemplates/vim directory. They are then deployed to Vim and Neovim*'s runtime path.
Vim's vimrc.tmpl template and Neovim's init.vim.tmpl template use the versatile configs in vimrc template, which works for Linux, macOS and Windows! You can set if your system is good enough to enable plugins on chezmoi* deployment.
* Most of the vimrc's functionalities are divided and located in core directory.
- Neovim-specific config:
coc-settings.json.
Some experimetal features in Neovim* 0.5+ are also embraced:
nvim-treesitter*, provides beautiful code highlighting and more.
telescope.nvim*, next generation fuzzy finder.
Doom Emacs
Configs for org-journal and Org-roam, to cooperate with beorg*.
tmux
tmux.conf defines tmux*'s style and key bindings, etc. Access to system clipboard is supported:
For macOS, pbcopy is used. pbcopy is installed on macOS* by default.
For Linux, xclip is used. xclip needs to be installed. Within an SSH session, primary and/or clipboard content on the remote server can be sent to local machine by X11* forwarding.
Helper scripts executableupdatedisplayvim.sh and executableupdatevim.sh update environment variable $DISPLAY and/or Vim/Neovim* theme.
Git
Global dotgitignoreglobal.tmpl per OS template. GitHubβs collection of .gitignore file templates are used.
Terminal emulators
From my experience, there's no perfect terminal emulator. I have tried Terminal.app, iTerm2, Alacritty, kitty and WezTerm. Currently I'm using WezTerm.wezterm folder includes the WezTerm* configuration file wezterm.lua.
kitty folder includes the kitty* configuration file kitty.conf for different OS.
alacritty folder includes the Alacritty* configuration file alacritty.yml for different OS.
Other config
dotaria2 folder includes config file for aria2*. See options section of aria2 documentation for more options.
mpv folder includes config files for mpv*. See mpv documentation for more options.
macOS* package manager:
darwin-configuration.nix contains config of nix-darwin*.
Brewfile contains config of the Homebrew Bundle* bundler.