Configuration Schema Reference
The configuration schema is still being refined. Options may be added, renamed, or removed between releases as we finalize the feature set.
Complete reference for the Invowk™ configuration file schema.
Overview
The configuration file uses CUE format and is located at:
| Platform | Location |
|---|---|
| Linux | ~/.config/invowk/config.cue |
| macOS | ~/Library/Application Support/invowk/config.cue |
| Windows | %APPDATA%\invowk\config.cue |
Configuration files are validated as closed structs, so unknown fields cause a validation error.
Schema Definition
// Root configuration structure
#Config: {
container_engine?: "podman" | "docker"
includes?: [...#IncludeEntry]
default_runtime?: "native" | "virtual" | "container"
virtual_shell?: #VirtualShellConfig
ui?: #UIConfig
container?: #ContainerConfig
}
// Include entry for modules
#IncludeEntry: {
path: string // Must end with .invkmod
alias?: string // Optional, for collision disambiguation
}
// Virtual shell configuration
#VirtualShellConfig: {
enable_uroot_utils?: bool
}
// UI configuration
#UIConfig: {
color_scheme?: "auto" | "dark" | "light"
verbose?: bool
interactive?: bool
}
// Container configuration
#ContainerConfig: {
auto_provision?: #AutoProvisionConfig
}
// Auto-provisioning configuration
#AutoProvisionConfig: {
enabled?: bool
binary_path?: string
includes?: [...#IncludeEntry]
inherit_includes?: bool
cache_dir?: string
}
Config
The root configuration object.
#Config: {
container_engine?: "podman" | "docker"
includes?: [...#IncludeEntry]
default_runtime?: "native" | "virtual" | "container"
virtual_shell?: #VirtualShellConfig
ui?: #UIConfig
container?: #ContainerConfig
}
container_engine
Type: "podman" | "docker"
Required: No
Default: "podman"
Specifies which container runtime to use for container-based command execution.
container_engine: "podman"
If the preferred engine is not available, Invowk falls back to the other engine when container runtime is needed.
includes
Type: [...#IncludeEntry]
Required: No
Default: []
Additional modules to include in command discovery. Each entry specifies a path to an *.invkmod directory with an optional alias for collision disambiguation.
includes: [
{path: "~/.invowk/modules/tools.invkmod"},
{path: "~/projects/shared.invkmod", alias: "shared"},
{path: "/opt/company/tools.invkmod"},
]
Path requirements:
- Paths must be absolute and end with
.invkmod - Non-existent paths are silently ignored
- Duplicate paths are rejected
Alias rules:
- Aliases are optional, for collision disambiguation
- Each alias must be unique across all includes entries
- Aliases override the module's declared identifier for collision resolution
Discovery priority (highest to lowest):
- Current directory invkfile
- Local modules (
*.invkmodin current directory) ~/.invowk/cmds- Configured
includes(in order)
default_runtime
Type: "native" | "virtual" | "container"
Required: No
Default: "native"
Sets the global default runtime mode for commands that don't specify a preferred runtime.
default_runtime: "virtual"
| Value | Description |
|---|---|
"native" | Execute using the system's native shell |
"virtual" | Execute using Invowk's built-in shell interpreter |
"container" | Execute inside a container |
virtual_shell
Type: #VirtualShellConfig
Required: No
Default: {}
Configuration for the virtual shell runtime.
virtual_shell: {
enable_uroot_utils: true
}
ui
Type: #UIConfig
Required: No
Default: {}
User interface configuration.
ui: {
color_scheme: "dark"
verbose: false
interactive: false
}
container
Type: #ContainerConfig
Required: No
Default: {}
Container runtime configuration.
container: {
auto_provision: {
enabled: true
}
}
VirtualShellConfig
Configuration for the virtual shell runtime (mvdan/sh).
#VirtualShellConfig: {
enable_uroot_utils?: bool
}
enable_uroot_utils
Type: bool
Required: No
Default: true
Enables u-root utilities in the virtual shell environment. When enabled, provides additional commands beyond basic shell builtins.
virtual_shell: {
enable_uroot_utils: true
}
Available utilities when enabled (15 total):
- File operations (7):
cat,cp,ls,mkdir,mv,rm,touch - Text processing (8):
head,tail,wc,grep,sort,uniq,cut,tr
UIConfig
User interface configuration.
#UIConfig: {
color_scheme?: "auto" | "dark" | "light"
verbose?: bool
interactive?: bool
}
color_scheme
Type: "auto" | "dark" | "light"
Required: No
Default: "auto"
Sets the color scheme for terminal output.
ui: {
color_scheme: "auto"
}
| Value | Description |
|---|---|
"auto" | Detect from terminal (respects COLORTERM, TERM, etc.) |
"dark" | Colors optimized for dark terminals |
"light" | Colors optimized for light terminals |
verbose
Type: bool
Required: No
Default: false
Enables verbose output by default for all commands.
ui: {
verbose: true
}
Equivalent to always passing --invk-verbose on the command line.
interactive
Type: bool
Required: No
Default: false
Enables interactive mode by default (alternate screen buffer with PTY).
ui: {
interactive: true
}
ContainerConfig
Configuration for container runtime behavior.
#ContainerConfig: {
auto_provision?: #AutoProvisionConfig
}
auto_provision
Type: #AutoProvisionConfig
Required: No
Default: {}
Controls automatic provisioning of invowk resources into containers.
container: {
auto_provision: {
enabled: true
binary_path: "/usr/local/bin/invowk"
includes: [
{path: "/opt/company/modules/tools.invkmod"},
]
inherit_includes: true
cache_dir: "/tmp/invowk/provision"
}
}
With auto-provisioning enabled, Invowk builds a cached, derived image by attaching a small provisioned layer on top of your base image. This runs for every container execution (interactive or not); if provisioning fails, Invowk warns and uses the base image.
AutoProvisionConfig
Auto-provisioning configuration for container images.
#AutoProvisionConfig: {
enabled?: bool
binary_path?: string
includes?: [...#IncludeEntry]
inherit_includes?: bool
cache_dir?: string
}
enabled
Type: bool
Required: No
Default: true
Enables auto-provisioning of the invowk binary and modules into containers.
binary_path
Type: string
Required: No
Default: (empty; uses the running invowk binary)
Overrides the path to the invowk binary to provision.
includes
Type: [...#IncludeEntry]
Required: No
Default: []
Additional modules to provision into containers. Uses the same #IncludeEntry format as root includes (each entry has a path ending with .invkmod and an optional alias).
inherit_includes
Type: bool
Required: No
Default: true
When true, the root-level includes entries are automatically inherited by auto-provisioning. Set to false to provision only the modules explicitly listed in container.auto_provision.includes.
cache_dir
Type: string
Required: No
Default: ~/.cache/invowk/provision
Overrides the cache directory for provisioned image metadata.
Complete Example
A fully documented configuration file:
// Invowk Configuration File
// =========================
// Location: ~/.config/invowk/config.cue
// Container Engine
// ----------------
// Which container runtime to use: "podman" or "docker"
container_engine: "podman"
// Includes
// --------
// Additional modules to include in discovery.
// Each entry specifies a path to an *.invkmod directory.
// Modules may have an optional alias for collision disambiguation.
includes: [
// Personal modules
{path: "~/.invowk/modules/tools.invkmod"},
// Team shared module (with alias)
{path: "~/work/shared.invkmod", alias: "team"},
// Organization-wide module
{path: "/opt/company/tools.invkmod"},
]
// Default Runtime
// ---------------
// The runtime to use when a command doesn't specify one
// Options: "native", "virtual", "container"
default_runtime: "native"
// Virtual Shell Configuration
// ---------------------------
// Settings for the virtual shell runtime (mvdan/sh)
virtual_shell: {
// Enable u-root utilities for more shell commands
// Provides ls, cat, grep, etc. in the virtual environment
enable_uroot_utils: true
}
// UI Configuration
// ----------------
// User interface settings
ui: {
// Color scheme: "auto", "dark", or "light"
// "auto" detects from terminal settings
color_scheme: "auto"
// Enable verbose output by default
// Same as always passing --invk-verbose
verbose: false
// Enable interactive mode by default
interactive: false
}
// Container provisioning
// ----------------------
container: {
auto_provision: {
enabled: true
}
}
Minimal Configuration
If you're happy with defaults, a minimal config might be:
// Just override what you need
container_engine: "docker"
Or even an empty file (all defaults):
// Empty config - use all defaults
Validation
You can validate your configuration file using CUE:
cue vet ~/.config/invowk/config.cue
Or check it with Invowk:
invowk config show
If there are any errors, Invowk will report them when loading the configuration.