Profiles
The one idea the whole command line is built on.
A profile names one lamp or several, and every verb takes a profile. That is the whole model — a profile of one lamp is just a lamp.
$ lume key on --brightness 80 --kelvin 4500
$ lume studio on # key, rim and the accent light, each at its stored values
$ lume all off
The config
lume config prints where the file belongs — ~/.config/lume/lamps.json — and a
starter to copy. lume setup writes it for you.
{
"lamps": {
"key": { "type": "elgato", "host": "192.168.1.29", "certs": "~/.config/lume" },
"rim": { "type": "elgato", "host": "192.168.1.131", "certs": "~/.config/lume" },
"akzent": { "type": "hue", "host": "192.168.1.53", "id": "Büro" }
},
"profiles": {
"studio": {
"key": { "brightness": 80, "kelvin": 4500 },
"rim": { "brightness": 47, "kelvin": 5600 },
"akzent": { "brightness": 30, "color": "#ff7a2f" }
},
"elgatos": ["key", "rim"]
},
"default": "studio"
}
A profile written as a list of names controls those lamps and leaves their values alone. A profile written as an object applies the values it holds, and any flag you pass overrides them for that one command.
default is the profile used when a command names no target at all, so
lume off turns off the studio.
Where secrets are not
The Hue application key lives in ~/.config/lume/hue-token, or $LUME_HUE_TOKEN,
or a path named in the config’s token field — deliberately not in the config
file itself, so the config is safe to keep in a dotfiles repo. The Elgato private
keys never leave the certificate directory.
For scripts and Stream Decks
A Stream Deck button is just lume studio toggle. Because a profile fans out in
parallel, three lamps take about as long as one.
--json prints machine-readable results, --quiet prints nothing but errors,
and the exit code is 1 if any lamp failed.