Reviewing my tweaks for Fedora

I have been using Fedora for a few years now and installed it countless times because it bothers me to have a messy system. I stay on Fedora because it has one of the best out of the box experience, at least for me. But still, there are some things that I need to tweak on every new installation so I have a script to do most of those things and after over four years it got pretty good in doing it. So here are the tweaks that are relevant to Fedora (some configurations like Vim and Tmux deserve a separate post).

Screenshot of my terminal with Fish shell

Enabling additional repositories

Fedora is a great free distribution that is almost completely free (except for some firmware) but sometimes that freedom is too limiting in software selection. To fix this, what I do (and I think most Fedora users do) is enable one or more general third party repositories to expand the software selection.

The ones I enable are RPMFusion (both the free and non-free version) and Flathub. You might ask why RPMFusion have a free version instead of contributing to Fedora, it’s because Fedora can’t add certain free software to their repository because of software patents.

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo > /dev/null
sudo dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm > /dev/null

Installing additional codecs

Now that we have RPMFusion installed, we can use it to get more (and sometimes better) codecs that Fedora didn’t packaged because of patents. I have found two packages that I need to not have any problems with codecs, one is the group package multimedia and the other is pulseaudio-module-bluetooth-freeworld if you use Bluetooth.

sudo dnf groupinstall -y multimedia > /dev/null
sudo dnf install pulseaudio-module-bluetooth-freeworld --allowerasing
pulseaudio -k # restarting pulseaudio

Changing the default shell

After more than a year with Zsh, I decided to go with something simpler and found Fish that is almost identical in terms of functionality but required less configuration. The default prompt was good enough and plugins like auto suggestion and syntax highlighting were built-in in Fish. The only thing that I didn’t get out of the box was my git aliases from oh-my-zsh that I got used to, so I had to copy a modified version that worked in Fish.

Fish is not compatible with POSIX Shell or Bash but I have yet to have a problem with it. I switched to Fish only a couple of months ago so it might bite me later so be warned.

ln -s $(pwd)/Fish ~/.config/fish > /dev/null
sudo dnf install -y fish util-linux-user > /dev/null
chsh -s $(which fish) > /dev/null

If you want to see how I configured Fish itself, you can browse Fish configuration directory in my dotfiles repository.

Speeding up the package manager

DNF is slow, whenever I used a package manager on another distro I was reminded how slow DNF is. The problem is that almost always, DNF will reload the cache which can take a while. I can live with a packages list from yesterday so I made a job to update the cache once a day and told DNF to use the cache for a day. I also increased the parallel downloads count which gave it another boost.

sudo bash -c 'echo "max_parallel_downloads=10" >> /etc/dnf/dnf.conf'
sudo bash -c 'echo "metadata_expire=86400" >> /etc/dnf/dnf.conf'
sudo ln -s $(pwd)/DNF/dnf-check-update.service /etc/systemd/system/dnf-check-update.service > /dev/null
sudo ln -s $(pwd)/DNF/dnf-check-update.timer /etc/systemd/system/dnf-check-update.timer > /dev/null
sudo systemctl enable dnf-check-update.timer
sudo systemctl start dnf-check-update.timer

You can see the unit files in my repository.

Styling the terminal

The default style of the terminal is okay but I wanted the terminal to have a bit more space to breath and a colorscheme that match my Vim colorscheme so. I added a padding to the terminal by adding a custom css file to GTK+, the element is called vte-terminal. The colorscheme setting is sadly not automated yet and I still copy the colors by hand but it should be doable to create a new profile and set the colors in dconf.

ln -s $(pwd)/GTK3/gtk.css ~/.config/gtk-3.0/gtk.css > /dev/null

Integration with my phone

I try to go all wireless, I’m not there yet but another software that helps me a lot with that is KDE Connect, or more correctly GSConnect which is a GNOME extension that reimplement the KDE Connect protocol. It let me pass files between my devices without a cable and a do a lot of other cool stuff.

sudo dnf install gnome-shell-extensions-gsconnect nautilus-gsconnect

Installing and removing additional programs

I won’t explain every program that I use because it would be to long, maybe for another post. But in general I have a few programs that I remove (GNOME Photos, Rhythmbox, GNOME Clocks and LibreOffice) and a lot more that I install (Neovim, Git, Tmux, Fzf, The Silver Searcher, jq, youtube-dl, FFmpeg, Lollypop, Fragments/Transmission, GNOME Tweaks, Password Safe, Polari and Celluloid).

You might notice that I have a lot of desktop applications, I personally try to use a graphical application unless there is a reason to use a textual interface like when editing text files.