Hyprland setup
This guide builds upon the foundation established in my "Arch Linux installation" post. It assumes those steps have been completed and a clean base system is in place. The sections below cover the essential packages required to transform that minimal base into a fully functional Hyprland desktop environment.
Disclaimer: software packages update frequently, which may alter the configuration process. I aim to maintain the accuracy of this guide, similar to my previous Arch Linux post.
This customization relies on numerous configuration files. I will include essential, short snippets within this post; however, for extensive configurations, I will point to the full source code in my dotfiles. If configuration files are not required, I will not include them in the corresponding section.
Colors
To ensure visual consistency across the entire system, I utilize centralized "color files" that are sourced by individual applications. This setup relies on the following files:
Hyprland:
~/.config/hypr/colors.conf.Waybar:
~/.config/waybar/colors.css.Kitty:
~/.config/kitty/colors.conf.Scripts:
~/.scripts/colors_and_helpers.Note: the scripts file is only necessary for custom scripts that should inherit the system's color palette.
The specific color codes I use can be found in these files in my dotfiles, which are based on the Apprentice theme.
System and core
Screen lock manager
A screen lock manager is a security utility that prevents unauthorized access to an unattended session. It locks the display after a period of inactivity or on demand, requiring a password or authentication before work can resume.
Package:
hyprlock.Configuration file:
~/.config/hypr/hyprlock.conf.Note: if this configuration is reused, the monitor and path variables must be updated to match the target system.
Idle manager
An idle manager is a background daemon that monitors input activity. Its primary purpose is to save energy and secure the system by triggering events, such as turning off the screen, locking the session, or suspending the computer, after a specific period of inactivity.
Package:
hypridle.Configuration file:
~/.config/hypr/hypridle.conf.general { lock_cmd = pidof hyprlock || hyprlock before_sleep_cmd = loginctl lock-session # Lock before suspend. after_sleep_cmd = hyprctl dispatch dpms on } listener { timeout = 300 # 5 min on-timeout = hyprctl dispatch dpms off # Screen off on-resume = hyprctl dispatch dpms on # Screen on } listener { timeout = 900 # 15 min on-timeout = systemctl suspend # Suspend pc }On laptops, brightness settings can be added to these rules to dim the screen before turning it off completely.
Desktop environment
Bar
The status bar is the central information hub of the desktop. It displays essential system details such as the time, battery life, workspace status and active applications, acting as the primary interface for system monitoring.
Package:
waybar.Configuration file:
~/.config/waybar/config.jsoncfor functionality and~/.config/waybar/style.cssfor appearance."hwmon-path"in the"temperature"module must be changed for the CPU temperature to display correctly.
Application launcher
An application launcher serves as a digital menu. It provides a quick and searchable interface to open programs, run commands, or switch between windows without navigating through complex submenus.
Package:
hyprlauncher.Configuration file:
~/.config/hypr/hyprlauncher.conf.Personally, I use the default configuration. Customizing the colors, however, requires modifying the global
hyprtoolkittheme configuration at~/.config/hypr/hyprtoolkit.conf.
Notification manager
The notification manager handles system and application alerts. It displays pop-up messages for events like incoming emails, music changes, or system errors, surfacing them without interrupting the current workflow.
Package:
mako.Configuration file:
~/.config/mako/config.sort=-time layer=overlay background-color=#1C1C1C width=300 height=110 border-size=2 border-color=#BCBCBC border-radius=5 icons=0 max-icon-size=64 default-timeout=5000 ignore-timeout=1 font=CaskaydiaMono Nerd Font Mono 14 [urgency=low] border-color=#5F875F [urgency=normal] border-color=#6C6C6C [urgency=high] border-color=#AF5F5F default-timeout=0 [category=mpd] default-timeout=2000 group-by=category
Screenshot
- Packages:
wl-clipboard: command-line copy/paste utilities for Wayland.grim: grab images from a Wayland compositor (the actual screenshot tool).slurp: select a region in a Wayland compositor (provides the geometry for grim).swappy: a Wayland-native snapshot editing tool (for drawing arrows, blurring text, etc.).Configuration file:
~/.config/swappy/config.[Default] save_dir=$HOME/pictures/screenshots save_filename_format=swappy-%Y%m%d-%H%M%S.png show_panel=true line_size=5 text_size=20 text_font=CaskaydiaMono Nerd Font paint_mode=brush early_exit=false fill_shape=falseMake sure
save_direxists.
I use the following keybindings in my hyprland.conf to chain these tools together:
# Capture region -> edit -> save/copy
bind = $mainMod SHIFT, S, exec, grim -g "$(slurp)" - | swappy -f -
# Capture full screen -> edit -> save/copy
bind = , Print, exec, grim - | swappy -f -
# Capture region -> clipboard only
bind = $mainMod, Print, exec, grim -g "$(slurp)" - | wl-copy && notify-send "Screenshot" "Copied to clipboard"
Honorable mention:
grimblast-git.
Wallpaper
Package:
hyprpaper.Configuration file:
~/.config/hypr/hyprpaper.conf.wallpaper { monitor = DP-3 path = /mnt/files/pictures/wallpapers/Cailee_Spaeny.jpg fit_mode = cover }The monitor name (
monitor) and the path to the image file (path) must be changed.
Theming and appearance
Hyprland is a compositor, not a full desktop environment, so "system theming" is mostly about wiring together a few separate layers (GTK, Qt, icons, cursors and fonts). In this section, I will outline the small set of tools I use to keep those layers consistent, without hand-editing a bunch of config files.
I create my GTK and Qt themes using themix-full-git.
GTK manager
In a standalone window manager like Hyprland, applications do not automatically share a unified theme. A GTK manager is essential for defining the visual style (colors, borders, widgets) of the installed applications. It applies themes, icon sets, cursors and fonts globally, ensuring consistency between the file manager, web browser and system tools.
- Package:
nwg-look.
Being a graphical tool that generates the necessary settings files, it removes the need to edit configuration files manually. Theme location, however, still matters:
User:
~/.local/share/themes.System:
/usr/share/themes.
Qt6 manager
Qt applications (like Dolphin, OBS Studio, or VLC) do not naturally inherit the Hyprland look. This engine acts as a bridge, allowing Qt6 applications to read the configured color schemes and cursor settings without needing a separate GUI tool like qt6ct.
Package:
hyprqt6engine.Configuration file:
~/.config/hypr/hyprqt6engine.conf.
Font manager
Managing typefaces on Linux can sometimes be cumbersome via the command line. A font manager provides a visual interface to preview, install and organize the system fonts. Unused fonts can be disabled to speed up application loading times and different typefaces compared side-by-side.
- Package:
font-manager.
Productivity
Terminal
The terminal emulator is the command-line interface for the desktop environment. It acts as the window onto the system shell, where commands are executed, text-based applications are run and files are managed. A modern terminal emulator typically offers features like hardware acceleration, tabbed browsing and extensive customization options to improve workflow efficiency.
Package:
kitty.Example configuration file: it can be generated with the shortcut
CTRL + SHIFT + F2from inside the application.Since the default configuration file is heavily commented, it effectively serves as its own documentation.
Configuration file:
~/.config/kitty/kitty.conf.
Text editor
- Package:
mousepad.
Settings are stored in the dconf database and can be backed up with this command:
dconf dump /org/xfce/mousepad/ > mousepad-backup.conf
To restore them later:
dconf load /org/xfce/mousepad/ < mousepad-backup.conf
I am planning to write a post about
nvim(a text editor for terminals), in case it is of interest, so stay tuned.
Document viewer
Package:
zathura(andzathura-pdf-mupdffor PDF support).Configuration file:
~/.config/zathura/zathurarc.My configuration file only applies visual theming; all keybindings remain at their default settings.
File explorer
- Packages:
thunar: main package.thunar-volman: manages automatic mounting of removable devices.gvfs: provides virtual filesystem support (trash bin, network shares, mounting).tumbler: generates image thumbnails.ffmpegthumbnailer: generates video thumbnails.thunar-archive-plugin: adds archive creation and extraction (requiresXarchiver).
Settings and theme adjustments live in ~/.config/xfce4/xfconf/xfce-perchannel-xml/, which is the directory to copy for a backup.
Media
Audio manager
An audio manager provides a graphical interface to control volume levels, select audio devices and manage audio streams across applications. It acts as the bridge between the applications and the sound system, making it possible to route audio, adjust per-application volumes and switch between speakers, headphones, or external devices seamlessly.
- Package:
pwvucontrol.
Video player
Package:
mpv.Configuration file:
~/.config/mpv/mpv.conf.
Image viewer
Package:
nsxiv.Configuration file:
~/.config/nsxiv/.
Music server
A music server is a background daemon that manages the music library and streams audio to connected clients. It separates the music source (library management) from the playback interface, so playback can be controlled from different devices or applications while the collection stays centralized.
Package:
mpd.Configuration file:
~/.config/mpd/mpd.conf.
Music player
A music player client connects to the music server and provides the user interface for playback control, playlist management and library browsing. A dedicated client adds flexibility (different clients can offer different workflows while all connecting to the same music source).
Package:
rmpc.Configuration file:
~/.config/rmpc/rmpc.conf.