Customization

The Jitzu shell supports theme customization, startup configuration, aliases, and path labels to personalize your workflow.

Theme Configuration

Colors are controlled by ~/.jitzu/colours.json. A default configuration is written automatically on first launch. All values are hex color strings (e.g. #87af87).

json
{
"syntax": {
  "command": "#87af87",
  "keyword": "#87afd7",
  "string": "#afaf87",
  "flag": "#87afaf",
  "pipe": "#af87af",
  "boolean": "#d7af87"
},
"git": {
  "branch": "#808080",
  "dirty": "#d7af87",
  "staged": "#87af87",
  "untracked": "#808080",
  "remote": "#87afaf"
},
"prompt": {
  "directory": "#87d7ff",
  "arrow": "#5faf5f",
  "error": "#d75f5f",
  "user": "#5f8787",
  "duration": "#d7af87",
  "time": "#808080",
  "jobs": "#87afaf"
},
"ls": {
  "directory": "#87afd7",
  "executable": "#87af87",
  "archive": "#d75f5f",
  "media": "#af87af",
  "code": "#87afaf",
  "config": "#d7af87",
  "project": "#d7af87",
  "size": "#87af87",
  "dim": "#808080"
},
"error": "#d75f5f",
"prediction": {
  "text": "#808080",
  "selected": {
    "bg": "#303050",
    "fg": "#ffffff"
  }
},
"selection": {
  "bg": "#264f78",
  "fg": "#ffffff"
},
"dropdown": {
  "gutter": "#404040",
  "status": "#5f87af"
}
}

Color Categories

  • syntax — live input highlighting (commands, keywords, strings, flags, pipes, booleans)
  • git — prompt git status indicators (branch, dirty, staged, untracked, remote ahead/behind)
  • prompt — prompt elements (directory, arrow, error state, user, duration, clock, job count)
  • ls — file listing colors by type (directories, executables, archives, media, code, config, project files)
  • prediction — history prediction ghost text and dropdown selection
  • selection — text selection highlight
  • dropdown — completion dropdown gutter and status bar

Edit any value and restart the shell to apply changes. Malformed entries are silently ignored and fall back to defaults.

Windows Terminal Tabs

Jitzu reports the current working directory to Windows Terminal using its supported OSC 9;9 integration sequence. It also sets the tab title with the standard OSC 2 sequence so the active tab can identify the current directory.

Windows Terminal does not support dynamically changing the active tab color through ANSI or OSC escape sequences. Jitzu therefore does not emit iTerm2-only tab color sequences such as OSC 6, because Windows Terminal would ignore them.

For tab colors in Windows Terminal, use static profile or launch-time configuration:

json
{
"profiles": {
  "defaults": {
    "tabColor": "#87af87"
  }
}
}
Shell
wt new-tab --tabColor "#87af87"

Startup Configuration

The file ~/.jitzu/config.jz is executed automatically when the shell starts, similar to .bashrc or .zshrc. Each line is run as a shell command, so you can set aliases, labels, environment variables, and define Jitzu functions that will be available in every session.

Jitzu
// ~/.jitzu/config.jz

// Set up aliases
alias ll="ls -la"
alias gs="git status"
alias gp="git push"

// Set up path labels
label git ~/git
label docs ~/Documents

// Set environment variables
export EDITOR=nvim
export DOTNET_CLI_TELEMETRY_OPTOUT=1

// Define helper functions
fun greet(): String {
  `Good morning, {whoami}!`
}

Lines starting with // are treated as comments and skipped.

Find Ignore List

find skips .git and detects project types to exclude their generated folders:

Project markerFolders skipped
Cargo.toml (Rust)release
*.csproj, *.fsproj, *.vbproj, *.sln, *.slnx (.NET)bin, obj
package.json (Node)node_modules

Markers apply to their folder and descendants, including searches started inside a project. Nested projects are detected during traversal, so sibling projects keep their own rules. Multiple project types can apply together. Detection stops at repository boundaries. Without a matching project marker, these folder names remain searchable.

dist remains searchable, even when it is listed in .gitignore.

Set JITZU_FIND_IGNORE in ~/.jitzu/config.jz to replace all project-aware defaults:

Shell
export JITZU_FIND_IGNORE=".git,node_modules,.cache"

The comma-separated patterns match folder names at any depth and support * and ? wildcards. They do not exclude files with matching names. Changes made with export take effect on the next search. Use export JITZU_FIND_IGNORE="," for an empty list, or unset JITZU_FIND_IGNORE to restore the defaults.

Shell
find . --name "Float.Setup.exe"
find . --name "Float.Setup.exe" --include-ignored
find . --gitignore

--gitignore (or -i) additionally enables the repository’s .gitignore folder filter. --include-ignored bypasses both filters, regardless of flag order. For jz -c, which does not execute config.jz, set the environment variable in the calling shell.

Aliases

Aliases map short names to longer commands. They persist to disk across sessions and are automatically expanded when the alias name appears as the first word of a command.

Shell
> alias ll="ls -la"
Alias set: ll → ls -la

> ll
d-----       -  Jan 15 09:44  src/
-a-r--   2.5K  Jan 15 14:23  Program.cs

> aliases
ll → ls -la
gs → git status

> unalias ll
Alias removed: ll

Aliases are stored in the application data directory (e.g. ~/.local/share/Jitzu/aliases.txt on Linux or %APPDATA%/Jitzu/aliases.txt on Windows).

Path Labels

Labels map short names to directory paths. Use a label by appending a colon, e.g. git:. Labels work in cd, file arguments, and tab completion.

Shell
> label api ~/projects/api
Label set: api → /home/simon/projects/api

> cd api:
> pwd
/home/simon/projects/api

> cd api:src/controllers
> cat api:README.md

> labels
api → /home/simon/projects/api
docs → /home/simon/Documents

> unlabel api
Label removed: api

Labels expand transparently in file arguments, so commands like cat api:src/Program.cs and ls api: work as expected. Tab completion also understands label prefixes.