Skip to content

Xe/waifud

Repository files navigation

waifud

enbyware made with Nix built with Garnix license language count repo size

A few tools to help me manage and run virtual machines across a homelab cluster.

waifud was made for my own personal use and I do not expect it to be very useful outside that context. If you do want to run this on your infrastructure anyways, please contact me.

THIS IS EXPERIMENTAL! USE IT AT YOUR OWN PERIL!

TODO(Xe): Link to blogpost on the design/implementation once it is a thing.

Blogposts about waifud:

Overall architecture diagram (with incomplete components marked with a clock):

flowchart TD
    subgraph control plane
    WD[fa:fa-rust waifud]
    WC[fa:fa-rust waifuctl]
    ID[fa:fa-golang fa:fa-clock isekaid]
    MD[fa:fa-golang fa:fa-clock megamid]
    PD[fa:fa-golang fa:fa-clock portald]
    end
    subgraph VM plane
    LV[fa:fa-c libvirt]
    WH[fa:fa-linux runner\nnodes]
    VM[fa:fa-linux virtual\nmachines]
    end
    subgraph external
    TS[fa:fa-golang Tailscale]
    end

    PD --> |tailnet ingress for| WD
    WC --> |operator tool for| WD
    WC --> |usually connects via|PD
    ID --> |fetches node metadata\nand secrets for| WD
    VM --> |cloud-init\nmetadata| ID
    WD --> |manages libvirt on| WH
    LV --> |actually runs VMs| VM
    VM --> |network storage| MD
    WD --> |sets limits for\nrequests metrics from| MD  
    WH --> |runs| LV
    WH <--> |subnet router\ninterconnect| TS
    TS --> |network layer for| PD
    VM --> |usually a part of| TS