GNUToLinux — Definitive Reference

The Complete
openSUSE
Handbook

Everything you need to master Tumbleweed & Slowroll — from your very first boot to kernel-level customisation. Beginner through advanced, all in one place.

GNUToLinux × openSUSE Project
↓ Scroll to begin

Start Here — Which openSUSE Is Right For You?

New to all of this? Answer these two questions and you'll know exactly where to begin.

🤔 Question 1: How often do you want updates?

🐢 "Just keep it working"

→ Choose Slowroll
Monthly big updates, daily security fixes. Less churn, less chance of breakage. Ideal for a family PC, secondary machine, or if you simply don't want to think about it.

🌀 "Give me everything, now"

→ Choose Tumbleweed
Daily/weekly snapshots with the very latest software. Best for developers, enthusiasts, and anyone who wants cutting-edge drivers and desktop environments.

🖥️ Question 2: Which desktop environment?

KDE Plasma

openSUSE's flagship. Endlessly customisable, feature-rich, great for gamers and power users. Best integration with YaST and openSUSE tools. Recommended.

GNOME

Clean, opinionated, and focused. Fewer options, but beautifully consistent. Best Wayland support historically. Great for "just works" users.

Xfce

Lightweight, fast, traditional desktop. Perfect for older hardware or users who prefer simplicity over bells and whistles.

🎮 Quick-Start Paths

I want to…Jump to
Get openSUSE installedInstallation
Get my NVIDIA/AMD GPU workingGPU Drivers
Play games on SteamGaming
Dual-boot with WindowsDual Boot
Fix something that brokeTroubleshooting
Connect to my NASNetwork Storage
Make my desktop look amazingTheming Deep-Dive
Set up a home serverSelf-Hosting
📺 Video Walkthroughs

Many of the topics in this guide have companion videos on the GNUToLinux YouTube channel. Look for the 📺 icon throughout the guide — it means there's a video available for that section.

Understanding openSUSE

openSUSE is one of the oldest and most robust Linux distributions, backed by SUSE — a German enterprise Linux company. It comes in several flavours, and the two that matter most for desktop users are Tumbleweed and Slowroll.

🌀 Tumbleweed

A true rolling release. Every snapshot is tested by openQA before being released. You get the latest kernels, desktop environments, and packages within days of upstream release. As of March 2026, Tumbleweed ships kernel 6.19.x and Plasma 6.6.

Best for: Users who want the absolute latest software and are comfortable with frequent updates.

🐢 Slowroll

Based on Tumbleweed but rolls slower — big updates arrive roughly monthly, with continuous security fixes. Slowroll updates typically land 5–10 days after their Tumbleweed snapshot. Still in beta but widely used.

Best for: Users who want fresh software without the daily churn. Great for machines you don't use every day.

Key openSUSE Technologies

⚠️ Major Change: YaST Is Being Retired

