i3status¶
The i3status is the status bar shown at the bottom while using i3.
Table of Contents¶
- Configuring the i3status bar
- Variables
- Default Modules
- Universal
i3barModule Options - Sample Configuration (
man://i3status 34) - Resources
- Examples
Configuring the i3status bar¶
-
The basic idea of i3status is that you can specify which "modules" should be used (the
orderdirective). -
You can configure each module with its own section.
Configuration File¶
-cSpecifies an alternate configuration file path.- By default,
i3statuslooks for config files in the following order:~/.config/i3status/config(or$XDG_CONFIG_HOME/i3status/configif set)/etc/xdg/i3status/config(or$XDG_CONFIG_DIRS/i3status/configif set)~/.i3status.conf/etc/i3status.conf
- By default,
How to Configure¶
1. Defining Modules¶
To add a module to i3status, specify it in the order directive of your
configuration file.
This order directive defines which modules appear on your status bar and in what order.
- This adds the module called
"module_name"to the status bar.
Example:
Here,"datetime", "cpu_usage", and "battery" are the names of modules.
2. Configuring Modules¶
Each module has its own section in the configuration file where you can customize its behavior and appearance.
- A more concrete example, configuring the
datetimemodule:
3. Customizing Output Format¶
For every module, you can specify the output format to control how its information is displayed on the bar.
- Example of customizing the
batterymodule output:
Testing your Configuration¶
- Reload your config with a command like
i3-msg restartfrom within i3. - You can test your
i3statusconfiguration directly in a terminal by runningi3status.- You can change the
output_formattotermwhile doing this.i3barwill output JSON.
- You can change the
Calling External Scripts¶
- You can write scripts and call them from
i3status.- Example: The output of the script is what will be shown on the status bar.
Variables¶
output_format¶
For every module, you can specify the output format.
You'd set the output_format in the general module to define it globally.
Using output_format you can choose which format strings i3status should use in
its output.
Available output formats:
-
i3bari3barcomes withi3and provides a workspace bar which does the right thing in multi-monitor situations.- It also comes with tray support and can display the
i3statusoutput. - This uses JSON to pass as much metadata to
i3baras it can (colors, which blocks can be shortened in which way, etc.).
-
none- Does not use any color codes.
- Separates values by the pipe symbol by default.
- This should be used with
i3barand can be used for custom scripts.
term- Good for debugging config files in the terminal.
Other output formats:
dzen2xmobarlemonbar
Other Variables¶
format
This is the variable that will determine how the text is displayed on the status bar.
align: The alignment policy to use when the minimum width (see below) is not reached.min_width: The minimum width (in pixels) the module should occupy.-
separator: A boolean value which specifies whether a separator line should be drawn after this block. -
separator_block_width: The amount of pixels to leave blank after the block.
Colors¶
Colors are defined in hex
Available color directives are:
colors: Whether or not to show colors (turns colors off iffalse)color_good: Used to show a "good" value (successful).color_degraded: Used when a value is degraded.color_bad: Used to show a "bad" value (an error).color_separator: Used to color the separator for each module- This option has no effect when
output_formatis set to i3bar or none.
- This option has no effect when
It’s also possible to use the color_good, color_degraded, color_bad directives
to define specific colors per module (module scope overrides general scope).
If one of these directives is defined in a module section its value will override the
value defined in the general section just for this module.
Default Modules¶
IPv6: This module gets the IPv6 address used for outgoing connections (that is, the best available public IPv6 address on your computer).
-
Disk: Gets used, free, available and total amount of bytes on the given mounted filesystem. Can be used asdisk "/"ordisk /mnt/usbstickto specify a drive.prefix_typeis used to change how the byte sizes are displayed:binary- IEC prefixes (Ki, Mi, Gi, Ti) represent multiples of powers of 1024. 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.-
Example
diskmodule: -
Format options:
%avail%total%used%free%percentage_avail%percentage_used%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 running). -
Path-exists: Checks if the given path exists in the filesystem. Wireless: Gets the link quality, frequency and ESSID of the given wireless network interface.Ethernet: Gets the IP address and (if possible) the link speed of the given ethernet interface.-
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. -
CPU-Temperature: Gets the temperature of the given thermal zone. CPU Usage: Gets the percentual CPU usage from /proc/stat (Linux) or sysctl(3) (FreeBSD/OpenBSD).Memory: Gets the memory usage from system on a Linux system from /proc/meminfo.-
Load: Gets the system load (number of processes waiting for CPU time in the last 1, 5 and 15 minutes).- See
topoutput.
- See
-
Time: Outputs the current time in the local timezone. TzTime: Outputs the current time in the given timezone.DDate: Outputs the current discordian date in user-specified format.Volume: Outputs the volume of the specified mixer on the specified device.File Contents: Outputs the contents of the specified file.- Example variables:
order += read_file UPTIMEformat:"%title: %content"format_bad:"%title - %errno: %error"path:"/proc/uptime"Max_characters:255
- Example variables:
Universal i3bar Module Options¶
When using the i3bar output format, there are a few additional options that can be used with
all modules to customize their appearance:
align: The alignment policy to use when the minimum width (see below) is not reached.min_width: The minimum width (in pixels) the module should occupy.-
separator: A boolean value which specifies whether a separator line should be drawn after this block. -
separator_block_width: The amount of pixels to leave blank after the block.
Example:
disk "/" {
format = "%avail"
align = "left"
min_width = 100
separator = false
separator_block_width = 1
}
General¶
The general module is where you set your "global" variables for i3status.
File Contents¶
man://i3status 561¶
Outputs the contents of the specified file.
Volume¶
man://i3status 506¶
List the names of your devices:
Output will look something like: The name is what’s inside the angle brackets, not including them.Sample Configuration (man://i3status 34)¶
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"
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"
}
Resources¶
-
i3 User’s Guide: Comprehensive guide and reference for i3 users.
- Available at: https://i3wm.org/docs/userguide.html
-
i3statusMan Page: Detailed documentation on i3status, covering all available modules and configuration options.man://i3status
Examples¶
-
Example of customizing the
batterymodule output: -
A more concrete example, configuring the
datetimemodule: -
Example of calling a custom script: