Arch Linux Developer Experience: Optimizing Workflow with Hyprland & Neovim
Learn how to optimize your Arch Linux developer experience focusing on efficient navigation, minimal configuration, and powerful tools like Hyprland and Neovim. Discover the 'telos of rice' for a faster, smoother workflow.
Introduction

This guide focuses on optimizing the developer experience on Arch Linux by prioritizing efficiency and reducing mental overhead. It aims to streamline daily coding tasks through thoughtful tool selection and configuration, enabling developers to focus on creative problem-solving rather than repetitive actions.
Configuration Checklist
| Element | Version / Link |
|---|---|
| Operating System | Arch Linux |
| Kernel | Linux 6.1.4-arch1-1 |
| Shell | zsh 5.9 |
| Window Manager | Hyprland 0.49.0 (Wayland) |
| Terminal | Tmux 3.5a (used with Ghostty) |
| Editor | NVIM v0.11.2 |
| Browser | Zen (also Firefox, Google Chrome, WhatsApp, Discord, Calculator, Grapher, Settings, Photos, App Store, TextEdit, Cursor, Visual Studio Code are shown) |
| AUR Helper | Paru |
| Screenshot Tool | Hyprshot |
| Keybinding Visualizer | wshowkeys |
| Status Bar | Waybar |
| Fuzzy Finder | Telescope (Neovim plugin) |
| File Navigator | Harpoon (Neovim plugin) |
| Undo History | UndoTree (Neovim plugin) |
| Version Control | Git |
| CI/CD Runner | Blacksmith (for GitHub Actions) |
Step-by-Step Guide
Step 1 — Embrace Defaults for Stability
Sticking close to default configurations minimizes the overhead of maintaining custom setups. The more you customize, the more potential points of failure or required updates you introduce, which can break your workflow.
Step 2 — Prioritize Keyboard Navigation and Fuzzy Finding
Reduce reliance on visual searching and mouse interactions by mastering keyboard shortcuts and fuzzy finding. This saves mental cycles and speeds up navigation across your system and within applications.
bind = $mainMod, P, exec, hyprctl switchxkbllayout current next # Switch keyboard layout
bind = $mainMod, S, exec, hyprshot -m region --clipboard-only # Take a screenshot of a region to clipboard
bind = $mainMod SHIFT, S, exec, hyprshot -m window --clipboard-only # Take a screenshot of a window to clipboard
bind = $mainMod SHIFT, D, exec, DEV_ENV=~/home/theprimeagen/personal/dev /personal/dev/dev-env # Refresh developer environment tools
bind = $mainMod, K, exec, wshowkeys -a right -m 50 -l 42 -t 1069 # Show keybindings
bind = $mainMod SHIFT, K, exec, pkill -9 wshowkeys # Kill wshowkeys
bind = $mainMod, W, exec, pkill waybar && waybar & # Restart Waybar
bind = $mainMod SHIFT, T, exec, /home/theprimeagen/.local/scripts/question # [Editor's note: Script to verify in the official documentation]
bind = $mainMod, Q, exec, $terminal # Open terminal
bind = $mainMod, C, exec, killactive # Kill active window
bind = $mainMod, M, exit # Exit Hyprland
bind = $mainMod, V, togglefloating # Toggle floating window
Step 3 — Choose Tools for Functionality, Not Novelty
Select tools based on their consistent performance and how well they integrate into your workflow, rather than simply opting for the newest or most hyped option. Reliability and familiarity often outweigh marginal feature improvements.
tmux new-session -ds $selected_name -c $selected # Create a new detached tmux session
zellij --session $selected_name --start-dir "$selected" --detach # Create a new detached zellij session
Step 4 — Create Tools to Enhance Experience, Not Just Save Keystrokes
Develop custom tools or configurations that genuinely improve your developer experience by automating complex tasks or providing meaningful insights, rather than just creating short aliases for common commands. Focus on reducing cognitive load and enabling deeper work.
# Example of useful keybindings for media and brightness control
bindel = XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ # Increase volume
bindel = XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- # Decrease volume
bindel = XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle # Toggle mute
bindel = XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle # Toggle mic mute
bindel = XF86MonBrightnessUp, exec, brightnessctl s 10%+ # Increase brightness
bindel = XF86MonBrightnessDown, exec, brightnessctl s 10%- # Decrease brightness
# Example of useful keybindings for media playback control
bindl = XF86AudioNext, exec, playerctl next # Next track
bindl = XF86AudioPause, exec, playerctl play-pause # Play/Pause track
bindl = XF86AudioPlay, exec, playerctl play-pause # Play/Pause track
bindl = XF86AudioPrev, exec, playerctl previous # Previous track
# Example of standard Git commands, preferred over overly short aliases
git status # Check repository status
git add . # Stage all changes
git commit -m 'feat: this is the way' # Commit changes with a descriptive message
git push origin master # Push changes to remote master branch
Comparison Tables
| Feature | Tmux | Zellij |
|---|---|---|
| Newness | Older, mature | Newer, actively developed |
| Consistency | Highly consistent, stable | Consistent, but newer features may evolve |
| Basic Session Management | tmux new-session -ds <name> -c <dir> |
zellij --session <name> --start-dir "<dir>" --detach |
| Learning Curve | Well-documented, large community | Growing community, modern features |
| Tool | Purpose | Utility |
|---|---|---|
| Fastfetch | System information display | Provides system specs, IP, battery life, etc. |
| Yazi | Terminal file manager | Navigating and managing files from the terminal |
⚠️ Common Mistakes & Pitfalls
- Over-customization: Adding too many custom configurations or scripts can lead to a fragile system that is difficult to maintain and update. Stick to defaults where possible and only customize for clear functional benefits.
- Relying on Visual Search: Frequently using the mouse, clicking through menus, or using