Configuration ​
Kloud Workspace follows the convention over configuration principle, shipping with sensible defaults.
Nearly every setting can be overridden with environment variables, giving you maximum flexibility.
All configuration is supplied exclusively through environment variables. No JSON, YAML, or CLI flags required. This makes the workspace fully stateless and cloud-friendly.
WS_<GROUP>
Prefix Convention
Variables that are consumed solely by Kloud Workspace start with WS_<GROUP>_
followed by the name (example: WS_ZSH_PLUGINS
).
When a variable is also consumed by an underlying tool, we keep its original name. Such variables can be reviewed in the global variables section.
Boolean Values
To enable a boolean environment variable, set it to a truthy value, either 1
or true
.
APT ​
WS_APT_ADDITIONAL_DEBIAN_REPOS
Appends additional repository lines to /etc/apt/sources.list
.
Accepts a semicolon-delimited list of full deb
entries.
Each entry is copied as is, you're responsible for correct suite
(bookworm
) and component names (main
, contrib
, ...).
- Type:
string
- Example: env
WS_APT_ADDITIONAL_DEBIAN_REPOS="deb http://one.test bookworm main; \ deb http://two.test bookworm main"
WS_APT_ADDITIONAL_GPG_KEYS
List of trusted gpg pairs.
Accepts a space-delimited list of name:url
pairs installed to
/etc/apt/keyrings
.
The key file is downloaded and saved as /etc/apt/keyrings/<name>.gpg
.
If you list more than one URL, separate them with spaces.
- Type:
string
- Example: env
WS_APT_ADDITIONAL_GPG_KEYS="name1:keys.example.com/key1.asc \ name2:keys.example.com/key2.gpg"
WS_APT_ADDITIONAL_PACKAGES
Additional APT packages installed during startup.
Accepts a space-delimited package list.
- Type:
string
- Example: env
WS_APT_ADDITIONAL_PACKAGES="cmake nano"
WS_APT_DISABLE_ADDITIONAL_REPO
Disables the additional third-party repository.
When true
, /etc/apt/sources.list.d/additional.sources
is completely
disabled.
- Type:
boolean
WS_APT_DISABLE_DEBIAN_REPO
Disables the default Debian repository.
When true
, /etc/apt/sources.list.d/debian.sources
is completely
disabled.
This is useful when you rely exclusively on a private mirror.
- Type:
boolean
WS_APT_UPDATE_CACHE
Since 0.0.20
Forces apt-get update
before any package action.
- Type:
boolean
Auth ​
WS_AUTH_DISABLE_SUDO
Since 0.0.20
Disables password-less sudo
.
- Type:
boolean
WS_AUTH_PASSWORD
Since 0.0.20
Plaintext password for web login.
Use only in ephemeral or local environments, never in shared or production deployments.
- Type:
string
- Example: env
WS_AUTH_PASSWORD="super_duper_secret"
WS_AUTH_PASSWORD_HASHED
Since 0.0.20
Argon2 hash used for web login.
Takes precedence over plaintext password when both are set.
- Type:
string
- Example: env
WS_AUTH_PASSWORD_HASHED="$argon2i$v=19$m=4096,t=3,p=1$...$..."
Enterprise CA ​
WS_CA_ADDITIONAL_CERT_ALLOW_INSECURE
Since 0.0.20
Allows insecure (non-TLS) connections to certificates.
Set only in fully trusted network environments such as CI where HTTPS termination is impossible.
- Type:
boolean
WS_CA_ADDITIONAL_CERT_ENDPOINTS
Since 0.0.20
URLs of additional CA certificates to trust.
Accepts a space-delimited URL list pointing to a PEM-encoded certificate.
- Type:
string
- Example: env
WS_CA_ADDITIONAL_CERT_ENDPOINTS="http://corp.com/ca.pem \ http://alt.com/root.crt"
Docker ​
WS_DOCKER_ENABLE_CLIENT
Since 0.0.20
Enables Docker inside the container.
- Type:
boolean
Editor ​
WS_EDITOR_ADDITIONAL_VS_EXTENSIONS
Since 0.0.20
Installs these Marketplace extension IDs at startup.
Accepts a space-delimited list of extensions.
- Type:
string
- Example: env
WS_EDITOR_ADDITIONAL_VS_EXTENSIONS="dbaeumer.vscode-eslint \ esbenp.prettier-vscode"
WS_EDITOR_ADDITIONAL_VS_EXTENSIONS_DIR
Installs .vsix
file found in this directory.
Use this when you package proprietary or pre-downloaded extensions.
- Type:
string
- Example: env
WS_EDITOR_ADDITIONAL_VS_EXTENSIONS_DIR="/additional-extensions"
WS_EDITOR_COMMENTS_DISABLE_FONT
Since 0.0.20
Disables the custom font used for code comments.
- Type:
boolean
WS_EDITOR_SCROLLBAR_SIZE
Since 0.0.21
Editor's scrollbar size.
You may pass either a bare number (6
, becomes 6px
) or
the full CSS value with the px
suffix (i.e. 6px
).
- Type:
string
- Default:
2px
Features ​
WS_FEATURES_ADDITIONAL_FEATURES
Since 0.0.20
Installs additional feature at startup.
Accepts a space-delimited list of features.
- Type:
string
- Example: env
WS_FEATURES_ADDITIONAL_FEATURES="dotnet jupyter"
WS_FEATURES_DIR
Since 0.20.0
Directory path where additional features are located.
Specify the full path to the directory containing the features to be loaded or referenced at startup.
- Type:
string
- Default:
/usr/share/workspace/features
Git ​
WS_GIT_CLONE_REPO
Since 0.0.20
Clones this repository into ${WS_SERVER_ROOT}
at startup.
The clone happens only if the target directory is empty. Supports HTTPS and SSH URLs (requires configured SSH keys).
- Type:
string
- Example: env
WS_GIT_CLONE_REPO="https://github.com/example/repo.git"
WS_GIT_CREDENTIAL_CACHE_TIMEOUT
Lifetime (seconds) of cached Git credentials.
Providing a value of -1
will sech the cache timeout to 1
year (31536000 seconds).
- Type:
integer
- Default:
3600
Helm ​
WS_HELM_PRELOAD_CACHE
Since 0.0.20
Restores the Helm repo cache.
- Type:
boolean
Server ​
WS_SERVER_PORT
Since 0.0.20
Port on which the web server listens.
- Type:
integer
- Default:
8080
WS_SERVER_PROXY_DOMAIN
Since 0.0.20
Domain suffix used to expose server's forwarded ports.
- Type:
string
- Example: env
WS_SERVER_PROXY_DOMAIN="ws.dev"
WS_SERVER_ROOT_DIR
Since 0.0.20
Root directory for the workspace.
This should only be overridden in extreme cases.
- Type:
string
- Default:
/workspace
WS_SERVER_SSL_CERT
Since 0.0.21
Path or inline PEM for the server certificate.
Accepts either:
- A full path to the mounted PEM-encoded certificate
- Literal certificate body starting with
-----BEGIN CERTIFICATE-----
(newline characters may be provided as\n
escapes).
When this is unset but WS_SERVER_SSL_KEY
is provided, the
key is reused to mint a self-signed certificate for
WS_SERVER_SSL_HOSTS
(or localhost
).
- Type:
string
- Example: env
WS_SERVER_SSL_CERT="/etc/workspace/ssl/server.crt"
WS_SERVER_SSL_HOSTS
Since 0.0.21
Space delimited DNS names for self-signed certificate.
- Type:
string
- Default:
localhost
- Example: env
WS_SERVER_SSL_HOSTS="ws.dev *.ws.dev"
WS_SERVER_SSL_KEY
Since 0.0.21
Path or inline PEM for the private key.
- Type:
string
- Example: env
WS_SERVER_SSL_KEY="/etc/workspace/ssl/server.key"
Terminal ​
WS_TERMINAL_PROMPT_HIDE_DOCKER_CONTEXT
Since 0.0.20
Hides Docker context info in the prompt.
- Type:
boolean
WS_TERMINAL_PROMPT_HIDE_HOSTNAME
Since 0.0.20
Hides the container hostname in the prompt.
- Type:
boolean
WS_TERMINAL_PROMPT_HIDE_KUBERNETES_CONTEXT
Since 0.0.20
Hides current Kubernetes context in the prompt.
- Type:
boolean
WS_TERMINAL_PROMPT_HIDE_NODEJS_VERSION
Since 0.0.20
Hides active Node.js version in the prompt.
- Type:
boolean
WS_TERMINAL_PROMPT_HIDE_PYTHON_VERSION
Since 0.0.20
Hides active Python version in the prompt.
- Type:
boolean
WS_TERMINAL_PROMPT_HIDE_USER
Since 0.0.20
Hides the current user in the prompt.
- Type:
boolean
Zsh ​
WS_ZSH_ADDITIONAL_PLUGINS
Since 0.0.20
Loads additional oh-my-zsh
plugins.
- Type:
string
- Example: env
WS_ZSH_ADDITIONAL_PLUGINS="php"
WS_ZSH_PLUGINS
Enables built-in oh-my-zsh
plugins.
- Type:
string
- Default:
1password docker encode64 git golang helm kubectl npm python pip ssh-agent yarn zsh-autosuggestions zsh-fzf-history-search
- Example: env
WS_ZSH_PLUGINS="kubectl npm python pip"
Deprecated ​
Name | Replacement | Since | Removal |
---|---|---|---|
WS_APT_UPDATE_REPOS | WS_APT_UPDATE_CACHE | v0.0.20 | v0.1.0 |
WS_CLONE_WORKSPACE_REPO | WS_GIT_CLONE_REPO | v0.0.20 | v0.1.0 |
WS_COMMENTS_DISABLE_FONT | WS_EDITOR_COMMENTS_DISABLE_FONT | v0.0.20 | v0.1.0 |
WS_CONFIGURE_DOCKER | WS_DOCKER_ENABLE_CLIENT | v0.0.20 | v0.1.0 |
WS_CONFIGURE_HELM | WS_HELM_PRELOAD_CACHE | v0.0.20 | v0.1.0 |
WS_DISABLE_SUDO | WS_AUTH_DISABLE_SUDO | v0.0.20 | v0.1.0 |
WS_EXTRA_CA_CERT_ENDPOINTS | WS_CA_ADDITIONAL_CERT_ENDPOINTS | v0.0.20 | v0.1.0 |
WS_EXTRA_CA_CERT_INSECURE | WS_CA_ADDITIONAL_CERT_ALLOW_INSECURE | v0.0.20 | v0.1.0 |
WS_EXTRA_FEATURES | WS_FEATURES_ADDITIONAL_FEATURES | v0.0.20 | v0.1.0 |
WS_EXTRA_VS_EXTENSIONS | WS_EDITOR_ADDITIONAL_VS_EXTENSIONS | v0.0.20 | v0.1.0 |
WS_EXTRA_VS_EXTENSIONS_DIR | WS_EDITOR_ADDITIONAL_VS_EXTENSIONS_DIR | v0.0.20 | v0.1.0 |
WS_PASSWORD | WS_AUTH_PASSWORD | v0.0.20 | v0.1.0 |
WS_PASSWORD_HASHED | WS_AUTH_PASSWORD_HASHED | v0.0.20 | v0.1.0 |
WS_PORT | WS_SERVER_PORT | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_DOCKER | WS_TERMINAL_PROMPT_HIDE_DOCKER_CONTEXT | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_HOSTNAME | WS_TERMINAL_PROMPT_HIDE_HOSTNAME | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_KUBERNETES | WS_TERMINAL_PROMPT_HIDE_KUBERNETES_CONTEXT | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_NODEJS | WS_TERMINAL_PROMPT_HIDE_NODEJS_VERSION | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_PYTHON | WS_TERMINAL_PROMPT_HIDE_PYTHON_VERSION | v0.0.20 | v0.1.0 |
WS_PROMPT_DISABLE_USER | WS_TERMINAL_PROMPT_HIDE_USER | v0.0.20 | v0.1.0 |
WS_PROXY_DOMAIN | WS_SERVER_PROXY_DOMAIN | v0.0.20 | v0.1.0 |
WS_ROOT | WS_SERVER_ROOT | v0.0.20 | v0.1.0 |
WS_ZSH_EXTRA_PLUGINS | WS_ZSH_ADDITIONAL_PLUGINS | v0.0.20 | v0.1.0 |
Global Variables ​
ENV | Description | Read More |
---|---|---|
EDITOR | Default terminal editor (default: code ) | |
GIT_COMMITTER_NAME | Name to be used in ~/.gitconfig | → |
GIT_COMMITTER_EMAIL | Email to be used in ~/.gitconfig | → |
PAGER | Default terminal pager (default: less ) | |
TZ | Define the timezone |