Skip to main content

Ambient light-aware Ghostty theme selector with Bayesian preference learning

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ghostty_ambient-0.8.2.tar.gz (59.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ghostty_ambient-0.8.2-py3-none-any.whl (71.2 kB view details)

Uploaded Python 3

File details

Details for the file ghostty_ambient-0.8.2.tar.gz.

File metadata

  • Download URL: ghostty_ambient-0.8.2.tar.gz
  • Upload date:
  • Size: 59.0 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for ghostty_ambient-0.8.2.tar.gz
Algorithm Hash digest
SHA256 deba04bf74422840081f556b69f1454323641aecaab4ff7c0e58d91d5698c8a6
MD5 2227ef1909b6a2fb81f9b827b15b0ef9
BLAKE2b-256 98c79cc30d5edf6465440a4d035d30a9ff4b00509134bbad833d3f01ae6758ec

See more details on using hashes here.

File details

Details for the file ghostty_ambient-0.8.2-py3-none-any.whl.

File metadata

  • Download URL: ghostty_ambient-0.8.2-py3-none-any.whl
  • Upload date:
  • Size: 71.2 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for ghostty_ambient-0.8.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5118bac8514bd736c5d07d6161524551b44d7f6dba6947b7ec6a0465e30cf3f4
MD5 f1f053bad93fd3831677f5e35225fd78
BLAKE2b-256 45c868f65cd6467f37d8a0b05e120147f27c6148b183361c5f24842a5ac96009

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page