| 1 |
# fw12 — Framework 12, Intel. The portable half of a two-machine pair. |
| 2 |
# |
| 3 |
# RECLASSIFIED 2026-09-07 (Max): "Lets stop treating fw12 as a minimal testbed |
| 4 |
# and plan to have it essentially mirror fw13. fw13 is probably going to be a |
| 5 |
# stay at home machine for awhile, always on. fw12 is the better portable |
| 6 |
# machine, but ideally is a near mirror image." |
| 7 |
# |
| 8 |
# So the dials below are fw13's, and that is the whole design of this file now. |
| 9 |
# Where the two differ it is identity and hardware, never capability. If fw13 |
| 10 |
# gains a dial, this file gains it in the same commit; a divergence here is a |
| 11 |
# bug rather than a choice, and build/hosts/fw12.requires is what catches one. |
| 12 |
# |
| 13 |
# WHAT THIS FILE USED TO BE, said plainly because two earlier headers argued |
| 14 |
# for it. fw12 was the stock client mint, the machine that proved what an |
| 15 |
# ordinary person installs, and it set no dial on purpose. That reading died in |
| 16 |
# two steps on the same day: first because Alloy is an operating system for |
| 17 |
# developers, so an empty-LANGS mint is the unusual install rather than the |
| 18 |
# representative one, and then because the pair is not one daily driver and one |
| 19 |
# testbed. It is a desk machine and a machine that leaves the house, and the |
| 20 |
# only thing a person carrying the portable one wants is for it to be the |
| 21 |
# machine they left. |
| 22 |
# |
| 23 |
# Nothing now proves the bare mint on hardware. That is accepted: the property |
| 24 |
# it demonstrated is that the image boots and is usable with nothing added, and |
| 25 |
# a VM answers that as well as a laptop does. |
| 26 |
# |
| 27 |
# The cost of the mirror is size and build time, both paid at mint. fw12 now |
| 28 |
# carries the Tauri GUI set, PostgreSQL 16 and four language toolchains it |
| 29 |
# would not have asked for as a testbed. |
| 30 |
# |
| 31 |
# What it also sets is identity, and only because the alternative is a chore. |
| 32 |
# fw12 gets reinstalled every time the image moves far enough to be worth |
| 33 |
# re-proving, and a machine that needs a person at the keyboard to become |
| 34 |
# reachable afterwards is how the last round of hardware verification turned |
| 35 |
# into eighteen tasks nobody could run. |
| 36 |
|
| 37 |
# avahi publishes fw12.local and NetworkManager sends the same name in DHCP |
| 38 |
# option 12, so the machine is reachable by name from fw13 the moment it boots. |
| 39 |
# The installer's default hostname follows this, so an install nobody retypes |
| 40 |
# still lands on the right name. |
| 41 |
ALLOY_HOSTNAME=fw12 |
| 42 |
|
| 43 |
# THE DIALS, mirrored from build/hosts/fw13.env. Read that file for what each |
| 44 |
# one costs; the reasons are the same reasons and are not restated here. |
| 45 |
# |
| 46 |
# LANGS. rust is what the tree is written in and is also what puts a C |
| 47 |
# toolchain on the machine: a stock fedora-bootc mint has glibc and not |
| 48 |
# glibc-devel, so without it cargo dies at `error: linker cc not found`. c adds |
| 49 |
# the compilers and build systems for an arbitrary checkout. js builds MNW's |
| 50 |
# frontends. go is blessed for Make Creative software where it is warranted. |
| 51 |
LANGS=rust,c,js,go |
| 52 |
|
| 53 |
# GUI. The Tauri build set: webkit2gtk, gtk3, libsoup3, librsvg and openssl, |
| 54 |
# all as -devel. Without it this machine cannot build goingson, |
| 55 |
# balanced_breakfast or audiofiles. |
| 56 |
# |
| 57 |
# It is also what carries openssl-devel, and that is worth knowing rather than |
| 58 |
# rediscovering: measured 2026-09-07 on a fw12 with LANGS=rust,c,go and no GUI |
| 59 |
# dial, `cargo install sccache` failed at `Package openssl was not found in the |
| 60 |
# pkg-config search path` and took four of the eleven recorded tools with it. |
| 61 |
# fw13 and astra never saw that because their GUI dial had been supplying the |
| 62 |
# header all along. |
| 63 |
GUI=tauri |
| 64 |
|
| 65 |
# DB. PostgreSQL 16 binaries and no cluster, matching fw13. The major matters: |
| 66 |
# it is what production runs and what a restored dump expects. |
| 67 |
DB=postgres16 |
| 68 |
|
| 69 |
# fw13's public key, read at mint time rather than committed: this repo is |
| 70 |
# public, and a key pasted into it would also go stale silently. The installer |
| 71 |
# seeds its account step from the baked key, so a reinstalled fw12 comes up |
| 72 |
# with fw13 already able to log in, with nothing typed at the machine. |
| 73 |
ALLOY_SSH_KEY=@~/.ssh/id_ed25519.pub |
| 74 |
|
| 75 |
# The install questions the recipe answers, so a reinstall stops being five |
| 76 |
# screens of retyping what this file already knows. Read by the installer from |
| 77 |
# /usr/lib/alloy/answers.toml; see docs/IMAGE.md, "Per-machine mint recipes". |
| 78 |
# |
| 79 |
# The account and the passphrase are still asked, and that is deliberate rather |
| 80 |
# than unfinished: a secret written here would be in every layer cache and on |
| 81 |
# every stick. What is left to type is one password and one passphrase. |
| 82 |
ALLOY_USERNAME=max |
| 83 |
|
| 84 |
# A rule, never a device path. If fw12 ever comes back with something other |
| 85 |
# than one internal NVMe in it, this stops matching and the installer asks |
| 86 |
# instead of erasing whatever it found. |
| 87 |
ALLOY_DISK=single-internal-nvme |
| 88 |
|
| 89 |
# Encrypted, per the standing posture for a laptop that leaves the house. This |
| 90 |
# answers the checkbox only; the passphrase is typed at the machine. |
| 91 |
ALLOY_ENCRYPT=yes |
| 92 |
|
| 93 |
# No. The lookup sends this machine's address to a third party, and a machine |
| 94 |
# that comes up UTC can be fixed in `alloy settings` in a second. |
| 95 |
ALLOY_LOCATE_TIMEZONE=no |
| 96 |
|
| 97 |
# Where `bootc upgrade` fetches from. fw13 serves this tag out of the registry |
| 98 |
# build/dev-push.sh publishes to, so a fix reaches fw12 over the LAN without a |
| 99 |
# second medium. Without this key the installer writes the compiled-in public |
| 100 |
# registry, which does not exist yet, and leaves the update timer disabled: a |
| 101 |
# machine that cannot be fixed except by typing `bootc switch` at it. |
| 102 |
UPDATE_TARGET=fw13:5000/alloy:local |
| 103 |
|