#!/usr/bin/env perl # vim:ts=4:sw=4:expandtab # © 2012 Michael Stapelberg, Public Domain # This script is a simple wrapper which prefixes each i3status line with custom # information. To use it, ensure your ~/.i3status.conf contains this line: # output_format = "i3bar" # in the 'general' section. # Then, in your ~/.i3/config, use: # status_command i3status | ~/i3status/contrib/wrapper.pl # In the 'bar' section. use strict; use warnings; # You can install the JSON module with 'cpan JSON' or by using your # distribution’s package management system, for example apt-get install # libjson-perl on Debian/Ubuntu. use JSON; use Sys::Hostname; # Don’t buffer any output. $| = 1; # Skip the first line which contains the version header. print scalar ; # The second line contains the start of the infinite array. print scalar ; my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<); my $hostname = hostname; # Read lines forever, ignore a comma at the beginning if it exists. while (my ($statusline) = ( =~ /^,?(.*)/)) { # Decode the JSON-encoded line. my @blocks = @{decode_json($statusline)}; # Prefix our own information (you could also suffix or insert in the # middle). @blocks = ({ full_text => $username . "@" . $hostname, name => 'hostinfo' }, @blocks); # Output the line as JSON. print encode_json(\@blocks) . ",\n"; }