
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.confand add:max_parallel_downloads=10fastestmirror=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 $USERsudo groupadd uinputsudo 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-265300511echo 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-devicessudo fwupdmgr refresh --forcesudo fwupdmgr get-updatessudo fwupdmgr update
Install the RPM repos:
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpmsudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf upgrade --refreshsudo dnf -y groupupdate coresudo dnf install -y rpmfusion-free-release-taintedsudo dnf install -y rpmfusion-nonfree-release-taintedsudo dnf install -y dnf-plugins-core
Fix video encoding:
sudo dnf swap ffmpeg-free ffmpeg --allowerasingsudo 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.Signalflatpak install flathub org.shotcut.Shotcutflatpak 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.comgit 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-fontssudo 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-autosuggestionsgit clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlightinggit 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 -ysudo 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 && nvimRun :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 makeinstall
Install hyprutils#
git clone https://github.com/hyprwm/hyprutilscd hyprutils
# thencmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./buildcmake --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/hypridlesudo dnf install sdbus-cpp-develcmake –no-warn-unused-cli -DCMAKE<sub>BUILDTYPE</sub>:STRING=Release -S . -B ./buildcmake –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-develgit clone https://github.com/hyprwm/hyprlockcmake –no-warn-unused-cli -DCMAKE<sub>BUILDTYPE</sub>:STRING=Release -S . -B ./buildcmake –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/hyprpickercmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./buildcmake --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-hyprlandmake getmake buildsudo 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.gitcd yazicargo 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-composesudo systemctl start dockersudo docker run hello-worldsudo systemctl enable dockersudo 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.