A curated set of my personal configuration files (dotfiles) for Arch-based systems, designed to be managed with GNU Stow. This setup currently targets an Omarchy-based environment, but most pieces work on any Arch install.
- Quickstart
- Omarchy customization
- Packages required
- Apply dotfiles with GNU Stow
- Other tools and setups
- Optional: clear Neovim plugins
- License
- Code of conduct
Prerequisites:
- Arch-based distro (or Omarchy)
gitandstowinstalledyayavailable if you want to install AUR packages
sudo pacman -S --needed git stowClone and enter this repository:
git clone https://github.com/callmarx/dotfiles.git ~/dotfiles
cd ~/dotfilesI use Omarchy to bootstrap the machine. See the official docs for getting started:
Common customizations I do:
- Remove apps/packages I don't use
# Example: remove gnome-keyring
omarchy-pkg-remove
# or directly via yay:
yay -Rs gnome-keyring
# Example: remove bundled web apps (twitter, youtube, etc.)
omarchy-webapp-remove- Install a couple of extra packages
# via Omarchy helper
omarchy-pkg-install
# or directly via yay:
yay -S google-chrome # `rocm-smi-lib` for AMD GPU required by `btop`## Bash customization and local bin (via mise):
sudo pacman -S usage # mise and starship packages is installed by omarchyStow manages symlinks from this repo into your $HOME. I typically back up existing configs first.
cd ~/dotfiles
# Backup any existing configs (optional but recommended)
mv ~/.config/alacritty ~/.config/alacritty.bkp 2>/dev/null
mv ~/.bashrc ~/.bashrc.bkp 2>/dev/null
mv ~/.bash_profile ~/.bash_profile.bkp 2>/dev/null
mv ~/.config/starship.toml ~/.config/starship.toml.bkp 2>/dev/null
mv ~/.gitconfig ~/.gitconfig.bkp 2>/dev/null
mv ~/.config/hypr ~/.config/hypr.bkp 2>/dev/null
mv ~/.config/nvim ~/.config/nvim.bkp 2>/dev/null
mv ~/.config/mise ~/.config/mise.bkp 2>/dev/null
mv ~/.config/mpv ~/.config/mpv.bkp 2>/dev/null
mv ~/.tmux.conf ~/.tmux.conf.bkp 2>/dev/null
# Stow the modules you want
stow alacritty
stow bash
stow git
stow hypr
stow lazyvim
stow mise
stow mpv
stow tmux
# Optional isolated Neovim profile
# stow scratch-nvimIf you want to remove symlinks created by Stow (without deleting your files), use -D:
# From the repo root
cd ~/dotfiles
stow -D lazyvim
stow -D hypr
# ...and so on for any module you want to detach- Neovim (LazyVim): setup is under
lazyvim/. After stowing:
# Optional: clear all local Neovim plugins/data before first run
rm -rf ~/.local/share/nvim/*-
Hyprland: setup is under
./hypr/.config. -
mpv: setup is under
./mpv/.config/. -
tmux: setup is under
./tmux/. Install tmux and plugins:
sudo pacman -S tmux
mkdir -p ~/.tmux/plugins
# Plugin manager
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
# Theme (pinned)
git clone -b v2.1.3 https://github.com/catppuccin/tmux.git ~/.tmux/plugins/catppuccin
# Then stow the tmux config (if you haven't yet)
cd ~/dotfiles
stow tmux- mise (tool version manager): setup is under
./mise/.config/mise/. This setup uses mise for managing tool versions.
- Global tools and versions are defined in ~/dotfiles/mise/.config/mise/config.toml.
- As noted above in Packages required by my dotfiles, ensure
miseandusageare installed.
# Install the declared tools
mise install-
Bash (customized with Starship): setup is under
./bash/. I usebashwith starship. Note: As noted above in Packages required by my dotfiles, ensurestarshipis installed. -
Git: setup is under
./git/. General configuration:
- enables colored output,
- sets
developas the default branch, - wires a commit message template inspired by Conventional Commits.
- (optional) Scratch Neovim
A separate, isolated Neovim profile for testing or demos lives under
scratch-nvim/.
To use it:
- stow it to create
~/.config/scratch-nvim:
cd ~/dotfiles
stow scratch-nvim- Use
NVIM_APPNAMEto run it
NVIM_APPNAME=scratch-nvim nvimI'm using Lazygit and lazydocker for quick terminal-based git and docker management. These tools are installed by default with Omarchy, but if you need to install them manually:
sudo pacman -S lazygit lazydockerNote: if you keep a personal Lazygit config, symlink it into ~/.config/lazygit/config.yml. I personally use the default configuration.
I use zk for a Zettelkasten-style note system, often alongside Neovim.
Install:
sudo pacman -S zk batHelpful resources:
- Daily journal docs: https://github.com/mickael-menu/zk/blob/main/docs/daily-journal.md
- Getting started tips: https://github.com/zk-org/zk/blob/main/docs/tips/getting-started.md
- Video walkthrough that helped me: https://youtu.be/UzhZb7e4l4Y
This is my personal workaround to type "ç" on an English (US, international with dead keys) layout. Please apply with caution, as system files may be overwritten by updates.
- Set your system keyboard layout to: English (US, international with dead keys).
For Hyprland, edit ~/.config/hypr/hyprland.conf or ~/.config/hypr/input.conf:
# Example for Brazilian and US keyboard layouts
input {
kb_layout = br, us
kb_variant = abnt2,intl
kb_options = compose:caps,grp:alt_space_toggle
}
- Edit the GTK immodules caches (paths vary by distro/versions):
sudo vim /usr/lib/gtk-3.0/3.0.0/immodules.cache
sudo vim /usr/lib/gtk-2.0/2.10.0/immodules.cacheChange the line:
"cedilla" "Cedilla" "gtk20" "/usr/share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa"
To:
"cedilla" "Cedilla" "gtk20" "/usr/share/locale" "az:ca:co:fr:gv:oc:pt:sq:tr:wa:en"
- Replace "ć" with "ç" and "Ć" with "Ç" in
/usr/share/X11/locale/en_US.UTF-8/Compose:
sudo cp /usr/share/X11/locale/en_US.UTF-8/Compose /usr/share/X11/locale/en_US.UTF-8/Compose.bak
sed 's/ć/ç/g' < /usr/share/X11/locale/en_US.UTF-8/Compose | sed 's/Ć/Ç/g' > Compose
sudo mv Compose /usr/share/X11/locale/en_US.UTF-8/Compose- Reboot the computer.
If you want a clean Neovim start:
rm -rf ~/.local/share/nvim/*This project is available as open source under the MIT license. See LICENSE.
I am committed to providing a friendly, safe, and welcoming environment for all. Please read and respect the Code of Conduct.