flowchart TD
%% External infrastructure (outside the subgraphs)
GH[(<a href='backup.html#github'>GitHub</a>)]
BK[(<a href='backup.html#hdd-backup'>HDD Backup</a>)]
NC[(<a href='backup.html#nextcloud'>Nextcloud</a>)]
A[("<a href='https://github.com/fs-ise/workstation-setup'>workstation-setup<br/>(Ansible)</a>")]
%% Day-to-day flow
subgraph Daily["<strong>Day-to-day operations</strong>"]
AUpd["<a href='update_software.html'>Update software</a>"] --> S[<a href='backup.html'>Backup and sync</a>]
S --> AUpd
end
A <-.-> AUpd
S -. "~/*" .-> BK
S <-. ~/repos* .-> GH
S <-. ~/Nextcloud* .-> NC
%% New machine flow
subgraph New["<strong>New machine</strong>"]
OS[<a href='install_os.html'>Install OS/Ansible</a>]
OS --> AInst["<a href='install_software.html'>Install software</a>"] --> R
R[<a href='restore.html'>Set up/restore data</a>]
end
A -.-> AInst
BK -.-> R
GH -.-> R
NC -.-> R
%% Styling
classDef highlight fill:#ffec99,stroke:#f08c00,stroke-width:3px,color:#1b1b1b;
classDef muted fill:#f6f7f9,stroke:#c9ced6,stroke-width:1px,color:#2b2b2b;
class A highlight;
class GH,BK,NC,AUpd,S,OS,AInst,R muted;
%% Optional: soften subgraph borders
style Daily fill:#ffffff,stroke:#d0d5dd,stroke-width:1px;
style New fill:#ffffff,stroke:#d0d5dd,stroke-width:1px;
workstation-setup
This repository documents reproducible Fedora workstation and server-oriented (non-GUI) research environments used by FS-ISE.
The workstation and cloud stacks are tested/supported on Fedora 44 x86_64. Their preflight role rejects other distributions, Fedora major versions, and architectures before running installation or configuration roles. Use the lab stack for Fedora Workstation and the cloud stack for an existing server-oriented (non-GUI) system.
The workstation stack includes:
- Base: Fedora Workstation 44 x86_64, with a debloated GNOME configuration
- Sync & Backup: Vorta/Borg, Nextcloud, Git + LFS
- Development: SSH, Docker, Visual Studio Code, Python, R, RStudio
- Research: LaTeX, Pandoc tooling, Quarto, Obsidian
- Documents: OCR, GROBID, Recoll
- Productivity & Media: Thunderbird, Chrome, GIMP, Audacity, OBS Studio
- Security: KeePassXC, ClamAV, VeraCrypt
We use Ansible to translate the following pragmatic principles into a reproducible workstation setup:
- make new machines transparent and reproducible,
- share setup knowledge as reviewed documentation and code,
- minimize configuration drift between machines,
- automate installation and configuration where possible, and
- keep room for explicit manual steps when accounts, credentials, or lab-specific choices cannot be automated safely.
Research work often depends on fast-moving open-source software, custom tools, and local services. Ansible is the mechanism used here to turn that changing setup knowledge into a programmatic desired state: packages, configuration files, services, and checks can be reviewed in Git, applied to a new machine, and reapplied during maintenance. The diagram shows how the same repository connects initial setup, recurring updates, backup/sync, and data restoration.
Workstation setup is a recurring configuration-management task. The same packages, defaults, accounts, and documentation links need to be applied consistently across notebooks and external drives. Ansible is useful here because the desired setup can be documented as code, reviewed in Git, rerun after changes, and reused as the setup evolves.
See how Uber uses Ansible playbooks for daily backup, generation, and push workflows in its corporate network setup: How Ansible Automation Powers the Uber Corporate Network at a Global Scale.