No description
Find a file
2026-05-05 17:29:09 +02:00
group_vars initial commit 2026-05-05 17:29:09 +02:00
roles initial commit 2026-05-05 17:29:09 +02:00
ansible.cfg initial commit 2026-05-05 17:29:09 +02:00
inventory.yml initial commit 2026-05-05 17:29:09 +02:00
playbook.yml initial commit 2026-05-05 17:29:09 +02:00
README.md initial commit 2026-05-05 17:29:09 +02:00

Ansible Fedora Setup

Modular Ansible role system for setting up a fresh Fedora development workstation.

Quick Start

# Review the playbook and roles first!
ansible-playbook -i inventory.yml playbook.yml --check --diff

# Apply (prompt for become password):
ansible-playbook -i inventory.yml playbook.yml --ask-become-pass

Structure

ansible-setup-fedora/
├── ansible.cfg        # Ansible configuration
├── inventory.yml      # Localhost inventory
├── playbook.yml       # Main playbook importing all roles
├── README.md          # This file
└── roles/
    ├── common/        # Shared handlers, vars, pre-tasks
    ├── essentials/    # Core CLI tools (git, curl, tmux, etc.)
    ├── docker/        # Docker CE + docker-compose
    ├── vis-editor/    # Vis text editor
    ├── stow/          # GNU Stow
    ├── dotfiles/      # Personal dotfiles (codeberg.org/0x9e/dotfiles)
    ├── nodejs/        # Node.js via nvm
    ├── go/            # Go programming language
    ├── netbird/       # NetBird VPN client
    ├── yubikey-ssh/   # YubiKey SSH + GPG setup
    ├── php-composer/  # PHP + Composer
    └── pi-assistant/  # @mariozechner/pi-coding-assistant

Customization

Omitting roles

Edit playbook.yml and comment out (or remove) the roles you don't need. Each role has a when: false example commented inline.

Example — skip Node.js and Go:

roles:
  - role: essentials
  # - role: nodejs
  #   when: false
  # - role: go
  #   when: false
  - role: vis-editor
  # ... remaining roles

Role variables

Each role with configurable options has a defaults/main.yml. Override in the playbook or via --extra-vars:

ansible-playbook -i inventory.yml playbook.yml \
  --extra-vars "docker_users=['myuser']"

Per-role guide

Role What it installs Configurable vars Notes
common Core dirs, locale, dnf cache update None Run first — provides handlers
essentials git, curl, htop, tmux, unzip, wget, make, gcc, btop, ripgrep, fd-find, fastfetch None No vim (vis is the editor)
docker docker-ce, docker-ce-cli, containerd.io, docker-compose-plugin docker_users Adds users to docker group
vis-editor Vis text editor None Installs via dnf (COPR if needed)
stow GNU Stow None Required by dotfiles role
dotfiles Clones codeberg.org/0x9e/dotfiles + stows dotfiles_repo, dotfiles_dest Idempotent (pull on existing clone)
nodejs Node.js (LTS via nvm) + npm None Nvm installed to ~/.nvm
go Go from official tarball None Installed to /usr/local/go
netbird NetBird VPN client None Systemd service enabled
yubikey-ssh openssh-clients, gnupg2, pcscd, yubikey-manager SSH key comment, agent forwarding SSH via GPG agent
php-composer PHP + CLI + common extensions + Composer None Composer installed globally
pi-assistant @mariozechner/pi-coding-assistant None Requires Node.js

Requirements

  • Fedora 41+ (target OS)
  • ansible-core installed on the control node
  • Sudo/nopasswd or become password
  • Internet access for package downloads

Idempotence

All roles are designed to be idempotent — running the playbook multiple times produces the same result. Each task has a meaningful name: and uses Ansible's declarative modules (dnf, copy, template, etc.).