#!/usr/bin/env -S ros -Q --
#|-*- mode:lisp -*-|#
#|
exec ros -Q -- $0 "$@"
|#
(progn ;;init forms
  (ros:ensure-asdf)
  #+quicklisp(ql:quickload '(uiop) :silent t))

(defpackage :launchmenu
  (:use :cl))
(in-package :launchmenu)

(defun write-app (stream icon layout programs)
    (format stream "IMG:~a~C~s~%" icon #\Tab (cons layout programs)))

(defun write-commands (stream)
    (write-app stream "scalable/www-browser.svg" nil '(("openbrowser")))
    (write-app stream "scalable/irc-chat.svg" "chat" '(("nheko") ("discord")))
    (write-app stream "scalable/system-file-manager.svg" "double-fileman" '(("thunar") ("thunar"))))

(defun main (&rest argv)
  (declare (ignorable argv))
  (destructuring-bind (layout . programs) (uiop:run-program '("pmenu")
                                           :output #'read
                                           :error-output :interactive
                                           :input #'write-commands)
   (when layout
    (uiop:run-program (list "i3-msg" (format
                                      nil
                                      "append_layout ~a/.local/share/i3-layouts/~a.json"
                                      (user-homedir-pathname)
                                      layout))
     :output :interactive
     :error-output :interactive
     :input :interactive))
   (dolist (program programs)
    (uiop:launch-program program
     :output :interactive
     :error-output :interactive
     :input :interactive))))
