#!/usr/bin/env -S guile --no-auto-compile !# (use-modules (ice-9 format) (ice-9 match) (ice-9 ports)) (define (call-command/stderr . command) "Call COMMAND using `system*', but redirect all output to stderr." (with-output-to-port (current-error-port) (lambda () (apply system* command)))) (match (command-line) ((_ "quit") (exit 0)) ((_ "Reload i3 configuration") (call-command/stderr "i3-msg" "reload")) ((_ "Sleep") ;; "screenlock" blocks until unlocked by the user, so run in background. ;; TODO: write "mem" to /sys/power/state, but it's owned by root. (let ((locker (spawn "screenlock" '("screenlock"))) (sleepfile (open-file "/sys/power/state" "w"))) (display "mem" sleepfile) (close sleepfile) (waitpid locker))) ((_ "Log out") (call-command/stderr "i3-msg" "exit")) ((_ "Shutdown") (call-command/stderr "sudo" "-n" "/run/current-system/profile/sbin/shutdown")) ((_ "Reboot") (call-command/stderr "sudo" "-n" "/run/current-system/profile/sbin/reboot")) (_ (format #t "\0~a\x1f~a~%~{~a\0icon\x1f~a~%~}" "prompt" "Session" '("Reload i3 configuration" "reload" "Sleep" "system-suspend" "Log out" "system-log-out" "Shutdown" "system-shutdown" "Reboot" "system-reboot"))))