This repository is designed to bootstrap a complete Arch + Hyprland workstation with reproducible shell, UI, and desktop behavior.
zshrc,aliases.zsh,aliases.local.zsh,SHELL_CHEATSHEET.mdtmux/tmux.conf+setup/install-tmux-plugins.sh(TPM plugin sync)nvim/Lua-based Neovim config managed in dotfilesatuin/config.tomlfor consistent Atuin history UI/search defaultsdocs/KEYBINDS.mdfull keybind tables + Mermaid mapdocs/RUNBOOK.md3-command pre/post reboot flow + log pathsdocs/NOXFLOW_TODO.mdtracked setup checklisthypr/for Hyprland, Waybar, Rofi, swaync, wlogout, dunst, lockscreen, and helper scriptshypr/eww/for optional widget panel (Quick Deck)kitty/kitty.confso new terminals always load loginzshchrome/chrome-flags.conffor smooth Chrome defaults on Waylandtheme/for GTK, Qt5/Qt6, and Kvantum visual consistencysetup/automation scripts for links and package installationsettings/schema-driven settings state (settingsctl+ Settings Hub)kde/+mime/managed KDE defaults and MIME handlers
cd ~/Documents/code/dotfiles
git submodule update --init private/scripts
./setup/bootstrap.shIf you do not have access to the private scripts repo, skip the git submodule step and the public dotfiles setup will still work.
That command:
- links shell files (
~/.zshrc, cheat sheet) - links tmux config (
~/.tmux.conf) - links Neovim config (
~/.config/nvim) - links Atuin config into
~/.config/atuin/config.toml - links UWSM compositor env (
~/.config/uwsm/env-hyprland) - links Hyprland service override (
~/.config/systemd/user/[email protected]/10-aq-drm-devices.conf) - links Hyprland, Waybar, Rofi, and Kitty configs into
~/.config - links Eww and static theme configs (
gtk,qt5ct,qt6ct) into~/.config - links optional Eww settings panel config into
~/.config/eww-settings - links swaync/wlogout/dunst configs into
~/.config - links Chrome flags to
~/.config/chrome-flags.conf - copies runtime-managed KDE/theme defaults (
kdeglobals,Kvantum) into~/.configso wallpaper sync can update them without dirtying the repo - links KDE app defaults (
dolphinrc,kiorc,gwenviewrc) - copies MIME defaults (
~/.config/mimeapps.list) so local handler changes stay machine-specific - links your private scripts commands into
~/.local/binwhenprivate/scripts(or another--scripts-dir) is available - installs/updates optional zsh plugins under
~/.local/share/zsh/plugins - installs/updates tmux plugins via TPM (
~/.tmux/plugins/tpm) - creates timestamped backups when replacing existing configs
cd ~/Documents/code/dotfiles
./setup/bootstrap.sh --install-packages --with-aurBase installs leave the existing NVIDIA stack untouched. NVIDIA users can opt in to repo-managed kernel/userspace driver packages:
./setup/bootstrap.sh --install-packages --with-aur --with-nvidiaYou can run package install via sudo too; the script now delegates AUR operations to your normal user automatically.
setup/pacman-packages.txt: official repository packagessetup/nvidia-packages.txt: NVIDIA kernel/userspace acceleration stacksetup/aur-packages.txt: AUR packages (google-chrome,wlogout,eww,localsend)setup/install-hypr-plugins.sh: builds/installshyprexpolocally and loads it when possible
Install packages only:
./setup/install-packages.sh --with-aurIf package install fails with db.lck, clear stale lock and retry:
sudo rm -f /var/lib/pacman/db.lckThe installer auto-skips packages that are not available in current repos.
NVIDIA packages are opt-in only; hardware detection alone does not change your current driver stack.
The bootstrap script automatically runs setup/install-zsh-plugins.sh unless you pass --no-zsh-plugins.
The bootstrap script automatically runs setup/install-tmux-plugins.sh unless you pass --no-tmux-plugins.
Super + Y: primary workspace hub (workspace-overview-toggle.sh)Super + W: workspace/window overview switcher (direct Rofi list)Super + Tab: overview toggle (hyprexpoif loaded, otherwise fallback Rofi overview)Super + Shift + Tab: direct Rofi overviewSuper + Space: ultra-fast app launcher (type-to-search, minimal chrome)Super + Shift + Space: window/workspace searchSuper + Ctrl + Space: command palette (quick actions)Super + F1: open keybind helper overlay (hypr-binds.sh)Super + Ctrl + /: open keybind helper overlaySuper + A/Super + /: quick actions (press again to close)Ctrl + 1..0in launcher/actions: quick-select top 10 rowsEnterin launcher/actions: open/run selected row- opener key again (
Super+Space/Super+A): close launcher/actions Super + B: open Google ChromeSuper + D: quick actions (duplicate utility key)Super + ,: open Settings HubSuper + Shift + ,: re-apply last selected settings sectionSuper + Ctrl + ,: quick settings toggle (notification sounds)Super + Alt + ,: toggle Eww detailed settings panelSuper + Ctrl + Alt + ,: apply per-app routing to focused appSuper + Alt + P: open monitor control/recovery menuSuper + .: fullscreen dev cheatsheet overlay (searchable + tabbed)Super + F: toggle floating on active windowSuper + M: maximize/unmaximize active windowSuper + G: toggle tiling layout (dwindle<->master)Super + Alt + G: cycle dynamic layouts (dwindle -> master -> allfloat -> allpseudo)Super + Shift + G: toggle floating-grid workspace modeSuper + \: toggle side panel special workspaceSuper + Shift + \: move active window to side panel and open itSuper + H/J/K/L: focus left/down/up/rightAlt + Tab/Alt + Shift + Tab: cycle windows in current workspaceSuper + Shift + H/J/K/L: move window left/down/up/rightSuper + O: wallpaper pickerSuper + Shift + O: next wallpaperSuper + N: toggle notification panelSuper + Alt + N: toggle DNDSuper + Ctrl + N: copy notification/status summary to clipboardSuper + Shift + N: open notes folderSuper + Alt + E: open notes folder in editorSuper + I: color picker (copies hex)Super + Ctrl + V: clipboard browserSuper + Shift + V: toggle floating clipboard browser with pinning, filters, and split previewSuper + Shift + I: toggle night light (hyprsunset)Super + Ctrl + R: toggle screen recording (wf-recorder)Super + Shift + T: screenshot OCR -> clipboard (ocr-capture.sh)- In-workspace-hub hotkeys:
Ctrl + Alt + Rrename,Ctrl + Alt + Backspaceclear label,Ctrl + Alt + Ffavorite,Ctrl + Alt + Sshortcuts,Ctrl + Alt + M/O/Pwindow move/send actions Super + Ctrl + Shift + Y: apply theme pass (GTK + Qt + Kvantum)Super + Ctrl + Y: restore Waybar panelSuper + Shift + Y: toggle panel visibility only (show/hide current panel)Super + Ctrl + Alt + Y: toggle desktop widgets (above wallpaper / below windows)Super + T: toggle window group (tab-like stacks)Super + Ctrl + T: move active window out of groupSuper + Alt + ;/Super + Alt + .: previous/next tab in groupFn + 2/3/4/5(XF86Launch2..5): AI helper actions (ask,clipboard,shell,debug)Super + Alt + 2/3/4/5: fallback AI helper actionsSuper + Ctrl + H/J/K/L(or arrows): move floating windowSuper + Ctrl + Shift + H/J/K/L(or arrows): resize floating windowSuper + [ / ]: previous/next workspaceSuper + Ctrl + 9: open logs workspace helperSuper + Ctrl + Shift + 9: open logs workspace stack
Launcher performance note:
- cache is warmed at session startup (
launcher.sh --warm-cache) - row lists are pre-rendered to
~/.local/state/noxflow/launcher-rows-*.txt - stale cache refresh runs in background
- fast mode (
launcher.sh --fast) skips icon rendering for near-instant open
Full keybind tables: docs/KEYBINDS.md
Wallpaper/theming pipeline: docs/WALLPAPER_THEMING.md
Use the settings controller for validated state updates and apply operations:
~/.config/hypr/scripts/settingsctl list
~/.config/hypr/scripts/settingsctl set notifications.timeout 10
~/.config/hypr/scripts/settingsctl apply notifications
~/.config/hypr/scripts/settingsctl doctor
~/.config/hypr/scripts/settingsctl profile list
~/.config/hypr/scripts/settingsctl profile apply performanceNormalize existing copied files to symlinks:
./setup/normalize-links.shCtrl + R: Atuin fuzzy history picker (bound in emacs + vi insert keymaps)Alt + C: fuzzy zoxide directory jumpzsh-vi-modeis auto-loaded when installed viasetup/install-zsh-plugins.sh- Tmux prefix is
Ctrl + A; pane navigation isPrefix + h/j/k/l - Neovim config is in
nvim/and bootstraps plugins withlazy.nvim
Notification panel now includes sticky "System Hub" controls (GPU/media/network/panel status, copy summary, widget toggles, and quick controls) via SwayNC.
AI helper behavior:
- Uses
codex execin a dedicated Kitty window when available. - Falls back to opening ChatGPT in browser if Codex CLI is unavailable.
exec zsh
hyprctl reload
systemctl --user restart xdg-desktop-portal xdg-desktop-portal-hyprland xdg-desktop-portal-gtk
~/.config/hypr/scripts/theme-pass.sh # same reload flow as Super+Ctrl+Shift+Y
~/.config/hypr/scripts/restart-waybar.sh
~/.config/hypr/scripts/launcher.sh --warm-cacheIf Waybar or Rofi was already running before bootstrap, restart your Hyprland session once.
nvidia-smi
modinfo -F license nvidia
vulkaninfo | head -n 20
LIBVA_DRIVER_NAME=iHD vainfo | head -n 20
xdg-settings get default-web-browser
hyprctl plugin listAfter changing NVIDIA kernel modules, reboot once before running the checks.
You can run the bundled checker too:
./setup/verify-nvidia.shIf you want live GPU metrics in Waybar (instead of low-noise runtime status), run:
export WAYBAR_GPU_DEEP_POLL=1
~/.config/hypr/scripts/restart-waybar.shsudo ./setup/pre-reboot-apply.sh
sudo reboot
./setup/post-reboot-verify.shLogs are written to logs/pre-reboot-latest.log, logs/post-reboot-latest.log, and ~/.local/state/noxflow/waybar.log.
Full flow: docs/RUNBOOK.md
Run once:
./setup/weekly-health-check.shEnable weekly timer:
./setup/configure-weekly-healthcheck.shLog output:
logs/health-*.loglogs/health-latest.log
If you want the log to auto-open on failures:
HEALTHCHECK_OPEN_ON_FAIL=1 ./setup/weekly-health-check.shSet default editor MIME handlers:
./setup/configure-default-editor.shNotes path defaults:
- Folder:
~/Documents/notes - Scratch file:
~/Documents/notes/inbox.md open-notes.shprefers Obsidian when it is installed, then falls back to VS Code/Codium.
For a Hyprland-first setup with native KDE file management, image viewing, and a GUI settings app:
sudo pacman -S --needed gwenview systemsettings arkIf you want a full Plasma session installed alongside Hyprland later, keep it separate from the base dotfiles install:
sudo pacman -S --needed plasma-desktop plasma-workspacesudo ./setup/configure-timeshift.shThis sets Timeshift to daily snapshots only, keeps the latest 5 daily snapshots, installs a daily noxflow-timeshift-auto.timer, and writes logs to logs/timeshift-setup-latest.log.
sudo ./setup/configure-sddm.shThis installs the repo theme profile (noxflow) and syncs login background from your current wallpaper cache.
If localsend is not in pacman/AUR on your mirror state, use Flatpak:
flatpak install -y flathub org.localsend.localsend_appOr use repo automation:
./setup/install-flatpak-apps.sh- If
modinfo -F license nvidiaprintsDual MIT/GPL, you are running NVIDIA open kernel modules (nvidia-open-dkms). - If
modinfo -F license nvidiaprintsNVIDIA, you are running proprietary modules. - On current Arch repos (since the March 3, 2026 NVIDIA 570+ packaging change),
nvidia-dkmsis not provided andnvidia-open-dkmsis the official kernel-module package. - On this setup, forcing
nvidia_drmmodeset can trigger login/shutdown hangs on some hybrid laptops. - The included safe profile keeps boot stable by blacklisting
nvidia_drmduring compositor startup. nm-appletauto-start is disabled by default to avoid duplicate tray-registration warnings in Waybar. Toggle it on demand with~/.config/hypr/scripts/nm-applet-toggle.sh.
If login freezes and nvidia-persistenced times out, run:
sudo ./setup/fix-nvidia-proprietary-hybrid.sh
sudo rebootIf Hyprland crashes at login with CBackend::create() failed, check AQ_DRM_DEVICES in ~/.config/uwsm/env-hyprland. Do not use /dev/dri/by-path/pci-0000:... there because AQ_DRM_DEVICES is colon-separated; use /dev/dri/cardN instead.
If external HDMI/DP hotplug stops working on hybrid Intel + nouveau laptops, install modprobe.d/nouveau-runtimepm.conf into /etc/modprobe.d/ and rebuild initramfs. That disables nouveau runtime PM so the dGPU keeps reporting external connectors after unplug/replug.
If your system hard-freezes during login with kernel messages about kworker, nv_drm_dev_load, or nvidia-persiste, use:
sudo ./setup/emergency-hypr-login-fix.sh
sudo reboot./setup/install-hypr-plugins.shThis builds hyprexpo into ~/.local/share/hypr/plugins/hyprexpo/hyprexpo.so.
startup.sh will load it on session start, and Super + Tab will also load it
on demand before falling back to the Rofi overview.
Optional (can fail on some Hyprland versions):
./setup/install-hypr-plugins.sh --with-hyprspaceIf reboot itself hangs and you need a guaranteed stable baseline, force iGPU-only boot:
sudo ./setup/force-igpu-safe-boot.sh
sudo sh -c 'echo 1 > /proc/sys/kernel/sysrq; echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger; echo b > /proc/sysrq-trigger'