Skip to main content
  1. Posts/

The Ultimate Zen Workstation - Part Two: Configuration

·1103 words·6 mins·
Technology Productivity
Joshua Blais
Joshua Blais
Table of Contents
Zen Workstation - This article is part of a series.
Part 2: This Article

In this second installation of my Ultimate Zen Workstation Series, we will start from a fresh installation of Fedora Workstation 40 and configure everything in an optimal way so as to get us up and running. I have also written a script to do all of this for you, so consider this article as a README for that program. As the script is updated, so too, will this post be.

Step One: Update

sudo nano /etc/dnf/dnf.conf
and add:

sudo dnf update

Optional step: On Laptop, install kmonad

Clone and put it somewhere your PATH enviroment variable points. In my case I like to put executables in $HOME/bin, so I add this line to my .profile file:

export PATH="\$HOME/bin:\$PATH" 

and then run the following commands:

sudo usermod -aG input $USER
sudo groupadd uinput
sudo usermod -aG uinput $USER

echo 'KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"' | sudo tee /etc/udev/rules.d/90-uinput.rules

# This seems to be needed because uinput isn't compiled as a loadable module these days.
# See
echo uinput | sudo tee /etc/modules-load.d/uinput.conf

Move to ~/.config/kmonad/config.kbd

and then in your terminal run:

kmonad .config/kmonad/config.kbd

Step Two: Update firmware and install software

Firmware Update:

sudo fwupdmgr get-devices 
sudo fwupdmgr refresh --force 
sudo fwupdmgr get-updates 
sudo fwupdmgr update

Install the RPM repos:

sudo dnf install$(rpm -E %fedora).noarch.rpm
sudo dnf install$(rpm -E %fedora).noarch.rpm

sudo dnf upgrade --refresh
sudo dnf -y groupupdate core
sudo dnf install -y rpmfusion-free-release-tainted
sudo dnf install -y rpmfusion-nonfree-release-tainted 
sudo dnf install -y dnf-plugins-core

Fix video encoding:

sudo dnf swap ffmpeg-free ffmpeg --allowerasing
sudo dnf install libdrm-devel mesa-libGL-devel vulkan-devel ffmpeg-libs

Install necessary software packages:

sudo dnf install neovim thunderbird mpv mpd ncmpcpp mpc gnome-tweaks gnome-extensions-app lm_sensors obs-studio papirus-icon-theme unzip p7zip p7zip-plugins unrar gimp qbittorrent hyprland dunst rofi-wayland zoxide ripgrep zsh fzf lxappearance thefuck waybar rustc cargo pass xclip yarnpkg lua-devel newsboat isync msmtp ca-certificates gettext cronie go aerc gammastep pandoc go-task scdoc neofetch thunar swaybg tumbler-extras rclone wtype borgbackup bat hugo

Install Programs via flathub:

flatpak install flathub org.signal.Signal
flatpak install flathub org.shotcut.Shotcut
flatpak install flathub md.obsidian.Obsidian

Step Three: Basic Configurations

Get passwords and add in your gpg key

gpg --import secret.gpg

Setup git

git config --global 
git config --global "Your Name"

git config --global credential.helper 'cache --timeout=3600000'

Update Hostname

sudo hostnamectl set-hostname "New_Custom_Name"

ZSH Setup

Change .bashrc to:

exec zsh

Install Nerdfont

sudo dnf copr enable yorickpeterse/nerd-sourcecodepro-fonts
sudo dnf install nerd-sourcecodepro-fonts 

Install ohmyzsh and plugins:

sh -c "$(curl -fsSL"
git clone ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone --depth=1 ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

curl -sS | sh

Install tmuxp

pip install --user tmuxp

Lazygit Setup

sudo dnf copr enable atim/lazygit -y
sudo dnf install lazygit

Lazydocker Setup

curl | bash

Neovim Setup

Install NVChad:

git clone ~/.config/nvim && nvim
Run :MasonInstallAll

# take in custom repo:
git clone .config/nvim

Step Four: Hyprland Setup

Install necessary programs:

