An Ansible collection for provisioning my personal development environment, including automated Fedora installations, desktop configuration, and application management.
All playbooks can be run using uvx --from ansible-core ansible-playbook:
uvx --from ansible-core ansible-playbook shanemcd.toolbox.<playbook_name>Generate a custom Fedora ISO with kickstart for unattended installations. Downloads the latest Fedora Everything netinst ISO, injects a kickstart configuration, and produces a bootable ISO that installs a Fedora Kinoite system using the bootc container image from mybox/Containerfile.
Using Docker (recommended - no sudo required):
CONTAINER_RUNTIME=docker make context/custom.isoUsing Podman (requires sudo):
ANSIBLE_EXTRA_ARGS="-K" make context/custom.isoCustom parameters:
ansible-playbook shanemcd.toolbox.make_fedora_iso -v \
-e fedora_iso_build_context=/path/to/context \
-e fedora_iso_force=yes \
-e fedora_iso_kickstart_password=$PASSWORD \
-e fedora_iso_target_disk_id=nvme-Samsung_SSD_... \
-e container_runtime=dockerDependencies:
- Docker:
docker,ansible-core,community.dockercollection, Pythonpasslib,requests,docker - Podman:
podman,ansible-core,containers.podmancollection, Pythonpasslib
Testing the ISO:
make qemu # Boot ISO in QEMU, install, then reboot to testNote: Podman requires sudo (-K) because mkksiso 38.4+ needs root privileges to create UEFI boot images. Rootless Podman cannot access the loop devices required for EFI boot image creation.
Meta-playbook that runs a full environment setup: installs flatpaks, fonts, and configures Emacs. Perfect for setting up a new machine.
ansible-playbook shanemcd.toolbox.inceptionConfigure KDE Plasma application menu favorites using the official D-Bus API. Favorites are defined in roles/kde/vars/main.yml.
ansible-playbook shanemcd.toolbox.kdeHow it works: Uses org.kde.ActivityManager.ResourcesLinking D-Bus interface to add/remove favorites. This is the proper, supported method that works during active Plasma sessions and lets KDE handle all database synchronization.
Install flatpak applications defined in roles/flatpaks/vars/main.yml.
ansible-playbook shanemcd.toolbox.install_flatpaks
# Install at system level instead of user level
ansible-playbook shanemcd.toolbox.install_flatpaks -e flatpaks_method=systemList currently installed flatpaks:
ansible-playbook shanemcd.toolbox.list_flatpaksDownload and install Iosevka SS05 font from the latest GitHub release.
ansible-playbook shanemcd.toolbox.fontsClone .emacs.d repository and configure Emacs with packages, vterm compilation, and nerd-icons fonts.
ansible-playbook shanemcd.toolbox.emacsWhat it does:
- Clones
https://github.com/shanemcd/.emacs.d - Runs Emacs in batch mode with
vterm-always-compile-module=tto auto-compile vterm - Loads init.el (which runs org-babel to load configuration)
- Installs nerd-icons fonts non-interactively
Populate SSH authorized_keys from GitHub user public keys.
ansible-playbook shanemcd.toolbox.authorized_keys \
-i inventory.ini \
-e github_users=['shanemcd','otheruser'] \
-e remote_user=rootOptions:
github_users- List of GitHub usernames to fetch keys fromremote_user- User account to configure (default:root)clear_existing- Set totrueto wipe existing authorized_keys first
Install and configure Tailscale on JetKVM devices (Rockchip-based KVM over IP hardware).
ansible-playbook shanemcd.toolbox.jetkvm_tailscale \
-i jetkvm-inventory \
-e tailscale_auth_key=$TSKEYRequirements:
- Target must be a JetKVM device (detects Rockchip in
/proc/cpuinfo) - Tailscale auth key from https://login.tailscale.com/admin/settings/keys
What it does:
- Downloads latest Tailscale ARM release
- Installs tailscaled daemon with init script (
S22tailscale) - Configures persistent state in
/userdata/tailscale-state - Authenticates using provided auth key