billypom

Linux desktop essentials

2025-11-26

Just wanted to compile a list of suggestions and resources for running Linux desktop systems to link to my friends. Maybe someone else out there will also find something of value here.

This page is a work is progress...

Base System


🗃️ Distribution: Debian / Arch / Gentoo

Just use one of these. Everything else is based off them. However, as an OpenRC enjoyer, I would pick Artix over base Arch.

GUI


📁 Desktop Environments: GNOME / KDE Plasma

As a GNOME enjoyer, here are some extra suggestions and tweaks I would make to my GNOME environment:

GNOME Tweaks

  1. Improve Alt + Tab (makes it behave like it did on Windows - old habits die hard)
gsettings set org.gnome.desktop.wm.keybindings switch-windows "['<Alt>Tab']"
gsettings set org.gnome.desktop.wm.keybindings switch-windows-backward "['<Shift><Alt>Tab']"
gsettings set org.gnome.desktop.wm.keybindings switch-applications "[]"
gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "[]"
  1. Improve screenshots (use the same keybindings that I was used to on Windows)
gsettings set org.gnome.shell.keybindings screenshot "['Print']"
gsettings set org.gnome.shell.keybindings screenshot-window "['<Alt>Print']"
gsettings set org.gnome.shell.keybindings show-screenshot-ui "['<Super><Shift>S']"
  1. Install gnome sushi for image previews with Spacebar like in Finder from macOS
  2. Install dash to dock to get a dock at the bottom, like on macOS
  3. Install tiling assistant to be able to tile your windows nicely

📁 (Tiling) Window Managers: hyprland / dwl

Minimal, keyboard-centric alternatives to using a full desktop environment.

📁 Display Server: wayland

This is not much of a choice you make, but what is available on the Desktop Environment you choose. Try wayland if it's available. On GNOME or KDE Plasma, there should be an option to switch display servers before you log in.

If you're installing wayland from a minimal install of Arch or Gentoo, make sure to install any necessary XDG Desktop Portal implementations for your environment.

📁 Audio Server: pipewire

If you have realtime audio needs or do any low latency audio work, I highly recommend making sure you're using pipewire. This should be default sound server on modern distros, but many applications still expect a pulseaudio sound server. This means you need to install pipewire-pulse so that certain applications understand where to send audio to.

Read this Arch Wiki article on pipewire

📁 Look & Feel: lxappearance / qt6ct / gnome tweaks

To change the look and feel of your Linux desktop, you can install and apply pre-made themes or make your own themes.

To understand themes, you must understand that there are primarily 2 libraries used to create Linux desktop applications. The GTK toolkit (maintained by GNOME) and the Qt framework.

What this means for themes is that you will need to use a pair of themes (GTK and Qt) to get a consistent look across all (most) apps.

I highly recommend giving this Arch Wiki article a read: Uniform look for Qt and GTK applications. Maybe this one and also this one too.

📁 Configuration

Most applications comply with the XDG Base Directory Specification and store their configuration files in the current users' home directory, inside the .config/ folder.

Most if not all configuration for all of the software in user space resides in this folder.

~/.config
/home/your-username/.config

Software


💾 Application Launcher: rofi / wofi

If you're using GNOME or KDE, just press SUPER (the Windows Key) to search for and launch applications.

If you're on a minimal install, or a tiling window manager, you can use rofi or wofi to dynamically open a menu where you can search for and launch applications.

Using wofi to open Lorien

These tools are not just application launchers, but dynamic anything launchers that can be set up to do anything that you can do in a bash script. You can run these tools in dmenu mode and pipe standard input into them.

💾 File Browser: pcmanfm / nemo / thunar

Browse your files.

# set the default file manager
xdg-mime default pcmanfm.desktop inode/directory

💾 Text Editor: vim / neovim / codium / anything but nano

I've heard that geany is good too. Haven't tried it myself yet.

# set the default text editor
xdg-mime default nvim.desktop text/plain

💾 Clipboard Manager: wl-clipboard

Copy paste til the cows come home, and I know they won't

💾 Web Browser: librewolf / qutebrowser

Librewolf is a privacy-focused Firefox fork. Big fan. They even maintain their own gentoo repository.

Vim users may enjoy qutebrowser where you can navigate the modern web using vimkeys.

💾 Terminal Emulator: kitty / st

I use kitty for the GPU cursor animations :3c

