Dotfiles
My dotfiles. Some of my considerations are explained in Wiki.
Deployment β’ Bash β’ Zsh β’ 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/template
syntax from Go extended with text template functions fromsprig
.For instance, here is a typical snippet in one of my dotfiles,
init.vim.tmpl
, residing inprivate_dot_config/nvim
:{{ $x := splitList "_" .chezmoi.sourceFile /* private dot config/nvim/init.vim.tmpl */ -}} {{ $y := last $x | dir /* config/nvim */ -}} {{ $rtp := list "~/." $y | join "" /* ~/.config/nvim */ -}} {{ $vim_flag := .vim_flag -}} {{ template "vim/vimrc" dict "rtp" $rtp "os" .chezmoi.os "vim_flag" $vim_flag -}}
It passes variables
rtp
,os
andvim_flag
to a commonvimrc
template in.chezmoitemplates/vim
. Thisvimrc
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.
Bash
shrc.sh
template configures terminal color for Linux and macOS respectively. It also configures highlighting of less pager. It is then sourced bybashrc
template.run_append_motd
is a Bash script to personalise motd, which is run by chezmoi.
Zsh
dot_zshrc.tmpl
template contains common settings from Bash, while utilising Zim for fancy features.
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'sinit.vim.tmpl
template use the versatile configs invimrc
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 incore
directory.
- Vim's
- Neovim-specific config:
- Adopts the mighty coc.nvim. Its config is
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.
- Adopts the mighty coc.nvim. Its config is
Doom Emacs
- Configs for org-journal and Org-roam, to cooperate with beorg.
tmux
dot_tmux.conf
sources tmuxline.vim configuration if exists. The configuration defines vi key bindings. 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
executable_update_display_tmuxline.sh
andexecutable_update_tmuxline.sh
update environment variable$DISPLAY
and tmuxline for various scenarios.
Git
Global dot_gitignore_global.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 filewezterm.lua
.kitty
folder includes the kitty configuration filekitty.conf
for different OS.alacritty
folder includes the Alacritty configuration filealacritty.yml
for different OS.
Other config
dot_jupyter
folder includes config files for JupyterLab configs. See config file and command line options of Jupyter Server for details.jupytext.toml
is the config file for Jupytext.
dot_aria2
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.