An opinionated Fedora niri + dms workstation installer.
Tophat transforms a Fedora Minimal installation into a complete scrollable-tiling workstation using niri and DankMaterialShell. Its staged installation flow is inspired by Omarchy.
Note
This is a evolutioning project. So make sure you read the instructions below.
- Fedora Minimal Install with only Core packages.
- Can be done with Fedora Everything Network Install ISO and only selecting Fedora Custom Operating System in software selection.
- Another option is using the example kickstart file in the root of the repo.
- Internet connection
- Non-root user account created with
sudoprivileges
Warning
Only intended to be used with a Fedora Minimal install since it installs/configures dms greeter as the system greeter and will replace any greeter or display manager installed.
- niri
- DankMaterialShell (dms)
- dms Greeter through greetd
- PipeWire audio stack
- Enabled the repo's
- RPM Fusion free/nonfree repositories
- Official Brave Browser repository
- COPR's for niri, dms, and Ghostty
- Applications of your choice
- Intel Wi-Fi firmware if Intel Wi-Fi hardware is detected
- Configures niri and dms systemd service
- Configures greetd PAM hooks so GNOME Keyring unlocks/starts on login
From the project root:
sudo ./install.shVerbose mode:
sudo ./install.sh --verboseDry run:
sudo ./install.sh --dry-runForce re-run stages even if state markers exist:
sudo ./install.sh --forceRun selected stages only:
sudo ./install.sh --select repos,packaging,config --verboseAvailable stages:
preflight, repos, packaging, config, services, extras, finalize
Application installs are controlled by:
packages/applications.packages
A template is provided:
packages/applications.packages.template
To install additional applications:
cp packages/applications.packages.template packages/applications.packages
$EDITOR packages/applications.packages
sudo ./install.sh --select packaging --force --verbosePackage list format:
- One package per line
- Blank lines are ignored
#starts a comment
These extras are disabled unless their local opt-in file exists. Copy only the templates for features you want:
cp packages/flatpaks.packages.template packages/flatpaks.packages
cp packages/homebrew.packages.template packages/homebrew.packages
cp packages/distrobox.enable.template packages/distrobox.enableEdit the Flatpak and Homebrew lists, then run:
sudo ./install.sh --select extras --force --verbose- Flatpaks and Flathub are configured for the target user, not system-wide.
- Homebrew runs as the target user. Enabling it trusts Homebrew's official mutable installer.
- Distrobox uses Fedora's rootless Podman backend; containers are not created automatically.
Note: Removing an entry does not uninstall software automatically.
Log file:
/var/log/tophat.log
State directory:
/var/lib/tophat
Stage completion markers are written there so stages can be skipped on later
runs unless --force is used.
install.sh Main installer
lib/helpers/ Logging, checks, package helpers
lib/preflight/ Environment, hardware, and update checks
lib/repos/ RPM Fusion and COPR setup
lib/packaging/ Desktop, niri, DMS, and app packages
lib/config/ User-level DMS/niri configuration
lib/services/ System service setup, including DMS Greeter
lib/extras/ Optional Flatpak, Distrobox, and Homebrew setup
lib/finalize/ Cleanup and completion marker
packages/ Package list files, including conditional Intel Wi-Fi firmware
A reboot is required for everything to work.
After the reboot, greetd will start DMS Greeter and allow you to log into the configured niri + DMS desktop.
Run the commands dms setup and dms greeter sync to complete the dms setup.