Ghostty Ambient
Ambient light-aware theme selector for Ghostty with Bayesian preference learning.
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)
| File | Size | Uploaded | |
|---|---|---|---|
| ghostty_ambient-0.9.0.tar.gz | 67.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|