# 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 `tmux` session - 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: ```bash 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 provisioning - `install_virtualization`: install Fedora's libvirt virtualization group - `install_sqlcmd`: retain the Fedora repository's existing SQL Server CLI - `install_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.