Setup checklist and guide for getting up and running quickly on a new Fedora Silverblue installation

Checklist

  • Download latest Fedora Silverblue and write to USB stick

  • Follow GUI installer, making space in partition tool if needed.

  • GUI apps: VS Code, Rider, Chrome, Spotify

  • CLI apps: nvim, gcc/make/etc, strace, lsof, patch, jq

  • Dev tools: nodejs, npm, yarn, cargo, dotnet, aws

  • Setup git (name, email)

  • Setup NVIM using nvim.appimage and restore VIM config dir from git

  • Install and configure VS Code with custom vim config

  • Install and configure Rider with custom vim config

Make Drive Space for Fedora Install

You probably already have Windows installed on your PC or laptop. This installation is likely taking up nearly the whole drive so you need to make space for Linux.

Good news: Recent versions of Windows allow you to easily resize the primary partition (C:) using a built-in utility.

Download Fedora Silverblue

Get installation media here: https://silverblue.fedoraproject.org/download

Write Silverblue Installer to USB Drive

Use the Fedora Media Writer or your favorite disk image writing tool.

Install Fedora Silverblue

  • Boot from the USB disk

  • Select automatic partitioning

  • Wait 10-20 minutes while installer does its thing

Firstboot Questions

Enable third party software repositories so you can use closed-source software like proprietary GPU drivers (nvidia) and Google Chrome.

Set the hostname

sudo hostnamectl set-hostname machinename

Install Silverblue Packages

Before doing anything else, go ahead and update all packages.

First, cancel any automatically running rpm-ostree tasks:

sudo rpm-ostree cancel

Then refresh package metadata:

sudo rpm-ostree refresh-md

Perform an atomic system upgrade:

sudo rpm-ostree upgrade

Install additional layered packages. NOTE: These are the packages that I need in my everyday work/life:

rpm-ostree install ccache chrpath diffstat docbook5-schemas docbook-dtds gcc-c++ java-1.8.0-openjdk libzip mesa-libGL-devel minicom openjade pandoc perl-bignum perl-Thread-Queue python2 python3-GitPython python3-jinja2 rpcgen rubygem-asciidoctor SDL-devel socat strace texinfo wireguard-tools xterm google-chrome pwgen autoconf automake binutils bison flex gdb glibc-devel libtool make byacc cscope ctags elfutils indent ltrace perf valgrind ElectricFence astyle cbmc check cmake coan cproto insight nasm pscan python3-scons remake scorep splint yasm zzuf picocom libusb1-devel libhid-devel openssl1.1

Finally reboot to use all new packages:

sudo systemctl reboot

Enable sshd

Optional: Enable SSH access to your machine

sudo systemctl enable sshd.service --now

Clone this repo

The new-machine-quick-setup-guide git repository contains this guide along with some useful scripts we will run:

cd ~/Code
git clone https://github.com/xtianbetz/new-machine-quick-setup-guide.git
cd new-machine-quick-setup-guide

Install Flatpaks for Chromium and Spotify

Run 'bin/setup-flatpak-apps.sh' script:

./bin/setup-flatpak-apps.sh

Git Config (~/.gitconfig)

Example git config file:

[user]
	email = your.name@company.com
	name = Your Name
[init]
	defaultBranch = main

Bashrc Customizations

All customizations are now stored in the bash/x.sh file

You also want git-prompt.sh which will give you a nice bash prompt.

The default bashrc/bash_profile on recent Fedora versions automatically searches for a .bashrc.d folder.

Just create a ~/.bashrc.d directory and copy both files there.

mkdir -p ~/.bashrc.d

Make sure to adjust any paths in x.sh for your desired tool versions.

Keyboard Shortcuts

Use gnome keyboard settings to add a custom mapping so Ctrl+Alt+T launches a new terminal

Install dotnet

Download the latest dotnet and extract in $HOME/Toolchains.

Prevent build related to openssl errors by modifying /etc/ssl/openssl.cnf and commenting the line as shown here:

#openssl_conf = openssl_init

To prevent errors related to libicu, you must set an environment variable so that dotnet knows to look for a specific libicu version. The 'bash/x.sh' file already includes the following:

export CLR_ICU_VERSION_OVERRIDE="72.1"

Install Node, Yarn

Download node and extract it in $HOME/Toolchains.

Use the following commands to configure 'npm' to install "global" packages into your home directory.

mkdir "${HOME}/.npm-packages"
npm config set prefix "${HOME}/.npm-packages"

Setup Neovim

Download nvim.appimage and put it in $HOME/bin.

Install nvim configs:

cd ~/.config
git clone git@github.com:xtianbetz/.vim.git nvim --recurse-submodules

Inside nvim you will need to install a few interesting things:

:CocInstall coc-tsserver coc-json coc-html coc-css coc-phpls coc-omnisharp

Install/Setup JetBrains Rider

Extract Rider tar.gz under ~/Toolchains

Install the vim extension.

Use ~/.ideavimrc for setup (see the ideavimrc in my vimrc repo)

Install a Desktop shortcut from the 'Tools' menu.

Install/Setup VS Code

Download VS Code to ~/Toolchains/VSCode-linux-x64

Add desktop entry ~/.local/share/applications/vscode.desktop:

[Desktop Entry]
Version=1.0
Type=Application
Name=Visual Studio Code
Icon=/var/home/x/Toolchains/VSCode-linux-x64/resources/app/resources/linux/code.png
Exec=/var/home/x/Toolchains/VSCode-linux-x64/bin/code
Comment=A cross-platform IDE for Everything
Categories=Development;IDE;
Terminal=false
StartupNotify=true

Launch 'Code' from GNOME launcher and immediately install the Vim and C# extensions.

TODO: link to settings.json for VIM vscode

Install AWS CLI

Use 'bin/install-aws-cli.sh'

Disable Intel Wifi Powersaving

create /etc/modprobe.d/iwlwifi.conf with following contents:

options iwlwifi beacon_timeout=128

Install Rust with ARM Target Support

Get rustup:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Install rust stable

rustup install stable

Install the target needed to build for 32-bit ARM Linux:

rustup target add armv7-unknown-linux-gnueabihf

Modify ~/.cargo/config so linker works (note: this assumes you the right binary in ~/Toolchains and in your PATH).

[target.armv7-unknown-linux-gnueabihf]
linker = "arm-none-linux-gnueabihf-gcc"

Add user to dialout group to allow use of serial ports

Let your user use serial ports like /dev/ttyUSB0

sudo su
grep -E '^dialout:' /usr/lib/group >> /etc/group
usermod -aG dialout yourusername

Toolbox Notes

The toolbox is a container you can use for install random stuff without using rpm-ostree and rebooting.

For example the following command will allow making this document within a toolbox:

toolbox enter
sudo dnf install fuse fuse-libs rubygem-asciidoctor make pandoc