Skip to content

Latest commit

 

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fedora Setup

Modular Fedora Workstation bootstrap for a .NET/Aspire development machine.

Main choices

  • Podman instead of Docker Engine; rootless/daemonless by default.
  • Latest stable .NET 10 SDK from Microsoft, installed system-wide and updated weekly by a systemd timer.
  • Aspire CLI installed as the Aspire.Cli .NET global tool.
  • Aspire configured for Podman and Linux development-certificate trust.
  • Node.js/npm with a user-owned npm prefix, then OpenAI Codex CLI.
  • Zsh + Oh My Zsh with Starship as the default prompt.
  • Nerd Fonts: JetBrainsMono, FiraCode and MesloLGS NF.
  • GNOME, Nautilus, Flatpak apps, RPM Fusion codecs and optional NVIDIA drivers.
  • Local user MIME catalog for development languages/tools and selected Windows formats.
  • No automatic reboot.

Run everything

chmod +x install.sh modules/*.sh diagnostics/*.sh optional/*.sh
./install.sh

The full installer is non-interactive between modules. It may request the sudo password once at the beginning, then continues automatically.

Modules are safe to rerun: installed RPM packages, Nerd Fonts, Flatpak apps, Oh My Zsh plugins, GNOME extensions, and configured repositories are detected and skipped instead of being downloaded or installed again. Components with an explicit update policy, such as Starship, .NET, Aspire, and Codex, only update when their module determines that an update is needed or requested.

Run selected modules

Module numbers are only installation order. Prefer stable names:

./install.sh podman dotnet aspire
./install.sh zsh nerd-fonts starship
./install.sh mime

List all current modules:

./install.sh --list

Old numbered names are also resolved by semantic name when possible, but scripts and documentation should use stable names.

System .NET SDK

.NET is installed from Microsoft's official release binaries into:

/usr/local/share/dotnet

/usr/local/bin/dotnet points to that installation. The dotnet-sdk-update.timer systemd timer checks weekly for the latest stable SDK in the .NET 10 channel. It stages and verifies a complete new installation before replacing the previous version, so obsolete SDK feature bands do not accumulate.

Run an update immediately or inspect the timer with:

sudo systemctl start dotnet-sdk-update.service
systemctl status dotnet-sdk-update.timer

In Rider, use /usr/local/bin/dotnet as the .NET CLI executable and disable automatic SDK downloads.

Zsh and prompt

Starship is the only configured prompt engine. The repository includes its development-oriented configuration at:

config/starship/starship.toml
config/starship/starship-compact.toml

Every run of the starship module applies it to:

~/.config/starship.toml

An existing configuration is backed up with a timestamp before replacement. The module also reruns the official Starship installer, so an existing older binary is upgraded to the latest release in ~/.local/bin. If the update server is temporarily unavailable, an already installed Starship is retained.

Zsh automatically selects the full configuration at 90 columns or wider and the compact configuration below 90 columns. The compact profile replaces standard directory names such as Downloads and Documents with Nerd Font icons. Resizing the terminal refreshes the prompt automatically.

If Powerlevel10k is detected, the installer automatically removes its theme, configuration and cache, backs up the existing Zsh files, rebuilds the Zsh configuration, and selects Starship. This migration also runs when installing only the Starship module:

./install.sh starship

Aspire

Aspire is installed through the official .NET global tool package:

dotnet tool install -g Aspire.Cli

The setup adds:

export ASPIRE_CONTAINER_RUNTIME=podman

The development certificate is managed by Aspire without globally overriding SSL_CERT_DIR, because that variable can break applications with bundled TLS libraries (including Steam).

Certificate refresh is executed non-interactively:

aspire certs clean --non-interactive --nologo
aspire certs trust --non-interactive --nologo

MIME pack

MIME definitions are stored as separate files in:

config/mime/

The mime module installs all XML files from that directory into:

~/.local/share/mime/packages/

Run or reapply it with:

./install.sh mime

Before installing, the module removes only previous fedora-setup-*.xml files, so deleted or renamed definitions do not remain stale.

GNOME normally classifies every zero-byte file as application/x-zerosize, ignoring its extension for application selection. The MIME module installs a small handler for that special type. It determines the type from the filename and opens the original empty file with the application already configured for that type—for example, an empty .cs uses the default C# application and an empty .md uses the default Markdown application.

The Windows list is intentionally not copied verbatim: legacy aliases such as multiple MIME names for MP3/PNG/AVI are left to Fedora/shared-mime-info. windows-extra.xml focuses on Windows-specific formats useful for Nautilus recognition.

Common text configuration and diagnostic files are covered as well, including .ini, .cfg, .conf, .config, .toml, .properties, .prefs, .log, and .trace. This also makes empty files with these extensions open through their configured text application.

Nerd Fonts

The nerd-fonts module installs user-local fonts into:

~/.local/share/fonts/NerdFonts

Default families:

  • JetBrainsMono Nerd Font
  • FiraCode Nerd Font
  • MesloLGS NF

Run:

./install.sh nerd-fonts

Install only a subset:

NERD_FONTS="JetBrainsMono FiraCode" ./install.sh nerd-fonts

Podman socket

podman.socket is intentionally not enabled by default. Aspire can use Podman directly. If a future tool specifically requires a Docker-compatible API:

systemctl --user enable --now podman.socket
export DOCKER_HOST="unix://$XDG_RUNTIME_DIR/podman/podman.sock"

Diagnostics

After installation:

aspire doctor
./diagnostics/check-environment.sh
./diagnostics/check-mime.sh
./diagnostics/check-mime-defaults.sh

Important after install

Log out and log back in (or reboot) so the default shell/session changes are applied. If NVIDIA packages were installed, allow akmods to finish before rebooting.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages