workstation-setup

This repository documents reproducible Fedora workstation and server-oriented (non-GUI) research environments used by FS-ISE.

---
config:
  theme: base
  themeCSS: |-
    .node { color-scheme: light dark; }

    .nodeLabel { line-height: 1.15 !important; }

    .compact-list {
      display: inline-block;
      line-height: 0.95;
    }
---
%%{init: {"flowchart":{"rankSpacing":25,"nodeSpacing":20,"curve":"linear","htmlLabels":true,"subGraphTitleMargin":{"top":10,"bottom":18}}}}%%
flowchart TB

    %% Top: Configuration recipe
    A@{ shape: doc, label: "⚙️ <a href='https://github.com/fs-ise/workstation-setup'>workstation-setup</a><br/>" }

    %% Middle: Workstation lifecycle
    subgraph WS["<strong>Workstation</strong>"]
        direction LR

        Setup["<strong>Setup</strong><br/>
        <span class='compact-list'>• <a href='install_os.html'>Install OS</a><br/>
        • <a href='install_configuration.html'>Apply configuration</a></span><br/>
        <span style='font-family:monospace;'>make configure</span><br/>
        <i>Fully automated setup</i>"]

        Daily["<strong>Day-to-day operations</strong><br/>
        <span class='compact-list'>• <a href='install_configuration.html'>Apply configuration</a><br/>
        • <a href='audit_configuration.html'>Audit configuration</a><br/>
        • <a href='update_configuration.html'>Update configuration</a><br/>
        • <a href='backup.html'>Backup data</a></span><br/>
        <span style='font-family:monospace;'>make configure<br/>make audit<br/>make update<br/>make backup</span><br/>
        <i>Keep the workstation reproducible</i>"]

        Restore["<strong>Restore</strong><br/>
        <span class='compact-list'>• <a href='install_os.html'>Install OS</a><br/>
        • <a href='install_configuration.html'>Apply configuration</a><br/>
        • <a href='restore.html'>Restore data</a></span><br/>
        <span style='font-family:monospace;'>make configure</span><br/>
        <i>Rebuild in minutes</i>"]

        %% Invisible links enforce left-to-right ordering
        Setup ~~~ Daily ~~~ Restore
    end

    %% Bottom: Shared data infrastructure
    DATA[("<strong>Data infrastructure</strong><br/>
    <span class='compact-list'>• <a href='hdd_borg.html'>HDD/Borg</a><br/>
    • <a href='github.html'>GitHub</a><br/>
    • <a href='nextcloud.html'>Nextcloud</a></span>")]

    %% External connections
    A -.-> WS
    WS <-.-> DATA

    %% Node styles
    classDef ansible fill:#fff3bf,stroke:#f08c00,stroke-width:2px,color:#1e293b;
    classDef phase fill:#ffffff,stroke:#94a3b8,stroke-width:1px,color:#1e293b,text-align:left;
    classDef storage fill:#f0fdfa,stroke:#0d9488,stroke-width:2px,color:#115e59,text-align:left;

    class A ansible;
    class Setup,Daily,Restore phase;
    class DATA storage;

    %% Workstation container
    style WS fill:#eff6ff,stroke:#2563eb,stroke-width:2px

    linkStyle default stroke:#94a3b8,stroke-width:1.5px

TipSupported platform

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:

We use Ansible to translate the following pragmatic principles into a reproducible workstation setup:

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.

NoteWhy Ansible?

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.