I3STATUS(1)

๐Ÿ“ฆ
version 2.15 ยท 4 versions
, in arch rolling, debian trixie, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, ubuntu questing, ubuntu resolute, ubuntu stonking

๐Ÿฆ‹ i3status โ€” the i3 manual, but make it cute ๐Ÿฆ‹


๐Ÿ’– NAME ๐Ÿ’–

i3status โ€” it generates a status line for i3bar, dzen2, xmobar or lemonbar. that's the whole job. and it slays at it. ๐Ÿ’…


โœจ SYNOPSIS โœจ

i3status [-c configfile] [-h] [-v] [--run-once]

like. that's it. that's the whole vibe. ๐ŸŽ€


๐ŸŒธ OPTIONS ๐ŸŒธ

  • -c, --config โ€” ok so this one lets you point at a different config file than the usual suspects. by default tho, i3status goes hunting for config files in this exact order:
    1. ~/.config/i3status/config (or $XDG_CONFIG_HOME/i3status/config if that's set)
    2. /etc/xdg/i3status/config (or $XDG_CONFIG_DIRS/i3status/config if that's set)
    3. ~/.i3status.conf
    4. /etc/i3status.conf

it stops at the first one it finds, bestie. first come, first served. ๐Ÿซถ

  • -h, --help โ€” prints the verison and a minimal syntax. (yes, "verison". that's literally what the page says. no shade, we love her.) ๐Ÿ˜ญ
  • -v, --version โ€” prints the version and any build configuration. so you can flex what you compiled with. โœจ
  • --run-once โ€” runs once instead of looping forever. one and done. periodt.

๐Ÿ’… DESCRIPTION ๐Ÿ’…

so, i3status is this small program that generates a status bar for i3bar, dzen2, xmobar, lemonbar, or honestly whatever similar thing you're running. ๐Ÿ‘‘

the whole design philosophy is that it's extremely efficient โ€” like, it issues a very small number of system calls, because you generally want this status line refreshing every single second. and because of that, even when your machine is under high load, your status bar still gets updated correctly. no cap. ๐Ÿ”ฅ

and bonus: it saves a bit of energy, because it is not out here hogging your CPU the way spawning the equivalent pile of shell commands every second absolutely would. environmentally conscious queen. ๐ŸŒฑ๐Ÿ’–


๐ŸŽ€ CONFIGURATION ๐ŸŽ€

ok so the basic idea: you tell i3status which "modules" you want (that's the order directive, and yes the order matters, it's the whole point), and then you configure each module in its own little section. every module lets you specify its output format. full reference is below, bestie. ๐Ÿ“–

๐ŸŒˆ Sample configuration.

general {
        output_format = "dzen2"
        colors = true
        interval = 5
}

order += "ipv6"
order += "disk /"
order += "run_watch DHCP"
order += "run_watch VPNC"
order += "path_exists VPN"
order += "wireless wlan0"
order += "ethernet eth0"
order += "battery 0"
order += "cpu_temperature 0"
order += "memory"
order += "load"
order += "tztime local"
order += "tztime berlin"

wireless wlan0 {
        format_up = "W: (%quality at %essid, %bitrate) %ip"
        format_down = "W: down"
}

ethernet eth0 {
        format_up = "E: %ip (%speed)"
        format_down = "E: down"
}

battery 0 {
        format = "%status %percentage %remaining %emptytime"
        format_down = "No battery"
        status_chr = "โšก CHR"
        status_bat = "๐Ÿ”‹ BAT"
        status_unk = "? UNK"
        status_full = "โ˜ป FULL"
        status_idle = "โ˜ป IDLE"
        path = "/sys/class/power_supply/BAT%d/uevent"
        low_threshold = 10
}

run_watch DHCP {
        pidfile = "/var/run/dhclient*.pid"
}

run_watch VPNC {
        # file containing the PID of a vpnc process
        pidfile = "/var/run/vpnc/pid"
}

path_exists VPN {
        # path exists when a VPN tunnel launched by nmcli/nm-applet is active
        path = "/proc/sys/net/ipv4/conf/tun0"
}

tztime local {
        format = "%Y-%m-%d %H:%M:%S"
        hide_if_equals_localtime = true
}

tztime berlin {
        format = "%Y-%m-%d %H:%M:%S %Z"
        timezone = "Europe/Berlin"
}

load {
        format = "%5min"
}

cpu_temperature 0 {
        format = "T: %degrees ยฐC"
        path = "/sys/devices/platform/coretemp.0/temp1_input"
}

memory {
        format = "%used"
        threshold_degraded = "10%"
        format_degraded = "MEMORY: %free"
}

disk "/" {
        format = "%free"
}

read_file uptime {
        path = "/proc/uptime"
}

๐Ÿ’œ General

the colors directive disables all colors if you set it to false. and you can also pick exactly which colors get used to show "good", "degraded" or "bad" values โ€” that's the color_good, color_degraded and color_bad directives respectively. ๐ŸŽจ

heads up tho: those directives only do anything if color support isn't disabled by the colors directive. and the input format for color values is the canonical RGB hexadecimal triplet โ€” no separators between the colors โ€” prefixed by a hash character (#). iykyk.

Example configuration:

color_good = "#00FF00"

same energy, you can use the color_separator directive to set the color used to paint the separator bar. and here's the fun bit: the separator is always output in color, even when colors are disabled by the colors directive. also this option has no effect when output_format is set to i3bar or none. ๐Ÿซ 

the interval directive specifies the time in seconds that i3status will sleep before printing the next status line. nap time between updates. ๐Ÿ˜ด

using output_format you choose which format strings i3status uses in its output. currently available are:

  • i3bar โ€” i3bar ships with i3 and gives you a workspace bar that actually does the right thing in multi-monitor situations. it also has tray support and can display the i3status output. this output type uses JSON to pass as much meta-information to i3bar as possible (like colors, which blocks can be shortened in which way, etc.). the overachiever of the group. ๐Ÿ’…
  • dzen2 โ€” dzen is a general purpose messaging, notification and menuing program for X11. it was designed to be scriptable in any language and to integrate well with window managers like dwm, wmii and xmonad โ€” though fr, it'll work with any window manager. ๐ŸชŸ
  • xmobar โ€” xmobar is a minimalistic, text based, status bar. it was designed to work with the xmonad Window Manager. tiny but mighty. ๐Ÿงš
  • lemonbar โ€” lemonbar is a lightweight bar based entirely on XCB. it has full UTF-8 support and is EWMH compliant. iconic behavior. ๐Ÿ‹
  • term โ€” uses ANSI Escape sequences to produce a terminal-output as close as possible to the graphical outputs. this makes debugging your config file a little bit easier, because the terminal-output of i3status becomes much more readable โ€” but you should only use it for quick glances like that, because it only supports very basic output-features (for example you only get 3 bits of color depth). cute but limited. ๐Ÿ™ˆ
  • none โ€” doesn't use any color codes at all. separates values by the pipe symbol by default. this should be used with i3bar and can be used for custom scripts. no frills, all business. โญ

it's also possible to use the color_good, color_degraded, color_bad directives to define specific colors per module. if one of these directives is defined in a module section, its value overrides the value defined in the general section โ€” just for that one module. module-level wins, always. ๐Ÿ‘‘

if you don't fancy the vertical separators between modules that i3status/i3bar uses by default, you can employ the separator directive to configure how modules are separated. you can also disable the default separator altogether by setting it to the empty string. you might then define separation as part of a module's format string. and btw, that's your only option when using the i3bar output format, since the separator is drawn by i3bar directly otherwise. for the other output formats, the provided non-empty string will be automatically enclosed with the necessary coloring bits if color support is enabled. โœจ

i3bar supports Pango markup, which lets your format strings specify font, color, size, etc. by setting the markup directive to "pango". note that the ampersand (&), less-than (<), greater-than (>), single-quote ('), and double-quote (") characters need to be replaced with &amp;, &lt;, &gt;, &apos;, and &quot; respectively. good news: this is done automatically for generated content (e.g. wireless ESSID, time). one less thing for you to worry about, bestie. ๐Ÿซถ

Example configuration:

general {
    output_format = "xmobar"
    separator = "  "
}

order += "load"
order += "disk /"

load {
    format = "[ load: %1min, %5min, %15min ]"
}
disk "/" {
    format = "%avail"
}

๐Ÿฆ‹ IPv6

this module gets the IPv6 address used for outgoing connections (that is, the best available public IPv6 address on your computer) and the interface it's assigned to. internet girl behavior. ๐ŸŒ

Example format_up: %iface: %ip

Example format_down: no IPv6

๐Ÿ’พ Disk

gets used, free, available and total amount of bytes on the given mounted filesystem. ๐Ÿ“Š

these values can also be expressed in percentages with the percentage_used, percentage_free, percentage_avail and percentage_used_of_avail formats.

byte sizes are presented in a human readable format using a set of prefixes, and the type of that set can be specified via the "prefix_type" option. three sets of prefixes are available:

  • binary โ€” IEC prefixes (Ki, Mi, Gi, Ti) represent multiples of powers of 1024. this is the default.
  • decimal โ€” SI prefixes (k, M, G, T) represent multiples of powers of 1000.
  • custom โ€” the custom prefixes (K, M, G, T) represent multiples of powers of 1024.

it's possible to define a low_threshold that causes the disk text to be displayed using color_bad. the low_threshold type can be of threshold_type "bytes_free", "bytes_avail", "percentage_free", or "percentage_avail", where the former two can be prepended by a generic prefix (k, m, g, t) having prefix_type.

so, say you configure low_threshold to 2, threshold_type to "gbytes_avail", and prefix_type to "binary", and the remaining available disk space drops below 2 GiB โ€” boom, it gets colored bad. ๐Ÿ˜ฌ

if not specified, threshold_type is assumed to be "percentage_avail" and low_threshold is assumed to be set to 0, which implies no coloring at all. you can customize the output format when below low_threshold with format_below_threshold.

you can define a different format with the option "format_not_mounted", which is used if the path does not exist or is not a mount point. defaults to "".

Example order: disk /mnt/usbstick

Example format: %free (%avail)/ %total

Example format: %percentage_used used, %percentage_free free, %percentage_avail avail

Example prefix_type: custom

Example low_threshold: 5

Example format_below_threshold: Warning: %percentage_avail

Example threshold_type: percentage_free

๐Ÿ‘€ Run-watch

expands the given path to a pidfile and checks if the process ID found inside is valid (that is, if the process is actually running). you can use this to check if a specific application is up โ€” like a VPN client, or your DHCP client. there's also an option called format_down. and you can hide the output entirely with format_down="". sneaky but valid. ๐Ÿคซ

Example order: run_watch DHCP

Example format: %title: %status


more to come, bestie โ€” this page is long and we're only getting started ๐Ÿ’œ

Path-exists ๐Ÿ’…

okay bestie, this one is literally just a vibe check for your filesystem. It checks if the given path exists in the filesystem. You can use this to check if something is active, like for example a VPN tunnel managed by NetworkManager. There also is an option format_down. You can hide the output with format_down="".

  • Example order: path_exists VPN
  • Example format: %title: %status

Wireless ๐Ÿฆ‹

Gets the link quality, frequency and ESSID of the given wireless network interface. You can specify different format strings for the network being connected or not connected. The quality is padded with leading zeroes by default; to pad with something else use format_bitrate, format_noise, format_quality or format_signal.

The special interface name _first_ will be replaced by the first wireless network interface found on the system (excluding devices starting with "lo").

  • Example order: wireless wlan0
  • Example format_up: W: (%quality at %essid, %bitrate / %frequency) %ip
  • Example format_down: W: down
  • Example format_bitrate: "%g %cb/s"
  • Example format_noise: "%03d%s"
  • Example format_quality: "%03d%s"
  • Example format_signal: "%03d%s"

Ethernet ๐ŸŒˆ

Gets the IP address and (if possible) the link speed of the given ethernet interface. If no IPv4 address is available and an IPv6 address is, it will be displayed.

The special interface name _first_ will be replaced by the first non-wireless network interface found on the system (excluding devices starting with "lo").

  • Example order: ethernet eth0
  • Example format_up: E: %ip (%speed)
  • Example format_down: E: down

Battery ๐Ÿ”‹๐Ÿ’–

Gets the status (charging, discharging, unknown, full), percentage, remaining time and power consumption (in Watts) of the given battery and when itโ€™s estimated to be empty. If you want to use the last full capacity instead of the design capacity (when using the design capacity, it may happen that your battery is at 23% when fully charged because itโ€™s old. In general, I want to see it this way, because it tells me how worn off my battery is.), just specify last_full_capacity = true. You can show seconds in the remaining time and empty time estimations by setting hide_seconds = false.

If you want the battery percentage to be shown in another format, use format_percentage. integer_battery_capacity = true is a legacy option for format_percentage = "%.00f%s".

If your battery is represented in a non-standard path in /sys, be sure to modify the path property accordingly, i.e. pointing to the uevent file on your system. The first occurrence of %d gets replaced with the battery number, but you can just hard-code a path as well.

It is possible to define a low_threshold that causes the battery text to be colored color_bad. The low_threshold type can be of threshold_type "time" or "percentage". So, if you configure low_threshold to 10 and threshold_type to "time", and your battery lasts another 9 minutes, it will be colored color_bad.

To show an aggregate of all batteries in the system, use "all" as the number. In this case (for Linux), the /sys path must contain the "%d" sequence. Otherwise, the number indicates the battery index as reported in /sys.

Optionally custom strings including any UTF-8 symbols can be used for different battery states. This makes it possible to display individual symbols for each state (charging, discharging, unknown, full). Of course it will also work with special iconic fonts, such as FontAwesome. If any of these special status strings are omitted, the default (CHR, BAT, UNK, FULL) is used.

  • Example order (for the first battery): battery 0
  • Example order (aggregate of all batteries): battery all
  • Example format: %status %remaining (%emptytime %consumption)
  • Example format_down: No battery
  • Example format_percentage: "%.02f%s"
  • Example status_chr: โšก CHR
  • Example status_bat: ๐Ÿ”‹ BAT
  • Example status_unk: ? UNK
  • Example status_full: โ˜ป FULL
  • Example low_threshold: 30
  • Example threshold_type: time
  • Example path (%d replaced by title number): /sys/class/power_supply/CMB%d/uevent
  • Example path (ignoring the number): /sys/class/power_supply/CMB1/uevent

CPU-Temperature ๐ŸŒก๏ธโœจ

Gets the temperature of the given thermal zone. It is possible to define a max_threshold that will color the temperature red in case the specified thermal zone is getting too hot. Defaults to 75 degrees C. The output format when above max_threshold can be customized with format_above_threshold.

  • Example order: cpu_temperature 0
  • Example format: T: %degrees ยฐC
  • Example max_threshold: 42
  • Example format_above_threshold: Warning T above threshold: %degrees ยฐC
  • Example path: /sys/devices/platform/coretemp.0/temp1_input

CPU Usage ๐Ÿ‘‘

Gets the percentual CPU usage from /proc/stat (Linux) or sysctl(3) (FreeBSD/OpenBSD).

It is possible to define a max_threshold that will color the load value with color_bad in case the CPU average over the last interval is getting higher than the configured threshold. Defaults to 95. The output format when above max_threshold can be customized with format_above_threshold.

It is possible to define a degraded_threshold that will color the load value with color_degraded in case the CPU average over the last interval is getting higher than the configured threshold. Defaults to 90. The output format when above degraded threshold can be customized with format_above_degraded_threshold.

For displaying the Nth CPU usage, you can use the %cpu<N> format string, starting from %cpu0. This feature is currently not supported in FreeBSD.

  • Example order: cpu_usage
  • Example format: all: %usage CPU_0: %cpu0 CPU_1: %cpu1
  • Example max_threshold: 75
  • Example format_above_threshold: Warning above threshold: %usage
  • Example degraded_threshold: 25
  • Example format_above_degraded_threshold: Warning above degraded threshold: %usage

Memory ๐Ÿง ๐Ÿ’–

Gets the memory usage from system on a Linux system from /proc/meminfo. Other systems are currently not supported.

As format placeholders, total, used, free, available and shared are available. These will print human readable values. Itโ€™s also possible to prefix the placeholders with percentage_ to get a value in percent.

Itโ€™s possible to define a threshold_degraded and a threshold_critical to color the status bar output in color_degraded or color_bad, if the available memory falls below the given threshold. Possible values of the threshold can be any integer, suffixed with an iec symbol (T, G, M, K). Alternatively, the integer can be suffixed by a percent sign, which then gets evaluated relatively to total memory.

If the format_degraded parameter is given and either the critical or the degraded threshold applies, format_degraded will get used as format string. It acts equivalently to format.

Itโ€™s also possible to define the unit for the various format placeholders. As /proc/meminfo returns the memory in kB they will be converted to the given unit. If no unit is given or the auto option is used, the conversion will select the maximum possible unit.

As the converted format placeholder will be a decimal number, the number of decimals can be configured via the decimals option. If no such option is given the converted format placeholder will have one decimal.

As Linux' meminfo doesnโ€™t expose the overall memory in use, there are multiple methods to distinguish the actually used memory.

  • Example memory_used_method: memavailable ("total memory" - "MemAvailable", matches free command)
  • Example memory_used_method: classical ("total memory" - "free" - "buffers" - "cache", matches gnome system monitor)
  • Example order: memory
  • Example format: %free %available (%used) / %total
  • Example format: %percentage_used used, %percentage_free free, %percentage_shared shared
  • Example unit: auto, Ki, Mi, Gi, Ti
  • Example decimals: 0, 1, 2, 3
  • Example threshold_degraded: 10%
  • Example threshold_critical: 5%
  • Example format_degraded: Memory LOW: %free

Load ๐ŸŒธ

Gets the system load (number of processes waiting for CPU time in the last 1, 5 and 15 minutes). It is possible to define a max_threshold that will color the load value color_bad in case the load average of the last minute is getting higher than the configured threshold. Defaults to 5. The output format when above max_threshold can be customized with format_above_threshold.

  • Example order: load
  • Example format: %1min %5min %15min
  • Example max_threshold: "0.1"
  • Example format_above_threshold: Warning: %1min %5min %15min

Time โฐ๐Ÿ’™

Outputs the current time in the local timezone. To use a different timezone, you can set the TZ environment variable, or use the tztime module. See strftime(3) for details on the format string.

  • Example order: time
  • Example format: %Y-%m-%d %H:%M:%S

TzTime ๐ŸŒโœจ

Outputs the current time in the given timezone. If no timezone is given, local time will be used. See strftime(3) for details on the format string. The systemโ€™s timezone database is usually installed in /usr/share/zoneinfo. Files below that path make for valid timezone strings, e.g. for /usr/share/zoneinfo/Europe/Berlin you can set timezone to Europe/Berlin in the tztime module. To override the locale settings of your environment, set the locale option. To display time only when the set timezone has different time from localtime, set hide_if_equals_localtime to true.

  • Example order: tztime berlin
  • Example format: %Y-%m-%d %H:%M:%S %Z
  • Example timezone: Europe/Berlin
  • Example locale: de_DE.UTF-8

If you would like to use markup in this section, there is a separate format_time option that is automatically escaped. Its output then replaces %time in the format string.

Example configuration (markup):

tztime berlin {
        format = "<span foreground='#ffffff'>time:</span> %time"
        format_time = "%H:%M %Z"
        timezone = "Europe/Berlin"
        hide_if_equals_localtime = true
}

DDate ๐ŸŽ€

Outputs the current discordian date in user-specified format. See ddate(1) for details on the format string. Note: Neither %. nor %X are implemented yet.

  • Example order: ddate
  • Example format: %{%a, %b %d%}, %Y%N - %H

Volume ๐Ÿ”Š๐Ÿ’…

Outputs the volume of the specified mixer on the specified device. PulseAudio and ALSA (Linux only) are supported. If PulseAudio is absent, a simplified configuration can be used on FreeBSD and OpenBSD due to the lack of ALSA, the device and mixer options can be ignored on these systems. On these systems the OSS API is used instead to query /dev/mixer directly if mixer_idx is -1, otherwise /dev/mixer+mixer_idx+.

To get PulseAudio volume information, one must use the following format in the device line:

device = "pulse"

or

device = "pulse:N"

...where N is the index or name of the PulseAudio sink. Wanna know what your sink's name actually is? Run this:

$ pacmd list-sinks | grep name:
           name: <alsa_output.pci-0000_00_14.2.analog-stereo>

The name is the bit inside the angle brackets, not including them, bestie โ€” don't you dare paste the < > in there ๐Ÿ’…

If you don't specify a sink at all, the default sink gets used. And if the device string is missing, or you set it to "default", then PulseAudio gets tried first if it's detected, and it falls back to ALSA (Linux) or OSS (FreeBSD/OpenBSD). Slay, it's giving adaptive.

  • Example order: volume master
  • Example format: โ™ช (%devicename): %volume
  • Example format_muted: โ™ช (%devicename): 0%%

Example configuration:

volume master {
        format = "โ™ช: %volume"
        format_muted = "โ™ช: muted (%volume)"
        device = "default"
        mixer = "Master"
        mixer_idx = 0
}

Example configuration (PulseAudio):

volume master {
        format = "โ™ช: %volume"
        format_muted = "โ™ช: muted (%volume)"
        device = "pulse:1"
}

volume master {
        format = "โ™ช: %volume"
        format_muted = "โ™ช: muted (%volume)"
        device = "pulse:alsa_output.pci-0000_00_14.2.analog-stereo"
}

๐Ÿ“„ File Contents ๐Ÿ“„

Okay so this one just outputs the contents of whatever file you point it at. Obsessed. You can use it to peek at files on your system, like /proc/uptime for example. By default it only reads the first 254 characters of the file โ€” if you want to change that, set the Max_characters option. It will never read past the first 4095 characters, no cap. If the file isn't found, it prints "no file". If the file can't be read, it prints "error read".

  • Example order: read_file UPTIME
  • Example format: "%title: %content"
  • Example format_bad: "%title - %errno: %error"
  • Example path: "/proc/uptime"
  • Example Max_characters: 255

โœจ UNIVERSAL MODULE OPTIONS โœจ

So when you're using the i3bar output format, there are a few extra options you can slap onto any module to customize how it looks. Universal. Every module. Queen behaviour. ๐Ÿ‘‘

  • align โ€” the alignment policy to use when the minimum width (see right below, bestie) isn't reached. Either center (the default), right or left.
  • min_width โ€” the minimum width (in pixels) the module should take up. If the module ends up smaller than the size you specified, the block gets padded on the left and/or right side, according to the alignment policy you picked. Super useful when you want to stop the whole status line from shifting around as values get longer or shorter between each iteration. The option can also be a string โ€” in that case, the width of the given text determines the minimum width of the block. That's great when you want a sensible minimum width no matter which font you're using, and at whatever size. But heads up: a number wrapped in quotes still gets treated as a number. ๐Ÿ™ˆ
  • separator โ€” a boolean that says whether a separator line should be drawn after this block. Default is true, meaning yeah, the separator line gets drawn. Note that if you turn the separator line off, there's still a gap after the block, unless you also use separator_block_width.
  • separator_block_width โ€” how many pixels to leave blank after the block. In the middle of that gap, a separator symbol gets drawn unless separator is disabled. Which is exactly why the width you specify should leave enough room for the separator symbol. Think it through, babe. ๐Ÿ’…

Example configuration:

disk "/" {
    format = "%avail"
    align = "left"
    min_width = 100
    separator = false
    separator_block_width = 1
}

๐ŸŒˆ USING I3STATUS WITH DZEN2 ๐ŸŒˆ

Once you've installed dzen2, you can use it directly with i3status. Just make sure output_format is set to dzen2. Note: min_width is not supported here. ๐Ÿ˜ญ

Example for usage of i3status with dzen2:

i3status | dzen2 -fg white -ta r -w 1280 \
-fn "-misc-fixed-medium-r-normal--13-120-75-75-C-70-iso8859-1"

๐Ÿฆ‹ USING I3STATUS WITH XMOBAR ๐Ÿฆ‹

To get xmobar to start, you might need to copy the default configuration file over to ~/.xmobarrc. Also, make sure the output_format option for i3status is set to xmobar. Note: again, min_width is not supported. Same energy, different program.

Example for usage of i3status with xmobar:

i3status | xmobar -o -t "%StdinReader%" -c "[Run StdinReader]"

๐Ÿ’€ WHAT ABOUT CPU FREQUENCY? ๐Ÿ’€

Okay so while we're on specific things, please read this section as a general explanation of why your fave info isn't in i3status. Not me being shady, just being honest.

Let's talk CPU frequency specifically. So many people don't get how frequency scaling actually works. The generally recommended CPU frequency governor ("ondemand") changes the CPU frequency way more often than i3status could ever display it. So the number you see is often just wrong, and honestly it doesn't tell you anything useful anyway. It's giving fake news fr fr.

In general, i3status wants to show you stuff you'd glance at occasionally regardless โ€” like the current date/time, whether you're connected to a WiFi network or not, and whether you have enough disk space for that 4.3 GiB download. Priorities. โœจ

But if you need to look at some kind of info more than once in a while, you're probably better off with a script that pops up and does it. After all, the whole point of computers is not to burden you with extra boring tasks like repeatedly checking a number. Periodt. ๐ŸŽ€


๐Ÿงš EXTERNAL SCRIPTS/PROGRAMS WITH I3STATUS ๐Ÿงš

In i3status, we do not want to implement process management all over again. So there's no module to run arbitrary scripts or commands. Instead, you should use your shell. Like this:

Example for prepending the i3status output:

#!/bin/sh
# shell script to prepend i3status with more stuff

i3status | while :
do
        read line
        echo "mystuff | $line" || exit 1
done

Put that in some script โ€” say .bin/my_i3status.sh โ€” and run that instead of i3status. Chef's kiss. ๐Ÿ‘‘

Note that if you want to use the JSON output format (with colors in i3bar), you need a slightly more complex wrapper script. There are examples in the contrib/ folder, see https://github.com/i3/i3status/tree/master/contrib

โญ SIGNALS โญ

When it receives SIGUSR1, i3status's nanosleep() gets interrupted, which means you force an update. So you can just run killall -USR1 i3status to force an update after changing the system volume, for example. Nudge it. Wake it up. ๐Ÿ’…


๐ŸŒธ SEE ALSO ๐ŸŒธ

strftime(3), date(1), glob(3), dzen2(1), xmobar(1)


๐Ÿ’– AUTHORS ๐Ÿ’–

Michael Stapelberg and contributors

Thorsten Toepper

Baptiste Daroussin

Axel Wagner

Fernando Tarlรก Cardoso Lemos


And that's a wrap, bestie ๐Ÿซถ this lil' page is i3status 2.15, dated 08/19/2024, and it's filed under I3STATUS(1). Go forth and slay your status bar โœจ๐Ÿ’œ