Skip to main content
  1. Posts/

The Ultimate Zen Workstation - Part Two: Configuration

·1103 words·6 mins·
Technology Productivity
Joshua Blais
Author
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:
max_parallel_downloads=10
fastestmirror=true

sudo dnf update

Optional step: On Laptop, install kmonad
#

Clone https://github.com/kmonad/kmonad/releases 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 https://github.com/chrippa/ds4drv/issues/93#issuecomment-265300511
echo uinput | sudo tee /etc/modules-load.d/uinput.conf

Move https://github.com/jblais493/Kmonad-thinkpad 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 https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(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 user.email email@email.com 
git config --global user.name "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 https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

curl -sS https://starship.rs/install.sh | sh

Install tmuxp
#

pip install --user tmuxp

Lazygit Setup
#

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

Lazydocker Setup
#

curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash

Neovim Setup
#

Install NVChad:
#

git clone https://github.com/NvChad/starter ~/.config/nvim && nvim
Run :MasonInstallAll

# take in custom repo:
git clone https://github.com/jblais493/nvim .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 <https://github.com/jblais493/hypr> .config/hypr

Install Tessen for password quick copy-paste:
#

git clone <https://git.sr.ht/~ayushnix/tessen> cd tessen sudo make
install

Install hyprutils
#

git clone https://github.com/hyprwm/hyprutils
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 https://github.com/hyprwm/hypridle
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 https://github.com/hyprwm/hyprlock 
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 (https://github.com/hyprwm/hyprpicker) for colorpicking
#

git clone https://github.com/hyprwm/hyprpicker
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 https://github.com/nwg-piotr/nwg-dock-hyprland
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 https://github.com/sxyazi/yazi.git
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"
	fi
	rm -f -- "$tmp"
}

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

Tweaks:
#

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

Extensions:
#

  • 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

Custom:
#

  • 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 https://github.com/docker/buildx/releases/tag/v0.14.1 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 https://github.com/EliverLara/firefox-nordic-theme && cd firefox-nordic-theme
./scripts/install.sh

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