sudo dnf install wayland-devel wayland-protocols-devel hyprlang-devel pango-devel cairo-devel file-devel libglvnd-devel libglvnd-core-devel libjpeg-turbo-devel libwebp-devel gcc-c++ cmake

Clone github repo:

git clone <> .config/hypr

Install Tessen for password quick copy-paste:

git clone <> cd tessen sudo make

Install hyprutils

git clone
cd hyprutils

# then
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
sudo cmake --install build

Install Hypridle for screen off and locking

git clone
sudo dnf install sdbus-cpp-devel 
cmake –no-warn-unused-cli -DCMAKE<sub>BUILDTYPE</sub>:STRING=Release -S . -B ./build 
cmake –build ./build –config Release –target hypridle -j\`nproc 2\>/dev/null \|\| getconf NPROCESSORS<sub>CONF</sub>\`

sudo cmake –install build

Install Hyprlock for lock screen

sudo dnf install pam-devel libdrm-devel libgbm-devel libxkbcommon-devel
git clone 
cmake –no-warn-unused-cli -DCMAKE<sub>BUILDTYPE</sub>:STRING=Release -S . -B ./build
cmake –build ./build –config Release –target hyprlock -j\`nproc 2\>/dev/null \|\| getconf NPROCESSORS<sub>CONF</sub>\`

sudo cmake –install build

Integrate Hyprpicker ( for colorpicking

git clone
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
cmake --build ./build --config Release --target hyprpicker -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
sudo cmake --install ./build

Adding in Nwg-dock:

sudo dnf install cairo-gobject-devel gtk-layer-shell-devel gtk3-devel

git clone
make get
make build
sudo make install

File Manager setup - Yazi

I have always loved the terminal file managers, and yazi is one of the best.

To set it up, build it from source doing this:

git clone
cd yazi
cargo build --release

and then

sudo cp target/release/yazi /usr/local/bin

add this to .zshrc for cd when quitting:

function yz() {
	local tmp="$(mktemp -t "yazi-cwd.XXXXXX")"
	yazi "$@" --cwd-file="$tmp"
	if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
		cd -- "$cwd"
	rm -f -- "$tmp"

GNOME STUFF (optional, I use gnome as a fallback in the case I have any hyprland issues):


  • Center new windows
  • Add maximize and minimize buttons
  • resize with secondary key
  • focus follows mouse


  • Impatience
  • Just Perfection
  • Vitals
  • OpenWeather refined
  • dash to dock
  • transparent title bar

Keyboard Shortcuts

  • search: alt+space
  • Home folder: alt+f
  • Email: alt+m
  • web: alt+w
  • Swap window: alt+esc
  • Close window: alt+q
  • workspace right/left: alt+shift+right/left


  • alacritty: alt+enter

Installing Docker

sudo dnf install docker docker-compose
sudo systemctl start docker
sudo docker run hello-world
sudo systemctl enable docker
sudo groupadd docker && sudo gpasswd -a ${USER} docker && sudo systemctl restart docker

Add in buildx plugin

Download latest release from and move it to ~/.docker/cli-plugins/docker-buildx chmod -x docker-buildx run docker buildx install to set it as the default builder

Add plugins to Firefox

And theme:

git clone && cd firefox-nordic-theme

Adding themes

Download the themes you like and add them to ~/.themes Icons can be added to /usr/share/icons/

I use:
Nordic GTK Theme
Zafiro Nord Dark Black Icons
Nordic Cursors

Get fallback terminal into thunar:

  1. Open Thunar, and access Custom actions in the Edit tab.
  2. Click on Open Terminal here action and add:
kitty --working-directory %f

Final Step: Bring in your dotfile configurations and adjust to your heart’s content

You can get some inspiration from my dotfiles here. In addition to this, I have various scripts, bookmarks, newsboat/rss feeds, and a few other minor things I bring in to get my computer completely customized to my liking when I fresh install.

Thus concludes part two of the Zen Workstation series. In part three, we will discuss how I use the programs to get things done on a daily basis, and how you can automate tasks with scripts and macros to make your digital life far more simple and stress-free.

Zen Workstation - This article is part of a series.
Part 2: This Article