diff options
| author | Robert Günzler <r@gnzler.io> | 2021-02-11 13:45:25 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2021-02-11 13:45:51 +0100 |
| commit | 30451238df36d238fea816f01ca987853c6562a5 (patch) | |
| tree | ee8d50d00b30cf291f34fb989f839e3492868f48 /.config/waybar/modules/gammastep.go | |
| parent | ef2e08b2b9eead9119f916464182fca652ef3fef (diff) | |
waybar: update 2021-02-11T12:46:11Z
Diffstat (limited to '.config/waybar/modules/gammastep.go')
| -rw-r--r-- | .config/waybar/modules/gammastep.go | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/.config/waybar/modules/gammastep.go b/.config/waybar/modules/gammastep.go new file mode 100644 index 0000000..c855e1b --- /dev/null +++ b/.config/waybar/modules/gammastep.go @@ -0,0 +1,94 @@ +// usage: +// go build -o waybar-gammastep gammastep.go +package main + +import ( + "encoding/json" + "log" + "os" + "os/exec" + "os/signal" + "strings" + + . "syscall" +) + +func main() { + var ( + update = make(chan os.Signal, 1) + cancel = make(chan os.Signal, 1) + ) + signal.Notify(update, SIGUSR1, SIGUSR2, SIGHUP) + signal.Notify(cancel, SIGTERM, SIGINT) + + // could use golang.org/x/sys/unix.Prctl here + // but I want to avoid the dependency + if _, _, e := Syscall6(SYS_PRCTL, + uintptr(PR_SET_PDEATHSIG), + uintptr(SIGTERM), + 0, 0, 0, 0); e != 0 { + log.Printf("error: %v", e) + os.Exit(1) + } + // if err := Prctl(PR_SET_PDEATHSIG, + // SIGTERM, + // 0, 0, 0); err != nil { + // fmt.Fprintln(os.Stderr, err) + // os.Exit(1) + // } + + lookup() + for { + select { + case sig := <-update: + switch sig { + case SIGUSR1: + // redshift off + printJson("day", "day") + case SIGUSR2: + // redshift on + printJson("night", "night") + case SIGHUP: + lookup() + } + case <-cancel: + log.Printf("%v exiting\n", os.Args[0]) + os.Exit(0) + } + } +} + +func printJson(state, tooltip string) { + _ = json.NewEncoder(os.Stdout).Encode(map[string]interface{}{ + "class": state, + "alt": state, + "tooltip": "gammastep: " + tooltip, + "text": state, + }) +} + +func lookup() { + b, err := exec.Command("gammastep", "-p").CombinedOutput() + if err != nil { + log.Printf("error: %v", err) + return + } + var period string + var fds = strings.Fields(string(b)) + for idx, f := range fds { + if f == "Period:" { + period = fds[idx+1] + break + } + } + switch period { + case "Night": + printJson("night", "night") + case "Transition": + printJson("night", "transition") + case "Daytime": + printJson("day", "day") + default: + printJson("unknown", "unknown") + } +} |