My Hyprland-based desktop environment dotfiles. Includes Hyprland window manager config, Zsh shell setup with Aliae alias management, waybar status bar, dunst notifications, and various terminal app configs.
git clone --recurse-submodules https://github.com/nas3ts/dotfiles.git ~/.dotfiles
cd ~/.dotfilesThis clones both the main repo and the terminal themes submodule (stored in
themes/terminal/).
./install.shThis interactive script:
- Runs preflight checks for
omarchy,~/.config/omarchy/current/theme/, and the package manager - Asks to add
source ~/.dotfiles/.zshrcto your~/.zshrc(idempotent — safe to re-run) - Checks and links config directories in
~/.config/ - Handles conflicts — existing configs are listed and you can choose which to back up to
~/.config/.backup/and link from dotfiles - Links themes to
~/.config/omarchy/themes/ - Templates per-user files (
vicinae/settings.json,gtk-3.0/bookmarks) by replacing__HOME__with your actual$HOME - Asks to run
omarchy theme-set kuroiat the end to generate per-theme files (kitty tab colors, dunstrc, vicinae theme) - Requires
gum(install viayay -S gumif missing)
The
.zsh/and.aliae/config folders are dot-folders insideconfigs/— they're sourced directly from the repository via.zshrcand don't need symlinks. The install script skips hidden directories automatically.
git pull --recurse-submodules
git submodule update --remoteOr use the gupdate alias (defined in ~/.dotfiles/configs/.aliae/alias/git.yml):
gupdateThe install script handles symlinking config directories. Re-run it anytime to relink:
./install.sh- Links configs — Scans
configs/and symlinks dirs into~/.config/- Conflicts (existing files/dirs): listed with numbers — pick which to back up to
~/.config/.backup/and symlink
- Conflicts (existing files/dirs): listed with numbers — pick which to back up to
- Links themes — Scans
themes/omarchy/and symlinks into~/.config/omarchy/themes/
Every non-hidden directory in configs/ is symlinked to ~/.config/<name>. Hidden directories (starting with .) are skipped by the install script — they're sourced directly from the repo instead.
| Dir | App | Configures |
|---|---|---|
git/ |
Git | Aliases, diff algorithm, pull/push behavior, rerere, user identity |
hypr/ |
Hyprland | WM settings, keybindings, autostart, monitors, input, idle/lock, window rules, XDPH, night light |
waybar/ |
Waybar | Status bar modules (workspaces, music, clock, weather, network, battery, tray, tailscale, caffeine/dnd indicators) |
dunst/ |
Dunst | Notification daemon appearance and behavior |
kitty/ |
Kitty | Terminal emulator font, colors, layout, keybindings |
walker/ |
Walker | Application launcher providers, prefixes, custom Kuroi theme |
yazi/ |
Yazi | File manager keymap, theme, 7 plugins, catppuccin-mocha flavor |
superfile/ |
Superfile | File manager config, hotkeys, custom Kuroi theme |
mpv/ |
mpv | Video player — GPU decode, profiles, 14 Lua scripts (sponsorblock, modernx OSC, autolyrics, thumbfast, etc.) |
zellij/ |
Zellij | Terminal multiplexer layout and keybindings |
rmpc/ |
rmpc | MPD client layout, album art, tabs |
swayosd/ |
SwayOSD | On-screen display for volume/brightness, custom CSS |
managarr/ |
Managarr | Radarr/Sonarr host and API config |
glow/ |
Glow | Markdown renderer style and pager width |
mimeapps.list |
System | Default apps (nvim for text, mpv for video, zen-browser for http, imv for images, zathura for PDF) |
If you backed up existing configs during install (they go to ~/.config/.backup/), restore them with:
./restore.shLists all backups with numbers — pick which to restore. The script removes the symlink and moves the backup back to its original location.
Some config values are personal and require manual editing:
These files contain settings you may want to adjust manually:
| File | What to change |
|---|---|
configs/git/config |
user.name and user.email if you use different credentials |
configs/hypr/envs.conf |
Cursor theme (XCURSOR_THEME), cursor size, display scale (GDK_SCALE) |
configs/hypr/monitors.conf |
Monitor resolution, position, and scale. See Hyprland wiki for syntax |
configs/ ← Source templates
↓ (symlinks)
~/.config/ ← Where apps read configs
↓
Hyprland, waybar, etc. ← Apps running on the desktop
Hyprland loads configs in this order (defined in ~/.config/hypr/hyprland.conf):
- Omarchy defaults —
~/.local/share/omarchy/default/hypr/— base config from the DE framework - Theme overrides —
~/.config/omarchy/current/theme/hyprland.conf— theme-specific settings - User overrides —
~/.config/hypr/— your personal settings (envs, bindings, autostart, etc.)
Files in ~/.config/hypr/ (user overrides) take precedence over omarchy defaults. The omarchy defaults are not meant to be edited directly — override what you need in the user layer instead.
Files in ~/.dotfiles/:
| File | Purpose |
|---|---|
.zshrc |
Main Zsh config — auto-installs tools on first run, sets history opts, vi mode keybinds, env vars |
configs/.zsh/plugins.zsh |
Zinit plugin loader — zsh-autosuggestions, zsh-syntax-highlighting with custom highlight styles |
configs/.zsh/inits.zsh |
Shell init — eval "$(aliae init)", eval "$(zoxide init zsh)", oh-my-posh prompt, fzf, completion config |
configs/.zsh/functions.zsh |
Personal functions — ytm (YouTube MP3), qti/qui (qBittorrent TUI) |
configs/.aliae/ |
Alias manager — organized by domain (see below) |
Key environment variables set in .zshrc:
ALIAE_CONFIG, OMP_CONFIG, GOPROXY, SUDO_PROMPT, TMPDIR
Zsh keybindings: vi mode (bindkey -v), ^W/^S for history search, ^E opens yazi widget, ^J opens jfsh widget
Aliae — Alias manager. Configs in configs/.aliae/ are organized by domain and aggregated via ~/.dotfiles/configs/.aliae/aliae.yml:
| File | Covers |
|---|---|
aliae.yml |
Top-level aggregator — includes all files below |
alias/core.yml |
Shell shortcuts (c=clear, v=nvim, x=exit), yay aliases, ff=fastfetch, top=btop, dsks=lsblk |
alias/git.yml |
gupdate (pull+submodules), 30+ *ignore aliases for gitignore templates |
alias/ls.yml |
25+ lsd aliases — l, la, ll, tree (lt), lr, ld, lk, lz, ldot |
alias/nav.yml |
../.../..../..... dir nav, dot/dev/doc/vid/pic/dow/des/mus quick-jumps |
alias/omarchy.yml |
oai (AUR install), ou (update), ot (theme), hr (hyprctl reload), orw (restart waybar), etc. |
path.yml |
Adds ~/.dotfiles/scripts, ~/bin, ~/go/bin, ~/.cargo/bin to PATH |
scripts.yml |
Aliases for scripts in scripts/ |
completions/zsh |
Shell completions for the aliae command |
Scripts in scripts/ are added to PATH via configs/hypr/envs.conf. Each is standalone and can be called from anywhere.
| Script | What it does |
|---|---|
hypr-reload |
Runs hyprctl reload and sends a desktop notification with the result |
dnd-toggle |
Toggles dunst do-not-disturb mode on/off |
caffeine-toggle |
Toggles hypridle (prevents screen sleep) on/off |
waybar-toggle |
Hides/shows waybar and adjusts window gaps accordingly |
workspace-osd |
Listens on Hyprland socket and shows workspace changes via dunstify |
virtmon-toggle |
Creates a headless monitor + starts wayvnc VNC server for remote access |
playlist-gen |
Generates mpv playlist from directory |
playlist-gen - Generates an m3u8 playlist from a directory of audio files.
playlist-gen /path/to/music # outputs playlist.m3u8 in current directoryworkspace-osd - Background daemon that listens on the Hyprland socket and shows workspace switch notifications via dunstify.
Waybar indicators (configs/waybar/indicators/) — Shell scripts used by waybar modules:
| Indicator | Shows |
|---|---|
music.sh |
Current MPD track via rmpc — click to launch rmpc, right-click play/pause |
caffeine.sh |
Caffeine (hypridle) on/off status |
dnd.sh |
Do-not-disturb on/off status |
If custom scripts work after manually running hyprctl reload but not at session start, the issue is PATH resolution at startup. The envs.conf sets PATH correctly for Hyprland context, but the initial session environment may differ.
Fix: Your scripts use $DOTFILES_DIR/scripts/script-name in bindings (not bare script names). As long as envs.conf is sourced before bindings.conf (it is, by default), this should work.
Run hyprctl reload from a terminal — if it works there but not via the binding, check that the script path in bindings.conf is correct. If it fails entirely, check hyprctl clients to see if Hyprland is running and journalctl --user -xeu hyprland for errors.
If you move the dotfiles repo, update the symlinks in ~/.config/ to point to the new location:
rm ~/.config/hypr && ln -s ~/.dotfiles/configs/hypr ~/.config/hyprTo relink configs (e.g. after a fresh clone):
./install.shTo update qBittorrent credentials:
nano ~/.dotfiles/configs/.zsh/functions.zshThen reload your shell: exec zsh
This repo includes the Kuroi theme for omarchy:
| Component | Location |
|---|---|
| omarchy theme | themes/omarchy/kuroi/ — colors, backgrounds, cursor/icons theme, Neovim colorscheme, Walker launcher CSS |
| opencode theme | themes/opencode/kuroi.json — syntax highlighting, markdown, diff colors |
| terminal themes | themes/terminal/ — git submodule, terminal emulator colorschemes |
These tools are required for the desktop environment to work. Most are auto-installed by .zshrc on first run, but install manually if needed.
| Tool | Purpose |
|---|---|
| Hyprland | Wayland compositor / window manager |
| uwsm | Wayland session manager |
| waybar | Status bar |
| dunst / mako | Notification daemon |
| hypridle | Idle management |
| hyprlock | Screen locker |
| hyprsunset | Blue light filter / night light |
| omarchy | Desktop environment framework |
| fcitx5 | Input method |
| Alacritty / Kitty / Ghostty | Terminal emulator |
| yazi / superfile | Terminal file managers |
| zellij | Terminal multiplexer |
| mpv | Video player (+ SponsorBlock script) |
| rmpc | MPD client |
| swayosd | On-screen display |
| walker | Application launcher |
| glow | Markdown renderer |
| jfsh | Jellyfin TUI |
| managarr | Arr media manager TUI |
| zathura | PDF viewer |
Install all AUR packages:
yay -S hyprland uwsm waybar dunst mako hypridle hyprlock hyprsunset omarchy fcitx5 fcitx5-rime kitty yazi superfile zellij mpv rmpc swayosd walker glow jfsh managarr zathura