Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
My always up-to-date WeeChat configuration (weechat-dev)

WeeChat Screenshot

Enable mouse support

/mouse enable

Encrypted password in sec.conf

/secure passphrase <pass>
/secure set bncaddrport <addr/port>
/secure set bncpass <pass>
/secure set relaypass <pass>
/secure set bitlbeepass <pass>
/secure set pushbulletapikey <key>

Network

Default settings on server creation

/set irc.server_default.nicks r3m
/set irc.server_default.ssl_verify off
/set irc.server_default.capabilities "account-notify,away-notify,cap-notify,multi-prefix,server-time,znc.in/self-message"

the last line request some IRCv3 capabilities. Capabilities supported by WeeChat are: account-notify, away-notify, cap-notify, extended-join, multi-prefix, server-time, userhost-in-names. See IRCv3 Specifications to learn more about IRCv3 capabilities.

Network-specific settings

/server add bitlbee ${sec.data.bncaddrport} -ssl -autoconnect
/set irc.server.bitlbee.password r3m/bitlbee:${sec.data.bncpass}
/set irc.server.bitlbee.command /msg &bitlbee identify;/oper anything ${sec.data.bitlbeepass}

/server add freenode ${sec.data.bncaddrport} -ssl -autoconnect
/set irc.server.freenode.password r3m/freenode:${sec.data.bncpass}

/server add snoonet ${sec.data.bncaddrport} -ssl -autoconnect
/set irc.server.snoonet.password r3m/snoonet:${sec.data.bncpass}

/server add oftc ${sec.data.bncaddrport} -ssl -autoconnect
/set irc.server.oftc.password r3m/oftc:${sec.data.bncpass}

/connect -all

Once you're connected to bitlbee, WeeChat will send a PRIVMSG to the &bitlbee channel to ask BitlBee to use the /oper command to identify. This is more secure because you're password will not be echoed on the screen and will not appears in logs files. This command will send a message to the &bitlbee channel successfully even if you aren't yet on &bitlbee. &bitlbee channel is not +n.

Extensions

Plugins to load at startup

/set weechat.plugin.autoload "*,!lua,!tcl,!ruby,!fifo,!xfer,!guile,!javascript"

this will load all module except lua, tcl, ruby, fifo, xfer, guile and javascript

Aspell

/set aspell.check.default_dict en
/set aspell.check.suggestions 3
/set aspell.color.suggestions *green
/aspell enable

Set the dictionary based on the channel name

/trigger add setdict signal *,irc_in2_join
/trigger set setdict conditions "${nick} == ${info:irc_nick,${server}} && ${channel} =~ [.-](fr|it|es)$ && ${aspell.dict.irc.${server}.${channel}} =="
/trigger set setdict regex "/.*[.-](fr|it|es)$/${re:1}/"
/trigger set setdict command "/set aspell.dict.irc.${server}.${channel} ${tg_signal_data}"

This trigger will set the french dictionnary for channel ending in .fr and -fr Same for it and es.

Note: we will add the suggestions to the statusbar later.

Relay

/relay sslcertkey
/relay add ssl.weechat <port>
/set relay.network.password ${sec.data.relaypass}

If you want a trusted certificate, use let's encrypt! with weechat relay.

Note: Even if I use a bouncer (ZNC), this is quite useful to enable relay. Like this you have access to all IRC client (ZNC) and all weechat remote interface (WeeChat Relay). Of course, WeeChat can do both but ZNC is multi-user.

Logger

/set logger.level.irc 0
/set logger.file.path /home/launch/.znc/users/r3m/moddata/log
/set logger.mask.irc %Y/$server/$channel.%m-%d.log

Note: I do not log IRC conversation via WeeChat (I log via ZNC). However, I use the script grep.py and this script check the value of logger.file.path. If the module is not loaded, the value is not accessible. You could load logger, then set the correct path and run /logs to build the index and then disable logger but I had an issue when I upgrade WeeChat.

Scripts

/script install highmon.pl buffer_autoset.py urlserver.py perlexec.pl autosort.py grep.py text_item.py pushover.pl vimode.py

