Skip to content
Hoody.com

Profiles bundle default preferences and source overrides that the Run service applies to subsequent requests. Use these endpoints to list, create, update, select, and delete profiles. The active profile’s defaults are applied whenever a request does not explicitly set a field.

A profile configuration contains:

  • name — Unique identifier for the profile
  • description — Optional human-readable description
  • defaults — Default selector values (OS, kind, source filter, pick mode, terminal session, display, limit)
  • sources_mode — How the profile interacts with global sources: inherit (start from global sources and apply overrides) or allowlist (disable all sources first, then enable only those listed in sources)
  • sources — Per-source overrides that enable, disable, or reprioritize sources
  • policy — Security and integrity requirements

List all configured user profiles with their default preferences and source overrides.

This endpoint takes no parameters.

Array of profile configurations.

[
{
"name": "default",
"description": "Default profile (inherits global sources)",
"defaults": {
"os": "any",
"kind": "any",
"source": [],
"pick": "ask"
},
"sources_mode": "inherit",
"sources": [],
"policy": {
"require_verified": false,
"require_integrity": false,
"deny_providers": [],
"deny_source_ids": []
}
},
{
"name": "work",
"description": "Work profile: GUI only, verified packages",
"defaults": {
"os": "linux",
"kind": "gui",
"source": ["nix"],
"pick": "first",
"limit": 10
},
"sources_mode": "allowlist",
"sources": [
{
"source_id": "nixpkgs",
"enabled": true,
"priority": 100
}
],
"policy": {
"require_verified": true,
"require_integrity": true,
"deny_providers": ["appimage"],
"deny_source_ids": ["untrusted-pkgx"]
}
}
]
const profiles = await client.run.profiles.listProfiles();

Create a new user profile with default preferences and optional source overrides.

This endpoint takes no parameters.

The request body follows the run_ProfileConfig schema.

FieldTypeRequiredDescription
namestringYesUnique profile name
descriptionstringNoHuman-readable profile description
defaultsobjectNoDefault selector values (OS, kind, source filter, pick mode, terminal session, display, limit)
sources_modestringNoinherit (start from global sources and apply overrides) or allowlist (disable all sources first, then enable only those listed in sources)
sourcesarrayNoPer-source overrides (default: []). Each entry has source_id (required), enabled, and priority.
policyobjectNoSecurity and integrity policy with require_verified, require_integrity, deny_providers, and deny_source_ids

Updated list of all profiles.

[
{
"name": "default",
"description": "Default profile (inherits global sources)",
"sources_mode": "inherit",
"sources": [],
"policy": {}
},
{
"name": "work",
"description": "Work profile: GUI only, verified packages",
"defaults": {
"os": "linux",
"kind": "gui",
"source": ["nix"],
"pick": "first",
"limit": 10
},
"sources_mode": "allowlist",
"sources": [
{
"source_id": "nixpkgs",
"enabled": true,
"priority": 100
}
],
"policy": {
"require_verified": true,
"require_integrity": true,
"deny_providers": ["appimage"],
"deny_source_ids": ["untrusted-pkgx"]
}
}
]
await client.run.profiles.createProfile({
name: "work",
description: "Work profile: GUI only, verified packages",
defaults: {
os: "linux",
kind: "gui",
source: ["nix"],
pick: "first",
limit: 10
},
sources_mode: "allowlist",
sources: [
{
source_id: "nixpkgs",
enabled: true,
priority: 100
}
],
policy: {
require_verified: true,
require_integrity: true,
deny_providers: ["appimage"],
deny_source_ids: ["untrusted-pkgx"]
}
});

POST /api/v1/run/profiles/{profile}/select

Section titled “POST /api/v1/run/profiles/{profile}/select”

Set the given profile as the currently active profile. Its defaults are applied to all subsequent requests that do not explicitly override them.

NameInTypeRequiredDescription
profilepathstringYesProfile name to select
{
"selected_profile": "work"
}
await client.run.profiles.selectProfile("work");

Partially update a profile configuration. Supports merging description, defaults, sources_mode, and sources fields.

NameInTypeRequiredDescription
profilepathstringYesProfile name

The body is a partial profile configuration. Only the fields included in the request are merged into the existing profile; omitted fields are left unchanged. See the request body of Create Profile for the full field list.

{
"name": "work",
"description": "Work profile: GUI only, verified packages (updated)",
"defaults": {
"os": "linux",
"kind": "gui",
"source": ["nix", "pkgx"],
"pick": "first",
"limit": 20
},
"sources_mode": "allowlist",
"sources": [
{
"source_id": "nixpkgs",
"enabled": true,
"priority": 200
}
],
"policy": {
"require_verified": true
}
}
await client.run.profiles.updateProfile("work", {
description: "Work profile: GUI only, verified packages (updated)",
defaults: {
source: ["nix", "pkgx"],
limit: 20
},
sources: [
{ source_id: "nixpkgs", enabled: true, priority: 200 }
]
});

Remove a profile by name. If the deleted profile was the selected (active) profile, the selection is cleared.

NameInTypeRequiredDescription
profilepathstringYesProfile name

Profile deleted successfully. No content is returned.

await client.run.profiles.deleteProfile("work");