T
ThePrimeagen
#Arch Linux#Hyprland#Neovim

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.

5 min readAI Guide

Introduction

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

  1. 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.
  2. Relying on Visual Search: Frequently using the mouse, clicking through menus, or using