Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/smudge/nightlight
A CLI for configuring "Night Shift" on macOS 🌕🌖🌗🌘🌑
https://github.com/smudge/nightlight
Last synced: 18 days ago
JSON representation
A CLI for configuring "Night Shift" on macOS 🌕🌖🌗🌘🌑
- Host: GitHub
- URL: https://github.com/smudge/nightlight
- Owner: smudge
- License: mit
- Created: 2020-04-21T02:34:37.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-04-06T05:15:41.000Z (over 3 years ago)
- Last Synced: 2024-10-14T00:31:15.475Z (about 1 month ago)
- Language: Rust
- Homepage:
- Size: 104 KB
- Stars: 202
- Watchers: 5
- Forks: 8
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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®](https://justgetflux.com/)) 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](https://doc.rust-lang.org/book/ch01-01-installation.html)
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:```rust
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:
- [X] Ability to see current status of Night Shift
- [X] Ability to enable/disable sunrise/sundown schedule
- [X] Ability to enable/disable custom schedules
- [X] Ensure that changing schedule doesn't affect on/off state.
- [X] Make time display as properly-formatted 12-hour time
- [X] Use system config for time parse/format (12 vs 24).
- [X] API improvements
- [ ] Consider command outputs: concise, human-readable, machine-parsable.
- [ ] Full lib documentation
- [ ] Test coverage of schedule/time parsing.
- [ ] Tests that use fake/stub ObjC library.
- [ ] Support for "Automatically adjust brightness" feature.
- [X] Other release mechanisms (like `brew`)
- [ ] Cross-platform support (e.g. Windows' "Night Light")## Contributing
* Check the issue tracker and consider creating a new issue.
* Fork the project and create a new branch for your contribution.
* Write, commit, and push your contribution to your branch.
* Make sure the project builds (`cargo build`) and functionality still works as expected.
* Submit a pull request.## Thanks To:
* The team at Apple for introducing this feature in macOS Sierra
* GitHub user `jenghis` for the (now archived) [nshift](https://github.com/jenghis/nshift) repo/CLI
* The maintainers of the Rust [objc crate](https://github.com/SSheldon/rust-objc)
* Carol Nichols and Steve Klabnik for the [official book](https://doc.rust-lang.org/book/) on Rust
* ABH, AF, CB, JP, and MK for brainstorming crate names with me## License
`nightlight` is released under the [MIT License](LICENSE).