Skip to content

Switch Ghostty and Neovim themes based on sunrise/sunset times

Notifications You must be signed in to change notification settings

lucianlavric/suntheme

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

suntheme

image

Automatically switch Ghostty and Neovim themes based on sunrise/sunset times.

Installation

Homebrew (macOS)

brew install lucianlavric/tap/suntheme

Linux

curl -fsSL https://raw.githubusercontent.com/lucianlavric/suntheme/main/install.sh | bash

Cargo (all platforms)

cargo install suntheme

Note: After cargo install, ensure ~/.cargo/bin is in your PATH:

echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc  # or ~/.zshrc
source ~/.bashrc

Quick Start

# Initial setup - configures location and themes
suntheme init

# Start automatic theme switching daemon
suntheme start

Commands

Command Description
suntheme init Interactive setup for location and themes
suntheme start Start daemon for automatic switching
suntheme stop Stop the daemon
suntheme status Show daemon status and current theme
suntheme toggle Toggle between light/dark
suntheme set <light|dark> Set specific mode
suntheme sun Display today's sunrise/sunset times
suntheme themes Change theme configuration

How it works

  1. Location-based sun times: Fetches sunrise/sunset times from sunrise-sunset.org API based on your location
  2. Daily caching: Sun times are cached daily to minimize API calls
  3. Ghostty: Modifies your Ghostty config file and triggers a reload
  4. Neovim: Writes to a state file that Neovim watches for changes

Requirements

  • macOS: Accessibility permissions required for Ghostty auto-reload (prompted during setup)
  • Linux: Auto-reload works via SIGUSR2 signal (no extra dependencies)
  • Neovim 0.9+: For file watching support
  • Ghostty: Any recent version

Configuration

Config is stored at:

  • macOS: ~/Library/Application Support/suntheme/config.toml
  • Linux: ~/.config/suntheme/config.toml
[location]
latitude = 43.6532
longitude = -79.3832

[themes.ghostty]
light = "tokyonight-day"
dark = "tokyonight"

[themes.neovim]
light = "tokyonight-day"
dark = "tokyonight"

Recommended Themes

Themes with both Ghostty and Neovim support:

Theme Ghostty (dark/light) Neovim Plugin
Tokyo Night tokyonight / tokyonight-day folke/tokyonight.nvim
Gruvbox gruvbox-dark / gruvbox-light ellisonleao/gruvbox.nvim
Catppuccin catppuccin-mocha / catppuccin-latte catppuccin/nvim
Nord nord shaunsingh/nord.nvim
Dracula dracula dracula/vim
Rose Pine rose-pine / rose-pine-dawn rose-pine/neovim
Kanagawa kanagawa rebelot/kanagawa.nvim
Solarized solarized-dark / solarized-light maxmx03/solarized.nvim

Note: For Neovim, use the same theme name for both light and dark (e.g., gruvbox). The background setting handles the variant automatically.

Roadmap

  • Windows support
  • Linux support
  • iTerm2 support
  • VS Code support
  • System theme support
  • Gradient transition between light and dark themes to mimic sunrise/sunset

License

MIT

About

Switch Ghostty and Neovim themes based on sunrise/sunset times

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •