smudge / nightlight

A CLI for configuring "Night Shift" on macOS ๐ŸŒ•๐ŸŒ–๐ŸŒ—๐ŸŒ˜๐ŸŒ‘
MIT License
203 stars 8 forks source link

nightlight

A CLI for configuring "Night Shift" on macOS ๐ŸŒ•๐ŸŒ–๐ŸŒ—๐ŸŒ˜๐ŸŒ‘

This crate also doubles as a Rust library. ๐Ÿฆ€

Why?

The "Night Shift" feature on macOS is a convenient, built-in feature that can theoretically accomplish most of what third-party alternatives (like f.luxยฎ) are capable of. However, as of now, there is no way to programmatically configure Night Shift (without entering the system preferences GUI), making its current usage more limited.

This nightlight CLI aims to enable such access via a few simple commands. (Or, alternatively, via library access for other Rust tools.)

Installing

via Homebrew

brew install smudge/smudge/nightlight

via Cargo

Set up Rust/Cargo and install from crates.io by running:

cargo install nightlight

Usage

First, make sure you are running macOS Sierra or newer.

Command-Line Interface

Manual On/Off:

Turn Night Shift on (until tomorrow/sunrise):

nightlight on

Turn Night Shift off:

nightlight off

View current on/off status:

nightlight status

Toggle on or off based on current status:

nightlight toggle

Controlling the Temperature:

View current temperature setting:

nightlight temp

Set color temperature (a number from 0 to 100):

nightlight temp 70

Scheduling:

View the current schedule:

nightlight schedule

Start schedule from sunset to sunrise:

nightlight schedule start

Start a custom schedule (in 12 or 24-hour time format):

nightlight schedule 19:45 6:00
nightlight schedule 7:45pm 6am

Stop the current schedule:

nightlight schedule off

Rust API

In addition to a CLI, nightlight can be pulled-in as a dependency for other Rust crates:

nightlight = "0.3.0"

Here's an example fn that toggles Night Shift off, changes the schedule and color temperature preference, and then toggles the feature back on:

extern crate nightlight;

use nightlight::{NightLight, Schedule};

fn main() {
    let night_light = NightLight::new();

    if night_light.status().is_on() {
        night_light.off().unwrap(),
    }

    println!("Setting schedule and temperature...");
    night_light.set_schedule(Schedule::SunsetToSunrise).unwrap();
    night_light.set_temp(70).unwrap();

    println!("Turning Night Shift on...");
    night_light.on().unwrap();
}

Todo:

Contributing

Thanks To:

License

nightlight is released under the MIT License.