Skip to content

Context Variables

Context variables use branded symbols (Var<T>) to provide type-safe access to variables.

type Var<T> = symbol & {
readonly __value?: T;
readonly __type?: 'sysopkit.var';
};

Variables are looked up via parent-chain traversal. A child context can access variables from any ancestor context.

import { task } from 'sysopkit';
task('inner', async (ctx) => {
const value = ctx.tryGet(MY_VAR); // returns T | undefined
const guaranteed = ctx.get(MY_VAR); // returns T, throws if absent
});
VariableTypeDescription
SSH_AUTH_SOCKETVar<string>SSH agent socket path
SUDO_USERVar<string>Default sudo user
SUDO_PASSWORDVar<string>Default sudo password
SUDO_ROLEVar<string>SELinux role for sudo
SUDO_PRESERVE_ENVVar<boolean | string[]>Preserved sudo env vars

Variables are typically set when creating a context:

import { start } from 'sysopkit/start';
import { SUDO_PASSWORD } from 'sysopkit/middleware/sudo';
await start(
async () => {
// sudo middleware will read SUDO_PASSWORD from context
await sudo(async () => {
await sh('whoami');
});
},
{
vars: { [SUDO_PASSWORD]: 'secret' },
},
);