awesome/module/sidebar.fnl

149 lines
3.7 KiB
Fennel

;;; module/sidebar.fnl --- Informational sidebar
;;; Code:
(local awful (require :awful))
(local beautiful (require :beautiful))
(local lain (require :lain))
(local wibox (require :wibox))
(local std (require :lib.std))
(local tag-list (require :widget.tag-list))
(local task-list (require :widget.task-list))
(local textclock (require :widget.textclock))
(local markup lain.util.markup)
;;;
;; Functions
(fn border [t margin]
(let [side (or margin 2)
end (+ side 1)]
{1 t
:bottom end
:left side
:right side
:top end
:widget wibox.container.margin} ))
(fn center [t]
{1 t
:align "center"
:widget wibox.container.place})
(local sb-clock (textclock "%H\n%M"))
(local sb-systray (doto (wibox.widget.systray)
(: :set_base_size 24)))
(fn bat-hm []
(let [[h m] (std.s-split _G.bat_now.time ":")
baticon "\u{f241}"]
(: _G.widget :set_markup
(.. baticon "\n" h "\n" m))))
(fn bat-icon []
;; FA
;; (let [full "\u{f240}"
;; x75 "\u{f241}"
;; x50 "\u{f242}"
;; x25 "\u{f243}"
;; empty "\u{f244}"
(let [full "\u{e02b}"
x75 "\u{e02c}"
x50 "\u{e02d}"
x25 "\u{e02e}"
empty "\u{e136}"
charging "\u{e02a}"
status _G.bat_now.status
level _G.bat_now.perc
icon (if (= status "Full") full
(= status "Charging") charging
(> level 75) x75
(> level 50) x50
(> level 25) x25
empty)]
(: _G.widget :set_markup (markup.font "Typicons 28" icon))))
(fn bat-markup []
(bat-icon))
(fn pulse-icon []
(let [icon {:muted "\u{e133}"
:low "\u{e135}"
:med "\u{e132}"
:high "\u{e134}"}
muted (= _G.volume_now.muted "yes")
vol (tonumber _G.volume_now.left)
icon (if muted icon.muted
(> vol 35) icon.high
(> vol 5) icon.med
icon.low)]
(: _G.widget :set_markup (markup.font "Typicons 24" icon))))
(fn pulse-icon+text []
(let [icon {:muted "\u{e133}"
:low "\u{e135}"
:med "\u{e132}"
:high "\u{e134}"}
muted (= _G.volume_now.muted "yes")
vol (tonumber _G.volume_now.left)
icon (if muted icon.muted
(> vol 35) icon.high
(> vol 5) icon.med
icon.low)
s (if muted ""
(.. "\n" (tostring vol) "%"))]
(: _G.widget :set_markup
(.. (markup.font "Typicons 24" icon)
s))))
(fn pulse-markup []
(pulse-icon))
;; TODO Plug/unplug notifications
(local battery
(lain.widget.bat
{:battery "BAT1"
:ac "ACAD"
:notify "on"
:n_perc [10 20]
:settings bat-markup}))
(local pulse (lain.widget.pulse
{:settings pulse-markup}))
(fn draw-sidebar [s]
(set s.sb (awful.wibar {:position beautiful.sidebar_position
:width beautiful.sidebar_width
:screen s}))
(: s.sb :setup
{:layout wibox.layout.align.vertical
1 {1 (border (tag-list s))
;; 2 (task-list s)
:layout wibox.layout.fixed.vertical}
2 nil
3 {1 (center battery.widget)
2 (center pulse.widget)
;; 2 sb-systray
3 {1 (border
{1 {1 (center sb-clock)
:top 2
:bottom 2
:widget wibox.container.margin}
:widget wibox.container.background
:bg beautiful.sidebar_bg_info})
:layout wibox.layout.fixed.vertical}
:layout wibox.layout.fixed.vertical}}))
;;;
;; Configuration
(awful.screen.connect_for_each_screen
draw-sidebar)
{}
;;; module/sidebar.fnl ends here