highmon.pl

/set plugins.var.perl.highmon.alignment "nchannel"

urlserver.py

/set plugins.var.python.urlserver.http_hostname "<my vps IP>"
/set plugins.var.python.urlserver.http_port "<port>"
/set plugins.var.python.urlserver.http_allowed_ips "^<my home IP>$"
/set plugins.var.python.urlserver.http_url_prefix xox
/set plugins.var.python.urlserver.msg_ignore_buffers core.weechat,python.grep,irc.BitlBee.#security,irc.BitlBee.#technews,perl.highmon
/set plugins.var.python.urlserver.http_embed_youtube on

autosort.py

/autosort replacements add ## #
/autosort rules add irc.server.*.&* = 0
/autosort rules add irc.server.*.#* = 1
/autosort rules add irc.server.*.\*status = 2

channels (begin with & and #) will appears right below the server, private message from *status will follow and finally the rest.

pushover.pl

/set plugins.var.perl.pushover.blacklist irc.server.*,irc.*.*status
/set plugins.var.perl.pushover.pb_apikey ${sec.data.pushbulletapikey}
/set plugins.var.perl.pushover.short_name on
/set plugins.var.perl.pushover.service pushbullet

vimode.py

If you use this script, see the input bar below, I included two items from this script to the input bar.

/bar set vi_line_numbers conditions ${active} && ${weechat.bar.vi_cmd.hidden} == 0

The vi_line_numbers bar will be only visible in the active window whenever we enter an Ex command (whenever the vi_cmd bar is visible).

Conky

/buffer_autoset add exec.exec.conky short_name conky

exec conky at startup and right now

/set weechat.startup.command_after_plugins "/exec -norc -noln -buffer conky conky"
/exec -norc -noln -buffer conky conky

change the title of the conky window

/buffer_autoset add exec.exec.conky title Conky - the light-weight system monitor

It will change the title of the conky window from Executed commands to Conky - the light-weight system monitor

this trigger will beautify the output of conky and add a localvar with the value of load average and the buflist will retrieve it

/trigger add conky_tag_color modifier weechat_print
/trigger set conky_tag_color conditions ${tg_buffer} == exec.exec.conky
/trigger set conky_tag_color regex /^ \t(Uptime|CPU|RAM|Swap|Networking|Up|Down):(.*)/ ${color:_31}${re:1}\t${color:reset}${re:2}/ /No swap/0/ /^ \tLoad Average.*// /^Load Average: (.*)/${re:1}/tg_message_nocolor
/trigger set conky_tag_color command ${if:${tg_message}=~Load Average?/buffer set localvar_set_buflist ${tg_message_nocolor}}

my .conkyrc

background no
cpu_avg_samples 2
net_avg_samples 2
no_buffers yes
out_to_stderr no
update_interval 1.0
uppercase no
use_spacer none

TEXT
Load Average: ${loadavg 1 2}
Uptime: $uptime
CPU: $cpu%
RAM: $memperc%
Swap: $swapperc%
Up: ${upspeed venet0}
Down: ${downspeed venet0}

Note: you need conky-cli package on Debian, same for Arch Linux

Weather with wttr.in

/buffer_autoset add exec.exec.weather short_name weather
/set aspell.dict.exec.exec.weather fr
/trigger add weather command weather
/trigger set weather regex "/\s/_/tg_argv_eol1"
/trigger set weather command "/exec -noflush -norc -noln -buffer weather curl -s http://wttr.in/${tg_argv_eol1}?lang=${aspell.dict.exec.exec.weather}"

I found something very similar on the alias wiki page of WeeChat on GitHub. I adjust it for my own use. So when you type /weather Montreal, a new buffer will be created and will show the output of curl -s http://wttr.in/Montreal. (I created a trigger instead of an alias to replace space by _ in city name)

/trigger add set_title_weather_buffer print ""
/trigger set set_title_weather_buffer conditions "${buffer.full_name} == exec.exec.weather && ${tg_message_nocolor} !~ ^\W && ${tg_message_nocolor} !~ (wttr\.in|@igor_chubin)"
/trigger set set_title_weather_buffer regex "/.*/${tg_message_nocolor}/ /[^:]+:(.*)/${re:1}/tg_message"
/trigger set set_title_weather_buffer command "/buffer set title ${tg_message_nocolor};/buffer set localvar_set_buflist ${tg_message}"

I created this trigger to change the title of the buffer from Executed commands to Weather for City: Montreal, Canada.

/trigger add weather_shortcut modifier input_text_for_buffer
/trigger set weather_shortcut conditions "${buffer[tg_modifier_data].full_name} == exec.exec.weather && ${tg_string_nocolor} !~ ^/"
/trigger set weather_shortcut regex "==(.*)==/weather ${re:1}"

This trigger will allow you to enter only the city name (without /weather) in the weather buffer.

Bars

Bar buflist

unmerge servers buffers from core and indent

/set irc.look.server_buffer independent

Note: show channels and privates buffers under their respective server instead of mixing them all.

/set buflist.format.buffer "${format_number}${indent}${eval:${format_name}}${format_hotlist} ${color:31}${buffer.local_variables.filter}${buffer.local_variables.buflist}"
/set buflist.format.buffer_current ${if:${type}==server?${color:*white,31}:${color:*white}}${hide:>,${buffer[last_gui_buffer].number}} ${indent}${if:${type}==server&&${info:irc_server_isupport_value,${name},NETWORK}?${info:irc_server_isupport_value,${name},NETWORK}:${name}} ${color:31}${buffer.local_variables.filter}${buffer.local_variables.buflist}
/set buflist.format.hotlist " ${color:239}${hotlist}${color:239}"
/set buflist.format.hotlist_highlight "${color:163}"
/set buflist.format.hotlist_message "${color:229}"
/set buflist.format.hotlist_private "${color:121}"
/set buflist.format.name "${if:${type}==server?${color:white}:${color_hotlist}}${if:${type}==server||${type}==channel||${type}==private?${if:${cutscr:8,+,${name}}!=${name}?${cutscr:8,${color:${weechat.color.chat_prefix_more}}+,${if:${type}==server&&${info:irc_server_isupport_value,${name},NETWORK}?${info:irc_server_isupport_value,${name},NETWORK}:${name}}}:${cutscr:8, ,${if:${type}==server&&${info:irc_server_isupport_value,${name},NETWORK}?${info:irc_server_isupport_value,${name},NETWORK}                              :${name}                              }}}:${name}}"
/set buflist.format.number "${if:${type}==server?${color:black,31}:${color:239}}${number}${if:${number_displayed}?.: }"
/set weechat.bar.buflist.size 18
/set weechat.bar.buflist.size_max 18

Different foreground and background colors for servers buffers. Display the real network name instead of the one you create in WeeChat. For example, if you add a server BNCFreenode, it will appears as freenode. Servers, channels and privates names that exceed 8 characters will be cut to 8 followed by a + sign. Those who have less than 8 characters will be filled with space to make them align their hotlist with those that exceed 8 characters. Here, I added 25 spaces even if my bar is only 18, if you're bar is more than 25 characters wide, add spaces. Finally, if you type /iset something, the something text will appears at the right of iset. The load average will appears at the right of conky and the current city will appears at the right of weather (if you type /weather )

Bar active title

/bar add activetitle window top 1 0 buffer_title
/set weechat.bar.activetitle.priority 500
/set weechat.bar.activetitle.conditions "${active}"
/set weechat.bar.activetitle.color_fg white
/set weechat.bar.activetitle.color_bg 31
/set weechat.bar.activetitle.separator on

Note: This bar will be different from the already created one. I set the conditions to ${active} so this bar will be displayed on the active window only. The other one will be used for other windows.

Bar title

/set weechat.bar.title.conditions "${inactive}"
/set weechat.bar.title.color_fg black
/set weechat.bar.title.color_bg 31

Bar status

/bar add rootstatus root bottom 1 0 [time],[buffer_count],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_filter,[bitlbee_typing_notice],[lag],[aspell_dict],[aspell_suggest],completion,scroll
/set weechat.bar.rootstatus.color_fg 31
/set weechat.bar.rootstatus.color_bg 234
/set weechat.bar.rootstatus.separator on
/set weechat.bar.rootstatus.priority 500
/bar del status
/bar set rootstatus name status

Note: the built-in status bar is of type window. I prefer a status bar of type root which means it will be outside any window. At this time, you can't change the type of a bar. So we delete the status bar and create a new one.

Bar input

/bar add rootinput root bottom 1 0 [mode_indicator]+[buffer_name]+[input_prompt]+(away),[input_search],[input_paste],input_text,[vi_buffer]"
/set weechat.bar.rootinput.color_bg black
/set weechat.bar.rootinput.priority 1000
/bar del input
/bar set rootinput name input

Note: the built-in input bar is of type window. I prefer a input bar of type root which means it will be outside any window. At this time, you can't change the type of a bar. So we delete the status bar and create a new one.

Bar Nicklist

/set weechat.bar.nicklist.color_fg 229
/set weechat.bar.nicklist.separator on
/set weechat.bar.nicklist.conditions "${nicklist} && ${window.number} == 1"
/set weechat.bar.nicklist.size_max 14
/set weechat.bar.nicklist.size 14

Note: I changed the conditions to display the nicklist only on buffer of type channels ${nicklist} and on the window number 1, which is my chat window (2 being my highlight window and 3 my conky window). In my case, I could remove ${window.numer} == 1 because the highmon and exec buffer (conky) are not of type channels so ${nicklist} is enough.

Bar ZNC (see this dedicated gist)

/set plugins.var.python.text_item.znc_commands "private "

/set plugins.var.znc_commands Version ListMods ListAvailMods ListNicks ListServers AddNetwork DelNetwork ListNetworks MoveNetwork JumpNetwork AddServer DelServer AddTrustedServerFingerprint DelTrustedServerFingerprint ListTrustedServerFingerprints EnableChan DisableChan Attach Detach Topics PlayBuffer ClearBuffer ClearAllChannelBuffers ClearAllQueryBuffers SetBuffer AddBindHost DelBindHost ListBindHosts SetBindHost SetUserBindHost ClearBindHost ClearUserBindHost ShowBindHost Jump Disconnect Connect Uptime LoadMod UnloadMod ReloadMod UpdateMod ShowMOTD SetMOTD AddMOTD ClearMOTD ListPorts AddPort DelPort Rehash SaveConfig ListUsers ListAllUserNetworks ListChans ListClients Traffic Broadcast Shutdown Restart

/bar add znc_commands window right 14 1 znc_commands
/set weechat.bar.znc_commands.conditions "${buffer.full_name} =~ \.*status$ && ${window.number} == 1"
/set weechat.bar.znc_commands.size_max 14

/trigger add hsignal_znc_commands hsignal znc_commands
/trigger set hsignal_znc_commands command "/command -buffer ${buffer.full_name} * /quote znc help ${_bar_item_line};/command -buffer ${buffer.full_name} * /input delete_line;/command -buffer ${buffer.full_name} * /input insert ${_bar_item_line}\x20"

/key bindctxt mouse @item(znc_commands):button1 hsignal:znc_commands  

/eval /perlexec my $i = 0; foreach my $command (split / /, '${plugins.var.znc_commands}') { (my $command2 = $command) =~ s/.*?([A-Z][A-Z]+|[A-Z][a-z]+)$/$1/; $command2 =~ s/([^s])s$/$1/; weechat::command("", "/eval /mute set plugins.var.python.text_item.znc_commands \\${plugins.var.python.text_item.znc_commands}\\\\${color:\\${info:irc_nick_color_name,$command2}}$command\\\\${\\n}"); weechat::command("", "/eval /mute set trigger.trigger.hsignal_znc_commands.regex \\${trigger.trigger.hsignal_znc_commands.regex} /^$i\\\\$/$command/_bar_item_line"); $i++; }

This bar will be exactly like a default nicklist bar. That is, right-positionned with vertical filling. But instead of nicknames, it will contains a znc command per line. If you click on a command, the input bar will be filled with the command name, then you add whatever you want or simply press enter. Futhermore, this will send help command to znc.

Layouts

Layout highlight

/perlexec my $total = weechat::hdata_integer(weechat::hdata_get("window"), weechat::current_window(), "win_height"); weechat::command($buffer, "/window splith " . int(8 / $total * 100));
/buffer perl.highmon
/window 1
/layout store highlight

Note: Instead of having only one window, we split it to create another one that we will use to show all highlights.

Layout highlight-conky

/window 2
/window splitv 85
/buffer exec.conky
/window 1
/layout store highlight-conky

Note: split the highlight monitor window in 2 and show conky in the new one

RSS

/filter add rss irc.freenode.##news irc_privmsg !^\[(/r/netsec|XKCD|Ars Technica|Wired|Wikinews|freenode|EFF|erry|techdirt|TorrentFreak|Science Daily)
/trigger add redirect_newsbin_to_news modifier weechat_print
/trigger set redirect_newsbin_to_news conditions "${tg_buffer} == irc.freenode.#newsbin && ${tg_tag_nick} == slack3r"
/trigger set redirect_newsbin_to_news regex "/.*//"
/trigger set redirect_newsbin_to_news command "/print -buffer irc.freenode.##news ${tg_prefix}\t${tg_message}"
/buffer_autoset add irc.freenode.#newsbin hidden 1

##news and #newsbin are two channels dedicated to live news. On ##news, I use a filter to hide news from site other than those I explicitly mention. On #newsbin, I do not create any filter. Then, the trigger will redirect message from #newsbin to ##news. This way I can see all the news on one buffer. Finally, we hide #newsbin buffer in the buffers bar.

ptpb

/alias add ptpburl /exec -sh -hsignal ptpburl $* 2>&1 | curl -sF c=@- https://ptpb.pw/?u=1
/trigger add ptpburl hsignal ptpburl
/trigger set ptpburl command "/command -buffer ${buffer.full_name} core /input delete_line;/command -buffer ${buffer.full_name} core /input insert ${out}"

This allow you to type /ptpburl uptime for example, to send the output of the uptime command to ptpb. Your input bar content will be replaced by the url of the paste. This way you can visit the URL to see if there is sensitive information before giving the url to everyone. You may wonder why I didn't used something like: /exec -sh -pipe "/input delete_line;/input insert " $* 2>&1 | curl -sF c=@- https://ptpb.pw/?u=1. Well If we use this, the input bar will be filled with the command and not the url.

Highlight

/set weechat.look.highlight *pascalpoitras*
/buffer_autoset add irc.bitlbee.#twitter_pascalpoitras* highlight_words freenode,snoonet,*weechat*
/buffer_autoset add irc.bitlbee.#LET highlight_regex .*
/buffer_autoset add irc.bitlbee.#deals highlight_regex .*
/buffer_autoset add irc.freenode.##reddit-hockey highlight_regex (^GOAL: MTL.*|^Le But: MTL.*)

Triggers

/trigger add upgrade_scripts signal day_changed
/trigger set upgrade_scripts command "/script update;/wait 10s /script upgrade"
/trigger add send_to_active_grep_log_nick command send_to_active_grep_log_nick
/trigger set send_to_active_grep_log_nick conditions ${tg_argv_eol1} && ${type} =~ ^(private|channel)$
/trigger set send_to_active_grep_log_nick regex /\\\$/\\\\/tg_argv1
/trigger set send_to_active_grep_log_nick command /input delete_line;/input insert /exec -sh -norc -pipe "/input insert grep -hiP '^\[\d{2}:\d{2}:\d{2}\] (<|\* )\Q${tg_argv1}\E>? ${tg_argv_eol2} " grep -hiP '^\[\d{2}:\d{2}:\d{2}\] (<|\* )\Q${tg_argv1}\E>? ${tg_argv_eol2}' ~/.znc/users/r3m/moddata/log/`date "+%Y"`/'${server}'/'${buffer.short_name}'.* | shuf -n 1

The trigger upgrade_scripts will update the local script cache and then upgrade all the installed scripts at midnight. The send_to_active_grep_log_nick will search in log for something a user said before. Then it will send the output to IRC. I use the grep.py when searching in log for myself but I created this trigger to return a random line from a user.

Keys

/key bindctxt cursor @item(buffer_nicklist):v /window ${_window_number};/voice ${nick}
/key bindctxt cursor @item(buffer_nicklist):o /window ${_window_number};/op ${nick}
/key bindctxt cursor @item(buffer_nicklist):V /window ${_window_number};/devoice ${nick}
/key bindctxt cursor @item(buffer_nicklist):O /window ${_window_number};/deop ${nick}
/key bindctxt cursor @chat(*):s /window ${_window_number};/slap ${_chat_line_nick};/cursor stop
/key bindctxt cursor @item(buffer_nicklist):s /window ${_window_number};/slap ${nick};/cursor stop
/key bindctxt cursor @item(buflist):d /command -buffer ${full_name} irc /quote znc detach ${short_name};/cursor stop
/key bindctxt cursor @item(buflist):h /command -buffer ${full_name} irc /allchan -current buffer hide;/command -buffer ${full_name} irc /allpv -current buffer hide;/cursor stop
/key bindctxt cursor @item(buflist):H /command -buffer ${full_name} irc /allchan -current buffer unhide;/command -buffer ${full_name} irc /allpv -current buffer unhide;/cursor stop
/key bindctxt cursor @chat(*):g /window ${_window_number};/customgrep ${_chat_line_nick};/cursor stop
/key bindctxt cursor @item(buffer_nicklist):g /window ${_window_number};/customgrep ${nick};/cursor stop
/key bindctxt cursor @chat(*):G /window ${_window_number};/input delete_line;/input insert /send_to_active_grep_log_nick ${_chat_line_nick}\x20;/cursor stop
/key bindctxt cursor @item(buffer_nicklist):G /window ${_window_number};/input delete_line;/input insert /send_to_active_grep_log_nick ${nick}\x20;/cursor stop

I use /buffer hide when I want to hide a buffer in the buffers bar but still want to be able to access it. I use /znc detach on all channels that I have joined only for logging the discussion.

Others Keyboard shortcuts

/key bind meta-meta2-A /bar scroll nicklist * -100%
/key bind meta-meta2-B /bar scroll nicklist * +100%
/key bind meta2-A /input history_global_previous
/key bind meta2-B /input history_global_next

Alias

/alias add cq allpv /buffer close
/alias add slap /me slaps $1 around a bit with a large trout
/alias add customgrep /input delete_line;/input insert /grep log */$server/$channel.* -a ^\[\d{2}:\d{2}:\d{2}\] <%{escape $1}>\x20
/alias add znc /quote znc

Filters

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

Custom join color

/set weechat.color.chat_prefix_join 121
/set weechat.color.chat_host 31
/set irc.color.message_join 121

The weechat.color.chat_host option will also set this color for part and quit. To have a different color, for example, a host in red for parts and quits and green for joins, see this.

Custom part and quit

/set weechat.color.chat_prefix_quit 131
/set irc.color.message_quit 131

The remaining IRC options

/set irc.server_default.away_check 5
/set irc.server_default.away_check_max_nicks 25
/set irc.color.nick_prefixes "q:lightred;a:lightcyan;o:121;h:lightmagenta;v:229;*:lightblue"
/set irc.network.ban_mask_default "*!*@$host"
/set irc.look.buffer_switch_autojoin off
/set irc.look.buffer_switch_join off
/set irc.look.color_nicks_in_nicklist on
/set irc.look.part_closes_buffer on

The remaining Weechat options

/set weechat.look.bar_more_down "▼"
/set weechat.look.bar_more_left "◀"
/set weechat.look.bar_more_right "▶"
/set weechat.look.bar_more_up "▲"
/set weechat.look.buffer_time_format "${253}%H${245}%M"
/set weechat.look.color_inactive_message off
/set weechat.look.color_inactive_prefix off
/set weechat.look.color_inactive_prefix_buffer off
/set weechat.look.color_inactive_window off
/set weechat.look.day_change_message_1date ▬▬▶ %a, %d %b %Y ◀▬▬
/set weechat.look.day_change_message_2dates ▬▬▶ %%a, %%d %%b %%Y (%a, %d %b %Y) ◀▬▬
/set weechat.look.item_buffer_filter "•"
/set weechat.look.prefix_align_min 0
/set weechat.look.prefix_align_max 10
/set weechat.look.prefix_join "▬▬▶"
/set weechat.look.prefix_quit "◀▬▬"
/set weechat.look.prefix_suffix "│"
/set weechat.look.read_marker_string "─"
/set weechat.look.separator_horizontal "="

/set weechat.color.bar_more 229
/set weechat.color.chat_highlight lightred
/set weechat.color.chat_highlight_bg default
/set weechat.color.chat_nick_colors 25,31,37,43,49,61,67,73,79,85,97,103,109,115,121,133,139,145,151,157,163,169,175,181,187,193,199,205,211,217,223,229
/set weechat.color.chat_prefix_more 31
/set weechat.color.chat_prefix_suffix 31
/set weechat.color.chat_read_marker 31
/set weechat.color.chat_time 239
/set weechat.color.chat_delimiters 31
/set weechat.color.separator 31
/set weechat.color.status_data_highlight 163
/set weechat.color.status_data_msg 229
/set weechat.color.status_data_private 121
/set weechat.color.status_more 229
/set weechat.color.status_name 121
/set weechat.color.status_name_ssl 121

The following command will let you run all the commands of my configuration (not really recommended, you should take only what you want and understand)

download myweechat.md and then

/secure passphrase <pass>
/secure set bncaddrport <addr/port>
/secure set bncpass <pass>
/secure set relaypass <pass>
/secure set bitlbeepass <pass>
/secure set pushbulletapikey <key>
/script install highmon.pl buffer_autoset.py urlserver.py perlexec.pl autosort.py grep.py text_item.py pushover.pl vimode.py

Once scripts are installed

/eval /exec -oc sed -E 's/^ *//;/^(\/secure|\/script)/d;/^\//!d' ${env:HOME}/myweechat.md

r3m/freenode:${sec.data.bncpass} what does this mean?

Owner

pascalpoitras commented Nov 6, 2014

This is my encrypted ZNC password in sec.conf

Axighi commented Apr 17, 2015

how to run this script?

Owner

pascalpoitras commented Apr 19, 2015

Just copy all the line and paste it in weechat and press ctrl+y
dont forget : some lines need change

jcvfen commented Jul 26, 2015

nothing happens in buffer when i do /buffer exec.conky
I do have conky installed with ur conkyrc

Look awesome, but why not share your .weechat folder ? Everything is inside, am i wrong ?

Owner

pascalpoitras commented Mar 15, 2016

@jcvfen you need to enable transparency to see the conky. (the conky is on the desktop not in weechat)
@cyberviking you're right but I think it is more useful to know how to use the commands

@pascalpoitras Is pushover working in the latest WeeChat Dev? I've copied your config but push notifications don't seem to be working.

Owner

pascalpoitras commented Apr 19, 2017

@Grogglex yes it works here with the latest dev

WeeChat 1.8-dev (git: v1.7-147-g084f9d7) [compiled on Apr 18 2017 14:44:47]
I also upgrade all script at midnight

do you use pushbullet?

@pascalpoitras i had to do a fresh install....i copied my .weechat folder ...installed weechat and copied my folder back....unfortunately weechat just opens as a fresh start....any pointers form you or anyone welocme!!!

Owner

pascalpoitras commented Apr 23, 2017

@ralpheeee88 you did the right steps, are you sure you didn't put the .weechat backup inside .weechat like so ~/.weechat/.weechat ?

Is there a way to hide inactive buffers? I've used the buffer_autoclose script in the past but it doesn't appear to work with buflist. Sometimes I want to be able to focus on only the buffers that have had activity.

Owner

pascalpoitras commented May 12, 2017

@PowerSchill
There's probably a better way (like really using the API) but you can do this way:

This trigger will unhide hidden buffers whenever a message is received

/trigger addreplace reattach print "" "${buffer.hidden} == 1 && ${tg_tag_notify} == message" "" "/command -buffer irc.$server.$channel core /buffer unhide"

replace message by all or highlight if you want

then you can create another trigger (type timer) that will check each ten seconds (10000) if any of the channels had no activity since 100 seconds

/trigger addreplace detach timer 10000;0;0 "" "" "/allchan /eval /perlexec weechat::command('', '/command -buffer irc.\${server}.\${channel} core /buffer hide') if ((${date:%s} - \${buffer[\${info:irc_buffer,\${server},\${channel}}].lines.last_line.data.date}) > 100)"

it works here on the dev version, but use it at your own risk, I dont tested it a lot

I made a small modification so it doesn't hide the buffer you currently have focused:

/trigger addreplace detach timer 10000;0;0 "" "" "/allchan /eval /perlexec weechat::command('', '/command -buffer irc.\${server}.\${channel} core /buffer hide') if ((${date:%s} - \${buffer[\${info:irc_buffer,\${server},\${channel}}].lines.last_line.data.date}) > 100 && '\${window.buffer.full_name}' !~ 'irc.\${server}.\${channel}')

(I just added && '\${window.buffer.full_name}' !~ 'irc.\${server}.\${channel}' to the condition)

I'd like to stop it hiding buffers which are in the hotlist, too, but I haven't figured that out yet.

MatthewCox commented May 19, 2017 edited

Got the hotlist via perlexec:

/perlexec my $h = weechat::infolist_get('hotlist', '', ''); my $hotlist; while(weechat::infolist_next($h)) { $hotlist.=weechat::infolist_string($h, "buffer_name")." "; } weechat::infolist_free($h); weechat::print($buffer, $hotlist);

Attempting to use this in the trigger via && index($hotlist, '\${server}.\${channel}') == -1 isn't working though - buffers on the hotlist are still being hidden.

Full attempt:
/trigger addreplace detach timer 10000;0;0 "" "" "/allchan /eval /perlexec my $hotlist = weechat::infolist_get('hotlist', '', '')\; my $h\; while(weechat::infolist_next($hotlist)) { $h.=weechat::infolist_string($hotlist, 'buffer_name').' '\; } weechat::infolist_free($hotlist)\; weechat::command('', '/command -buffer irc.\${server}.\${channel} core /buffer hide') if ((${date:%s} - \${buffer[\${info:irc_buffer,\${server},\${channel}}].lines.last_line.data.date}) > 100 && '\${window.buffer.full_name}' !~ 'irc.\${server}.\${channel}' && index($h, '\${server}.\${channel}') == -1)"

Getting a little unwieldy now, heh.

Owner

pascalpoitras commented May 19, 2017 edited

@MatthewCox nice works, for the hotlist you can use this

'${buffer[${info:irc_buffer,${server},${channel}}].hotlist}' ne '0x0')

to test if the buffer is in the hotlist

MatthewCox commented May 19, 2017 edited

Well now, that's much simpler. Thanks!

Final complete trigger, which hides buffers after 100 seconds of inactivity if they both aren't the current buffer and are not in the hotlist:

/trigger addreplace detach timer 10000;0;0 "" "" "/allchan /eval /perlexec weechat::command('', '/command -buffer irc.\${server}.\${channel} core /buffer hide') if ((${date:%s} - \${buffer[\${info:irc_buffer,\${server},\${channel}}].lines.last_line.data.date}) > 100 && '\${window.buffer.full_name}' !~ 'irc.\${server}.\${channel}' && '\${buffer[\${info:irc_buffer,\${server},\${channel}}].hotlist}' eq '0x0')"

And I look forward to jettisoning all of this once buflist supports it natively :)

PentSec commented Jun 11, 2017

i can see your color conf. i put all command, but i can see the same colors of my terminal, I hope can you help me.

Owner

pascalpoitras commented Jun 11, 2017

@PentSec are you talking about the background color? it's the background color of my terminal (urxvt), I use the famous solarized dark color scheme, otherwise I always use these color : 31, 121, 229 in weechat

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment