Skip to content

Latest commit

 

History

History
262 lines (185 loc) · 8.35 KB

File metadata and controls

262 lines (185 loc) · 8.35 KB

Fedora Setup

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

Main choices

  • Podman instead of Docker Engine; rootless/daemonless by default.
  • Microsoft .NET SDKs managed system-wide by DotnetManager, with stable .NET 10 installed by default.
  • 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.
  • GNOME-style monochrome developer MIME icons generated from Nerd Fonts symbols.
  • 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. The optional developer-icon color selector is not run by the default bootstrap.

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 dev-icons
./install.sh dev-icons-color

List all current modules, including optional 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 module clones and installs DotnetManager, whose default configuration tracks the stable .NET 10 channel. DotnetManager can track multiple numbered, LTS, STS, Go Live, preview, or pinned SDK sources and atomically rebuilds the managed installation without accumulating obsolete feature bands.

List the configured SDK sources, install another channel, update immediately, or inspect the weekly timer with:

dotnet-manager list
sudo dotnet-manager install --channel 11.0 --policy go-live
sudo dotnet-manager update
systemctl status dotnet-manager-update.timer

SDK sources are stored in /etc/dotnet-manager/sources.conf. Native Zsh and Oh My Zsh completion for dotnet-manager is installed system-wide; restart Zsh to load it after the first installation.

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.

Developer MIME icons

dev-icons generates monochrome developer MIME icons at install time. SVG files are not stored in this repository. The module downloads a pinned Nerd Fonts Symbols Only release, resolves every MIME type from config/mime/*.xml through config/dev-icons.tsv, exports the required glyph geometry, and installs the generated icons under the user's hicolor icon theme.

./install.sh dev-icons

Running dev-icons again always restores the neutral monochrome style.

Color is deliberately a separate optional module:

./install.sh dev-icons-color

It presents a selector and can be rerun whenever you want to switch styles:

  1. Monochrome — neutral GNOME-like icons.
  2. Brand colors — individual accents for C#, Python, Docker, Git, and other technologies.
  3. Custom color — one #RRGGBB color for the complete developer icon set.
  4. Keep the current style.

The chosen style is stored in ~/.config/fedora-setup/dev-icons-style. For automation, the selector can be bypassed:

DEV_ICON_STYLE=brand ./install.sh dev-icons-color
DEV_ICON_STYLE=monochrome ./install.sh dev-icons-color
DEV_ICON_STYLE=custom DEV_ICON_COLOR=#3584E4 ./install.sh dev-icons-color

The color module is optional and is therefore not part of the default unattended bootstrap.

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.