My Arch Linux Hyprland Rice: A Modular Approach
# My Arch Linux Hyprland Rice
Building the perfect Linux desktop is an endless journey of tweaking and refining. My current setup is built on **Arch Linux** and **Hyprland**, a dynamic tiling Wayland compositor that offers beautiful animations and incredible performance.
In this post, I'll walk you through my configuration structure, which prioritizes modularity and clean code.
The Core: Modular Hyprland Configuration
One of the biggest problems with window manager configurations is that they often become one giant, unreadable file. To solve this, I've split my `hyprland.conf` into logical modules located in the `hypr/Settings/` directory.
Instead of a 1000-line file, my main configuration acts as a manager that sources specific settings:
- **`monitors.conf`**: Defines display resolution, positioning, and scaling.
- **`programs.conf`**: Sets default applications (Terminal, Browser, File Manager).
- **`startupApps.conf`**: Handles autostart applications like authentication agents and background daemons.
- **`inputs.conf`**: Keyboard layouts, mouse sensitivity, and touchpad gestures.
- **`keybinds.conf`**: The nervous system of the setup—custom shortcuts for workspace navigation and app launching.
Aesthetics & Window Rules
The visual style is handled separately to keep things organized:
- **`decorations.conf`**: Manages rounding, opacity, drop shadows, and blur settings.
- **`animations.conf`**: Configures the bezier curves and animation speeds that make Hyprland feel so fluid.
- **`rules.conf`**: Defines window rules (like floating windows or workspace assignments) to ensure apps behave exactly how I want them to.
The Toolbelt
A window manager is only as good as the tools running inside it. Here is the software stack that powers my workflow, all configured in my `.config` folder:
1. Terminal & Shell
I use **Kitty** as my terminal emulator for its GPU acceleration and rich configuration options. Inside it, I run **Fastfetch** for system information and **Tmux** for session management, allowing me to persist workflows across reboots or terminal closures.
2. Application Launcher
**Rofi** serves as my application launcher. It's configured to match the system theme, providing a seamless interface for opening programs or switching windows.
3. Status Bar
**Waybar** sits at the top of my screen, providing essential information like workspaces, audio levels (managed via `pavucontrol`), and system stats. It's styled with CSS to perfectly blend with the Hyprland decorations.
4. File Management
For file navigation, I use **Yazi**, a blazing-fast terminal file manager written in Rust. It integrates perfectly with my keyboard-centric workflow, eliminating the need for a mouse-heavy GUI file manager.
Custom Scripts & Banners
I've also included several custom scripts to personalize the terminal experience upon login. You'll find scripts like `personal-machine-banner.sh` and `azure-machine-banner.sh` in the root of my config. These provide a unique, identified entry point depending on which machine or environment I'm logging into.
Conclusion
This modular approach makes maintaining my system incredibly easy. If I want to change an animation, I know exactly where to look (`Settings/animations.conf`). If I need to add a startup app, it goes in `Settings/startupApps.conf`.
You can explore the full source code and copy these configurations for your own setup by visiting my [GitHub repository](https://github.com/abdeldjalile-lafkir/.config).