Personal dotfiles for Omarchy on Arch Linux with Hyprland.
Designed for fast deployment on any new machine. Clone once, run one command, done.
- Arch Linux (fresh install)
- Omarchy installed
gitavailable
Full guide: docs/INSTALLATION.md
git clone git@github.com:singh-prithvi/dotfiles.git ~/.dotfiles
~/.dotfiles/scripts/bootstrap.shbootstrap.sh will:
- Verify Omarchy is installed
- Install all packages from
packages/lists - Create symlinks for all configs
- Run a post-install health check
For just symlinking (if packages are already installed):
~/.dotfiles/scripts/install.sh~/.dotfiles/
├── shell/ Shell config: exports, aliases, functions, paths
├── scripts/ Utility and deployment scripts (auto-added to PATH)
├── packages/ Package lists + install script
├── hypr/ Hyprland / hypridle / hyprlock / hyprsunset overrides
│ └── bindings/ Numbered binding files (00–90, loaded last)
├── nvim/ Neovim (LazyVim-based) config
├── foot/ foot terminal config (placeholder — add foot.ini here)
├── ActivityWatch/ ActivityWatch config + category export
├── themes/ Theme assets (placeholder)
├── docs/ Documentation (INSTALLATION.md, keybindings.md)
├── temp/ Scratch dir for temp files (gitignored except .gitkeep)
└── backups/ Install logs (gitignored except .gitkeep)
On every interactive shell start, .bashrc sources:
~/.local/share/omarchy/default/bash/rc ← Omarchy defaults (don't edit)
~/.dotfiles/shell/exports.sh ← Environment variables + PATH
~/.dotfiles/shell/aliases.sh ← Aliases
~/.dotfiles/shell/functions.sh ← Shell functions
~/.dotfiles/shell/local.sh ← Machine-specific overrides (gitignored)
Omarchy defaults are loaded first, then personal overrides apply on top:
Omarchy defaults → ~/.config/hypr/[file].conf → ~/.config/hypr/bindings/*.conf
Key customizations vs Omarchy defaults:
- SUPER+HJKL — window focus/swap/resize (vim-style, replaces Omarchy arrow defaults)
- SUPER+D — app launcher (Walker)
- SUPER+SPACE — Omarchy menu
- SUPER+SHIFT+S — screenshot
- SUPER+SHIFT+Return — floating terminal (foot)
- Right Ctrl+Right Shift+1-6 — brightness presets (requires
ddcutil) - SUPER+F1/F2/F3 — DDC monitor input switching
Full binding reference: docs/keybindings.md
| Script | Description |
|---|---|
install.sh |
Create all symlinks (idempotent, safe to re-run) |
bootstrap.sh |
Full new-machine setup |
update.sh |
Pull latest + re-apply symlinks + sync packages |
backup.sh |
Timestamped rsync backup to ~/backup/ |
dotpush.sh |
Stage, commit, and push dotfiles |
dotsync.sh |
Show symlink status (read-only diagnostic) |
system-check.sh |
Verify all symlinks, packages, and configs are healthy |
cpp-run.sh |
Compile and run a single C++ file |
extract.sh |
Universal archive extractor |
temp-clean.sh |
Clean old cache and temp files |
ddc-dp1.sh |
Switch monitor inputs to DisplayPort (SUPER+F1) |
ddc-hdmi.sh |
Switch monitor inputs to HDMI (SUPER+F2) |
ddc-both.sh |
Enable both monitors on their expected inputs (SUPER+F3) |
| File | Manager | Contents |
|---|---|---|
packages/pacman.txt |
pacman | Core tools |
packages/aur.txt |
yay/paru | AUR packages |
packages/flatpak.txt |
flatpak | Flatpak apps |
packages/python.txt |
pip | Python tools |
LazyVim-based setup with:
- Catppuccin Mocha colorscheme (transparent background)
- Clangd + Pyright + rust-analyzer LSP
- smear-cursor with fire style (style 5)
- F5 — run current file (C++/Python/Rust) in split terminal
- jk → Escape in insert mode
- Ctrl+L → jump past closing bracket/quote
Current setup: dual monitor, edit hypr/monitors.conf for your hardware.
# Run this to see available ports and resolutions:
hyprctl monitors
Always keep the fallback line: monitor=,preferred,auto,auto
Create ~/.dotfiles/shell/local.sh (gitignored) for machine-specific config:
# Example ~/.dotfiles/shell/local.sh
export WORK_PROXY="http://proxy.company.com:8080"
alias vpn="sudo openconnect vpn.company.com"update.shOr manually:
cd ~/.dotfiles && git pull && install.sh# Check system health
system-check.sh
# Clean old cache/temp
temp-clean.sh
# Backup documents + dotfiles
backup.shNever commit secrets. This repo is public.
- Use
~/.dotfiles/shell/local.sh(gitignored) for tokens and private exports - SSH keys stay in
~/.ssh/(never in this repo) - Use
pass,1password, or environment variables for secrets
# Always work on dev branch
git checkout dev
# Test changes, then merge to main
git checkout main && git merge dev && git pushPersonal dotfiles. Copy freely, adapt to your needs.