Desktop Setup - cephi-sui/dotfiles GitHub Wiki

Pre-Setup

Audio

PipeWire is a multimedia framework which supports all sound servers.

sudo pacman -Syu pipewire pipewire-audio pipewire-jack pipewire-pulse pipewire-alsa

Some speakers may require ALSA firmware extras, like sof-firmware.

Bluetooth

sudo pacman -Syu bluez bluez-utils && sudo systemctl enable --now bluetooth

Install blueman for a GUI.

sudo pacman -Syu blueman

Basic and Graphical Fonts

sudo pacman -Syu gnu-free-fonts noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra nerd-fonts
sudo mkdir -p /etc/fonts/conf.d/
sudo ln -s /usr/share/fontconfig/conf.avail/10-nerd-font-symbols.conf !$

Hyprland

Feature Overview

Compositor Hyprland
Display Manager SDDM
Policy Kit KDE
Status Bar Waybar
Application Launcher & Menu Fuzzel
Notifications SwayNotificationCenter
Onscreen Display SwayOSD
Screenshot Grimblast (using grim, slurp, hyprpicker)
Wallpaper swww (+ waypaper)
Lockscreen Hyprlock

Basic Applications

Browser

sudo pacman -Syu firefox
  • Terminal out-of-the-box:
    sudo pacman -Syu kitty
  • Terminal that requires editing ~/.config/hypr/hyprland.conf:
    sudo pacman -Syu alacritty

Dolphin (File Browser) + Ark (Archive Browser)

sudo pacman -Syu dolphin dolphin-plugins kdegraphics-thumbnailers libheif qt5-imageformats kdesdk-thumbnailers ffmpegthumbs taglib kompare ark

Pavucontrol (Audio Device Control)

sudo pacman -Syu pavucontrol

Window Manager and Display Manager

sudo pacman -Syu hyprland sddm wl-clipboard wtype && sudo systemctl enable sddm

Scaling

To get X11 applications to scale properly, go to the scaling section of this repo's ~/.config/hypr/hyprland.conf

  • QT: Env variable QT_SCALE_FACTOR (float)
  • GTK: Env variable GDK_SCALE (integer)

For Electron applications either:

  • Add --force-device-scale-factor=<float> to the .desktop in /usr/share/applications/
  • Just use ctrl++ in the application itself.

Necessary Packages

sudo pacman -Syu xdg-desktop-portal-hyprland xdg-desktop-portal-kde xdg-desktop-portal-gtk xwaylandvideobridge qt5-wayland qt6-wayland jq

Install media and brightness controls.

sudo pacman -Syu playerctl brightnessctl

If desired, install wev ( ctrl + c to exit ) to determine keycodes for ~/.config/hypr/hyprland.conf

Screenshotting

For screenshots, the grimblast script will freeze the screen using hyprpicker, select a region using slurp, and screenshot using grim.

sudo pacman -Syu grim slurp
paru -S hyprpicker

Pull this repo https://github.com/hyprwm/contrib/ and run make install.

cd ~/Downloads/git && git clone https://github.com/hyprwm/contrib.git && cd contrib/grimblast && sudo make install

Policy Kit

sudo pacman -Syu polkit-kde-agent

~/.config/hypr/hyprland.conf

exec-once=/usr/lib/polkit-kde-authentication-agent-1

Screen Rotation (For Tablet PCs)

Install iio-hyprland, which will pull iio-sensor-proxy as a dependency.

paru -S iio-hyprland

Run hyprctl monitors to obtain desired monitor for rotation.

It may be necessary to specify the monitor in ~/.config/hypr/hyprland.conf like so.

monitor = $mainMoni,preferred,auto,auto

Run the programs at startup.

~/.config/hypr/hyprland.conf

exec-once = iio-sensor-proxy & iio-hyprland

Lockscreen

sudo pacman -Syu hyprlock

Swaylock can be run with the following command:

swaylock --daemonize --indicator-caps-lock --show-failed-attempts

This command will get called with the fuzzel-power-menu script (see below).

Application Launcher & Menu

Fuzzel is a smaller, faster application launcher than Rofi, while still providing the base dmenu functionality necessary.

sudo pacman -Syu fuzzel

~/.config/hypr/hyprland.conf

bindr = $mainMod, Super_L, exec, killall fuzzel || fuzzel

Clipboard History

See below.

Emoji Selector

Bemoji has history built-in and sends the emoji list via dmenu. Requires wtype to type the emoji.
It also allows for easily adding new entries like kaomoji :D

paru -S bemoji

Bemoji is run with Fuzzel as its picker.

BEMOJI_PICKER_CMD="fuzzel -d" bemoji -tc

~/.config/hypr/hyprland.conf

bind = $mainMod, 60, exec, killall fuzzel; BEMOJI_PICKER_CMD="fuzzel -d" bemoji -t # Super + .

Wi-Fi Menu

A basic, custom-made nmcli frontend script stored in ~/.config/fuzzel/ using Material Design icons to match the riced Waybar.

Power Menu

A script stored in ~/.config/fuzzel/ which makes use of swaylock (see above).

One fun way to call this menu is via the power button.
To do so, modify /etc/systemd/logind.conf to ignore the power key.
Then bind the power key in Hyprland.

~/.config/hypr/hyprland.conf

bind = , XF86PowerOff, exec, ~/.config/fuzzel/fuzzel-power-menu

Status Bar

Waybar is a simple GTK-based status bar.

sudo pacman -Syu waybar

Notes on editing config

Clipboard

Cliphist is a program that stores clipboard history that can be read out later.

sudo pacman -Syu cliphist

~/.config/hypr/hyprland.conf

exec-once = wl-paste --type text --watch cliphist store #Stores only text data
exec-once = wl-paste --type image --watch cliphist store #Stores only image data
bind = $mainMod, V, exec, killall fuzzel; cliphist list | fuzzel -d | cliphist decode | wl-copy

Notifications

SwayNotificationCenter is a nice GTK-based notification center which supports widgets for various purposes, like music.

paru -S swaync

~/.config/hypr/hyprland.conf

exec-once = swaync
bind = $mainMod, N, exec, swaync-client -t -sw

Wallpaper

  • Static:
    sudo pacman -Syu hyprpaper
  • Animated:
    paru -S swww waypaper-git

Default Applications

sudo pacman -Syu xdg-utils

Set default application for given filetype:

xdg-mime default <application>.desktop <filename>

Open a file using the default application:

xdg-open <filename>

GNOME

Minimum GNOME install:

sudo pacman -Syu baobab evince gnome-characters gnome-control-center gnome-disk-utility gnome-font-viewer gnome-keyring gnome-menus gnome-session gnome-settings-daemon gnome-shell gnome-shell-extensions gvfs gvfs-goa gvfs-gphoto2 gvfs-mtp gvfs-nfs gvfs-smb loupe nautilus snapshot sushi tecla xdg-desktop-portal-gnome xdg-user-dirs-gtk gnome-tweaks gnome-browser-connector
⚠️ **GitHub.com Fallback** ⚠️