- Published on
My Arch Linux Dotfiles: A Real-World Configuration Journey
- Why Share My Dotfiles? 💻
- Repository Structure & Architecture 🏗️
- Installation & Setup 🚀
- Key Configuration Highlights 🎯
- Real-World Application Categories 📋
- Getting Started with My Configuration 🚀
- Why Dotfiles Matter 🎯
- Next Steps 📚
Building on the Arch Linux setup guide, this post showcases my personal arch-config dotfiles repository - a real, working configuration setup that powers my daily Arch Linux development environment. 🚀
Why Share My Dotfiles? 💻
Instead of generic application recommendations, I'm sharing my actual configuration files that have evolved through months of daily use. This repository represents a practical, battle-tested setup for development, content creation, and system administration on Arch Linux.
The arch-config repository contains real configuration files that you can examine, learn from, and adapt to your own needs. Every configuration has been refined through actual usage rather than theoretical optimization.
Repository Structure & Architecture 🏗️
The arch-config repository follows a modular approach using git submodules for major configuration components:
Core Structure
arch-config/
├── fish/ # Fish shell configuration
├── waybar/ # Status bar configuration
├── qutebrowser/ # Primary browser setup
├── foot/ # Terminal emulator
├── git/ # Git global settings
├── autostart/ # Session startup applications
├── hypr/ # Hyprland config (submodule)
├── river/ # River window manager
├── i3bar-river/ # i3bar for River
├── i3status-rust/ # Rust status bar
├── nvim/ # Neovim config (submodule)
├── Code/User/ # VS Code config (submodule)
├── zed/ # Zed editor config (submodule)
└── ... # Additional tool configs
Git Submodules Architecture
The repository uses git submodules for major configuration components:
- Hyprland: hypr-config - Wayland compositor
- Neovim: nvim-config - Text editor
- VS Code: vscode-config - IDE settings
- Zed: zed-conf - Modern editor
This modular approach allows independent versioning of major components while maintaining a unified dotfiles structure.
Installation & Setup 🚀
Quick Setup
Clone the repository:
git clone --recursive https://github.com/jiahaoxiang2000/arch-config.git ~/.config-backup cd ~/.config-backup
Create symbolic links (recommended approach):
ln -sf ~/.config-backup/fish ~/.config/fish ln -sf ~/.config-backup/waybar ~/.config/waybar ln -sf ~/.config-backup/qutebrowser ~/.config/qutebrowser # Add more as needed
Update submodules:
git submodule update --init --recursive
Verification Methods 🔍
After setup, verify your configuration is working:
Configuration Folder Check
Most applications create configuration folders in ~/.config/
. You can check what's installed by listing this directory:
ls ~/.config/
Key Configuration Highlights 🎯
fish/config.fish
)
Fish Shell Environment (The shell configuration handles development environment setup:
# Input method support for GUI applications
set -x GTK_IM_MODULE fcitx
set -x QT_IM_MODULE fcitx
set -x XMODIFIERS @im=fcitx
# Custom translation functions
function tozh
trans-cli "$argv"
end
function toen
trans-cli -f zh -t en "$argv"
end
# Node.js environment with fnm
if type -q fnm
fnm env | source
end
# Cross-platform Homebrew support
if test (uname) = "Darwin"
if test -f /opt/homebrew/bin/brew
eval (/opt/homebrew/bin/brew shellenv)
end
end
Wayland Window Management
Hyprland Compositor (Submodule: hypr-config)
- Complete Wayland compositor setup
- Custom keybindings and window rules
- Display configuration and animations
River Window Manager (river/
)
- Minimalist Wayland compositor
- Dynamic tiling window management
- Lightweight alternative to Hyprland
Waybar Status Bar (waybar/config.jsonc
& waybar/style.css
)
- System information display
- Custom modules and styling
- Integration with system services
i3bar Integration (i3bar-river/
& i3status-rust/
)
- Status bar for River window manager
- Rust-based status information
- Minimal system monitoring
Development Environment
Neovim (Submodule: nvim-config)
- Comprehensive Vim configuration
- Plugin management and custom keybindings
- Language server integration
VS Code (Submodule: vscode-config)
- Extensions and settings
- Workspace configurations
- Custom themes and keybindings
Zed Editor (Submodule: zed-conf)
- Modern editor configuration
- Performance optimizations
Browser & Web Tools
Qutebrowser (qutebrowser/config.py
)
- Vim-like browsing experience
- Custom keybindings and search engines
- Privacy and performance optimizations
Firefox (System-managed profiles)
- Traditional browser option
- Extension and privacy configurations
- Complementary to Qutebrowser setup
Surfingkeys (Surfingkeys-conf.js
)
- Browser keyboard navigation extension
- Custom shortcuts and commands
- Works across different browsers
Terminal & System Tools
Foot Terminal (foot/foot.conf
)
- Wayland-native terminal emulator
- Color schemes and font configuration
Git Configuration (git/ignore
)
- Global ignore patterns
- Development workflow optimization
Real-World Application Categories 📋
Based on my actual system with 163 explicitly installed packages, here's what's really powering my daily workflow:
Note: This list only shows system-installed applications via pacman/AUR. Many additional tools are installed through language-specific package managers (e.g., Typst via Rust's cargo, Claude Code via Node.js npm, Python packages via pip/pipx, etc.). The actual development toolchain is much richer than what appears in system package lists.
Development Environment 💻
Editors & IDEs:
- neovim - Primary text editor with extensive configuration
- visual-studio-code-bin - Full-featured IDE for larger projects
- zed - Modern, fast editor for quick edits
- emacs-wayland - Alternative editor for specific workflows
- vim - Fallback terminal editor
Programming Languages & Tools:
- rustup - Rust toolchain management
- python-pip, python-pipx - Python package management
- jdk17-openjdk, maven - Java development environment
- github-cli - Git repository management
- ast-grep, tree-sitter-cli - Code analysis tools
System & Window Management 🪟
Window Managers:
- hyprland - Primary Wayland compositor with animations
- river - Lightweight alternative window manager
System Tools:
- waybar - Status bar with custom modules
- i3bar-river-git, i3status-rust-git - River WM status integration
- foot, kitty - Wayland-native terminals
- htop, neofetch - System monitoring and information
- yay, paru-bin - AUR helpers for package management
Media & Content Creation 🎬
Video & Streaming:
- obs-studio, obs-streamfx-unstable - Professional streaming/recording
- vlc - Universal media player
- kdenlive - Video editing suite
- wlrobs - Wayland screen capture for OBS
Audio:
- pipewire, pipewire-pulse, pipewire-jack - Modern audio server
- pavucontrol - Audio control interface
Creative Tools:
- bambustudio-nvidia-bin - 3D printing slicer with GPU acceleration
- hyprshot - Screenshot utility
- wshowkeys-mao-git - Key display for screencasts
Productivity & Office 📝
Office Suite:
- wps-office-365 - Complete office suite with cloud integration
- wps-office-365-fonts, wps-office-365-xiezuo - Enhanced writing tools
- okular - Advanced PDF viewer with annotation support
Document Processing:
- texlive-meta - Complete LaTeX distribution
- Multiple texlive language packs - International document support
- biber - Bibliography processing
File Management:
- nemo - Feature-rich file manager
- unrar, unzip, zip - Archive handling
Internet & Communication 🌐
Web Browsers:
- firefox - Primary browser for general use
- qutebrowser - Keyboard-driven browsing
Communication:
- telegram-desktop - Messaging platform
- linuxqq, wechat-bin - Chinese social platforms
- thunderbird - Email client
Network Tools:
- wireshark-qt - Network protocol analysis
- tigervnc - Remote desktop access
- aria2 - Advanced download manager
Specialized & Development Tools 🔧
Input Methods:
- fcitx5 - Input method framework
- fcitx5-chinese-addons, fcitx5-material-color - Chinese input with theming
Language & Translation:
- translate-shell - Command-line translation
- python-gtts - Text-to-speech conversion
Hardware & Testing:
- geekbench - System benchmarking
- picoscope7, ps7-lib* - Oscilloscope software and libraries
- evtest - Input device testing
- sysbench - System performance testing
Development Infrastructure:
- uv - Fast Python package manager
- fnm, nvm - Node.js version management
- platformio-core - Embedded systems development
- v2raya - Proxy management interface
Getting Started with My Configuration 🚀
Using This Repository
- Browse the configurations: Explore the arch-config repository to understand the structure
- Cherry-pick what you need: You don't need to adopt everything - take what works for your workflow
- Adapt and customize: Use my configurations as a starting point for your own setup
- Contribute improvements: Found a better way to configure something? Pull requests welcome!
Key Benefits of This Approach
- Real-world tested: Every configuration has been used daily for months
- Modular design: Git submodules allow independent updates of major components
- Cross-platform elements: Fish shell config works on both Linux and macOS
- Version controlled: Track changes and rollback if needed
- Shareable: Easy to share and collaborate on configurations
Why Dotfiles Matter 🎯
Rather than starting from scratch or following generic tutorials, using proven dotfiles gives you:
- Immediate productivity: Jump straight into a working environment
- Best practices: Learn from configurations that have evolved through actual use
- Time savings: Avoid the hours of tweaking that goes into a personalized setup
- Inspiration: Discover tools and workflows you might not have considered
Next Steps 📚
- Check out the arch-config repository and its submodules
- Review the initial Arch Linux setup guide for system configuration
- Explore individual configuration files to understand the setup choices
- Start with the shell configuration and gradually adopt other components
Remember: these are my configurations, optimized for my workflow. Use them as inspiration and adapt them to your needs rather than copying blindly.
Happy computing on Arch! 🐧