From 27ce755fac7a80854e7b6015ec6727c2ee146a85 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Fri, 6 Apr 2018 17:28:31 -0500 Subject: [PATCH] Lots of incremental improvements * remove irssi since it doesn't have the features I want/need * add autocutsel for clipboard pains (still needs work) * tmux is even better now with proper session-switching controls --- apps/irssi/config | 281 ----------------- apps/irssi/default.theme | 294 ------------------ apps/irssi/lytedev.theme | 182 ----------- de/xinitrc | 3 + readme.md | 2 +- .../arch-linux/provisioning/2-essentials.bash | 2 + scripts/bin/tmux-session-list | 16 +- shell/aliases | 29 +- shell/shell_funcs | 43 ++- shell/tmux.conf | 36 ++- 10 files changed, 84 insertions(+), 804 deletions(-) delete mode 100644 apps/irssi/config delete mode 100644 apps/irssi/default.theme delete mode 100644 apps/irssi/lytedev.theme diff --git a/apps/irssi/config b/apps/irssi/config deleted file mode 100644 index c4eac2e..0000000 --- a/apps/irssi/config +++ /dev/null @@ -1,281 +0,0 @@ -servers = ( - { - address = "lytedev.io"; - # password = "lytedev/nixers:${IRC_PASS}"; - chatnet = "lytedev"; - port = "6667"; - use_ssl = "yes"; - ssl_verify = "no"; - autoconnect = "yes"; - } -); - -chatnets = { - lytedev = { - type = "IRC"; - autosendcmd = "/quote pass lytedev:${IRC_PASS}"; - }; -}; - -channels = ( ); - -aliases = { - ATAG = "WINDOW SERVER"; - ADDALLCHANS = "SCRIPT EXEC foreach my \\$channel (Irssi::channels()) { Irssi::command(\"CHANNEL ADD -auto \\$channel->{name} \\$channel->{server}->{tag} \\$channel->{key}\")\\;}"; - B = "BAN"; - BACK = "AWAY"; - BANS = "BAN"; - BYE = "QUIT"; - C = "CLEAR"; - CALC = "EXEC - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi"; - CHAT = "DCC CHAT"; - CUBES = "SCRIPT EXEC Irssi::active_win->print(\"%_bases\", MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print( do { join '', map { \"%x0\\${_}0\\$_\" } '0'..'9','A'..'F' }, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print(\"%_cubes\", MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print( do { my \\$y = \\$_*6 \\; join '', map { my \\$x = \\$_ \\; map { \"%x\\$x\\$_\\$x\\$_\" } @{['0'..'9','A'..'Z']}[\\$y .. \\$y+5] } 1..6 }, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) for 0..5 \\; Irssi::active_win->print(\"%_grays\", MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print( do { join '', map { \"%x7\\${_}7\\$_\" } 'A'..'X' }, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) \\; Irssi::active_win->print(\"%_mIRC extended colours\", MSGLEVEL_CLIENTCRAP) \\; my \\$x \\; \\$x .= sprintf \"\00399,%02d%02d\",\\$_,\\$_ for 0..15 \\; Irssi::active_win->print(\\$x, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) \\; for my \\$z (0..6) { my \\$x \\; \\$x .= sprintf \"\00399,%02d%02d\",\\$_,\\$_ for 16+(\\$z*12)..16+(\\$z*12)+11 \\; Irssi::active_win->print(\\$x, MSGLEVEL_NEVER | MSGLEVEL_CLIENTCRAP) }"; - DATE = "TIME"; - DEHIGHLIGHT = "DEHILIGHT"; - DESCRIBE = "ACTION"; - DHL = "DEHILIGHT"; - EXEMPTLIST = "MODE $C +e"; - EXIT = "QUIT"; - GOTO = "SCROLLBACK GOTO"; - HIGHLIGHT = "HILIGHT"; - HL = "HILIGHT"; - HOST = "USERHOST"; - INVITELIST = "MODE $C +I"; - J = "JOIN"; - K = "KICK"; - KB = "KICKBAN"; - KN = "KNOCKOUT"; - LAST = "LASTLOG"; - LEAVE = "PART"; - M = "MSG"; - MUB = "UNBAN *"; - N = "NAMES"; - NMSG = "^MSG"; - P = "PART"; - Q = "QUERY"; - RESET = "SET -default"; - RUN = "SCRIPT LOAD"; - SAY = "MSG *"; - SB = "SCROLLBACK"; - SBAR = "STATUSBAR"; - SIGNOFF = "QUIT"; - SV = "MSG * Irssi $J ($V) - http://www.irssi.org"; - T = "TOPIC"; - UB = "UNBAN"; - UMODE = "MODE $N"; - UNSET = "SET -clear"; - W = "WHO"; - WC = "WINDOW CLOSE"; - WG = "WINDOW GOTO"; - WJOIN = "JOIN -window"; - WI = "WHOIS"; - WII = "WHOIS $0 $0"; - WL = "WINDOW LIST"; - WN = "WINDOW NEW HIDDEN"; - WQUERY = "QUERY -window"; - WW = "WHOWAS"; - 1 = "WINDOW GOTO 1"; - 2 = "WINDOW GOTO 2"; - 3 = "WINDOW GOTO 3"; - 4 = "WINDOW GOTO 4"; - 5 = "WINDOW GOTO 5"; - 6 = "WINDOW GOTO 6"; - 7 = "WINDOW GOTO 7"; - 8 = "WINDOW GOTO 8"; - 9 = "WINDOW GOTO 9"; - 10 = "WINDOW GOTO 10"; - 11 = "WINDOW GOTO 11"; - 12 = "WINDOW GOTO 12"; - 13 = "WINDOW GOTO 13"; - 14 = "WINDOW GOTO 14"; - 15 = "WINDOW GOTO 15"; - 16 = "WINDOW GOTO 16"; - 17 = "WINDOW GOTO 17"; - 18 = "WINDOW GOTO 18"; - 19 = "WINDOW GOTO 19"; - 20 = "WINDOW GOTO 20"; - 21 = "WINDOW GOTO 21"; - 22 = "WINDOW GOTO 22"; - 23 = "WINDOW GOTO 23"; - 24 = "WINDOW GOTO 24"; - 25 = "WINDOW GOTO 25"; - 26 = "WINDOW GOTO 26"; - 27 = "WINDOW GOTO 27"; - 28 = "WINDOW GOTO 28"; - 29 = "WINDOW GOTO 29"; - 30 = "WINDOW GOTO 30"; - 31 = "WINDOW GOTO 31"; - 32 = "WINDOW GOTO 32"; - 33 = "WINDOW GOTO 33"; - 34 = "WINDOW GOTO 34"; - 35 = "WINDOW GOTO 35"; - 36 = "WINDOW GOTO 36"; - 37 = "WINDOW GOTO 37"; - 38 = "WINDOW GOTO 38"; - 39 = "WINDOW GOTO 39"; - 40 = "WINDOW GOTO 40"; - 41 = "WINDOW GOTO 41"; - 42 = "WINDOW GOTO 42"; - 43 = "WINDOW GOTO 43"; - 44 = "WINDOW GOTO 44"; - 45 = "WINDOW GOTO 45"; - 46 = "WINDOW GOTO 46"; - 47 = "WINDOW GOTO 47"; - 48 = "WINDOW GOTO 48"; - 49 = "WINDOW GOTO 49"; - 50 = "WINDOW GOTO 50"; - 51 = "WINDOW GOTO 51"; - 52 = "WINDOW GOTO 52"; - 53 = "WINDOW GOTO 53"; - 54 = "WINDOW GOTO 54"; - 55 = "WINDOW GOTO 55"; - 56 = "WINDOW GOTO 56"; - 57 = "WINDOW GOTO 57"; - 58 = "WINDOW GOTO 58"; - 59 = "WINDOW GOTO 59"; - 60 = "WINDOW GOTO 60"; - 61 = "WINDOW GOTO 61"; - 62 = "WINDOW GOTO 62"; - 63 = "WINDOW GOTO 63"; - 64 = "WINDOW GOTO 64"; - 65 = "WINDOW GOTO 65"; - 66 = "WINDOW GOTO 66"; - 67 = "WINDOW GOTO 67"; - 68 = "WINDOW GOTO 68"; - 69 = "WINDOW GOTO 69"; - 70 = "WINDOW GOTO 70"; - 71 = "WINDOW GOTO 71"; - 72 = "WINDOW GOTO 72"; - 73 = "WINDOW GOTO 73"; - 74 = "WINDOW GOTO 74"; - 75 = "WINDOW GOTO 75"; - 76 = "WINDOW GOTO 76"; - 77 = "WINDOW GOTO 77"; - 78 = "WINDOW GOTO 78"; - 79 = "WINDOW GOTO 79"; - 80 = "WINDOW GOTO 80"; - 81 = "WINDOW GOTO 81"; - 82 = "WINDOW GOTO 82"; - 83 = "WINDOW GOTO 83"; - 84 = "WINDOW GOTO 84"; - 85 = "WINDOW GOTO 85"; - 86 = "WINDOW GOTO 86"; - 87 = "WINDOW GOTO 87"; - 88 = "WINDOW GOTO 88"; - 89 = "WINDOW GOTO 89"; - 90 = "WINDOW GOTO 90"; - 91 = "WINDOW GOTO 91"; - 92 = "WINDOW GOTO 92"; - 93 = "WINDOW GOTO 93"; - 94 = "WINDOW GOTO 94"; - 95 = "WINDOW GOTO 95"; - 96 = "WINDOW GOTO 96"; - 97 = "WINDOW GOTO 97"; - 98 = "WINDOW GOTO 98"; - 99 = "WINDOW GOTO 99"; - znc = "msg *status"; -}; - -settings = { - core = { - real_name = "daniel"; - user_name = "lytedev"; - nick = "lytedev"; - use_proxy = "yes"; - proxy_address = "lytedev.io"; - proxy_port = "6667"; - # proxy_password = "${IRC_PASS}"; - proxy_string = ""; - proxy_string_after = "conn %s %d"; - }; - "fe-text" = { actlist_sort = "refnum"; }; - "fe-common/core" = { theme = "lytedev"; }; -}; -hilights = ( - { text = "wraith"; nick = "yes"; word = "yes"; }, - { text = "lytedev"; nick = "yes"; word = "yes"; } -); -statusbar = { - # formats: - # when using {templates}, the template is shown only if it's argument isn't - # empty unless no argument is given. for example {sb} is printed always, - # but {sb $T} is printed only if $T isn't empty. - - items = { - # start/end text in statusbars - barstart = "{sbstart}"; - barend = "{sbend}"; - - topicbarstart = "{topicsbstart}"; - topicbarend = "{topicsbend}"; - - time = ""; - user = "{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}"; - - # window_empty is printed with empty windows - window = "{sb $winref:$tag/$itemname{sbmode $M}}"; - window_empty = "{sb $winref{sbservertag $tag}}"; - prompt = "{prompt $[.15]itemname}"; - prompt_empty = "{prompt $winname}"; - topic = " $topic"; - topic_empty = " Empty Topic"; - - # all of these treated specially, they're only displayed when needed - lag = "{sb $0-}"; - act = "{sb $0-}"; - more = "... "; - }; - - # there's two type of statusbars. root statusbars are either at the top - # of the screen or at the bottom of the screen. window statusbars are at - # the top/bottom of each split window in screen. - default = { - # the "default statusbar" to be displayed at the bottom of the window. - # contains all the normal items. - - # statusbar to use in inactive split windows - window_inact = { - type = "window"; - placement = "bottom"; - position = "-1"; - visible = "inactive"; - items = { - barstart = { priority = "100"; }; - window = { }; - window_empty = { }; - more = { priority = "-1"; alignment = "right"; }; - barend = { priority = "100"; alignment = "right"; }; - }; - }; - - # we treat input line as yet another statusbar :) It's possible to - # add other items before or after the input line item. - prompt = { - type = "root"; - placement = "bottom"; - # we want to be at the bottom always - position = "100"; - visible = "always"; - items = { - prompt = { priority = "-1"; }; - prompt_empty = { priority = "-1"; }; - # treated specially, this is the real input line. - input = { priority = "10"; }; - }; - }; - - # topicbar - topic = { - type = "root"; - placement = "top"; - position = "1"; - visible = "active"; - items = { - topicbarstart = { priority = "100"; }; - topic = { }; - topic_empty = { }; - topicbarend = { priority = "100"; alignment = "right"; }; - }; - }; - }; -}; diff --git a/apps/irssi/default.theme b/apps/irssi/default.theme deleted file mode 100644 index 6b6aeab..0000000 --- a/apps/irssi/default.theme +++ /dev/null @@ -1,294 +0,0 @@ -# When testing changes, the easiest way to reload the theme is with /RELOAD. -# This reloads the configuration file too, so if you did any changes remember -# to /SAVE it first. Remember also that /SAVE overwrites the theme file with -# old data so keep backups :) - -# TEMPLATES: - -# The real text formats that irssi uses are the ones you can find with -# /FORMAT command. Back in the old days all the colors and texts were mixed -# up in those formats, and it was really hard to change the colors since you -# might have had to change them in tens of different places. So, then came -# this templating system. - -# Now the /FORMATs don't have any colors in them, and they also have very -# little other styling. Most of the stuff you need to change is in this -# theme file. If you can't change something here, you can always go back -# to change the /FORMATs directly, they're also saved in these .theme files. - -# So .. the templates. They're those {blahblah} parts you see all over the -# /FORMATs and here. Their usage is simply {name parameter1 parameter2}. -# When irssi sees this kind of text, it goes to find "name" from abstracts -# block below and sets "parameter1" into $0 and "parameter2" into $1 (you -# can have more parameters of course). Templates can have subtemplates. -# Here's a small example: -# /FORMAT format hello {colorify {underline world}} -# abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; } -# When irssi expands the templates in "format", the final string would be: -# hello %G%Uworld%U%n -# ie. underlined bright green "world" text. -# and why "$0-", why not "$0"? $0 would only mean the first parameter, -# $0- means all the parameters. With {underline hello world} you'd really -# want to underline both of the words, not just the hello (and world would -# actually be removed entirely). - -# COLORS: - -# You can find definitions for the color format codes in docs/formats.txt. - -# There's one difference here though. %n format. Normally it means the -# default color of the terminal (white mostly), but here it means the -# "reset color back to the one it was in higher template". For example -# if there was /FORMAT test %g{foo}bar, and foo = "%Y$0%n", irssi would -# print yellow "foo" (as set with %Y) but "bar" would be green, which was -# set at the beginning before the {foo} template. If there wasn't the %g -# at start, the normal behaviour of %n would occur. If you _really_ want -# to use the terminal's default color, use %N. - -############################################################################# - -# default foreground color (%N) - -1 is the "default terminal color" -default_color = "-1"; - -# print timestamp/servertag at the end of line, not at beginning -info_eol = "false"; - -# these characters are automatically replaced with specified color -# (dark grey by default) -replaces = { "[]=" = "%K$*%n"; }; - -abstracts = { - ## - ## generic - ## - - # text to insert at the beginning of each non-message line - line_start = "%B-%n!%B-%n "; - - # timestamp styling, nothing by default - timestamp = "$*"; - - # any kind of text that needs hilighting, default is to bold - hilight = "%_$*%_"; - - # any kind of error message, default is bright red - error = "%R$*%n"; - - # channel name is printed - channel = "%_$*%_"; - - # nick is printed - nick = "%_$*%_"; - - # nick host is printed - nickhost = "[$*]"; - - # server name is printed - server = "%_$*%_"; - - # some kind of comment is printed - comment = "[$*]"; - - # reason for something is printed (part, quit, kick, ..) - reason = "{comment $*}"; - - # mode change is printed ([+o nick]) - mode = "{comment $*}"; - - ## - ## channel specific messages - ## - - # highlighted nick/host is printed (joins) - channick_hilight = "%C$*%n"; - chanhost_hilight = "{nickhost %c$*%n}"; - - # nick/host is printed (parts, quits, etc.) - channick = "%c$*%n"; - chanhost = "{nickhost $*}"; - - # highlighted channel name is printed - channelhilight = "%c$*%n"; - - # ban/ban exception/invite list mask is printed - ban = "%c$*%n"; - - ## - ## messages - ## - - # the basic styling of how to print message, $0 = nick mode, $1 = nick - msgnick = "%K<%n$0$1-%K>%n %|"; - - # message from you is printed. "ownnick" specifies the styling of the - # nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the - # whole line. - - # Example1: You want the message text to be green: - # ownmsgnick = "{msgnick $0 $1-}%g"; - # Example2.1: You want < and > chars to be yellow: - # ownmsgnick = "%Y{msgnick $0 $1-%Y}%n"; - # (you'll also have to remove <> from replaces list above) - # Example2.2: But you still want to keep <> grey for other messages: - # pubmsgnick = "%K{msgnick $0 $1-%K}%n"; - # pubmsgmenick = "%K{msgnick $0 $1-%K}%n"; - # pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n"; - # ownprivmsgnick = "%K{msgnick $*%K}%n"; - # privmsgnick = "%K{msgnick %R$*%K}%n"; - - # $0 = nick mode, $1 = nick - ownmsgnick = "{msgnick $0 $1-}"; - ownnick = "%_$*%n"; - - # public message in channel, $0 = nick mode, $1 = nick - pubmsgnick = "{msgnick $0 $1-}"; - pubnick = "%N$*%n"; - - # public message in channel meant for me, $0 = nick mode, $1 = nick - pubmsgmenick = "{msgnick $0 $1-}"; - menick = "%Y$*%n"; - - # public highlighted message in channel - # $0 = highlight color, $1 = nick mode, $2 = nick - pubmsghinick = "{msgnick $1 $0$2-%n}"; - - # channel name is printed with message - msgchannel = "%K:%c$*%n"; - - # private message, $0 = nick, $1 = host - privmsg = "[%R$0%K(%r$1-%K)%n] "; - - # private message from you, $0 = "msg", $1 = target nick - ownprivmsg = "[%r$0%K(%R$1-%K)%n] "; - - # own private message in query - ownprivmsgnick = "{msgnick $*}"; - ownprivnick = "%_$*%n"; - - # private message in query - privmsgnick = "{msgnick %R$*%n}"; - - ## - ## Actions (/ME stuff) - ## - - # used internally by this theme - action_core = "%_ * $*%n"; - - # generic one that's used by most actions - action = "{action_core $*} "; - - # own action, both private/public - ownaction = "{action $*}"; - - # own action with target, both private/public - ownaction_target = "{action_core $0}%K:%c$1%n "; - - # private action sent by others - pvtaction = "%_ (*) $*%n "; - pvtaction_query = "{action $*}"; - - # public action sent by others - pubaction = "{action $*}"; - - - ## - ## other IRC events - ## - - # whois - whois = "%# $[8]0 : $1-"; - - # notices - ownnotice = "[%r$0%K(%R$1-%K)]%n "; - notice = "%K-%M$*%K-%n "; - pubnotice_channel = "%K:%m$*"; - pvtnotice_host = "%K(%m$*%K)"; - servernotice = "%g!$*%n "; - - # CTCPs - ownctcp = "[%r$0%K(%R$1-%K)] "; - ctcp = "%g$*%n"; - - # wallops - wallop = "%_$*%n: "; - wallop_nick = "%n$*"; - wallop_action = "%_ * $*%n "; - - # netsplits - netsplit = "%R$*%n"; - netjoin = "%C$*%n"; - - # /names list - names_prefix = ""; - names_nick = "[%_$0%_$1-] "; - names_nick_op = "{names_nick $*}"; - names_nick_halfop = "{names_nick $*}"; - names_nick_voice = "{names_nick $*}"; - names_users = "[%g$*%n]"; - names_channel = "%G$*%n"; - - # DCC - dcc = "%g$*%n"; - dccfile = "%_$*%_"; - - # DCC chat, own msg/action - dccownmsg = "[%r$0%K($1-%K)%n] "; - dccownnick = "%R$*%n"; - dccownquerynick = "%_$*%n"; - dccownaction = "{action $*}"; - dccownaction_target = "{action_core $0}%K:%c$1%n "; - - # DCC chat, others - dccmsg = "[%G$1-%K(%g$0%K)%n] "; - dccquerynick = "%G$*%n"; - dccaction = "%_ (*dcc*) $*%n %|"; - - ## - ## statusbar - ## - - # default background for all statusbars. You can also give - # the default foreground color for statusbar items. - sb_background = "%4%w"; - - # default backround for "default" statusbar group - #sb_default_bg = "%4"; - # background for prompt / input line - sb_prompt_bg = "%n"; - # background for info statusbar - sb_info_bg = "%8"; - # background for topicbar (same default) - #sb_topic_bg = "%4"; - - # text at the beginning of statusbars. sb-item already puts - # space there,so we don't use anything by default. - sbstart = ""; - # text at the end of statusbars. Use space so that it's never - # used for anything. - sbend = " "; - - topicsbstart = "{sbstart $*}"; - topicsbend = "{sbend $*}"; - - prompt = "[$*] "; - - sb = " %c[%n$*%c]%n"; - sbmode = "(%c+%n$*)"; - sbaway = " (%GzZzZ%n)"; - sbservertag = ":$0 (change with ^X)"; - sbnickmode = "$0"; - - # activity in statusbar - - # ',' separator - sb_act_sep = "%c$*"; - # normal text - sb_act_text = "%c$*"; - # public message - sb_act_msg = "%W$*"; - # hilight - sb_act_hilight = "%M$*"; - # hilight with specified color, $0 = color, $1 = text - sb_act_hilight_color = "$0$1-%n"; -}; diff --git a/apps/irssi/lytedev.theme b/apps/irssi/lytedev.theme deleted file mode 100644 index b4c8f32..0000000 --- a/apps/irssi/lytedev.theme +++ /dev/null @@ -1,182 +0,0 @@ -# Based on neongold by xero @ xero.nu - -default_color = "-1"; - -info_eol = "false"; - -replaces = { "[]" = "%w$*%n"; }; - -abstracts = { - indent_default = " + %Y│%n "; - line_start = ""; - timestamp = ""; - hilight = "%_$*%_"; - error = "%r$*%n"; - channel = "%w$*%n"; - nick = "%_$*%_"; - nickhost = "%g$*"; - server = "%_$*%_"; - comment = "%n(%w$*%n)"; - reason = "{comment $*}"; - mode = "{comment $*}"; - - channick_hilight = "%g$*%N"; - chanhost_hilight = "{nickhost $*}"; - - channick = "$*"; - chanhost = "{nickhost $*}"; - - channelhilight = "%g$*%n"; - - ban = "$*"; - - msgnick = "%Y$0%w$1 %Y│ %N"; - ownmsgnick = "%Y$0%w$1 %Y│ "; - ownnick = "%W$*%n"; - pubnick = "%N$*%n"; - menick = "%y$*%y"; - - # generic one that's used by most actions - action = "%b$* %Y│%b"; - - # own action, both private/public - ownaction = "%b$* %Y│%b"; - - # own action with target, both private/public - ownaction_target = "{action $*}"; - - # private action sent by others - pvtaction = "{action $*}"; - pvtaction_query = "{action $*}"; - - # public action sent by others - pubaction = "{action $*}"; - - whois = "%w │ %n$1-"; - - ownnotice = "%NNote n = %Mnew%n $0 ($1-) "; - notice = "%M$*%n "; - pubnotice_channel = " %N($*)"; - pvtnotice_host = " %N($*)"; - servernotice = " %N($*)"; - - ownctcp = "%N$0 (%w$1-%N) "; - ctcp = "%N$*%n"; - - wallop = "%w$*%n: "; - wallop_nick = "%n$*"; - wallop_action = "%w * $*%n "; - - #netsplit = "%w$*%n"; - #netjoin = "%w$*%n"; - - names_users = "%Y┌─┄┄─┄┄──┘ %nusers in %b$1"; - names_nick = "$2$0%n$1 "; - names_nick_op = "{names_nick $* %w}"; - names_nick_halfop = "{names_nick $* %w}"; - names_nick_voice = "{names_nick $* %w}"; - names_prefix = "%Y│ %n$1"; - names_channel = "%W$*%n"; - - dcc = "%g$*%n"; - dccfile = "%_$*%_"; - - dccownmsg = "%g /* $0 ($1-) */"; - dccownnick = "$*%n"; - dccownquerynick = "$*%n"; - dccownaction = "{action $*}"; - dccownaction_target = "{action $*}"; - - dccmsg = "%g/* $1- ($0) */"; - dccquerynick = "%g$*%n"; - dccaction = "{action $*}"; - - sb_background = "%N%N"; - - sb_prompt_bg = "%n"; - - sbstart = " %Y┌─┄┄─────┘ %w"; - sbend = ""; - - topicsbstart = "%w$C %Y┄─┄$*"; - topicsbend = "$*"; - - prompt = " %Y└──┄┄%n "; - - sb = "%N$*%N "; - #sb = ""; - sbmode = "%b(%w+%N$*%b)%n"; - sbaway = "%b(%Naway%b)%N"; - sbservertag = "%b:%N$0%b(%N^X%b)"; - #sbservertag = ""; - sbnickmode = "%w$0%N$1"; - - #sb_usercount = "{sb %_$0%_ nicks ($1-)}"; - #sb_uc_ircops = "%_*%_$*"; - #sb_uc_ops = "%_@%r$*%n"; - #sb_uc_halfops = "%_%%%g$*%n"; - #sb_uc_voices = "%_+%y$*%n"; - #sb_uc_normal = "%w$*%n"; - #sb_uc_space = " "; - - #sb_act_sep = "%b$*"; - #sb_act_text = "%N$*"; - #sb_act_msg = "%b$*"; - #sb_act_hilight = "%R%9$*%n"; - #sb_act_hilight_color = "%R%9$1-%n"; -}; - -formats = { - "fe-common/core" = { - #line_start = "{line_start}"; - line_start_irssi = "{line_start}"; - join = "%n join %Y┄┄─┤ %n{channick $0} %w(%n{nickhost %w$1}%w)%n joined %w$2"; - part = "%n part %Y┄┄─┤ %n{channick $0} %w(%n{nickhost %w$1}%w)%n left %w$2 {reason %b$3}"; - quit = "%n quit %Y┄┄─┤ %nsignoff%w: %n{channick $0}%w {reason %b$2}"; - kick = "%r kick %Y┄┄─┤ %n{channick $0} was kicked by $2 %w{reason %b$3}"; - nick_changed = " %Y┄┼┄%w %n{channick $0} %Y>> %W{channick $1}"; - your_nick_changed = " %Y┄┼┄%w %n{channick $0} %Y>> %W{channick $1}"; - new_topic = "%Y┌─┄┄─────┘%n\012%Y│ %wtopic %b'$2' %Nset by%b $0\012%Y└─┄┄─┄┄──┐ "; - endofnames = "%Y└─┄┄─┄┄──┐ %btotal: {hilight $2} ops, {hilight $3} halfops, {hilight $4} voices, {hilight $5} normies%n"; - #nick padding - pubmsg = "{pubmsgnick $2 {pubnick \00312$[-7]0}}$1"; - own_msg = "{ownmsgnick $2 {ownnick $[-7]0}}$1"; - own_msg_channel = "{ownmsgnick $3 {ownnick $[-7]0}{msgchannel $1}}$2"; - own_msg_private_query = "{ownprivmsgnick {ownprivnick $[-7]2}}$1"; - pubmsg_me = "{pubmsghinick $[-7]0 {menick $2}}%y$1"; - pubmsg_me_channel = "{pubmsghinick $3 {menick $[-7]0}{msgchannel $1}}$2"; - pubmsg_hilight_channel = "{pubmsghinick $0 $[-7]1$4{msgchannel $2}}$3"; - pubmsg_hilight = "{pubmsghinick $3 {menick $[-7]1}}$2"; - pubmsg_channel = "{pubmsgnick {pubnick %G$[-7]0}$2}$1"; - msg_private_query = "{privmsgnick $[-7]0}$2"; - }; - "fe-common/irc" = { - chanmode_change = "%n mode %Y┄┄─┤ %w(%B{channick $1}%w) %nby %B$2"; - server_chanmode_change = "%n mode %Y┄┄─┤ %w{channick $1} %n(%w$2%n)"; - whois = "%Y┌─┄┄ %n\012%Y│ %wuser %b$0 %w(%n$1%b@%n$2%w) %n\012%Y│ %wname %n$3%n"; - whois_idle = "%Y│ %widle%b %|$1d $2h $3m $4s"; - whois_idle_signon = "%Y│ %widle%b %|$1d $2h $3m $4s {comment signon: $5}"; - whois_server = "%Y│ %wserv%b %|$1 {comment $2}"; - whois_oper = "%Y│ %woper%b {hilight $1}"; - whois_registered = "%Y│ %wrgis%n yes"; - whois_help = "%Y│ %whelp%b available for help"; - whois_modes = "%Y│ %wmode%b $1"; - whois_realhost = "%Y│ %wreal%b $1-"; - whois_usermode = "%Y│ %wumod%b $1"; - whois_channels = "%Y│ %wchan%b %|$1"; - whois_away = "%Y│ %waway%b %|$1"; - whois_special = "%Y│ %winfo%b {comment %|$1}"; - whois_extra = "%Y│ %wextr%b %|$1"; - end_of_whois = "%Y└─┄┄ "; - whois_not_found = "%Y──┄┄ %wthere is no such nick %b$0"; - topic = "%ntopic %Y┄┄─┤ %B$0 %b$1"; - topic_info = " %Y┄┄─┤ %wset by %b$0 %B(%w$1%B)"; - channel_synced = "%n sync %Y┄┄─┤ %nin {hilight $1} secs"; - channel_created = "%n %Y┄┄─┤ %ncreated $1"; - action_core = "%b$[-8]0 %Y│ %b$1"; - own_action = "{ownaction $[-8]0} $1"; - action_private = "{pvtaction $[-8]0}$1"; - action_private_query = "{pvtaction_query $[-8} $2"; - action_public = "{pubaction $[-8]0}$1"; - }; -}; diff --git a/de/xinitrc b/de/xinitrc index 4f5545d..3a3baec 100644 --- a/de/xinitrc +++ b/de/xinitrc @@ -24,5 +24,8 @@ pulseaudio --start & xset s off -dpms & +autocutsel -fork & +autocutsel -selection PRIMARY -fork & + # fire up wm exec "$DOTFILES_PATH/de/wmstart" diff --git a/readme.md b/readme.md index b15e338..b0a1f3c 100644 --- a/readme.md +++ b/readme.md @@ -43,7 +43,7 @@ become my primary or am very interested in using in more depth is in **bold**) for various tasks: * **Terminal Emulators**: *rxvt-unicode* -* **Text Editors**: **vim/Neovim**, Sublime Text, Kakoune +* **Text Editors**: **vim/Neovim**, Sublime Text * **Terminal Multiplexers**: *tmux* * **Web Browser**: *Google Chrome*, **qutebrowser**, luakit * **Music**: *Google Play Music* diff --git a/scripts/arch-linux/provisioning/2-essentials.bash b/scripts/arch-linux/provisioning/2-essentials.bash index b7fd8e9..4389aa4 100755 --- a/scripts/arch-linux/provisioning/2-essentials.bash +++ b/scripts/arch-linux/provisioning/2-essentials.bash @@ -8,6 +8,7 @@ pacaur -S \ htop `# Process Management and System Resources Monitoring` \ openssh `# Remote Access` \ openssl `# Crypto` \ + elixir `# Elixir Language` \ ruby `# Language` \ nodejs npm `# Language` \ python python-pip `# Python 3 Language` \ @@ -35,6 +36,7 @@ pacaur -S \ terminus-font ttf-monaco `# Primary Fonts` \ ttf-freefont `# Font` \ ttf-font-awesome `# Icon Font` \ + autocutsel `# Clipboard Helper` \ curl `# HTTP Utility` \ w3m `# Viewing Images in Terminals` \ jq `# CLI for Interacting with JSON` \ diff --git a/scripts/bin/tmux-session-list b/scripts/bin/tmux-session-list index e8e1455..bf3f887 100755 --- a/scripts/bin/tmux-session-list +++ b/scripts/bin/tmux-session-list @@ -1,20 +1,22 @@ #!/usr/bin/env bash -CUR_SESSION_PREFIX="#[bg=colour1]" -CUR_SESSION_SUFFIX="#[bg=default]" +CUR_SESSION_PREFIX="#[bg=colour4]#[fg=colour0]" +CUR_SESSION_SUFFIX="#[bg=default]#[fg=default]" -export CUR_TMUX_SESSION="$1" +CUR_TMUX_SESSION="$1" if [ -z "$1" ]; then - export CUR_TMUX_SESSION="$(tmux display-message -p '#S')" + CUR_TMUX_SESSION="$(tmux display-message -p '#S')" fi +export CUR_TMUX_SESSION TMUX_SESSION_LIST="$(tmux list-sessions | sed -ne 's/^\([^:]*\).*$/ \1 /p' | tr -d '\n')" HIGHLIGHT_CUR_SESSION="${TMUX_SESSION_LIST/ $CUR_TMUX_SESSION /${CUR_SESSION_PREFIX} ${CUR_TMUX_SESSION} ${CUR_SESSION_SUFFIX}}" # ADD_END_SPACE_IF_NECESSARY=$(echo "$HIGHLIGHT_CUR_SESSION" | sed -e 's/\([^]]\)$/\ /p') -REMOVE_START_SPACE_IF_NECESSARY=$(echo "$HIGHLIGHT_CUR_SESSION" | sed 's/^ #/#/') +# REMOVE_START_SPACE_IF_NECESSARY=$(echo "$HIGHLIGHT_CUR_SESSION" | sed 's/^ #/#/') +REMOVE_START_SPACE_IF_NECESSARY=${HIGHLIGHT_CUR_SESSION/^ \#/\#/} -echo "cursess: $CUR_TMUX_SESSION -- sesslist: $TMUX_SESSION_LIST -- withhili: $HIGHLIGHT_CUR_SESSION -- cutspace: $REMOVE_START_SPACE_IF_NECESSARY -- argv1: $1 -- TMUX: $TMUX" >> ~/.tmux.log +# echo "cursess: $CUR_TMUX_SESSION -- sesslist: $TMUX_SESSION_LIST -- withhili: $HIGHLIGHT_CUR_SESSION -- cutspace: $REMOVE_START_SPACE_IF_NECESSARY -- argv1: $1 -- TMUX: $TMUX" >> ~/.tmux.log -echo "$REMOVE_START_SPACE_IF_NECESSARY -- $1" +echo "$REMOVE_START_SPACE_IF_NECESSARY" diff --git a/shell/aliases b/shell/aliases index d2775cb..6b0252f 100644 --- a/shell/aliases +++ b/shell/aliases @@ -2,10 +2,10 @@ # set our needed variables if we don't already have them if [[ -z "$XDG_CONFIG_HOME" ]]; then - export XDG_CONFIG_HOME="$HOME/.config" + export XDG_CONFIG_HOME="$HOME/.config" fi if [[ -z "$DOTFILES_PATH" ]]; then - export DOTFILES_PATH="$XDG_CONFIG_HOME/dotfiles" + export DOTFILES_PATH="$XDG_CONFIG_HOME/dotfiles" fi # filesystem aliases @@ -23,10 +23,10 @@ alias la='ll -A' # show all alias tree='tree -Csuh' # navigation aliases -alias c="cd $HOME/.." +alias c="cd \$HOME/.." alias cd..="cd .." -alias cdd="cd \"$DOTFILES_PATH\"" # go to dotfiles -alias cdc="cd \"$XDG_CONFIG_HOME\"" # go to +alias cdd="cd \"\$DOTFILES_PATH\"" # go to dotfiles +alias cdc="cd \"\$XDG_CONFIG_HOME\"" # go to # quick parent-directory aliases alias ..="cd .." @@ -45,8 +45,8 @@ alias tmnew="tmux new -s" alias tmls="tmux list-sessions" alias tmatt="tmux attach -t" alias tu="tmux attach -t utils || tmux new -s utils" -alias tdf="tmux attach -t df || tmux new -s df -c \"$DOTFILES_PATH\"" -alias tmon="tmux attach -t mon || tmux new -s mon" +alias tdf="tmux attach -t dotfiles || tmux new -s dotfiles -c \"\$DOTFILES_PATH\"" +alias tmon="tmux attach -t monitor || tmux new -s monitor" # git aliases # TODO: make these git aliases in the gitconfig? @@ -60,7 +60,7 @@ alias gsur="git submodule update --remote" grb() { MAIN_BRANCH="master" - CUR_BRANCH="$(git branch | grep \* | cut -d ' ' -f2-)" + CUR_BRANCH="$(git branch | grep '\*' | cut -d ' ' -f2-)" if [[ ! -z ${2+x} ]]; then MAIN_BRANCH="$2" CUR_BRANCH="$1" @@ -68,7 +68,7 @@ grb() { MAIN_BRANCH="$1" fi - git rebase -i $(git merge-base "$CUR_BRANCH" "$MAIN_BRANCH") + git rebase -i "$(git merge-base "$CUR_BRANCH" "$MAIN_BRANCH")" } # browser aliases @@ -88,6 +88,9 @@ alias setbg="feh --bg-fill" alias C="clear && clear" alias keyrepeat="xset r rate 250 80" alias r="ranger" +alias sctl="sudo systemctl" +alias pt="htop -t" # experimental htop tree-view-by-default +alias resrc="source \$HOME/.bashrc" # games aliases # this sometimes fixes steam dynamic library issues? @@ -97,16 +100,16 @@ alias r="ranger" # man pages with vim vman() { - # our vim config is setup to not auto-load sessions if we set the - # `asmanviewer` variable, so launch vim that way when using vim as our man - # page viewer + # our vim config is setup to not auto-load sessions if we set the + # `asmanviewer` variable, so launch vim that way when using vim as our man + # page viewer if command -v nvim >/dev/null 2>&1; then nvim --cmd "let asmanviewer=1" -c "SuperMan $*" else vim --cmd "let asmanviewer=1" -c "SuperMan $*" fi - # proper error handling + # proper error handling if [ "$?" != "0" ]; then echo "No manual entry for $*" fi diff --git a/shell/shell_funcs b/shell/shell_funcs index 70e53a1..4326f6b 100644 --- a/shell/shell_funcs +++ b/shell/shell_funcs @@ -1,16 +1,16 @@ #!/usr/bin/env bash calc() { - tp="$@" - python -c "print($tp)" + tp="$*" + python -c "print(${tp})" } export -f calc stopbar() { # TODO: get the proper monitor! BAR_MONITOR="$(polybar --list-monitors | tail -n 1 | sed -n 's/^\s*\(.*\):.*$/\1/p')" - bspc config -m "$BAR_MONITOR" bottom_padding "0" - bspc config -m "$BAR_MONITOR" top_padding "0" + bspc config -m "${BAR_MONITOR}" bottom_padding "0" + bspc config -m "${BAR_MONITOR}" top_padding "0" killall -q polybar while pgrep -x polybar >/dev/null; do sleep 1; done } @@ -18,7 +18,7 @@ export -f stopbar # wm aliases startbar() { - bash "$DOTFILES_PATH/de/bar/bar.bash" & + bash "${DOTFILES_PATH}/de/bar/bar.bash" & bg disown } @@ -28,20 +28,41 @@ export -f startbar scwd() { addon="" if [[ -n $1 ]]; then - addon="-$1" + addon="-${1}" fi - echo "$PWD" > "$DOTFILES_PATH/.cwd$addon.tmp" + echo "${PWD}" > "${DOTFILES_PATH}/.cwd${addon}.tmp" } export -f scwd -bind '"\C-s"':"\"scwd\C-m\"" +# bind '"\C-s"':"\"scwd\C-m\"" # go to the saved current directory gcwd() { addon="" if [[ -n $1 ]]; then - addon="-$1" + addon="-${1}" fi - cd "$(cat "$DOTFILES_PATH/.cwd$addon.tmp")" + cd "$(cat "${DOTFILES_PATH}/.cwd${addon}.tmp")" || return } export -f gcwd -bind '"\C-g"':"\"gcwd\C-m\"" +# bind '"\C-g"':"\"gcwd\C-m\"" + +fsw() { + SHELL_COMMAND="${1}" + shift + inotifywait -q -m -e close_write "${@}" | while read -r _ _; do + ${SHELL_COMMAND} + done +} +export -f fsw + +# tmux session switcher with fzf from https://github.com/junegunn/fzf/issues/997 +tmuxswitcher() { + local -r fmt='#{session_id}:|#S|(#{session_attached} attached)' + { tmux display-message -p -F "$fmt" && tmux list-sessions -F "$fmt"; } \ + | awk '!seen[$1]++' \ + | column -t -s'|' \ + | fzf -q '$' --reverse --prompt 'switch session: ' -1 \ + | cut -d':' -f1 \ + | xargs tmux switch-client -t +} +export -f tmuxswitcher diff --git a/shell/tmux.conf b/shell/tmux.conf index 434f01b..035505f 100644 --- a/shell/tmux.conf +++ b/shell/tmux.conf @@ -4,7 +4,7 @@ set -g prefix C-s bind-key s send-prefix # statusbar on bottom -set-option -g status-position bottom +set-option -g status-position top set-option -g mouse on # honestly not sure @@ -23,14 +23,17 @@ set -g default-terminal "tmux-256color" unbind r bind r source-file ~/.tmux.conf -# hide tmux status bar by default (prefix H toggles) -set -g status off - -# toggle status bar hotkey +# show tmux status bar by default (prefix H toggles) +set -g status on bind-key H set status +bind-key j switch-client -p +bind-key h switch-client -p +bind-key k switch-client -n +bind-key l switch-client -n + # message colors -set -g message-bg colour18 +set -g message-bg colour0 set -g message-fg colour7 # status bar configuration @@ -38,21 +41,21 @@ set -g message-fg colour7 set -g status-justify left # status bar colors -set -g status-bg colour18 -set -g status-fg colour7 +set -g status-bg colour0 +set -g status-fg colour8 -# don't show time or date or anything - we have a bar for that +# don't show time or date or anything - we have a bar for that set -g status-left '' set -g status-right '' set -g status-right-length 20 set -g status-interval 1 -set status-interval 1 -# set -g status-left '#(#{DOTFILES_PATH}/scripts/bin/tmux-session-list #S)' +# set status-interval 1 +set -g status-left '#(#{DOTFILES_PATH}/scripts/bin/tmux-session-list #S)' set -g status-left-length 80 setw -g window-status-current-fg colour7 -setw -g window-status-current-bg colour1 +setw -g window-status-current-bg colour2 # setw -g window-status-current-attr bold setw -g window-status-current-format '' @@ -70,14 +73,16 @@ set -g pane-border-fg colour18 set -g pane-active-border-fg blue set -g pane-active-border-bg default +bind-key s run "tmux new-window 'bash -ci tmuxswitcher'" + # present a menu of urls to open from the visible pane bind-key u capture-pane \;\ - save-buffer /tmp/tmux-buffer \;\ - split-window -l 10 "urlview /tmp/tmux-buffer" + save-buffer /tmp/tmux-buffer \;\ + split-window -l 10 "urlview /tmp/tmux-buffer" # mimic pane switching in and out of vim is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ - | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" + | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" bind-key -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L" bind-key -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D" bind-key -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U" @@ -115,3 +120,4 @@ set -g @continuum-boot 'on' run '~/.tmux/plugins/tpm/tpm' unbind-key C-p +