diff --git a/.stumpwm.d/modules b/.stumpwm.d/modules index 19c231b..6d4584f 160000 --- a/.stumpwm.d/modules +++ b/.stumpwm.d/modules @@ -1 +1 @@ -Subproject commit 19c231b2518efe71cb6dade3ad4cf573377902c3 +Subproject commit 6d4584f01dec0143a169186df1608860d1aa1ef0 diff --git a/.zshrc b/.zshrc index 5cc828f..10034c5 100644 --- a/.zshrc +++ b/.zshrc @@ -50,4 +50,4 @@ alias gl="git log" alias sbcl="rlwrap sbcl" # Machine specific config -source ~/scripts/machine-specific-zsh/$(hostname).zsh +[ -f ~/scripts/machine-specific-zsh/$(hostname).zsh ] && source ~/scripts/machine-specific-zsh/$(hostname).zsh diff --git a/scripts/guestbook/guestbook.lisp b/scripts/guestbook/guestbook.lisp new file mode 100644 index 0000000..87a875e --- /dev/null +++ b/scripts/guestbook/guestbook.lisp @@ -0,0 +1,26 @@ +(ql:quickload :woo) + +(defparameter *icon-file* "~/scripts/guestbook/icon.png") +(defparameter *message-list-file* "~/scripts/guestbook/list.txt") + +(defparameter *routes* (make-hash-table :test 'equal)) +(defparameter *rate-limits* (make-hash-table :test 'equal)) +(defparameter *not-seen-messages* '()) + +(defun send-alert (msg) + (uiop:run-program `("notify-send" "--icon" ,*icon-file* ,msg))) + + +(defun add-message (env) + + + +(woo:run + (lambda (env) + (let* ((path-info (getf env :path-info)) + (req-method (getf env :request-method)) + (ip (getf env :remote-addr)) + (route-fn (getf *routes* path-info + + '(200 (:content-type "text/plain") ("Hello, World"))) + :worker-num 1) diff --git a/scripts/guestbook/icon.png b/scripts/guestbook/icon.png new file mode 100644 index 0000000..70c845e Binary files /dev/null and b/scripts/guestbook/icon.png differ diff --git a/scripts/jalarm/alarm.wav b/scripts/jalarm/alarm.wav new file mode 100644 index 0000000..3961fd6 Binary files /dev/null and b/scripts/jalarm/alarm.wav differ diff --git a/scripts/jalarm/jar.py b/scripts/jalarm/jar.py new file mode 100644 index 0000000..c80b4a5 --- /dev/null +++ b/scripts/jalarm/jar.py @@ -0,0 +1,69 @@ +jar = { + "lineSkips": 1, # Skip the base of the jar + "height": 11, # Height you want filled to, 12 will be the very top of the jar + "width": 20, + "fillLines": [(3,16),(2,17),(2,17),(2,17),(2,17),(2,17),(2,17),(2,17),(2,17),(2,17),(2,17),(3,16)], + "text":""" | | + | | +|| || +|| || +|| || +|| || +|| || +|| || +|| || +|| || +|| || + \\\\ // + --------------"""} + +class AwesomeJar: + def __init__(self, jarObject): + self.jarObject = jarObject + self.progress = 0.00 + self.dropletLine = 0 + self.dropletDelta = 1 + + def drawJar(self): + jarRepresentation = self.jarObject["text"].split("\n") + linesToFill = int(self.progress * self.jarObject["height"]) + + dropletX = self.jarObject["width"] // 2 + if (self.progress < 1): + jarRepresentation[self.dropletLine] = jarRepresentation[self.dropletLine][0:dropletX] + "O" + jarRepresentation[self.dropletLine][(dropletX+1):] + + for y_fill in range(self.jarObject["height"] - linesToFill + self.jarObject["lineSkips"], self.jarObject["height"]+self.jarObject["lineSkips"]): + jarRepresentation[y_fill] = "".join(list(map(lambda x: + "X" if x in range(self.jarObject["fillLines"][y_fill][0],self.jarObject["fillLines"][y_fill][1]+1) + else jarRepresentation[y_fill][x], range(len(jarRepresentation[y_fill]))))) + + return jarRepresentation + + def setProgress(self, progress): + linesToFill = int(self.progress * self.jarObject["height"]) + self.dropletLine += self.dropletDelta + if self.dropletLine > self.jarObject["height"]-linesToFill: + self.progress = progress + self.dropletLine = 0 + + def __str__(self): + return "".join([x + "\n" for x in self.drawJar()]) + +if __name__ == "__main__": + newJar = AwesomeJar(jar) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + newJar.setProgress(0.2) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) + print(newJar.drawJar()) diff --git a/scripts/jalarm/take b/scripts/jalarm/take new file mode 100755 index 0000000..c42178c --- /dev/null +++ b/scripts/jalarm/take @@ -0,0 +1,99 @@ +#!/usr/bin/python3 + +import re +import time as t +import curses +import sys +import os +import jar + +def formatTime(time): + return ((str(time[0]).zfill(2) + ":") if time[0] else "") + ((str(time[1]).zfill(2) + ":") if time[1] or time[0] else "") + (str(time[2]).zfill(2)) + +def timeToSeconds(time): + return time[2] + 60*time[1] + 3600*time[0] + +def secondsToTime(seconds): + return [seconds // 3600, (seconds - (seconds // 3600) * 3600) // 60, seconds % 60] + +def decrementTime(time): + return secondsToTime(timeToSeconds(time) - 1) + +class MyTimerWindow: + def __init__(self, message="Timer"): + self.message = message + self.screen = curses.initscr() + curses.noecho() + curses.cbreak() + self.dimensions = self.screen.getmaxyx() + self.screen.keypad(True) + self.jar = jar.AwesomeJar(jar.jar) + + def update(self, time, beginningTime): + self.jar.setProgress((timeToSeconds(beginningTime) - timeToSeconds(time))/timeToSeconds(beginningTime)) + + def step(self, time): + self.screen.clear() + self.screen.addstr(1, self.dimensions[1]//2 - len(self.message)//2, self.message) + self.screen.addstr(3, self.dimensions[1]//2 - len(formatTime(time))//2, formatTime(time)) + list(map(lambda x: self.screen.addstr(8+x, self.dimensions[1]//2 - self.jar.jarObject["width"]//2, self.jar.drawJar()[x]), range(0, len(self.jar.drawJar())))) + self.screen.addstr(25,0,"") + self.screen.refresh() + + def stop(self): + curses.nocbreak() + self.screen.keypad(False) + curses.echo() + curses.endwin() + os.system("aplay alarm.wav") + +def main(): + p = re.compile('(^[0-9]*)(?::|^)([0-9]*(?=:)):([0-9]*$)') + beginning_time = list(map(lambda x: int(x) if x else 0, p.match(sys.argv[1]).groups())) + time = beginning_time.copy() + + iteration_time = t.time() + if not "file" in sys.argv: + timer = MyTimerWindow() if len(sys.argv) < 3 else MyTimerWindow(sys.argv[2]) + timer.update(time, beginning_time) + while any(time): + try: + timer.step(time) + t.sleep(1) + if (t.time() - iteration_time >= 1): + iteration_time = t.time() + time = decrementTime(time) + timer.update(time, beginning_time) + timer.step(time) + except KeyboardInterrupt: + break + timer.stop() + print("\nDONE") + else: + iteration_time = t.time() + try: + pid = open("/home/logan/scripts/state-files/take/pid.txt", "r") + os.system(f"kill -9 {pid.read()} 2> /dev/null") + pid.close() + except: + os.system("mkdir -p /home/logan/scripts/state-files/take") + pass + pid = open("/home/logan/scripts/state-files/take/pid.txt", "w") + pid.write(str(os.getpid())) + pid.close() + while any(time): + t.sleep(.1) + try: + if (t.time() - iteration_time >= 1): + iteration_time = t.time() + file = open("/home/logan/scripts/state-files/take/current-time.txt", "w") + file.write(formatTime(time)) + file.close() + time = decrementTime(time) + except KeyboardInterrupt: + break + file = open("/home/logan/scripts/state-files/take/current-time.txt", "w") + file.write("Not Timing") + +if __name__ == "__main__": + main()