💾 Document Viewer: zathura

Minimal document viewer.

# set the default pdf viewer
xdg-mime default org.pwmt.zathura.desktop application/pdf

💾 Document Editor: LibreOffice / Obsidian / markdown + pandoc

Use LibreOffice if you're used to the Office suite created by you-know-who.

Use Obsidian if you just need to write text with simple formatting.

  • Obsidian is also an extremely powerful and portable note taking application where you can link notes to each other in a wiki-like fashion to create a network of your brain. I use it to create the blog you're reading right now.

If you want to drink a colder milk, just write .md files and use pandoc to compile them into any document file you need (.pdf, .docx, .ppt, .html, .co.uk, etc).

💾 Image Viewer: imv

Simple image viewer.

The only problem I have with it is that I can't arrow-key to the next picture in the folder, if I just opened 1 picture. Maybe its possible with imv and I just haven't figured it out yet.

# set the default jpg viewer
xdg-mime default imv.desktop image/jpeg

💾 Image Editor: gimp / krita / lorien / kolourpaint

  • gimp is for image editing like photoshop.
  • krita is for drawing, like clip studio paint.
  • lorien is another drawing app with an INFINITE CANVAS. This is amazing for diagrams and systems-design sketches. It was written using the godot game engine which is pretty cool.
  • kolourpaint is similar to MS Paint.

💾 Video Player: mpv

The best video player out there.

# set the default mp4 viewer
xdg-mime default mpv.desktop video/mp4

💾 Screenshots: grim + slurp

Grim is a tool that can take screenshots from a wayland compositor.

Slurp is a tool that selects a region in a wayland compositor.

Something something apple pen.

# Select a region & screenshot it
grim -g "$(slurp)"

Here is the script I use to select a region, take a screenshot, save to a certin directory, and copy to the clipboard.

#!/usr/bin/env bash
savepath="$HOME/pictures/screenshots/Screenshot from $(date +%Y-%m-%d_%X).png"
grim -g "$(slurp)" -t png - | tee -a "$savepath" | wl-copy -t image/png

💾 Screen recording: wf-recorder / wl-screenrec + slurp

You will have to try these out yourself. One may work better over the other depending on your usecase.

wf-recorder -g "$(slurp)"

The script I use for screen recording is bound to a hotkey, so that I can start & stop the recording using the same button. My script does the following:

  1. Defines a directory for recordings to go in
  2. Prompts me to enter a name for the video file using wofi
  3. Prompts me for a screen region using slurp
  4. Displays a notification using dunst
#!/usr/bin/env bash

destination_dir=$HOME/videos/recordings

record() {
    cd $destination_dir || exit 1
    filename=$(find . -type f | sed "s|^\./||" | wofi --dmenu --prompt="Filename:") || exit 0
    audio_device=$(pactl list short sources | grep Focusrite | awk '{print $2}')
    wl-screenrec -g "$(slurp)" --audio --audio-device "$audio_device" -f "$destination_dir"/"$filename.mp4" --ffmpeg-audio-encoder libopus -m 60 &
    echo $! >/tmp/wlscreenrec
    notify-send 'Started screenrecording'
}

end() {
    killall wl-screenrec &
    rm -f /tmp/wlscreenrec
    notify-send 'Screenrecording killed'
}

([[ -f /tmp/wlscreenrec ]] && end && exit 0) || record

If copying this script, adjust the audio_device variable to fit your needs.

💾 Email Client: claws mail

Less bloated than thunderbird.

💾 XMPP Client: dino / gajim

Functional.

💾 IRC Client: catgirl / thelounge

As silly as the name is, catgirl is a great minimal terminal IRC client that I prefer over irssi.

If you have your own server, consider hosting your own instance of thelounge. It provides a modern feeling IRC experience, includes a bouncer, supports custom styling, etc.

💾 Audio Volume Control: pavucontrol / pwvucontrol

Control your volume.

💾 Audio Routing: qpwgraph / coppwr

View audio inputs and outputs in a interactable graph/diagram UI.

💾 Notification Daemon: dunst / tiramisu

Minimal and customizable notifications. Once you know that using notify-send is possible, scripting and notifications become very attractive.

notify-send "This is a notification"

💾 Status Bar: waybar / slstatus

Minimal and customizable "taskbar" for displaying "stuff"

💾 Night Light: gammastep

Make your screen more yellow/less blue.

#linux
#linux deskop