Skip to content

Instantly share code, notes, and snippets.

@lunks
Last active May 16, 2026 20:03
Show Gist options
  • Select an option

  • Save lunks/1774a5a3a1fdd6ef975363608cc8dcbd to your computer and use it in GitHub Desktop.

Select an option

Save lunks/1774a5a3a1fdd6ef975363608cc8dcbd to your computer and use it in GitHub Desktop.
Le Wagon Setup for Bazzite

Setup instructions for Bazzite

You will find below the instructions to set up your computer for Le Wagon AI Software Development course on Bazzite.

Please read them carefully and execute all commands in the following order.

Bazzite is not Ubuntu. It is a Fedora Atomic / Universal Blue image, so do not replace apt commands with host dnf commands. On Bazzite, prefer:

  • Bazzite Portal and ujust for Bazzite-maintained setup tasks.
  • Bazaar / Flatpak for graphical applications.
  • Homebrew for command-line tools.
  • Distrobox for Linux development environments that need a traditional package manager.
  • rpm-ostree only as a last resort for system-level packages.

GitHub account

Have you signed up to GitHub? If not, do it right away.

Please upload a picture and put your name correctly on your GitHub account. This is important as we'll use an internal dashboard with your avatar. Please do this now, before you continue with this guide.

Please enable Two-Factor Authentication (2FA). This is important for security and is required for many GitHub workflows.

Bazzite update

First update your Bazzite installation:

ujust update

Reboot if the update asks you to:

systemctl reboot

Visual Studio Code

Install VS Code through the Universal Blue Homebrew cask:

eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
brew tap ublue-os/tap
brew install --cask visual-studio-code-linux

Now launch VS Code from the terminal:

code

If a VS Code window opens, you can continue. Otherwise, ask a teacher for help.

VS Code Extensions

Install the course extensions:

code --install-extension ms-vscode.sublime-keybindings
code --install-extension emmanuelbeziat.vscode-great-icons
code --install-extension github.github-vscode-theme
code --install-extension MS-vsliveshare.vsliveshare
code --install-extension shopify.ruby-lsp
code --install-extension dbaeumer.vscode-eslint
code --install-extension Rubymaniac.vscode-paste-and-indent
code --install-extension alexcvzz.vscode-sqlite
code --install-extension anteprimorac.html-end-tag-labels
code --install-extension rayhanw.erb-helpers

VS Code AI Features

VS Code includes powerful AI features, which are a great tool once you already know how to code.

For the start of the bootcamp, disable these features:

  1. In VS Code, open the Command Palette with Ctrl + Shift + P.
  2. Start typing aifeatures until you see "Chat: Learn How to Hide AI features". Click on it.
  3. Tick the option "Disable and hide built-in AI features ...".

Live Share configuration

Visual Studio Live Share is a VS Code extension which allows you to share your code editor for debugging and pair-programming.

Launch VS Code:

code

Click the Live Share icon in the bottom-left area, click "Share", and sign in with GitHub.

Locale

Check your locale:

localectl status

If LANG is not en_US.UTF-8, set it with:

sudo localectl set-locale LANG=en_US.UTF-8

Reset your terminal after changing the locale.

Command line tools

Homebrew is the preferred package manager for command-line tools on Bazzite. Enable it in your current terminal:

eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

Install the useful command-line tools from the Ubuntu setup:

brew update
brew install curl git imagemagick jq unzip vim tree ncdu htop tig gh rbenv ruby-build sqlite pkgconf libpq postgresql@16 gcc make zsh

Expose Homebrew's compiler and GNU make for Ruby builds and native gems:

mkdir -p ~/.local/bin
GCC_MAJOR="$(brew list --versions gcc | awk '{ split($2, version, "."); print version[1] }')"
ln -sf "$(brew --prefix gcc)/bin/gcc-$GCC_MAJOR" ~/.local/bin/gcc
ln -sf "$(brew --prefix gcc)/bin/g++-$GCC_MAJOR" ~/.local/bin/g++
export PATH="$HOME/.local/bin:$(brew --prefix make)/libexec/gnubin:$PATH"

Bazzite does not ship zsh in the base image and does not provide the chsh command, so the Ubuntu instructions do not apply. zsh was installed with Homebrew in the previous step. Register that zsh as a valid login shell and set it as your default with usermod (Bazzite does ship usermod):

