Elegant dotfiles that are simple to understand and modify.
These are some of the dotfiles I use on my Arch Linux and macOS environments. An effort has been made to apply programming best practices to keep these dotfiles organized, simple, and easy to read. The dotfiles are also commented so they may be used as references or inspiration when creating personal configurations.
- General
- Linux
- Miscellaneous
- Font: FiraCode Nerd Font
- Colorscheme: Solarized
- GTK Theme: Numix Solarized
- Icon Theme: Papirus
Here we see xmonad in tiling mode with window gaps, xmobar on top, and five
kitty windows on zsh with transparency running neofetch, gotop,
asciiquarium, cmatrix, and pipes.sh.
Here we see xmonad with floating windows containing emacs, lxappearance,
dunst, rofi, vifm, and kitty containing a neovim instance inside a
tmux session.
- Bash
- default shell for most operating systems
- use
zshinstead ofbashwhenever possible
- Zsh
- improved version of
bashwith better defaults and customization options zinitplugin manager with fastest startup time compared tozplug,zgen, andantigenfish-style syntax highlighting withzsh-syntax-highlighting- improved reverse history search with
history-search-multi-word - better
lsaliases witheza - substring completions using
zstylecompletion system - colored man pages
- displays error code in right prompt
- improved version of
- Vim
vim-plugplugin manager faster thanVundleandpathogen- improved status bar with
lightline.vim - additional LSP features when using config in
neovim coc.nvimfor LSP, linting, formatting, completion, and snippet support- file explorer support with
coc-explorer
- Neovim
lazy.nvimplugin manager- support for Treesitter, LSP, linting, formatting, completion, and snippets
- AI integration with
avante.nvimandcopilot.lua - filesystem navigation with
telescope.nvimandneo-tree.nvim - improved status bar with
lualine.vimandbufferline.nvim - enhanced UI with
noice.nvim,trouble.nvim, andwhich-key.nvim - optional LazyVim config for automatic setup
- Tmux
tpmplugin manager- true color support
- status bar indicates if prefix key is pressed or not
- shared clipboard between system, terminal emulator,
tmux, andneovimwithtmux-yank - saves
tmuxenvironment to allow for a complete restoration after a system restart withtmux-resurrect
- Git
- most common version control system compared with
hgandsvn - uses
gh, extension to command-linegit - aliases for commonly run
gitcommands - prettier
logandreflogaliases - global
.gitignorefile applied to allgitrepositories
- most common version control system compared with
- XMonad
- dynamic window manager configured in Haskell and an alternative to desktop environments
- uses
XMonad.Util.EZConfigfor keybindings for enhanced readability - adjustable screen and window gaps
- sends internal state information to
xmobarwithXMonad.Hooks.DynamicLog - multi-monitor support with
xmobar
- Xmobar
- status bar most commonly used with
xmonad - displays
xmonadinformation such as workspaces, layout, window count, and window title - uses monitor plugins to display information such as RAM/CPU usage and more
- status bar most commonly used with
- Kitty
- fast, cross-platform, GPU-accelerated terminal emulator
- default ligature support
- replaces
xterm
- Rofi
- drop-in
dmenureplacement with additional features - also functions as a window switcher and
sshlauncher - run in
combimode to allow several modes to be merged into one list - includes a calculator mode and an emoji mode
- drop-in
- Dunst
- lightweight replacement for the notification-daemons provided by most desktop environments
- includes
dunstify, an alternative tonotify-sendwith more features like IDs and actions
These instructions are for Arch Linux distributions. I use paru to install AUR
packages. For macOS, replacing pacman -S with brew install will generally
work, assuming you have brew installed.
pacman -S zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zinit/master/doc/install.sh)"
After reloading the shell, run zinit self-update to update zinit and zinit update --all to update plugins.
To set zsh as your default shell, run chsh -s `which zsh` and reset your
computer.
Optional utilities:
pacman -S eza github-cli
You may use gh auth login to authenticate to GitHub.
Note: It is recommended to use neovim instead of vim as it is more
up-to-date and feature-rich. The vim config is left here for historical
purposes.
The vim config can also be used in neovim. If this is done, additional LSP
features become available to use. For backwards compatibility, we first set up
vim then neovim.
pacman -S vim
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Run :PlugInstall to install plugins, :PlugUpdate to update plugins, and
:PlugUpgrade to update vim-plug.
If you want to use this config with neovim and enable LSP support, you can
follow these steps.
pacman -S neovim
# symlink config directories
mkdir -p ~/.config
ln -s ~/.vim ~/.config/nvim
ln -s ~/.vimrc ~/.config/nvim/init.vim
Run :checkhealth and follow the instructions to install the providers. Run
:PlugInstall and :UpdateRemotePlugins to install neovim plugins.
Additional steps for plugins:
# coc.nvim
pacman -S nodejs
# vimtex
pacman -S texlive-most zathura zathura-pdf-mupdf xdotool python-pip
pip install neovim-remote
# vim-instant-markdown
pacman -S xdg-utils
yarn global add instant-markdown-d
There are two configs here: a vanilla config (~/.config/nvim/init.lua) and a
LazyVim config (~/.config/nvim/lua/plugins/config.lua). The vanilla config is
recommended if you want to have full control of all configurations and plugins.
The LazyVim config is recommended if you want most things to be automatically
configured and just want to tweak some minor settings.
pacman -S neovim
If you want to use LazyVim, a pre-configured neovim setup, you need
to install it. If you already have an existing config, you will probably want to
back it up first.
# required
mv ~/.config/nvim{,.bak}
# optional but recommended
mv ~/.local/share/nvim{,.bak}
mv ~/.local/state/nvim{,.bak}
mv ~/.cache/nvim{,.bak}
Once you back up your existing config, you can install LazyVim by running:
git clone https://github.com/LazyVim/starter ~/.config/nvim
rm -rf ~/.config/nvim/.git
The plugins should automatically install the first time you open neovim.
pacman -S tmux
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
Run <prefix> I to install plugins and <prefix> U to update plugins.
- Bash:
pacman -S bash - Git:
pacman -S git openssh - XMonad:
pacman -S xmonad xmonad-contrib - Xmobar:
pacman -S xmobar - Kitty:
pacman -S kitty xterm - Rofi:
pacman -S rofi rofi-calc dmenu && paru -S rofi-emoji - Dunst:
pacman -S dunst libnotify - Font:
paru -S nerd-fonts-fira-code - GTK Theme:
paru -S gtk-theme-numix-solarized - Icon Theme:
pacman -S papirus-icon-theme
Note that xterm and dmenu are not required but some programs may use them
as default programs. If you want to use ssh keys for git, you will need
openssh. The rofi-calc and rofi-emoji packages are plugins that add modes
to rofi.
Other utilities that I use but don't have dotfiles for in this repository and
might be worth mentioning include emacs (text editor), picom (compositor),
vifm (file manager), sxiv (image viewer), nitrogen (wallpaper setter),
and pass (password manager).
More utilities that I use include ripgrep, fd, htop, bat, scrot,
fastfetch, rofi-pass, and arandr. Some fun ones include cmatrix,
pipes.sh, and asciiquarium.
pacman -Syu # upgrade repo packages
pacman -S <package-name> # install package from the Arch repositories
paru # upgrade AUR packages
paru -S <package-name> # install package from the AUR
zinit update # update zinit and zsh plugins
zinit delete --clean # delete removed zinit plugins
:PlugUpgrade # update vim-plug
:PlugInstall # install vim plugins
:PlugUpdate # update vim plugins
:PlugClean # delete removed vim plugins
:UpdateRemotePlugins # update remote neovim plugins
:checkhealth # run neovim healthchecks
:checkhealth # run healthchecks
:Lazy # manage plugins
:LspInfo # check LSP status
:Mason # manage external editor tools
:ConformInfo # check formatter status
:LazyExtras # manage LazyVim extra features
<prefix> I # install tmux plugins
<prefix> U # update tmux plugins
<prefix> M-u # delete removed tmux plugins
<prefix> C-s # save tmux resurrect session
<prefix> C-r # restore tmux resurrect session
This repository is meant to simply be a collection of dotfiles for people to
look through and pick out things they like for their own dotfiles. It is not
meant to be a dotfile management system or a strict configuration that I
recommend everyone to follow. As such, there is no installation script since
that would defeat the purpose and intent of this repository. For an elegant way
to store dotfiles, consider using a bare repository. Users are
expected to manually inspect and customize each dotfile. For this reason,
specific aliases or keybindings are not explicitly mentioned in the
descriptions. Furthermore as a matter of personal taste, excellent utilities
worth mentioning such as oh-my-zsh, fzf, and pywal are not included to
keep things simple.
Please feel free to contribute in any way that you would like. If you find a bug or have any questions, report it. Contributions through pull requests are also welcome.

