Introduction
Welcome! This guide will walk you through the essential steps and processes you need to get started.
Throughout this documentation, we’ll use “Klara Reinwasser” (kreinwasser@brita.net) as a placeholder for actual user names. Whenever you see this name in examples, screenshots, or instructions, simply substitute it with your own name or the relevant user’s name in your actual work.
Basic Setup
This guide walks you through setting up a development environment on Ubuntu with essential tools and utilities.
Operating System
Ubuntu
Download and install Ubuntu Desktop (version 25.10 or later recommended).
During installation:
- Name:
Klara Reinwasser - Username:
kreinwasser - Computer name: keep the default
Configure sudo
sudo should already be installed. Configure passwordless sudo for convenience:
sudo sh -c 'echo "kreinwasser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/kreinwasser'
System Update
Update all packages to the latest versions:
sudo apt-get update && sudo apt-get upgrade -y
Essential Build Tools
Install the core development tools required for building software:
sudo apt-get install -y \
build-essential \
cmake \
curl \
git \
git-lfs
Web Browser
Brave
A privacy-focused web browser built on Chromium. Official site
curl -fsS https://dl.brave.com/install.sh | sh
Terminal Enhancements
Nerd Fonts
Patched fonts with icons and glyphs for better terminal aesthetics. We recommend FiraCode Nerd Font.
Follow the
installation guide for Ubuntu
and select FiraCode Nerd Font.
Btop
A resource monitor that shows usage and stats for processor, memory, disks, network and processes. GitHub
Download the latest btop-x86_64-linux-musl.tbz from the releases page, then:
tar xvf btop-x86_64-linux-musl.tbz
cd btop
sudo make install
Programming Languages
Go
The Go programming language. Official site
Download the latest version for Linux (amd64) from the download page, then install:
# Replace version number with the latest available
sudo rm -rf /usr/local/go && \
sudo tar -C /usr/local -xzf go1.*.linux-amd64.tar.gz
echo 'export PATH="/usr/local/go/bin:${HOME}/go/bin:${PATH}"' >> ~/.bashrc
Rust
A language empowering everyone to build reliable and efficient software. Official site
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
After installation, reopen your terminal so cargo becomes available.
Shell Customization
starship
A minimal, fast, and customizable prompt for any shell. GitHub
cargo install --locked starship
echo 'eval "$(starship init bash)"' >> ~/.bashrc
atuin
Magical shell history with sync, search, and backup capabilities. GitHub
cargo install --locked atuin
curl https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o ~/.bash-preexec.sh
echo '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' >> ~/.bashrc
echo 'eval "$(atuin init bash)"' >> ~/.bashrc
Next Steps
After completing the basic setup, continue with:
- SSH Configuration - Set up SSH keys for secure authentication
- Development Tools - Install additional development tools
SSH Configuration
SSH (Secure Shell) allows secure authentication and communication with remote systems. This guide walks you through setting up SSH keys for authentication.
Generating SSH Keys
SSH keys provide a secure authentication method. We’ll use the modern Ed25519 algorithm for strong security and small key size.
Silent Key Generation
Generate SSH keys automatically without prompts. This will create or overwrite
~/.ssh/id_ed25519 (private key) and ~/.ssh/id_ed25519.pub (public key):
ssh-keygen -q -t ed25519 -N '' <<< $'\ny' >/dev/null 2>&1
Interactive Key Generation
Alternatively, generate keys interactively with prompts for passphrase and file location:
ssh-keygen -t ed25519
Verifying SSH Keys
Check if your private key exists:
test -f ~/.ssh/id_ed25519 && echo "Private key exists" || echo "Private key not found"
Check if your public key exists:
test -f ~/.ssh/id_ed25519.pub && echo "Public key exists" || echo "Public key not found"
Next Steps
After generating your SSH keys:
- Add your public key (
~/.ssh/id_ed25519.pub) to your GitHub account or other remote systems - Use your private key for secure authentication to remote servers
- Consider adding a passphrase to your SSH key for additional security
Recommended CLI Tools
The following modern CLI tools improve productivity and user experience. All are optional but highly recommended. They are installed via Cargo (Rust’s package manager).
bat
A cat clone with syntax highlighting and Git integration.
GitHub
cargo install --locked bat
fd
A simple, fast, and user-friendly alternative to find.
GitHub
cargo install --locked fd-find
zoxide
A smarter cd command that learns your habits.
GitHub
cargo install --locked zoxide
echo 'eval "$(zoxide init bash)"' >> ~/.bashrc
xh
A friendly and fast tool for sending HTTP requests, similar to HTTPie. GitHub
cargo install --locked xh
gitui
A blazing fast terminal UI for Git written in Rust. GitHub
cargo install --locked gitui
Azure Authentication
Azure CLI
The Azure Command Line Interface (CLI) provides command-line tools for managing Azure resources and services. Official site
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Dual Account Setup
BRITA uses a dual-account security model to protect resources and maintain proper access control. As a developer, you will have two separate accounts:
- Normal Account:
kreinwasser@brita.net- Use for daily communication, email, and Microsoft Teams. This account has standard user permissions. - Admin Account:
adm_kreinwasser@brita.net- Use for Azure CLI operations and infrastructure management. This account has extended permissions on Azure resources you need to work with. This account must be secured with MFA (Multi-Factor Authentication).
Daily Login Workflow
Follow this workflow at the start of each workday or after rebooting your machine:
1. Prepare Your Browser Sessions
Keep your normal browser session (using kreinwasser@brita.net) open for email,
Teams, and regular work. You’ll use this session to authenticate with the admin
account for Azure CLI.
2. Open a Private Browser Window
Open a private/incognito window in your web browser. This ensures clean session isolation from your normal account and prevents accidental cross-account operations.
3. Login with Admin Account
In the private browser window, navigate to the Azure portal or a login page and authenticate with your admin account:
- Username:
adm_kreinwasser@brita.net - Password: Your admin account password
- MFA: Complete the Multi-Factor Authentication challenge when prompted
Keep this private window open and ready.
4. Authenticate via Azure CLI
In your terminal, initiate the Azure login process:
az login
This command will automatically detect that interactive authentication is available and open a login page in your default (normal) browser.
5. Complete Authentication in Private Window
Since the login page opened in your normal browser, copy the URL from your
browser’s address bar and paste it into the address bar of your private browser
window (the one where you’re already logged in with
adm_kreinwasser@brita.net).
This allows the authentication to complete with your admin account credentials while keeping the session separate from your normal account. Your Azure CLI will now be authenticated with the admin account and ready to use.
Tip: If you find it easier, you can simply navigate to portal.azure.com directly in your private window and log in with your admin account.
6. You’re Ready to Work
Your terminal now has access to Azure resources through the admin account. You can proceed with infrastructure operations, deployments, and other Azure CLI commands.
Important Security Reminders
- Never log in with your admin account in your normal browser session - Always use a private/incognito window to keep accounts separated
- MFA is mandatory - Your admin account must have MFA enabled for security
- Don’t share credentials - Your admin account credentials should be known only to you and securely managed
- Re-authenticate as needed - If your Azure CLI session expires, repeat the login workflow above
Troubleshooting
If you encounter issues during login:
- Clear browser cache - In your private window, clear cookies and cache
- Check MFA device - Ensure your MFA device is available and working
- Verify account spelling - Double-check that you’re using
adm_kreinwasser@brita.net(with “adm_” prefix) - Restart the process - If problems persist, start the workflow from step 1
Session Duration
Azure CLI sessions typically remain valid for extended periods, but you may need to re-authenticate if:
- Your machine reboots
- You close your private browser window
- The session expires due to inactivity
- Azure security policies require re-authentication
When in doubt, simply repeat the login workflow above.
Development Tools
This guide covers additional development tools that complement the basic setup.
NVM (Node Version Manager)
A version manager for Node.js that allows you to install and switch between multiple Node.js versions. Official site
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
After installation, restart your terminal or run:
source ~/.bashrc
.NET SDK
The .NET SDK includes everything needed to build and run .NET applications. Official site
curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel LTS --install-dir /usr/share/dotnet
After installation, add the following to your ~/.bashrc:
export PATH="/usr/share/dotnet:${HOME}/.dotnet/tools:${PATH}"
Then restart your terminal or run:
source ~/.bashrc
JetBrains Toolbox
A manager for JetBrains IDEs that allows you to install, update, and manage multiple JetBrains products. Official site
-
Download the latest
.tar.gzfrom https://www.jetbrains.com/toolbox-app/download/ -
Extract the archive:
tar -xzf jetbrains-toolbox-*.tar.gz -
Run the application:
./jetbrains-toolbox-*/bin/jetbrains-toolbox
GitHub CLI and Code Editor
This guide covers the essential tools for version control and code editing.
GitHub CLI
A command-line interface for GitHub that lets you manage repositories, issues, pull requests, and other GitHub features directly from your terminal. Official site
(type -p wget >/dev/null || (sudo apt update && sudo apt install wget -y)) \
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
&& out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg \
&& cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& sudo mkdir -p -m 755 /etc/apt/sources.list.d \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y
GitHub Copilot CLI
An AI-powered coding assistant for your terminal that brings GitHub Copilot’s capabilities directly to the command line. Requires Node.js v22+ and an active Copilot subscription. Official site
npm install -g @github/copilot
Launch with:
copilot
Visual Studio Code
A lightweight but powerful source code editor with built-in support for debugging, syntax highlighting, intelligent code completion, and extensions. Official site
Install the editor first, then add recommended extensions for improved development experience:
code --install-extension "DavidAnson.vscode-markdownlint"
code --install-extension "esbenp.prettier-vscode"
code --install-extension "foxundermoon.shell-format"
code --install-extension "ms-azuretools.vscode-docker"
code --install-extension "ms-vscode-remote.remote-containers"
code --install-extension "redhat.vscode-xml"
code --install-extension "redhat.vscode-yaml"
code --install-extension "shardulm94.trailing-spaces"
code --install-extension "timonwong.shellcheck"
code --install-extension "zxh404.vscode-proto3"
Infrastructure Tools
This guide covers tools for infrastructure as code and cloud resource management.
OpenTofu
An open-source infrastructure as code tool for provisioning and managing cloud resources. It’s a community-driven fork of Terraform with enhanced features and flexibility. Official site
curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh
chmod +x install-opentofu.sh
./install-opentofu.sh --install-method deb
rm -f install-opentofu.sh