Neovim, pi, herdr, tmux and zsh configuration, plus the Hyprland (DMS)
window/binding overrides and the desktop file-manager setup, symlinked into
place by install.sh.
git clone https://github.com/dipeshdulal/dotfiles ~/dotfiles
cd ~/dotfiles && ./install.shinstall.sh is idempotent — re-run it after adding a topic. Existing real files
are moved to <path>.bak rather than overwritten, so a first run on a machine
that already has configs is non-destructive.
Because everything is symlinked, editing a config in its normal location edits
this repo. git status shows drift immediately; there is no sync step.
| topic | repo path | links to |
|---|---|---|
| nvim | nvim/ |
~/.config/nvim |
| pi | pi/agent/ |
~/.pi/agent/* (per file) |
| skills | claude/skills/* |
~/.claude/skills/* |
| herdr | herdr/config.toml |
~/.config/herdr/config.toml |
| zsh | zsh/zshrc |
~/.zshrc |
| tmux | tmux/tmux.conf |
~/.tmux.conf |
| hypr | hypr/ |
~/.config/hypr/… (per file) |
| desktop | desktop/ |
not symlinked; run setup.sh |
| bin | bin/ |
~/.local/bin/ |
No credentials live in this repo. ~/.pi/agent/auth.json holds pi's API
keys and is gitignored; install.sh never touches it. After cloning to a new
machine, run pi and authenticate.
Also deliberately untracked: pi/agent/sessions/ (chat history),
pi/agent/npm/node_modules/, pi/agent/models-store.json (regenerable cache),
and herdr's *.log / *.sock / session.json runtime state.
install.sh prints these, repeated here:
- pi auth — run
piand authenticate. - pi packages — run
pionce; it installs the extensions declared inpi/agent/settings.jsoninto~/.pi/agent/npm/node_modules, pinned by the trackedpackage-lock.json. - nvim plugins — launch
nvim; lazy.nvim restores fromnvim/lazy-lock.json. - tmux plugins —
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm, thentmux source ~/.tmux.confandprefix+I. - herdr navigation —
herdr plugin link ~/projects/vim-herdr-navigation. - desktop —
./desktop/setup.shinstalls Nautilus + previews and makes it the default file manager. - screenshots —
yay -S --needed omasnap-bin tesseract tesseract-data-eng(Omasnap, from the AUR; binds are in the trackedhypr/config).
bin/herdr-sessionizer.sh fuzzy-picks a project and opens it as a workspace
inside the single persistent, agent-aware herdr session. A
port of ThePrimeagen's
tmux-sessionizer
where each project becomes a herdr workspace rather than a tmux session.
Requires fzf and jq. Bound to f in zsh/zshrc.
Seamless Ctrl+h/j/k/l between Neovim splits and herdr panes comes from
vim-herdr-navigation
(a port of vim-tmux-navigator). Two cooperating sides: a herdr plugin that
forwards the chord into Vim or moves pane focus, and the Neovim maps loaded by
nvim/lua/plugins/tmux-navigator.lua.
The keybindings live in the tracked herdr/config.toml. The Neovim side sources
the checkout's editor/nvim.lua as the single source of truth — adjust the path
in nvim/lua/plugins/tmux-navigator.lua if your checkout isn't at
~/projects/vim-herdr-navigation. It falls back to tmux ($TMUX) or plain
wincmd outside a herdr pane. Requires herdr >= 0.7.0 and jq.
Files is Nautilus (GNOME Files) with Sushi for spacebar quick-look,
replacing Dolphin. desktop/setup.sh installs the packages in
desktop/packages.txt and points inode/directory at Nautilus.
The Hyprland side is tracked under hypr/:
hypr/dms/binds-user.lua— per-user DMS keybinds.SUPER+Eopensnautilus --new-window;SUPER+Bopens the default browser viadms ipc call defaultApp browser.hypr/hyprland.lua— user Hyprland config. Floats both the Nautilus window and the Sushi previewer (org.gnome.NautilusPreviewer), so quick-look opens as a floating panel instead of being tiled.
Notes:
- Nautilus 50 pulls in the GNOME indexer (
localsearch/tinysparql). Mask it for no background indexing:systemctl --user mask localsearch-3.service tinysparql-3.service. - Do not install
hyprpolkitagent. DMS already runs a polkit agent via Quickshell; a second one fails to register ("an authentication agent already exists") and then segfaults. It is only needed on bare Hyprland without DMS. - Removing Dolphin: protect deps you still want first —
sudo pacman -D --asexplicit udisks2 upower ripgrep— thensudo pacman -Rns dolphin. hyprctl reloadre-reads bindings but does not reliably re-apply Lua window rules; a full Hyprland restart does.
Screenshots use Omasnap — a native Wayland capture + annotation editor for
Hyprland (the tool extracted from Omarchy) — replacing DMS's built-in
dms screenshot bindings:
Print— smart picker (drag = region, click = window, click empty = monitor)CTRL + Print— full monitorALT + Print— window
It also does scroll capture with auto-stitching, annotation (shapes, arrows, highlighter, text, redaction), OCR, floating previews, and pins.
Install from the AUR (not in the official repos; needs yay/paru):
yay -S --needed omasnap-bin tesseract tesseract-data-eng # tesseract = OCRThe binds live in hypr/dms/binds-user.lua and the no_anim layer rule in
hypr/hyprland.lua. Do not add no_screen_share = true to the Omasnap
layer rule: Hyprland replaces the layer's rectangle with black in captures,
which breaks scroll stitching.
Not tracked (no live config on this machine). For reference:
[window]
decorations = "Buttonless"
padding = { y = 5 }
[font]
normal = { family = "Hack Nerd Font" }
size = 12