;;; module/auto-start.fnl --- Auto-start utilities

;;; Commentary:
;; Largely copied from
;; https://github.com/PapyElGringo/material-awesome/blob/master/module/auto-start.lua

;;; Code:

(local awful (require :awful))
(local beautiful (require :beautiful))
(local naughty (require :naughty))

(local spawn awful.spawn.with_shell)
(local async awful.spawn.easy_async_with_shell)

;;;
;; Functions

(fn cb [prog]
  (lambda [stdout stderr exitreason exitcode]
    (when (not (= 0 exitcode))
      (naughty.notify
       {:title (.. "async startup handler: " prog)
        :text stderr}))))

(fn run-once [cmds]
  (each [_ cmd (ipairs cmds)]
    (let [first-space (: cmd :find " ")
          findme (if first-space
                     (: cmd :sub 0 (- first-space 1))
                     cmd)]
      (spawn
       (string.format "pgrep -u $USER -x %s >/dev/null || (%s)" findme cmd)))))

;; Keyboard
(async "tpset \"Natural Scrolling\" 1" (cb "tpset"))
(async "tpset \"Tapping\" 1" (cb "tpset"))
(spawn "setxkbmap -option caps:ctrl_modifier")
(spawn "numlockx on")

(async (.. "feh --bg-fill " beautiful.wallpaper) (cb "feh"))

(run-once
 ["nm-applet"      ;; WiFi
  "pa-applet"      ;; Sound manager
  "blueman-applet" ;; Bluetooth
  "compton -b"     ;; Compositor
  "libinput-gestures"
  "fcitx-autostart" ;; Keyboard
  ])

{}
;;; module/auto-start.fnl ends here