English · Deutsch
A fully automated Fedora developer bootstrap built on Ansible – designed for a one-shot run on a fresh Fedora installation.
System setup, packages, fonts, Flatpak apps, mise runtimes and GNU Stow-deployed dotfiles (Fish, Neovim/LazyVim, tmux, Yazi, Kitty/Ghostty, Sway and more).
Requires Fedora Linux (Workstation or Minimal), tested on Fedora 44.
sudo dnf install -y ansible-core git
git clone https://github.com/JeromeTDev/fedora-dev-bootstrap.git
cd fedora-dev-bootstrap
ansible-galaxy collection install -r requirements.yml # once: copr + flatpak
ansible-playbook playbook.yml -KWithout an inventory.ini, the machine you start the playbook on is the target.
For a different machine: copy inventory.ini.example to inventory.ini and define
a group named fedora with ansible_host/ansible_user – the file is picked up
automatically via ansible.cfg and is listed in .gitignore.
Everything configurable lives in group_vars/fedora.yml.
| Category | Source | Tools |
|---|---|---|
| Dev & Build | Fedora | git, gh, make, gcc, luarocks, texlive-scheme-medium |
| Shell & Editor | Fedora | fish (default shell), neovim (LazyVim), tmux |
| CLI | Fedora | fzf, zoxide, btop, tree, ripgrep, fd-find, jq, ncdu, stow, fastfetch |
| Media & PDF | Fedora | ImageMagick, mediainfo, perl-Image-ExifTool, poppler-utils, zathura, zathura-pdf-mupdf |
| Desktop | Fedora | dolphin, gammastep, xournalpp, wl-clipboard, keepassxc |
| Prompt & Terminals | COPR | starship, lazygit, yazi, ghostty |
| Window Manager | COPR – only with Sway | rofi, mako, swayfx (replaces sway and sway-systemd) |
| Apps | Flatpak, system-wide | Discord, Obsidian, Cryptomator, TeamSpeak, ONLYOFFICE, Telegram, Signal |
| Fonts | GitHub release | JetBrainsMono Nerd Font → ~/.local/share/fonts |
| Runtimes | mise | python, rust, uv, opencode |
| System | DNF | fastestmirror, 15 parallel downloads, defaultyes, no weak deps, clean_requirements_on_remove, plugins=1 |
A full dnf upgrade runs on top of that. Runtimes come from
dotfiles/.config/mise/config.toml, falling
back to mise_tools in group_vars/fedora.yml.
dotfiles/ is copied to ~/.dotfiles on the first run and stowed from there
(dotfiles/ -> ~/.dotfiles --stow .--> ~/.config/...).
- An existing
~/.dotfilesalways wins – move your own dotfiles there beforehand - If
dotfiles/is absent, nothing is stowed - Every top-level entry is linked individually; a real directory such as
~/.configis not replaced, but merged into it via--adopt - Paths are overridable in
roles/dotfiles/defaults/main.yml(dotfiles_dir,dotfiles_src,dotfiles_stow_target)
Careful:
--adopttakes over existing files (e.g. a~/.config/fontconfig/fonts.confcreated by the desktop) – back them up first if needed. Never runstow .on the repo root, orroles/andplaybook.ymlend up in your home directory.
tmux plugins are not bundled (see .gitignore); TPM installs them
on the first Prefix + I, or manually:
git clone --depth 1 https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
~/.tmux/plugins/tpm/bin/install_pluginsupdate.sh updates DNF, mise and Flatpak in one go: ./update.sh
Legacy bash script with a Btrfs/Snapper strategy: legacy/feddev-setup.sh
– kept as a historical reference, no longer maintained.
MIT License – (c) JeromeTDev
Ein vollautomatischer Fedora-Developer-Bootstrap auf Ansible-Basis – gedacht für die einmalige Ausführung auf einer frischen Fedora-Installation.
System-Setup, Pakete, Schriften, Flatpak-Apps, mise-Runtimes und per GNU Stow deployte Dotfiles (Fish, Neovim/LazyVim, tmux, Yazi, Kitty/Ghostty, Sway u. v. m.).
Voraussetzung: Fedora Linux (Workstation oder Minimal), getestet auf Fedora 44.
sudo dnf install -y ansible-core git
git clone https://github.com/JeromeTDev/fedora-dev-bootstrap.git
cd fedora-dev-bootstrap
ansible-galaxy collection install -r requirements.yml # einmalig: copr + flatpak
ansible-playbook playbook.yml -KOhne inventory.ini ist der Rechner, auf dem du das Playbook startest, das Ziel.
Für eine andere Maschine: cp inventory.ini.example inventory.ini und dort eine
Gruppe fedora mit ansible_host/ansible_user eintragen – die Datei wird über
ansible.cfg automatisch erkannt und ist in .gitignore.
Alles Anpassbare liegt in group_vars/fedora.yml.
| Kategorie | Quelle | Tools |
|---|---|---|
| Dev & Build | Fedora | git, gh, make, gcc, luarocks, texlive-scheme-medium |
| Shell & Editor | Fedora | fish (Default-Shell), neovim (LazyVim), tmux |
| CLI | Fedora | fzf, zoxide, btop, tree, ripgrep, fd-find, jq, ncdu, stow, fastfetch |
| Medien & PDF | Fedora | ImageMagick, mediainfo, perl-Image-ExifTool, poppler-utils, zathura, zathura-pdf-mupdf |
| Desktop | Fedora | dolphin, gammastep, xournalpp, wl-clipboard, keepassxc |
| Prompt & Terminals | COPR | starship, lazygit, yazi, ghostty |
| Window Manager | COPR – nur wenn Sway | rofi, mako, swayfx (ersetzt sway und sway-systemd) |
| Apps | Flatpak, systemweit | Discord, Obsidian, Cryptomator, TeamSpeak, ONLYOFFICE, Telegram, Signal |
| Schriften | GitHub-Release | JetBrainsMono Nerd Font → ~/.local/share/fonts |
| Runtimes | mise | python, rust, uv, opencode |
| System | DNF | fastestmirror, 15 Paralleldownloads, defaultyes, keine weak-deps, clean_requirements_on_remove, plugins=1 |
Zusätzlich läuft ein dnf upgrade. Runtimes kommen aus
dotfiles/.config/mise/config.toml, sonst aus
mise_tools in group_vars/fedora.yml.
dotfiles/ wird beim ersten Lauf nach ~/.dotfiles kopiert und von dort per Stow
verlinkt (dotfiles/ -> ~/.dotfiles --stow .--> ~/.config/...).
- Ein vorhandenes
~/.dotfilesgewinnt immer – eigene Dotfiles vorher dorthin ziehen - Fehlt
dotfiles/, wird nichts gestowt - Jeder Top-Level-Eintrag wird einzeln verlinkt; ein echtes Verzeichnis wie
~/.configwird nicht ersetzt, sondern mit--adopthineingemischt - Pfade überschreibbar in
roles/dotfiles/defaults/main.yml(dotfiles_dir,dotfiles_src,dotfiles_stow_target)
Achtung:
--adoptübernimmt vorhandene Dateien (z. B. eine vom Desktop angelegte~/.config/fontconfig/fonts.conf) – vorher ggf. sichern.stow .niemals auf das Repo-Root anwenden, sonst landenroles/undplaybook.ymlin deinem Home.
tmux-Plugins sind nicht mitgeliefert (siehe .gitignore); TPM
installiert sie beim ersten Prefix + I, manuell:
git clone --depth 1 https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
~/.tmux/plugins/tpm/bin/install_pluginsupdate.sh aktualisiert DNF, mise und Flatpak in einem Durchgang: ./update.sh
Altes Bash-Script mit Btrfs-/Snapper-Strategie: legacy/feddev-setup.sh
– historische Referenz, nicht mehr gepflegt.
MIT License – (c) JeromeTDev
