3.5 KiB
Fedora Sway workstation
An Ansible playbook for rebuilding the two NixOS workstation hosts as a native
Fedora Sway desktop. The NixOS server host (sta-len-nix) and its services,
WireGuard, firewall, and Netdata configuration are intentionally excluded.
Target
- Native Fedora 44 on x86_64
- Sway with SDDM, Waybar, PipeWire, printing, SSH, and NetworkManager
- Faroese keyboard layout, Danish regional formats, and Atlantic/Faroe time
- Foot as the terminal, opening the persistent
tmuxsession - Zen as the default browser, installed from Zen's official release tarball
- Development tools, formatters, and Fedora-packaged language servers from NixOS
Run
Install Ansible as the normal desktop user:
sudo dnf install -y ansible
git clone https://codeberg.org/bartal-lsn/fedora-provisioning.git
cd fedora-provisioning
ansible-playbook setup.yml --ask-become-pass
Do not start the playbook with sudo. It uses privilege escalation only for
system tasks and installs Zen and user configuration into the invoking user's
home directory. Log out or reboot after the first run to enter Sway through
SDDM and pick up the new group memberships and environment.
Configuration ownership
The Home Manager configuration lives in the public
https://codeberg.org/bartal-lsn/dotfiles repository as GNU Stow packages.
During provisioning, Ansible clones or updates that repository at
~/dotfiles, then runs stow -R * from that directory. Stow therefore
restows every package into the user's home directory.
Commit dotfile changes to the Codeberg repository, then rerun the playbook to
pull ~/dotfiles and refresh its links. Editor-managed binaries such as zls,
omnisharp, jdtls, and lua-language-server remain Neovim concerns because
Fedora does not package them consistently. Ansible installs Fedora's clangd
and gopls, Pyright, TypeScript language server, Black, isort, Prettier, and
StyLua. Rust and rust-analyzer are installed through the official rustup
installer.
Desktop keys
| Key | Action |
|---|---|
Super+t |
Foot attached to tmux session main |
Super+b |
Zen Browser |
Super+d |
Rofi application launcher |
Super+q |
Close window |
Super+h/j/k/l |
Move focus |
Super+Shift+h/j/k/l |
Move window |
Super+1..0 |
Switch workspace |
Super+Shift+1..0 |
Move window to workspace |
Super+f |
Toggle fullscreen |
Super+Shift+Space |
Toggle floating |
Super+- |
Show scratchpad |
Super+Shift+- |
Move window to scratchpad |
Optional behavior
The main switches live near the top of vars.yml:
upgrade_system: upgrade packages before provisioninginstall_virtualization: install Fedora's libvirt virtualization groupinstall_sqlcmd: retain the Fedora repository's existing SQL Server CLIinstall_typora: install the unverified Flathub Typora wrapper
The playbook installs OpenJDK 25 because Fedora 44 does not publish the OpenJDK 21 RPM used by the NixOS setup.
Fedora does not have a direct equivalent for NixOS's
virtualisation.vmware.host.enable; this playbook uses Fedora's supported
libvirt stack instead. Typora is optional because its Flathub wrapper is not
verified by Typora. Zen never uses Flatpak: Ansible downloads the official
release archive directly, places it under ~/.tarball-installations/zen, and
creates the ~/.local/bin/zen launcher.
Re-running
The playbook is designed to be repeatable. Zen, Bun, Rust, Starship, npm tools, services, and configuration files are checked before changes are made. Zen handles browser updates itself after the initial binary installation.