Files
fedora-provisioning-ansible/README.md
T

89 lines
3.5 KiB
Markdown

# 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.