After decades as openSUSE's all-in-one management tool, YaST is being phased out. Its role is being split between three modern replacements:

  • Agama — the new system installer (replaces YaST installation). Web-based, supports remote installs, already default in Leap 16.
  • Cockpit — web-based system management (replaces YaST's config modules for networking, firewall, users, services, storage, etc.). Access it at https://localhost:9090.
  • Myrlyn — the new graphical package manager (replaces YaST Software Management). A standalone Qt 6 app built on libzypp with no YaST or Ruby dependencies. Arrived in Tumbleweed mid-2025.

Where things stand (April 2026): Leap 16 has fully dropped YaST. Tumbleweed and Slowroll still ship YaST but it's in community maintenance mode — SUSE is no longer developing it. The zypper command line is unaffected and remains the primary way most users manage packages. This guide covers both YaST (where it still exists) and the new tools.

🔧

YaST → Cockpit

YaST was openSUSE's all-in-one management tool. Cockpit is taking over system admin — a web dashboard for networking, storage, users, firewall, and services. Still available in Tumbleweed/Slowroll but on its way out.

📦

Zypper + Myrlyn

Zypper remains the command-line package manager and isn't going anywhere. Myrlyn is its new GUI companion — a standalone Qt 6 app replacing YaST's Software Management module.

📸

Snapper + Btrfs

openSUSE defaults to Btrfs with automatic snapshots. Broke something? Boot from a snapshot and roll back in seconds.

🦎

Agama

The new web-based installer replacing YaST's installation wizard. Supports remote installs, API-driven deployments, and a cleaner UI. Default in Leap 16, coming to Tumbleweed.

🏗️

Open Build Service

The OBS lets anyone build and distribute packages for openSUSE (and other distros). It powers community repos and software.opensuse.org.

Tumbleweed vs Slowroll — Which to Pick?

If you use your machine daily and enjoy staying on the bleeding edge, go Tumbleweed. If it's a secondary machine, a family PC, or you just want less frequent updates, Slowroll is a superb choice. Both use zypper dup to update — the only difference is how often packages arrive.

Installing openSUSE

Download

Grab the ISO from get.opensuse.org. For Tumbleweed, use the DVD or NET image. For Slowroll, use the dedicated ISO from the Slowroll download page or install Tumbleweed and migrate.

Create a Bootable USB

On any OS, use balenaEtcher, Ventoy, or the command line:

# Replace /dev/sdX with your USB device — BE CAREFUL
sudo dd if=openSUSE-Tumbleweed-DVD-x86_64.iso of=/dev/sdX bs=4M status=progress oflag=sync

Installation Walkthrough

openSUSE is transitioning to the Agama installer — a modern, web-based replacement for the classic YaST installer. Leap 16 already uses Agama by default. Tumbleweed and Slowroll are in transition and may use either installer depending on when you download your ISO.

Agama Installer (New)

Agama runs as a web interface — even during local installation, it opens in a browser. It's cleaner and simpler than YaST's installer but covers all the essentials. It also supports remote installation (install a headless server from another machine's browser). The process:

  1. Boot from USB — Agama starts automatically and opens a browser-based interface
  2. Select your language, keyboard layout, and timezone
  3. Choose your desktop environment (KDE Plasma recommended; GNOME, Xfce also available)
  4. Storage: Accept the suggested Btrfs layout for root with XFS for /home — this gives you snapshot support out of the box
  5. Create your user account and set a root password
  6. Review and confirm — Agama shows a clear summary before writing anything

Classic YaST Installer (Legacy)

If your ISO still uses the YaST installer, the process is essentially the same — just with the traditional desktop-style wizard rather than a browser interface. Both produce identical results.

Migrating Tumbleweed → Slowroll

If you've installed Tumbleweed and want to switch to Slowroll, run the following:

# Download and install the Slowroll repos package
shopt -s globstar
TMPSR=$(mktemp -d)
zypper --pkg-cache-dir=${TMPSR} download openSUSE-repos-Slowroll
zypper modifyrepo --all --disable
zypper install ${TMPSR}/**/openSUSE-repos-Slowroll*.rpm

# Now perform a distribution upgrade to switch
sudo zypper dup
Important

The migration tool version in some Tumbleweed repos may have a bug that causes migration to fail. If that happens, download the latest openSUSE-repos-Slowroll from the upstream GitHub source and install it directly.

Dual-Booting with Windows Beginner

Many people switching to Linux want to keep Windows around as a safety net. openSUSE handles dual-booting well, but there are some important steps to get right.

Before You Start

  1. Back up your Windows data. Always. No exceptions.
  2. Disable Fast Startup in Windows: Settings → System → Power → Additional power settings → "Choose what the power buttons do" → "Turn off fast startup". This prevents Windows from locking the disk.
  3. Disable Secure Boot (optional but simplifies things, especially for NVIDIA). You can re-enable it later if needed.
  4. Shrink your Windows partition from within Windows: Disk Management → right-click your C: drive → Shrink Volume. Leave at least 60–80 GB free for openSUSE.

Installation for Dual Boot

During the openSUSE installer's partitioning step:

GRUB and Windows

openSUSE's GRUB bootloader should automatically detect Windows and add it to the boot menu. If Windows doesn't appear after installation, run sudo grub2-mkconfig -o /boot/grub2/grub.cfg to regenerate the boot menu. Install os-prober if it's not already present: sudo zypper install os-prober.

Common Dual-Boot Issues

Clock is wrong in one OS

Windows and Linux handle the hardware clock differently. Fix it by telling Linux to use local time:

sudo timedatectl set-local-rtc 1

Windows update overwrites GRUB

Major Windows updates can overwrite the boot record. To fix:

  1. Boot from your openSUSE USB
  2. Select Rescue System
  3. Mount your installed system and reinstall GRUB:
# From rescue environment
mount /dev/sdaX /mnt    # your root partition
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
grub2-install --target=x86_64-efi --efi-directory=/boot/efi
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
reboot

BitLocker blocks Linux from reading Windows

If BitLocker is enabled, Linux cannot mount the Windows partition. You'll need to either disable BitLocker in Windows or suspend it before booting into Linux if you need file access.

First Steps After Install Beginner

1. Update Your System

The very first thing to do after a fresh install:

# Refresh all repositories and perform a distribution upgrade
sudo zypper refresh
sudo zypper dup
Critical: Always use zypper dup

On Tumbleweed and Slowroll, always use zypper dup (distribution upgrade), not zypper up (update). The dup command properly handles package renames, splits, and version changes that rolling releases require. Using up can leave your system in an inconsistent state.

2. Add Essential Repositories

Packman (Multimedia Codecs)

Packman provides multimedia codecs, proprietary video codecs, and other packages that openSUSE can't ship due to licensing.

# For Tumbleweed
sudo zypper ar -cfp 90 https://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Tumbleweed/ packman

# For Slowroll — use the dedicated Slowroll Packman repo
sudo zypper ar --refresh -p 70 http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Slowroll/Essentials/ packman

# Switch system packages to Packman versions (for full codec support)
sudo zypper dup --from packman --allow-vendor-change

Flathub (Flatpak)

# Install Flatpak if not already present
sudo zypper install flatpak

# Add Flathub
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

3. Install Multimedia Codecs

After adding Packman:

# Install essential codecs
sudo zypper install --from packman ffmpeg gstreamer-plugins-bad gstreamer-plugins-ugly gstreamer-plugins-libav libavcodec-full

4. Set Your Hostname

sudo hostnamectl set-hostname my-opensuse-machine

Installing & Removing Software

Zypper — The Terminal Way Beginner

ActionCommand
Search for a packagezypper search firefox
Install a packagesudo zypper install firefox
Remove a packagesudo zypper remove firefox
Get package infozypper info firefox
List installed packageszypper search -i
Clean package cachesudo zypper clean
Install a pattern (group)sudo zypper install -t pattern devel_basis
List available patternszypper search -t pattern
Lock a package versionsudo zypper addlock package-name
Unlock a packagesudo zypper removelock package-name

Myrlyn — The New GUI Package Manager Beginner

Myrlyn is the standalone Qt 6 replacement for YaST's Software Management module. It uses the same libzypp backend as zypper, so everything stays consistent.

# Install Myrlyn (if not already present)
sudo zypper install myrlyn

# Run it
sudo myrlyn

# Or run in read-only mode (no root needed) to browse packages
myrlyn

Myrlyn lets you search, install, update, and remove individual packages or patterns. It also manages your repositories, supports package locking ("taboo" and "protected" states), and auto-refreshes repos on launch. If you've used YaST's Software Management before, Myrlyn will feel immediately familiar — it was built by the same developer.

YaST Software Manager (Legacy) Beginner

On Tumbleweed and Slowroll (as of early 2026), YaST is still installed and functional. Open YaST → Software Management to search, install, or remove packages. However, YaST is in maintenance mode and will eventually be removed. Get comfortable with Myrlyn and zypper instead.

Cockpit — Web-Based System Management Beginner

Cockpit is the replacement for YaST's system configuration modules (network, firewall, users, services, storage). It runs as a web dashboard.

# Install Cockpit (may already be present)
sudo zypper install cockpit
sudo systemctl enable --now cockpit.socket

# Open firewall for Cockpit
sudo firewall-cmd --permanent --add-service=cockpit
sudo firewall-cmd --reload

# Access in your browser:
# https://localhost:9090
# Log in with your system username and password

From Cockpit you can manage networking, firewall rules, user accounts, systemd services, storage, software updates, and even open a terminal — all from your browser. It also works remotely, so you can manage headless machines.

Flatpak Beginner

# Search Flathub
flatpak search discord

# Install
flatpak install flathub com.discordapp.Discord

# Run
flatpak run com.discordapp.Discord

# Update all Flatpaks
flatpak update

# Remove
flatpak uninstall com.discordapp.Discord

OBS / software.opensuse.org Intermediate

The software.opensuse.org website lets you find community-built packages and install them via 1-Click Install (downloads a .ymp file that adds the repo and installs the package via YaST). Be cautious with community repos — they can conflict with official packages.

When to Use What — Zypper vs Flatpak vs OBS Beginner

Having three ways to install software is a strength, not a problem — once you know which to reach for:

MethodBest ForProsCons
Zypper (official repos) System tools, drivers, desktop components, dev libraries Best integration, auto-snapshots, fastest, dependency-aware Software may lag behind upstream slightly
Flatpak (Flathub) Desktop apps — browsers, Discord, Spotify, Obsidian, gaming launchers Sandboxed, always up-to-date, distro-independent, easy Larger disk usage, slight overhead, some system integration quirks
OBS / 1-Click Niche software not in official repos Huge catalogue of community packages Can cause dependency conflicts, repos may be unmaintained
Rule of Thumb

System-level stuff (drivers, codecs, kernel modules, dev tools) → Zypper. User-facing apps (chat apps, creative tools, browsers) → Flatpak. Only use OBS/1-Click when the software isn't available anywhere else, and remove the repo after installing if you want to avoid future conflicts.

Timeshift Warning for openSUSE

Do not use Timeshift alongside Snapper on Btrfs. They both try to manage Btrfs snapshots and will conflict, potentially corrupting your snapshot layout. openSUSE's built-in Snapper integration is superior on this distro — use that instead. Timeshift is designed for distros that don't have native snapshot tooling.

Building from Source Advanced

# Install build essentials
sudo zypper install -t pattern devel_basis

# Standard build from source
tar xf package-1.0.tar.gz
cd package-1.0
./configure --prefix=/usr/local
make -j$(nproc)
sudo make install
RPM Basics

openSUSE uses RPM packages. You can install a downloaded .rpm file directly with sudo zypper install ./package.rpm — this handles dependencies automatically unlike using rpm -i directly.

Keeping Your System Updated

Regular Updates Beginner

# The standard update process — always use dup for rolling releases
sudo zypper refresh
sudo zypper dup

# If you want to see what will change before committing
sudo zypper dup --dry-run

On KDE Plasma, the Discover app will also notify you of updates. On GNOME, GNOME Software does the same. However, many openSUSE users prefer the terminal for full control.

Automatic Updates Intermediate

# Enable automatic updates (checks and downloads, doesn't auto-install by default)
sudo zypper install yast2-online-update-configuration

# Or use a systemd timer for scheduled dup
# Create /etc/systemd/system/zypper-dup.service
# and /etc/systemd/system/zypper-dup.timer
Tumbleweed Update Frequency

Tumbleweed can receive updates daily. You don't have to update every day — once or twice a week is perfectly fine. If you skip updates for too long (months), run a few zypper dup cycles to catch up safely. Slowroll is gentler: expect monthly batch updates with security fixes in between.

Handling Update Conflicts Intermediate

Sometimes zypper dup will present you with conflicts. Read them carefully. Common solutions:

Snapper & Btrfs Snapshots

This is one of openSUSE's killer features. If you accepted the default Btrfs partitioning during install, Snapper is already configured and working. Every time you run zypper (or Myrlyn), a pair of snapshots (before/after) is automatically created.

Understanding Snapshots Beginner

A snapshot is a frozen state of your root filesystem at a point in time. Your /home directory is typically on a separate partition or subvolume and is not included in snapshots — so your personal files are safe during rollbacks.

Basic Snapper Commands Beginner

# List all snapshots
sudo snapper list

# Create a manual snapshot
sudo snapper create --description "Before I broke everything"

# Compare two snapshots (see what changed)
sudo snapper status 10..11

# View file diffs between snapshots
sudo snapper diff 10..11

# Undo changes between two snapshots
sudo snapper undochange 10..11

System Rollback — Recovering from Disaster Beginner

If an update breaks your system and you can't boot properly:

  1. Reboot your machine
  2. At the GRUB menu, select "Start Bootloader from a read-only snapshot"
  3. Choose the snapshot you want to boot into (usually the most recent Pre-snapshot before the breakage)
  4. Once booted and you've verified things work, open a terminal and run:
# Perform the actual rollback
sudo snapper rollback

# Reboot to complete
sudo reboot
This is your superpower

No other mainstream distro makes rollbacks this easy. On Tumbleweed especially, knowing how to use Snapper means you can fearlessly update. Something broke? Roll back in under two minutes.

Managing Snapshot Storage Intermediate

# Check Btrfs disk usage
sudo btrfs filesystem usage /

# Delete a specific snapshot
sudo snapper delete 15

# Delete a range
sudo snapper delete 10-20

# Configure retention policy
sudo snapper set-config NUMBER_LIMIT=10 NUMBER_LIMIT_IMPORTANT=5

# Snapper auto-cleanup runs via systemd timer
systemctl status snapper-cleanup.timer

Advanced Btrfs Operations Advanced

# List Btrfs subvolumes
sudo btrfs subvolume list /

# Check filesystem
sudo btrfs scrub start /
sudo btrfs scrub status /

# Enable compression (add to /etc/fstab)
# compress=zstd:1 for fast compression
# Example fstab entry:
# UUID=xxx / btrfs subvol=/@,compress=zstd:1 0 0

# Balance filesystem (reclaim space)
sudo btrfs balance start --bg /

# Defragment
sudo btrfs filesystem defragment -r /

Customising Your Desktop

KDE Plasma Beginner

KDE Plasma is openSUSE's flagship desktop. It's extraordinarily customisable:

GNOME Beginner

Fonts Beginner

# Install Microsoft fonts (for compatibility)
sudo zypper install fetchmsttfonts

# Install Google's Noto fonts (excellent Unicode coverage)
sudo zypper install google-noto-fonts

# Install custom fonts manually
mkdir -p ~/.local/share/fonts
cp MyFont.ttf ~/.local/share/fonts/
fc-cache -fv

Wayland vs X11 Intermediate

Both KDE and GNOME default to Wayland on openSUSE. Wayland offers better security, smoother compositing, and VRR/HDR support. However, some apps (especially older ones or screen-sharing tools) may work better under X11. You can switch at the login screen.

Variable Refresh Rate & HDR

Both KDE Plasma and GNOME support VRR (FreeSync/G-Sync compatible) under Wayland. KDE Plasma 6.x also has experimental HDR support. These features require a compatible monitor and GPU driver.

GPU Drivers

NVIDIA Intermediate

NVIDIA drivers on openSUSE require adding the NVIDIA repository. The open kernel driver (G07) is recommended for Turing-generation GPUs and newer.

# Check your GPU
inxi -aG

# Method 1: Install the NVIDIA repos package (recommended)
sudo zypper install openSUSE-repos-NVIDIA

# Then install the driver (auto-detects your GPU)
sudo zypper install-new-recommends --repo repo-non-free

# Method 2: Manually add the repo (Tumbleweed)
sudo zypper addrepo --refresh https://download.nvidia.com/opensuse/tumbleweed/ nvidia

# Install the open kernel driver (Turing+ GPUs / G07)
sudo zypper install nvidia-open-driver-G07-signed-kmp-default

# Reboot
sudo reboot
Secure Boot & NVIDIA

During installation, a MOK (Machine Owner Key) is created and the kernel modules are signed. On the first reboot after driver installation, the EFI tool will prompt you to "Enroll MOK" → select ContinueYes → enter your root password (US keyboard layout!). This is essential — skipping it means the driver won't load.

AMD Beginner

AMD GPUs use the open-source Mesa drivers, which are included in openSUSE by default. There's nothing extra to install — it just works out of the box. This is one of the reasons AMD is the easier choice for Linux gaming.

# Verify your AMD driver is loaded
lsmod | grep amdgpu

# Install Vulkan support (may already be installed)
sudo zypper install libvulkan_radeon libvulkan_radeon-32bit

# Check Vulkan
vulkaninfo | head -20

Intel Beginner

# Intel drivers are built into the kernel (i915)
# For Vulkan support:
sudo zypper install libvulkan_intel libvulkan_intel-32bit

Hybrid Graphics (NVIDIA Optimus) Advanced

# For hybrid laptops, use PRIME render offload
# Add to game launch options in Steam:
# DRI_PRIME=1 %command%
# Or for NVIDIA specifically:
# __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia %command%

# Check which GPU is being used
glxinfo | grep "OpenGL renderer"

Gaming on openSUSE

Linux gaming has never been better. Thanks to Valve's Proton, the vast majority of Windows games run on Linux — and openSUSE handles it beautifully.

Steam Beginner

# Install Steam
sudo zypper install steam

# If on Tumbleweed with SELinux (default since Feb 2025),
# the selinux-policy-targeted-gaming package is auto-installed
# with Steam to handle the required boolean.
# If you use the Flatpak version of Steam, install it manually:
sudo zypper install selinux-policy-targeted-gaming

After installing, launch Steam, go to Settings → Compatibility, enable "Enable Steam Play for all other titles", and select the latest Proton version. That's it — most Windows games will now work.

ProtonDB is your best friend

Before buying a game, check protondb.com to see how well it runs on Linux. Users rate games from Platinum (flawless) to Borked (doesn't work).

Lutris Beginner

Lutris is a game manager that handles non-Steam games — GOG, Epic, emulators, and standalone Windows games.

sudo zypper install lutris

Heroic Games Launcher Beginner

For Epic Games Store and GOG games, Heroic provides a native launcher:

flatpak install flathub com.heroicgameslauncher.hgl

Proton-GE (GloriousEggroll) Intermediate

A community build of Proton with extra patches and fixes for games that don't work with official Proton:

# Install ProtonUp-Qt to manage Proton-GE versions
flatpak install flathub net.davidotek.pupgui2

# Or install via Flatpak
flatpak install flathub com.valvesoftware.Steam.CompatibilityTool.Proton-GE

Retro Gaming & Emulation Beginner

# RetroArch — the all-in-one emulator frontend
sudo zypper install retroarch

# Or use the Flatpak for the latest version
flatpak install flathub org.libretro.RetroArch

# Individual emulators
sudo zypper install dolphin-emu   # GameCube/Wii
flatpak install flathub org.DolphinEmu.dolphin-emu
flatpak install flathub org.ppsspp.PPSSPP   # PSP
flatpak install flathub app.xemu.xemu       # Xbox

Game Performance Tuning Advanced

# GameMode — optimises system settings while gaming
sudo zypper install gamescope gamemode

# MangoHud — FPS overlay
sudo zypper install mangohud

# Launch a game with MangoHud:
# MANGOHUD=1 %command%

# Launch with GameMode:
# gamemoderun %command%

# Combine both:
# MANGOHUD=1 gamemoderun %command%

# Disable KDE compositor for better performance
# Alt+Shift+F12 toggles it on/off
# Or add to game launch options:
# KWIN_COMPOSE=0 %command%

Controller Support Beginner

Xbox controllers work out of the box via USB or Bluetooth. PlayStation controllers (DualShock 4, DualSense) also work natively. Steam's built-in controller configuration handles most edge cases. For Switch Pro controllers, they're supported by the kernel — just pair via Bluetooth.

Networking & Network Storage

Wi-Fi & Ethernet Beginner

NetworkManager handles connections in both KDE and GNOME. Click the system tray icon to connect to Wi-Fi. For terminal:

# List available Wi-Fi networks
nmcli device wifi list

# Connect to a network
nmcli device wifi connect "MyNetwork" password "MyPassword"

# Show all connections
nmcli connection show

Mounting Network Shares (SMB/CIFS) Beginner

To access Windows shares, NAS devices, or other Samba shares:

# Install Samba client tools
sudo zypper install samba-client cifs-utils

# Browse available shares on a server
smbclient -L //192.168.1.100 -U username

# Mount a share temporarily
sudo mount -t cifs //192.168.1.100/SharedFolder /mnt/share \
  -o username=myuser,password=mypass,uid=$(id -u),gid=$(id -g)

# KDE Dolphin — just type in the address bar:
# smb://192.168.1.100/SharedFolder

Persistent Mount via /etc/fstab

# Create credentials file (safer than passwords in fstab)
sudo nano /etc/samba/credentials
# Add:
# username=myuser
# password=mypass
sudo chmod 600 /etc/samba/credentials

# Add to /etc/fstab:
# //192.168.1.100/SharedFolder /mnt/nas cifs credentials=/etc/samba/credentials,uid=1000,gid=1000,iocharset=utf8 0 0

# Mount it
sudo mount -a

NFS Shares Intermediate

# Install NFS client
sudo zypper install nfs-client

# Mount an NFS share
sudo mount -t nfs 192.168.1.100:/export/data /mnt/nfs

# Persistent mount in /etc/fstab:
# 192.168.1.100:/export/data /mnt/nfs nfs defaults 0 0

SSH Beginner

# Connect to a remote machine
ssh user@192.168.1.50

# Generate SSH keys
ssh-keygen -t ed25519

# Copy your public key to a remote server
ssh-copy-id user@192.168.1.50

# Enable SSH server on your openSUSE machine
sudo systemctl enable --now sshd

Setting Up a Samba Server Intermediate

# Install Samba server
sudo zypper install samba

# Create a shared directory
sudo mkdir -p /srv/samba/shared
sudo chmod 777 /srv/samba/shared

# Add Samba user
sudo smbpasswd -a yourusername

# Edit /etc/samba/smb.conf — add at the bottom:
# [Shared]
#   path = /srv/samba/shared
#   browseable = yes
#   writable = yes
#   valid users = yourusername

# Start and enable
sudo systemctl enable --now smb nmb

# Open firewall
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

Firewall Management Intermediate

# openSUSE uses firewalld by default
# Check status
sudo firewall-cmd --state

# List open ports/services
sudo firewall-cmd --list-all

# Open a port
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

# Or use Cockpit (https://localhost:9090) for a web-based firewall GUI

Backup Strategies

Snapshots ≠ Backups

Btrfs snapshots are brilliant for rolling back system changes, but they live on the same drive. If the drive fails, you lose everything. Always maintain off-drive backups for important data.

rsync — Simple & Powerful Beginner

# Backup home directory to an external drive
rsync -avh --progress /home/username/ /mnt/backup/home/

# Backup to a remote server via SSH
rsync -avh --progress /home/username/ user@server:/backup/home/

# Incremental backup (only copies changed files)
rsync -avh --delete /home/username/ /mnt/backup/home/

Timeshift Beginner

Timeshift provides a GUI for system snapshots. On openSUSE with Btrfs, it integrates with existing snapshots:

sudo zypper install timeshift

Borg Backup Intermediate

Borg is a deduplicating backup tool — perfect for efficient, encrypted backups:

# Install
sudo zypper install borgbackup

# Initialise a repository
borg init --encryption=repokey /mnt/backup/borg-repo

# Create a backup
borg create /mnt/backup/borg-repo::home-{now} /home/username \
  --exclude '/home/username/.cache'

# List archives
borg list /mnt/backup/borg-repo

# Restore from backup
borg extract /mnt/backup/borg-repo::home-2026-04-12

Automated Backups with systemd Timers Advanced

# Create /etc/systemd/system/backup.service
# [Unit]
# Description=Daily Borg Backup
#
# [Service]
# Type=oneshot
# ExecStart=/usr/local/bin/backup.sh

# Create /etc/systemd/system/backup.timer
# [Unit]
# Description=Run backup daily at 2am
#
# [Timer]
# OnCalendar=*-*-* 02:00:00
# Persistent=true
#
# [Install]
# WantedBy=timers.target

sudo systemctl enable --now backup.timer

Command Line Essentials

Essential Commands Beginner

CommandWhat It Does
ls -laList files with details & hidden files
cd /pathChange directory
cp -r src dstCopy files/folders
mv old newMove or rename
rm -rf dirDelete (careful!)
find / -name "file"Search for files
grep "text" fileSearch inside files
df -hDisk space usage
free -hMemory usage
htopInteractive process viewer
journalctl -xeView system logs
systemctl status sshdCheck service status
ip aShow network interfaces
sudo !!Re-run last command as root

Shell Customisation Intermediate

# openSUSE uses Bash by default. Install Zsh for a richer experience:
sudo zypper install zsh

# Install Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# Or try Fish — a modern, user-friendly shell
sudo zypper install fish

# Set your default shell
chsh -s /usr/bin/zsh

Useful CLI Tools Intermediate

# Modern replacements for classic tools
sudo zypper install bat     # better cat (syntax highlighting)
sudo zypper install eza     # better ls
sudo zypper install fd      # better find
sudo zypper install ripgrep # better grep
sudo zypper install btop    # better htop
sudo zypper install dust    # better du
sudo zypper install duf     # better df
sudo zypper install tldr    # simplified man pages

Aliases & Productivity Beginner

# Add to ~/.bashrc or ~/.zshrc
alias update='sudo zypper ref && sudo zypper dup'
alias ll='ls -alh --color=auto'
alias gs='git status'
alias cls='clear'
alias ports='sudo ss -tulnp'
alias myip='curl -s ifconfig.me'

Containers & Virtualisation

Podman (Docker Alternative) Intermediate

openSUSE ships Podman instead of Docker by default. Podman is daemonless, rootless, and command-compatible with Docker:

# Install
sudo zypper install podman podman-compose

# Run a container (same syntax as docker)
podman run -it --rm ubuntu bash

# Run rootless (no sudo needed)
podman run -d -p 8080:80 nginx

# List running containers
podman ps

# Docker Compose equivalent
podman-compose up -d

Docker Intermediate

# If you specifically need Docker
sudo zypper install docker docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# Log out and back in for group change

Virtual Machines with KVM/QEMU Intermediate

# Install virtualisation stack
sudo zypper install -t pattern kvm_server kvm_tools
sudo zypper install virt-manager

# Enable and start libvirtd
sudo systemctl enable --now libvirtd

# Add your user to the libvirt group
sudo usermod -aG libvirt $USER

# Launch the GUI
virt-manager

VirtualBox Beginner

sudo zypper install virtualbox virtualbox-qt
sudo usermod -aG vboxusers $USER

Distrobox — Run Any Distro Inside openSUSE Intermediate

# Install
sudo zypper install distrobox

# Create an Ubuntu container
distrobox create --name ubuntu --image ubuntu:24.04

# Enter it
distrobox enter ubuntu

# Export an app from the container to your host
distrobox-export --app firefox

Security & Hardening

SELinux Intermediate

As of February 2025, openSUSE Tumbleweed uses SELinux as the default Mandatory Access Control mechanism (replacing AppArmor). Slowroll follows suit. SELinux enforces fine-grained access policies on processes and files.

# Check SELinux status
sestatus

# Check current mode
getenforce

# Temporarily set to permissive (logging only, no enforcement)
sudo setenforce 0

# View SELinux denials
sudo ausearch -m AVC -ts recent

# Manage booleans
sudo getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on
SELinux & Gaming

If you install Steam or Lutris via RPM, the selinux-policy-targeted-gaming package is automatically installed, which sets the required selinuxuser_execmod boolean. If you use Flatpak versions, install this package manually or set the boolean yourself.

Firewall Beginner

openSUSE uses firewalld. Manage it via Cockpit (web dashboard), the YaST Firewall module (while still available), or the firewall-cmd commands covered in the Network section above.

Keeping Secrets — Password Manager Beginner

# KeePassXC — excellent offline password manager
sudo zypper install keepassxc

# Or use Bitwarden via Flatpak
flatpak install flathub com.bitwarden.desktop

Full Disk Encryption Intermediate

The openSUSE installer offers LUKS encryption during partitioning. If you didn't enable it during install, encrypting afterwards is complex — it's best done at install time. For encrypting external drives:

# Encrypt a USB drive
sudo cryptsetup luksFormat /dev/sdX1
sudo cryptsetup open /dev/sdX1 encrypted_usb
sudo mkfs.ext4 /dev/mapper/encrypted_usb
sudo mount /dev/mapper/encrypted_usb /mnt/usb

Automatic Security Updates Advanced

# On Tumbleweed/Slowroll, security fixes come with zypper dup
# For automated patching, consider:
sudo zypper install yast2-online-update-configuration
# Configure via YaST → Online Update Configuration

Performance Tuning & Power Management

System Monitoring Beginner

# System info at a glance
inxi -Fxz

# Hardware info
sudo hwinfo --short

# Disk I/O
iostat -x 1

# Network monitoring
sudo iftop

Power Management (Laptops) Intermediate

# Install TLP for better battery life
sudo zypper install tlp
sudo systemctl enable --now tlp

# Check battery status
tlp-stat -b

# Or use power-profiles-daemon (GNOME default)
powerprofilesctl list
powerprofilesctl set power-saver

Kernel Parameters Advanced

# View current kernel parameters
cat /proc/cmdline

# Edit GRUB defaults
sudo nano /etc/default/grub
# Modify GRUB_CMDLINE_LINUX_DEFAULT

# Rebuild GRUB config
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Swap & ZRAM Intermediate

# Check current swap
swapon --show

# Adjust swappiness (lower = less eager to swap)
# Add to /etc/sysctl.d/99-swappiness.conf:
# vm.swappiness=10

# ZRAM is enabled by default on newer openSUSE installations
# Check status
zramctl

Systemd Service Management Intermediate

# List all running services
systemctl list-units --type=service --state=running

# Check boot time
systemd-analyze
systemd-analyze blame

# Disable a slow service
sudo systemctl disable --now some-slow-service

# View failed services
systemctl --failed

Development Environment

Programming Languages

# Python (usually pre-installed)
sudo zypper install python3 python3-pip python3-virtualenv

# Node.js
sudo zypper install nodejs npm

# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Go
sudo zypper install go

# Java
sudo zypper install java-21-openjdk java-21-openjdk-devel

# C/C++ toolchain
sudo zypper install -t pattern devel_basis devel_C_C++

Code Editors

# VS Code (via Flatpak)
flatpak install flathub com.visualstudio.code

# Or the RPM from Microsoft's repo
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo zypper addrepo https://packages.microsoft.com/yumrepos/vscode vscode
sudo zypper install code

# Neovim
sudo zypper install neovim

# Kate (KDE's advanced editor — already installed with Plasma)
# Sublime Text, JetBrains IDEs — available via Flatpak or Snap

Git

# Usually pre-installed
sudo zypper install git

# Configure
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main

Things People Love Doing on Linux

Media Server (Plex / Jellyfin)

# Jellyfin — free, open-source media server
flatpak install flathub org.jellyfin.JellyfinServer

# Or via Podman
podman run -d --name jellyfin \
  -p 8096:8096 \
  -v /path/to/media:/media \
  -v /path/to/config:/config \
  jellyfin/jellyfin

Home Automation (Home Assistant)

# Run via Podman
podman run -d --name homeassistant \
  --network=host \
  -v /path/to/config:/config \
  ghcr.io/home-assistant/home-assistant:stable

Photo & Video Editing

sudo zypper install gimp        # Photo editing
sudo zypper install krita       # Digital painting
sudo zypper install inkscape    # Vector graphics
sudo zypper install kdenlive    # Video editing
sudo zypper install obs-studio  # Streaming/recording
sudo zypper install audacity    # Audio editing
sudo zypper install blender     # 3D modelling

Office & Productivity

# LibreOffice is pre-installed
# For additional apps:
sudo zypper install thunderbird  # Email
flatpak install flathub md.obsidian.Obsidian  # Note-taking
flatpak install flathub com.logseq.Logseq     # Knowledge management

Music Production

sudo zypper install ardour      # DAW
sudo zypper install lmms        # Beginner-friendly DAW
sudo zypper install musescore   # Sheet music notation

# For low-latency audio, install PipeWire (default on modern openSUSE)
# and configure with:
# pw-metadata -n settings 0 clock.min-quantum 64

Torrenting

sudo zypper install transmission-gtk   # Simple
sudo zypper install qbittorrent        # Full-featured

Wine — Running Windows Apps Intermediate

# Install Wine
sudo zypper install wine wine-32bit

# Install Bottles (modern Wine manager with sandboxing)
flatpak install flathub com.usebottles.bottles

Printing & Scanning Beginner

# CUPS is pre-installed. Access the web interface:
# http://localhost:631

# For HP printers
sudo zypper install hplip

# Configure printers via CUPS web interface: http://localhost:631
# Or use Cockpit → Services to manage CUPS

Bluetooth Beginner

# Usually works out of the box. If not:
sudo zypper install bluez
sudo systemctl enable --now bluetooth

# Use bluetoothctl for command-line pairing:
bluetoothctl
# power on
# scan on
# pair XX:XX:XX:XX:XX:XX
# connect XX:XX:XX:XX:XX:XX

Troubleshooting Common Issues

This is the section you'll actually bookmark. These are the problems people hit most often — and how to fix them.

Black Screen After NVIDIA Driver Install Intermediate

This is the single most common issue on openSUSE with NVIDIA. Usually caused by the MOK key not being enrolled or the wrong driver version being installed.

  1. At the black screen, try switching to a TTY: Press Ctrl+Alt+F2 to get a text console. If you get a login prompt, the driver is partially working.
  2. Check if NVIDIA modules loaded:
# Log in at the TTY
lsmod | grep nvidia

# If no output, the driver isn't loaded. Check why:
sudo dmesg | grep -i nvidia
sudo journalctl -b | grep -i nvidia

# Most common cause: MOK key not enrolled
# Check Secure Boot state:
mokutil --sb-state

If Secure Boot is on and you missed the MOK enrolment prompt during reboot:

# Re-trigger MOK enrolment
sudo mokutil --import /usr/share/nvidia-pubkeys/*.der
# Enter a temporary password, reboot, and complete enrolment in the EFI tool

If all else fails — roll back:

# Reboot, select "Start Bootloader from a read-only snapshot" in GRUB
# Boot into the pre-NVIDIA snapshot, then:
sudo snapper rollback
sudo reboot

No Sound / Audio Not Working Beginner

# Check PipeWire is running (default audio server on modern openSUSE)
systemctl --user status pipewire pipewire-pulse wireplumber

# Restart audio stack
systemctl --user restart pipewire pipewire-pulse wireplumber

# Check which sound card is detected
aplay -l

# Open audio mixer
pavucontrol   # install with: sudo zypper install pavucontrol

# If PipeWire isn't working at all, check it's installed:
sudo zypper install pipewire pipewire-pulseaudio wireplumber

# HDMI audio not working? Check output device in pavucontrol
# and make sure the correct HDMI output is selected

Wi-Fi Not Detected Beginner

# Identify your Wi-Fi hardware
lspci | grep -i network
# or for USB adapters:
lsusb

# Check if a driver is loaded
lsmod | grep -i iwl    # Intel
lsmod | grep -i ath    # Atheros/Qualcomm
lsmod | grep -i rtw    # Realtek

# If no driver loaded, check what's needed:
sudo dmesg | grep -i firmware

# Many Realtek and Broadcom cards need firmware:
sudo zypper install kernel-firmware-all

# For stubborn Broadcom cards:
sudo zypper install broadcom-wl

# Reboot after installing firmware
sudo reboot

System Won't Boot / GRUB Issues Intermediate

# If GRUB shows but won't boot:
# 1. Try booting from a snapshot (read-only snapshot option in GRUB)
# 2. If that works, rollback:
sudo snapper rollback && sudo reboot

# If GRUB itself is missing (e.g. after Windows update):
# Boot from openSUSE USB → Rescue System
# See the Dual Boot section for full repair steps

# Regenerate GRUB config:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

# Reinstall GRUB (UEFI):
sudo grub2-install --target=x86_64-efi --efi-directory=/boot/efi

Screen Tearing / Poor Graphics Performance Intermediate

# On KDE Plasma:
# System Settings → Display → Compositor → set Rendering backend to OpenGL 3.1
# Tick "Enable VSync"
# Or disable the compositor entirely for gaming: Alt+Shift+F12

# For NVIDIA, ensure DRM kernel modesetting is enabled:
# Check /etc/default/grub for:
# GRUB_CMDLINE_LINUX_DEFAULT="... nvidia-drm.modeset=1 ..."
# Then: sudo grub2-mkconfig -o /boot/grub2/grub.cfg && sudo reboot

# On Wayland with NVIDIA, force GBM backend if needed:
# Add to /etc/environment:
# GBM_BACKEND=nvidia-drm
# __GLX_VENDOR_LIBRARY_NAME=nvidia

Package Dependency Conflicts Intermediate

# View what's conflicting
sudo zypper dup --dry-run

# Force vendor change if Packman/official are fighting
sudo zypper dup --from packman --allow-vendor-change

# Find orphaned packages (leftover from removed repos)
zypper packages --orphaned

# Remove orphans
sudo zypper remove $(zypper packages --orphaned | awk 'NR>4 {print $5}')

# Nuclear option — verify and repair RPM database
sudo rpm --rebuilddb

"No Space Left on Device" with Btrfs Intermediate

# Usually caused by too many snapshots
# Check usage
sudo btrfs filesystem usage /

# List and delete old snapshots
sudo snapper list
sudo snapper delete 1-50   # delete a range

# If truly full, emergency cleanup:
sudo btrfs balance start -dusage=5 /

Flatpak App Won't Launch Beginner

# Run from terminal to see errors
flatpak run com.example.App

# Repair Flatpak installation
flatpak repair

# Update runtime
flatpak update

Custom Kernels Advanced

The default openSUSE kernel is excellent for most users. But specific workloads benefit from alternative kernels.

Why Use a Custom Kernel?

🎮 Liquorix

Optimised for desktop responsiveness and gaming. Uses a 1000Hz tick rate for precise low-jitter scheduling. If you get audio crackling in games, this kernel often fixes it.

🎵 linux-rt (Realtime)

For professional audio production with JACK or PipeWire low-latency. Guarantees timing precision for recording and live performance.

🔒 Hardened

Extra security patches and restrictive defaults. Suitable for servers or security-conscious setups.

Installing Liquorix on openSUSE

# Add the community kernel repo
# Check software.opensuse.org for the latest Liquorix package
# Search for "kernel-liquorix"

# Install
sudo zypper install kernel-liquorix

# Reboot and select the new kernel in GRUB
# The default kernel remains as a fallback
NVIDIA + Custom Kernels

NVIDIA drivers need to be rebuilt for each kernel. If you install a custom kernel, you may need to reinstall or rebuild the NVIDIA kernel module. The DKMS approach (sudo zypper install dkms) helps automate this, but it's not always seamless. Always keep the default kernel as a fallback in GRUB.

Pinning a Kernel Version

# If a specific kernel version works perfectly, lock it:
sudo zypper addlock kernel-default

# To unlock later:
sudo zypper removelock kernel-default

# List locked packages:
zypper locks

Theming Deep-Dive

KDE Plasma Theming Beginner

KDE Plasma is arguably the most customisable desktop on any operating system. Here's a systematic approach:

Global Themes

System Settings → Appearance → Global Theme → "Get New Global Themes". Popular choices include Layan, WhiteSur (macOS-like), Nordic, and Catppuccin.

Kvantum — Advanced Qt Theming Intermediate

Kvantum is a theme engine that gives you far more control over how Qt applications look — transparency, blur, custom colours, shadows.

# Install Kvantum
sudo zypper install kvantum-manager

# Download a Kvantum theme (e.g. from kde-store or GitHub)
# Open Kvantum Manager → "Change/Delete Theme" → Install

# Set Kvantum as the application style:
# System Settings → Appearance → Application Style → kvantum-dark

GTK Apps on KDE Intermediate

Firefox, GIMP, and other GTK apps won't follow your Qt theme by default. Fix it:

# Install Breeze GTK theme (matches KDE's default)
sudo zypper install gtk3-metatheme-breeze

# Or for a specific theme:
# System Settings → Appearance → GNOME/GTK Application Style
# Select your GTK theme here

# For Flatpak apps, override the theme:
flatpak override --user --env=GTK_THEME=Breeze-Dark

Icon Packs

Popular icon themes: Papirus, Tela, Colloid, Fluent.

# Install Papirus
sudo zypper install papirus-icon-theme

# Apply: System Settings → Appearance → Icons → Papirus-Dark

Custom Splash Screen, SDDM Login, and Grub Theme

# SDDM login theme:
# System Settings → Startup and Shutdown → Login Screen (SDDM) → Get New
# Or install manually to /usr/share/sddm/themes/

# GRUB theme (e.g., Vimix or Stylish):
# Clone the theme from GitHub
git clone https://github.com/vinceliuice/grub2-themes.git
cd grub2-themes
sudo ./install.sh -t vimix

GNOME Theming Beginner

# Install GNOME Tweaks and Extension Manager
sudo zypper install gnome-tweaks
flatpak install flathub com.mattjakeman.ExtensionManager

# Popular GNOME themes: adw-gtk3, Catppuccin, Marble
# Install via GNOME Tweaks → Appearance

# Recommended extensions for customisation:
# - User Themes (allows custom Shell themes)
# - Blur my Shell
# - Dash to Dock / Dash to Panel
# - Just Perfection (hide/show UI elements)
# - Rounded Window Corners

Font Rendering Intermediate

openSUSE's font rendering can feel different to Windows or macOS. Tweak it:

# Install better fonts
sudo zypper install google-noto-fonts noto-sans-mono-fonts

# For subpixel rendering, create or edit:
# ~/.config/fontconfig/fonts.conf
# Add:
# <match target="font">
#   <edit name="antialias" mode="assign"><bool>true</bool></edit>
#   <edit name="hinting" mode="assign"><bool>true</bool></edit>
#   <edit name="hintstyle" mode="assign"><const>hintslight</const></edit>
#   <edit name="rgba" mode="assign"><const>rgb</const></edit>
#   <edit name="lcdfilter" mode="assign"><const>lcddefault</const></edit>
# </match>

# Rebuild font cache
fc-cache -fv

Conky — Desktop System Monitor Intermediate

sudo zypper install conky
# Configure via ~/.conkyrc or ~/.config/conky/conky.conf
# Search GitHub for "conky themes" for gorgeous pre-built configs

Dotfiles Management Advanced

Your configuration files (dotfiles) represent hours of customisation. Version-controlling them means you can set up any new machine in minutes and never lose your setup.

The Bare Git Repo Method

This is the cleanest approach — no symlinks, no extra tools:

# Initialise a bare repo in your home directory
git init --bare $HOME/.dotfiles

# Create an alias (add to ~/.bashrc or ~/.zshrc)
alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'

# Hide untracked files (so "dotfiles status" isn't noisy)
dotfiles config --local status.showUntrackedFiles no

# Now track files:
dotfiles add ~/.bashrc
dotfiles add ~/.config/kitty/kitty.conf
dotfiles add ~/.config/nvim/init.lua
dotfiles commit -m "Initial dotfiles"

# Push to a remote (GitHub, GitLab, etc.)
dotfiles remote add origin git@github.com:yourusername/dotfiles.git
dotfiles push -u origin main

Restoring on a New Machine

# Clone the bare repo
git clone --bare git@github.com:yourusername/dotfiles.git $HOME/.dotfiles

# Set up the alias
alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'

# Checkout
dotfiles checkout

# If there are conflicts with existing files:
dotfiles checkout 2>&1 | grep -E "\s+\." | awk '{print $1}' | xargs -I{} mv {} {}.backup
dotfiles checkout

What to Track

Never Track

SSH private keys, API tokens, passwords, ~/.gnupg/, browser profiles, or anything in ~/.cache. Add these to a .gitignore in your home directory.

Alternative: GNU Stow Intermediate

# Stow uses symlinks from an organised directory structure
sudo zypper install stow

# Create a dotfiles directory
mkdir -p ~/dotfiles/{bash,nvim,git}

# Move configs into the structure (mirroring home directory paths)
mv ~/.bashrc ~/dotfiles/bash/.bashrc
mv ~/.config/nvim ~/dotfiles/nvim/.config/nvim
mv ~/.gitconfig ~/dotfiles/git/.gitconfig

# Apply with stow (creates symlinks)
cd ~/dotfiles
stow bash nvim git

Self-Hosting on openSUSE

openSUSE makes an excellent home server platform. Enterprise-grade reliability with rolling updates and Snapper as a safety net.

Nextcloud — Your Own Cloud Intermediate

# Easiest method: Podman container
podman run -d --name nextcloud \
  -p 8080:80 \
  -v /srv/nextcloud/data:/var/www/html \
  nextcloud

# Access at http://your-ip:8080
# For production, add a proper database:
podman run -d --name nextcloud-db \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=nextcloud \
  -e MYSQL_USER=nextcloud \
  -e MYSQL_PASSWORD=secret \
  -v /srv/nextcloud/db:/var/lib/mysql \
  mariadb

Pi-hole / AdGuard Home — Network-Wide Ad Blocking Intermediate

# AdGuard Home (simpler than Pi-hole, single binary)
podman run -d --name adguard \
  --restart always \
  -p 53:53/tcp -p 53:53/udp \
  -p 3000:3000/tcp \
  -v /srv/adguard/work:/opt/adguardhome/work \
  -v /srv/adguard/conf:/opt/adguardhome/conf \
  adguard/adguardhome

# Setup wizard at http://your-ip:3000
# Then point your router's DNS to this machine's IP

Nginx Reverse Proxy Intermediate

# Install Nginx
sudo zypper install nginx

# Enable and start
sudo systemctl enable --now nginx

# Create a reverse proxy config
# /etc/nginx/vhosts.d/nextcloud.conf:
# server {
#     listen 80;
#     server_name cloud.yourdomain.com;
#
#     location / {
#         proxy_pass http://localhost:8080;
#         proxy_set_header Host $host;
#         proxy_set_header X-Real-IP $remote_addr;
#         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#         proxy_set_header X-Forwarded-Proto $scheme;
#     }
# }

sudo nginx -t && sudo systemctl reload nginx

Let's Encrypt SSL Certificates Intermediate

# Install certbot
sudo zypper install certbot python3-certbot-nginx

# Get a certificate
sudo certbot --nginx -d cloud.yourdomain.com

# Auto-renewal is set up automatically via systemd timer
systemctl list-timers | grep certbot

Cockpit — Web-Based Server Management Beginner

Cockpit is covered in the Software chapter as YaST's replacement, but it's also perfect for managing a home server remotely. Once enabled, access it from any device on your network at https://your-server-ip:9090. Install additional modules for extra functionality:

# Cockpit modules for server management
sudo zypper install cockpit cockpit-machines cockpit-podman cockpit-networkmanager cockpit-storaged
sudo systemctl enable --now cockpit.socket

# cockpit-machines: manage KVM virtual machines from the browser
# cockpit-podman: manage containers from the browser
# cockpit-storaged: disk/partition management

Tailscale / WireGuard VPN Intermediate

# Tailscale — zero-config mesh VPN
sudo zypper install tailscale
sudo systemctl enable --now tailscaled
sudo tailscale up

# WireGuard — manual but lightweight
sudo zypper install wireguard-tools
# Configure via /etc/wireguard/wg0.conf
# See wireguard.com/quickstart for config generation

Cron Jobs & systemd Timers

Automating tasks is one of the great joys of Linux. You've got two options: old-school cron and modern systemd timers.

Cron — The Classic Way Beginner

# Edit your user's crontab
crontab -e

# Format: minute hour day month weekday command
# Examples:

# Run a backup script every day at 3am
0 3 * * * /home/username/scripts/backup.sh

# Clean /tmp every Sunday at midnight
0 0 * * 0 rm -rf /tmp/myapp-cache/*

# Check disk space every 6 hours, log it
0 */6 * * * df -h >> /home/username/disk-usage.log

# Run something every 5 minutes
*/5 * * * * /home/username/scripts/check-something.sh
FieldValuesExample
Minute0–5930 = at the 30th minute
Hour0–2314 = 2pm
Day of Month1–311 = 1st of the month
Month1–12*/2 = every 2 months
Day of Week0–7 (0&7=Sun)1-5 = weekdays
# List your cron jobs
crontab -l

# Edit root's crontab (for system tasks)
sudo crontab -e

systemd Timers — The Modern Way Intermediate

systemd timers are more powerful than cron: they support logging, dependencies, randomised delays, and persistent scheduling (runs missed jobs after boot).

Example: Automated Daily Cleanup Script

Step 1: Create the service file:

# /etc/systemd/system/cleanup.service
[Unit]
Description=Daily cleanup of temp files

[Service]
Type=oneshot
ExecStart=/home/username/scripts/cleanup.sh
User=username

Step 2: Create the timer file:

# /etc/systemd/system/cleanup.timer
[Unit]
Description=Run cleanup daily at 4am

[Timer]
OnCalendar=*-*-* 04:00:00
Persistent=true
RandomizedDelaySec=600

[Install]
WantedBy=timers.target

Step 3: Enable it:

sudo systemctl daemon-reload
sudo systemctl enable --now cleanup.timer

# Check all active timers
systemctl list-timers --all

# Check if it ran
journalctl -u cleanup.service

Common Timer Patterns

ScheduleOnCalendar Value
Every hour*-*-* *:00:00 or hourly
Every day at noon*-*-* 12:00:00 or daily
Every Monday at 9amMon *-*-* 09:00:00
1st of every month*-*-01 00:00:00 or monthly
Every 15 minutes*-*-* *:00/15:00
Weekdays at 8amMon..Fri *-*-* 08:00:00
Cron vs systemd Timers — Which to Use?

Cron is simpler for quick one-liners. systemd timers are better for anything important — they integrate with the journal for logging, can depend on other services, and Persistent=true means missed runs (e.g. the machine was off) will execute on next boot. For anything you care about, use timers.

User-Level Timers (No Root Needed) Intermediate

# Create user service/timer in ~/.config/systemd/user/
mkdir -p ~/.config/systemd/user

# Same format as above, but enable with:
systemctl --user daemon-reload
systemctl --user enable --now my-task.timer

# List user timers
systemctl --user list-timers

Stay Connected & Get Help

Official Resources

📰 openSUSE News

news.opensuse.org — Official blog with monthly Tumbleweed summaries, Slowroll updates, and project announcements.

💬 Forums

forums.opensuse.org — The main community forum. Excellent for troubleshooting and discussion.

📖 Documentation

doc.opensuse.org — The official user documentation project covering Tumbleweed setup, Snapper, NVIDIA drivers, and more.

📧 Mailing Lists

Subscribe to the openSUSE Factory mailing list for Tumbleweed/Slowroll snapshot updates and developer discussions.

Community Channels

Useful Websites

Quick Reference Card

Keep these commands in your back pocket: sudo zypper dup (update), sudo snapper list (view snapshots), sudo snapper rollback (recover), inxi -Fxz (system info), journalctl -xe (debug), sestatus (security status).

You've reached the end. You now know more about openSUSE than most.
Now go break something — Snapper's got your back.