# `Hyper.Node.FireVMM.VmLinux.Manifest`
[🔗](https://github.com/harmont-dev/hyper/blob/main/lib/hyper/node/fire_vmm/vm_linux/manifest.ex#L1)

The statically-embedded vmlinux release manifest.

`priv/vmlinux/manifest.json` is vendored verbatim from a pinned
`github.com/harmont-dev/hyper-vmlinux` release and read at compile time, so the
per-build SHA-256 sums (used by `Hyper.Node.FireVMM.VmLinux.Provider` to verify
downloads) are baked into the compiled module and cannot drift from what was
published. `@external_resource` forces a recompile if the file changes.

All functions here are pure; they never touch the network or the filesystem.

# `asset_url`

```elixir
@spec asset_url(Hyper.Node.FireVMM.VmLinux.Manifest.Build.t()) :: String.t()
```

The download URL for `build`'s asset on the pinned release.

# `builds`

```elixir
@spec builds() :: [Hyper.Node.FireVMM.VmLinux.Manifest.Build.t()]
```

All builds in the manifest.

# `builds_for`

```elixir
@spec builds_for(Sys.Arch.t()) :: [Hyper.Node.FireVMM.VmLinux.Manifest.Build.t()]
```

All builds matching `arch`.

# `default_for`

```elixir
@spec default_for(Sys.Arch.t()) :: Hyper.Node.FireVMM.VmLinux.Manifest.Build.t() | nil
```

The default build for `arch`: the highest `version`, breaking ties toward the
shorter `name` (so a plain build wins over a variant like `-no-acpi`). Returns
`nil` if the manifest has no build for `arch`.

# `fetch`

```elixir
@spec fetch(String.t()) ::
  {:ok, Hyper.Node.FireVMM.VmLinux.Manifest.Build.t()} | :error
```

Look up a build by its `name` (e.g. "x86_64-6.1").

---

*Consult [api-reference.md](api-reference.md) for complete listing*
