@startuml

package Management {
    object "Nix-Panel" as A {
    }
    object "Nix-Panel API" as B {
    }
    object "**Central Database**" as CD {
        Netbox
        Accounting
        State
        Secrets
    }
    object "**Orchestrator**" as Orch {
        NixOps
    }
    object "**Identity Management**" as AAA {
        Authentication
        Authorization
        Accounting
    }
    object "**Central Services**" as CS {
        DNS
        Email
    }
}

package Hardware {
    object "**Systems**" as Sys {
        Operating System
        Network
        Storage
        Virtualisation
    }
    object "**Storage**" as Stor {
        exclusive_filesystem
    }
    object "**S3 storage**" as S3 {
        Garage
    }
}

package Virtualization {
    object "**Nixos VM A**" as NixA {
        Application A
        Application B
    }
    object "**Nixos VM B**" as NixB {
        Application C
    }
    map "**Application options**" as App {
        Edumeet => Matrix
        NextCloud => Pixelfed
        Webmail => Peertube
        Hedgehoc => Mastodon
        Project planning => Owncast
        Office => Castopod
    }
}

Sys --> Stor
Sys::Virtualisation -l-> Virtualization
NixA --> Stor
NixB --r--> S3
NixA --> App
NixB --> App
NixA --> AAA
NixB --> AAA
A -d-> B
B -d-> CD
CD <-d-> Orch
Orch -r-> CS::DNS
Orch -r-> CS::Email
Orch -d-> Virtualization
Orch --> NixA
Orch --> NixB
Orch --> S3
Orch <-l-> AAA
B -d-> AAA
@enduml