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/).
./bootstrap.shThis interactive script:
- Checks and links config directories in
~/.config/ - Prompts for optional qBittorrent credentials (if
tewiis installed) - Saves your answers to
.envand generates config files from templates
ln -s ~/.dotfiles/.zshrc ~/.zshrc
ln -s ~/.dotfiles/.zsh ~/.zshgit pull --recurse-submodules
git submodule update --remoteOr use the gupdate alias (defined in ~/.dotfiles/.aliae/core.yml):
gupdatePersonal values are handled by bootstrap.sh. Re-run it anytime by deleting the generated files:
rm ~/.dotfiles/.zsh/functions.zsh
./bootstrap.sh- Links configs — Scans
configs/and symlinks unlinked dirs into~/.config/ - Links themes — Scans
configs/omarchy/themes/and symlinks themes into~/.config/omarchy/themes/
Some config values are personal and require manual editing:
If you use tewi for qBittorrent TUI, edit the qti() and qui() functions:
nano ~/.dotfiles/.zsh/functions.zshReplace the placeholders:
| Placeholder | What to set |
|---|---|
{{ qti_remote_host }} |
Remote qBittorrent host (e.g. 192.168.1.100) |
{{ qti_remote_port }} |
Remote qBittorrent port (default: 8181) |
{{ qti_remote_user }} |
Remote username |
{{ qti_remote_pass }} |
Remote password |
{{ qti_local_port }} |
Local port (default: 8080) |
{{ qti_local_user }} |
Local username |
{{ qti_local_pass }} |
Local password |
These files contain settings you may want to adjust manually:
| File | What to change |
|---|---|
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.
.zshrc— Main Zsh config. Auto-installs required tools on first run (oh-my-posh, aliae, zoxide, lsd, zinit, fzf, etc.)- Aliae — Alias manager. Configs live in
.aliae/and are aggregated viaconfigs/.aliae.yml. TheALIAE_CONFIGenv var points to this. - zinit — Plugin manager, bootstrapped in
.zshrc
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 |
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):
./bootstrap.shTo update qBittorrent credentials:
nano ~/.dotfiles/.zsh/functions.zshThen reload your shell: exec zsh
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 | Notification daemon |
| hypridle | Idle management |
| hyprlock | Screen locker |
| omarchy | Desktop environment framework |
| fcitx5 | Input method |
| Alacritty / Kitty / Ghostty | Terminal emulator |
| yazi / superfile | Terminal file managers |
| zellij | Terminal multiplexer |
| mpv | Video player |
| jfsh | Jellyfin TUI |
| managarr | Arr media manager TUI |
Install all required AUR packages:
yay -S hyprland uwsm waybar hypridle hyprlock omarchy fcitx5 fcitx5-rime alacritty kitty ghostty yazi superfile zellij mpv jfsh managarr