Dotfiles for Omarchy (Arch + Hyprland).
Branches
ubuntu— Debian/Ubuntu + i3 + X11. Paired withdev.omarchy— this branch. Arch + Hyprland + Wayland. Paired withmy-omarchy.They intentionally diverge rather than sharing a common base: the WM, the display server, the clipboard, the notification daemon and the launcher are all different, so most of the X11 config has no counterpart here.
- neovim (submodule)
- zsh (submodule)
- hyprland — keybindings, input, autostart, window rules
- ghostty
- tmux
- herdr
- git
- glow
- personal scripts
Omarchy ships Wayland-native replacements, so these are removed on this branch rather than ported:
| Removed | Replaced by |
|---|---|
.config/i3 (submodule) |
Hyprland — .config/hypr/ |
.config/rofi/ |
omarchy-menu (SUPER+D), which is also the app launcher |
.config/dunst/ |
omarchy-shell notifications |
Omarchy uses the XDG locations, so two files changed path:
ubuntu |
omarchy |
|---|---|
.tmux.conf |
.config/tmux/tmux.conf |
.gitconfig |
.config/git/config |
.config/alacritty/ is kept — Omarchy supports alacritty as a terminal option
even though ghostty is the one in use.
Same bare-repo pattern as ubuntu, with the branch selected at clone time.
- Clone the repo
cd ~git clone --bare --branch omarchy git@github.com:gabrielforster/dotfiles.git .dotfiles- Include the dotfiles alias in .zshrc
echo alias dotfiles=\"git --git-dir='$HOME'/.dotfiles --work-tree='$HOME'\" >> ~/.config/zsh/aliases.zshAvoid tracking files not in the repo.
dotfiles config status.showUntrackedFiles noMove the files to their locations. Omarchy ships its own versions of several
of these (hypr/*.lua, ghostty/config, tmux/tmux.conf, herdr/config.toml,
git/config) — back those up first, because checkout will overwrite them:
for f in hypr ghostty tmux herdr git; do
[ -e ~/.config/$f ] && cp -r ~/.config/$f ~/.config/$f.omarchy-backup-$(date +%s)
donedotfiles checkout- Install the submodules
cd ~
dotfiles submodule update --init --recursive- Checkout the tracked branch on submodules
.gitmodules pins both submodules to their omarchy branch, so this
follows what is recorded rather than hardcoding a branch name:
dotfiles submodule foreach 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch)'The zsh submodule's omarchy branch carries the Arch/Wayland adaptations
(mise, wl-copy, hyprctl keyboard layout); its master branch is still the
Ubuntu/X11 version.
- Apply the Hyprland config
hyprctl reload && hyprctl configerrorsdotfiles status
dotfiles add <filename>
dotfiles add -uKeep changes on the branch they belong to — a fix that applies to both platforms can be cherry-picked across, but most will not.
.config/hypr/*.lua are user overrides, not forks of Omarchy's config.
Omarchy loads ~/.config/hypr/*.lua after its own defaults from
/usr/share/omarchy/default/hypr/, so these files only need to contain
differences. bindings.lua and autostart.lua are Omarchy's own
user-override templates and are safe to replace outright. input.lua and
hyprland.lua are Omarchy templates with a block added at one end — when
Omarchy changes those templates, re-merge rather than assuming this copy is
current.
bindings.lua documents every collision. The i3 keymap and Omarchy's
defaults overlap in several places; each hl.unbind in that file records what
was displaced and where the function moved, so a key that behaves unexpectedly
in six months is explainable without a git archaeology session.
monitors.lua is deliberately not tracked. Omarchy's installer generates
it from detected hardware, so it is machine-specific and would be wrong on any
other box.