What is POP: Pure Object Prototypes
# !/usr/bin/env d2 --theme 200
flake: Flake {
library: library(pops) {
lib
exporter: {
pops
}
flakeOutputs
exporter -> flakeOutputs
}
outputs: outputs {
packages
}
library.flakeOutputs -> outputs
library.exporter.library -> outputs.lib: without pops interface
library.pops -> outputs.pops
}
units: units {
nixos: {
nixosModules
homeProfiles
homeModules
homeProfiles
homeModules
}
flake-parts: {
modules
profiles
}
devshell: {
modules
profiles
}
configs: {
treefmt
}
}
extensions: extensions system {
APIs: {
addLoadExtender
addLoadExtenders
addExporters
outputs
}
}
flops: flops(POP) {
haumea: {
type: {
default
nixosModules
nixosProfiles
evalModules
}
load
type -> layouts
}
flake: {
inputs
call-flake
}
}
user: User {shape: person}
extensions <-> user
flops -> extensions
flake.outputs.pops -> extensions
units -> flake.lib.pops: loading
flake.library.pops <- flops.haumea: loader
flops.haumea -> extensions.APIs.addLoadExtender
flops.haumea -> extensions.APIs.addLoadExtenders
flops.flake -> subflake
flops.flake -> call-flake: extended inputs
flake.outputs.pops -> extensions: extensions interface