ZSH_PATH="$(brew --prefix)/bin/zsh"
grep -qxF "$ZSH_PATH" /etc/shells || echo "$ZSH_PATH" | sudo tee -a /etc/shells
sudo usermod -s "$ZSH_PATH" "$USER"

Log out and log back in, then verify:

echo $SHELL

You should see a path ending in zsh.

Oh-my-zsh

Install Oh My Zsh:

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

If asked "Do you want to change your default shell to zsh?", press Y.

GitHub CLI

The gh command was installed with Homebrew. Check it:

gh --version

Login to GitHub with SSH:

Do not edit the user:email text in this command.

gh auth login -s 'user:email' -w --git-protocol ssh

When gh asks questions:

  • For "Generate a new SSH key to add to your GitHub account?", press Enter.
  • For "Enter a passphrase for your new SSH key (Optional)", most people should press Enter to skip.
  • For "Title for your SSH key", press Enter.

Check that you are authenticated:

gh auth status

Dotfiles

Set a variable for your GitHub username:

export GITHUB_USERNAME=`gh api user | jq -r '.login'`
echo $GITHUB_USERNAME

Fork and clone the Le Wagon dotfiles:

mkdir -p ~/code/$GITHUB_USERNAME && cd $_
gh repo fork lewagon/dotfiles --clone

Run the dotfiles installer:

cd ~/code/$GITHUB_USERNAME/dotfiles
mkdir -p ~/.config/Code/User
zsh install.sh

The dotfiles installer replaces your shell configuration with the Le Wagon defaults. Add the Bazzite/Homebrew paths back to your new .zshrc before running the git setup, so the change is committed to your dotfiles fork:

grep -q '/home/linuxbrew/.linuxbrew/bin/brew shellenv' ~/.zshrc || cat <<'EOF' >> ~/.zshrc

# Bazzite / Homebrew paths
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
export PATH="$HOME/.local/bin:$(brew --prefix make)/libexec/gnubin:$PATH"
EOF

Reset your terminal:

exec zsh

Check the emails registered with your GitHub account:

gh api user/emails | jq -r '.[].email'

Run the git installer:

cd ~/code/$GITHUB_USERNAME/dotfiles && zsh git_setup.sh

Use one of the emails listed by the previous command.

Reset your terminal:

exec zsh

Disable SSH passphrase prompt

If you created your SSH key with a passphrase, add the ssh-agent plugin to Oh My Zsh.

Open your .zshrc file:

code ~/.zshrc

Find the line starting with plugins= and add ssh-agent to the plugin list. Save the file, then reset the terminal:

exec zsh

rbenv

Clean up any previous Ruby version manager:

rvm implode && rm -rf ~/.rvm
# If you got "zsh: command not found: rvm", carry on.
rm -rf ~/.rbenv

Configure rbenv in your shell:

grep -q 'rbenv init' ~/.zshrc || echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc
exec zsh

Ruby

Install Ruby:

rbenv install 3.3.5

Set it as the default Ruby:

rbenv global 3.3.5

Reset your terminal and check your Ruby version:

exec zsh
ruby -v

You should see something starting with ruby 3.3.5.

Update bundler:

gem update bundler

Install the course gems:

gem install colored faker http pry-byebug rake rails:8.1.1 rest-client rspec rubocop-performance sqlite3:2.8.1 activerecord:8.1.1 ruby-lsp

Never install gems with sudo gem install.

Node.js

Install nvm:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
exec zsh

Check nvm:

nvm -v

Install Node.js:

nvm install 20.17.0

Check Node.js:

node -v

If you see v20.17.0, clear the cache:

nvm cache clear

yarn

Install Yarn with Corepack:

corepack enable
yarn set version stable

If you see an error, run:

npm install -g corepack
corepack enable
yarn set version stable

Reset your terminal:

exec zsh

Check Yarn:

yarn -v

SQLite

SQLite was installed with Homebrew. Check it:

sqlite3 -version

PostgreSQL

Start PostgreSQL with Homebrew:

brew services start postgresql@16

Add PostgreSQL command-line tools to your shell:

grep -q 'postgresql@16' ~/.zshrc || echo 'export PATH="$(brew --prefix postgresql@16)/bin:$PATH"' >> ~/.zshrc
exec zsh

