smolbar

Crates.io Crates.io

smolbar is a smol status command for sway.

milestones

installation

smolbar is on crates.io!

console $ cargo install --locked smolbar

configuration

smolbar is configured through a TOML file.

if --config is not specified, smolbar looks for a file called config.toml in $XDG_CONFIG_HOME or $HOME/.config.

for an example of a configuration, see the examples.

header

the header first sent to sway can be configured in the header table. it inherits all keys from the Header JSON object defined in swaybar-protocol(7).

toml [header] cont_signal = 18 # default value stop_signal = 2 # SIGINT

blocks

there are three scopes which can be used to configure individual blocks. each scope has a level of control over each block's Body: immediate has the highest precedence, then local, then global.

global

the global scope is configured at the root level of the config file.

| key | description | |-------------|----------------------------------------------| | command_dir | sets the path to execute local::command in |

global also inherits all the keys in the Body JSON object defined in swaybar-protocol(7).

```toml

global

fulltext = "u only see this in a block if no other scopes define fulltext"

[[block]]

local

fulltext = "never see global fulltext" ```

local

all local blocks are tables in the table array block.

| key | description | |----------|-----------------------------------------------------| | command | command to execute for immediate configuration | | prefix | string prefixing full_text | | postfix | string appended to full_text | | interval | interval, in seconds, at which to refresh the block | | signal | OS signal to refresh the block when received |

local inherits all other keys from the Body JSON object defined in swaybar-protocol(7).

```toml [[block]]

this block displays the date, updating every second

command = "date" # assuming date coreutil is in $PATH prefix = "Date: " interval = 1 ```

immediate

each line of local::command's standard output is parsed in order as a field of the Body JSON object defined in swaybar-protocol(7).

for example, suppose the following script was a block's command:

```sh

interpreted as full_text

echo "amazing status information"

interpreted as short_text

echo "short info"

interpreted as color

echo "#ff0000" ```

hot swapping

smolbar responds to cont_signal (see swaybar-protocol(7)) by reloading its configuration.

this means that by default, sending smolbar's process SIGCONT will cause it to hot swap its config.

```toml [header]

cont_signal is 18 (SIGCONT) by default

```

```console $ pkill -SIGCONT smolbar

causes smolbar to reload config

```

cont_signal is also configurable.

toml [header] cont_signal = 10

```console $ pkill --signal 10 smolbar

causes smolbar to reload config

```

note

the header, fundamentally, can't be reconfigured during runtime.

this is because in swaybar-protocol(7), it's only sent once, at the beginning of the status command's process.