Skip to main content

Ghostty Ambient

Ambient light-aware theme selector for Ghostty with Bayesian preference learning.

ghostty-ambient demo

Quick Install

curl -fsSL https://raw.githubusercontent.com/gezibash/ghostty-ambient/main/install.sh | bash

This installs the package and sets up the learning daemon to run automatically.

Features

  • Ambient Light Sensing: Reads your Mac's ambient light sensor to suggest themes appropriate for current lighting
  • Bayesian Learning: Learns your color preferences over time—which themes you prefer in different contexts
  • Context-Aware: Considers time of day, weather, system dark/light mode, and power source
  • Theme Generation: Generates custom themes from your learned preferences (background, contrast, saturation)
  • Portable Profiles: Export/import your learned preferences across devices

Installation

# Using uv (recommended)
uv add ghostty-ambient

# Using pip
pip install ghostty-ambient

Quick Start

Interactive Theme Picker

ghostty-ambient

Shows a picker with theme recommendations based on current conditions. Select a theme to apply it.

Run the Learning Daemon

ghostty-ambient --daemon

Runs in the background, learning your preferences by observing which themes you use in different contexts. Only records when Ghostty is the frontmost application.

Generate Your Ideal Theme

ghostty-ambient --ideal

Generates and applies a custom theme optimized for your current context, based on learned preferences:

  • Background color (light vs dark)
  • Contrast (how much difference between background and foreground)
  • Chroma (color saturation)

CLI Reference

ghostty-ambient              # Interactive theme picker
ghostty-ambient --ideal      # Generate and apply optimal theme
ghostty-ambient --set NAME   # Set theme by name
ghostty-ambient --stats      # Show learned preferences
ghostty-ambient --export-profile FILE  # Export preferences
ghostty-ambient --import-profile FILE  # Import preferences
ghostty-ambient --favorite   # Mark current theme as favorite
ghostty-ambient --dislike    # Mark current theme as disliked
ghostty-ambient --sensors    # Show available light sensors
ghostty-ambient --setup      # Configure location (for weather)

Daemon Management

ghostty-ambient --status              # Check daemon status
ghostty-ambient --start               # Start daemon (5m interval)
ghostty-ambient --start --freq 1m     # Start with custom interval
ghostty-ambient --stop                # Stop daemon
ghostty-ambient --restart             # Restart daemon
ghostty-ambient --logs                # Tail daemon logs

Run Daemon Inline

ghostty-ambient --daemon              # Run daemon in foreground
ghostty-ambient --daemon --interval 30s  # Custom interval

How It Works

Bayesian Preference Learning

The system learns three key properties of your theme preferences:

Property What It Learns
Background L Light vs dark theme preference (LAB lightness)
Contrast Preferred difference between background and foreground
Chroma Preferred color saturation in the palette

These are learned per-context:

  • Time of day (morning, afternoon, evening, night)
  • Ambient light (dim, office, bright, daylight)
  • System appearance (light mode, dark mode)
  • Power source (AC, battery)

View Your Learned Preferences

ghostty-ambient --stats
By Time of Day
╭───────────┬───────┬────┬──────────┬────────┬─────╮
│           │ Theme │  L │ Contrast │ Chroma │   n │
├───────────┼───────┼────┼──────────┼────────┼─────┤
│ Morning   │ light │ 97 │       84 │     49 │ 124 │
│ Afternoon │ light │ 97 │       86 │     50 │ 121 │
╰───────────┴───────┴────┴──────────┴────────┴─────╯

Portable Profiles

Export your learned preferences:

ghostty-ambient --export-profile ~/my-prefs.json

Import on another device:

ghostty-ambient --import-profile ~/my-prefs.json

Platform Support

Platform Ambient Light Sensor Theme Detection
macOS Native (via als helper) Full support
Linux Via iio-sensor-proxy Full support
Windows Via Windows SDK Partial support

macOS Ambient Light Sensor

The bundled als binary reads the ambient light sensor. To compile from source:

clang -framework IOKit -framework CoreFoundation als.m -o als

Daemon Management

The install script sets up a background daemon that learns your preferences. Use these commands to manage it:

ghostty-ambient --status              # Check if daemon is running
ghostty-ambient --start               # Start the daemon (default 5m interval)
ghostty-ambient --start --freq 30s    # Start with custom interval
ghostty-ambient --stop                # Stop the daemon
ghostty-ambient --restart             # Restart the daemon
ghostty-ambient --logs                # Tail daemon logs (Ctrl+C to exit)

Uninstall

curl -fsSL https://raw.githubusercontent.com/gezibash/ghostty-ambient/main/uninstall.sh | bash

Your learned preferences are preserved in ~/.config/ghostty-ambient/.

Development

# Clone and install dev dependencies
git clone https://github.com/gezibash/ghostty-ambient
cd ghostty-ambient
uv sync --all-extras

# Run tests
uv run pytest

# Run with verbose output
uv run ghostty-ambient --daemon --interval 30s

License

MIT License - see LICENSE for details.

Release files for ghostty-ambient 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ghostty-ambient 0.9.0
File Size Uploaded
ghostty_ambient-0.9.0.tar.gz 67.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ghostty-ambient 0.9.0
File Interpreter ABI Platform
ghostty_ambient-0.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 148.2 kB

Release files / ghostty_ambient-0.9.0.tar.gz

Download URL ghostty_ambient-0.9.0.tar.gz
Size 67.8 kB
Tags Source
SHA-256 checksum
How to use checksums
44313cc6d04c3d1524084f14af62cc9b69e67991b9946b09cca8e202659f27dd
BLAKE2b-256 checksum
How to use checksums
6a690e6eeb40d4b371b612556bc23c1de866160f335e4c299414708e041ac63a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ghostty_ambient-0.9.0-py3-none-any.whl

Download URL ghostty_ambient-0.9.0-py3-none-any.whl
Size 80.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
84b7a1b7c404eaad578c43c9674570170735a6b0b2c1ab75a63491f3258c9b70
BLAKE2b-256 checksum
How to use checksums
3abf9dddc2b0c8ce081216eb7657b840f30dcd4cb7f5088dd63f828fde4749e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.9.0 This release

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page