cowbuttons(1)
π cowbuttons(1) β the button panel bestie for cow π
okay so. cowbuttons is a little button panel that lives inside your cow window manager setup, and honestly? it's giving main character energy. β¨
πΈ NAME πΈ
cowbuttons β Button panel for the cow window manager π
β¨ SYNOPSIS β¨
cowbuttons [-c config] [-h]
π DESCRIPTION π
cowbuttons puts up a small, configurable grid of cells, and every cell is doing something cute. A cell can:
- run
cow(1)commands when you click it π₯ - periodically show the output of a script, like a lil live widget π¦
- display selected state pulled from cow's status socket π
- or just be an empty spacer, vibing, holding space π
now, important lore: Wayland does not do X11 window reparenting, so cowbuttons does not swallow clients. periodt. So instead of eating your apps, you use command buttons to launch or focus applications, and you use cow rules to style or place companion windows. iykyk. π
π OPTIONS π
-cconfig β load config instead of the default configuration file. (custom config? obsessed.)-hβ show usage. the "help me bestie" flag π«Ά
π CONFIGURATION π
the format is line-oriented. blank lines and lines starting with # are ignored (they're just there for the aesthetic πΈ). labels and commands that contain whitespace must be quoted. no cap.
colours can be opaque 0xRRGGBB values, or 0xRRGGBBAA values carrying an alpha component. in that second form, 00 is fully transparent and FF is fully opaque. for example, style button.bg 0x282828CC uses an 80-percent opaque dark grey. slay. π
cell W Hβ set the default cell size in pixels. the default is 96 by 32.grid rows colsβ set the grid size.col col width Nβ set one column's width in pixels.show panel name [...]β show one or more named panel definitions from the configuration file. multiple names on the sameshow panelline get combined into onecowbuttonswindow. multiple top-levelshow panellines create separatecowbuttonswindows from the same configuration file. and settings outside panel blocks can be used as shared defaults. very reusable, very iconic. β¨panel name [direction [property value ...]] {β start a named panel definition. a panel is loaded when it's named byshow panel. when direction isleft,right,up, ordown,cowbuttonsadds an attached handle and opens the panel in that direction. pressing the handle collapses or expands the panel. handle properties use the same styling keys asbutton. πrow [height N] { ... }β start a new visual row. cells inside the block are appended left-to-right.if [not] command name { ... }β process the block only when name exists inPATHand is executable.if [not] file path { ... }β process the block only when path exists. relative paths are resolved against the configuration file's directory.if [not] env name { ... }β process the block only when the environment variable name is set and non-empty.font nameβ set the font face used for labels.resizable true|falseβ allow the window to be resized. the configured grid remains the minimum size; extra width and height are distributed across columns and rows. the default isfalse.style button.bg colourβ set the normal button background colour.style button.bg_pressed colourβ set the pressed button background colour.style button.fg colourβ set the normal button text colour.style button.fg_pressed colourβ set the pressed button text colour.style button.image pathβ draw a PNG, SVG, or XPM image in command buttons. relative paths are resolved against the configuration file's directory.style button.image_pressed pathβ draw a PNG, SVG, or XPM image while a command button is pressed.style button.image_size Nβ set the image size in pixels. the default is 16.style button.image_position left|center|right|fillβ set where button images are drawn. the default isleft.style button.justify left|center|rightβ set the default button text justification. the default isleft.button label command [property value ...]β create a clickable button. command is sent to cow as its left-click action. supported properties arewidth,height,span,bg,bg_pressed,fg,fg_pressed,image,image_pressed,image_size,image_position,justify, and the click-action properties described below. π₯leftclick command,click command,middleclick command,rightclick commandβ set the single-click action for the specific button.clickis an alias forleftclick.doubleclick command,leftdoubleclick command,middledoubleclick command,rightdoubleclick commandβ set a double-click action.doubleclickis an alias forleftdoubleclick. when both single- and double-click actions exist for the same button, the single-click action is delayed for 300 ms. (yes, 300 ms of suspense π)script command interval seconds [property value ...]β create a cell whose label is supplied by an external command. the command is run through the shell immediately after startup and then again the configured number of seconds after each run finishes. runs never overlap. π¦
the first line written to standard output, limited to 255 bytes, replaces the cell's label when the command exits successfully. empty output clears the label. if the command fails, the previous successful label is retained and an error is written to standard error.
script cells support the same click actions, styling, and geometry properties as button cells.
external command [property value ...]β create a panel slot managed by an external command. the command is started when the panel is opened and terminated when it is collapsed. external panels start collapsed. this is a lifecycle hook for cow modules; generic Wayland clients are still separate toplevels. supported properties arewidth,height,span,bg,bg_pressed,fg,fg_pressed,image,image_pressed,image_size,image_position, andjustify.status type [property value ...]β create a live status cell. supported types are:focused-title,focused-app,current-output,current-desk, anddesk-list. πspacer [property value ...]β create an empty cell.
π EXAMPLES π
show panel launcher
show panel telephone
show panel pager
show panel statusbar
resizable true
style button.bg 0x39414a
style button.bg_pressed 0x242a30
style button.fg 0x1f2933
style button.fg_pressed 0xffffff
style button.image_size 18
panel launcher {
cell 118 30
grid 2 4
row height 30 {
button "Terminal" "exec xterm" bg 0xcde7d8 image cowbuttons/svg/terminal.svg
button "Firefox" "exec firefox" bg 0xffddc8 image cowbuttons/svg/browser.svg
button "Files" "exec thunar" bg 0xffe4ad image cowbuttons/svg/files.svg
button "Editor" "exec emacs" bg 0xded7f5 image cowbuttons/svg/editor.svg
}
row height 30 {
button "Next" "focus -n" bg 0xf6e2a6
button "Prev" "focus -p" bg 0xcfe8db
}
}
panel telephone left bg 0xf2d6a6 {
cell 42 28
grid 5 3
row height 22 {
button "Telephone" "nop" span fill bg 0xe8d9f2
}
}
panel pager right bg 0x3f5b51 {
external "cowpager" width 420 height 120 bg 0x242a30
}
panel statusbar {
cell 140 30
grid 1 2
row {
script "~/.local/bin/clock.sh" interval 1 click "exec gsimplecal" justify center
script "~/.local/bin/battery.sh" interval 30 justify center
}
}
remove cowbuttons' own window decors using a cow rule:
decor -d cowbuttons-nodecor border.width 0
decor -d cowbuttons-nodecor border.handles false
decor -d cowbuttons-nodecor titlebar.enabled false
rule -g -Ton-map -ncowbuttons-chrome -s %cowbuttons decor -a cowbuttons-nodecor
π FILES π
$XDG_CONFIG_HOME/cow/cowbuttons.conf~/.config/cow/cowbuttons.conf
π§ SEE ALSO π§
cow(1), moocow(1), cowbar(1), cowiconman(1), cowpager(1)
π AUTHORS π
Thomas Adam <thomas@xteddy.org>
and that's the whole page bestie!! this was cowbuttons version 0.3, dated 2026-09-07 π go forth and build the cutest lil button grid, you absolute icon πβ¨π
π¦ where this page comes from
- fedora 44: cow 0.3-1.fc44 Β· ISC
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms