Projectdaenney Life is one big project

WeeChat - all the messaging

At work everyone is free to use whatever communication method they like. This means that depending on the person you’ll either get a Hangout chat, a Slack room or private message or they’ll poke you through IRC.

Having 5 different clients open becomes annoying fairly quickly but thankfully there’s WeeChat! Slack has an IRC gateway and at least 1-on-1 chats still go over Google Talk so BitlBee can take care of that (dealing with Hangouts for multi-user chat is super Google-y bit proprietary ‘cause you know, there ain’t no good protocol for that).

A few settings I like to apply to every server I set up in WeeChat. This settings are inherited by every new server that gets added afterwards:

/set irc.server_default.*

[server_default] (irc.conf)
  irc.server_default.autoconnect = on  (default: off)
  irc.server_default.autorejoin = on  (default: off)
  irc.server_default.nicks = "daenney,daenney_"   (default: "")
  irc.server_default.realname = "Daniele Sluijters"  (default: "")
  irc.server_default.ssl = on  (default: off)
  irc.server_default.username = "daenney"  (default: "")
36 options (matching with "irc.server_default.*")

So, Slack:

/server add slack yourcompany.slack.com/6667 -ssl

Other settings:

/set irc.server.slack.*

[server] (irc.conf)
  irc.server.slack.addresses = "yourcompany.slack.com/6667"
  irc.server.slack.password = "${sec.data.slack}"  (default: (undefined))
  irc.server.slack.ssl = on  (default: (undefined))
  irc.server.slack.ssl_dhkey_size = 1024  (default: (undefined))

36 options (matching with "irc.server.slack.*")

Notice how you can’t see my Slack password, it’s encrypted using WeeChat’s secure storage and I can simply refer to it as ${sec.data.slack}. You can do this with:

/secure passphrase MY_SUPER_SECRET_VERY_STRONG_PASSWORD
/secure set slack SLACK_IRC_GATEWAY_PASSWORD

WeeChat will now ask you on start up for your passphrase in order to decrypt those values.

The people over at Thoughtbot have been kind enough to create the Slacklog plugin for WeeChat which I would recommend getting. It’ll use the Slack API to fetch the latest X messages and display them as backlog when you join a channel.

/set plugins.var.ruby.slacklog.*

[var] (plugins.conf)
  plugins.var.ruby.slacklog.count = "20"
  plugins.var.ruby.slacklog.servers = "yourcompany"
  plugins.var.ruby.slacklog.thoughtbot.api_token = "${sec.data.slack_token}"

3 options (matching with "plugins.var.ruby.slacklog.*")

To use the API you need to create a token for your user which is once again stored using the secure functionality. By default Slacklog will fetch a 100 messages which is a bit much for me so I’ve dialled it down to 20.

Slack has the annoying feature to use voice mode as a way to indicate if people are away or not on IRC, instead of using IRC’s default away mechanism. To make it shut up, just turn on WeeChat’s smart_filter:

/set irc.look.smart_filter on
/filter add irc_smart * irc_smart_filter *

IRC and by extension BitlBee connections are set up as usual. This now means I have everything in one place, my beloved WeeChat. As an added bonus, if overlapping channels exist for a team on both IRC and Slack, because history, you can simply create a split window displaying the different buffers keeping everything neatly in one place.

Because of the sheer amount of channels and networks I now run a second WeeChat instance just for work, which means I can also more easily ignore it (or kill it when I’m on vacation). Simply start WeeChat with -d <alternate directory path>.

Since this is a second instance I also:

/del freenode

/set weechat.look.window_title

[look] (weechat.conf)
  weechat.look.window_title = "work"  (default: "WeeChat ${info:version}")

1 option (matching with "weechat.look.window_title")

To top it all of:

/save

Options saved to sec.conf
Options saved to weechat.conf
Options saved to plugins.conf
Options saved to irc.conf
Options saved to charset.conf
Options saved to aspell.conf
Options saved to logger.conf
Options saved to trigger.conf
Options saved to alias.conf
Options saved to iset.conf
Options saved to buffers.conf
Options saved to script.conf
Options saved to relay.conf
Options saved to exec.conf
Options saved to xfer.conf