Check PostgreSQL:

psql --version

Create your default local database if it does not already exist:

createdb "$USER" || true

Check-up

Run the Le Wagon setup check:

exec zsh
curl -Ls https://raw.githubusercontent.com/lewagon/setup/master/check.rb > _.rb && ruby _.rb && rm _.rb || rm _.rb

This checker expects zsh, Ruby 3.3.5, Git 2.0 or newer, GitHub SSH authentication, VS Code as the git editor, and the course Ruby gems. It does not check for Ubuntu specifically.

If you get a green "Awesome! Your computer is now ready!", then you're good.

Kitt

You should have received an email from Le Wagon inviting you to sign up on Kitt.

When submitting your onboarding form on Kitt, you should have received two additional invitations:

  • One from Slack, inviting you to the Le Wagon Alumni Slack community.
  • One from GitHub, inviting you to the lewagon team.

Accept both invitations. If you have not received them, contact your teaching team.

Slack

Install Slack from Flathub:

flatpak install -y flathub com.slack.Slack

Launch Slack from your applications menu and sign in to the lewagon-alumni organization.

Make sure you upload a profile picture.

To test your camera and microphone:

  1. Open Slack.
  2. Click your profile picture in the top right.
  3. Select Preferences.
  4. Click Audio & video.
  5. Under Troubleshooting, click Run an audio, video and screensharing test.

Bazzite settings

Video codecs

The Ubuntu setup installs H264 codecs manually. Bazzite already ships multimedia codec support, so there is no equivalent command to run here.

Useful terminal tools

The terminal tools from the Ubuntu setup were installed earlier with Homebrew:

tree --version
ncdu --version
htop --version
tig --version

Inotify limits

The Ubuntu setup manually raises the inotify watch limit. Bazzite already ships this setting. You can verify it with:

sysctl fs.inotify.max_user_watches

You should see fs.inotify.max_user_watches = 524288.

Pin apps to your dock

Pin these applications to your dock:

  • Your terminal
  • Your file explorer
  • VS Code
  • Your Internet browser
  • Slack

Optional: Ubuntu Distrobox for compatibility

If a Linux tool expects Ubuntu specifically, create an Ubuntu Distrobox instead of changing the Bazzite host:

distrobox create --name ubuntu --image ghcr.io/ublue-os/ubuntu-toolbox:latest --yes

Enter it with:

distrobox enter ubuntu

Inside that container, apt is valid. On the Bazzite host, keep using ujust, Flatpak, Homebrew, Distrobox, and rpm-ostree.

References checked

Setup completed

Your computer is now set up for Le Wagon AI Software Development course on Bazzite.

Changelog

WIP — verification on a real Bazzite VM (in progress)

Verified end-to-end on a fresh Bazzite 44.20260515.0 (Kinoite/KDE) install (QEMU/Proxmox VM, installed from bazzite-stable-live-amd64.iso). Changes applied from confirmed reproductions:

  • zsh added to the Homebrew install line. Bazzite ships neither zsh nor the chsh command in the base image, so the original flow (no zsh install + chsh -s /usr/bin/zsh) broke every later step (Oh My Zsh, dotfiles, exec zsh, rbenv init - zsh, check.rb).
  • Replaced chsh -s /usr/bin/zsh with a Bazzite-correct default-shell change: add the Homebrew zsh to /etc/shells and switch with sudo usermod -s (usermod is present on Bazzite; chsh is not). Confirmed working.
  • nvm installer no longer piped to zsh (| zsh| bash); the old command failed because zsh was not yet available.
  • Inotify check now uses sysctl fs.inotify.max_user_watches instead of cat-ing a fixed sysctl filename (the path/filename is not stable; the value 524288 is correct).

Confirmed working as written (no change needed): ujust update, Homebrew bootstrap + shellenv, brew tap ublue-os/tap + visual-studio-code-linux cask, the full brew install formula list, the gcc/g++ symlink + PATH trick, rbenv + Ruby 3.3.5 source build, gh, brew services start postgresql@16 (+ createdb), nvm/Node 20.17.0, Corepack/Yarn, and the Slack Flatpak (com.slack.Slack is installable despite Bazzite's filtered Flathub).

Still verifying: course gem install line and check.rb.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment