# HG changeset patch # User Steve Losh # Date 1560202419 14400 # Node ID f82982006717aa69559d4715850c58dd40759539 # Parent 4bff92ca529786e9b18064c404ceb363765b6ad0 More diff -r 4bff92ca5297 -r f82982006717 bin/saym --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/saym Mon Jun 10 17:33:39 2019 -0400 @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +set -euo pipefail + +say "$@" +echom "$@" diff -r 4bff92ca5297 -r f82982006717 bin/slock-post-lock --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/slock-post-lock Mon Jun 10 17:33:39 2019 -0400 @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +touch /tmp/.posture-pause diff -r 4bff92ca5297 -r f82982006717 bin/slock-post-unlock --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/slock-post-unlock Mon Jun 10 17:33:39 2019 -0400 @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +rm -f /tmp/.posture-pause diff -r 4bff92ca5297 -r f82982006717 bin/tea --- a/bin/tea Mon Jun 10 12:11:04 2019 -0400 +++ b/bin/tea Mon Jun 10 17:33:39 2019 -0400 @@ -3,4 +3,4 @@ set -euo pipefail sleep "$1"s -say 'The tea is ready.' +saym 'The tea is ready.' diff -r 4bff92ca5297 -r f82982006717 stumpwmrc --- a/stumpwmrc Mon Jun 10 12:11:04 2019 -0400 +++ b/stumpwmrc Mon Jun 10 17:33:39 2019 -0400 @@ -82,11 +82,99 @@ `(case *host* ,@clauses)) -(defun speak (text) +(defcommand speak (text) + ((:string "Text: ")) (message text) (run-shell-command (format nil "~~/src/dotfiles/bin/say '~A'" text))) +(defun seconds->hours (seconds) + (/ seconds 60 60)) + +(defun hours->seconds (hours) + (* hours 60 60)) + + +;;;; Posture ------------------------------------------------------------------ +(defparameter *posture-thread* nil) +(defparameter *posture-should-stop* nil) +(defparameter *posture-paused* nil) +(defparameter *posture-snooze* nil) +(defparameter *posture-current* 30) +(defparameter *posture-min* 5) +(defparameter *posture-max* (hours->seconds 2)) + +(defun posture-paused-p () + ;; this is the dumbest shit ever, but I can't figure out how to call into + ;; stumpish from the setguid slock process + (or *posture-paused* (probe-file "/tmp/.posture-pause"))) + +(defun posture-snoozed-p () + (and *posture-snooze* + (< (get-universal-time) *posture-snooze*))) + +(defcommand posture-pause () () + (message "Pausing posture.") + (setf *posture-paused* t)) + +(defcommand posture-unpause () () + (message "Unpausing posture.") + (setf *posture-paused* nil)) + +(print *posture-paused*) + +(defcommand posture-toggle-pause () () + (if (setf *posture-paused* (not *posture-paused*)) + (message "Posture is now paused.") + (message "Posture is now unpaused."))) + +(defcommand posture-snooze (hours) + ((:number "Snooze for how many hours? ")) + (setf *posture-snooze* (+ (hours->seconds hours) (get-universal-time)))) + +(defun posture-update (delta) + (setf *posture-current* + (clamp *posture-min* *posture-max* (* *posture-current* delta)))) + +(defun posture-query () + (speak "Is your posture okay?")) + +(defcommand posture-answer-yes () () + (message "Good work.") + (posture-update 3/2)) + +(defcommand posture-answer-no () () + (message "Try harder.") + (posture-update 1/2)) + +(defun posture% () + (if *posture-should-stop* + nil + (progn (unless (or (posture-paused-p) (posture-snoozed-p)) + (posture-query) + (sleep 10)) + *posture-current*))) + +(defun posture-running-p () + (and *posture-thread* (sb-thread:thread-alive-p *posture-thread*))) + +(defcommand posture-stop () () + (setf *posture-should-stop* t)) + +(defcommand posture-start () () + (setf *posture-should-stop* nil) + (if (posture-running-p) + (message "Posture loop was already running.") + (setf *posture-thread* + (sb-thread:make-thread + (lambda () + (loop :for seconds = (posture%) + :while seconds + :do (sleep seconds)) + (message "Posture loop exiting.")) + :name "Posture thread")))) + + ;;;; Regroup ------------------------------------------------------------------ (defparameter *class-groups* '(("jetbrains-idea-ce" . "ij")) @@ -400,7 +488,13 @@ (define-top-keys ;; timers ("s-F7" "tea-timer") ("s-F9" "run-pop-timer") - ("s-F10" "set-pop-timer")) + ("s-F10" "set-pop-timer") + ("s-p" "posture-start") + ("s-P" "posture-stop") + ("s-y" "posture-answer-yes") + ("s-n" "posture-answer-no") + ("s-\\" "posture-toggle-pause") + ("s-o" "posture-snooze")) (define-top-keys ;; stump ("Pause" "exec st") ; jesus christ