Production-ready dotfiles for Arch Linux with Hyprland, modular shell configs (Zsh, Bash, Fish), Neovim (LazyVim), and a clear hardware-agnostic install path.
- Highlights
- Repository Layout
- Neovim Configuration
- Prerequisites
- Install
- Hardware-Agnostic Setup Checklist
- Troubleshooting
- Updating Dotfiles
- Hyprland setup split into modular files for keybinds, input, visuals, autostart, monitors, workspaces, and app/window rules.
- Waybar, wlogout, swaync, waypaper, and helper scripts for screenshots, power actions, and wallpaper management.
- Shell stack for
zsh,bash, andfishwith aliases, prompt customization, and fastfetch autostart. - Terminal + editor configs for Ghostty, Kitty, and Neovim (LazyVim-based).
- Clear install path that avoids machine-specific state and sensitive data.
| Path | Purpose |
|---|---|
.config/hypr |
Hyprland core config, wallpaper assets, lock/idle config, scripts |
.config/waybar |
Waybar modules, style, launch/toggle scripts |
.config/wlogout |
Logout menu layout/theme and actions |
.config/swaync |
Notification daemon config/theme |
.config/zshrc, .config/bashrc, .config/fish |
Modular shell configs and aliases |
.config/nvim |
Neovim (LazyVim) config |
.config/kitty, .config/ghostty |
Terminal configs |
.zshrc, .bashrc |
Root shell entrypoints |
.gitconfig |
Git defaults (must be personalized before use) |
The Neovim setup in this repo is fully available after you run the clone-and-install steps. Nothing is omitted: the same config you get from the repo is the one used day to day.
- Base: LazyVim on lazy.nvim. Default colorschemes installed: Tokyo Night and Habamax (LazyVim’s default).
- Location:
~/.config/nvim(or$HOME/.config/nvim). Entry point isinit.lua; plugins and options live underlua/config/andlua/plugins/. - Custom options: Swap files are disabled (
opt.swapfile = false) inlua/config/options.lua. All other LazyVim defaults (keymaps, autocmds) are in use unless you override them.
The config enables a broad set of LazyVim “extras” so language support, AI, and editor features work out of the box. These are declared in lazyvim.json and loaded via LazyVim’s plugin spec.
View all LazyVim extras
| Category | Extras |
|---|---|
| AI | Copilot, Copilot Chat, Sidekick |
| Coding | Luasnip, mini-comment, mini-snippets, mini-surround, Neogen, nvim-cmp, yanky |
| Debug (DAP) | Core DAP, nlua |
| Editor | Aerial, dial, inc-rename, mini-diff, mini-files, mini-move, navic, refactoring |
| Formatting | Prettier |
| Languages | Docker, Git, Markdown, PHP, Python, Rust, SQL, Svelte, Tailwind, TOML, TypeScript, Typst, YAML, Zig |
| Linting | ESLint |
| Testing | Test core |
| UI | Edgy, indent-blankline, mini-animate, mini-indentscope, mini-starter, smear-cursor, treesitter-context |
| Utilities | dot, mini-hipatterns, startuptime |
| Other | VSCode-style extras |
LSP servers and tools (e.g. for the languages above) are installed on demand via Mason when you open the relevant file types; you don’t need to pre-install them elsewhere.
For LazyVim usage, keymaps, and plugin docs, see the LazyVim documentation.
These packages are installed automatically by install.sh. The list below is for reference only.
Install base dependencies with pacman:
sudo pacman -S --needed hyprland hyprpaper hypridle hyprlock waybar wlogout swaync walker wofi nautilus grim slurp satty jq brightnessctl playerctl pipewire wireplumber pavucontrol networkmanager blueman rfkill polkit-kde-agent zsh bash fish fzf eza fastfetch btop kitty ghostty neovim fcitx5 fcitx5-gtk fcitx5-qt ttf-fira-sansOptional packages referenced by keybinds or scripts:
sudo pacman -S --needed firefox-developer-editionOptional AUR packages (if you use yay):
yay -S --needed hyprlauncher oh-my-posh-binInstall at least one Nerd Font used by terminals/bar:
sudo pacman -S --needed ttf-cascadia-code-nerdRun as your regular user — not root.
git clone https://github.com/Web-Dev-Codi/arch-linux-hyprland-dotfile-installer.git
cd arch-linux-hyprland-dotfile-installerbash install.shThe script walks you through each phase with interactive prompts:
- Phase 0 — Verifies you are on Arch Linux and not running as root
- Phase 1 — Install
yay(AUR helper) if not already present - Phase 2 — Install all Arch Linux prerequisites via
pacman - Phase 3 — Optional packages (firefox-developer-edition, hyprlauncher, oh-my-posh)
- Phase 4 — Nerd Font installation
- Phase 5 — Backup any existing configs that would be overwritten
- Phase 6 — Copy all dotfiles to their correct locations in
$HOME
Do not keep someone else's identity in your Git config:
git config --global user.name 'Your Name'
git config --global user.email 'you@example.com'Log out and start a Hyprland session, then validate:
hyprctl monitors
hyprctl workspaces
pgrep -a hyprpaper
pgrep -a hypridle
pgrep -a waybarIf you changed files while logged in, reload:
hyprctl reloadThese files are expected to be edited per machine:
~/.config/hypr/monitors.conf~/.config/hypr/workspaces.conf~/.config/hypr/hyprpaper/hyprpaper.conf~/.config/hypr/hyprpaper/persistent-wallpaper.conf~/.config/hypr/input/input.conf~/.config/hypr/environment/env.conf
Recommended adaptation steps:
- Configure displays and monitor names for your hardware.
- Update workspace-to-monitor bindings after monitor changes.
- Remove or update device-specific input entries (example: custom mouse names).
- Review GPU-specific environment variables and keep only what matches your hardware.
- Regenerate persisted wallpaper state if absolute paths reference another username:
rm -f "$HOME/.config/hypr/hyprpaper/persistent-wallpaper.conf"Run directly and inspect output:
waybar -c "$HOME/.config/waybar/config.jsonc" -s "$HOME/.config/waybar/style.css"hyprctl hyprpaper unload all
hyprctl hyprpaper preload "$HOME/.config/hypr/assets/astronaut.png"
for monitor in $(hyprctl monitors -j | jq -r '.[] | .name'); do
hyprctl hyprpaper wallpaper "$monitor,$HOME/.config/hypr/assets/astronaut.png"
donesystemctl --user restart fcitx5
printenv INPUT_METHOD
printenv QT_IM_MODULE
printenv XMODIFIERS
printenv SDL_IM_MODULEVerify required tools:
command -v grim
command -v slurp
command -v sattyPull the latest changes and re-run the installer:
git pull origin main
bash install.shThe installer will back up any configs it would overwrite before copying. If an update breaks your setup, restore from the backup directory printed at the end of the install run (only created if existing configs were overwritten).
Made with ❤️ by Web-Dev-Codi · Berlin, Germany 🇩🇪