- 00-system-prep.sh: bootstrap sudo when run as root; on Debian enable contrib/non-free-firmware (SKIP_NONFREE to opt out) + install needrestart - scripts/verify-debian.sh: non-destructive post-install sanity checker (exit 0/1) covering OS, tools, Debian renames, upstream tooling, .NET/Podman/Postgres, groups, flatpak, dotfile symlinks - 01-package-install.sh: auto-detect current Kubernetes minor from upstream (fallback v1.36, override K8S_MINOR) instead of stale v1.32 pin - fix shellcheck findings (SC2155, SC2207, SC2088); all scripts clean at warning severity - docs: fold decisions/status into plan; README lists new tools
4.9 KiB
Fresh Install
This is a collection of scripts and dotfiles I use when setting up a fresh Linux installation.
Quick Start
Run the main setup script to install software, configure development tools, and symlink dotfiles:
./main-setup.sh
The script will automatically detect your Linux distribution (Debian 13 "trixie" is the primary target; Ubuntu and Fedora also work) and use the appropriate package manager (apt or dnf).
What Gets Installed
Core Packages (distro packages)
- Development tools:
git,curl,wget,ripgrep,fd-find,bat,eza - System utilities:
btop,zsh,tmux,fzf,zoxide,flatpak - Virtualization (KVM):
virt-manager+ libvirt/QEMU stack - Python:
python3,python3-pip - Networking:
nmap,mtr,tcpdump,socat,whois,iperf3,traceroute,bind9-dnsutils - HTTP:
httpie - DevOps helpers:
ansible,direnv,jq,tldr,unzip
Upstream Tooling (installed by 01)
gh (GitHub CLI), terraform, kubectl, k9s and minikube are not packaged in Debian, so 01-package-install.sh adds the official vendor apt repositories (GitHub CLI, HashiCorp, pkgs.k8s.io) and installs k9s/minikube from upstream binaries. On Fedora these are a best-effort dnf install (usually COPR/manual).
Development Environment (02)
- Neovim (latest from GitHub, installed to
/opt/nvim) - Hack Nerd Font for terminals
- Go toolchain (
/usr/local/go) - Rust toolchain via rustup
- Oh-My-Posh prompt (
~/.local/bin) - Helm, kubectx/kubens, stern, dive, trivy, AWS CLI v2
.NET / Backend Services (03, optional)
Distro-agnostic .NET development environment:
- .NET SDK via the official
dotnet-install.sh(no vendor repository needed) - PostgreSQL server and tools
- Podman +
podman-compose+podman-docker(Docker-CLI-compatible containers) - VS Code is installed as a Flatpak (
com.visualstudio.code)
Flatpak Applications
- Bolt, Bitwarden, Discord, Teams for Linux, Flatseal
- Steam, ProtonUp-Qt (pupgui2), VLC
- Visual Studio Code, Podman Desktop
- Signal, Thunderbird
Modular Architecture
The setup is broken down into focused scripts:
00-system-prep.sh- System updates,sudobootstrap, Debiancontrib/non-free-firmware+needrestart, Flathub setup01-package-install.sh- Core packages, upstream tooling, and Flatpak apps02-dev-tools-setup.sh- Development tools (Neovim, Go, Rust, Oh-My-Posh, Helm, kubectx, stern, dive, trivy, AWS CLI)03-dotnet-setup.sh- .NET SDK + PostgreSQL + Podman (distro-agnostic)04-config-symlinks.sh- Dotfile symlinkingverify-debian.sh- Post-install sanity checker (run manually, no root needed)
You can run individual scripts if you only need specific components.
Dotfiles
The following configuration files will be symlinked to your home directory:
.vimrc&.vim/- Vim/Neovim configuration.zshrc&.zsh/- Zsh shell configuration.gitconfig- Git configuration (edit with your credentials).gitignore- Global Git ignore patterns.agignore- Silver Searcher ignore patterns.aliases- Shell aliases (fromaliases.zsh).gitmessage- Git commit template (fromcommit-conventions.txt)
Git Configuration
Important: Edit gitconfig and replace my credentials with yours before running the setup.
Vim/Neovim Setup
I use Neovim with vim-plug for plugin management. If you're using regular Vim, you may need to:
- Remove Neovim-specific plugins from
.vimrc - Run
:PlugCleanto remove plugin directories - Run
:PlugInstallto reinstall compatible plugins
Post-Installation Tasks
After running the setup, remember to:
-
Configure Git with your details:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com" -
Generate SSH key:
ssh-keygen -t ed25519 -C ${USER}@$(hostname --fqdn) -
Set zsh as your login shell:
chsh -s /usr/bin/zsh -
Add yourself to virtualization groups (log out/in afterward):
sudo usermod -aG libvirt,kvm $USER -
(Optional) enable the rootless Podman API socket:
systemctl --user enable --now podman.socket -
Install VS Code extensions:
- C# Dev Kit
- GitLens
- Prettier
- NuGet Package Manager GUI
Supported Distributions
- Debian 13 "trixie" (primary target — full setup incl. upstream tooling, .NET, and backend services)
- Ubuntu / Pop!_OS (apt; core + development tools)
- Fedora (dnf; core + development tools, best-effort upstream tooling)
Customization
Feel free to fork this repository and modify the scripts/dotfiles to suit your needs. The modular structure makes it easy to add, remove, or modify specific components.
Legacy
The original monolithic post_install.sh script has been archived in .archive/ for reference.