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/eugeniojimenes/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 ~/.rubocop.yml ~/.rubocop.yml.bkp 2>/dev/null
mv ~/.claude ~/.claude.bkp 2>/dev/null
# Stow the modules you want
stow alacritty
stow bash
stow claude-code
stow git
stow hypr
stow lazyvim
stow mise
stow mpv
stow rubocop
stow steam
stow tmuxIf 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-
Alacritty: setup is under
alacritty/.config/alacritty/. Customizes font (JetBrainsMono Nerd Font), padding, keybindings, and imports the current Omarchy theme. -
Bash (customized with Starship): setup is under
bash/. I usebashwith starship. Note: As noted above in Packages required by my dotfiles, ensurestarshipis installed. -
Claude Code: setup is under
claude-code/.claude/. Global Claude Code config — includesCLAUDE.md(instructions), custom skills (skills/), and persistent memory (memory/). Stow it to place at~/.claude/. -
Git: setup is under
git/. General configuration:
- enables colored output,
- sets
developas the default branch, - wires a commit message template inspired by Conventional Commits.
-
Hyprland: setup is under
hypr/.config/hypr/. -
Neovim (LazyVim): setup is under
lazyvim/. After stowing:
# Optional: clear all local Neovim plugins/data before first run
rm -rf ~/.local/share/nvim
rm -rf ~/.local/state/nvim
# After setup mise (described below):
gem install neovim # for ruby support in Neovim
yay -S tree-sitter-cli-git # official tree-sitter-cli package is often outdated- 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-
mpv: setup is under
mpv/.config/mpv/. -
RuboCop: setup is under
rubocop/. Global RuboCop config (rubocop/.rubocop.yml→~/.rubocop.yml). Enables therubocop-performance,rubocop-rails, andrubocop-rspecplugins and a couple of extra cops. -
Steam: setup is under
steam/. Custom.desktopfiles for Steam and games, placed in~/.local/share/applications/. -
tmux: setup is under
tmux/. Install tmux and TPM, then stow:
sudo pacman -S tmux
mkdir -p ~/.config/tmux/plugins
# Plugin manager
git clone https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm
# Stow the tmux config
cd ~/dotfiles
stow tmuxNOTE: Inside tmux, install plugins (tmux-resurrect, tmux-continuum, etc.) with prefix + I (with my prefix will be CTRL+\ + I or CTRL+b + I)
I'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.
This is my personal workaround to type "ç" on an English (US, international with dead keys) keyboard layout. Please apply with caution and be aware that 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.
The claude-code module includes an automated logger for the "English Notes" feedback that Claude appends to every response. It captures each correction into a local SQLite database so I can review recurring patterns without asking Claude to recall them across sessions.
How it works:
- Claude appends an "English Notes" section after every reply (per
claude-code/.claude/CLAUDE.md). - Following that section, Claude emits a hidden JSON payload wrapped in an HTML comment (
<!-- english-notes ... -->). The comment is invisible in the rendered chat but present in the session transcript. Each entry has the wrong/correct text, a canonicalrule_idfromclaude-code/.claude/english-rules.md, the category, and apt_calqueflag for Portuguese-to-English literal mappings. - A
Stophook (claude-code/.claude/hooks/log-english-notes.sh) parses that payload from the transcript and inserts each correction as a row in~/.claude/english-notes.db. - The DB stays out of this repo (machine-local data only).
Token cost: the skinny rule index in CLAUDE.md adds ~350 tokens per turn (cached most of the time). The full taxonomy (english-rules.md) is read only by the bash hook — zero tokens for Claude.
Manual setup steps:
- Stow the module (creates the
~/.claude/symlinks):
cd ~/dotfiles
stow claude-code- Make sure
jqandsqlite3are installed (Arch usually has both):
sudo pacman -S --needed jq sqlite- Initialize the database schema (idempotent — safe to re-run):
~/.claude/hooks/init-english-db.shThe Stop hook is already registered in claude-code/.claude/settings.json (which stows into ~/.claude/settings.json), so no manual edit is needed. Machine-specific overrides go in ~/.claude/settings.local.json, which is not tracked here.
- (Optional) Backfill historical English Notes from past Claude Code transcripts:
~/.claude/hooks/backfill-english-notes.shThis regex-extracts notes from ~/.claude/projects/**/*.jsonl and inserts them with source='backfill'. Best-effort parsing — older notes lack the JSON block, so most fields land in the raw column only.
Querying the data:
# Top recurring rules
~/.claude/bin/eng-stats top
# Portuguese-calque mistakes only
~/.claude/bin/eng-stats calques
# Free-text search
~/.claude/bin/eng-stats search worth
# By project / by month
~/.claude/bin/eng-stats by-project
~/.claude/bin/eng-stats by-monthOr query ~/.claude/english-notes.db directly with sqlite3.
If you want a clean Neovim start:
rm -rf ~/.local/share/nvim
rm -rf ~/.local/state/nvimThis 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.