commit 327084bf271280f9673cb7bbd8f99e45d949dad3 Author: Chris Sexton Date: Thu Mar 5 11:54:46 2015 -0500 Initial commit diff --git a/AUTHORS b/AUTHORS new file mode 100755 index 0000000..b347f4e --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Chris Sexton diff --git a/LICENSE b/LICENSE new file mode 100755 index 0000000..5a8e332 --- /dev/null +++ b/LICENSE @@ -0,0 +1,14 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..a357e24 --- /dev/null +++ b/setup.sh @@ -0,0 +1,968 @@ +#!/bin/bash -e + +CMD="$0" + +[ "$NAME" ] || NAME= +[ "$EMAIL" ] || EMAIL= +[ "$IRCSERVER" ] || IRCSERVER=irc.freenode.net +[ "$IRCPORT" ] || IRCPORT=6667 +[ "$IRCNICK" ] || IRCNICK=coward +[ "$IRCPASS" ] || IRCPASS= + +die() { echo "$1" 1>&2 && show_help && [ "$2" ] && [ "$2" -ge 0 ] && exit "$2" || exit 1; } + +# Show help function to be used below +show_help() { + awk 'NR>1{print} /^(###|$)/{exit}' "$CMD" + echo "USAGE: $(basename "$CMD") [arguments]" + echo "ARGS:" + MSG=$(awk '/^NARGS=-1; while/,/^esac; done/' "$CMD" | sed -e 's/^[[:space:]]*/ /' -e 's/|/, /' -e 's/)//' | grep '^ -') + EMSG=$(eval "echo \"$MSG\"") + echo "$EMSG" +} + +# Parse command line options (odd formatting to simplify show_help() above) +NARGS=-1; while [ "$#" -ne "$NARGS" ]; do NARGS=$#; case $1 in + # SWITCHES + -h|--help) # This help message + show_help; exit 1; ;; + -n|--name) # Name for git + shift && NAME="$1" && shift; ;; + -e|--email) # Email for git + shift && EMAIL="$1" && shift; ;; + -s|--server) # server for irssi + shift && IRCSERVER="$1" && shift; ;; + -P|--port) # port for irssi + shift && IRCPORT="$1" && shift; ;; + -N|--nick) # nick for irssi + shift && IRCNICK="$1" && shift; ;; + -p|--password) # password for irssi + shift && IRCPASS="$1" && shift; ;; +esac; done + +[ "$NAME" ] || die "You must provide a name!" +[ "$EMAIL" ] || die "You must provide an email!" + +fn_distro(){ + if [ -f /etc/lsb-release ]; then + os=$(lsb_release -s -d) + elif [ -f /etc/debian_version ]; then + os="Debian $(cat /etc/debian_version)" + elif [ -f /etc/redhat-release ]; then + os=$(cat /etc/redhat-release) + else + os="$(uname -s) $(uname -r)" + fi +} + +UNAMESTR=$(uname) +if [[ "$UNAMESTR" == 'Linux' ]]; then + fn_distro + if [[ "$os" == Ubuntu* ]]; then + sudo apt-get install -y build-essential git irssi vim-nox zsh tmux + fi +elif [[ "$UNAMESTR" == 'Darwin' ]]; then + # Probably need to set up brew and brew install some stuff here... + true +fi + +read -r -d '' GITIGNOREGLOBAL <<'GITIGNOREGLOBAL' +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# It's better to unpack these files and commit the raw source because +# git has its own built in compression methods. +*.7z +*.jar +*.rar +*.zip +*.gz +*.bzip +*.xz +*.lzma + +#packing-only formats +*.iso +*.tar + +#package management formats +*.dmg +*.xpi +*.gem +*.egg +*.deb +*.rpm + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + +# NPM +.npmignore + +# Other stuff +*~ +.*.sw? +.tern-port +e6Views +vaViews +todo.txt +GITIGNOREGLOBAL +echo "$GITIGNOREGLOBAL" > "$HOME"/.gitignore_global + +read -r -d '' GITCONFIG <<'GITCONFIG' +[user] + name = %NAME% + email = %EMAIL% +[core] + autocrlf = input + whitespace = fix,space-before-tab,tab-in-indent,trailing-space + excludesfile = /Users/csexton/.gitignore_global +[alias] + st = status + co = checkout + di = diff + wc = whatchanged + br = branch + lg = "log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative" + unstage = "reset HEAD --" + spencer = log --pretty=format:'%Cred%h%Creset -%Creset %s %Cgreen(%cD) %C(bold blue)<%an>%Creset' --author Spencer --since + since = log --pretty=format:'%Cred%h%Creset -%Creset %s %Cgreen(%cD) %C(bold blue)<%an>%Creset' --author Chris --since + standup = log --pretty=format:'%Cred%h%Creset -%Creset %s %Cgreen(%cD) %C(bold blue)<%an>%Creset' --author Chris --since yesterday + yolo = "!git commit -am 'DEAL WITH IT' && git push -f" + ribbon = tag --force _ribbon origin/master + ketchup = log --patch --reverse --topo-order --first-parent -m _ribbon..origin/master + mergedown = merge --no-ff --log + g = grep --break --heading --line-number + check = "!git g '// todo'; git g '// fix'; git g '// review'; git g 'debugger';" + incoming = "!git remote update -p; git log ..@{u}" + outgoing = log @{u}.. +[branch "master"] + remote = origin + merge = refs/heads/master +[color] + ui = auto +[color "branch"] + current = yellow reverse + local = yellow + remote = green +[color "diff"] + meta = yellow bold + frag = magenta bold + old = red bold + new = green bold +[color "status"] + added = yellow + changed = green + untracked = cyan +[merge] + log = true +[url "git@github.com:"] + insteadOf = "gh:" + pushInsteadOf = "github:" + pushInsteadOf = "git://github.com/" +[url "git://github.com/"] + insteadOf = "github:" +[url "git@gist.github.com:"] + insteadOf = "gst:" + pushInsteadOf = "gist:" + pushInsteadOf = "git://gist.github.com/" +[url "git://gist.github.com/"] + insteadOf = "gist:" +[push] + default = simple +[credential] + helper = osxkeychain +GITCONFIG +echo "$GITCONFIG" | sed -e "s/%NAME%/$NAME/" | sed -e "s/%EMAIL%/$EMAIL/" > "$HOME"/.gitconfig + + +read -r -d '' TMUXCONF <<'TMUXCONF' +# fix colors +set -g default-terminal "screen-256color" + +# Arrow movement: nice +bind -n S-down new-window +bind -n S-left prev +bind -n S-right next +bind -n C-S-left swap-pane -U +bind -n C-S-right swap-pane -D +bind -r [ swap-window -t -1 +bind -r ] swap-window -t +1 +bind r source-file ~/.tmux.conf \; display-message " Config reloaded." +bind R source-file ~/.tmux.conf \; display-message " Config reloaded." + +# All sutff for a status bar +set-option -g status on +set-option -g status-interval 2 +set-option -g status-utf8 on +set-option -g status-justify "centre" +set-option -g status-left-length 60 +set-option -g status-right-length 90 + +set -g status-bg black +set -g status-fg white +set -g status-left "#H: #T" +set -g status-right "%H:%M %d-%h-%Y" +set -g window-status-format "#I:#W" +set -g window-status-current-format "|#I:#W|" + +set -g status-interval 1 +set -g status-justify left # align window list + +# default statusbar colors +set -g status-fg white +set -g status-bg default + +# default window title colors +set-window-option -g window-status-fg black +set-window-option -g window-status-bg default +set-window-option -g window-status-attr dim + +# active window title colors +set-window-option -g window-status-current-fg white +set-window-option -g window-status-current-bg default +set-window-option -g window-status-current-attr bold + +# command/message line colors +set -g message-fg white +set -g message-bg black +set -g message-attr bright + +# Fix window size on new connections +set -g aggressive-resize on + +# resize +unbind Left +unbind Right +unbind Down +unbind Up +bind -r Left resize-pane -L 2 +bind -r Right resize-pane -R 2 +bind -r Down resize-pane -D 2 +bind -r Up resize-pane -U 2 + +# Toggle mouse on with ^B m +# Useful for cut/paste interop +bind m \ + set -g mouse-resize-pane on \;\ + set -g mouse-select-pane on \;\ + set -g mouse-select-window on \;\ + set -g mode-mouse on \;\ + display 'Mouse: ON' +bind C-v paste-buffer + +# Toggle mouse off with ^B M +bind M \ + set -g mouse-resize-pane off \;\ + set -g mouse-select-pane off \;\ + set -g mouse-select-window off \;\ + set -g mode-mouse off \;\ + display 'Mouse: OFF' + +set-window-option -g mode-keys vi + +unbind T +unbind N +bind -r T clock-mode +bind -r N next-window + +# Dvorak vs qwerty vi keys +unbind h +unbind t +unbind d +unbind n +bind -r h select-pane -U +bind -r t select-pane -D +bind -r d select-pane -L +bind -r n select-pane -R + +# I use ^b^A to switch panes quickly +unbind ^A +bind ^A select-pane -t :.+ +bind ^O select-pane -t :.- + +# Fix scrolling? +#set -g terminal-overrides 'xterm*:smcup@:rmcup@' +set -g history-limit 10000 + +# Clear terminal scrollback on ^k +bind -n C-k send-keys -R \; clear-history\; send-keys C-m + +# Easy splits +bind-key | split-window -h +bind-key \ split-window -h +bind-key - split-window -v +bind-key k kill-pane +bind-key K kill-window + +#set-option -g default-command "reattach-to-user-namespace -l zsh" + +##CLIPBOARD selection integration +##Requires prefix key before the command key +#Copy tmux paste buffer to CLIPBOARD +#bind C-c run "tmux show-buffer | pbcopy" +#Copy CLIPBOARD to tmux paste buffer and paste tmux paste buffer +#bind C-v run "tmux set-buffer -- \"$(pbpaste)\"; tmux paste-buffer" + +# Nested tmux support +bind-key b send-prefix + +# Multiple server support +bind s set -g synchronize-panes + +bind-key -t vi-copy 'v' begin-selection +bind-key -t vi-copy 'y' copy-selection + +bind-key -t vi-copy 'd' cursor-left +bind-key -t vi-copy 'h' cursor-down +bind-key -t vi-copy 't' cursor-up +bind-key -t vi-copy 'n' cursor-right +bind-key -t vi-copy 'l' search-again + +# Move panes between windows +bind -r < join-pane -t -1.0 +bind -r > join-pane -t +1.0 +# Reminder: ^b ! breaks panes out +TMUXCONF +echo "$TMUXCONF" > "$HOME"/.tmux.conf + +read -r -d '' VIMRC <<'VIMRC' +set nocompatible " be iMproved + +let iCanHazPlugged=1 +let vim_plug_file=expand("~/.vim/autoload/plug.vim") +if !filereadable(vim_plug_file) + echo "Installing vim-plug" + echo "" + silent !mkdir -p ~/.vim/autoload + silent !curl -fLo ~/.vim/autoload/plug.vim https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + let iCanHazPlugged=0 +endif + +call plug#begin() + +" My Plugs here: +" +" original repos on github +Plug 'majutsushi/tagbar' +" Plug 'altercation/vim-colors-solarized' + +" Github repos of the user 'vim-scripts' +" => can omit the username part for some plugins +Plug 'Raimondi/delimitMate' +Plug 'ctrlp.vim' +Plug 'ervandew/supertab' +Plug 'fisadev/FixedTaskList.vim' +Plug 'fisadev/vim-ctrlp-cmdpalette' +Plug 'fatih/vim-go' +Plug 'https://github.com/scrooloose/nerdtree.git', { 'on': ['NERDTreeToggle', 'NERDTreeFind'] } +Plug 'https://github.com/tpope/vim-fugitive.git' +Plug 'https://github.com/vim-scripts/LustyJuggler.git' +Plug 'lilydjwg/colorizer' +Plug 'moll/vim-bbye' +Plug 'syntastic' +Plug 'terryma/vim-multiple-cursors' +Plug 'vim-airline' +Plug 'nathanaelkane/vim-indent-guides' +Plug 'leafgarland/typescript-vim' +Plug 'guns/xterm-color-table.vim' + +" This one is sort of large, so disabling unless I really need it. +" Plug 'klen/python-mode' + +" non github repos +" Plug 'git://git.wincent.com/command-t.git' +" ... + +call plug#end() + +if iCanHazPlugged == 0 + echo "Installing plugs" + echo "" + :PlugUpdate +endif + +"====[ Set various behavior preferences ]================== + +set tabstop=4 +set shiftwidth=4 +set softtabstop=4 +set noexpandtab +set smartindent +filetype indent off +filetype plugin on + +syntax on +set t_Co=256 +set background=dark + +" The following are commented out as they cause vim to behave a lot +" differently from regular Vi. They are highly recommended though. +"set showcmd " Show (partial) command in status line. +set showmatch " Show matching brackets. +set ignorecase " Do case insensitive matching +set smartcase " Do smart case matching +"set incsearch " Incremental search +set autowrite " Automatically save before commands like :next and :make +set hidden " Hide buffers when they are abandoned +set mouse=a " Enable mouse usage (all modes) in terminals +set scrolloff=3 +set hls + +set browsedir=buffer + +colorscheme desert + +"====[ Change various key bindings ]======================= + +vnoremap < >gv + +nnoremap < << +nnoremap > >> + +set nu + +" Dvorak it! +no d h +no h j +no t k +no n l +no j d +no l n +no L N +" Replaces s with the :, I prefer having s around... +" no s : +" no S : + +" Added benefits +no - $ +no _ ^ + +no N +no D W +no S + +no H 20 +no T 20 + +no h H +no m M +no l L + +map Q + +nnoremap :redo +nnoremap :set paste! +command! W :w + +set backspace=2 + +set wildchar= wildmenu wildmode=full +set wildcharm= + +" shush the bell +set noerrorbells +set vb +set t_vb= + +set directory^=$HOME/.vim_swap/ "put all swap files together in one place + +let mapleader = "," + +nmap . :LustyJuggler +let g:LustyJugglerKeyboardLayout = "dvorak" + +nnoremap / :nohlsearch + +nnoremap q :Bdelete! + +"====[ Enable ctrlp settings ]============================= + +augroup ctrlp + autocmd! + + let g:ctrlp_map='p' + let g:ctrlp_working_path_mode='' + let g:ctrlp_cmd = 'CtrlPMixed' + + set wildignore+=*/tmp/*,*.so,*.swp,*.zip + let g:ctrlp_user_command="find %s ! -wholename '*/.git/*' ! -wholename '*/node_modules/*' ! -wholename '*/report/*' -type f" +augroup END + +"====[ Set syntastic options ]============================= + +" Syntastic options +let g:syntastic_check_on_open=1 +let g:syntastic_enable_signs=1 + +let g:syntastic_error_symbol='✗' +let g:syntastic_warning_symbol='⚠' + +let g:syntastic_enable_balloons = 1 +let g:syntastic_auto_loc_list=2 + +let g:syntastic_loc_list_height=6 + +let g:syntastic_cpp_checkers = ['clang_checker -std=c++1y'] +let g:syntastic_stl_format = '[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]' + +"====[ Set JavaScript options ]============================ + +augroup jsopts + autocmd! + autocmd BufNewFile,BufRead *.json set ft=javascript + function! TrimWhiteSpace() + %s/\s\+$//e + endfunction + let g:tlist_javascript_settings = 'javascript;a:array;b:boolean;c:class;f:function;m:method;n:number;o:object;p:property;s:string;v:variable' + au FileType javascript setlocal equalprg=~/local/bin/js-beautify\ -f\ -\ -q\ -t\ -w\ 120\ -b\ \"end-expand\" + au FileType javascript set suffixesadd=.js,.json + au FileType javascript set includeexpr=FindRequire(v:fname) + autocmd FileType javascript autocmd FileWritePre * :call TrimWhiteSpace() + autocmd FileType javascript autocmd FileAppendPre * :call TrimWhiteSpace() + autocmd FileType javascript autocmd FilterWritePre * :call TrimWhiteSpace() + autocmd FileType javascript autocmd BufWritePre * :call TrimWhiteSpace() + let g:syntastic_javascript_checkers = ['jshint'] + "let g:syntastic_javascript_jshint_args = "--config ~/.jshintrc" + " Code Folding + au FileType javascript syntax region foldBraces start=/{/ end=/}/ transparent fold keepend extend + au FileType javascript setlocal foldmethod=syntax + au FileType javascript setlocal foldlevel=99 +augroup END + +"====[ Set golang options ]================================ + +augroup golang + autocmd! + " autocmd FileType go autocmd BufWritePre Fmt + let g:go_disable_autoinstall = 1 + let g:go_fmt_command = 'goimports' +augroup END + +"====[ Set NERDTree options ]============================== + +augroup nerdtree + autocmd! + + " Make NERDTree start on startup + "autocmd vimenter * if !argc() | NERDTree | endif + + nnoremap d :NERDTreeFind + nnoremap :NERDTreeToggle + + " 'Disable' these, they're obnoxious: + let NERDTreeMapOpenInTab='zzzzzz' + let NERDTreeMapOpenInTabSilent='zzzzzzz' +augroup END + +let g:airline_powerline_fonts=1 +let g:airline_enable_syntastic=1 +"let g:airline_theme='dark' + +"====[ Enable relative line numbers ]====================== + +function! NumberToggle() + if(&relativenumber == 1) + set number + set norelativenumber + else + set number + set relativenumber + endif +endfunc + +nnoremap :call NumberToggle() + +"====[ Make the 81st column stand out ]==================== + + " EITHER the entire 81st column, full-screen... + "highlight ColorColumn ctermbg=magenta + "set colorcolumn=81 + + " OR ELSE just the 81st column of wide lines... + highlight ColorColumn ctermbg=magenta + call matchadd('ColorColumn', '\%81v', 100) + + " OR ELSE on April Fools day... + "highlight ColorColumn ctermbg=red ctermfg=blue + "exec 'set colorcolumn=' . join(range(2,80,3), ',') + +"====[ Fix listchars ]==================================== + +exec "set listchars=tab:\uBB\uBB,trail:\uB7,nbsp:~" +nnoremap :set list! +"nnoremap :set list! + +"====[ Enable dragging ]================================== + +vmap DVB_Drag('left') +vmap DVB_Drag('right') +vmap DVB_Drag('up') +vmap DVB_Drag('down') +vmap D DVB_Duplicate() + +"====[ Python settings ]================================== + +let g:pymode_indent = 0 +let g:pymode_rope = 0 +let g:pymode_folding = 0 +let g:pymode_lint_ignore = "W191,E251,E203,E221,E126,E128" +let NERDTreeIgnore=['.pyc$'] +let g:pymode_doc = 0 +au FileType python set noexpandtab +au FileType python set tabstop=4 + +"====[ General Text Editing settings ]==================== +au BufNewFile,BufRead *.md set filetype=markdown +command! Check new|0read !check + +"====[ Supertab settings ]================================ +let g:SuperTabDefaultCompletionType = "context" + +"====[ Mulitple Cursors Settings ]======================== +let g:multi_cursor_next_key='' + +"====[ Task List Settings ]=============================== +map t :TaskList + +"====[ Indent Guides ]==================================== +let g:indent_guides_guide_size = 1 +autocmd VimEnter * :IndentGuidesEnable +let g:indent_guides_auto_colors = 0 +hi IndentGuidesOdd ctermbg=0 +hi IndentGuidesEven ctermbg=235 +nnoremap :IndentGuidesToggle + +"====[ TypeScript ]======================================= +autocmd BufNewFile,BufRead *.ts set ft=typescript +let g:typescript_compiler_options = " -t ES5 -m commonjs" +let g:syntastic_typescript_tsc_args = "-t ES5 -m commonjs" +VIMRC +echo "$VIMRC" > "$HOME"/.vimrc + +if [[ ! -d ~/.oh-my-zsh ]]; then + curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh +fi + +if [[ ! "$SHELL" =~ .*zsh ]]; then + chsh -s "$(which zsh)" +fi + +read -r -d '' ZSHRC <<'ZSHRC' +# Path to your oh-my-zsh configuration. +ZSH=$HOME/.oh-my-zsh + +# Set name of the theme to load. +# Look in ~/.oh-my-zsh/themes/ +# Optionally, if you set this to "random", it'll load a random theme each +# time that oh-my-zsh is loaded. +ZSH_THEME="geoffgarside" + +# Example aliases +# alias zshconfig="mate ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" + +# Set to this to use case-sensitive completion +# CASE_SENSITIVE="true" + +# Comment this out to disable bi-weekly auto-update checks +# DISABLE_AUTO_UPDATE="true" + +# Uncomment to change how many often would you like to wait before auto-updates occur? (in days) +# export UPDATE_ZSH_DAYS=13 + +# Uncomment following line if you want to disable colors in ls +# DISABLE_LS_COLORS="true" + +# Uncomment following line if you want to disable autosetting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment following line if you want to disable command autocorrection +DISABLE_CORRECTION="true" + +# Uncomment following line if you want red dots to be displayed while waiting for completion +# COMPLETION_WAITING_DOTS="true" + +# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*) +# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +plugins=(git archlinux fasd golang mercurial node npm screen ssh-agent sublime systemd vundle) + +source $ZSH/oh-my-zsh.sh + +# Customize to your needs... +export PATH=$PATH:$HOME/bin:$HOME/go/bin:/usr/local/games:/usr/local/sbin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/vendor_perl:/usr/bin/core_perl:/usr/lib/qt4/bin:$HOME/bin:$HOME/src/go/bin + +alias aoeu='setxkbmap us' +alias asdf='setxkbmap dvorak' + +alias grep='grep --color --exclude-dir=.svn --exclude-dir=node_modules' +alias egrep='egrep --color --exclude-dir=.svn --exclude-dir=node_modules' +alias vi='vim' +alias ll='ls -al' +alias l='ls -Cf' + +alias h='fasd_cd -d' + +calc(){ awk "BEGIN{ print $* }" ;} +GREP_OPTIONS='-D skip --binary-files=without-match --ignore-case' +export LESS='RFiX' +export PAGER="less -R -FiX" +alias subo='sublime -n' +export EDITOR=vim + +alias asshole='sudo $(fc -l -n -1)' + +export GOPATH=~/ +setopt interactivecomments +unsetopt beep +bindkey '^[#' pound-insert + +if [ -f $HOME/.zshlc ] +then + source $HOME/.zshlc +fi +ZSHRC +echo "$ZSHRC" > "$HOME"/.zshrc + +mkdir -p ~/bin +read -r -d '' TMUXSH <<'TMUXSH' +#!/bin/bash + +# +# Modified TMUX start script from: +# http://forums.gentoo.org/viewtopic-t-836006-start-0.html +# +# Store it to `~/bin/tmx` and issue `chmod +x`. +# + +# Works because bash automatically trims by assigning to variables and by +# passing arguments +trim() { echo $1; } + +base_session="$1" + +if [[ -z "$1" ]]; then + base_session="default" +fi + +# Only because I often issue `ls` to this script by accident +if [[ "$1" == "ls" ]]; then + tmux ls + exit +fi + +# This actually works without the trim() on all systems except OSX +tmux_nb=$(trim `tmux ls | grep "^$base_session" | wc -l`) +if [[ "$tmux_nb" == "0" ]]; then + echo "Launching tmux base session $base_session ..." + tmux new-session -s $base_session +else + # Make sure we are not already in a tmux session + if [[ -z "$TMUX" ]]; then + echo "Launching copy of base session $base_session ..." + # Session is is date and time to prevent conflict + session_id=`date +%Y%m%d%H%M%S` + # Create a new session (without attaching it) and link to base session + # to share windows + tmux new-session -d -t $base_session -s $session_id + if [[ "$2" == "1" ]]; then + # Create a new window in that session + tmux new-window + fi + # Attach to the new session & kill it once orphaned + tmux attach-session -t $session_id \; set-option destroy-unattached + fi +fi +TMUXSH +echo "$TMUXSH" >~/bin/tmux.sh + +mkdir -p ~/.irssi +read -r -d '' IRSSI <<'IRSSI' +servers = ( + { + address = "%SERVER%"; + chatnet = "net"; + port = "%PORT%"; + password = "%PASSWORD%"; + use_ssl = "yes"; + ssl_verify = "no"; + autoconnect = "yes"; + } +); + +chatnets = { + net = { type = "IRC"; }; +}; + +channels = ( +); + +aliases = { + J = "join"; + LEAVE = "part"; + W = "who"; + Q = "QUERY"; +}; + +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}"; + + # treated "normally", you could change the time/user name to whatever + time = "{sb $Z}"; + user = "{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}"; + + # treated specially .. window is printed with non-empty windows, + # 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 = " Irssi v$J - http://www.irssi.org"; + + # all of these treated specially, they're only displayed when needed + lag = "{sb Lag: $0-}"; + act = "{sb Act: $0-}"; + more = "-- 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. + window = { + disabled = "no"; + + # window, root + type = "window"; + # top, bottom + placement = "bottom"; + # number + position = "1"; + # active, inactive, always + visible = "active"; + + # list of items in statusbar in the display order + items = { + barstart = { priority = "100"; }; + time = { }; + user = { }; + window = { }; + topic = { }; + window_empty = { }; + lag = { priority = "-1"; }; + act = { priority = "10"; }; + more = { priority = "-1"; alignment = "right"; }; + barend = { priority = "100"; alignment = "right"; }; + }; + }; + + # 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 = "nowhere"; + position = "100000"; + visible = "never"; + items = { + topicbarstart = { priority = "100"; }; + topic = { }; + topic_empty = { }; + topicbarend = { priority = "100"; alignment = "right"; }; + }; + }; + }; +}; +settings = { + core = { + real_name = "%NICK%"; + user_name = "%NICK%"; + nick = "%NICK%"; + }; + "fe-text" = { actlist_sort = "refnum"; }; + "fe-common/core" = { + theme = "dma147"; + completion_char = ","; + autolog = "yes"; + }; +}; +hilights = ( + { text = "%NICK%"; nick = "yes"; word = "yes"; }, + { text = "chris"; nick = "yes"; word = "yes"; } +); +logs = { }; +IRSSI +echo "$IRSSI" | sed -e "s/%PASSWORD%/$IRCPASS/" | sed -e "s/%NICK%/$IRCNICK/" | sed -e "s/%SERVER%/$IRCSERVER/" | sed -e "s/%PORT%/$IRCPORT/" > "$HOME"/.irssi/config