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: #
- Open Thunar, and access Custom actions in the Edit tab.
- 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.