bard in action


bard (bar daemon) is intended as an elegant and powerful manager for lemonboy's bar.

bard aims to provide unit based configuration of every task on the bar, allowing several users to share and compare pieces of their bar configuration.


While ricing my system I discovered a bunch of neat and pretty bar configurations. They all looked amazing, and provided features I really wanted. The only issue was that all the scripts were hand written to fit the particular user setup, making porting them to my system tedious at best. Even when the scripts had been ported I ran into issues with how often to run the polling functions, and how often to actually write to the bar, I found that lemonbar was actually eating up a non-insignificant (although not large) amount of cpu time. These were not trivial problems, and I don't believe bash is the proper language to solve them. That's when the idea for bard started.


I figured I could solve all these issues by making every single task on the bar an entirely separate unit. Observing that most bar scripts handled the bar as a series of functions executing commands and filtering the results, with a number of subshells thrown to handle the odd command that blocked until some output was ready. I set out to create a competent manager that fulfilling 3 core goals. It had to run oneshot commands as well as continuous commands, facilitate the filtering and reassembly of the command output, and output to bar when the contents changed.

It turned out that bard would have to manage fonts as well, since the order that they are passed changes the semantic meaning of certain bar selectors. Unfortunately that meant having bard pass parameters to lemonbar, so bard has to also start the bar for the user.


Github logo Open on Github