From d66419712fcd49dba95a96b7bb7055782c0c0fb5 Mon Sep 17 00:00:00 2001 From: Gabe Venberg Date: Tue, 10 Jul 2018 04:33:58 -0500 Subject: [PATCH] updated the tmux config a bit, and made a custom, independent zsh config. --- README | 3 +- cmus/.config/cmus/rc | 5 + tmux/.tmux.conf | 27 ++++- zsh/.zsh/dircolors | 218 +++++++++++++++++++++++++++++++++++++++++ zsh/.zsh/functions.zsh | 71 ++++++++++++++ zsh/.zsh/prompt.zsh | 33 +++++++ zsh/.zshrc | 157 +++++++++++++++++++++++++++++ 7 files changed, 507 insertions(+), 7 deletions(-) create mode 100644 cmus/.config/cmus/rc create mode 100644 zsh/.zsh/dircolors create mode 100644 zsh/.zsh/functions.zsh create mode 100644 zsh/.zsh/prompt.zsh create mode 100644 zsh/.zshrc diff --git a/README b/README index b658590..82c2555 100644 --- a/README +++ b/README @@ -1,3 +1,2 @@ all of my dotfiles and text only plugins. (the few I have at the moment...) -Append a file with .link to have it linked to the current directory with .link removed and a period (.) added in front of it. -(when i get around to adding a script to this thing.) \ No newline at end of file +use GNU stow to manage. diff --git a/cmus/.config/cmus/rc b/cmus/.config/cmus/rc new file mode 100644 index 0000000..5bb42e1 --- /dev/null +++ b/cmus/.config/cmus/rc @@ -0,0 +1,5 @@ +#set up cmus to work with ALSA + +set output_plugin=alsa +set dsp.alsa.device=default +set mixer.alsa.channel=Master diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 5ef8b03..8855181 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -4,16 +4,33 @@ bind-key M-a send-prefix #split panes using | and - + unbind '|' + unbind '-' bind | split-window -h bind - split-window -v unbind '"' unbind % #switch panes using alt-hjkl - bind -n M-h select-pane -L - bind -n M-l select-pane -R - bind -n M-k select-pane -U - bind -n M-j select-pane -D + bind -n M-h select-pane -L + bind -n M-l select-pane -R + bind -n M-k select-pane -U + bind -n M-j select-pane -D + +#or with the prefix and hjkl + bind h select-pane -L + bind l select-pane -R + bind k select-pane -U + bind j select-pane -D + +#resize panes with HJKL + bind -r H resize-pane -L 5 + bind -r J resize-pane -D 5 + bind -r K resize-pane -U 5 + bind -r L resize-pane -R 5 #dont rename windows automatically -set-option -g allow-rename off + set-option -g allow-rename off + +#fix annoying escape behavior + set -sg escape-time 0 diff --git a/zsh/.zsh/dircolors b/zsh/.zsh/dircolors new file mode 100644 index 0000000..a6d330c --- /dev/null +++ b/zsh/.zsh/dircolors @@ -0,0 +1,218 @@ +# Configuration file for dircolors, a utility to help you set the +# LS_COLORS environment variable used by GNU ls with the --color option. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copying and distribution of this file, with or without modification, +# are permitted provided the copyright notice and this notice are preserved. +# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the +# slackware version of dircolors) are recognized but ignored. +# Below, there should be one TERM entry for each termtype that is colorizable +TERM Eterm +TERM ansi +TERM color-xterm +TERM con132x25 +TERM con132x30 +TERM con132x43 +TERM con132x60 +TERM con80x25 +TERM con80x28 +TERM con80x30 +TERM con80x43 +TERM con80x50 +TERM con80x60 +TERM cons25 +TERM console +TERM cygwin +TERM dtterm +TERM eterm-color +TERM gnome +TERM gnome-256color +TERM hurd +TERM jfbterm +TERM konsole +TERM kterm +TERM linux +TERM linux-c +TERM mach-color +TERM mach-gnu-color +TERM mlterm +TERM putty +TERM putty-256color +TERM rxvt +TERM rxvt-256color +TERM rxvt-cygwin +TERM rxvt-cygwin-native +TERM rxvt-unicode +TERM rxvt-unicode-256color +TERM rxvt-unicode256 +TERM screen +TERM screen.xterm-256color +TERM screen-256color +TERM screen-256color-bce +TERM screen-bce +TERM screen-w +TERM screen.Eterm +TERM screen.rxvt +TERM screen.linux +TERM st +TERM st-256color +TERM terminator +TERM vt100 +TERM xterm +TERM xterm-16color +TERM xterm-256color +TERM xterm-88color +TERM xterm-color +TERM xterm-debian +# Below are the color init strings for the basic file types. A color init +# string consists of one or more of the following numeric codes: +# Attribute codes: +# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed +# Text color codes: +# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white +# Background color codes: +# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white +#NORMAL 00 # no color code at all +#FILE 00 # regular file: use no color at all +RESET 0 # reset to "normal" color +DIR 01;34 # directory +LINK target #01;36 # symbolic link. (If you set this to 'target' instead of a + # numerical value, the color is as for the file pointed to.) +MULTIHARDLINK 00 # regular file with more than one link +FIFO 40;33 # pipe +SOCK 01;35 # socket +DOOR 01;35 # door +BLK 40;33;01 # block device driver +CHR 40;33;01 # character device driver +ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file +SETUID 37;41 # file that is setuid (u+s) +SETGID 30;43 # file that is setgid (g+s) +CAPABILITY 30;41 # file with capability +STICKY_OTHER_WRITABLE 37;41 # dir that is sticky and other-writable (+t,o+w) +OTHER_WRITABLE 31;40 # dir that is other-writable (o+w) and not sticky +STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable +# This is for files with execute permission: +EXEC 01;32 +# List any file extensions like '.gz' or '.tar' that you would like ls +# to colorize below. Put the extension, a space, and the color init string. +# (and any comments you want to add after a '#') +# If you use DOS-style suffixes, you may want to uncomment the following: +#.cmd 01;32 # executables (bright green) +#.exe 01;32 +#.com 01;32 +#.btm 01;32 +#.bat 01;32 +# Or if you want to colorize scripts even if they do not have the +# executable bit actually set. +#.sh 01;32 +#.csh 01;32 + # archives or compressed (bright red) +.tar 01;31 +.tgz 01;31 +.arc 01;31 +.arj 01;31 +.taz 01;31 +.lha 01;31 +.lz4 01;31 +.lzh 01;31 +.lzma 01;31 +.tlz 01;31 +.txz 01;31 +.tzo 01;31 +.t7z 01;31 +.zip 01;31 +.z 01;31 +.Z 01;31 +.dz 01;31 +.gz 01;31 +.lrz 01;31 +.lz 01;31 +.lzo 01;31 +.xz 01;31 +.bz2 01;31 +.bz 01;31 +.tbz 01;31 +.tbz2 01;31 +.tz 01;31 +.deb 01;31 +.rpm 01;31 +.jar 01;31 +.war 01;31 +.ear 01;31 +.sar 01;31 +.rar 01;31 +.alz 01;31 +.ace 01;31 +.zoo 01;31 +.cpio 01;31 +.7z 01;31 +.rz 01;31 +.cab 01;31 +# image formats +.jpg 01;35 +.jpeg 01;35 +.gif 01;35 +.bmp 01;35 +.pbm 01;35 +.pgm 01;35 +.ppm 01;35 +.tga 01;35 +.xbm 01;35 +.xpm 01;35 +.tif 01;35 +.tiff 01;35 +.png 01;35 +.svg 01;35 +.svgz 01;35 +.mng 01;35 +.pcx 01;35 +.mov 01;35 +.mpg 01;35 +.mpeg 01;35 +.m2v 01;35 +.mkv 01;35 +.webm 01;35 +.ogm 01;35 +.mp4 01;35 +.m4v 01;35 +.mp4v 01;35 +.vob 01;35 +.qt 01;35 +.nuv 01;35 +.wmv 01;35 +.asf 01;35 +.rm 01;35 +.rmvb 01;35 +.flc 01;35 +.avi 01;35 +.fli 01;35 +.flv 01;35 +.gl 01;35 +.dl 01;35 +.xcf 01;35 +.xwd 01;35 +.yuv 01;35 +.cgm 01;35 +.emf 01;35 +# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions +.axv 01;35 +.anx 01;35 +.ogv 01;35 +.ogx 01;35 +# audio formats +.aac 00;36 +.au 00;36 +.flac 00;36 +.m4a 00;36 +.mid 00;36 +.midi 00;36 +.mka 00;36 +.mp3 00;36 +.mpc 00;36 +.ogg 00;36 +.ra 00;36 +.wav 00;36 +# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions +.axa 00;36 +.oga 00;36 +.spx 00;36 +.xspf 00;36 diff --git a/zsh/.zsh/functions.zsh b/zsh/.zsh/functions.zsh new file mode 100644 index 0000000..79941d3 --- /dev/null +++ b/zsh/.zsh/functions.zsh @@ -0,0 +1,71 @@ +# intellegently extract archives based on extension. + +# web_search from terminal +function web_search() { + emulate -L zsh + + # define search engine URLS + typeset -A urls + urls=( + ddg "https://www.duckduckgo.com/?q=" + github "https://github.com/search?q=" + ) + + # check whether the search engine is supported + if [[ -z "$urls[$1]" ]]; then + echo "Search engine $1 not supported." + return 1 + fi + + # search or go to main page depending on number of arguments passed + if [[ $# -gt 1 ]]; then + # build search url: + # join arguments passed with '+', then append to search engine URL + url="${urls[$1]}${(j:+:)@[2,-1]}" + else + # build main page url: + # split by '/', then rejoin protocol (1) and domain (2) parts with '//' + url="${(j://:)${(s:/:)urls[$1]}[1,2]}" + fi + + open_command "$url" +} + +#use generalized open command +function open_command() { + emulate -L zsh + setopt shwordsplit + + local open_cmd + + # define the open command + case "$OSTYPE" in + darwin*) open_cmd='open' ;; + cygwin*) open_cmd='cygstart' ;; + linux*) open_cmd='xdg-open' ;; + msys*) open_cmd='start ""' ;; + *) echo "Platform $OSTYPE not supported" + return 1 + ;; + esac + + # don't use nohup on OSX + if [[ "$OSTYPE" == darwin* ]]; then + $open_cmd "$@" &>/dev/null + else + nohup $open_cmd "$@" &>/dev/null + fi +} + +# Show dots while waiting for tab-completion +expand-or-complete-with-dots() { + # toggle line-wrapping off and back on again + [[ -n "$terminfo[rmam]" && -n "$terminfo[smam]" ]] && echoti rmam + print -Pn "%{%F{red}......%f%}" + [[ -n "$terminfo[rmam]" && -n "$terminfo[smam]" ]] && echoti smam + + zle expand-or-complete + zle redisplay +} +zle -N expand-or-complete-with-dots +bindkey "^I" expand-or-complete-with-dots diff --git a/zsh/.zsh/prompt.zsh b/zsh/.zsh/prompt.zsh new file mode 100644 index 0000000..8196bb8 --- /dev/null +++ b/zsh/.zsh/prompt.zsh @@ -0,0 +1,33 @@ +#This file is to set up the ZSH prompt. This is a customized prompt, and, as will all my zsh things, does not rely on an outside plugin. +#Also like most of my stuff, mutch of this code is taken from another source. in this case, I used the GRML zshrc as a base. +#this is a WIP. +#TODO: make this a proper prompt theme file instead of just a sourced file... maybye. + +autoload -U promptinit +promptinit +autoload -U colors +colors + +#stuff to show git things. + autoload -Uz vcs_info + + setopt prompt_subst + + precmd_vcs() {vcs_info} + + #when not in a repo, show full path to current directory. when in one, show path from base direcory of the repo. + zstyle ':vcs_info:*' nvcsformats '%~' + zstyle ':vcs_info:*' formats '%r/%S %F{green}[%b]%f' + +#the precmd function, called just before printing the prompt. TODO: use this to set our prompt variable as different evey time, in order to get a right aligned portion in the top line. +function precmd() { + precmd_vcs +} + +#on the top line, show a whole bunch of info. botton line should be as minimal as possilbe (just a single char to input next to...) +PROMPT='%F{cyan}[%m@%n]%f%F{red}├────┤%f${vcs_info_msg_0_} +»' + +#Make the right prompt blank, just to be sure. +RPROMPT= + diff --git a/zsh/.zshrc b/zsh/.zshrc new file mode 100644 index 0000000..a7c1280 --- /dev/null +++ b/zsh/.zshrc @@ -0,0 +1,157 @@ +# Based off of the zshrc of Josh Hartwell, with many additions, deletions, and changes from across the outside community. + +local ZSH_CONF=$HOME/.zsh # Define the place I store all my zsh config stuff +local ZSH_CACHE=$ZSH_CONF/cache # for storing files like history and zcompdump +local LOCAL_ZSHRC=$HOME/.zshlocal/.zshrc # Allow the local machine to have its own overriding zshrc if it wants it + +# Load external config files and tools + + # Load misc functions. Done in a seperate file to keep this from getting too long and ugly + source $ZSH_CONF/functions.zsh + #Load prompt file. Also done to keep it more tidy. + source $ZSH_CONF/prompt.zsh + +# Set important shell variables + export EDITOR=nvim # Set default editor + export WORDCHARS='' # This is the oh-my-zsh default, I think I'd like it to be a bit different + export PAGER=less # Set default pager + export LESS="-R" # Set the default options for less + export LESSHISTFILE="/dev/null" # Prevent the less hist file from being made, I dont want it + +# Misc + # Enable the ZLE line editor, which is default behavior, but to be sure + setopt ZLE + # prevent duplicate entries in path + declare -U path + # Uses custom colors for LS, as outlined in dircolors + eval $(dircolors $ZSH_CONF/dircolors) + # Sends cd commands without the need for 'cd' + setopt AUTO_CD + # Can pipe to mulitple outputs + setopt MULTI_OS + # Kill all child processes when we exit, dont leave them running + unsetopt NO_HUP + #Allows comments in interactive shell. + setopt INTERACTIVE_COMMENTS + # Abc{$cool}efg where $cool is an array surrounds all array variables individually + setopt RC_EXPAND_PARAM + # Ctrl+S and Ctrl+Q usually disable/enable tty input. This disables those inputs + unsetopt FLOW_CONTROL + # List jobs in the long format by default. (I dont know what this does but it sounds good) + setopt LONG_LIST_JOBS + # Make the shell act like vi if i hit escape + setopt vi + +# ZSH History + alias history='fc -fl 1' + HISTFILE=$ZSH_CACHE/history # Keep our home directory neat by keeping the histfile somewhere else + SAVEHIST=10000 # Big history + HISTSIZE=10000 # Big history + setopt EXTENDED_HISTORY # Include more information about when the command was executed, etc + setopt APPEND_HISTORY # Allow multiple terminal sessions to all append to one zsh command history + setopt HIST_FIND_NO_DUPS # When searching history dont display results already cycled through twice + setopt HIST_EXPIRE_DUPS_FIRST # When duplicates are entered, get rid of the duplicates first when we hit $HISTSIZE + setopt HIST_IGNORE_SPACE # Dont enter commands into history if they start with a space + setopt HIST_VERIFY # makes history substitution commands a bit nicer. I dont fully understand + setopt SHARE_HISTORY # Shares history across multiple zsh sessions, in real time + setopt HIST_IGNORE_DUPS # Do not write events to history that are duplicates of the immediately previous event + setopt INC_APPEND_HISTORY # Add commands to history as they are typed, dont wait until shell exit + setopt HIST_REDUCE_BLANKS # Remove extra blanks from each command line being added to history + +# ZSH Auto Completion + # Figure out the short hostname + if [[ "$OSTYPE" = darwin* ]]; then + # OS X's $HOST changes with dhcp, etc., so use ComputerName if possible. + SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST=${HOST/.*/} + else + SHORT_HOST=${HOST/.*/} + fi + + #the auto complete dump is a cache file where ZSH stores its auto complete data, for faster load times + local ZSH_COMPDUMP="$ZSH_CACHE/acdump-${SHORT_HOST}-${ZSH_VERSION}" #where to store autocomplete data + + autoload -Uz compinit + compinit -i -d "${ZSH_COMPDUMP}" # Init auto completion; tell where to store autocomplete dump + zstyle ':completion:*' menu select # Have the menu highlight as we cycle through options + zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # Case-insensitive (uppercase from lowercase) completion + setopt COMPLETE_IN_WORD # Allow completion from within a word/phrase + setopt ALWAYS_TO_END # When completing from the middle of a word, move cursor to end of word + setopt MENU_COMPLETE # When using auto-complete, put the first option on the line immediately + setopt COMPLETE_ALIASES # Turn on completion for aliases as well + setopt LIST_ROWS_FIRST # Cycle through menus horizontally instead of vertically + +# Globbing + setopt NO_CASE_GLOB # Case insensitive globbing + setopt EXTENDED_GLOB # Allow the powerful zsh globbing features, see link: + # http://www.refining-linux.org/archives/37/ZSH-Gem-2-Extended-globbing-and-expansion/ + setopt NUMERIC_GLOB_SORT # Sort globs that expand to numbers numerically, not by letter (i.e. 01 2 03) + +# Aliases + + alias vim="nvim" + + #alias -g ...='../..' + #alias -g ....='../../..' + #alias -g .....='../../../..' + #alias -g ......='../../../../..' + #alias -g .......='../../../../../..' + #alias -g ........='../../../../../../..' + + alias ls="ls -h --color='auto'" + alias lsa='ls -A' + alias ll='ls -l' + alias la='ls -lA' + alias lx='ls -lXB' #Sort by extension + alias lt='ls -ltr' + alias lk='ls -lSr' + alias cdl=changeDirectory; function changeDirectory { cd $1 ; la } + + alias md='mkdir -p' + alias rd='rmdir' + + # Copy with a progress bar + alias cpv="rsync -poghb --backup-dir=/tmp/rsync -e /dev/null --progress --" + + alias d='dirs -v | head -10' # List the last ten directories we've been to this session, no duplicates + + alias ddg='web_search ddg' + alias github='web_search github' + alias wiki='web_search ddg \!w' + alias news='web_search ddg \!n' + alias youtube='web_search ddg \!yt' + alias map='web_search ddg \!m' + alias image='web_search ddg \!i' + +# Setup grep to be a bit more nice + # check if 'x' grep argument available + grep-flag-available() { + echo | grep $1 "" >/dev/null 2>&1 + } + + local GREP_OPTIONS="" + + # color grep results + if grep-flag-available --color=auto; then + GREP_OPTIONS+=" --color=auto" + fi + + # ignore VCS folders (if the necessary grep flags are available) + local VCS_FOLDERS="{.bzr,CVS,.git,.hg,.svn}" + + if grep-flag-available --exclude-dir=.cvs; then + GREP_OPTIONS+=" --exclude-dir=$VCS_FOLDERS" + elif grep-flag-available --exclude=.cvs; then + GREP_OPTIONS+=" --exclude=$VCS_FOLDERS" + fi + + # export grep settings + alias grep="grep $GREP_OPTIONS" + + # clean up + unfunction grep-flag-available + +# Allow local zsh settings (superseding anything in here) in case I want something specific for certain machines + if [[ -r $LOCAL_ZSHRC ]]; then + source $LOCAL_ZSHRC + fi +