eufon/blinkenlicht
Daniel Barlow c687b4d3b8 fix markdown syntax 2022-04-26 21:25:41 +01:00
..
README.md fix markdown syntax 2022-04-26 21:25:41 +01:00
bl.fnl print date without seconds 2022-04-26 21:25:41 +01:00
blinkenlicht.fnl fix load-icon for abolute paths 2022-04-26 21:25:41 +01:00
default.nix add layer-shell, todo list 2022-04-26 21:25:40 +01:00
shell.nix initial checkin 2022-04-26 21:25:40 +01:00

README.md

Blinkenlicht

Yet another "bar" program for wlroots-basd Wayland compositors, but this one is written in Fennel and therefore better than all the others because it is more niche.

More seriously: you might prefer this over another status bar program if you want fine-grained control over what is shown in your bar and you are happy to exert that control in a Lua-based Lisp language.

Current status and usage

Not quite dogfood-ready yet, but fast approaching.

  • bl.fnl is an example

  • blinkenlicht.fnl is the module that parses bar and indicator forms and does all the UI

  • also in bl.fnl but needs extracting to a home of its own, all the glue that looks up load average, wifi signal strength, time of day etc for indicators to use

Use the default.nix for guidance as to libraries and other setup required - or just use it, of course.

nix-shell
lua $fennel bl.fnl

Plan

  • use gtk-layer-shell to put it in a layer
  • update only at relevant intervals
  • cache icon pixbufs
  • update image/label widget instead of destroying
  • allow height customisation
  • add some mechanism for indicators that wait for events instead of polling
  • set poll interval based on indicators' requested intervals
  • set indicator background colour (use css for this?)

;; your status bar specification might look something like this

(bar
 {
  :anchor [:top :right]
  :orientation :horizontal
  :indicators
  [
   (indicator {
               :interval 200
               :icon #(if (> loadavg 2) "sad-face" "happy-face")
               })
   (let [f (io.open "/tmp/statuspipe" "r")]
     (indicator {
                 :poll [f]
                 :text #(f:read:sub 1 10)
                 }))
   (indicator {
               :interval 5000
               :text #(.. (disk-free-percent "/") "%")
               :on-click #(spawn "baobab")
               })
   (indicator {
               :interval 1000
               :text #(os.date "%X")
               })
   ]})