From feb93167b7635a30417a9f2effce974db0846ef6 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 1 Jun 2015 22:56:59 +0200 Subject: [PATCH 001/532] initial commit --- .DS_Store | Bin 0 -> 6148 bytes bash/.bash_profile | 13 +++++++ bash/.bashrc | 15 ++++++++ vim/.vimrc | 74 +++++++++++++++++++++++++++++++++++++ zsh/.zshrc | 89 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 191 insertions(+) create mode 100644 .DS_Store create mode 100644 bash/.bash_profile create mode 100644 bash/.bashrc create mode 100644 vim/.vimrc create mode 100644 zsh/.zshrc diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..68b48dbc10e91a43b4f323ff9793563dfdc15d77 GIT binary patch literal 6148 zcmeHKyH3MU47F*7N-P~2@5tIexT;zt*75@o7>ZQX0ks2DHhzwOqQ?&qc-s*k4Xt?i}jQI$7jpaN8Y3Qz$m@DCNh%r=`|1~O6sDnJFk z6|nC^fg9GuA<#b^2)+UUJEYxk?Z5uOVhLbP90HMnX;6Vd)m$+&HwO(m&TG~Wfk7Ab zC!g6u5n%yhd`$z?{px41WXqi6*z?gN1KZ;zW@LL literal 0 HcmV?d00001 diff --git a/bash/.bash_profile b/bash/.bash_profile new file mode 100644 index 00000000..828e0edd --- /dev/null +++ b/bash/.bash_profile @@ -0,0 +1,13 @@ +# System settings before starting X +. $HOME/.bashrc + +PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/usr/local/lib:/usr/local/sbin + +PATH=$PATH:$GOPATH/bin + +export PATH + +# set up alsa +/usr/bin/amixer sset Master Mono 90% unmute &> /dev/null +/usr/bin/amixer sset Master 90% unmute &> /dev/null +/usr/bin/amixer sset PCM 90% unmute &> /dev/null diff --git a/bash/.bashrc b/bash/.bashrc new file mode 100644 index 00000000..8422170b --- /dev/null +++ b/bash/.bashrc @@ -0,0 +1,15 @@ +# Add nano as default editor +export EDITOR=nano +export TERMINAL=lxterminal +export BROWSER=firefox +# Gtk themes +export GTK2_RC_FILES="$HOME/.gtkrc-2.0" + +# Go Env +export GOPATH=$HOME/go + +alias ls='ls --color=auto' +alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g' +alias npmu='npm-check-updates -u && npm update && bower update' + +#[ -n "$PS1" ] && source ~/.bash_profile; diff --git a/vim/.vimrc b/vim/.vimrc new file mode 100644 index 00000000..9275451f --- /dev/null +++ b/vim/.vimrc @@ -0,0 +1,74 @@ +syntax on +set nowrap " don't wrap lines +set tabstop=4 " a tab is four spaces +set autoindent " always set autoindenting on +set copyindent " copy the previous indentation on autoindenting +set backspace=indent,eol,start " allows for usage of backspace +set number " always show line numbers +set shiftwidth=4 " number of spaces to use for autoindenting +set shiftround " use multiple of shiftwidth when indenting with '<' and '>' +set showmatch " set show matching parenthesis +set ignorecase " ignore case when searching +set smartcase " ignore case if search pattern is all lowercase, case-sensitive otherwise +set smarttab " insert tabs on the start of a line according to shiftwidth, not tabstop +set hlsearch " highlight search terms +set incsearch " show search matches as you type +set hidden " hides buffers instead of closing them + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" VUNDLE STUFF +" """""""""""""""""""""""""""""""""""""""""""""""""""""""""" +set nocompatible " be iMproved, required +filetype off " required + +" set the runtime path to include Vundle and initialize +set rtp+=~/.vim/bundle/Vundle.vim +call vundle#begin() +" alternatively, pass a path where Vundle should install plugins +" call vundle#begin('~/some/path/here') + +" let Vundle manage Vundle, required +Plugin 'gmarik/Vundle.vim' + +" Source tree +Plugin 'scrooloose/nerdtree' + +" Auto completion +Plugin 'valloric/youcompleteme' + +" Golang Plugin +Plugin 'fatih/vim-go' + +" Node Plugin +Plugin 'moll/vim-node' + +" The following are examples of different formats supported. +" Keep Plugin commands between vundle#begin/end. +" plugin on GitHub repo +" Plugin 'tpope/vim-fugitive' +" plugin from http://vim-scripts.org/vim/scripts.html +" Plugin 'L9' +" Git plugin not hosted on GitHub +" Plugin 'git://git.wincent.com/command-t.git' +" git repos on your local machine (i.e. when working on your own plugin) +" Plugin 'file:///home/gmarik/path/to/plugin' +" The sparkup vim script is in a subdirectory of this repo called vim. +" Pass the path to set the runtimepath properly. +" Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} +" Avoid a name conflict with L9 +" Plugin 'user/L9', {'name': 'newL9'} + +" All of your Plugins must be added before the following line +call vundle#end() " required +filetype plugin indent on " required +" To ignore plugin indent changes, instead use: +" filetype plugin on + +" Brief help +" :PluginList - lists configured plugins +" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate +" :PluginSearch foo - searches for foo; append `!` to refresh local cache +" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal + +" see :h vundle for more details or wiki for FAQ +" Put your non-Plugin stuff after this line diff --git a/zsh/.zshrc b/zsh/.zshrc new file mode 100644 index 00000000..a4db0527 --- /dev/null +++ b/zsh/.zshrc @@ -0,0 +1,89 @@ +# Path to your oh-my-zsh installation. +export 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="robbyrussell" + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to disable bi-weekly auto-update checks. +# DISABLE_AUTO_UPDATE="true" + +# Uncomment the following line to change how often to auto-update (in days). +# export UPDATE_ZSH_DAYS=13 + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# 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) +# Add wisely, as too many plugins slow down shell startup. +plugins=(git) + +# User configuration + +export GOPATH=$HOME/go + +export PATH=$PATH:"/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/lib:/usr/local/sbin:$GOPATH/bin" +# export MANPATH="/usr/local/man:$MANPATH" + +source $ZSH/oh-my-zsh.sh + +# You may need to manually set your language environment +# export LANG=en_US.UTF-8 + +# Preferred editor for local and remote sessions +# if [[ -n $SSH_CONNECTION ]]; then +# export EDITOR='vim' +# else +# export EDITOR='mvim' +# fi + +# Compilation flags +# export ARCHFLAGS="-arch x86_64" + +# ssh +# export SSH_KEY_PATH="~/.ssh/dsa_id" + +# Set personal aliases, overriding those provided by oh-my-zsh libs, +# plugins, and themes. Aliases can be placed here, though oh-my-zsh +# users are encouraged to define aliases within the ZSH_CUSTOM folder. +# For a full list of active aliases, run `alias`. +# +# Example aliases +# alias zshconfig="mate ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" +alias iojs="iojs --use-strict --harmony" +alias pacu="npm-check-updates -u && npm update && bower update" + +# from bash_profile +export PATH=/usr/local/bin:$PATH +export PATH=/usr/local/Cellar/ruby/2.2.2/lib/rub/gems/2.2.0:$PATH From 6318f95d621e5c419e1e99d1ddc43cf276946975 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 00:07:21 +0200 Subject: [PATCH 002/532] new dotfiles from github --- bash/.asliases | 23 +++++++++ bash/.bash_profile | 37 +++++++++++--- bash/.bash_prompt | 120 +++++++++++++++++++++++++++++++++++++++++++ bash/.bashrc | 16 +----- bash/.exports | 21 ++++++++ bash/.functions | 49 ++++++++++++++++++ bash/.inputrc | 37 ++++++++++++++ bash/.path | 1 + curl/.curlrc | 8 +++ vim/.gvimrc | 9 ++++ vim/.vimrc | 124 +++++++++++++++++++++++++++++++++++++++------ wget/.wgetrc | 36 +++++++++++++ 12 files changed, 444 insertions(+), 37 deletions(-) create mode 100644 bash/.asliases create mode 100644 bash/.bash_prompt create mode 100644 bash/.exports create mode 100644 bash/.functions create mode 100644 bash/.inputrc create mode 100644 bash/.path create mode 100644 curl/.curlrc create mode 100644 vim/.gvimrc create mode 100644 wget/.wgetrc diff --git a/bash/.asliases b/bash/.asliases new file mode 100644 index 00000000..795189a7 --- /dev/null +++ b/bash/.asliases @@ -0,0 +1,23 @@ +# Easier navigation: .., ..., ...., ....., ~ and - +alias ..="cd .." +alias ...="cd ../.." +alias ....="cd ../../.." +alias .....="cd ../../../.." + +# Detect which `ls` flavor is in use +if ls --color > /dev/null 2>&1; then # GNU `ls` + colorflag="--color" +else # OS X `ls` + colorflag="-G" +fi + +# Always use color output for `ls` +alias ls="command ls ${colorflag}" +export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.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:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:' + +# Enable aliases to be sudo’ed +alias sudo='sudo ' + +# Ring the terminal bell, and put a badge on Terminal.app’s Dock icon +# (useful when executing time-consuming commands) +alias bellring="tput bel" \ No newline at end of file diff --git a/bash/.bash_profile b/bash/.bash_profile index 828e0edd..d749d1e8 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -1,13 +1,38 @@ -# System settings before starting X -. $HOME/.bashrc +# Add `~/bin` to the `$PATH` +export PATH="$HOME/bin:$PATH"; -PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/usr/local/lib:/usr/local/sbin +# Load the shell dotfiles, and then some: +# * ~/.path can be used to extend `$PATH`. +# * ~/.extra can be used for other settings you don’t want to commit. +for file in ~/.{path,bash_prompt,exports,aliases,functions,extra}; do + [ -r "$file" ] && [ -f "$file" ] && source "$file"; +done; +unset file; -PATH=$PATH:$GOPATH/bin +# Case-insensitive globbing (used in pathname expansion) +shopt -s nocaseglob; -export PATH +# Autocorrect typos in path names when using `cd` +shopt -s cdspell; -# set up alsa +# Enable some Bash 4 features when possible: +# * `autocd`, e.g. `**/qux` will enter `./foo/bar/baz/qux` +# * Recursive globbing, e.g. `echo **/*.txt` +for option in autocd globstar; do + shopt -s "$option" 2> /dev/null; +done; + +# Add tab completion for many Bash commands +if which brew > /dev/null && [ -f "$(brew --prefix)/share/bash-completion/bash_completion" ]; then + source "$(brew --prefix)/share/bash-completion/bash_completion"; +elif [ -f /etc/bash_completion ]; then + source /etc/bash_completion; +fi; + +# Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards +[ -e "$HOME/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | tr ' ' '\n')" scp sftp ssh; + +# ARCH: set up alsa /usr/bin/amixer sset Master Mono 90% unmute &> /dev/null /usr/bin/amixer sset Master 90% unmute &> /dev/null /usr/bin/amixer sset PCM 90% unmute &> /dev/null diff --git a/bash/.bash_prompt b/bash/.bash_prompt new file mode 100644 index 00000000..c41ef960 --- /dev/null +++ b/bash/.bash_prompt @@ -0,0 +1,120 @@ +# Shell prompt based on the Solarized Dark theme. +# Screenshot: http://i.imgur.com/EkEtphC.png +# Heavily inspired by @necolas’s prompt: https://github.com/necolas/dotfiles +# iTerm → Profiles → Text → use 13pt Monaco with 1.1 vertical spacing. + +if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then + export TERM='gnome-256color'; +elif infocmp xterm-256color >/dev/null 2>&1; then + export TERM='xterm-256color'; +fi; + +prompt_git() { + local s=''; + local branchName=''; + + # Check if the current directory is in a Git repository. + if [ $(git rev-parse --is-inside-work-tree &>/dev/null; echo "${?}") == '0' ]; then + + # check if the current directory is in .git before running git checks + if [ "$(git rev-parse --is-inside-git-dir 2> /dev/null)" == 'false' ]; then + + # Ensure the index is up to date. + git update-index --really-refresh -q &>/dev/null; + + # Check for uncommitted changes in the index. + if ! $(git diff --quiet --ignore-submodules --cached); then + s+='+'; + fi; + + # Check for unstaged changes. + if ! $(git diff-files --quiet --ignore-submodules --); then + s+='!'; + fi; + + # Check for untracked files. + if [ -n "$(git ls-files --others --exclude-standard)" ]; then + s+='?'; + fi; + + # Check for stashed files. + if $(git rev-parse --verify refs/stash &>/dev/null); then + s+='$'; + fi; + + fi; + + # Get the short symbolic ref. + # If HEAD isn’t a symbolic ref, get the short SHA for the latest commit + # Otherwise, just give up. + branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \ + git rev-parse --short HEAD 2> /dev/null || \ + echo '(unknown)')"; + + [ -n "${s}" ] && s=" [${s}]"; + + echo -e "${1}${branchName}${blue}${s}"; + else + return; + fi; +} + +if tput setaf 1 &> /dev/null; then + tput sgr0; # reset colors + bold=$(tput bold); + reset=$(tput sgr0); + # Solarized colors, taken from http://git.io/solarized-colors. + black=$(tput setaf 0); + blue=$(tput setaf 33); + cyan=$(tput setaf 37); + green=$(tput setaf 64); + orange=$(tput setaf 166); + purple=$(tput setaf 125); + red=$(tput setaf 124); + violet=$(tput setaf 61); + white=$(tput setaf 15); + yellow=$(tput setaf 136); +else + bold=''; + reset="\e[0m"; + black="\e[1;30m"; + blue="\e[1;34m"; + cyan="\e[1;36m"; + green="\e[1;32m"; + orange="\e[1;33m"; + purple="\e[1;35m"; + red="\e[1;31m"; + violet="\e[1;35m"; + white="\e[1;37m"; + yellow="\e[1;33m"; +fi; + +# Highlight the user name when logged in as root. +if [[ "${USER}" == "root" ]]; then + userStyle="${red}"; +else + userStyle="${orange}"; +fi; + +# Highlight the hostname when connected via SSH. +if [[ "${SSH_TTY}" ]]; then + hostStyle="${bold}${red}"; +else + hostStyle="${yellow}"; +fi; + +# Set the terminal title to the current working directory. +PS1="\[\033]0;\w\007\]"; +PS1+="\[${bold}\]\n"; # newline +PS1+="\[${userStyle}\]\u"; # username +PS1+="\[${white}\] at "; +PS1+="\[${hostStyle}\]\h"; # host +PS1+="\[${white}\] in "; +PS1+="\[${green}\]\w"; # working directory +PS1+="\$(prompt_git \"${white} on ${violet}\")"; # Git repository details +PS1+="\n"; +PS1+="\[${white}\]\$ \[${reset}\]"; # `$` (and reset color) +export PS1; + +PS2="\[${yellow}\]→ \[${reset}\]"; +export PS2; \ No newline at end of file diff --git a/bash/.bashrc b/bash/.bashrc index 8422170b..f9cb23b4 100644 --- a/bash/.bashrc +++ b/bash/.bashrc @@ -1,15 +1 @@ -# Add nano as default editor -export EDITOR=nano -export TERMINAL=lxterminal -export BROWSER=firefox -# Gtk themes -export GTK2_RC_FILES="$HOME/.gtkrc-2.0" - -# Go Env -export GOPATH=$HOME/go - -alias ls='ls --color=auto' -alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g' -alias npmu='npm-check-updates -u && npm update && bower update' - -#[ -n "$PS1" ] && source ~/.bash_profile; +[ -n "$PS1" ] && source ~/.bash_profile; \ No newline at end of file diff --git a/bash/.exports b/bash/.exports new file mode 100644 index 00000000..1bd0a851 --- /dev/null +++ b/bash/.exports @@ -0,0 +1,21 @@ +# Make vim the default editor. +export EDITOR='vim'; + +# Enable persistent REPL history for `node`. +NODE_REPL_HISTORY_FILE=~/.node_history; + +# Omit duplicates and commands that begin with a space from history. +export HISTCONTROL='ignoreboth'; + +# Prefer US English and use UTF-8. +export LANG='en_US.UTF-8'; +export LC_ALL='en_US.UTF-8'; + +# Highlight section titles in manual pages. +export LESS_TERMCAP_md="${yellow}"; + +# Don’t clear the screen after quitting a manual page. +export MANPAGER='less -X'; + +# Always enable colored `grep` output. +export GREP_OPTIONS='--color=auto'; diff --git a/bash/.functions b/bash/.functions new file mode 100644 index 00000000..b8cf0b87 --- /dev/null +++ b/bash/.functions @@ -0,0 +1,49 @@ +# Create a new directory and enter it +function mkcd() { + mkdir -p "$@" && cd "$_"; +} + +# Change working directory to the top-most Finder window location +function cdf() { # short for `cdfinder` + cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')"; +} + +# Determine size of a file or total size of a directory +function fsize() { + if du -b /dev/null > /dev/null 2>&1; then + local arg=-sbh; + else + local arg=-sh; + fi + if [[ -n "$@" ]]; then + du $arg -- "$@"; + else + du $arg .[^.]* *; + fi; +} + +# Use Git’s colored diff when available +hash git &>/dev/null; +if [ $? -eq 0 ]; then + function diff() { + git diff --no-index --color-words "$@"; + } +fi; + +# `s` with no arguments opens the current directory in Sublime Text, otherwise +# opens the given location +function s() { + if [ $# -eq 0 ]; then + subl .; + else + subl "$@"; + fi; +} + +# `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring +# the `.git` directory, listing directories first. The output gets piped into +# `less` with options to preserve color and line numbers, unless the output is +# small enough for one screen. +function tree() { + tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX; +} \ No newline at end of file diff --git a/bash/.inputrc b/bash/.inputrc new file mode 100644 index 00000000..9b61124f --- /dev/null +++ b/bash/.inputrc @@ -0,0 +1,37 @@ +# Make Tab autocomplete regardless of filename case +set completion-ignore-case on + +# List all matches in case multiple possible completions are possible +set show-all-if-ambiguous on + +# Immediately add a trailing slash when autocompleting symlinks to directories +set mark-symlinked-directories on + +# Use the text that has already been typed as the prefix for searching through +# commands (i.e. more intelligent Up/Down behavior) +"\e[B": history-search-forward +"\e[A": history-search-backward + +# Do not autocomplete hidden files unless the pattern explicitly begins with a dot +set match-hidden-files off + +# Show all autocomplete results at once +set page-completions off + +# If there are more than 200 possible completions for a word, ask to show them all +set completion-query-items 200 + +# Show extra file information when completing, like `ls -F` does +set visible-stats on + +# Be more intelligent when autocompleting by also looking at the text after +# the cursor. For example, when the current line is "cd ~/src/mozil", and +# the cursor is on the "z", pressing Tab will not autocomplete it to "cd +# ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the +# Readline used by Bash 4.) +set skip-completed-text on + +# Allow UTF-8 input and output, instead of showing stuff like $'\0123\0456' +set input-meta on +set output-meta on +set convert-meta off \ No newline at end of file diff --git a/bash/.path b/bash/.path new file mode 100644 index 00000000..0926705d --- /dev/null +++ b/bash/.path @@ -0,0 +1 @@ +export PATH="/usr/local/bin:$PATH" \ No newline at end of file diff --git a/curl/.curlrc b/curl/.curlrc new file mode 100644 index 00000000..5410d633 --- /dev/null +++ b/curl/.curlrc @@ -0,0 +1,8 @@ +# Disguise as IE 9 on Windows 7. +user-agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" + +# When following a redirect, automatically set the previous URL as referer. +referer = ";auto" + +# Wait 60 seconds before timing out. +connect-timeout = 60 \ No newline at end of file diff --git a/vim/.gvimrc b/vim/.gvimrc new file mode 100644 index 00000000..710288ad --- /dev/null +++ b/vim/.gvimrc @@ -0,0 +1,9 @@ +" Use the Solarized Dark theme +set background=dark +colorscheme solarized +" Use 14pt Monaco +set guifont=Monaco:h14 +" Don’t blink cursor in normal mode +set guicursor=n:blinkon0 +" Better line-height +set linespace=8 \ No newline at end of file diff --git a/vim/.vimrc b/vim/.vimrc index 9275451f..9857ae7a 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,24 +1,113 @@ +" Use the Solarized Dark theme +set background=dark +colorscheme solarized +let g:solarized_termtrans=1 + +" Make Vim more useful +set nocompatible +" Use the OS clipboard by default (on versions compiled with `+clipboard`) +set clipboard=unnamed +" Enhance command-line completion +set wildmenu +" Allow cursor keys in insert mode +set esckeys +" Allow backspace in insert mode +set backspace=indent,eol,start +" Optimize for fast terminal connections +set ttyfast +" Add the g flag to search/replace by default +set gdefault +" Use UTF-8 without BOM +set encoding=utf-8 nobomb +" Change mapleader +let mapleader="," +" Don’t add empty newlines at the end of files +set binary +set noeol +" Centralize backups, swapfiles and undo history +set backupdir=~/.vim/backups +set directory=~/.vim/swaps +if exists("&undodir") + set undodir=~/.vim/undo +endif + +" Don’t create backups when editing files in certain directories +set backupskip=/tmp/*,/private/tmp/* + +" Respect modeline in files +set modeline +set modelines=4 +" Enable per-directory .vimrc files and disable unsafe commands in them +set exrc +set secure +" Enable line numbers +set number +" Enable syntax highlighting syntax on -set nowrap " don't wrap lines -set tabstop=4 " a tab is four spaces -set autoindent " always set autoindenting on -set copyindent " copy the previous indentation on autoindenting -set backspace=indent,eol,start " allows for usage of backspace -set number " always show line numbers -set shiftwidth=4 " number of spaces to use for autoindenting -set shiftround " use multiple of shiftwidth when indenting with '<' and '>' -set showmatch " set show matching parenthesis -set ignorecase " ignore case when searching -set smartcase " ignore case if search pattern is all lowercase, case-sensitive otherwise -set smarttab " insert tabs on the start of a line according to shiftwidth, not tabstop -set hlsearch " highlight search terms -set incsearch " show search matches as you type -set hidden " hides buffers instead of closing them +" Highlight current line +set cursorline +" Make tabs as wide as two spaces +set tabstop=2 +" Show “invisible” characters +set lcs=tab:▸\ ,trail:·,eol:¬,nbsp:_ +set list +" Highlight searches +set hlsearch +" Ignore case of searches +set ignorecase +" Highlight dynamically as pattern is typed +set incsearch +" Always show status line +set laststatus=2 +" Enable mouse in all modes +set mouse=a +" Disable error bells +set noerrorbells +" Don’t reset cursor to start of line when moving around. +set nostartofline +" Show the cursor position +set ruler +" Don’t show the intro message when starting Vim +set shortmess=atI +" Show the current mode +set showmode +" Show the filename in the window titlebar +set title +" Show the (partial) command as it’s being typed +set showcmd +" Use relative line numbers +if exists("&relativenumber") + set relativenumber + au BufReadPost * set relativenumber +endif +" Start scrolling three lines before the horizontal window border +set scrolloff=3 + +" Strip trailing whitespace (,ss) +function! StripWhitespace() + let save_cursor = getpos(".") + let old_query = getreg('/') + :%s/\s\+$//e + call setpos('.', save_cursor) + call setreg('/', old_query) +endfunction +noremap ss :call StripWhitespace() +" Save a file as root (,W) +noremap W :w !sudo tee % > /dev/null + +" Automatic commands +if has("autocmd") + " Enable file type detection + filetype on + " Treat .json files as .js + autocmd BufNewFile,BufRead *.json setfiletype json syntax=javascript + " Treat .md files as Markdown + autocmd BufNewFile,BufRead *.md setlocal filetype=markdown +endif """""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " VUNDLE STUFF " """""""""""""""""""""""""""""""""""""""""""""""""""""""""" -set nocompatible " be iMproved, required filetype off " required " set the runtime path to include Vundle and initialize @@ -30,6 +119,9 @@ call vundle#begin() " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' +" Solarized Theme +Plugin 'altercation/vim-colors-solarized' + " Source tree Plugin 'scrooloose/nerdtree' diff --git a/wget/.wgetrc b/wget/.wgetrc new file mode 100644 index 00000000..33b3bb62 --- /dev/null +++ b/wget/.wgetrc @@ -0,0 +1,36 @@ +# Use the server-provided last modification date, if available +timestamping = on + +# Do not go up in the directory structure when downloading recursively +no_parent = on + +# Wait 60 seconds before timing out. This applies to all timeouts: DNS, connect and read. (The default read timeout is 15 minutes!) +timeout = 60 + +# Retry a few times when a download fails, but don’t overdo it. (The default is 20!) +tries = 3 + +# Retry even when the connection was refused +retry_connrefused = on + +# Use the last component of a redirection URL for the local file name +trust_server_names = on + +# Follow FTP links from HTML documents by default +follow_ftp = on + +# Add a `.html` extension to `text/html` or `application/xhtml+xml` files that lack one, or a `.css` extension to `text/css` files that lack one +adjust_extension = on + +# Use UTF-8 as the default system encoding +# Disabled as it makes `wget` builds that don’t support this feature unusable. +#local_encoding = UTF-8 + +# Ignore `robots.txt` and `` +robots = off + +# Print the HTTP and FTP server responses +server_response = on + +# Disguise as IE 9 on Windows 7 +user_agent = Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) \ No newline at end of file From 32733d5de475485b3a3f27765bc4289da724f38f Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 00:31:24 +0200 Subject: [PATCH 003/532] improve vimrc --- vim/.gvimrc | 9 --------- vim/.vimrc | 23 ----------------------- 2 files changed, 32 deletions(-) delete mode 100644 vim/.gvimrc diff --git a/vim/.gvimrc b/vim/.gvimrc deleted file mode 100644 index 710288ad..00000000 --- a/vim/.gvimrc +++ /dev/null @@ -1,9 +0,0 @@ -" Use the Solarized Dark theme -set background=dark -colorscheme solarized -" Use 14pt Monaco -set guifont=Monaco:h14 -" Don’t blink cursor in normal mode -set guicursor=n:blinkon0 -" Better line-height -set linespace=8 \ No newline at end of file diff --git a/vim/.vimrc b/vim/.vimrc index 9857ae7a..31835a7f 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,8 +1,3 @@ -" Use the Solarized Dark theme -set background=dark -colorscheme solarized -let g:solarized_termtrans=1 - " Make Vim more useful set nocompatible " Use the OS clipboard by default (on versions compiled with `+clipboard`) @@ -24,12 +19,6 @@ let mapleader="," " Don’t add empty newlines at the end of files set binary set noeol -" Centralize backups, swapfiles and undo history -set backupdir=~/.vim/backups -set directory=~/.vim/swaps -if exists("&undodir") - set undodir=~/.vim/undo -endif " Don’t create backups when editing files in certain directories set backupskip=/tmp/*,/private/tmp/* @@ -44,13 +33,8 @@ set secure set number " Enable syntax highlighting syntax on -" Highlight current line -set cursorline " Make tabs as wide as two spaces set tabstop=2 -" Show “invisible” characters -set lcs=tab:▸\ ,trail:·,eol:¬,nbsp:_ -set list " Highlight searches set hlsearch " Ignore case of searches @@ -61,8 +45,6 @@ set incsearch set laststatus=2 " Enable mouse in all modes set mouse=a -" Disable error bells -set noerrorbells " Don’t reset cursor to start of line when moving around. set nostartofline " Show the cursor position @@ -75,11 +57,6 @@ set showmode set title " Show the (partial) command as it’s being typed set showcmd -" Use relative line numbers -if exists("&relativenumber") - set relativenumber - au BufReadPost * set relativenumber -endif " Start scrolling three lines before the horizontal window border set scrolloff=3 From 36326feecf88a597f7a826117aa0351c17b78f04 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 09:30:45 +0200 Subject: [PATCH 004/532] correct typo for .aliases --- bash/{.asliases => .aliases} | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) rename bash/{.asliases => .aliases} (88%) diff --git a/bash/.asliases b/bash/.aliases similarity index 88% rename from bash/.asliases rename to bash/.aliases index 795189a7..0a276bc9 100644 --- a/bash/.asliases +++ b/bash/.aliases @@ -20,4 +20,7 @@ alias sudo='sudo ' # Ring the terminal bell, and put a badge on Terminal.app’s Dock icon # (useful when executing time-consuming commands) -alias bellring="tput bel" \ No newline at end of file +alias bellring="tput bel" + +# ARCH Pacman Update +alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g' \ No newline at end of file From 1356dcf8773bbea53b9fa0f3210efa5135b94b38 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 09:31:16 +0200 Subject: [PATCH 005/532] add learning section to vimrc --- vim/.vimrc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/vim/.vimrc b/vim/.vimrc index 31835a7f..dda9eff5 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,3 +1,9 @@ +" LEARNING +noremap +noremap +noremap +noremap + " Make Vim more useful set nocompatible " Use the OS clipboard by default (on versions compiled with `+clipboard`) From 8086cad695f4ac6d40a4227fda36b0fc3188248d Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 10:05:29 +0200 Subject: [PATCH 006/532] put vundle configs in own file --- vim/.vimrc | 61 ++------------------------------------------------- vim/.vundlerc | 40 +++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 59 deletions(-) create mode 100644 vim/.vundlerc diff --git a/vim/.vimrc b/vim/.vimrc index dda9eff5..4ad18ce0 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -88,62 +88,5 @@ if has("autocmd") autocmd BufNewFile,BufRead *.md setlocal filetype=markdown endif -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" VUNDLE STUFF -" """""""""""""""""""""""""""""""""""""""""""""""""""""""""" -filetype off " required - -" set the runtime path to include Vundle and initialize -set rtp+=~/.vim/bundle/Vundle.vim -call vundle#begin() -" alternatively, pass a path where Vundle should install plugins -" call vundle#begin('~/some/path/here') - -" let Vundle manage Vundle, required -Plugin 'gmarik/Vundle.vim' - -" Solarized Theme -Plugin 'altercation/vim-colors-solarized' - -" Source tree -Plugin 'scrooloose/nerdtree' - -" Auto completion -Plugin 'valloric/youcompleteme' - -" Golang Plugin -Plugin 'fatih/vim-go' - -" Node Plugin -Plugin 'moll/vim-node' - -" The following are examples of different formats supported. -" Keep Plugin commands between vundle#begin/end. -" plugin on GitHub repo -" Plugin 'tpope/vim-fugitive' -" plugin from http://vim-scripts.org/vim/scripts.html -" Plugin 'L9' -" Git plugin not hosted on GitHub -" Plugin 'git://git.wincent.com/command-t.git' -" git repos on your local machine (i.e. when working on your own plugin) -" Plugin 'file:///home/gmarik/path/to/plugin' -" The sparkup vim script is in a subdirectory of this repo called vim. -" Pass the path to set the runtimepath properly. -" Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} -" Avoid a name conflict with L9 -" Plugin 'user/L9', {'name': 'newL9'} - -" All of your Plugins must be added before the following line -call vundle#end() " required -filetype plugin indent on " required -" To ignore plugin indent changes, instead use: -" filetype plugin on - -" Brief help -" :PluginList - lists configured plugins -" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate -" :PluginSearch foo - searches for foo; append `!` to refresh local cache -" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal - -" see :h vundle for more details or wiki for FAQ -" Put your non-Plugin stuff after this line +" Import Vundle configuration +source ~/.vundlerc diff --git a/vim/.vundlerc b/vim/.vundlerc new file mode 100644 index 00000000..64f486ca --- /dev/null +++ b/vim/.vundlerc @@ -0,0 +1,40 @@ +filetype off " required + +" set the runtime path to include Vundle and initialize +set rtp+=~/.vim/bundle/Vundle.vim +call vundle#begin() + + +" let Vundle manage Vundle, required +Plugin 'gmarik/Vundle.vim' + +" Emmet +Plugin 'mattn/emmet-vim' + +" Source tree +Plugin 'scrooloose/nerdtree' + +" Auto completion +Plugin 'valloric/youcompleteme' + +" Golang Plugin +Plugin 'fatih/vim-go' + +" Node Plugin +Plugin 'moll/vim-node' + + +" All of your Plugins must be added before the following line +call vundle#end() " required +filetype plugin indent on " required +" To ignore plugin indent changes, instead use: +" filetype plugin on + +" Brief help +" :PluginList - lists configured plugins +" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate +" :PluginSearch foo - searches for foo; append `!` to refresh local cache +" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal + +" see :h vundle for more details or wiki for FAQ +" Put your non-Plugin stuff after this line \ No newline at end of file From f5f2dbf12f25d6baf629f35b2d8794967c7b802b Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 10:44:06 +0200 Subject: [PATCH 007/532] import bash stuff to zsh --- bash/.aliases | 5 +++- bash/.path | 10 ++++++- vim/.vundlerc | 1 + zsh/.zshrc | 79 +++++---------------------------------------------- 4 files changed, 21 insertions(+), 74 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 0a276bc9..a23f0f40 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -23,4 +23,7 @@ alias sudo='sudo ' alias bellring="tput bel" # ARCH Pacman Update -alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g' \ No newline at end of file +alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g' + +# NPM update folder (also Bower) +alias npmu='npm-check-updates -u && npm update && bower update' \ No newline at end of file diff --git a/bash/.path b/bash/.path index 0926705d..6119e02e 100644 --- a/bash/.path +++ b/bash/.path @@ -1 +1,9 @@ -export PATH="/usr/local/bin:$PATH" \ No newline at end of file +GOPATH=$HOME/go + +PATH="/usr/local/bin:$PATH" +PATH="/usr/bin:$PATH" +PATH="/bin:$PATH" +PATH="$GOPATH/bin:$PATH" + +export GOPATH +export PATH \ No newline at end of file diff --git a/vim/.vundlerc b/vim/.vundlerc index 64f486ca..dd2bb225 100644 --- a/vim/.vundlerc +++ b/vim/.vundlerc @@ -16,6 +16,7 @@ Plugin 'scrooloose/nerdtree' " Auto completion Plugin 'valloric/youcompleteme' +let NERDTreeShowHidden=1 " Golang Plugin Plugin 'fatih/vim-go' diff --git a/zsh/.zshrc b/zsh/.zshrc index a4db0527..5ac6a367 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -5,41 +5,7 @@ export ZSH=$HOME/.oh-my-zsh # 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="robbyrussell" - -# Uncomment the following line to use case-sensitive completion. -# CASE_SENSITIVE="true" - -# Uncomment the following line to disable bi-weekly auto-update checks. -# DISABLE_AUTO_UPDATE="true" - -# Uncomment the following line to change how often to auto-update (in days). -# export UPDATE_ZSH_DAYS=13 - -# Uncomment the following line to disable colors in ls. -# DISABLE_LS_COLORS="true" - -# Uncomment the following line to disable auto-setting terminal title. -# DISABLE_AUTO_TITLE="true" - -# Uncomment the following line to enable command auto-correction. -# ENABLE_CORRECTION="true" - -# Uncomment the following line to display red dots whilst waiting for completion. -# COMPLETION_WAITING_DOTS="true" - -# Uncomment the following line if you want to disable marking untracked files -# under VCS as dirty. This makes repository status check for large repositories -# much, much faster. -# DISABLE_UNTRACKED_FILES_DIRTY="true" - -# Uncomment the following line if you want to change the command execution time -# stamp shown in the history command output. -# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" -# HIST_STAMPS="mm/dd/yyyy" - -# Would you like to use another custom folder than $ZSH/custom? -# ZSH_CUSTOM=/path/to/new-custom-folder +ZSH_THEME="random" # 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/ @@ -48,42 +14,11 @@ ZSH_THEME="robbyrussell" # Add wisely, as too many plugins slow down shell startup. plugins=(git) -# User configuration - -export GOPATH=$HOME/go - -export PATH=$PATH:"/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/lib:/usr/local/sbin:$GOPATH/bin" -# export MANPATH="/usr/local/man:$MANPATH" +# Load the shell dotfiles +for file in ~/.{path,exports,aliases,functions,extra}; do + [ -r "$file" ] && [ -f "$file" ] && source "$file"; +done; +unset file; +# update oh-my-zsh bi weekly and other useful helpers source $ZSH/oh-my-zsh.sh - -# You may need to manually set your language environment -# export LANG=en_US.UTF-8 - -# Preferred editor for local and remote sessions -# if [[ -n $SSH_CONNECTION ]]; then -# export EDITOR='vim' -# else -# export EDITOR='mvim' -# fi - -# Compilation flags -# export ARCHFLAGS="-arch x86_64" - -# ssh -# export SSH_KEY_PATH="~/.ssh/dsa_id" - -# Set personal aliases, overriding those provided by oh-my-zsh libs, -# plugins, and themes. Aliases can be placed here, though oh-my-zsh -# users are encouraged to define aliases within the ZSH_CUSTOM folder. -# For a full list of active aliases, run `alias`. -# -# Example aliases -# alias zshconfig="mate ~/.zshrc" -# alias ohmyzsh="mate ~/.oh-my-zsh" -alias iojs="iojs --use-strict --harmony" -alias pacu="npm-check-updates -u && npm update && bower update" - -# from bash_profile -export PATH=/usr/local/bin:$PATH -export PATH=/usr/local/Cellar/ruby/2.2.2/lib/rub/gems/2.2.0:$PATH From 9ec919e74156148e93840ac35054edaa6b3b65ed Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 10:54:23 +0200 Subject: [PATCH 008/532] remove curl --- curl/.curlrc | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 curl/.curlrc diff --git a/curl/.curlrc b/curl/.curlrc deleted file mode 100644 index 5410d633..00000000 --- a/curl/.curlrc +++ /dev/null @@ -1,8 +0,0 @@ -# Disguise as IE 9 on Windows 7. -user-agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" - -# When following a redirect, automatically set the previous URL as referer. -referer = ";auto" - -# Wait 60 seconds before timing out. -connect-timeout = 60 \ No newline at end of file From b48a6f299346566930b19b75aba3327095167b6c Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 14:22:27 +0200 Subject: [PATCH 009/532] improve path order --- bash/.bash_profile | 3 --- bash/.path | 11 +++++++---- zsh/.zshrc | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bash/.bash_profile b/bash/.bash_profile index d749d1e8..32a5722f 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -1,6 +1,3 @@ -# Add `~/bin` to the `$PATH` -export PATH="$HOME/bin:$PATH"; - # Load the shell dotfiles, and then some: # * ~/.path can be used to extend `$PATH`. # * ~/.extra can be used for other settings you don’t want to commit. diff --git a/bash/.path b/bash/.path index 6119e02e..6c7f1aaf 100644 --- a/bash/.path +++ b/bash/.path @@ -1,9 +1,12 @@ GOPATH=$HOME/go -PATH="/usr/local/bin:$PATH" -PATH="/usr/bin:$PATH" -PATH="/bin:$PATH" -PATH="$GOPATH/bin:$PATH" +PATH="/usr/local/bin" +PATH="$PATH:/usr/bin" +PATH="$PATH:/bin" +PATH="$PATH:/usr/local/sbin" + +PATH="$PATH:$HOME/bin" +PATH="$PATH:$GOPATH/bin" export GOPATH export PATH \ No newline at end of file diff --git a/zsh/.zshrc b/zsh/.zshrc index 5ac6a367..a5fc8196 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -5,7 +5,7 @@ export ZSH=$HOME/.oh-my-zsh # 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="random" +ZSH_THEME="zhann" # 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/ From 3f2ae1a0ba6e2612973bf3e1d96c9a75755fffe5 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 17:16:37 +0200 Subject: [PATCH 010/532] add git --- git/.gitconfig | 13 +++++++++++++ git/.gitignore_global | 1 + 2 files changed, 14 insertions(+) create mode 100644 git/.gitconfig create mode 100644 git/.gitignore_global diff --git a/git/.gitconfig b/git/.gitconfig new file mode 100644 index 00000000..06a8013b --- /dev/null +++ b/git/.gitconfig @@ -0,0 +1,13 @@ +[user] + email = tobias.fuhrimann@swisscom.com + name = Tobias Fuhrimann +[push] + default = matching +[core] + excludesfile = ~/.gitignore_global +[filter "media"] + required = true + clean = git media clean %f + smudge = git media smudge %f +[color] + ui = true diff --git a/git/.gitignore_global b/git/.gitignore_global new file mode 100644 index 00000000..e43b0f98 --- /dev/null +++ b/git/.gitignore_global @@ -0,0 +1 @@ +.DS_Store From 7dfba6ee78387e19bb13701882e52f7e85878a45 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 18:44:22 +0200 Subject: [PATCH 011/532] add git pull of dotfiles to pacu --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index a23f0f40..3e1f34e5 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -23,7 +23,7 @@ alias sudo='sudo ' alias bellring="tput bel" # ARCH Pacman Update -alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g' +alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' # NPM update folder (also Bower) alias npmu='npm-check-updates -u && npm update && bower update' \ No newline at end of file From 3413c8f469b0e5126f00ecc9a7dbe5033495e61c Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 18:56:20 +0200 Subject: [PATCH 012/532] os agnostic aliases --- bash/.aliases | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 3e1f34e5..b01f6789 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -23,7 +23,10 @@ alias sudo='sudo ' alias bellring="tput bel" # ARCH Pacman Update -alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' +case $(uname) in + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; +esac # NPM update folder (also Bower) alias npmu='npm-check-updates -u && npm update && bower update' \ No newline at end of file From 81ced1931287839578c02cf8ee698a001f0668c5 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 19:00:08 +0200 Subject: [PATCH 013/532] add softwareupdate for darwin --- bash/.aliases | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index b01f6789..7a249976 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -22,10 +22,10 @@ alias sudo='sudo ' # (useful when executing time-consuming commands) alias bellring="tput bel" -# ARCH Pacman Update +# System Update case $(uname) in 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; - 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Darwin') alias pacu='sudo softwareupdate -iva && brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; esac # NPM update folder (also Bower) From 6918c573225bf20dee82a1e48b120ca23ef4d70e Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 19:10:29 +0200 Subject: [PATCH 014/532] remove softwareupdate for darwin because it cannot be found --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 7a249976..7d87cd00 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -25,7 +25,7 @@ alias bellring="tput bel" # System Update case $(uname) in 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; - 'Darwin') alias pacu='sudo softwareupdate -iva && brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; esac # NPM update folder (also Bower) From e9ecad12e12720179c73fb0f2e69c6c682efbc48 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 19:27:53 +0200 Subject: [PATCH 015/532] ask if darwin to add brew completion stuff --- bash/.bash_profile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bash/.bash_profile b/bash/.bash_profile index 32a5722f..d25a81a9 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -20,10 +20,12 @@ for option in autocd globstar; do done; # Add tab completion for many Bash commands -if which brew > /dev/null && [ -f "$(brew --prefix)/share/bash-completion/bash_completion" ]; then - source "$(brew --prefix)/share/bash-completion/bash_completion"; -elif [ -f /etc/bash_completion ]; then - source /etc/bash_completion; +if [ "$(uname) == 'Darwin'" ]; then + if which brew > /dev/null && [ -f "$(brew --prefix)/share/bash-completion/bash_completion" ]; then + source "$(brew --prefix)/share/bash-completion/bash_completion"; + elif [ -f /etc/bash_completion ]; then + source /etc/bash_completion; + fi; fi; # Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards From 0c5523c8fbb08b04942ba87f59b589c0a75575f6 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 19:31:51 +0200 Subject: [PATCH 016/532] enable hard mode for vim --- vim/.vimrc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/vim/.vimrc b/vim/.vimrc index 4ad18ce0..d6693232 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -4,6 +4,11 @@ noremap noremap noremap +noremap h +noremap j +noremap k +noremap l + " Make Vim more useful set nocompatible " Use the OS clipboard by default (on versions compiled with `+clipboard`) From 74da4fddfd178c56f8f73295c13d65e58801e186 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 20:38:18 +0200 Subject: [PATCH 017/532] add easymotion and tcomment plugins --- vim/.vundlerc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/vim/.vundlerc b/vim/.vundlerc index dd2bb225..06346c73 100644 --- a/vim/.vundlerc +++ b/vim/.vundlerc @@ -8,6 +8,12 @@ call vundle#begin() " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' +" EasyMotion +Plugin 'lokaltog/vim-easymotion' + +" Toggle Comments +Plugin 'tomtom/tcomment_vim' + " Emmet Plugin 'mattn/emmet-vim' From 44d1e72543ca3d3b1c034a558b8982ce241faa80 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jun 2015 21:06:11 +0200 Subject: [PATCH 018/532] add wakatime --- vim/.vundlerc | 2 ++ wakatime/.wakatime.cfg | 7 +++++++ 2 files changed, 9 insertions(+) create mode 100644 wakatime/.wakatime.cfg diff --git a/vim/.vundlerc b/vim/.vundlerc index 06346c73..0cfe9026 100644 --- a/vim/.vundlerc +++ b/vim/.vundlerc @@ -30,6 +30,8 @@ Plugin 'fatih/vim-go' " Node Plugin Plugin 'moll/vim-node' +" Wakatime +Plugin 'wakatime/vim-wakatime' " All of your Plugins must be added before the following line call vundle#end() " required diff --git a/wakatime/.wakatime.cfg b/wakatime/.wakatime.cfg new file mode 100644 index 00000000..4fb3095d --- /dev/null +++ b/wakatime/.wakatime.cfg @@ -0,0 +1,7 @@ +[settings] +debug = false +api_key = f7a2b45c-40df-4f80-baca-9dbcd314ca19 +hidefilenames = false +ignore = + ^COMMIT_EDITMSG$ + ^TAG_EDITMSG$ From 0823c95c5bb6a30ba841634f5f1a92d992c8f92e Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 3 Jun 2015 00:13:04 +0200 Subject: [PATCH 019/532] remove vim learning for NERDTree --- git/.gitconfig | 6 ++++++ vim/.vimrc | 11 ----------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/git/.gitconfig b/git/.gitconfig index 06a8013b..464b89f4 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -11,3 +11,9 @@ smudge = git media smudge %f [color] ui = true +[difftool "sourcetree"] + cmd = opendiff \"$LOCAL\" \"$REMOTE\" + path = +[mergetool "sourcetree"] + cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\" + trustExitCode = true diff --git a/vim/.vimrc b/vim/.vimrc index d6693232..5a192459 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,14 +1,3 @@ -" LEARNING -noremap -noremap -noremap -noremap - -noremap h -noremap j -noremap k -noremap l - " Make Vim more useful set nocompatible " Use the OS clipboard by default (on versions compiled with `+clipboard`) From 587a5280a339f027cf3b153aadf7f0c1a4abd8f5 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 3 Jun 2015 01:19:36 +0200 Subject: [PATCH 020/532] easier window splitting in vim --- vim/.vimrc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/vim/.vimrc b/vim/.vimrc index 5a192459..f792c205 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,3 +1,9 @@ +" Disable arrow keys for learning purposes +noremap +noremap +noremap +noremap + " Make Vim more useful set nocompatible " Use the OS clipboard by default (on versions compiled with `+clipboard`) @@ -60,6 +66,14 @@ set showcmd " Start scrolling three lines before the horizontal window border set scrolloff=3 +" More natural splitting of windows and easier split navigation +set splitbelow +set splitright +nnoremap +nnoremap +nnoremap +nnoremap + " Strip trailing whitespace (,ss) function! StripWhitespace() let save_cursor = getpos(".") From 1066b82a88842b74e362e8b5bffe953ad81430f1 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 4 Jun 2015 10:26:39 +0200 Subject: [PATCH 021/532] add firebase and docker --- docker/.dockercfg | 6 ++++++ firebase/.firebaserc | 4 ++++ npm/.npmrc | 5 +++++ vim/.vundlerc | 23 +++++++++++++++++++++-- 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 docker/.dockercfg create mode 100644 firebase/.firebaserc create mode 100644 npm/.npmrc diff --git a/docker/.dockercfg b/docker/.dockercfg new file mode 100644 index 00000000..aadaf701 --- /dev/null +++ b/docker/.dockercfg @@ -0,0 +1,6 @@ +{ + "https://index.docker.io/v1/": { + "auth": "bWFzdGVydGlubmVyOlkyZ1BpTXdnUlZhdkQyb3NCTVElWVRoO3J2", + "email": "robidog_1@hotmail.com" + } +} \ No newline at end of file diff --git a/firebase/.firebaserc b/firebase/.firebaserc new file mode 100644 index 00000000..fdc4c943 --- /dev/null +++ b/firebase/.firebaserc @@ -0,0 +1,4 @@ +{ + "email": "robidog_1@hotmail.com", + "token": "-JMqRnnuBmiRACilPa9u|cf4e3799f1348d9c78bd2042adb201f6" +} diff --git a/npm/.npmrc b/npm/.npmrc new file mode 100644 index 00000000..fd55b33b --- /dev/null +++ b/npm/.npmrc @@ -0,0 +1,5 @@ +init.author.name=Tobias Fuhrimann +init.author.email=tobias.fuhrimann@gmail.com +init.author.url=http://www.berndsgn.ch +ca=null +strict-ssl=true diff --git a/vim/.vundlerc b/vim/.vundlerc index 0cfe9026..f74dd6a1 100644 --- a/vim/.vundlerc +++ b/vim/.vundlerc @@ -4,7 +4,6 @@ filetype off " required set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() - " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' @@ -12,7 +11,19 @@ Plugin 'gmarik/Vundle.vim' Plugin 'lokaltog/vim-easymotion' " Toggle Comments -Plugin 'tomtom/tcomment_vim' +Plugin 'scrooloose/nerdcommenter' + +" Syntax Highlighting +Plugin 'scrooloose/syntastic' + +" Pasting in Vim with correct indentation +Plugin 'sickill/vim-pasta' + +" Match HTML tags for % +Plugin 'tmhedberg/matchit' + +" Mark trailing whitespace +Plugin 'bronson/vim-trailing-whitespace' " Emmet Plugin 'mattn/emmet-vim' @@ -30,6 +41,14 @@ Plugin 'fatih/vim-go' " Node Plugin Plugin 'moll/vim-node' +" Open Files +Plugin 'kien/ctrlp.vim' + +" Focus on one window +Plugin 'vim-scripts/ZoomWin' + + + " Wakatime Plugin 'wakatime/vim-wakatime' From 4ee3ffc9210c3abc4fe815831a980af96c771b58 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 4 Jun 2015 19:03:22 +0200 Subject: [PATCH 022/532] add plugins --- vim/.vundlerc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vim/.vundlerc b/vim/.vundlerc index f74dd6a1..5f53c24e 100644 --- a/vim/.vundlerc +++ b/vim/.vundlerc @@ -41,6 +41,10 @@ Plugin 'fatih/vim-go' " Node Plugin Plugin 'moll/vim-node' +" Typescript +Plugin 'leafgarland/typescript-vim' +Plugin 'icholy/typescript-tools' + " Open Files Plugin 'kien/ctrlp.vim' From 5110add6648d15b7e6fff7748a9842d64873bd50 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 7 Jun 2015 16:40:07 +0200 Subject: [PATCH 023/532] add NODE_PATH --- bash/.path | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bash/.path b/bash/.path index 6c7f1aaf..729fc8b6 100644 --- a/bash/.path +++ b/bash/.path @@ -1,12 +1,16 @@ -GOPATH=$HOME/go +GOPATH="$HOME/go" +NODE_PATH="'$(npm root -g)'" -PATH="/usr/local/bin" +PATH="$PATH:/usr/local/bin" PATH="$PATH:/usr/bin" PATH="$PATH:/bin" PATH="$PATH:/usr/local/sbin" +PATH="$PATH:/usr/sbin" +PATH="$PATH:/sbin" PATH="$PATH:$HOME/bin" PATH="$PATH:$GOPATH/bin" +export NODE_PATH export GOPATH export PATH \ No newline at end of file From 7e7a8195f0e0bef7972d5ec25543f7461119822d Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 23 Jun 2015 19:18:15 +0200 Subject: [PATCH 024/532] npmu: execute bower even if there is no package.json --- bash/.aliases | 2 +- bash/.path | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 7d87cd00..43cdd3d4 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -29,4 +29,4 @@ case $(uname) in esac # NPM update folder (also Bower) -alias npmu='npm-check-updates -u && npm update && bower update' \ No newline at end of file +alias npmu='npm-check-updates -u && npm update; bower update' \ No newline at end of file diff --git a/bash/.path b/bash/.path index 729fc8b6..1a14a363 100644 --- a/bash/.path +++ b/bash/.path @@ -1,7 +1,6 @@ GOPATH="$HOME/go" -NODE_PATH="'$(npm root -g)'" -PATH="$PATH:/usr/local/bin" +PATH="/usr/local/bin" PATH="$PATH:/usr/bin" PATH="$PATH:/bin" PATH="$PATH:/usr/local/sbin" @@ -11,6 +10,5 @@ PATH="$PATH:/sbin" PATH="$PATH:$HOME/bin" PATH="$PATH:$GOPATH/bin" -export NODE_PATH export GOPATH export PATH \ No newline at end of file From ee3bf45cf54caa7fd7780d5c320488eeb0b3f544 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 4 Jul 2015 17:20:58 +0200 Subject: [PATCH 025/532] add linux cleanup commands to .aliases --- bash/.aliases | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bash/.aliases b/bash/.aliases index 43cdd3d4..6ca97895 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -28,5 +28,9 @@ case $(uname) in 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; esac +# Arch Clean Up +alias paclist ='comm -23 <(pacman -Qqt | sort) <(echo $ignorepkg | tr " " "\n" | cat <(pacman -Sqg $ignoregrp) - | sort -u)' +alias pacro = 'pacman -Rns $(pacman -Qtdq)' + # NPM update folder (also Bower) alias npmu='npm-check-updates -u && npm update; bower update' \ No newline at end of file From 0f0941c78a811f9325eaa2d0f9ad0b3c5b14f133 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 4 Jul 2015 17:26:24 +0200 Subject: [PATCH 026/532] remove faulty command --- bash/.aliases | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 6ca97895..0ab59493 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -29,7 +29,6 @@ case $(uname) in esac # Arch Clean Up -alias paclist ='comm -23 <(pacman -Qqt | sort) <(echo $ignorepkg | tr " " "\n" | cat <(pacman -Sqg $ignoregrp) - | sort -u)' alias pacro = 'pacman -Rns $(pacman -Qtdq)' # NPM update folder (also Bower) From 48b50230758f932e2c52ddfc0b9bba99a9af1317 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 4 Jul 2015 17:29:28 +0200 Subject: [PATCH 027/532] bugfix --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 0ab59493..b5e3c43e 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -29,7 +29,7 @@ case $(uname) in esac # Arch Clean Up -alias pacro = 'pacman -Rns $(pacman -Qtdq)' +alias pacro='pacman -Rns $(pacman -Qtdq)' # NPM update folder (also Bower) alias npmu='npm-check-updates -u && npm update; bower update' \ No newline at end of file From 38166e67fc820917fc61dc10b4d6153829fc23ae Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 4 Jul 2015 17:31:03 +0200 Subject: [PATCH 028/532] add sudo --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index b5e3c43e..34d11fb3 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -29,7 +29,7 @@ case $(uname) in esac # Arch Clean Up -alias pacro='pacman -Rns $(pacman -Qtdq)' +alias pacro='sudo pacman -Rns $(pacman -Qtdq)' # NPM update folder (also Bower) alias npmu='npm-check-updates -u && npm update; bower update' \ No newline at end of file From 5975df3ef21271ef5dbe9e70eb1e6b7b7f2613bf Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 4 Jul 2015 17:41:05 +0200 Subject: [PATCH 029/532] add pacman optimization to pacu --- bash/.aliases | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 34d11fb3..e21e8e2a 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -24,12 +24,9 @@ alias bellring="tput bel" # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo pacman -Sc && sudo pacman-optimize && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; esac -# Arch Clean Up -alias pacro='sudo pacman -Rns $(pacman -Qtdq)' - # NPM update folder (also Bower) alias npmu='npm-check-updates -u && npm update; bower update' \ No newline at end of file From 026dd898d3f4c4126cad7efd9090bf0c0f4d32bc Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 4 Jul 2015 17:50:13 +0200 Subject: [PATCH 030/532] add noconfirm --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index e21e8e2a..ecdb268d 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -24,7 +24,7 @@ alias bellring="tput bel" # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo pacman -Sc && sudo pacman-optimize && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo pacman -Sc --noconfirm && sudo pacman-optimize --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; esac From 795a24bda4ac1a4742ffaed727974e3b18d82dea Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 5 Jul 2015 22:16:26 +0200 Subject: [PATCH 031/532] remove noconfirm --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index ecdb268d..9804e5b0 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -24,7 +24,7 @@ alias bellring="tput bel" # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo pacman -Sc --noconfirm && sudo pacman-optimize --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo pacman -Sc --noconfirm && sudo pacman-optimize && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; esac From 20e01a3fcf758dc436b2584a8160330ee67586fc Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 5 Jul 2015 22:22:16 +0200 Subject: [PATCH 032/532] remove faulty commands --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 9804e5b0..29c86ec3 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -24,7 +24,7 @@ alias bellring="tput bel" # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo pacman -Sc --noconfirm && sudo pacman-optimize && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; esac From 498bfbf4bec118e7776f16d4e9562f4a5a5f2b01 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 30 Jul 2015 10:10:22 +0200 Subject: [PATCH 033/532] new command for npm-check-updates --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 29c86ec3..1acadde2 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -29,4 +29,4 @@ case $(uname) in esac # NPM update folder (also Bower) -alias npmu='npm-check-updates -u && npm update; bower update' \ No newline at end of file +alias npmu='ncu -ua && npm update; bower update' \ No newline at end of file From a8df64135eb5f12306c5d89b4908bf60414db3e2 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 25 Aug 2015 23:57:38 +0200 Subject: [PATCH 034/532] remove .DS_Store --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 68b48dbc10e91a43b4f323ff9793563dfdc15d77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKyH3MU47F*7N-P~2@5tIexT;zt*75@o7>ZQX0ks2DHhzwOqQ?&qc-s*k4Xt?i}jQI$7jpaN8Y3Qz$m@DCNh%r=`|1~O6sDnJFk z6|nC^fg9GuA<#b^2)+UUJEYxk?Z5uOVhLbP90HMnX;6Vd)m$+&HwO(m&TG~Wfk7Ab zC!g6u5n%yhd`$z?{px41WXqi6*z?gN1KZ;zW@LL From e6aa128b20ad3aa21b96252e7fb0d351ea01eaf4 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 26 Aug 2015 00:14:29 +0200 Subject: [PATCH 035/532] Create Readme.MD --- README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..93081913 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Dotfiles +My personal dotfiles + +# Usage +I use [Stow](https://www.gnu.org/software/stow/) to keep my files in sync From caefe46ac5ffd65116135530b447d300dbeafc98 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 30 Aug 2015 12:06:44 +0200 Subject: [PATCH 036/532] log into npm registry --- npm/.npmrc | 1 + 1 file changed, 1 insertion(+) diff --git a/npm/.npmrc b/npm/.npmrc index fd55b33b..f1840f17 100644 --- a/npm/.npmrc +++ b/npm/.npmrc @@ -3,3 +3,4 @@ init.author.email=tobias.fuhrimann@gmail.com init.author.url=http://www.berndsgn.ch ca=null strict-ssl=true +//registry.npmjs.org/:_authToken=4a928f47-f771-4dd9-b4d3-d398deda7ae0 From dd5d238d4b183e496a392384aa3d6b771713a32e Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 22 Sep 2015 22:19:08 +0200 Subject: [PATCH 037/532] remove sudo from npm -g --- bash/.aliases | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 1acadde2..318951c3 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -24,8 +24,8 @@ alias bellring="tput bel" # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; - 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && npm update -g && (cd ~/dotfiles && git pull)' ;; esac # NPM update folder (also Bower) From e1634b39b036db768d20c9b9e59ba10ffee9d498 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 22 Sep 2015 23:01:56 +0200 Subject: [PATCH 038/532] get sudo back for linux npm --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 318951c3..3e22b547 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -24,7 +24,7 @@ alias bellring="tput bel" # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && npm update -g && (cd ~/dotfiles && git pull)' ;; esac From 7431aa3b40abd70249f8adcd035a2b9472d5bfcb Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 28 Sep 2015 07:10:59 +0200 Subject: [PATCH 039/532] app npm-debug.log to global gitignore --- git/.gitconfig | 2 +- git/.gitignore_global | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/git/.gitconfig b/git/.gitconfig index 464b89f4..613e8817 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -4,7 +4,7 @@ [push] default = matching [core] - excludesfile = ~/.gitignore_global + excludesfile = /Users/taafuto1/.gitignore_global [filter "media"] required = true clean = git media clean %f diff --git a/git/.gitignore_global b/git/.gitignore_global index e43b0f98..18ff1d0c 100644 --- a/git/.gitignore_global +++ b/git/.gitignore_global @@ -1 +1,2 @@ .DS_Store +npm-debug.log From 4eb80a57c7e12f87a40751a0886d5cfeec5a8505 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 29 Sep 2015 19:02:06 +0200 Subject: [PATCH 040/532] add npm and bower prune --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 3e22b547..85124ba0 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -29,4 +29,4 @@ case $(uname) in esac # NPM update folder (also Bower) -alias npmu='ncu -ua && npm update; bower update' \ No newline at end of file +alias npmu='ncu -ua && npm update && npm prune; bower update && bower prune' \ No newline at end of file From 3a15649584bba67ed843dba38b6703ef37823a69 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 29 Sep 2015 19:02:47 +0200 Subject: [PATCH 041/532] add npm-debug.log to global gitignore --- git/.gitignore_global | 1 + 1 file changed, 1 insertion(+) diff --git a/git/.gitignore_global b/git/.gitignore_global index e43b0f98..18ff1d0c 100644 --- a/git/.gitignore_global +++ b/git/.gitignore_global @@ -1 +1,2 @@ .DS_Store +npm-debug.log From ae3d6a76afb91c649397ba140710aad0ee8526a3 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 29 Sep 2015 19:40:14 +0200 Subject: [PATCH 042/532] remove sude from npm update --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 85124ba0..be19724b 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -24,7 +24,7 @@ alias bellring="tput bel" # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && sudo npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && (cd ~/dotfiles && git pull)' ;; 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && npm update -g && (cd ~/dotfiles && git pull)' ;; esac From 4f57eddff800e506d1250b87ea352700c8447e50 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 18 Oct 2015 13:38:48 +0200 Subject: [PATCH 043/532] new auth token --- npm/.npmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/.npmrc b/npm/.npmrc index f1840f17..146d1105 100644 --- a/npm/.npmrc +++ b/npm/.npmrc @@ -3,4 +3,4 @@ init.author.email=tobias.fuhrimann@gmail.com init.author.url=http://www.berndsgn.ch ca=null strict-ssl=true -//registry.npmjs.org/:_authToken=4a928f47-f771-4dd9-b4d3-d398deda7ae0 +//registry.npmjs.org/:_authToken=1ff5148a-4b63-44d0-9e47-b459b351a5ea From 55edc1607e293e041a75673c9e2a6dda315e9e64 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 18 Oct 2015 13:39:37 +0200 Subject: [PATCH 044/532] remove npm --- npm/.npmrc | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 npm/.npmrc diff --git a/npm/.npmrc b/npm/.npmrc deleted file mode 100644 index 146d1105..00000000 --- a/npm/.npmrc +++ /dev/null @@ -1,6 +0,0 @@ -init.author.name=Tobias Fuhrimann -init.author.email=tobias.fuhrimann@gmail.com -init.author.url=http://www.berndsgn.ch -ca=null -strict-ssl=true -//registry.npmjs.org/:_authToken=1ff5148a-4b63-44d0-9e47-b459b351a5ea From 967986b72c911dbf53076bebca543a5d82b83f8f Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 26 Oct 2015 15:06:02 +0100 Subject: [PATCH 045/532] use kaleidoscope to diff and merge in git --- git/.gitconfig | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/git/.gitconfig b/git/.gitconfig index 613e8817..d38fce42 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -11,9 +11,16 @@ smudge = git media smudge %f [color] ui = true -[difftool "sourcetree"] - cmd = opendiff \"$LOCAL\" \"$REMOTE\" - path = -[mergetool "sourcetree"] - cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\" - trustExitCode = true + +# Kaleidoscope +[diff] + tool = Kaleidoscope +[difftool "Kaleidoscope"] + cmd = ksdiff --partial-changeset --relative-path \"$MERGED\" -- \"$LOCAL\" \"$REMOTE\" +[merge] + tool = Kaleidoscope +[mergetool "Kaleidoscope"] + cmd = ksdiff --merge --output \"$MERGED\" --base \"$BASE\" -- \"$LOCAL\" --snapshot \"$REMOTE\" --snapshot + trustExitCode = true +[alias] + ksreview = "!f() { local SHA=${1:-HEAD}; local BRANCH=${2:-master}; if [ $SHA == $BRANCH ]; then SHA=HEAD; fi; git difftool -y -t Kaleidoscope $BRANCH...$SHA; }; f" From e9e71d62cb75632e29d1aaab388d9d57d97d5b74 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 26 Oct 2015 15:44:33 +0100 Subject: [PATCH 046/532] add source tree as diff and merge tools (additionally to kaleidoscope) --- git/.gitconfig | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/git/.gitconfig b/git/.gitconfig index d38fce42..5da0621d 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -24,3 +24,9 @@ trustExitCode = true [alias] ksreview = "!f() { local SHA=${1:-HEAD}; local BRANCH=${2:-master}; if [ $SHA == $BRANCH ]; then SHA=HEAD; fi; git difftool -y -t Kaleidoscope $BRANCH...$SHA; }; f" +[difftool "sourcetree"] + cmd = opendiff \"$LOCAL\" \"$REMOTE\" + path = +[mergetool "sourcetree"] + cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\" + trustExitCode = true From 7d7fc2a36e58f421bcbe8c233440e5faa4d4e779 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 2 May 2016 23:44:41 +0200 Subject: [PATCH 047/532] npm update before ncu --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index be19724b..3f50226d 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -29,4 +29,4 @@ case $(uname) in esac # NPM update folder (also Bower) -alias npmu='ncu -ua && npm update && npm prune; bower update && bower prune' \ No newline at end of file +alias npmu='npm update && ncu -ua && npm prune; bower update && bower prune' From 1fe3c21e0534e629c495219bc0a4078df08d5240 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 14 Jun 2016 10:55:34 +0200 Subject: [PATCH 048/532] add shortcut for visual studio code --- bash/.aliases | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/.aliases b/bash/.aliases index 3f50226d..658d50a2 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -30,3 +30,6 @@ esac # NPM update folder (also Bower) alias npmu='npm update && ncu -ua && npm prune; bower update && bower prune' + +# Visual Studio Code +code () { VSCODE_CWD="$PWD" open -n -b "com.microsoft.VSCode" --args $* ;} From a5946437df735761cab1d20e46087ae5b03eace0 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 3 Oct 2016 08:59:28 +0200 Subject: [PATCH 049/532] Remove unnecessary flag --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 658d50a2..8eaa33e0 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -25,7 +25,7 @@ alias bellring="tput bel" # System Update case $(uname) in 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && (cd ~/dotfiles && git pull)' ;; - 'Darwin') alias pacu='brew update && brew upgrade --all && brew cleanup && npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Darwin') alias pacu='brew update && brew upgrade && brew cleanup && npm update -g && (cd ~/dotfiles && git pull)' ;; esac # NPM update folder (also Bower) From 405ebb978477eda3d6f1dcc8d7bdd918d07d8b06 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 10 Oct 2016 08:23:41 +0200 Subject: [PATCH 050/532] Remove ncu --- bash/.aliases | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 8eaa33e0..259f5058 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -1,8 +1,6 @@ -# Easier navigation: .., ..., ...., ....., ~ and - +# Easier navigation: .. and ... alias ..="cd .." alias ...="cd ../.." -alias ....="cd ../../.." -alias .....="cd ../../../.." # Detect which `ls` flavor is in use if ls --color > /dev/null 2>&1; then # GNU `ls` @@ -29,7 +27,7 @@ case $(uname) in esac # NPM update folder (also Bower) -alias npmu='npm update && ncu -ua && npm prune; bower update && bower prune' +alias npmu='npm install && npm update && npm prune && bower install && bower update && bower prune && npm outdated' # Visual Studio Code code () { VSCODE_CWD="$PWD" open -n -b "com.microsoft.VSCode" --args $* ;} From 734e7ff31f5f266245044cf4d6d7abe9a4242b34 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 17 Nov 2016 16:45:07 +0100 Subject: [PATCH 051/532] add npm completions --- zsh/.zshrc | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/zsh/.zshrc b/zsh/.zshrc index a5fc8196..0c590f83 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -9,7 +9,7 @@ ZSH_THEME="zhann" # 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) # Add wisely, as too many plugins slow down shell startup. plugins=(git) @@ -22,3 +22,60 @@ unset file; # update oh-my-zsh bi weekly and other useful helpers source $ZSH/oh-my-zsh.sh +###-begin-npm-completion-### +# +# npm command completion script +# +# Installation: npm completion >> ~/.bashrc (or ~/.zshrc) +# Or, maybe: npm completion > /usr/local/etc/bash_completion.d/npm +# + +if type complete &>/dev/null; then + _npm_completion () { + local words cword + if type _get_comp_words_by_ref &>/dev/null; then + _get_comp_words_by_ref -n = -n @ -w words -i cword + else + cword="$COMP_CWORD" + words=("${COMP_WORDS[@]}") + fi + + local si="$IFS" + IFS=$'\n' COMPREPLY=($(COMP_CWORD="$cword" \ + COMP_LINE="$COMP_LINE" \ + COMP_POINT="$COMP_POINT" \ + npm completion -- "${words[@]}" \ + 2>/dev/null)) || return $? + IFS="$si" + } + complete -o default -F _npm_completion npm +elif type compdef &>/dev/null; then + _npm_completion() { + local si=$IFS + compadd -- $(COMP_CWORD=$((CURRENT-1)) \ + COMP_LINE=$BUFFER \ + COMP_POINT=0 \ + npm completion -- "${words[@]}" \ + 2>/dev/null) + IFS=$si + } + compdef _npm_completion npm +elif type compctl &>/dev/null; then + _npm_completion () { + local cword line point words si + read -Ac words + read -cn cword + let cword-=1 + read -l line + read -ln point + si="$IFS" + IFS=$'\n' reply=($(COMP_CWORD="$cword" \ + COMP_LINE="$line" \ + COMP_POINT="$point" \ + npm completion -- "${words[@]}" \ + 2>/dev/null)) || return $? + IFS="$si" + } + compctl -K _npm_completion npm +fi +###-end-npm-completion-### From ef74c79d8d091c224bb745eb906e6ec174723349 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 19 Dec 2016 09:11:45 +0100 Subject: [PATCH 052/532] Add npm outdated -g command --- bash/.aliases | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 259f5058..250a88e1 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -22,8 +22,8 @@ alias bellring="tput bel" # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && (cd ~/dotfiles && git pull)' ;; - 'Darwin') alias pacu='brew update && brew upgrade && brew cleanup && npm update -g && (cd ~/dotfiles && git pull)' ;; + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull)' ;; + 'Darwin') alias pacu='brew update && brew upgrade && brew cleanup && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull)' ;; esac # NPM update folder (also Bower) From 78879bfd41ae73543d4396d2bf9ef489a77fe060 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 31 Dec 2016 12:56:24 +0100 Subject: [PATCH 053/532] Add update scripts --- bash/.aliases | 6 +++--- bash/update-go.sh | 6 ++++++ bash/update-js.sh | 8 ++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100755 bash/update-go.sh create mode 100755 bash/update-js.sh diff --git a/bash/.aliases b/bash/.aliases index 250a88e1..2feac74a 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -22,12 +22,12 @@ alias bellring="tput bel" # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull)' ;; - 'Darwin') alias pacu='brew update && brew upgrade && brew cleanup && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull)' ;; + 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull) && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; + 'Darwin') alias pacu='brew update && brew upgrade && brew cleanup && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull) && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; esac # NPM update folder (also Bower) -alias npmu='npm install && npm update && npm prune && bower install && bower update && bower prune && npm outdated' +alias npmu='npm update && npm prune && bower install && bower update && bower prune && npm outdated' # Visual Studio Code code () { VSCODE_CWD="$PWD" open -n -b "com.microsoft.VSCode" --args $* ;} diff --git a/bash/update-go.sh b/bash/update-go.sh new file mode 100755 index 00000000..3a06aa77 --- /dev/null +++ b/bash/update-go.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +for d in $(binstale | grep "build ID mismatch"); do + ( if [[ $d == *'/'* ]]; then go get -u "$d"; fi ) +done + diff --git a/bash/update-js.sh b/bash/update-js.sh new file mode 100755 index 00000000..9c32531d --- /dev/null +++ b/bash/update-js.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +cd ~/js + +for d in */ ; do + ( cd "$d" && git pull && npm update && npm prune && npm outdated ) +done + From 4af5abc79c93014541dd3f2fb77ea5029981e396 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 11 Jan 2017 15:23:13 +0100 Subject: [PATCH 054/532] Add mas upgrade to pacu for mac --- bash/.aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.aliases b/bash/.aliases index 2feac74a..17ea38aa 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -23,7 +23,7 @@ alias bellring="tput bel" # System Update case $(uname) in 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull) && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; - 'Darwin') alias pacu='brew update && brew upgrade && brew cleanup && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull) && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; + 'Darwin') alias pacu='mas upgrade && brew update && brew upgrade && brew cleanup && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull) && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; esac # NPM update folder (also Bower) From 3487d26b2fc496b6372157870f85ca9ca3815eb7 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 3 Feb 2017 13:04:51 +0100 Subject: [PATCH 055/532] Improve vim setup --- vim/.vimrc | 20 ++------------- vim/.vundlerc | 69 +++++++++++++++++++++++++++++---------------------- 2 files changed, 41 insertions(+), 48 deletions(-) diff --git a/vim/.vimrc b/vim/.vimrc index f792c205..85f34922 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,9 +1,3 @@ -" Disable arrow keys for learning purposes -noremap -noremap -noremap -noremap - " Make Vim more useful set nocompatible " Use the OS clipboard by default (on versions compiled with `+clipboard`) @@ -22,21 +16,15 @@ set gdefault set encoding=utf-8 nobomb " Change mapleader let mapleader="," -" Don’t add empty newlines at the end of files -set binary -set noeol " Don’t create backups when editing files in certain directories set backupskip=/tmp/*,/private/tmp/* -" Respect modeline in files -set modeline -set modelines=4 " Enable per-directory .vimrc files and disable unsafe commands in them set exrc set secure -" Enable line numbers -set number +" Enable relative line numbers +set relativenumber " Enable syntax highlighting syntax on " Make tabs as wide as two spaces @@ -53,10 +41,6 @@ set laststatus=2 set mouse=a " Don’t reset cursor to start of line when moving around. set nostartofline -" Show the cursor position -set ruler -" Don’t show the intro message when starting Vim -set shortmess=atI " Show the current mode set showmode " Show the filename in the window titlebar diff --git a/vim/.vundlerc b/vim/.vundlerc index 5f53c24e..6dc45a6a 100644 --- a/vim/.vundlerc +++ b/vim/.vundlerc @@ -7,51 +7,60 @@ call vundle#begin() " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' -" EasyMotion -Plugin 'lokaltog/vim-easymotion' +" Source tree +Plugin 'scrooloose/nerdtree' +let NERDTreeShowHidden = 1 +map :NERDTreeToggle " Toggle Comments Plugin 'scrooloose/nerdcommenter' -" Syntax Highlighting -Plugin 'scrooloose/syntastic' - -" Pasting in Vim with correct indentation -Plugin 'sickill/vim-pasta' +" Auto close braces +Plugin 'jiangmiao/auto-pairs' -" Match HTML tags for % -Plugin 'tmhedberg/matchit' +" Git integration +Plugin 'tpope/vim-fugitive' -" Mark trailing whitespace +" Syntax Highlighting +Plugin 'vim-syntastic/syntastic' +set statusline+=%#warningmsg# +set statusline+=%{SyntasticStatuslineFlag()} +set statusline+=%* +let g:syntastic_always_populate_loc_list = 1 +let g:syntastic_auto_loc_list = 1 +let g:syntastic_typescript_checkers = ['tslint'] +let g:syntastic_javascript_checkers = ['eslint'] +let g:syntastic_go_checkers = ['gometalinter'] + +" Show Git indicators with line numbers +Plugin 'airblade/vim-gitgutter' + +" Mark trailing whitespaces Plugin 'bronson/vim-trailing-whitespace' -" Emmet -Plugin 'mattn/emmet-vim' - -" Source tree -Plugin 'scrooloose/nerdtree' +" Ctrl P +Plugin 'ctrlpvim/ctrlp.vim' +let g:ctrlp_show_hidden = 1 +map :CtrlP +let g:ctrlp_custom_ignore = { + \ 'dir': '\v[\/](\.git|node_modules|\.sass-cache|bower_components|vendor|build|media|__pycache__)$', + \ 'file': '\v\.(exe|so|dll|pyc)$', + \ 'link': 'some_bad_symbolic_links', + \ } -" Auto completion -Plugin 'valloric/youcompleteme' -let NERDTreeShowHidden=1 +" Autocompletion +Plugin 'Shougo/neocomplete.vim' +let g:neocomplete#enable_at_startup = 1 " Golang Plugin Plugin 'fatih/vim-go' -" Node Plugin -Plugin 'moll/vim-node' - " Typescript Plugin 'leafgarland/typescript-vim' -Plugin 'icholy/typescript-tools' - -" Open Files -Plugin 'kien/ctrlp.vim' - -" Focus on one window -Plugin 'vim-scripts/ZoomWin' - +" Hard mode for getting better +Plugin 'takac/vim-hardtime' +let g:hardtime_default_on = 1 " Wakatime Plugin 'wakatime/vim-wakatime' @@ -69,4 +78,4 @@ filetype plugin indent on " required " :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal " see :h vundle for more details or wiki for FAQ -" Put your non-Plugin stuff after this line \ No newline at end of file +" Put your non-Plugin stuff after this line From 8ffab23b3f4a0e39256178a69f1832dc594e3159 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 7 Feb 2017 21:40:23 +0100 Subject: [PATCH 056/532] Use vimdiff --- git/.gitconfig | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/git/.gitconfig b/git/.gitconfig index 5da0621d..7d1ebcfe 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -12,21 +12,11 @@ [color] ui = true -# Kaleidoscope [diff] - tool = Kaleidoscope -[difftool "Kaleidoscope"] - cmd = ksdiff --partial-changeset --relative-path \"$MERGED\" -- \"$LOCAL\" \"$REMOTE\" + tool = vimdiff +[difftool] + prompt = false [merge] - tool = Kaleidoscope -[mergetool "Kaleidoscope"] - cmd = ksdiff --merge --output \"$MERGED\" --base \"$BASE\" -- \"$LOCAL\" --snapshot \"$REMOTE\" --snapshot - trustExitCode = true -[alias] - ksreview = "!f() { local SHA=${1:-HEAD}; local BRANCH=${2:-master}; if [ $SHA == $BRANCH ]; then SHA=HEAD; fi; git difftool -y -t Kaleidoscope $BRANCH...$SHA; }; f" -[difftool "sourcetree"] - cmd = opendiff \"$LOCAL\" \"$REMOTE\" - path = -[mergetool "sourcetree"] - cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\" - trustExitCode = true + tool = vimdiff +[mergetool] + prompt = false From 18802f4ba731969a0c9386fd97cef9794c172ece Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 7 Feb 2017 21:40:34 +0100 Subject: [PATCH 057/532] Remove firebase --- firebase/.firebaserc | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 firebase/.firebaserc diff --git a/firebase/.firebaserc b/firebase/.firebaserc deleted file mode 100644 index fdc4c943..00000000 --- a/firebase/.firebaserc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "email": "robidog_1@hotmail.com", - "token": "-JMqRnnuBmiRACilPa9u|cf4e3799f1348d9c78bd2042adb201f6" -} From dcdf489dd0e3d38fe471423aa3a202d2c1230e56 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 9 Feb 2017 22:25:48 +0100 Subject: [PATCH 058/532] Use neovim --- vim/.vimrc | 2 ++ vim/.vundlerc | 14 ++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/vim/.vimrc b/vim/.vimrc index 85f34922..d2165e91 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,5 +1,7 @@ " Make Vim more useful set nocompatible +" Set true terminal colors +set termguicolors " Use the OS clipboard by default (on versions compiled with `+clipboard`) set clipboard=unnamed " Enhance command-line completion diff --git a/vim/.vundlerc b/vim/.vundlerc index 6dc45a6a..45585458 100644 --- a/vim/.vundlerc +++ b/vim/.vundlerc @@ -7,6 +7,12 @@ call vundle#begin() " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' +" Git integration +Plugin 'tpope/vim-fugitive' + +" Edit surrounds +Plugin 'tpope/vim-surround' + " Source tree Plugin 'scrooloose/nerdtree' let NERDTreeShowHidden = 1 @@ -18,9 +24,6 @@ Plugin 'scrooloose/nerdcommenter' " Auto close braces Plugin 'jiangmiao/auto-pairs' -" Git integration -Plugin 'tpope/vim-fugitive' - " Syntax Highlighting Plugin 'vim-syntastic/syntastic' set statusline+=%#warningmsg# @@ -35,7 +38,7 @@ let g:syntastic_go_checkers = ['gometalinter'] " Show Git indicators with line numbers Plugin 'airblade/vim-gitgutter' -" Mark trailing whitespaces +" Highlight trailing whitespaces Plugin 'bronson/vim-trailing-whitespace' " Ctrl P @@ -49,8 +52,7 @@ let g:ctrlp_custom_ignore = { \ } " Autocompletion -Plugin 'Shougo/neocomplete.vim' -let g:neocomplete#enable_at_startup = 1 +Plugin 'Valloric/YouCompleteMe' " Golang Plugin Plugin 'fatih/vim-go' From ffce795fba817aca8eacaa92e1c5a35a126d4f0e Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 9 Feb 2017 22:59:50 +0100 Subject: [PATCH 059/532] Remove unnecessary configs --- vim/.vimrc | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/vim/.vimrc b/vim/.vimrc index d2165e91..c59225ec 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -10,25 +10,14 @@ set wildmenu set esckeys " Allow backspace in insert mode set backspace=indent,eol,start -" Optimize for fast terminal connections -set ttyfast " Add the g flag to search/replace by default set gdefault -" Use UTF-8 without BOM -set encoding=utf-8 nobomb " Change mapleader let mapleader="," -" Don’t create backups when editing files in certain directories -set backupskip=/tmp/*,/private/tmp/* - -" Enable per-directory .vimrc files and disable unsafe commands in them -set exrc -set secure " Enable relative line numbers set relativenumber -" Enable syntax highlighting -syntax on +set number " Make tabs as wide as two spaces set tabstop=2 " Highlight searches @@ -37,10 +26,6 @@ set hlsearch set ignorecase " Highlight dynamically as pattern is typed set incsearch -" Always show status line -set laststatus=2 -" Enable mouse in all modes -set mouse=a " Don’t reset cursor to start of line when moving around. set nostartofline " Show the current mode From 99735792000055ca09570689c5911b200060bceb Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 9 Feb 2017 23:29:55 +0100 Subject: [PATCH 060/532] Use vim-plug instead of vundle --- vim/.plugins | 69 ++++++++++++++++++++++++++++++++++++++++++ vim/.vimrc | 2 +- vim/.vundlerc | 83 --------------------------------------------------- 3 files changed, 70 insertions(+), 84 deletions(-) create mode 100644 vim/.plugins delete mode 100644 vim/.vundlerc diff --git a/vim/.plugins b/vim/.plugins new file mode 100644 index 00000000..c14836ce --- /dev/null +++ b/vim/.plugins @@ -0,0 +1,69 @@ +" Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) +call plug#begin('~/.vim/plugged') + +" let Vundle manage Vundle, required +Plug 'gmarik/Vundle.vim' + +" Git integration +Plug 'tpope/vim-fugitive' + +" Edit surrounds +Plug 'tpope/vim-surround' + +" Source tree +Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } +let NERDTreeShowHidden = 1 +map :NERDTreeToggle + +" Toggle Comments +Plug 'scrooloose/nerdcommenter' + +" Auto close braces +Plug 'jiangmiao/auto-pairs' + +" Syntax Highlighting +Plug 'vim-syntastic/syntastic' +set statusline+=%#warningmsg# +set statusline+=%{SyntasticStatuslineFlag()} +set statusline+=%* +let g:syntastic_always_populate_loc_list = 1 +let g:syntastic_auto_loc_list = 1 +let g:syntastic_typescript_checkers = ['tslint'] +let g:syntastic_javascript_checkers = ['eslint'] +let g:syntastic_go_checkers = ['gometalinter'] + +" Show Git indicators with line numbers +Plug 'airblade/vim-gitgutter' + +" Highlight trailing whitespaces +Plug 'bronson/vim-trailing-whitespace' + +" Ctrl P +Plug 'ctrlpvim/ctrlp.vim' +let g:ctrlp_show_hidden = 1 +map :CtrlP +let g:ctrlp_custom_ignore = { + \ 'dir': '\v[\/](\.git|node_modules|\.sass-cache|bower_components|vendor|build|media|__pycache__)$', + \ 'file': '\v\.(exe|so|dll|pyc)$', + \ 'link': 'some_bad_symbolic_links', + \ } + +" Autocompletion +Plug 'Valloric/YouCompleteMe', { 'dir': '~/.vim/plugged/YouCompleteMe', 'do': './install.py --gocode-completer --tern-completer' } + +" Golang Plugin +Plug 'fatih/vim-go', { 'for': 'go' } + +" Typescript +Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } + +" Hard mode for getting better +Plug 'takac/vim-hardtime' +let g:hardtime_default_on = 1 + +" Wakatime +Plug 'wakatime/vim-wakatime' + +" Initialize plugin system +call plug#end() + diff --git a/vim/.vimrc b/vim/.vimrc index c59225ec..9a43248b 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -68,4 +68,4 @@ if has("autocmd") endif " Import Vundle configuration -source ~/.vundlerc +source ~/.plugins diff --git a/vim/.vundlerc b/vim/.vundlerc deleted file mode 100644 index 45585458..00000000 --- a/vim/.vundlerc +++ /dev/null @@ -1,83 +0,0 @@ -filetype off " required - -" set the runtime path to include Vundle and initialize -set rtp+=~/.vim/bundle/Vundle.vim -call vundle#begin() - -" let Vundle manage Vundle, required -Plugin 'gmarik/Vundle.vim' - -" Git integration -Plugin 'tpope/vim-fugitive' - -" Edit surrounds -Plugin 'tpope/vim-surround' - -" Source tree -Plugin 'scrooloose/nerdtree' -let NERDTreeShowHidden = 1 -map :NERDTreeToggle - -" Toggle Comments -Plugin 'scrooloose/nerdcommenter' - -" Auto close braces -Plugin 'jiangmiao/auto-pairs' - -" Syntax Highlighting -Plugin 'vim-syntastic/syntastic' -set statusline+=%#warningmsg# -set statusline+=%{SyntasticStatuslineFlag()} -set statusline+=%* -let g:syntastic_always_populate_loc_list = 1 -let g:syntastic_auto_loc_list = 1 -let g:syntastic_typescript_checkers = ['tslint'] -let g:syntastic_javascript_checkers = ['eslint'] -let g:syntastic_go_checkers = ['gometalinter'] - -" Show Git indicators with line numbers -Plugin 'airblade/vim-gitgutter' - -" Highlight trailing whitespaces -Plugin 'bronson/vim-trailing-whitespace' - -" Ctrl P -Plugin 'ctrlpvim/ctrlp.vim' -let g:ctrlp_show_hidden = 1 -map :CtrlP -let g:ctrlp_custom_ignore = { - \ 'dir': '\v[\/](\.git|node_modules|\.sass-cache|bower_components|vendor|build|media|__pycache__)$', - \ 'file': '\v\.(exe|so|dll|pyc)$', - \ 'link': 'some_bad_symbolic_links', - \ } - -" Autocompletion -Plugin 'Valloric/YouCompleteMe' - -" Golang Plugin -Plugin 'fatih/vim-go' - -" Typescript -Plugin 'leafgarland/typescript-vim' - -" Hard mode for getting better -Plugin 'takac/vim-hardtime' -let g:hardtime_default_on = 1 - -" Wakatime -Plugin 'wakatime/vim-wakatime' - -" All of your Plugins must be added before the following line -call vundle#end() " required -filetype plugin indent on " required -" To ignore plugin indent changes, instead use: -" filetype plugin on - -" Brief help -" :PluginList - lists configured plugins -" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate -" :PluginSearch foo - searches for foo; append `!` to refresh local cache -" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal - -" see :h vundle for more details or wiki for FAQ -" Put your non-Plugin stuff after this line From 33c5060acd95be9349d68acbd47012fa1d41747b Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 9 Feb 2017 23:34:45 +0100 Subject: [PATCH 061/532] Add usage information to readme --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 93081913..fb124de0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,13 @@ # Dotfiles + My personal dotfiles -# Usage -I use [Stow](https://www.gnu.org/software/stow/) to keep my files in sync +## Usage + +I use [Stow](https://www.gnu.org/software/stow/) to keep my files in sync. + +1. Download and install stow +1. Clone this repo to your home folder +1. Run `cd ~/dotfiles` +1. Run `stow vim` +1. Repeat for all needed folders From e1c0cd3683859fb6724b36cc76fe60fb1cebcc35 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 9 Feb 2017 23:41:02 +0100 Subject: [PATCH 062/532] Use neomake instead of syntastic --- vim/.plugins | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/vim/.plugins b/vim/.plugins index c14836ce..d0191079 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -22,15 +22,9 @@ Plug 'scrooloose/nerdcommenter' Plug 'jiangmiao/auto-pairs' " Syntax Highlighting -Plug 'vim-syntastic/syntastic' -set statusline+=%#warningmsg# -set statusline+=%{SyntasticStatuslineFlag()} -set statusline+=%* -let g:syntastic_always_populate_loc_list = 1 -let g:syntastic_auto_loc_list = 1 -let g:syntastic_typescript_checkers = ['tslint'] -let g:syntastic_javascript_checkers = ['eslint'] -let g:syntastic_go_checkers = ['gometalinter'] +Plug 'neomake/neomake' +autocmd! BufWritePost,BufEnter * Neomake + " Show Git indicators with line numbers Plug 'airblade/vim-gitgutter' From 21c177962a5da85b4dfb163ee7040a21c66bd8b8 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 9 Feb 2017 23:45:01 +0100 Subject: [PATCH 063/532] Always load nerdtree --- vim/.plugins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.plugins b/vim/.plugins index d0191079..db12ae5f 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -11,7 +11,7 @@ Plug 'tpope/vim-fugitive' Plug 'tpope/vim-surround' " Source tree -Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } +Plug 'scrooloose/nerdtree' let NERDTreeShowHidden = 1 map :NERDTreeToggle From c4c28ee34cb97b1c61df92bcc262b4e575ab1807 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 9 Feb 2017 23:46:34 +0100 Subject: [PATCH 064/532] Remove VSCode shortcut --- bash/.aliases | 2 -- 1 file changed, 2 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 17ea38aa..57cecc86 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -29,5 +29,3 @@ esac # NPM update folder (also Bower) alias npmu='npm update && npm prune && bower install && bower update && bower prune && npm outdated' -# Visual Studio Code -code () { VSCODE_CWD="$PWD" open -n -b "com.microsoft.VSCode" --args $* ;} From 0868fb205b39661060d4f16bdca5cdba5371b4f7 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 10 Feb 2017 00:22:46 +0100 Subject: [PATCH 065/532] Use deocomplete instead of ycm --- vim/.plugins | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vim/.plugins b/vim/.plugins index db12ae5f..987dfb35 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -43,7 +43,11 @@ let g:ctrlp_custom_ignore = { \ } " Autocompletion -Plug 'Valloric/YouCompleteMe', { 'dir': '~/.vim/plugged/YouCompleteMe', 'do': './install.py --gocode-completer --tern-completer' } +Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } +Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern' } +Plug 'mhartington/deoplete-typescript' +Plug 'zchee/deoplete-go', { 'do': 'make'} +let g:deoplete#enable_at_startup = 1 " Golang Plugin Plug 'fatih/vim-go', { 'for': 'go' } From 332192e9126773cee11396b91c0ba73a4e6d971b Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 11 Feb 2017 15:41:09 +0100 Subject: [PATCH 066/532] Use correct indentation --- vim/.vimrc | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/vim/.vimrc b/vim/.vimrc index 9a43248b..8abfda6b 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -18,8 +18,11 @@ let mapleader="," " Enable relative line numbers set relativenumber set number -" Make tabs as wide as two spaces +" Use 2 spaces instead of tabs +set expandtab set tabstop=2 +set softtabstop=2 +set shiftwidth=2 " Highlight searches set hlsearch " Ignore case of searches @@ -45,26 +48,20 @@ nnoremap nnoremap nnoremap -" Strip trailing whitespace (,ss) -function! StripWhitespace() - let save_cursor = getpos(".") - let old_query = getreg('/') - :%s/\s\+$//e - call setpos('.', save_cursor) - call setreg('/', old_query) -endfunction -noremap ss :call StripWhitespace() -" Save a file as root (,W) -noremap W :w !sudo tee % > /dev/null - " Automatic commands if has("autocmd") - " Enable file type detection - filetype on - " Treat .json files as .js - autocmd BufNewFile,BufRead *.json setfiletype json syntax=javascript - " Treat .md files as Markdown - autocmd BufNewFile,BufRead *.md setlocal filetype=markdown + " Enable file type detection + filetype on + " Treat .json files as .js + autocmd BufNewFile,BufRead *.json setfiletype json syntax=javascript + " Treat .md files as Markdown + autocmd BufNewFile,BufRead *.md setlocal filetype=markdown + " Use 4 spaces for python files + autocmd FileType python setlocal ts=4 sts=4 sw=4 + " Use tabs for make files + autocmd FileType make setlocal ts=4 sts=4 sw=4 noexpandtab + " Strip trailing whitespaces on save + autocmd BufWritePre * %s/\s\+$//e endif " Import Vundle configuration From 1d99342c7858bbc84d0bc9aef229f578ad23a313 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 12 Feb 2017 17:04:57 +0100 Subject: [PATCH 067/532] Add soft wrapping --- vim/.vimrc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/vim/.vimrc b/vim/.vimrc index 8abfda6b..495fa3b0 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -43,10 +43,8 @@ set scrolloff=3 " More natural splitting of windows and easier split navigation set splitbelow set splitright -nnoremap -nnoremap -nnoremap -nnoremap + +set wrap linebreak " Automatic commands if has("autocmd") From 57e0dc9eb3c830224cacfffa553eab63d2ec86aa Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 12 Feb 2017 17:57:44 +0100 Subject: [PATCH 068/532] Use spaces with nerdcommenter --- vim/.plugins | 1 + 1 file changed, 1 insertion(+) diff --git a/vim/.plugins b/vim/.plugins index 987dfb35..a46ae368 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -17,6 +17,7 @@ map :NERDTreeToggle " Toggle Comments Plug 'scrooloose/nerdcommenter' +let g:NERDSpaceDelims = 1 " Auto close braces Plug 'jiangmiao/auto-pairs' From 879f46bba17d9256f234a6f0089eb8576fce1ba5 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 12 Feb 2017 21:48:18 +0100 Subject: [PATCH 069/532] Remove vundle --- vim/.plugins | 4 ---- vim/.vimrc | 4 +--- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/vim/.plugins b/vim/.plugins index a46ae368..4ca1d857 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -1,9 +1,6 @@ " Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) call plug#begin('~/.vim/plugged') -" let Vundle manage Vundle, required -Plug 'gmarik/Vundle.vim' - " Git integration Plug 'tpope/vim-fugitive' @@ -26,7 +23,6 @@ Plug 'jiangmiao/auto-pairs' Plug 'neomake/neomake' autocmd! BufWritePost,BufEnter * Neomake - " Show Git indicators with line numbers Plug 'airblade/vim-gitgutter' diff --git a/vim/.vimrc b/vim/.vimrc index 495fa3b0..4c45fdf3 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -14,7 +14,6 @@ set backspace=indent,eol,start set gdefault " Change mapleader let mapleader="," - " Enable relative line numbers set relativenumber set number @@ -39,11 +38,10 @@ set title set showcmd " Start scrolling three lines before the horizontal window border set scrolloff=3 - " More natural splitting of windows and easier split navigation set splitbelow set splitright - +" Soft wrapping of lines set wrap linebreak " Automatic commands From 13c6a0ed8a238819919504beb84e51d3bf010a28 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 13 Feb 2017 12:38:22 +0100 Subject: [PATCH 070/532] Remove hardtime --- vim/.plugins | 4 ---- vim/.vimrc | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/vim/.plugins b/vim/.plugins index 4ca1d857..4ffb0ece 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -52,10 +52,6 @@ Plug 'fatih/vim-go', { 'for': 'go' } " Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } -" Hard mode for getting better -Plug 'takac/vim-hardtime' -let g:hardtime_default_on = 1 - " Wakatime Plug 'wakatime/vim-wakatime' diff --git a/vim/.vimrc b/vim/.vimrc index 4c45fdf3..5638a7d3 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -43,6 +43,8 @@ set splitbelow set splitright " Soft wrapping of lines set wrap linebreak +" Set spell check language to en_us +set spelllang=en_us " Automatic commands if has("autocmd") From 5e62ecd76e782154655f208647b62867f5efb741 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 13 Feb 2017 22:56:09 +0100 Subject: [PATCH 071/532] Add color scheme --- vim/.plugins | 2 +- vim/.vimrc | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/vim/.plugins b/vim/.plugins index 4ffb0ece..b4ace644 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -42,7 +42,7 @@ let g:ctrlp_custom_ignore = { " Autocompletion Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern' } -Plug 'mhartington/deoplete-typescript' +Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript' } Plug 'zchee/deoplete-go', { 'do': 'make'} let g:deoplete#enable_at_startup = 1 diff --git a/vim/.vimrc b/vim/.vimrc index 5638a7d3..db13adf7 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -2,6 +2,7 @@ set nocompatible " Set true terminal colors set termguicolors +colorscheme elflord " Use the OS clipboard by default (on versions compiled with `+clipboard`) set clipboard=unnamed " Enhance command-line completion From 87897b05e0941f1c6a42702d789f27fd03a513a4 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 13 Feb 2017 23:43:06 +0100 Subject: [PATCH 072/532] Remove highlighting of trailing whitespaces --- vim/.plugins | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/vim/.plugins b/vim/.plugins index b4ace644..b98eecf5 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -1,5 +1,5 @@ " Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) -call plug#begin('~/.vim/plugged') +call plug#begin('~/.local/share/nvim/plugged') " Git integration Plug 'tpope/vim-fugitive' @@ -21,14 +21,13 @@ Plug 'jiangmiao/auto-pairs' " Syntax Highlighting Plug 'neomake/neomake' -autocmd! BufWritePost,BufEnter * Neomake +if has("autocmd") + autocmd! BufWritePost,BufEnter * Neomake +endif " Show Git indicators with line numbers Plug 'airblade/vim-gitgutter' -" Highlight trailing whitespaces -Plug 'bronson/vim-trailing-whitespace' - " Ctrl P Plug 'ctrlpvim/ctrlp.vim' let g:ctrlp_show_hidden = 1 @@ -46,7 +45,7 @@ Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript' } Plug 'zchee/deoplete-go', { 'do': 'make'} let g:deoplete#enable_at_startup = 1 -" Golang Plugin +" Golang Plug 'fatih/vim-go', { 'for': 'go' } " Typescript From a7a3fdc036d948ae3caa29cd9b1b139ff5c31f20 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 15 Feb 2017 16:05:46 +0100 Subject: [PATCH 073/532] Add airline bar --- vim/.plugins | 3 +++ vim/.vimrc | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/vim/.plugins b/vim/.plugins index b98eecf5..7e7cc361 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -1,6 +1,9 @@ " Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) call plug#begin('~/.local/share/nvim/plugged') +" Status bar +Plug 'vim-airline/vim-airline' + " Git integration Plug 'tpope/vim-fugitive' diff --git a/vim/.vimrc b/vim/.vimrc index db13adf7..4fb47704 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -29,13 +29,13 @@ set hlsearch set ignorecase " Highlight dynamically as pattern is typed set incsearch -" Don’t reset cursor to start of line when moving around. +" Do not reset cursor to start of line when moving around set nostartofline " Show the current mode set showmode -" Show the filename in the window titlebar +" Show the filename in the window title bar set title -" Show the (partial) command as it’s being typed +" Show the (partial) command as it is being typed set showcmd " Start scrolling three lines before the horizontal window border set scrolloff=3 @@ -61,7 +61,9 @@ if has("autocmd") autocmd FileType make setlocal ts=4 sts=4 sw=4 noexpandtab " Strip trailing whitespaces on save autocmd BufWritePre * %s/\s\+$//e + " Enable spell checking for Markdown files + autocmd BufRead,BufNewFile *.md setlocal spell endif -" Import Vundle configuration +" Import plugin configuration source ~/.plugins From 5ce71b763c5fc1b72996037ed6d93a87367626d5 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 15 Feb 2017 16:46:26 +0100 Subject: [PATCH 074/532] Use powerline icon font --- vim/.plugins | 1 + vim/.vimrc | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/vim/.plugins b/vim/.plugins index 7e7cc361..a2b3d76f 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -3,6 +3,7 @@ call plug#begin('~/.local/share/nvim/plugged') " Status bar Plug 'vim-airline/vim-airline' +let g:airline_powerline_fonts = 1 " Git integration Plug 'tpope/vim-fugitive' diff --git a/vim/.vimrc b/vim/.vimrc index 4fb47704..aa44aeea 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -61,8 +61,8 @@ if has("autocmd") autocmd FileType make setlocal ts=4 sts=4 sw=4 noexpandtab " Strip trailing whitespaces on save autocmd BufWritePre * %s/\s\+$//e - " Enable spell checking for Markdown files - autocmd BufRead,BufNewFile *.md setlocal spell + " Enable spell checking for certain files + autocmd BufRead,BufNewFile *.md,*.tex setlocal spell endif " Import plugin configuration From 68ddb2ac006f02401b8651645f8a2ff6562153cf Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 15 Feb 2017 17:03:17 +0100 Subject: [PATCH 075/532] Use Goimports --- vim/.plugins | 1 + 1 file changed, 1 insertion(+) diff --git a/vim/.plugins b/vim/.plugins index a2b3d76f..05969740 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -51,6 +51,7 @@ let g:deoplete#enable_at_startup = 1 " Golang Plug 'fatih/vim-go', { 'for': 'go' } +let g:go_fmt_command = 'goimports' " Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } From 7d09eba994febf29e2e1b4f3cad5cd2fc0fd5f9d Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 16 Feb 2017 23:20:05 +0100 Subject: [PATCH 076/532] Hide unused sections of airline --- vim/.plugins | 1 + 1 file changed, 1 insertion(+) diff --git a/vim/.plugins b/vim/.plugins index 05969740..f835eee6 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -4,6 +4,7 @@ call plug#begin('~/.local/share/nvim/plugged') " Status bar Plug 'vim-airline/vim-airline' let g:airline_powerline_fonts = 1 +let g:airline_skip_empty_sections = 1 " Git integration Plug 'tpope/vim-fugitive' From 62437c6a868aac016c29125c7307f21a532461c4 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 11:13:34 +0100 Subject: [PATCH 077/532] Clean up unused stuff --- bash/.aliases | 16 ++--- bash/.bash_profile | 7 +- bash/.bash_prompt | 120 --------------------------------- bash/.exports | 13 ---- bash/.functions | 45 ------------- bash/.inputrc | 5 +- bash/.path | 7 +- docker/.dockercfg | 6 -- git/.gitconfig | 8 +-- git/.gitignore_global | 1 + vim/{.plugins => .vim-plugins} | 0 vim/.vimrc | 2 +- wakatime/.wakatime.cfg | 7 -- wget/.wgetrc | 36 ---------- zsh/.zshrc | 57 ---------------- 15 files changed, 14 insertions(+), 316 deletions(-) delete mode 100644 bash/.bash_prompt delete mode 100644 docker/.dockercfg rename vim/{.plugins => .vim-plugins} (100%) delete mode 100644 wakatime/.wakatime.cfg delete mode 100644 wget/.wgetrc diff --git a/bash/.aliases b/bash/.aliases index 57cecc86..a0e14bb6 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -1,4 +1,4 @@ -# Easier navigation: .. and ... +# Easier navigation alias ..="cd .." alias ...="cd ../.." @@ -13,19 +13,15 @@ fi alias ls="command ls ${colorflag}" export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.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:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:' -# Enable aliases to be sudo’ed +# Enable aliases to be sudo-ed alias sudo='sudo ' -# Ring the terminal bell, and put a badge on Terminal.app’s Dock icon -# (useful when executing time-consuming commands) -alias bellring="tput bel" - # System Update case $(uname) in - 'Linux') alias pacu='sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull) && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; - 'Darwin') alias pacu='mas upgrade && brew update && brew upgrade && brew cleanup && npm update -g && npm outdated -g && (cd ~/dotfiles && git pull) && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; + 'Linux') alias pacu='(cd ~/dotfiles && git pull) && sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && npm outdated -g && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; + 'Darwin') alias pacu='(cd ~/dotfiles && git pull) && mas upgrade && brew update && brew upgrade && brew cleanup && npm update -g && npm outdated -g && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; esac -# NPM update folder (also Bower) -alias npmu='npm update && npm prune && bower install && bower update && bower prune && npm outdated' +# npm update +alias npmu='npm install && npm update && npm prune && npm outdated' diff --git a/bash/.bash_profile b/bash/.bash_profile index d25a81a9..54e53b9b 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -1,7 +1,7 @@ # Load the shell dotfiles, and then some: # * ~/.path can be used to extend `$PATH`. # * ~/.extra can be used for other settings you don’t want to commit. -for file in ~/.{path,bash_prompt,exports,aliases,functions,extra}; do +for file in ~/.{path,exports,aliases,functions,extra}; do [ -r "$file" ] && [ -f "$file" ] && source "$file"; done; unset file; @@ -30,8 +30,3 @@ fi; # Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards [ -e "$HOME/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | tr ' ' '\n')" scp sftp ssh; - -# ARCH: set up alsa -/usr/bin/amixer sset Master Mono 90% unmute &> /dev/null -/usr/bin/amixer sset Master 90% unmute &> /dev/null -/usr/bin/amixer sset PCM 90% unmute &> /dev/null diff --git a/bash/.bash_prompt b/bash/.bash_prompt deleted file mode 100644 index c41ef960..00000000 --- a/bash/.bash_prompt +++ /dev/null @@ -1,120 +0,0 @@ -# Shell prompt based on the Solarized Dark theme. -# Screenshot: http://i.imgur.com/EkEtphC.png -# Heavily inspired by @necolas’s prompt: https://github.com/necolas/dotfiles -# iTerm → Profiles → Text → use 13pt Monaco with 1.1 vertical spacing. - -if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then - export TERM='gnome-256color'; -elif infocmp xterm-256color >/dev/null 2>&1; then - export TERM='xterm-256color'; -fi; - -prompt_git() { - local s=''; - local branchName=''; - - # Check if the current directory is in a Git repository. - if [ $(git rev-parse --is-inside-work-tree &>/dev/null; echo "${?}") == '0' ]; then - - # check if the current directory is in .git before running git checks - if [ "$(git rev-parse --is-inside-git-dir 2> /dev/null)" == 'false' ]; then - - # Ensure the index is up to date. - git update-index --really-refresh -q &>/dev/null; - - # Check for uncommitted changes in the index. - if ! $(git diff --quiet --ignore-submodules --cached); then - s+='+'; - fi; - - # Check for unstaged changes. - if ! $(git diff-files --quiet --ignore-submodules --); then - s+='!'; - fi; - - # Check for untracked files. - if [ -n "$(git ls-files --others --exclude-standard)" ]; then - s+='?'; - fi; - - # Check for stashed files. - if $(git rev-parse --verify refs/stash &>/dev/null); then - s+='$'; - fi; - - fi; - - # Get the short symbolic ref. - # If HEAD isn’t a symbolic ref, get the short SHA for the latest commit - # Otherwise, just give up. - branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \ - git rev-parse --short HEAD 2> /dev/null || \ - echo '(unknown)')"; - - [ -n "${s}" ] && s=" [${s}]"; - - echo -e "${1}${branchName}${blue}${s}"; - else - return; - fi; -} - -if tput setaf 1 &> /dev/null; then - tput sgr0; # reset colors - bold=$(tput bold); - reset=$(tput sgr0); - # Solarized colors, taken from http://git.io/solarized-colors. - black=$(tput setaf 0); - blue=$(tput setaf 33); - cyan=$(tput setaf 37); - green=$(tput setaf 64); - orange=$(tput setaf 166); - purple=$(tput setaf 125); - red=$(tput setaf 124); - violet=$(tput setaf 61); - white=$(tput setaf 15); - yellow=$(tput setaf 136); -else - bold=''; - reset="\e[0m"; - black="\e[1;30m"; - blue="\e[1;34m"; - cyan="\e[1;36m"; - green="\e[1;32m"; - orange="\e[1;33m"; - purple="\e[1;35m"; - red="\e[1;31m"; - violet="\e[1;35m"; - white="\e[1;37m"; - yellow="\e[1;33m"; -fi; - -# Highlight the user name when logged in as root. -if [[ "${USER}" == "root" ]]; then - userStyle="${red}"; -else - userStyle="${orange}"; -fi; - -# Highlight the hostname when connected via SSH. -if [[ "${SSH_TTY}" ]]; then - hostStyle="${bold}${red}"; -else - hostStyle="${yellow}"; -fi; - -# Set the terminal title to the current working directory. -PS1="\[\033]0;\w\007\]"; -PS1+="\[${bold}\]\n"; # newline -PS1+="\[${userStyle}\]\u"; # username -PS1+="\[${white}\] at "; -PS1+="\[${hostStyle}\]\h"; # host -PS1+="\[${white}\] in "; -PS1+="\[${green}\]\w"; # working directory -PS1+="\$(prompt_git \"${white} on ${violet}\")"; # Git repository details -PS1+="\n"; -PS1+="\[${white}\]\$ \[${reset}\]"; # `$` (and reset color) -export PS1; - -PS2="\[${yellow}\]→ \[${reset}\]"; -export PS2; \ No newline at end of file diff --git a/bash/.exports b/bash/.exports index 1bd0a851..2de97677 100644 --- a/bash/.exports +++ b/bash/.exports @@ -1,21 +1,8 @@ # Make vim the default editor. export EDITOR='vim'; -# Enable persistent REPL history for `node`. -NODE_REPL_HISTORY_FILE=~/.node_history; - # Omit duplicates and commands that begin with a space from history. export HISTCONTROL='ignoreboth'; -# Prefer US English and use UTF-8. -export LANG='en_US.UTF-8'; -export LC_ALL='en_US.UTF-8'; - -# Highlight section titles in manual pages. -export LESS_TERMCAP_md="${yellow}"; - -# Don’t clear the screen after quitting a manual page. -export MANPAGER='less -X'; - # Always enable colored `grep` output. export GREP_OPTIONS='--color=auto'; diff --git a/bash/.functions b/bash/.functions index b8cf0b87..7c71c3d9 100644 --- a/bash/.functions +++ b/bash/.functions @@ -2,48 +2,3 @@ function mkcd() { mkdir -p "$@" && cd "$_"; } - -# Change working directory to the top-most Finder window location -function cdf() { # short for `cdfinder` - cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')"; -} - -# Determine size of a file or total size of a directory -function fsize() { - if du -b /dev/null > /dev/null 2>&1; then - local arg=-sbh; - else - local arg=-sh; - fi - if [[ -n "$@" ]]; then - du $arg -- "$@"; - else - du $arg .[^.]* *; - fi; -} - -# Use Git’s colored diff when available -hash git &>/dev/null; -if [ $? -eq 0 ]; then - function diff() { - git diff --no-index --color-words "$@"; - } -fi; - -# `s` with no arguments opens the current directory in Sublime Text, otherwise -# opens the given location -function s() { - if [ $# -eq 0 ]; then - subl .; - else - subl "$@"; - fi; -} - -# `tre` is a shorthand for `tree` with hidden files and color enabled, ignoring -# the `.git` directory, listing directories first. The output gets piped into -# `less` with options to preserve color and line numbers, unless the output is -# small enough for one screen. -function tree() { - tree -aC -I '.git|node_modules|bower_components' --dirsfirst "$@" | less -FRNX; -} \ No newline at end of file diff --git a/bash/.inputrc b/bash/.inputrc index 9b61124f..9a614708 100644 --- a/bash/.inputrc +++ b/bash/.inputrc @@ -12,9 +12,6 @@ set mark-symlinked-directories on "\e[B": history-search-forward "\e[A": history-search-backward -# Do not autocomplete hidden files unless the pattern explicitly begins with a dot -set match-hidden-files off - # Show all autocomplete results at once set page-completions off @@ -34,4 +31,4 @@ set skip-completed-text on # Allow UTF-8 input and output, instead of showing stuff like $'\0123\0456' set input-meta on set output-meta on -set convert-meta off \ No newline at end of file +set convert-meta off diff --git a/bash/.path b/bash/.path index 1a14a363..02af8332 100644 --- a/bash/.path +++ b/bash/.path @@ -1,14 +1,13 @@ -GOPATH="$HOME/go" - PATH="/usr/local/bin" PATH="$PATH:/usr/bin" PATH="$PATH:/bin" PATH="$PATH:/usr/local/sbin" PATH="$PATH:/usr/sbin" PATH="$PATH:/sbin" - PATH="$PATH:$HOME/bin" + +GOPATH="$HOME/go" PATH="$PATH:$GOPATH/bin" export GOPATH -export PATH \ No newline at end of file +export PATH diff --git a/docker/.dockercfg b/docker/.dockercfg deleted file mode 100644 index aadaf701..00000000 --- a/docker/.dockercfg +++ /dev/null @@ -1,6 +0,0 @@ -{ - "https://index.docker.io/v1/": { - "auth": "bWFzdGVydGlubmVyOlkyZ1BpTXdnUlZhdkQyb3NCTVElWVRoO3J2", - "email": "robidog_1@hotmail.com" - } -} \ No newline at end of file diff --git a/git/.gitconfig b/git/.gitconfig index 7d1ebcfe..413f7053 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -1,14 +1,8 @@ [user] email = tobias.fuhrimann@swisscom.com name = Tobias Fuhrimann -[push] - default = matching [core] - excludesfile = /Users/taafuto1/.gitignore_global -[filter "media"] - required = true - clean = git media clean %f - smudge = git media smudge %f + excludesfile = ~/.gitignore_global [color] ui = true diff --git a/git/.gitignore_global b/git/.gitignore_global index 18ff1d0c..10f3bb97 100644 --- a/git/.gitignore_global +++ b/git/.gitignore_global @@ -1,2 +1,3 @@ .DS_Store npm-debug.log +*.swp diff --git a/vim/.plugins b/vim/.vim-plugins similarity index 100% rename from vim/.plugins rename to vim/.vim-plugins diff --git a/vim/.vimrc b/vim/.vimrc index aa44aeea..ebbd7b71 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -66,4 +66,4 @@ if has("autocmd") endif " Import plugin configuration -source ~/.plugins +source ~/.vim-plugins diff --git a/wakatime/.wakatime.cfg b/wakatime/.wakatime.cfg deleted file mode 100644 index 4fb3095d..00000000 --- a/wakatime/.wakatime.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[settings] -debug = false -api_key = f7a2b45c-40df-4f80-baca-9dbcd314ca19 -hidefilenames = false -ignore = - ^COMMIT_EDITMSG$ - ^TAG_EDITMSG$ diff --git a/wget/.wgetrc b/wget/.wgetrc deleted file mode 100644 index 33b3bb62..00000000 --- a/wget/.wgetrc +++ /dev/null @@ -1,36 +0,0 @@ -# Use the server-provided last modification date, if available -timestamping = on - -# Do not go up in the directory structure when downloading recursively -no_parent = on - -# Wait 60 seconds before timing out. This applies to all timeouts: DNS, connect and read. (The default read timeout is 15 minutes!) -timeout = 60 - -# Retry a few times when a download fails, but don’t overdo it. (The default is 20!) -tries = 3 - -# Retry even when the connection was refused -retry_connrefused = on - -# Use the last component of a redirection URL for the local file name -trust_server_names = on - -# Follow FTP links from HTML documents by default -follow_ftp = on - -# Add a `.html` extension to `text/html` or `application/xhtml+xml` files that lack one, or a `.css` extension to `text/css` files that lack one -adjust_extension = on - -# Use UTF-8 as the default system encoding -# Disabled as it makes `wget` builds that don’t support this feature unusable. -#local_encoding = UTF-8 - -# Ignore `robots.txt` and `` -robots = off - -# Print the HTTP and FTP server responses -server_response = on - -# Disguise as IE 9 on Windows 7 -user_agent = Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) \ No newline at end of file diff --git a/zsh/.zshrc b/zsh/.zshrc index 0c590f83..d9360479 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -22,60 +22,3 @@ unset file; # update oh-my-zsh bi weekly and other useful helpers source $ZSH/oh-my-zsh.sh -###-begin-npm-completion-### -# -# npm command completion script -# -# Installation: npm completion >> ~/.bashrc (or ~/.zshrc) -# Or, maybe: npm completion > /usr/local/etc/bash_completion.d/npm -# - -if type complete &>/dev/null; then - _npm_completion () { - local words cword - if type _get_comp_words_by_ref &>/dev/null; then - _get_comp_words_by_ref -n = -n @ -w words -i cword - else - cword="$COMP_CWORD" - words=("${COMP_WORDS[@]}") - fi - - local si="$IFS" - IFS=$'\n' COMPREPLY=($(COMP_CWORD="$cword" \ - COMP_LINE="$COMP_LINE" \ - COMP_POINT="$COMP_POINT" \ - npm completion -- "${words[@]}" \ - 2>/dev/null)) || return $? - IFS="$si" - } - complete -o default -F _npm_completion npm -elif type compdef &>/dev/null; then - _npm_completion() { - local si=$IFS - compadd -- $(COMP_CWORD=$((CURRENT-1)) \ - COMP_LINE=$BUFFER \ - COMP_POINT=0 \ - npm completion -- "${words[@]}" \ - 2>/dev/null) - IFS=$si - } - compdef _npm_completion npm -elif type compctl &>/dev/null; then - _npm_completion () { - local cword line point words si - read -Ac words - read -cn cword - let cword-=1 - read -l line - read -ln point - si="$IFS" - IFS=$'\n' reply=($(COMP_CWORD="$cword" \ - COMP_LINE="$line" \ - COMP_POINT="$point" \ - npm completion -- "${words[@]}" \ - 2>/dev/null)) || return $? - IFS="$si" - } - compctl -K _npm_completion npm -fi -###-end-npm-completion-### From f6db128ca8d230ec382153a2d9275a2e9d7f7b8c Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 11:18:04 +0100 Subject: [PATCH 078/532] Use English language --- bash/.exports | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bash/.exports b/bash/.exports index 2de97677..c336e5bc 100644 --- a/bash/.exports +++ b/bash/.exports @@ -1,3 +1,7 @@ +# Prefer US English and use UTF-8. +export LANG='en_US.UTF-8'; +export LC_ALL='en_US.UTF-8'; + # Make vim the default editor. export EDITOR='vim'; From fcb9050ce52740dd19172ce8ef79c79deef47748 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 13:07:40 +0100 Subject: [PATCH 079/532] Add tmux --- bash/.functions | 15 +++++++++++++++ tmux/tmux.conf | 9 +++++++++ vim/.vim-plugins | 1 + vim/.vimrc | 2 -- 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 tmux/tmux.conf diff --git a/bash/.functions b/bash/.functions index 7c71c3d9..d3046a04 100644 --- a/bash/.functions +++ b/bash/.functions @@ -2,3 +2,18 @@ function mkcd() { mkdir -p "$@" && cd "$_"; } + +# Open tmux and vim in an IDE like layout +function ide() { + if [ ! -z "$1" ]; then + cd "$1" + fi + + tmux new-session -d -s ide 'vim +NERDTree' + + tmux split-window -v -p 10 + tmux split-window -h + tmux select-pane -t 0 + + tmux attach-session -d -t ide +} diff --git a/tmux/tmux.conf b/tmux/tmux.conf new file mode 100644 index 00000000..cc4f8377 --- /dev/null +++ b/tmux/tmux.conf @@ -0,0 +1,9 @@ +# Improve colors +set -g default-terminal 'screen-256color' + +# Switch panes like vim +setw -g mode-keys vi +bind h select-pane -L +bind j select-pane -D +bind k select-pane -U +bind l select-pane -R diff --git a/vim/.vim-plugins b/vim/.vim-plugins index f835eee6..2db80b2b 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -5,6 +5,7 @@ call plug#begin('~/.local/share/nvim/plugged') Plug 'vim-airline/vim-airline' let g:airline_powerline_fonts = 1 let g:airline_skip_empty_sections = 1 +set noshowmode " Git integration Plug 'tpope/vim-fugitive' diff --git a/vim/.vimrc b/vim/.vimrc index ebbd7b71..3be10489 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -31,8 +31,6 @@ set ignorecase set incsearch " Do not reset cursor to start of line when moving around set nostartofline -" Show the current mode -set showmode " Show the filename in the window title bar set title " Show the (partial) command as it is being typed From 835d40aef46c28f6ea50e7ad690d06ee3e43373d Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 14:26:39 +0100 Subject: [PATCH 080/532] Use FZF instead of Ctrl P --- bash/.aliases | 24 ++++++++++-------------- bash/.bash_profile | 12 ++++++++++++ tmux/{tmux.conf => .tmux.conf} | 4 ++++ vim/.vim-plugins | 13 ++++--------- 4 files changed, 30 insertions(+), 23 deletions(-) rename tmux/{tmux.conf => .tmux.conf} (69%) diff --git a/bash/.aliases b/bash/.aliases index a0e14bb6..e6d8972a 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -1,21 +1,10 @@ +# Enable aliases to be sudo-ed +alias sudo='sudo ' + # Easier navigation alias ..="cd .." alias ...="cd ../.." -# Detect which `ls` flavor is in use -if ls --color > /dev/null 2>&1; then # GNU `ls` - colorflag="--color" -else # OS X `ls` - colorflag="-G" -fi - -# Always use color output for `ls` -alias ls="command ls ${colorflag}" -export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.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:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:' - -# Enable aliases to be sudo-ed -alias sudo='sudo ' - # System Update case $(uname) in 'Linux') alias pacu='(cd ~/dotfiles && git pull) && sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && npm outdated -g && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; @@ -25,3 +14,10 @@ esac # npm update alias npmu='npm install && npm update && npm prune && npm outdated' +# FZF +fd() { + local dir + dir=$(find ${1:-.} -path '*/\.*' -prune \ + -o -type d -print 2> /dev/null | fzf +m) && + cd "$dir" +} diff --git a/bash/.bash_profile b/bash/.bash_profile index 54e53b9b..d635bce7 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -30,3 +30,15 @@ fi; # Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards [ -e "$HOME/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | tr ' ' '\n')" scp sftp ssh; + +# Detect which `ls` flavor is in use +if ls --color > /dev/null 2>&1; then # GNU `ls` + colorflag="--color" +else # OS X `ls` + colorflag="-G" +fi + +# Always use color output for `ls` +alias ls="command ls ${colorflag}" +export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.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:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:' + diff --git a/tmux/tmux.conf b/tmux/.tmux.conf similarity index 69% rename from tmux/tmux.conf rename to tmux/.tmux.conf index cc4f8377..3393e543 100644 --- a/tmux/tmux.conf +++ b/tmux/.tmux.conf @@ -1,6 +1,10 @@ # Improve colors set -g default-terminal 'screen-256color' +# More subtle background color +set -g status-bg colour234 +set -g status-fg colour246 + # Switch panes like vim setw -g mode-keys vi bind h select-pane -L diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 2db80b2b..6a56a112 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -34,15 +34,10 @@ endif " Show Git indicators with line numbers Plug 'airblade/vim-gitgutter' -" Ctrl P -Plug 'ctrlpvim/ctrlp.vim' -let g:ctrlp_show_hidden = 1 -map :CtrlP -let g:ctrlp_custom_ignore = { - \ 'dir': '\v[\/](\.git|node_modules|\.sass-cache|bower_components|vendor|build|media|__pycache__)$', - \ 'file': '\v\.(exe|so|dll|pyc)$', - \ 'link': 'some_bad_symbolic_links', - \ } +" Fuzzy finder +Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } +Plug 'junegunn/fzf.vim' +nnoremap :GFiles " Autocompletion Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } From f2e3f702b97fe75ea1e5fdd29e2ef9b4cec72733 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 15:23:44 +0100 Subject: [PATCH 081/532] Disable vim splash screen --- bash/.aliases | 2 +- vim/.vim-plugins | 10 +++++++++- vim/.vimrc | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index e6d8972a..9283796a 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -15,7 +15,7 @@ esac alias npmu='npm install && npm update && npm prune && npm outdated' # FZF -fd() { +fcd() { local dir dir=$(find ${1:-.} -path '*/\.*' -prune \ -o -type d -print 2> /dev/null | fzf +m) && diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 6a56a112..22a8e0df 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -37,7 +37,15 @@ Plug 'airblade/vim-gitgutter' " Fuzzy finder Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'junegunn/fzf.vim' -nnoremap :GFiles +nnoremap :call FzfOmniFiles() +fun! FzfOmniFiles() + call system('git status') + if v:shell_error + :Files + else + :GFiles + endif +endfun " Autocompletion Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } diff --git a/vim/.vimrc b/vim/.vimrc index 3be10489..cc60cb22 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,5 +1,7 @@ " Make Vim more useful set nocompatible +" Disable vim welcome message +set shortmess=I " Set true terminal colors set termguicolors colorscheme elflord From 998a7dfe65f53685f4171a29e5ecf44548940247 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 15:34:02 +0100 Subject: [PATCH 082/532] Source fzf config --- bash/.bashrc | 3 ++- zsh/.zshrc | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/bash/.bashrc b/bash/.bashrc index f9cb23b4..87653237 100644 --- a/bash/.bashrc +++ b/bash/.bashrc @@ -1 +1,2 @@ -[ -n "$PS1" ] && source ~/.bash_profile; \ No newline at end of file +[ -n "$PS1" ] && source ~/.bash_profile; +[ -f ~/.fzf.bash ] && source ~/.fzf.bash diff --git a/zsh/.zshrc b/zsh/.zshrc index d9360479..e82ba675 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -22,3 +22,5 @@ unset file; # update oh-my-zsh bi weekly and other useful helpers source $ZSH/oh-my-zsh.sh + +[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh From 8207501a7766743675f900d767282ad44d57ddeb Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 15:38:33 +0100 Subject: [PATCH 083/532] Add dirdiff --- vim/.plugins | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vim/.plugins b/vim/.plugins index f835eee6..060fa2f2 100644 --- a/vim/.plugins +++ b/vim/.plugins @@ -9,6 +9,10 @@ let g:airline_skip_empty_sections = 1 " Git integration Plug 'tpope/vim-fugitive' +" Diff directories +Plug 'will133/vim-dirdiff' +let g:DirDiffExcludes = ".git,node_modules,vendor,dist,.DS_Store,.*.swp" + " Edit surrounds Plug 'tpope/vim-surround' From a4fe4d32628355edb932fcb8bfd22c587808d7ff Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 22:00:06 +0100 Subject: [PATCH 084/532] Run system update jobs in parallel --- bash/.aliases | 6 ------ bash/.functions | 45 +++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 9283796a..12f503ff 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -5,12 +5,6 @@ alias sudo='sudo ' alias ..="cd .." alias ...="cd ../.." -# System Update -case $(uname) in - 'Linux') alias pacu='(cd ~/dotfiles && git pull) && sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm && npm update -g && npm outdated -g && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; - 'Darwin') alias pacu='(cd ~/dotfiles && git pull) && mas upgrade && brew update && brew upgrade && brew cleanup && npm update -g && npm outdated -g && ~/dotfiles/bash/update-js.sh && ~/dotfiles/bash/update-go.sh' ;; -esac - # npm update alias npmu='npm install && npm update && npm prune && npm outdated' diff --git a/bash/.functions b/bash/.functions index d3046a04..10183892 100644 --- a/bash/.functions +++ b/bash/.functions @@ -1,19 +1,56 @@ # Create a new directory and enter it function mkcd() { - mkdir -p "$@" && cd "$_"; + mkdir -p "$@" && cd "$_" || exit; } # Open tmux and vim in an IDE like layout function ide() { if [ ! -z "$1" ]; then - cd "$1" + cd "$1" || exit fi tmux new-session -d -s ide 'vim +NERDTree' - tmux split-window -v -p 10 tmux split-window -h tmux select-pane -t 0 - tmux attach-session -d -t ide } + +# System update +function pacu() { + # Dotfiles repo + (cd "${HOME}/dotfiles" && git pull) + + # System tools + case "$(uname)" in + 'Linux') + # On Arch Linux, use Pacman and Yaourt + sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm + ;; + 'Darwin') + # On macOS, use mas and Homebrew in parallel + (mas upgrade) & + mas_pid="$!" + brew update && brew upgrade && brew cleanup + wait "${mas_pid}" + ;; + esac + + ("${HOME}/dotfiles/bash/update-go.sh") & + go_pid="$!" + + vim -c 'PlugUpgrade | PlugUpdate | qa' + + (npm update -g) & + npm_pid="$!" + + wait "${npm_pid}" + npm outdated -g + ("${HOME}/dotfiles/bash/update-js.sh") + + # Wait for all processes to finish + # wait "${vim_pid}" + wait "${go_pid}" + + echo 'System upgrade finished' +} From 370ae9b3cf66b8e332f50be8bfa4807f623c6c20 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 22:26:32 +0100 Subject: [PATCH 085/532] Run PlugClean on system upgrade --- bash/.functions | 4 ++-- vim/.vimrc | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bash/.functions b/bash/.functions index 10183892..1c39806a 100644 --- a/bash/.functions +++ b/bash/.functions @@ -1,6 +1,6 @@ # Create a new directory and enter it function mkcd() { - mkdir -p "$@" && cd "$_" || exit; + mkdir -p "$@" && cd "$_" || exit; } # Open tmux and vim in an IDE like layout @@ -39,7 +39,7 @@ function pacu() { ("${HOME}/dotfiles/bash/update-go.sh") & go_pid="$!" - vim -c 'PlugUpgrade | PlugUpdate | qa' + vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' (npm update -g) & npm_pid="$!" diff --git a/vim/.vimrc b/vim/.vimrc index cc60cb22..3587a47d 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -61,6 +61,8 @@ if has("autocmd") autocmd FileType make setlocal ts=4 sts=4 sw=4 noexpandtab " Strip trailing whitespaces on save autocmd BufWritePre * %s/\s\+$//e + " Unify indentation on save + autocmd BufWritePre * retab " Enable spell checking for certain files autocmd BufRead,BufNewFile *.md,*.tex setlocal spell endif From c66be62837abb5fe74c1bdacd1d29492d13a52f8 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 19 Feb 2017 23:47:16 +0100 Subject: [PATCH 086/532] Add vim color scheme seoul256 --- bash/.aliases | 8 -------- bash/.functions | 23 +++++++++++++++++++++++ vim/.vim-plugins | 11 +++++++++++ vim/.vimrc | 1 - 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 12f503ff..0ef2b6e4 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -7,11 +7,3 @@ alias ...="cd ../.." # npm update alias npmu='npm install && npm update && npm prune && npm outdated' - -# FZF -fcd() { - local dir - dir=$(find ${1:-.} -path '*/\.*' -prune \ - -o -type d -print 2> /dev/null | fzf +m) && - cd "$dir" -} diff --git a/bash/.functions b/bash/.functions index 1c39806a..17d3104b 100644 --- a/bash/.functions +++ b/bash/.functions @@ -3,6 +3,29 @@ function mkcd() { mkdir -p "$@" && cd "$_" || exit; } +# cd into directory with fzf +fcd() { + local dir + dir=$(find ${1:-.} -path '*/\.*' -prune \ + -o -type d -print 2> /dev/null | fzf +m) && + cd "$dir" +} + +# Checkout branches or tags with fzf +fco() { + local tags branches target + tags=$( + git tag | awk '{print "\x1b[31;1mtag\x1b[m\t" $1}') || return + branches=$( + git branch --all | grep -v HEAD | + sed "s/.* //" | sed "s#remotes/[^/]*/##" | + sort -u | awk '{print "\x1b[34;1mbranch\x1b[m\t" $1}') || return + target=$( + (echo "$tags"; echo "$branches") | + fzf-tmux -l30 -- --no-hscroll --ansi +m -d "\t" -n 2) || return + git checkout $(echo "$target" | awk '{print $2}') +} + # Open tmux and vim in an IDE like layout function ide() { if [ ! -z "$1" ]; then diff --git a/vim/.vim-plugins b/vim/.vim-plugins index ea7226e4..ba2668e7 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -1,6 +1,17 @@ " Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) call plug#begin('~/.local/share/nvim/plugged') +" Color scheme +Plug 'junegunn/seoul256.vim' +let g:seoul256_background = 233 +colorscheme seoul256 + +" Add Goyo mode (for focused writing) +Plug 'junegunn/goyo.vim' +Plug 'junegunn/limelight.vim' +autocmd! User GoyoEnter Limelight +autocmd! User GoyoLeave Limelight! + " Status bar Plug 'vim-airline/vim-airline' let g:airline_powerline_fonts = 1 diff --git a/vim/.vimrc b/vim/.vimrc index 3587a47d..fc4047ec 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -4,7 +4,6 @@ set nocompatible set shortmess=I " Set true terminal colors set termguicolors -colorscheme elflord " Use the OS clipboard by default (on versions compiled with `+clipboard`) set clipboard=unnamed " Enhance command-line completion From cb6a53f9ae3b506cb5152151af518ec497edd3c3 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 20 Feb 2017 00:27:24 +0100 Subject: [PATCH 087/532] Use workaround for color scheme --- vim/.vim-plugins | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vim/.vim-plugins b/vim/.vim-plugins index ba2668e7..3c175c88 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -4,7 +4,9 @@ call plug#begin('~/.local/share/nvim/plugged') " Color scheme Plug 'junegunn/seoul256.vim' let g:seoul256_background = 233 -colorscheme seoul256 +if has("autocmd") + autocmd! VimEnter * colorscheme seoul256 +endif " Add Goyo mode (for focused writing) Plug 'junegunn/goyo.vim' From 8eaa1256997f598804471b29ab35195f9dd8f082 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 20 Feb 2017 02:17:47 +0100 Subject: [PATCH 088/532] Hide tmux in Goyo mode --- vim/.vim-plugins | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 3c175c88..70f0f354 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -11,8 +11,26 @@ endif " Add Goyo mode (for focused writing) Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' -autocmd! User GoyoEnter Limelight -autocmd! User GoyoLeave Limelight! +autocmd! User GoyoEnter nested call goyo_enter() +autocmd! User GoyoLeave nested call goyo_leave() +function! s:goyo_enter() + silent !tmux set status off + silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z + set noshowmode + set noshowcmd + set scrolloff=999 + Limelight + " ... +endfunction +function! s:goyo_leave() + silent !tmux set status on + silent !tmux list-panes -F '\#F' | grep -q Z && tmux resize-pane -Z + set showmode + set showcmd + set scrolloff=5 + Limelight! + " ... +endfunction " Status bar Plug 'vim-airline/vim-airline' From f67de256a35a2a098c70a3ee8fa7072fc8362fdf Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 21 Feb 2017 13:58:55 +0100 Subject: [PATCH 089/532] Optimiye Goyo and tmux bar --- tmux/.tmux.conf | 7 +++++++ vim/.vim-plugins | 16 +++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 3393e543..7430937b 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -5,6 +5,13 @@ set -g default-terminal 'screen-256color' set -g status-bg colour234 set -g status-fg colour246 +# Highlight active window +set-window-option -g window-status-format " #I: #W " + +set-window-option -g window-status-current-bg colour235 +set-window-option -g window-status-current-fg white +set-window-option -g window-status-current-format " #I: #W " + # Switch panes like vim setw -g mode-keys vi bind h select-pane -L diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 70f0f354..1e8a9915 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -16,22 +16,25 @@ autocmd! User GoyoLeave nested call goyo_leave() function! s:goyo_enter() silent !tmux set status off silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z - set noshowmode + let g:neomake_place_signs=0 + sign unplace * set noshowcmd set scrolloff=999 Limelight - " ... endfunction function! s:goyo_leave() silent !tmux set status on silent !tmux list-panes -F '\#F' | grep -q Z && tmux resize-pane -Z - set showmode + let g:neomake_place_signs=1 + Neomake set showcmd - set scrolloff=5 + set scrolloff=3 Limelight! - " ... endfunction +" Register preview +Plug 'junegunn/vim-peekaboo' + " Status bar Plug 'vim-airline/vim-airline' let g:airline_powerline_fonts = 1 @@ -93,6 +96,9 @@ let g:deoplete#enable_at_startup = 1 Plug 'fatih/vim-go', { 'for': 'go' } let g:go_fmt_command = 'goimports' +" Node.js +Plug 'moll/vim-node' + " Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } From a3998e839927ea3e0c367faeb7dc17f42e6373bf Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 21 Feb 2017 18:52:51 +0100 Subject: [PATCH 090/532] Use function instead of fun --- vim/.vim-plugins | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 1e8a9915..9e4e21c9 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -76,14 +76,14 @@ Plug 'airblade/vim-gitgutter' Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'junegunn/fzf.vim' nnoremap :call FzfOmniFiles() -fun! FzfOmniFiles() +function! FzfOmniFiles() call system('git status') if v:shell_error :Files else :GFiles endif -endfun +endfunction " Autocompletion Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } From 8052c8f77cb549d23e519e29ce4b01bc4194d526 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 22 Feb 2017 12:16:15 +0100 Subject: [PATCH 091/532] Add comments --- bash/.functions | 3 +++ git/.gitconfig | 2 ++ 2 files changed, 5 insertions(+) diff --git a/bash/.functions b/bash/.functions index 17d3104b..8e5ebd4c 100644 --- a/bash/.functions +++ b/bash/.functions @@ -59,11 +59,14 @@ function pacu() { ;; esac + # Go ("${HOME}/dotfiles/bash/update-go.sh") & go_pid="$!" + # Vim vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' + # Node.js and npm (npm update -g) & npm_pid="$!" diff --git a/git/.gitconfig b/git/.gitconfig index 413f7053..b50af665 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -14,3 +14,5 @@ tool = vimdiff [mergetool] prompt = false +[http "https://gopkg.in"] + followRedirects = true From d61a8561bf7b09adbbdb046207e9d3dd362ee2ce Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 22 Feb 2017 12:46:25 +0100 Subject: [PATCH 092/532] Add ruby gems upgrade --- bash/.functions | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/bash/.functions b/bash/.functions index 8e5ebd4c..eebfe194 100644 --- a/bash/.functions +++ b/bash/.functions @@ -63,20 +63,26 @@ function pacu() { ("${HOME}/dotfiles/bash/update-go.sh") & go_pid="$!" - # Vim - vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' - # Node.js and npm (npm update -g) & - npm_pid="$!" + npm_global_pid="$!" - wait "${npm_pid}" + wait "${npm_global_pid}" npm outdated -g - ("${HOME}/dotfiles/bash/update-js.sh") + ("${HOME}/dotfiles/bash/update-js.sh") & + npm_pid="$!" + + # Ruby + (gem update `gem list | cut -d ' ' -f 1`) & + ruby_pid="$!" + + # Vim + vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' # Wait for all processes to finish - # wait "${vim_pid}" + wait "${npm_pid}" wait "${go_pid}" + wait "${ruby_pid}" echo 'System upgrade finished' } From af497ac6c84e0b2fed1a35fa1988b2395a89b986 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 24 Feb 2017 10:05:18 +0100 Subject: [PATCH 093/532] Use 4 spaces for indentation --- README.md | 28 ++++++++++++++++++++++++++-- vim/.vimrc | 10 +++++----- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fb124de0..53863574 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,36 @@ My personal dotfiles +I mainly work with [Go](https://golang.org/), [Node.js](https://nodejs.org/en/), [TypeScript](https://www.typescriptlang.org/), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. + ## Usage -I use [Stow](https://www.gnu.org/software/stow/) to keep my files in sync. +I use [Stow](https://www.gnu.org/software/stow/) to symlink the files from this repo into my home directory. 1. Download and install stow 1. Clone this repo to your home folder -1. Run `cd ~/dotfiles` +1. Run `cd "${HOME}/dotfiles"` 1. Run `stow vim` 1. Repeat for all needed folders + +## Prerequisites + +### Vim + +* Install [NeoVim](https://github.com/neovim/neovim/wiki/Installing-Neovim) or [Vim 8](http://www.vim.org/download.php) +* Install [vim-plug](https://github.com/junegunn/vim-plug#installation) +* Install [Python 3](https://www.python.org/downloads/) + +### System Upgrade + +* Install [fzf](https://github.com/junegunn/fzf) + +#### macOS + +* Install [mas](https://github.com/mas-cli/mas) +* Install [Homebrew](https://brew.sh/) + +#### Linux + +* Use [Arch Linux](https://www.archlinux.org/) or [Antergos](https://antergos.com/) +* Install [Yaourt](https://archlinux.fr/yaourt-en) diff --git a/vim/.vimrc b/vim/.vimrc index fc4047ec..873b91f7 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -21,9 +21,9 @@ set relativenumber set number " Use 2 spaces instead of tabs set expandtab -set tabstop=2 -set softtabstop=2 -set shiftwidth=2 +set tabstop=4 +set softtabstop=4 +set shiftwidth=4 " Highlight searches set hlsearch " Ignore case of searches @@ -54,8 +54,8 @@ if has("autocmd") autocmd BufNewFile,BufRead *.json setfiletype json syntax=javascript " Treat .md files as Markdown autocmd BufNewFile,BufRead *.md setlocal filetype=markdown - " Use 4 spaces for python files - autocmd FileType python setlocal ts=4 sts=4 sw=4 + " Use tabs with width 8 for Go + autocmd FileType go setlocal ts=8 sts=8 sw=8 noexpandtab " Use tabs for make files autocmd FileType make setlocal ts=4 sts=4 sw=4 noexpandtab " Strip trailing whitespaces on save From 944cd859064c4a379e9356ffbcb7b9aaee0d0f95 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 24 Feb 2017 14:50:04 +0100 Subject: [PATCH 094/532] Use more intuitive tmux paths --- tmux/.tmux.conf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 7430937b..7a5ec814 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -18,3 +18,10 @@ bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R + +# Open new windows from home directory +bind c new-window -c "${HOME}" + +# Open new splits from current directory +bind '"' split-window -v -c '#{pane_current_path}' +bind % split-window -h -c '#{pane_current_path}' From a0553acd6534e4ae2cd323eb0714da38c0441b54 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 27 Feb 2017 15:01:11 +0100 Subject: [PATCH 095/532] Add JSX syntax highlighting --- vim/.vim-plugins | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 9e4e21c9..733e326b 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -102,6 +102,9 @@ Plug 'moll/vim-node' " Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } +" JSX +Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } + " Wakatime Plug 'wakatime/vim-wakatime' From b4307a3e20ee5df1b98ec5a2b3585780b6ec015f Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 27 Feb 2017 16:45:13 +0100 Subject: [PATCH 096/532] Force update gems to prevent prompting --- bash/.functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.functions b/bash/.functions index eebfe194..b810c3b6 100644 --- a/bash/.functions +++ b/bash/.functions @@ -73,7 +73,7 @@ function pacu() { npm_pid="$!" # Ruby - (gem update `gem list | cut -d ' ' -f 1`) & + (gem update --force) & ruby_pid="$!" # Vim From 8be6ff14d76309d239cf7152a1bf6172859e22aa Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 27 Feb 2017 23:09:52 +0100 Subject: [PATCH 097/532] Add whitespace where necessary --- bash/update-go.sh | 6 +++--- bash/update-js.sh | 3 +-- vim/.vim-plugins | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/bash/update-go.sh b/bash/update-go.sh index 3a06aa77..0a0688f5 100755 --- a/bash/update-go.sh +++ b/bash/update-go.sh @@ -1,6 +1,6 @@ -#!/bin/sh +#!/bin/bash -for d in $(binstale | grep "build ID mismatch"); do - ( if [[ $d == *'/'* ]]; then go get -u "$d"; fi ) +for d in $(binstale | grep 'build ID mismatch'); do + ( if [[ $d == *'/'* ]]; then go get -u "$d"; fi ) done diff --git a/bash/update-js.sh b/bash/update-js.sh index 9c32531d..045f1260 100755 --- a/bash/update-js.sh +++ b/bash/update-js.sh @@ -3,6 +3,5 @@ cd ~/js for d in */ ; do - ( cd "$d" && git pull && npm update && npm prune && npm outdated ) + ( cd "$d" && git pull && npm update && npm prune && npm outdated ) done - diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 9e4e21c9..6a909d96 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -89,7 +89,7 @@ endfunction Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern' } Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript' } -Plug 'zchee/deoplete-go', { 'do': 'make'} +Plug 'zchee/deoplete-go', { 'do': 'make' } let g:deoplete#enable_at_startup = 1 " Golang From 0df0e8af3a63479c0949e50effc60ca6f5705445 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 28 Feb 2017 23:29:17 +0100 Subject: [PATCH 098/532] Add pip3 upgrade script --- bash/.functions | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bash/.functions b/bash/.functions index b810c3b6..376cf624 100644 --- a/bash/.functions +++ b/bash/.functions @@ -76,6 +76,10 @@ function pacu() { (gem update --force) & ruby_pid="$!" + # Python3 + (for pkg in $(pip3 list | cut -d' ' -f1); do pip3 install --upgrade $pkg; done) & + python3_pid="$!" + # Vim vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' @@ -83,6 +87,7 @@ function pacu() { wait "${npm_pid}" wait "${go_pid}" wait "${ruby_pid}" + wait "${python3_pid}" echo 'System upgrade finished' } From eeb624d30f594158025310dcd48410a199d8b043 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 1 Mar 2017 00:19:33 +0100 Subject: [PATCH 099/532] Selectively run update scripts --- README.md | 18 ++--- bash/.functions | 181 +++++++++++++++++++++++++++++------------------- 2 files changed, 118 insertions(+), 81 deletions(-) diff --git a/README.md b/README.md index 53863574..e7748443 100644 --- a/README.md +++ b/README.md @@ -16,22 +16,24 @@ I use [Stow](https://www.gnu.org/software/stow/) to symlink the files from this ## Prerequisites -### Vim +### General -* Install [NeoVim](https://github.com/neovim/neovim/wiki/Installing-Neovim) or [Vim 8](http://www.vim.org/download.php) -* Install [vim-plug](https://github.com/junegunn/vim-plug#installation) -* Install [Python 3](https://www.python.org/downloads/) +* Run the above commands to get these dotfiles in the right place +* Install [fzf](https://github.com/junegunn/fzf) -### System Upgrade +### Vim -* Install [fzf](https://github.com/junegunn/fzf) +* Install [NeoVim](https://github.com/neovim/neovim/wiki/Installing-Neovim) and run `ln -s "${HOME}/dotfiles/vim/.vimrc" "${HOME}/.config/nvim/init.vim"` +* Install [vim-plug](https://github.com/junegunn/vim-plug#installation) +* Install [Python 3](https://www.python.org/downloads/) and run `pip3 install --upgrade neovim` +* Install the Vim Powerline additions to the font of your terminal (e.g. [Monaco for Powerline](https://gist.github.com/baopham/1838072)) -#### macOS +### macOS * Install [mas](https://github.com/mas-cli/mas) * Install [Homebrew](https://brew.sh/) -#### Linux +### Linux * Use [Arch Linux](https://www.archlinux.org/) or [Antergos](https://antergos.com/) * Install [Yaourt](https://archlinux.fr/yaourt-en) diff --git a/bash/.functions b/bash/.functions index 376cf624..d543d279 100644 --- a/bash/.functions +++ b/bash/.functions @@ -1,93 +1,128 @@ # Create a new directory and enter it function mkcd() { - mkdir -p "$@" && cd "$_" || exit; + mkdir -p "$@" && cd "$_" || exit; } # cd into directory with fzf fcd() { - local dir - dir=$(find ${1:-.} -path '*/\.*' -prune \ - -o -type d -print 2> /dev/null | fzf +m) && - cd "$dir" + local dir + dir=$(find ${1:-.} -path '*/\.*' -prune \ + -o -type d -print 2> /dev/null | fzf +m) && + cd "$dir" } # Checkout branches or tags with fzf fco() { - local tags branches target - tags=$( - git tag | awk '{print "\x1b[31;1mtag\x1b[m\t" $1}') || return - branches=$( - git branch --all | grep -v HEAD | - sed "s/.* //" | sed "s#remotes/[^/]*/##" | - sort -u | awk '{print "\x1b[34;1mbranch\x1b[m\t" $1}') || return - target=$( - (echo "$tags"; echo "$branches") | - fzf-tmux -l30 -- --no-hscroll --ansi +m -d "\t" -n 2) || return - git checkout $(echo "$target" | awk '{print $2}') + local tags branches target + tags=$(git tag | awk '{print "\x1b[31;1mtag\x1b[m\t" $1}') || return + branches=$( + git branch --all | grep -v HEAD | + sed "s/.* //" | sed "s#remotes/[^/]*/##" | + sort -u | awk '{print "\x1b[34;1mbranch\x1b[m\t" $1}') || return + target=$( + (echo "$tags"; echo "$branches") | + fzf-tmux -l30 -- --no-hscroll --ansi +m -d "\t" -n 2) || return + git checkout $(echo "$target" | awk '{print $2}') } # Open tmux and vim in an IDE like layout function ide() { - if [ ! -z "$1" ]; then - cd "$1" || exit - fi - - tmux new-session -d -s ide 'vim +NERDTree' - tmux split-window -v -p 10 - tmux split-window -h - tmux select-pane -t 0 - tmux attach-session -d -t ide + if [ ! -z "$1" ]; then + cd "$1" || exit + fi + + tmux new-session -d -s ide 'vim +NERDTree' + tmux split-window -v -p 10 + tmux split-window -h + tmux select-pane -t 0 + tmux attach-session -d -t ide } # System update function pacu() { - # Dotfiles repo - (cd "${HOME}/dotfiles" && git pull) - - # System tools - case "$(uname)" in - 'Linux') - # On Arch Linux, use Pacman and Yaourt - sudo pacman -Syu --noconfirm && yaourt -Syua --noconfirm - ;; - 'Darwin') + + # Dotfiles repo + (cd "${HOME}/dotfiles" && git pull) + + # System tools + case "$(uname)" in + # On Linux, use the respective package manager + 'Linux') + # Arch Linux + if [ -x "$(command -v pacman)" ]; then + sudo pacman -Syu --noconfirm + fi + if [ -x "$(command -v yaourt)" ]; then + yaourt -Syua --noconfirm + fi + # Debian + if [ -x "$(command -v apt-get)" ]; then + sudo apt-get update + sudo apt-get upgrade -y + sudo apt-get dist-upgrade -y + fi + ;; # On macOS, use mas and Homebrew in parallel - (mas upgrade) & - mas_pid="$!" - brew update && brew upgrade && brew cleanup - wait "${mas_pid}" - ;; - esac - - # Go - ("${HOME}/dotfiles/bash/update-go.sh") & - go_pid="$!" - - # Node.js and npm - (npm update -g) & - npm_global_pid="$!" - - wait "${npm_global_pid}" - npm outdated -g - ("${HOME}/dotfiles/bash/update-js.sh") & - npm_pid="$!" - - # Ruby - (gem update --force) & - ruby_pid="$!" - - # Python3 - (for pkg in $(pip3 list | cut -d' ' -f1); do pip3 install --upgrade $pkg; done) & - python3_pid="$!" - - # Vim - vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' - - # Wait for all processes to finish - wait "${npm_pid}" - wait "${go_pid}" - wait "${ruby_pid}" - wait "${python3_pid}" - - echo 'System upgrade finished' + 'Darwin') + if [ -x "$(command -v mas)" ]; then + (mas upgrade) & + mas_pid="$!" + fi + if [ -x "$(command -v brew)" ]; then + brew update + brew upgrade + brew cleanup + fi + wait "${mas_pid}" &> /dev/null + ;; + esac + +# Go + if [ -x "$(command -v go)" ]; then + ("${HOME}/dotfiles/bash/update-go.sh") & + go_pid="$!" + fi + +# Node.js and npm + if [ -x "$(command -v npm)" ]; then + (npm update -g) & + npm_global_pid="$!" + + wait "${npm_global_pid}" + npm outdated -g + ("${HOME}/dotfiles/bash/update-js.sh") & + npm_pid="$!" + fi + +# Ruby + if [ -x "$(command -v gem)" ]; then + (gem update --force) & + ruby_pid="$!" + fi + +# Python + if [ -x "$(command -v pip)" ]; then + (for pkg in $(pip list | cut -d' ' -f1); do pip install --upgrade $pkg; done) & + python_pid="$!" + fi + +# Python3 + if [ -x "$(command -v pip3)" ]; then + (for pkg in $(pip3 list | cut -d' ' -f1); do pip3 install --upgrade $pkg; done) & + python3_pid="$!" + fi + +# Vim + if [ -x "$(command -v vim)" ]; then + vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' + fi + +# Wait for all processes to finish + wait "${npm_pid}" &> /dev/null + wait "${go_pid}" &> /dev/null + wait "${ruby_pid}" &> /dev/null + wait "${python_pid}" &> /dev/null + wait "${python3_pid}" &> /dev/null + + echo 'System upgrade finished' } From c9f30b2186e352be9900231d40e83d15ae0a6ad3 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 1 Mar 2017 00:34:27 +0100 Subject: [PATCH 100/532] Fix typo --- bash/.bash_profile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bash/.bash_profile b/bash/.bash_profile index d635bce7..14959f88 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -2,7 +2,7 @@ # * ~/.path can be used to extend `$PATH`. # * ~/.extra can be used for other settings you don’t want to commit. for file in ~/.{path,exports,aliases,functions,extra}; do - [ -r "$file" ] && [ -f "$file" ] && source "$file"; + [ -r "$file" ] && [ -f "$file" ] && source "$file"; done; unset file; @@ -16,11 +16,11 @@ shopt -s cdspell; # * `autocd`, e.g. `**/qux` will enter `./foo/bar/baz/qux` # * Recursive globbing, e.g. `echo **/*.txt` for option in autocd globstar; do - shopt -s "$option" 2> /dev/null; + shopt -s "$option" 2> /dev/null; done; # Add tab completion for many Bash commands -if [ "$(uname) == 'Darwin'" ]; then +if [ "$(uname)" == 'Darwin' ]; then if which brew > /dev/null && [ -f "$(brew --prefix)/share/bash-completion/bash_completion" ]; then source "$(brew --prefix)/share/bash-completion/bash_completion"; elif [ -f /etc/bash_completion ]; then @@ -33,9 +33,9 @@ fi; # Detect which `ls` flavor is in use if ls --color > /dev/null 2>&1; then # GNU `ls` - colorflag="--color" + colorflag="--color" else # OS X `ls` - colorflag="-G" + colorflag="-G" fi # Always use color output for `ls` From d661cb18929ce1470e24bec27021b3ad273ca30d Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 1 Mar 2017 00:43:49 +0100 Subject: [PATCH 101/532] Make update scripts safer --- bash/update-go.sh | 9 +++++---- bash/update-js.sh | 11 +++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/bash/update-go.sh b/bash/update-go.sh index 0a0688f5..9d6d3551 100755 --- a/bash/update-go.sh +++ b/bash/update-go.sh @@ -1,6 +1,7 @@ #!/bin/bash -for d in $(binstale | grep 'build ID mismatch'); do - ( if [[ $d == *'/'* ]]; then go get -u "$d"; fi ) -done - +if [ -x "$(command -v binstale)" ]; then + for d in $(binstale | grep 'build ID mismatch'); do + ( if [[ $d == *'/'* ]]; then go get -u "$d"; fi ) + done +fi diff --git a/bash/update-js.sh b/bash/update-js.sh index 045f1260..5075425f 100755 --- a/bash/update-js.sh +++ b/bash/update-js.sh @@ -1,7 +1,10 @@ #!/bin/sh -cd ~/js +js_dir="${HOME}/js" -for d in */ ; do - ( cd "$d" && git pull && npm update && npm prune && npm outdated ) -done +if [ -d "${js_dir}" ]; then + cd "${js_dir}" + for d in */ ; do + ( cd "$d" && git pull && npm update && npm prune && npm outdated ) + done +fi From 40399515cebaf309606caf396bc499dc43ff9e60 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 1 Mar 2017 01:05:53 +0100 Subject: [PATCH 102/532] Add fshow and fkill commands --- bash/.functions | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/bash/.functions b/bash/.functions index d543d279..8bfe80a6 100644 --- a/bash/.functions +++ b/bash/.functions @@ -25,6 +25,28 @@ fco() { git checkout $(echo "$target" | awk '{print $2}') } +# fkill - kill process +fkill() { + local pid + pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}') + + if [ "x$pid" != "x" ]; then + echo $pid | xargs kill -${1:-9} + fi +} + +# fshow - git commit browser +fshow() { + git log --graph --color=always \ + --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" | + fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \ + --bind "ctrl-m:execute: + (grep -o '[a-f0-9]\{7\}' | head -1 | + xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF' + {} +FZF-EOF" +} + # Open tmux and vim in an IDE like layout function ide() { if [ ! -z "$1" ]; then From 1212fadd1352266b09641d43d5a9bb4ba3fb00b1 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 2 Mar 2017 15:16:53 +0100 Subject: [PATCH 103/532] Correct order for commands --- bash/.inputrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.inputrc b/bash/.inputrc index 9a614708..484900e3 100644 --- a/bash/.inputrc +++ b/bash/.inputrc @@ -9,8 +9,8 @@ set mark-symlinked-directories on # Use the text that has already been typed as the prefix for searching through # commands (i.e. more intelligent Up/Down behavior) -"\e[B": history-search-forward "\e[A": history-search-backward +"\e[B": history-search-forward # Show all autocomplete results at once set page-completions off From 8fa394d5db09f2147b761956941cfda2e36ff7da Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 7 Mar 2017 20:10:14 +0100 Subject: [PATCH 104/532] Add Tagbar to Vim --- vim/.ctags | 11 +++++++++++ vim/.vim-plugins | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 vim/.ctags diff --git a/vim/.ctags b/vim/.ctags new file mode 100644 index 00000000..e67ea02d --- /dev/null +++ b/vim/.ctags @@ -0,0 +1,11 @@ +--langdef=typescript +--langmap=typescript:.ts +--regex-typescript=/^[ \t]*(export([ \t]+abstract)?)?[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\3/c,classes/ +--regex-typescript=/^[ \t]*(export)?[ \t]*module[ \t]+([a-zA-Z0-9_]+)/\2/n,modules/ +--regex-typescript=/^[ \t]*(export)?[ \t]*function[ \t]+([a-zA-Z0-9_]+)/\2/f,functions/ +--regex-typescript=/^[ \t]*export[ \t]+var[ \t]+([a-zA-Z0-9_]+)/\1/v,variables/ +--regex-typescript=/^[ \t]*var[ \t]+([a-zA-Z0-9_]+)[ \t]*=[ \t]*function[ \t]*\(\)/\1/v,varlambdas/ +--regex-typescript=/^[ \t]*(export)?[ \t]*(public|private)[ \t]+(static)?[ \t]*([a-zA-Z0-9_]+)/\4/m,members/ +--regex-typescript=/^[ \t]*(export)?[ \t]*interface[ \t]+([a-zA-Z0-9_]+)/\2/i,interfaces/ +--regex-typescript=/^[ \t]*(export)?[ \t]*enum[ \t]+([a-zA-Z0-9_]+)/\2/e,enums/ +--regex-typescript=/^[ \t]*import[ \t]+([a-zA-Z0-9_]+)/\1/I,imports/ diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 4ec5cded..fb39466c 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -85,6 +85,51 @@ function! FzfOmniFiles() endif endfunction +" Tagbar +Plug 'majutsushi/tagbar' +map :TagbarToggle +let g:tagbar_type_go = { + \ 'ctagstype' : 'go', + \ 'kinds' : [ + \ 'p:package', + \ 'i:imports:1', + \ 'c:constants', + \ 'v:variables', + \ 't:types', + \ 'n:interfaces', + \ 'w:fields', + \ 'e:embedded', + \ 'm:methods', + \ 'r:constructor', + \ 'f:functions' + \ ], + \ 'sro' : '.', + \ 'kind2scope' : { + \ 't' : 'ctype', + \ 'n' : 'ntype' + \ }, + \ 'scope2kind' : { + \ 'ctype' : 't', + \ 'ntype' : 'n' + \ }, + \ 'ctagsbin' : 'gotags', + \ 'ctagsargs' : '-sort -silent' +\ } +let g:tagbar_type_typescript = { + \ 'ctagstype': 'typescript', + \ 'kinds': [ + \ 'c:classes', + \ 'n:modules', + \ 'f:functions', + \ 'v:variables', + \ 'v:varlambdas', + \ 'm:members', + \ 'i:interfaces', + \ 'e:enums', + \ ] +\ } + + " Autocompletion Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern' } From 7be3bc1a95e3be8e6423940cd12dff67bfe20714 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 7 Mar 2017 20:38:45 +0100 Subject: [PATCH 105/532] Install pip dependencies as user --- bash/.functions | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/.functions b/bash/.functions index 8bfe80a6..55ad0d60 100644 --- a/bash/.functions +++ b/bash/.functions @@ -124,13 +124,13 @@ function pacu() { # Python if [ -x "$(command -v pip)" ]; then - (for pkg in $(pip list | cut -d' ' -f1); do pip install --upgrade $pkg; done) & + (for pkg in $(pip list | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & python_pid="$!" fi # Python3 if [ -x "$(command -v pip3)" ]; then - (for pkg in $(pip3 list | cut -d' ' -f1); do pip3 install --upgrade $pkg; done) & + (for pkg in $(pip3 list | cut -d' ' -f1); do pip3 install --user --upgrade $pkg; done) & python3_pid="$!" fi From b3194f920dd0749a9ad819baf1ea5c1ec5aecd7e Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 9 Mar 2017 08:20:55 +0100 Subject: [PATCH 106/532] Make macOS and Linux requirements recommendations --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e7748443..da65e238 100644 --- a/README.md +++ b/README.md @@ -28,12 +28,12 @@ I use [Stow](https://www.gnu.org/software/stow/) to symlink the files from this * Install [Python 3](https://www.python.org/downloads/) and run `pip3 install --upgrade neovim` * Install the Vim Powerline additions to the font of your terminal (e.g. [Monaco for Powerline](https://gist.github.com/baopham/1838072)) -### macOS +### macOS recommendations * Install [mas](https://github.com/mas-cli/mas) * Install [Homebrew](https://brew.sh/) -### Linux +### Linux recommendations * Use [Arch Linux](https://www.archlinux.org/) or [Antergos](https://antergos.com/) * Install [Yaourt](https://archlinux.fr/yaourt-en) From 8ecb95551be6d45009f4134c625cef8362725168 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 9 Mar 2017 20:48:58 +0100 Subject: [PATCH 107/532] Use gitignore for FZF --- bash/.bashrc | 4 ++++ vim/.vim-plugins | 10 +--------- zsh/.zshrc | 5 ++++- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/bash/.bashrc b/bash/.bashrc index 87653237..6fc610fd 100644 --- a/bash/.bashrc +++ b/bash/.bashrc @@ -1,2 +1,6 @@ [ -n "$PS1" ] && source ~/.bash_profile; + [ -f ~/.fzf.bash ] && source ~/.fzf.bash + +# Don't search files which are gitignored in FZF +export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -g ""' diff --git a/vim/.vim-plugins b/vim/.vim-plugins index fb39466c..cca4f28d 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -75,15 +75,7 @@ Plug 'airblade/vim-gitgutter' " Fuzzy finder Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'junegunn/fzf.vim' -nnoremap :call FzfOmniFiles() -function! FzfOmniFiles() - call system('git status') - if v:shell_error - :Files - else - :GFiles - endif -endfunction +nnoremap :Files " Tagbar Plug 'majutsushi/tagbar' diff --git a/zsh/.zshrc b/zsh/.zshrc index e82ba675..7aef1ee9 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -16,7 +16,7 @@ plugins=(git) # Load the shell dotfiles for file in ~/.{path,exports,aliases,functions,extra}; do - [ -r "$file" ] && [ -f "$file" ] && source "$file"; + [ -r "$file" ] && [ -f "$file" ] && source "$file"; done; unset file; @@ -24,3 +24,6 @@ unset file; source $ZSH/oh-my-zsh.sh [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh + +# Don't search files which are gitignored in FZF +export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -g ""' From 2bc8862646a97d7881d9490bf4c13caa57aee491 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 13 Mar 2017 16:19:28 +0100 Subject: [PATCH 108/532] Add diff-so-fancy --- README.md | 1 + git/.gitconfig | 1 + vim/.vim-plugins | 1 + 3 files changed, 3 insertions(+) diff --git a/README.md b/README.md index da65e238..8719a739 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ I use [Stow](https://www.gnu.org/software/stow/) to symlink the files from this * Run the above commands to get these dotfiles in the right place * Install [fzf](https://github.com/junegunn/fzf) +* Install [diff-so-fancy](https://github.com/so-fancy/diff-so-fancy) ### Vim diff --git a/git/.gitconfig b/git/.gitconfig index b50af665..86ecb9c4 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -3,6 +3,7 @@ name = Tobias Fuhrimann [core] excludesfile = ~/.gitignore_global + pager = diff-so-fancy | less --tabs=4 -RFX [color] ui = true diff --git a/vim/.vim-plugins b/vim/.vim-plugins index cca4f28d..f5029d48 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -54,6 +54,7 @@ Plug 'tpope/vim-surround' " Source tree Plug 'scrooloose/nerdtree' let NERDTreeShowHidden = 1 +let NERDTreeIgnore = ['.DS_Store'] map :NERDTreeToggle " Toggle Comments From a9ac249428b7284415eee694bcd069f6e720e794 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 22 Mar 2017 07:54:30 +0100 Subject: [PATCH 109/532] Allow user to use namespace when in tmux --- tmux/.tmux.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 7a5ec814..2dd58747 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -25,3 +25,6 @@ bind c new-window -c "${HOME}" # Open new splits from current directory bind '"' split-window -v -c '#{pane_current_path}' bind % split-window -h -c '#{pane_current_path}' + +# Allow to use user namespace out of tmux +set -g default-command "reattach-to-user-namespace -l ${SHELL}" From 3da8e0faa7994761d56b9fa15a8b1a6665510fc2 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 29 Mar 2017 17:42:37 +0200 Subject: [PATCH 110/532] Add emmet vim --- vim/.vim-plugins | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vim/.vim-plugins b/vim/.vim-plugins index f5029d48..5166c15a 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -8,6 +8,10 @@ if has("autocmd") autocmd! VimEnter * colorscheme seoul256 endif +" Emmet for HTML editing +Plug 'mattn/emmet-vim' +let g:user_emmet_leader_key='' + " Add Goyo mode (for focused writing) Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' From 318d01623326db47a78b921bf5d2f502c5e6ec3b Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 31 Mar 2017 13:50:48 +0200 Subject: [PATCH 111/532] Add license file --- LICENSE | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..90e65f48 --- /dev/null +++ b/LICENSE @@ -0,0 +1,7 @@ +Copyright 2015 Tobias Fuhrimann + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. From a92cb6594c262ff25c0fe6177cff92aa04826ff7 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 31 Mar 2017 14:03:43 +0200 Subject: [PATCH 112/532] Format license file --- LICENSE | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/LICENSE b/LICENSE index 90e65f48..cf6ba2d7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,19 @@ -Copyright 2015 Tobias Fuhrimann +Copyright (c) 2015 Tobias Fuhrimann -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 826d26da9f383075d522b14903d1d80ff8f55e05 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 3 Apr 2017 09:24:25 +0200 Subject: [PATCH 113/532] Add reattach-to-user-namespace instructions --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8719a739..c28149c2 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,10 @@ I use [Stow](https://www.gnu.org/software/stow/) to symlink the files from this ### macOS recommendations +* Use [iTerm2](https://www.iterm2.com/) * Install [mas](https://github.com/mas-cli/mas) * Install [Homebrew](https://brew.sh/) +* Run `brew install reattach-to-user-namespace` to work with tmux ### Linux recommendations From 0acaac1e00a9a3329cd5e12409f52cd0877f2e1d Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 14 Apr 2017 19:58:12 +0200 Subject: [PATCH 114/532] Add crystal plugin --- vim/.vim-plugins | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 5166c15a..265f3d09 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -134,12 +134,15 @@ Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript' } Plug 'zchee/deoplete-go', { 'do': 'make' } let g:deoplete#enable_at_startup = 1 +" Crystal +Plug 'rhysd/vim-crystal', { 'for': 'crystal' } + " Golang Plug 'fatih/vim-go', { 'for': 'go' } let g:go_fmt_command = 'goimports' " Node.js -Plug 'moll/vim-node' +Plug 'moll/vim-node', { 'for': 'javascript' } " Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } From 59e04bc06c915acce3e077cb4ac0ebce9b54e02c Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 May 2017 18:57:23 +0200 Subject: [PATCH 115/532] Simplify config --- vim/.vimrc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/vim/.vimrc b/vim/.vimrc index 873b91f7..42270dbb 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -8,8 +8,6 @@ set termguicolors set clipboard=unnamed " Enhance command-line completion set wildmenu -" Allow cursor keys in insert mode -set esckeys " Allow backspace in insert mode set backspace=indent,eol,start " Add the g flag to search/replace by default @@ -32,8 +30,6 @@ set ignorecase set incsearch " Do not reset cursor to start of line when moving around set nostartofline -" Show the filename in the window title bar -set title " Show the (partial) command as it is being typed set showcmd " Start scrolling three lines before the horizontal window border From 93bd1de4e4cffd753b1d552bb2dbabba977af281 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 4 May 2017 08:05:30 +0200 Subject: [PATCH 116/532] Remove unused plugins --- README.md | 3 +-- vim/.vim-plugins | 70 ++++-------------------------------------------- 2 files changed, 6 insertions(+), 67 deletions(-) diff --git a/README.md b/README.md index c28149c2..92cb937e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ My personal dotfiles -I mainly work with [Go](https://golang.org/), [Node.js](https://nodejs.org/en/), [TypeScript](https://www.typescriptlang.org/), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. +I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescriptlang.org/), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. ## Usage @@ -27,7 +27,6 @@ I use [Stow](https://www.gnu.org/software/stow/) to symlink the files from this * Install [NeoVim](https://github.com/neovim/neovim/wiki/Installing-Neovim) and run `ln -s "${HOME}/dotfiles/vim/.vimrc" "${HOME}/.config/nvim/init.vim"` * Install [vim-plug](https://github.com/junegunn/vim-plug#installation) * Install [Python 3](https://www.python.org/downloads/) and run `pip3 install --upgrade neovim` -* Install the Vim Powerline additions to the font of your terminal (e.g. [Monaco for Powerline](https://gist.github.com/baopham/1838072)) ### macOS recommendations diff --git a/vim/.vim-plugins b/vim/.vim-plugins index 265f3d09..e80a046e 100644 --- a/vim/.vim-plugins +++ b/vim/.vim-plugins @@ -9,10 +9,10 @@ if has("autocmd") endif " Emmet for HTML editing -Plug 'mattn/emmet-vim' +Plug 'mattn/emmet-vim', { 'for': ['html','xml'] } let g:user_emmet_leader_key='' -" Add Goyo mode (for focused writing) +" Goyo mode for focused writing Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' autocmd! User GoyoEnter nested call goyo_enter() @@ -36,15 +36,6 @@ function! s:goyo_leave() Limelight! endfunction -" Register preview -Plug 'junegunn/vim-peekaboo' - -" Status bar -Plug 'vim-airline/vim-airline' -let g:airline_powerline_fonts = 1 -let g:airline_skip_empty_sections = 1 -set noshowmode - " Git integration Plug 'tpope/vim-fugitive' @@ -82,56 +73,11 @@ Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'junegunn/fzf.vim' nnoremap :Files -" Tagbar -Plug 'majutsushi/tagbar' -map :TagbarToggle -let g:tagbar_type_go = { - \ 'ctagstype' : 'go', - \ 'kinds' : [ - \ 'p:package', - \ 'i:imports:1', - \ 'c:constants', - \ 'v:variables', - \ 't:types', - \ 'n:interfaces', - \ 'w:fields', - \ 'e:embedded', - \ 'm:methods', - \ 'r:constructor', - \ 'f:functions' - \ ], - \ 'sro' : '.', - \ 'kind2scope' : { - \ 't' : 'ctype', - \ 'n' : 'ntype' - \ }, - \ 'scope2kind' : { - \ 'ctype' : 't', - \ 'ntype' : 'n' - \ }, - \ 'ctagsbin' : 'gotags', - \ 'ctagsargs' : '-sort -silent' -\ } -let g:tagbar_type_typescript = { - \ 'ctagstype': 'typescript', - \ 'kinds': [ - \ 'c:classes', - \ 'n:modules', - \ 'f:functions', - \ 'v:variables', - \ 'v:varlambdas', - \ 'm:members', - \ 'i:interfaces', - \ 'e:enums', - \ ] -\ } - - " Autocompletion Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } -Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern' } -Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript' } -Plug 'zchee/deoplete-go', { 'do': 'make' } +Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } +Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } +Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } let g:deoplete#enable_at_startup = 1 " Crystal @@ -141,18 +87,12 @@ Plug 'rhysd/vim-crystal', { 'for': 'crystal' } Plug 'fatih/vim-go', { 'for': 'go' } let g:go_fmt_command = 'goimports' -" Node.js -Plug 'moll/vim-node', { 'for': 'javascript' } - " Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } " JSX Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } -" Wakatime -Plug 'wakatime/vim-wakatime' - " Initialize plugin system call plug#end() From 3a6571fbcaf1861543618320a1ab7c68ac9c35f5 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 11 May 2017 13:32:21 +0200 Subject: [PATCH 117/532] Remove ctags definition --- vim/.ctags | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 vim/.ctags diff --git a/vim/.ctags b/vim/.ctags deleted file mode 100644 index e67ea02d..00000000 --- a/vim/.ctags +++ /dev/null @@ -1,11 +0,0 @@ ---langdef=typescript ---langmap=typescript:.ts ---regex-typescript=/^[ \t]*(export([ \t]+abstract)?)?[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\3/c,classes/ ---regex-typescript=/^[ \t]*(export)?[ \t]*module[ \t]+([a-zA-Z0-9_]+)/\2/n,modules/ ---regex-typescript=/^[ \t]*(export)?[ \t]*function[ \t]+([a-zA-Z0-9_]+)/\2/f,functions/ ---regex-typescript=/^[ \t]*export[ \t]+var[ \t]+([a-zA-Z0-9_]+)/\1/v,variables/ ---regex-typescript=/^[ \t]*var[ \t]+([a-zA-Z0-9_]+)[ \t]*=[ \t]*function[ \t]*\(\)/\1/v,varlambdas/ ---regex-typescript=/^[ \t]*(export)?[ \t]*(public|private)[ \t]+(static)?[ \t]*([a-zA-Z0-9_]+)/\4/m,members/ ---regex-typescript=/^[ \t]*(export)?[ \t]*interface[ \t]+([a-zA-Z0-9_]+)/\2/i,interfaces/ ---regex-typescript=/^[ \t]*(export)?[ \t]*enum[ \t]+([a-zA-Z0-9_]+)/\2/e,enums/ ---regex-typescript=/^[ \t]*import[ \t]+([a-zA-Z0-9_]+)/\1/I,imports/ From ba38959953b4f11f0cb65388a6ea8379611da2e9 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 12 May 2017 09:27:06 +0200 Subject: [PATCH 118/532] Remove incorrect docs --- vim/.vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.vimrc b/vim/.vimrc index 42270dbb..9b20d0a3 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -17,7 +17,7 @@ let mapleader="," " Enable relative line numbers set relativenumber set number -" Use 2 spaces instead of tabs +" Use spaces instead of tabs set expandtab set tabstop=4 set softtabstop=4 From 6cbb8a066f806c171cdf34b2e0c39001a904ff3e Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 27 May 2017 09:36:29 +0200 Subject: [PATCH 119/532] Enable syntax highlighting for vim plugins file --- vim/{.vim-plugins => .plugins.vimrc} | 0 vim/.vimrc | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename vim/{.vim-plugins => .plugins.vimrc} (100%) diff --git a/vim/.vim-plugins b/vim/.plugins.vimrc similarity index 100% rename from vim/.vim-plugins rename to vim/.plugins.vimrc diff --git a/vim/.vimrc b/vim/.vimrc index 9b20d0a3..7172dcc6 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -63,4 +63,4 @@ if has("autocmd") endif " Import plugin configuration -source ~/.vim-plugins +source ~/.plugins.vimrc From ef016aa6a3563692f317a1176ab010bd4285da01 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 27 May 2017 10:05:14 +0200 Subject: [PATCH 120/532] Install go binaries when installing vim-go --- vim/.plugins.vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index e80a046e..471317bf 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -84,7 +84,7 @@ let g:deoplete#enable_at_startup = 1 Plug 'rhysd/vim-crystal', { 'for': 'crystal' } " Golang -Plug 'fatih/vim-go', { 'for': 'go' } +Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' ,'for': 'go' } let g:go_fmt_command = 'goimports' " Typescript From 28a53c5e9692524293896246789cf2771484fbb8 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 27 May 2017 10:28:08 +0200 Subject: [PATCH 121/532] Replace neomake with ALE --- vim/.plugins.vimrc | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 471317bf..80cfd600 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -18,21 +18,15 @@ Plug 'junegunn/limelight.vim' autocmd! User GoyoEnter nested call goyo_enter() autocmd! User GoyoLeave nested call goyo_leave() function! s:goyo_enter() - silent !tmux set status off - silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z - let g:neomake_place_signs=0 - sign unplace * set noshowcmd set scrolloff=999 + ALEDisable Limelight endfunction function! s:goyo_leave() - silent !tmux set status on - silent !tmux list-panes -F '\#F' | grep -q Z && tmux resize-pane -Z - let g:neomake_place_signs=1 - Neomake set showcmd set scrolloff=3 + ALEEnable Limelight! endfunction @@ -60,10 +54,9 @@ let g:NERDSpaceDelims = 1 Plug 'jiangmiao/auto-pairs' " Syntax Highlighting -Plug 'neomake/neomake' -if has("autocmd") - autocmd! BufWritePost,BufEnter * Neomake -endif +Plug 'w0rp/ale' +nmap (ale_previous_wrap) +nmap (ale_next_wrap) " Show Git indicators with line numbers Plug 'airblade/vim-gitgutter' From e33856ec690551c0171fc44f11d865cdebee3722 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 29 May 2017 10:21:20 +0200 Subject: [PATCH 122/532] Use Apache 2.0 license --- LICENSE | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/LICENSE b/LICENSE index cf6ba2d7..591d71bc 100644 --- a/LICENSE +++ b/LICENSE @@ -1,19 +1,13 @@ -Copyright (c) 2015 Tobias Fuhrimann +Copyright 2015 Tobias Fuhrimann -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + http://www.apache.org/licenses/LICENSE-2.0 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. From edf72606e0e8fda688fc5663bc104a350488218f Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 7 Jun 2017 09:43:47 +0200 Subject: [PATCH 123/532] Clean up old versions of Ruby gems --- bash/.functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.functions b/bash/.functions index 55ad0d60..633ad746 100644 --- a/bash/.functions +++ b/bash/.functions @@ -118,7 +118,7 @@ function pacu() { # Ruby if [ -x "$(command -v gem)" ]; then - (gem update --force) & + (gem update --force && gem cleanup) & ruby_pid="$!" fi From 1663e07e737f821145a3d2c8a434534579db8298 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 7 Jun 2017 18:05:28 +0200 Subject: [PATCH 124/532] Use brew bundle --- bash/.functions | 3 ++- homebrew/Brewfile | 60 ++++++++++++++++++++++++++++++++++++++++++++++ vim/.plugins.vimrc | 11 ++++----- 3 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 homebrew/Brewfile diff --git a/bash/.functions b/bash/.functions index 55ad0d60..c143d326 100644 --- a/bash/.functions +++ b/bash/.functions @@ -92,7 +92,8 @@ function pacu() { fi if [ -x "$(command -v brew)" ]; then brew update - brew upgrade + brew bundle --file=~/dotfiles/homebrew/Brewfile + brew bundle cleanup --force --file=~/dotfiles/homebrew/Brewfile brew cleanup fi wait "${mas_pid}" &> /dev/null diff --git a/homebrew/Brewfile b/homebrew/Brewfile new file mode 100644 index 00000000..dcba4323 --- /dev/null +++ b/homebrew/Brewfile @@ -0,0 +1,60 @@ +# Taps +tap "caskroom/cask" +tap "cloudfoundry/tap" +tap "go-delve/delve" +tap "homebrew/bundle" +tap "homebrew/core" +tap "neovim/neovim" + +# Languages +brew "go" +brew "node" +brew "crystal-lang" +brew "ruby" +brew "python3" + brew "sqlite" +brew "python" + +# Tools +brew "fzf" +brew "asciinema" +brew "git" +brew "htop" +brew "mas" +brew "reattach-to-user-namespace" +brew "shellcheck" +brew "stow" +brew "the_silver_searcher" +brew "tmux" + brew "openssl" +brew "tmate" +brew "wget" +brew "zsh" +brew "cmake" +brew "neovim/neovim/neovim" + brew "gettext" + brew "jemalloc" + brew "libtermkey" + brew "libuv" + brew "libvterm" + brew "unibilium" +brew "cloudfoundry/tap/cf-cli" +brew "go-delve/delve/delve" + +# Desktop Applications +cask 'google-chrome' +cask 'spotify' +cask 'alfred' +cask 'docker' +cask 'imageoptim' +cask 'postman' +cask 'appcleaner' +cask 'virtualbox' + +mas "1Password", id: 443987910 +mas "BetterSnapTool", id: 417375580 +mas "Caffeine", id: 411246225 +mas "Pixelmator", id: 407963104 +mas "PopClip", id: 445189367 +mas "Sip", id: 507257563 +mas "The Unarchiver", id: 425424353 diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 80cfd600..f61b8ce9 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -1,7 +1,7 @@ " Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) call plug#begin('~/.local/share/nvim/plugged') -" Color scheme +" seoul256 Color scheme Plug 'junegunn/seoul256.vim' let g:seoul256_background = 233 if has("autocmd") @@ -73,19 +73,18 @@ Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript', 'fo Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } let g:deoplete#enable_at_startup = 1 -" Crystal +" Crystal language support Plug 'rhysd/vim-crystal', { 'for': 'crystal' } -" Golang +" Go language support Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' ,'for': 'go' } let g:go_fmt_command = 'goimports' -" Typescript +" Typescript language support Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } -" JSX +" JSX language support Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } " Initialize plugin system call plug#end() - From 974755850cc024d5b59fc761578e82a56f09c482 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 7 Jun 2017 18:22:37 +0200 Subject: [PATCH 125/532] Add msgpack dependency to Brewfile --- homebrew/Brewfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/homebrew/Brewfile b/homebrew/Brewfile index dcba4323..4bbe165d 100644 --- a/homebrew/Brewfile +++ b/homebrew/Brewfile @@ -1,9 +1,9 @@ # Taps +tap "homebrew/core" tap "caskroom/cask" +tap "homebrew/bundle" tap "cloudfoundry/tap" tap "go-delve/delve" -tap "homebrew/bundle" -tap "homebrew/core" tap "neovim/neovim" # Languages @@ -37,6 +37,7 @@ brew "neovim/neovim/neovim" brew "libtermkey" brew "libuv" brew "libvterm" + brew "msgpack" brew "unibilium" brew "cloudfoundry/tap/cf-cli" brew "go-delve/delve/delve" From 801f21f4338c35cde49bca102deb3d94f867bd87 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 7 Jun 2017 23:51:11 +0200 Subject: [PATCH 126/532] Add Dropbox --- homebrew/Brewfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/homebrew/Brewfile b/homebrew/Brewfile index 4bbe165d..1d590bce 100644 --- a/homebrew/Brewfile +++ b/homebrew/Brewfile @@ -43,13 +43,15 @@ brew "cloudfoundry/tap/cf-cli" brew "go-delve/delve/delve" # Desktop Applications -cask 'google-chrome' -cask 'spotify' cask 'alfred' +cask 'appcleaner' cask 'docker' +cask 'dropbox' +cask 'google-chrome' cask 'imageoptim' +cask 'iterm2' cask 'postman' -cask 'appcleaner' +cask 'spotify' cask 'virtualbox' mas "1Password", id: 443987910 From 0b56698de05489871e2a0be35748fe9b4270d425 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 8 Jun 2017 16:50:55 +0200 Subject: [PATCH 127/532] Don't show .git folder in NERDTree --- vim/.plugins.vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index f61b8ce9..8b335e9c 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -43,7 +43,7 @@ Plug 'tpope/vim-surround' " Source tree Plug 'scrooloose/nerdtree' let NERDTreeShowHidden = 1 -let NERDTreeIgnore = ['.DS_Store'] +let NERDTreeIgnore = ['.DS_Store','.git$'] map :NERDTreeToggle " Toggle Comments From 8eae9f55379488e2fdf5856eabbeda588b5454bb Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 18 Jul 2017 09:33:00 -0700 Subject: [PATCH 128/532] Use new official neovim brew formula --- homebrew/Brewfile | 5 +++-- vim/.plugins.vimrc | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/homebrew/Brewfile b/homebrew/Brewfile index 1d590bce..5e6df85f 100644 --- a/homebrew/Brewfile +++ b/homebrew/Brewfile @@ -4,7 +4,6 @@ tap "caskroom/cask" tap "homebrew/bundle" tap "cloudfoundry/tap" tap "go-delve/delve" -tap "neovim/neovim" # Languages brew "go" @@ -30,8 +29,9 @@ brew "tmux" brew "tmate" brew "wget" brew "zsh" + brew "pcre" brew "cmake" -brew "neovim/neovim/neovim" +brew "neovim" brew "gettext" brew "jemalloc" brew "libtermkey" @@ -41,6 +41,7 @@ brew "neovim/neovim/neovim" brew "unibilium" brew "cloudfoundry/tap/cf-cli" brew "go-delve/delve/delve" +brew "mongodb" # Desktop Applications cask 'alfred' diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 8b335e9c..07579e72 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -71,7 +71,9 @@ Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } -let g:deoplete#enable_at_startup = 1 +if has('nvim') + let g:deoplete#enable_at_startup = 1 +endif " Crystal language support Plug 'rhysd/vim-crystal', { 'for': 'crystal' } @@ -82,6 +84,8 @@ let g:go_fmt_command = 'goimports' " Typescript language support Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } +Plug 'Shougo/vimproc.vim', { 'do': 'make', 'for': 'typescript' } +Plug 'Quramy/tsuquyomi', { 'for': 'typescript' } " JSX language support Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } From c5d0de4d59beb3f9a7492f23179236acce30e6cf Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 24 Jul 2017 14:38:24 +0200 Subject: [PATCH 129/532] Add jq --- homebrew/Brewfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/homebrew/Brewfile b/homebrew/Brewfile index 5e6df85f..6e1d623e 100644 --- a/homebrew/Brewfile +++ b/homebrew/Brewfile @@ -42,6 +42,8 @@ brew "neovim" brew "cloudfoundry/tap/cf-cli" brew "go-delve/delve/delve" brew "mongodb" +brew "jq" + brew "oniguruma" # Desktop Applications cask 'alfred' From 0dae1a81c986b8011c8bbfb6cee6409d366c11b3 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 25 Jul 2017 11:46:56 +0200 Subject: [PATCH 130/532] Make IDE function work if in tmux already --- bash/.functions | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/bash/.functions b/bash/.functions index 3ee09b0a..04d581fe 100644 --- a/bash/.functions +++ b/bash/.functions @@ -4,7 +4,7 @@ function mkcd() { } # cd into directory with fzf -fcd() { +function fcd() { local dir dir=$(find ${1:-.} -path '*/\.*' -prune \ -o -type d -print 2> /dev/null | fzf +m) && @@ -12,7 +12,7 @@ fcd() { } # Checkout branches or tags with fzf -fco() { +function fco() { local tags branches target tags=$(git tag | awk '{print "\x1b[31;1mtag\x1b[m\t" $1}') || return branches=$( @@ -26,7 +26,7 @@ fco() { } # fkill - kill process -fkill() { +function fkill() { local pid pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}') @@ -36,7 +36,7 @@ fkill() { } # fshow - git commit browser -fshow() { +function fshow() { git log --graph --color=always \ --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" | fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \ @@ -53,11 +53,18 @@ function ide() { cd "$1" || exit fi - tmux new-session -d -s ide 'vim +NERDTree' - tmux split-window -v -p 10 - tmux split-window -h - tmux select-pane -t 0 - tmux attach-session -d -t ide + if [ ! -n "${TMUX}" ]; then + tmux new-session -d -s ide 'vim +NERDTree' + tmux split-window -v -p 10 + tmux split-window -h + tmux select-pane -t 0 + tmux attach-session -d -t ide + else + tmux split-window -v -p 10 + tmux split-window -h + tmux select-pane -t 0 + vim +NERDTree + fi } # System update From a859a5b62e4307ede78a4bef4b55d574ff3842de Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 27 Jul 2017 21:53:17 +0200 Subject: [PATCH 131/532] Create init file --- homebrew/Brewfile => Brewfile | 1 - README.md | 40 +++++--------------- bash/.functions | 4 +- init.sh | 71 +++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 33 deletions(-) rename homebrew/Brewfile => Brewfile (98%) create mode 100755 init.sh diff --git a/homebrew/Brewfile b/Brewfile similarity index 98% rename from homebrew/Brewfile rename to Brewfile index 6e1d623e..e44b32f5 100644 --- a/homebrew/Brewfile +++ b/Brewfile @@ -22,7 +22,6 @@ brew "htop" brew "mas" brew "reattach-to-user-namespace" brew "shellcheck" -brew "stow" brew "the_silver_searcher" brew "tmux" brew "openssl" diff --git a/README.md b/README.md index 92cb937e..d9e11142 100644 --- a/README.md +++ b/README.md @@ -4,38 +4,18 @@ My personal dotfiles I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescriptlang.org/), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. -## Usage - -I use [Stow](https://www.gnu.org/software/stow/) to symlink the files from this repo into my home directory. - -1. Download and install stow -1. Clone this repo to your home folder -1. Run `cd "${HOME}/dotfiles"` -1. Run `stow vim` -1. Repeat for all needed folders - -## Prerequisites +## Installation -### General +1. Run the following command: -* Run the above commands to get these dotfiles in the right place -* Install [fzf](https://github.com/junegunn/fzf) -* Install [diff-so-fancy](https://github.com/so-fancy/diff-so-fancy) + ```shell + $ bash <(curl -s http://mywebsite.com/myscript.txt) + ``` -### Vim +1. Run command again if Xcode Command Line Tools needed to be installed -* Install [NeoVim](https://github.com/neovim/neovim/wiki/Installing-Neovim) and run `ln -s "${HOME}/dotfiles/vim/.vimrc" "${HOME}/.config/nvim/init.vim"` -* Install [vim-plug](https://github.com/junegunn/vim-plug#installation) -* Install [Python 3](https://www.python.org/downloads/) and run `pip3 install --upgrade neovim` - -### macOS recommendations - -* Use [iTerm2](https://www.iterm2.com/) -* Install [mas](https://github.com/mas-cli/mas) -* Install [Homebrew](https://brew.sh/) -* Run `brew install reattach-to-user-namespace` to work with tmux - -### Linux recommendations +## Usage -* Use [Arch Linux](https://www.archlinux.org/) or [Antergos](https://antergos.com/) -* Install [Yaourt](https://archlinux.fr/yaourt-en) +* `pacu`: Installs everything in `Brewfile` and removes everything else +* `nvim`: Starts neovim with all plugins +* and many more... diff --git a/bash/.functions b/bash/.functions index 04d581fe..a02ff1b7 100644 --- a/bash/.functions +++ b/bash/.functions @@ -99,8 +99,8 @@ function pacu() { fi if [ -x "$(command -v brew)" ]; then brew update - brew bundle --file=~/dotfiles/homebrew/Brewfile - brew bundle cleanup --force --file=~/dotfiles/homebrew/Brewfile + brew bundle --file=~/dotfiles/Brewfile + brew bundle cleanup --force --file=~/dotfiles/Brewfile brew cleanup fi wait "${mas_pid}" &> /dev/null diff --git a/init.sh b/init.sh new file mode 100755 index 00000000..5940f38e --- /dev/null +++ b/init.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +# This script installs these dotfiles. + +case "$(uname)" in + +# On Linux, use the respective package manager +'Darwin') + + # Install Xcode Command Line Tools if not installed + if ! xcode-select -p &> /dev/null; then + xcode-select --install + echo 'Xcode Command Line Tools not installed yet. Please run init script again after installation has finished.' + exit + fi + + # Install Homebrew if not installed + if [ ! -x "$(command -v brew)" ]; then + /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + fi + + # Install Homebrew Bundle + brew tap Homebrew/bundle + + # Install git if not installed + if [ ! -x "$(command -v git)" ]; then + brew install git + fi + + # git clone these dotfiles if not done yet + if [ ! -d ~/dotfiles ]; then + git clone git@github.com:mastertinner/dotfiles.git ~ + fi + + # Install stow if not installed + if [ ! -x "$(command -v stow)" ]; then + brew install stow + fi + # Stow subdirectories of dotfiles + for dir in ~/dotfiles/*/ + do + dir=${dir%*/} + stow "${dir}" + done + + # Install Python3 and pip3 if not installed + if [ ! -x "$(command -v pip3)" ]; then + brew install python3 + fi + # Install the Python neovim package + pip3 install --upgrade --user neovim + + # Install vim-plug + curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + + # Run full system upgrade + source ~/dotfiles/bash/.functions + pacu + + # Install diff-so-fancy + npm install --global diff-so-fancy + + echo "Dotfiles successfully initialized" + ;; + +# Default +*) + echo "OS not supported. Please install manually." + ;; +esac From c8e2dd8eefef58af82ff7d66b128ee7c9c198dc5 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 27 Jul 2017 22:16:27 +0200 Subject: [PATCH 132/532] Fix stow command during init --- README.md | 6 +++--- init.sh | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d9e11142..4ca3ac62 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,16 @@ I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescrip ## Installation -1. Run the following command: +1. Run the following command (warning: this may install and/or remove software!): ```shell - $ bash <(curl -s http://mywebsite.com/myscript.txt) + $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) ``` 1. Run command again if Xcode Command Line Tools needed to be installed ## Usage -* `pacu`: Installs everything in `Brewfile` and removes everything else +* `pacu`: Installs and updates everything in `Brewfile` and removes everything else * `nvim`: Starts neovim with all plugins * and many more... diff --git a/init.sh b/init.sh index 5940f38e..c032df63 100755 --- a/init.sh +++ b/init.sh @@ -39,8 +39,7 @@ case "$(uname)" in # Stow subdirectories of dotfiles for dir in ~/dotfiles/*/ do - dir=${dir%*/} - stow "${dir}" + stow --dir ~/dotfiles "$(basename "${dir}")" done # Install Python3 and pip3 if not installed @@ -61,7 +60,7 @@ case "$(uname)" in # Install diff-so-fancy npm install --global diff-so-fancy - echo "Dotfiles successfully initialized" + echo 'Dotfiles successfully initialized' ;; # Default From 2fbc0413d5f4517fc704a067cff719d32b9342f9 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 27 Jul 2017 22:28:05 +0200 Subject: [PATCH 133/532] Extend warning --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ca3ac62..08be8bf7 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescrip ## Installation -1. Run the following command (warning: this may install and/or remove software!): +1. Run the following command (warning: this may install and/or remove software and change your configs!): ```shell $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) From 1da57533b70c616a123203ccf7522ac2ec90ec7a Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 28 Jul 2017 09:39:58 +0200 Subject: [PATCH 134/532] Make init script more user friendly --- init.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/init.sh b/init.sh index c032df63..a0eb88f4 100755 --- a/init.sh +++ b/init.sh @@ -9,8 +9,15 @@ case "$(uname)" in # Install Xcode Command Line Tools if not installed if ! xcode-select -p &> /dev/null; then - xcode-select --install - echo 'Xcode Command Line Tools not installed yet. Please run init script again after installation has finished.' + read -p 'Xcode Command Line Tools not installed. You will have to run the script again after successfully installing them. Install now? (Y/n)' -r + echo + if [[ ! $REPLY =~ ^[Nn]$ ]] + then + xcode-select --install + echo 'Please run the script again after the installation has finished' + else + echo 'Please install the Xcode Command Line Tools and run then script again.' + fi exit fi From 8c5fbac24c7a45c38ceabebf4c66f8f742b048e2 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 31 Jul 2017 14:19:23 +0200 Subject: [PATCH 135/532] Check if vim has autocmd and python before using --- vim/.plugins.vimrc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 07579e72..e26ee988 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -15,8 +15,10 @@ let g:user_emmet_leader_key='' " Goyo mode for focused writing Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' -autocmd! User GoyoEnter nested call goyo_enter() -autocmd! User GoyoLeave nested call goyo_leave() +if has("autocmd") + autocmd! User GoyoEnter nested call goyo_enter() + autocmd! User GoyoLeave nested call goyo_leave() +endif function! s:goyo_enter() set noshowcmd set scrolloff=999 @@ -71,7 +73,7 @@ Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } -if has('nvim') +if has('nvim') && has('python3') let g:deoplete#enable_at_startup = 1 endif From 8deb55d2b5c9286a00c2321804c9a3c60183c726 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 3 Aug 2017 07:56:09 +0200 Subject: [PATCH 136/532] Manage fzf separately for vim and system --- vim/.plugins.vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index e26ee988..67f5e8a8 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -64,7 +64,7 @@ nmap (ale_next_wrap) Plug 'airblade/vim-gitgutter' " Fuzzy finder -Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } +Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } Plug 'junegunn/fzf.vim' nnoremap :Files From 56d29bce92c8a64645c233d8406994fe97e4f752 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 4 Aug 2017 10:58:21 +0200 Subject: [PATCH 137/532] Add instructions about how to fork --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 08be8bf7..48ca1c61 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescrip ## Installation -1. Run the following command (warning: this may install and/or remove software and change your configs!): +1. Run the following command: + + **WARNING: This may install and/or remove software and change your configs!** ```shell $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) @@ -19,3 +21,10 @@ I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescrip * `pacu`: Installs and updates everything in `Brewfile` and removes everything else * `nvim`: Starts neovim with all plugins * and many more... + +## Customize + +1. Fork this repo +1. Change the `git clone` command in `init.sh` to use your own repo +1. Change `Brewfile` to your liking +1. Run the above installation command substituting the repo URL with your own From be67fc659bb32864a16d168e4cc80ab6728dd011 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 4 Aug 2017 12:44:17 +0200 Subject: [PATCH 138/532] Add furthre instructions --- README.md | 5 +++++ init.sh | 2 ++ 2 files changed, 7 insertions(+) diff --git a/README.md b/README.md index 48ca1c61..890b7fcc 100644 --- a/README.md +++ b/README.md @@ -26,5 +26,10 @@ I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescrip 1. Fork this repo 1. Change the `git clone` command in `init.sh` to use your own repo +1. Change the name and email address in `git/.gitconfig` 1. Change `Brewfile` to your liking +1. If you have apps installed which you didn't install through `brew cask` but that you now added to `Brewfile` as `cask`, you need to remove the respective `.app` file from your applications folder. + + Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. + 1. Run the above installation command substituting the repo URL with your own diff --git a/init.sh b/init.sh index a0eb88f4..234aad11 100755 --- a/init.sh +++ b/init.sh @@ -2,6 +2,8 @@ # This script installs these dotfiles. +set -e -u + case "$(uname)" in # On Linux, use the respective package manager From 091377073b380b5abe203001c5cf9ea53b53e2e8 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 4 Aug 2017 13:13:48 +0200 Subject: [PATCH 139/532] Remove -e and -u flags from init script --- init.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/init.sh b/init.sh index 234aad11..a0eb88f4 100755 --- a/init.sh +++ b/init.sh @@ -2,8 +2,6 @@ # This script installs these dotfiles. -set -e -u - case "$(uname)" in # On Linux, use the respective package manager From f1b27b65f86c2615b76ee35f2831c8d7a11d3cf5 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 6 Aug 2017 22:21:17 +0200 Subject: [PATCH 140/532] Add Rambox and make go tooling more useful --- Brewfile | 1 + vim/.plugins.vimrc | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/Brewfile b/Brewfile index e44b32f5..99c2d275 100644 --- a/Brewfile +++ b/Brewfile @@ -53,6 +53,7 @@ cask 'google-chrome' cask 'imageoptim' cask 'iterm2' cask 'postman' +cask 'rambox' cask 'spotify' cask 'virtualbox' diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 67f5e8a8..adadb8cf 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -83,6 +83,20 @@ Plug 'rhysd/vim-crystal', { 'for': 'crystal' } " Go language support Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' ,'for': 'go' } let g:go_fmt_command = 'goimports' +let g:go_auto_type_info = 1 +" run :GoBuild or :GoTestCompile based on the go file +function! s:build_go_files() + let l:file = expand('%') + if l:file =~# '^\f\+_test\.go$' + call go#test#Test(0, 1) + elseif l:file =~# '^\f\+\.go$' + call go#cmd#Build(0) + endif +endfunction +if has("autocmd") + autocmd FileType go nmap b :call build_go_files() + autocmd FileType go nmap t (go-test) +endif " Typescript language support Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } From 963f2008111917da230684925ce9e8eb67968786 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 7 Aug 2017 16:31:31 +0200 Subject: [PATCH 141/532] Improve Go binary update process --- Brewfile | 1 + bash/update-go.sh | 20 ++++++++++++++++---- bash/update-js.sh | 12 ++++++------ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Brewfile b/Brewfile index 99c2d275..426ef9b9 100644 --- a/Brewfile +++ b/Brewfile @@ -16,6 +16,7 @@ brew "python" # Tools brew "fzf" +brew "dep" brew "asciinema" brew "git" brew "htop" diff --git a/bash/update-go.sh b/bash/update-go.sh index 9d6d3551..88f3b6cf 100755 --- a/bash/update-go.sh +++ b/bash/update-go.sh @@ -1,7 +1,19 @@ #!/bin/bash -if [ -x "$(command -v binstale)" ]; then - for d in $(binstale | grep 'build ID mismatch'); do - ( if [[ $d == *'/'* ]]; then go get -u "$d"; fi ) - done +set -u + +if [ -x "$(command -v go)" ]; then + if [ ! -x "$(command -v binstale)" ]; then + go get -u github.com/shurcooL/binstale + fi + + lines=$(binstale | grep 'stale: ') + + while read -r line; do + if [ ! -z "${line}" ]; then + uri=$(echo "${line}" | awk -F ' ' '{print $2}') + echo "Updating Go binary ${uri}" + go get -u "${uri}" + fi + done < <(echo "${lines}") fi diff --git a/bash/update-js.sh b/bash/update-js.sh index 5075425f..3a4a9792 100755 --- a/bash/update-js.sh +++ b/bash/update-js.sh @@ -1,10 +1,10 @@ #!/bin/sh +set -u + js_dir="${HOME}/js" -if [ -d "${js_dir}" ]; then - cd "${js_dir}" - for d in */ ; do - ( cd "$d" && git pull && npm update && npm prune && npm outdated ) - done -fi +cd "${js_dir}" || exit +for d in */ ; do + ( cd "$d" && git pull && npm update && npm prune && npm outdated ) +done From b93dc410660995df9ec926efd669b17627fbd3e4 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 11 Aug 2017 18:19:59 +0200 Subject: [PATCH 142/532] Add tpope/vim-sleuth to vim plugins --- vim/.plugins.vimrc | 4 ++++ vim/.vimrc | 13 ------------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index adadb8cf..140720e5 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -77,6 +77,9 @@ if has('nvim') && has('python3') let g:deoplete#enable_at_startup = 1 endif +" Detect indent settings +Plug 'tpope/vim-sleuth' + " Crystal language support Plug 'rhysd/vim-crystal', { 'for': 'crystal' } @@ -105,6 +108,7 @@ Plug 'Quramy/tsuquyomi', { 'for': 'typescript' } " JSX language support Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } +let g:jsx_ext_required = 0 " Initialize plugin system call plug#end() diff --git a/vim/.vimrc b/vim/.vimrc index 7172dcc6..e990c03b 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -17,11 +17,6 @@ let mapleader="," " Enable relative line numbers set relativenumber set number -" Use spaces instead of tabs -set expandtab -set tabstop=4 -set softtabstop=4 -set shiftwidth=4 " Highlight searches set hlsearch " Ignore case of searches @@ -46,14 +41,6 @@ set spelllang=en_us if has("autocmd") " Enable file type detection filetype on - " Treat .json files as .js - autocmd BufNewFile,BufRead *.json setfiletype json syntax=javascript - " Treat .md files as Markdown - autocmd BufNewFile,BufRead *.md setlocal filetype=markdown - " Use tabs with width 8 for Go - autocmd FileType go setlocal ts=8 sts=8 sw=8 noexpandtab - " Use tabs for make files - autocmd FileType make setlocal ts=4 sts=4 sw=4 noexpandtab " Strip trailing whitespaces on save autocmd BufWritePre * %s/\s\+$//e " Unify indentation on save From 50fed19d7f197149e510b3af6a6c00e48434b76c Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 13 Aug 2017 13:39:36 +0200 Subject: [PATCH 143/532] Use vimrc as Neovim config --- init.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/init.sh b/init.sh index a0eb88f4..76c17d63 100755 --- a/init.sh +++ b/init.sh @@ -49,6 +49,9 @@ case "$(uname)" in stow --dir ~/dotfiles "$(basename "${dir}")" done + # Use vimrc as Neovim config + ln -s ~/.vimrc ~/.config/nvim/init.vim + # Install Python3 and pip3 if not installed if [ ! -x "$(command -v pip3)" ]; then brew install python3 From 999ff9da574d86e018ee87cf33a11acc3364540e Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 13 Aug 2017 14:00:07 +0200 Subject: [PATCH 144/532] Make oh-my-zsh path OS dependent --- init.sh | 9 ++++++++- zsh/.zshrc | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/init.sh b/init.sh index 76c17d63..16e6f2da 100755 --- a/init.sh +++ b/init.sh @@ -68,7 +68,14 @@ case "$(uname)" in pacu # Install diff-so-fancy - npm install --global diff-so-fancy + if [ ! -x "$(command -v pip3)" ]; then + npm install --global diff-so-fancy + fi + + # Use zsh + if [ ! -x "$(command -v zsh)" ]; then + chsh -s "$(which zsh)" + fi echo 'Dotfiles successfully initialized' ;; diff --git a/zsh/.zshrc b/zsh/.zshrc index 7aef1ee9..52dc5445 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -1,5 +1,12 @@ # Path to your oh-my-zsh installation. -export ZSH=$HOME/.oh-my-zsh +case "$(uname)" in +'Linux') + export ZSH=/usr/share/oh-my-zsh + ;; +'Darwin') + export ZSH=$HOME/.oh-my-zsh + ;; +esac # Set name of the theme to load. # Look in ~/.oh-my-zsh/themes/ From 9b15172a0a795dfa1e1da2d07b3da4eb98797cd5 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 13 Aug 2017 23:14:09 +0200 Subject: [PATCH 145/532] Add init script for Arch Linux --- init.sh | 83 ++++++++++++++++++++++++++++++++++++++++++- tmux/.tmux.conf | 4 +-- tmux/.tmux.macos.conf | 1 + 3 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 tmux/.tmux.macos.conf diff --git a/init.sh b/init.sh index 16e6f2da..b4367a2f 100755 --- a/init.sh +++ b/init.sh @@ -50,6 +50,7 @@ case "$(uname)" in done # Use vimrc as Neovim config + rm ~/.config/nvim/init.vim ln -s ~/.vimrc ~/.config/nvim/init.vim # Install Python3 and pip3 if not installed @@ -67,8 +68,87 @@ case "$(uname)" in source ~/dotfiles/bash/.functions pacu + # Symlink Neovim to vim + sudo rm /usr/bin/vim + sudo ln -s /usr/bin/nvim /usr/bin/vim + # Install diff-so-fancy - if [ ! -x "$(command -v pip3)" ]; then + if [ ! -x "$(command -v npm)" ]; then + npm install --global diff-so-fancy + fi + + # Use zsh + if [ ! -x "$(command -v zsh)" ]; then + chsh -s "$(which zsh)" + fi + + echo 'Dotfiles successfully initialized' + ;; + +'Linux') + if [ ! -x "$(command -v pacman)" ]; then + echo 'Only Arch Linux is currently supported' + exit 1 + fi + + # Install git if not installed + if [ ! -x "$(command -v git)" ]; then + sudo pacman -S git --noconfirm + fi + + # git clone these dotfiles if not done yet + if [ ! -d ~/dotfiles ]; then + git clone https://github.com/mastertinner/dotfiles.git + fi + + # Install stow if not installed + if [ ! -x "$(command -v stow)" ]; then + sudo pacman -S stow --noconfirm + fi + # Stow subdirectories of dotfiles + for dir in ~/dotfiles/*/; do + stow --dir ~/dotfiles "$(basename "${dir}")" + done + + # Install vim-plug + curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + + # Use vimrc as Neovim config + rm ~/.config/nvim/init.vim + ln -s ~/.vimrc ~/.config/nvim/init.vim + + # Install tools + sudo pacman -S --noconfirm \ + tmux \ + neovim \ + python-neovim \ + zsh \ + go \ + nodejs \ + npm \ + fzf \ + the_silver_searcher + yaourt -S --noconfirm \ + oh-my-zsh-git \ + spotify \ + cloudfoundry-cli + + # Change npm folder + if [ ! -x "$(command -v npm)" ]; then + npm config set prefix ~ + fi + + # Run full system upgrade + source ~/dotfiles/bash/.functions + pacu + + # Symlink Neovim to vim + sudo rm /usr/bin/vim + sudo ln -s /usr/bin/nvim /usr/bin/vim + + # Install diff-so-fancy + if [ ! -x "$(command -v npm)" ]; then npm install --global diff-so-fancy fi @@ -83,5 +163,6 @@ case "$(uname)" in # Default *) echo "OS not supported. Please install manually." + exit 1 ;; esac diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 2dd58747..8182491f 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -26,5 +26,5 @@ bind c new-window -c "${HOME}" bind '"' split-window -v -c '#{pane_current_path}' bind % split-window -h -c '#{pane_current_path}' -# Allow to use user namespace out of tmux -set -g default-command "reattach-to-user-namespace -l ${SHELL}" +# Allow to use user namespace out of tmux on macOS +if-shell 'test "$(uname)" = "Darwin"' 'source .tmux.macos.conf' diff --git a/tmux/.tmux.macos.conf b/tmux/.tmux.macos.conf new file mode 100644 index 00000000..e10c33a7 --- /dev/null +++ b/tmux/.tmux.macos.conf @@ -0,0 +1 @@ +set -g default-command "reattach-to-user-namespace -l ${SHELL}" From 807bc765062bee34a65cff4d5299eeb9fd3ebc40 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 13 Aug 2017 23:26:19 +0200 Subject: [PATCH 146/532] Remove existing config files before using stow --- init.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/init.sh b/init.sh index b4367a2f..6ecce756 100755 --- a/init.sh +++ b/init.sh @@ -43,6 +43,9 @@ case "$(uname)" in if [ ! -x "$(command -v stow)" ]; then brew install stow fi + # Remove existing config files + rm ~/.bashrc + rm ~/.bash_profile # Stow subdirectories of dotfiles for dir in ~/dotfiles/*/ do @@ -105,6 +108,9 @@ case "$(uname)" in if [ ! -x "$(command -v stow)" ]; then sudo pacman -S stow --noconfirm fi + # Remove existing config files + rm ~/.bashrc + rm ~/.bash_profile # Stow subdirectories of dotfiles for dir in ~/dotfiles/*/; do stow --dir ~/dotfiles "$(basename "${dir}")" @@ -114,10 +120,6 @@ case "$(uname)" in curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - # Use vimrc as Neovim config - rm ~/.config/nvim/init.vim - ln -s ~/.vimrc ~/.config/nvim/init.vim - # Install tools sudo pacman -S --noconfirm \ tmux \ @@ -139,6 +141,10 @@ case "$(uname)" in npm config set prefix ~ fi + # Use vimrc as Neovim config + rm ~/.config/nvim/init.vim + ln -s ~/.vimrc ~/.config/nvim/init.vim + # Run full system upgrade source ~/dotfiles/bash/.functions pacu From 93e663ec85236dae100954dc2342f4faf8575b5c Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 13 Aug 2017 23:37:19 +0200 Subject: [PATCH 147/532] Add go-tools for Arch Linux --- init.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/init.sh b/init.sh index 6ecce756..ba69770f 100755 --- a/init.sh +++ b/init.sh @@ -127,6 +127,7 @@ case "$(uname)" in python-neovim \ zsh \ go \ + go-tools \ nodejs \ npm \ fzf \ From 864cb35adc1edf36e1a3d2cb5f2ab35585cc2fde Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 13 Aug 2017 23:51:14 +0200 Subject: [PATCH 148/532] Create nvim folder if it doesn't exist --- init.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/init.sh b/init.sh index ba69770f..700a9f94 100755 --- a/init.sh +++ b/init.sh @@ -53,6 +53,7 @@ case "$(uname)" in done # Use vimrc as Neovim config + mkdir -p ~/.config/nvim rm ~/.config/nvim/init.vim ln -s ~/.vimrc ~/.config/nvim/init.vim @@ -143,6 +144,7 @@ case "$(uname)" in fi # Use vimrc as Neovim config + mkdir -p ~/.config/nvim rm ~/.config/nvim/init.vim ln -s ~/.vimrc ~/.config/nvim/init.vim From 7747a3b317486523cc03f23482ca4080bd158e90 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 13 Aug 2017 23:53:22 +0200 Subject: [PATCH 149/532] Fix typo --- init.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init.sh b/init.sh index 700a9f94..e0789279 100755 --- a/init.sh +++ b/init.sh @@ -139,7 +139,7 @@ case "$(uname)" in cloudfoundry-cli # Change npm folder - if [ ! -x "$(command -v npm)" ]; then + if [ -x "$(command -v npm)" ]; then npm config set prefix ~ fi From 1f3ec5aafd91b4e6d702d8296573e30175a6ccd0 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 14 Aug 2017 00:02:24 +0200 Subject: [PATCH 150/532] Only install packages if needed --- init.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/init.sh b/init.sh index e0789279..9367503e 100755 --- a/init.sh +++ b/init.sh @@ -97,7 +97,7 @@ case "$(uname)" in # Install git if not installed if [ ! -x "$(command -v git)" ]; then - sudo pacman -S git --noconfirm + sudo pacman -S git --noconfirm --needed fi # git clone these dotfiles if not done yet @@ -107,7 +107,7 @@ case "$(uname)" in # Install stow if not installed if [ ! -x "$(command -v stow)" ]; then - sudo pacman -S stow --noconfirm + sudo pacman -S stow --noconfirm --needed fi # Remove existing config files rm ~/.bashrc @@ -122,7 +122,7 @@ case "$(uname)" in https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # Install tools - sudo pacman -S --noconfirm \ + sudo pacman -S --noconfirm --needed \ tmux \ neovim \ python-neovim \ @@ -133,7 +133,7 @@ case "$(uname)" in npm \ fzf \ the_silver_searcher - yaourt -S --noconfirm \ + yaourt -S --noconfirm --needed \ oh-my-zsh-git \ spotify \ cloudfoundry-cli From 1aaf75d3b050a67b269ab8f25051393e550245c3 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 14 Aug 2017 10:39:04 +0200 Subject: [PATCH 151/532] Update pacman databases before installing packages --- init.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/init.sh b/init.sh index 9367503e..ce92bd6f 100755 --- a/init.sh +++ b/init.sh @@ -96,9 +96,7 @@ case "$(uname)" in fi # Install git if not installed - if [ ! -x "$(command -v git)" ]; then - sudo pacman -S git --noconfirm --needed - fi + sudo pacman -Syu git --noconfirm --needed # git clone these dotfiles if not done yet if [ ! -d ~/dotfiles ]; then @@ -106,9 +104,7 @@ case "$(uname)" in fi # Install stow if not installed - if [ ! -x "$(command -v stow)" ]; then - sudo pacman -S stow --noconfirm --needed - fi + sudo pacman -Syu stow --noconfirm --needed # Remove existing config files rm ~/.bashrc rm ~/.bash_profile @@ -122,7 +118,7 @@ case "$(uname)" in https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # Install tools - sudo pacman -S --noconfirm --needed \ + sudo pacman -Syu --noconfirm --needed \ tmux \ neovim \ python-neovim \ @@ -133,7 +129,7 @@ case "$(uname)" in npm \ fzf \ the_silver_searcher - yaourt -S --noconfirm --needed \ + yaourt -Sy --noconfirm --needed \ oh-my-zsh-git \ spotify \ cloudfoundry-cli From b860742d3478d00ff8a41a980debfd68631c6ef9 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 14 Aug 2017 11:19:02 +0200 Subject: [PATCH 152/532] Safely remove files --- bash/update-js.sh | 11 +++++++---- init.sh | 44 ++++++++++++++++++++++++++++++-------------- zsh/.zshrc | 6 ------ 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/bash/update-js.sh b/bash/update-js.sh index 3a4a9792..29645e2a 100755 --- a/bash/update-js.sh +++ b/bash/update-js.sh @@ -4,7 +4,10 @@ set -u js_dir="${HOME}/js" -cd "${js_dir}" || exit -for d in */ ; do - ( cd "$d" && git pull && npm update && npm prune && npm outdated ) -done + +if [ -d "${js_dir}" ]; then + cd "${js_dir}" || exit + for d in */ ; do + ( cd "$d" && git pull && npm update && npm prune && npm outdated ) + done +fi diff --git a/init.sh b/init.sh index ce92bd6f..1ace1521 100755 --- a/init.sh +++ b/init.sh @@ -44,8 +44,12 @@ case "$(uname)" in brew install stow fi # Remove existing config files - rm ~/.bashrc - rm ~/.bash_profile + if [ -f ~/.bashrc ]; then + rm ~/.bashrc + fi + if [ -f ~/.bash_profile ]; then + rm ~/.bash_profile + fi # Stow subdirectories of dotfiles for dir in ~/dotfiles/*/ do @@ -53,8 +57,10 @@ case "$(uname)" in done # Use vimrc as Neovim config + if [ -f ~/.config/nvim/init.vim ]; then + rm ~/.config/nvim/init.vim + fi mkdir -p ~/.config/nvim - rm ~/.config/nvim/init.vim ln -s ~/.vimrc ~/.config/nvim/init.vim # Install Python3 and pip3 if not installed @@ -69,12 +75,14 @@ case "$(uname)" in https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # Run full system upgrade + source ~/dotfiles/bash/.path source ~/dotfiles/bash/.functions pacu - # Symlink Neovim to vim - sudo rm /usr/bin/vim - sudo ln -s /usr/bin/nvim /usr/bin/vim + # Symlink Neovim to vim if vim not installed + if [ ! -f /usr/bin/vim ]; then + sudo ln -s /usr/bin/nvim /usr/bin/vim + fi # Install diff-so-fancy if [ ! -x "$(command -v npm)" ]; then @@ -86,7 +94,7 @@ case "$(uname)" in chsh -s "$(which zsh)" fi - echo 'Dotfiles successfully initialized' + echo 'Dotfiles successfully initialized. Please reboot to finalize.' ;; 'Linux') @@ -106,8 +114,12 @@ case "$(uname)" in # Install stow if not installed sudo pacman -Syu stow --noconfirm --needed # Remove existing config files - rm ~/.bashrc - rm ~/.bash_profile + if [ -f ~/.bashrc ]; then + rm ~/.bashrc + fi + if [ -f ~/.bash_profile ]; then + rm ~/.bash_profile + fi # Stow subdirectories of dotfiles for dir in ~/dotfiles/*/; do stow --dir ~/dotfiles "$(basename "${dir}")" @@ -140,17 +152,21 @@ case "$(uname)" in fi # Use vimrc as Neovim config + if [ -f ~/.config/nvim/init.vim ]; then + rm ~/.config/nvim/init.vim + fi mkdir -p ~/.config/nvim - rm ~/.config/nvim/init.vim ln -s ~/.vimrc ~/.config/nvim/init.vim # Run full system upgrade + source ~/dotfiles/bash/.path source ~/dotfiles/bash/.functions pacu - # Symlink Neovim to vim - sudo rm /usr/bin/vim - sudo ln -s /usr/bin/nvim /usr/bin/vim + # Symlink Neovim to vim if vim not installed + if [ ! -f /usr/bin/vim ]; then + sudo ln -s /usr/bin/nvim /usr/bin/vim + fi # Install diff-so-fancy if [ ! -x "$(command -v npm)" ]; then @@ -162,7 +178,7 @@ case "$(uname)" in chsh -s "$(which zsh)" fi - echo 'Dotfiles successfully initialized' + echo 'Dotfiles successfully initialized. Please reboot to finalize.' ;; # Default diff --git a/zsh/.zshrc b/zsh/.zshrc index 52dc5445..584cf920 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -21,12 +21,6 @@ ZSH_THEME="zhann" # Add wisely, as too many plugins slow down shell startup. plugins=(git) -# Load the shell dotfiles -for file in ~/.{path,exports,aliases,functions,extra}; do - [ -r "$file" ] && [ -f "$file" ] && source "$file"; -done; -unset file; - # update oh-my-zsh bi weekly and other useful helpers source $ZSH/oh-my-zsh.sh From 95bf8288e6d8bfb9100dee3c756ef6ee11513704 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 14 Aug 2017 12:49:13 +0200 Subject: [PATCH 153/532] Symlink correct file on macOS --- git/.gitconfig | 2 -- init.sh | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/git/.gitconfig b/git/.gitconfig index 86ecb9c4..7d228eed 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -15,5 +15,3 @@ tool = vimdiff [mergetool] prompt = false -[http "https://gopkg.in"] - followRedirects = true diff --git a/init.sh b/init.sh index 1ace1521..3b01ee90 100755 --- a/init.sh +++ b/init.sh @@ -80,8 +80,8 @@ case "$(uname)" in pacu # Symlink Neovim to vim if vim not installed - if [ ! -f /usr/bin/vim ]; then - sudo ln -s /usr/bin/nvim /usr/bin/vim + if [ ! -f /usr/local/bin/vim ]; then + sudo ln -s /usr/local/bin/nvim /usr/local/bin/vim fi # Install diff-so-fancy From 8dffa4f10be3179ffb74be90662d41fe55d33085 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 14 Aug 2017 12:59:00 +0200 Subject: [PATCH 154/532] Clean up file structure --- .gitignore | 1 + bash/.bash_profile | 6 ++++++ bash/.bashrc | 5 ----- bash/.exports | 10 ++-------- zsh/.zshrc | 3 --- 5 files changed, 9 insertions(+), 16 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..56f236c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/bash/.extra diff --git a/bash/.bash_profile b/bash/.bash_profile index 14959f88..7be5be8f 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -42,3 +42,9 @@ fi alias ls="command ls ${colorflag}" export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.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:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:' + +# Autocompletions for fzf +[ -f ~/.fzf.bash ] && source ~/.fzf.bash + +# Don't search files which are gitignored in fzf +export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -g ""' diff --git a/bash/.bashrc b/bash/.bashrc index 6fc610fd..12570026 100644 --- a/bash/.bashrc +++ b/bash/.bashrc @@ -1,6 +1 @@ [ -n "$PS1" ] && source ~/.bash_profile; - -[ -f ~/.fzf.bash ] && source ~/.fzf.bash - -# Don't search files which are gitignored in FZF -export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -g ""' diff --git a/bash/.exports b/bash/.exports index c336e5bc..c64966f3 100644 --- a/bash/.exports +++ b/bash/.exports @@ -1,12 +1,6 @@ -# Prefer US English and use UTF-8. -export LANG='en_US.UTF-8'; -export LC_ALL='en_US.UTF-8'; - # Make vim the default editor. -export EDITOR='vim'; +export VISUAL='vim' +export EDITOR="${VISUAL}"; # Omit duplicates and commands that begin with a space from history. export HISTCONTROL='ignoreboth'; - -# Always enable colored `grep` output. -export GREP_OPTIONS='--color=auto'; diff --git a/zsh/.zshrc b/zsh/.zshrc index 584cf920..5faf4fad 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -25,6 +25,3 @@ plugins=(git) source $ZSH/oh-my-zsh.sh [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh - -# Don't search files which are gitignored in FZF -export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -g ""' From 3868cdedcdcf7e90a1918fc16b36b20ee8c3c8c9 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 14 Aug 2017 13:13:53 +0200 Subject: [PATCH 155/532] Fix bash imports --- bash/.bash_profile | 3 --- bash/.exports | 7 +++++++ zsh/.zshrc | 9 +++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/bash/.bash_profile b/bash/.bash_profile index 7be5be8f..c72c96bc 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -45,6 +45,3 @@ export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40 # Autocompletions for fzf [ -f ~/.fzf.bash ] && source ~/.fzf.bash - -# Don't search files which are gitignored in fzf -export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -g ""' diff --git a/bash/.exports b/bash/.exports index c64966f3..43604b8f 100644 --- a/bash/.exports +++ b/bash/.exports @@ -1,6 +1,13 @@ +# Prefer US English and use UTF-8. +export LANG='en_US.UTF-8'; +export LC_ALL='en_US.UTF-8'; + # Make vim the default editor. export VISUAL='vim' export EDITOR="${VISUAL}"; # Omit duplicates and commands that begin with a space from history. export HISTCONTROL='ignoreboth'; + +# Don't search files which are gitignored in fzf +export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -g ""' diff --git a/zsh/.zshrc b/zsh/.zshrc index 5faf4fad..067beda6 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -24,4 +24,13 @@ plugins=(git) # update oh-my-zsh bi weekly and other useful helpers source $ZSH/oh-my-zsh.sh +# Autocompletions for fzf [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh + +# Load the shell dotfiles, and then some: +# * ~/.path can be used to extend `$PATH`. +# * ~/.extra can be used for other settings you don’t want to commit. +for file in ~/.{path,exports,aliases,functions,extra}; do + [ -r "$file" ] && [ -f "$file" ] && source "$file"; +done; +unset file; From 62d05acb4fc6305d718758efe18ce1c7f0df52be Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 14 Aug 2017 13:35:36 +0200 Subject: [PATCH 156/532] Use bash --- bash/update-js.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/update-js.sh b/bash/update-js.sh index 29645e2a..2f3a1d74 100755 --- a/bash/update-js.sh +++ b/bash/update-js.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -u From f239c3dd7e1a20ce4af54b12e000f245089ddbba Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 14 Aug 2017 13:38:41 +0200 Subject: [PATCH 157/532] Fix typos --- init.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/init.sh b/init.sh index 3b01ee90..3739c7f0 100755 --- a/init.sh +++ b/init.sh @@ -85,12 +85,12 @@ case "$(uname)" in fi # Install diff-so-fancy - if [ ! -x "$(command -v npm)" ]; then + if [ -x "$(command -v npm)" ]; then npm install --global diff-so-fancy fi # Use zsh - if [ ! -x "$(command -v zsh)" ]; then + if [ -x "$(command -v zsh)" ]; then chsh -s "$(which zsh)" fi @@ -169,12 +169,12 @@ case "$(uname)" in fi # Install diff-so-fancy - if [ ! -x "$(command -v npm)" ]; then + if [ -x "$(command -v npm)" ]; then npm install --global diff-so-fancy fi # Use zsh - if [ ! -x "$(command -v zsh)" ]; then + if [ -x "$(command -v zsh)" ]; then chsh -s "$(which zsh)" fi From 920aa758351018d48917df35e96a95fd6cdf362b Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 15 Aug 2017 20:53:56 +0200 Subject: [PATCH 158/532] Make true colors work on Linux with tmux --- tmux/.tmux.conf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 8182491f..710af9f7 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -1,5 +1,6 @@ # Improve colors -set -g default-terminal 'screen-256color' +set -g default-terminal 'xterm' +set -ga terminal-overrides ",xterm:Tc" # More subtle background color set -g status-bg colour234 @@ -27,4 +28,4 @@ bind '"' split-window -v -c '#{pane_current_path}' bind % split-window -h -c '#{pane_current_path}' # Allow to use user namespace out of tmux on macOS -if-shell 'test "$(uname)" = "Darwin"' 'source .tmux.macos.conf' +if-shell 'test "$(uname)" = "Darwin"' 'source ~/.tmux.macos.conf' From abfcc017a6449e98ad4f96991f4028063ec6380d Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 15 Aug 2017 21:13:36 +0200 Subject: [PATCH 159/532] Move update scripts to root --- bash/.functions | 6 ++++-- bash/update-go.sh => update-go.sh | 0 bash/update-js.sh => update-js.sh | 0 3 files changed, 4 insertions(+), 2 deletions(-) rename bash/update-go.sh => update-go.sh (100%) rename bash/update-js.sh => update-js.sh (100%) diff --git a/bash/.functions b/bash/.functions index a02ff1b7..875dd5be 100644 --- a/bash/.functions +++ b/bash/.functions @@ -80,6 +80,7 @@ function pacu() { # Arch Linux if [ -x "$(command -v pacman)" ]; then sudo pacman -Syu --noconfirm + sudo pacman -Rns $(pacman -Qtdq) --noconfirm fi if [ -x "$(command -v yaourt)" ]; then yaourt -Syua --noconfirm @@ -89,6 +90,7 @@ function pacu() { sudo apt-get update sudo apt-get upgrade -y sudo apt-get dist-upgrade -y + sudo apt-get autoremove -y fi ;; # On macOS, use mas and Homebrew in parallel @@ -109,7 +111,7 @@ function pacu() { # Go if [ -x "$(command -v go)" ]; then - ("${HOME}/dotfiles/bash/update-go.sh") & + ("${HOME}/dotfiles/update-go.sh") & go_pid="$!" fi @@ -120,7 +122,7 @@ function pacu() { wait "${npm_global_pid}" npm outdated -g - ("${HOME}/dotfiles/bash/update-js.sh") & + ("${HOME}/dotfiles/update-js.sh") & npm_pid="$!" fi diff --git a/bash/update-go.sh b/update-go.sh similarity index 100% rename from bash/update-go.sh rename to update-go.sh diff --git a/bash/update-js.sh b/update-js.sh similarity index 100% rename from bash/update-js.sh rename to update-js.sh From 70139dbd813639297af047d4d7519e712dd9d5a8 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 17 Aug 2017 16:14:28 +0200 Subject: [PATCH 160/532] Use nova color scheme --- vim/.plugins.vimrc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 140720e5..b486a43e 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -1,11 +1,10 @@ " Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) call plug#begin('~/.local/share/nvim/plugged') -" seoul256 Color scheme -Plug 'junegunn/seoul256.vim' -let g:seoul256_background = 233 +" Color scheme +Plug 'trevordmiller/nova-vim' if has("autocmd") - autocmd! VimEnter * colorscheme seoul256 + autocmd! VimEnter * colorscheme nova endif " Emmet for HTML editing From e2d25d23a83fed7b42fef53c29fd75ee688dab84 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 17 Aug 2017 19:45:37 +0200 Subject: [PATCH 161/532] Add nova color scheme to tmux --- tmux/.tmux.conf | 23 ++++++++++++----------- vim/.plugins.vimrc | 3 --- vim/.vimrc | 11 +++++++---- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 710af9f7..e7ab8b92 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -1,16 +1,17 @@ -# Improve colors -set -g default-terminal 'xterm' -set -ga terminal-overrides ",xterm:Tc" +# Use https://github.com/trevordmiller/nova-tmux +set -g default-terminal "xterm-256color" +set -ga terminal-overrides ",xterm-256color:Tc" +set -g pane-border-style 'bg=black,fg=#1E272C' +set -g pane-active-border-style 'bg=black,fg=#1E272C' +set -g status-style 'bg=#1E272C,fg=#6A7D89' +set-window-option -g window-status-current-bg '#1E272C' +set-window-option -g window-status-current-fg cyan +set -wg mode-style 'bg=cyan,fg=black' +set -g message-style 'bg=black,fg=cyan' +set -g clock-mode-colour cyan -# More subtle background color -set -g status-bg colour234 -set -g status-fg colour246 - -# Highlight active window +# Highlight active window more clearly set-window-option -g window-status-format " #I: #W " - -set-window-option -g window-status-current-bg colour235 -set-window-option -g window-status-current-fg white set-window-option -g window-status-current-format " #I: #W " # Switch panes like vim diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index b486a43e..ef72c3f7 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -3,9 +3,6 @@ call plug#begin('~/.local/share/nvim/plugged') " Color scheme Plug 'trevordmiller/nova-vim' -if has("autocmd") - autocmd! VimEnter * colorscheme nova -endif " Emmet for HTML editing Plug 'mattn/emmet-vim', { 'for': ['html','xml'] } diff --git a/vim/.vimrc b/vim/.vimrc index e990c03b..4a340b36 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,3 +1,9 @@ +" Import plugins +source ~/.plugins.vimrc + +" Set color scheme +colorscheme nova + " Make Vim more useful set nocompatible " Disable vim welcome message @@ -29,7 +35,7 @@ set nostartofline set showcmd " Start scrolling three lines before the horizontal window border set scrolloff=3 -" More natural splitting of windows and easier split navigation +" More natural splitting of windows set splitbelow set splitright " Soft wrapping of lines @@ -48,6 +54,3 @@ if has("autocmd") " Enable spell checking for certain files autocmd BufRead,BufNewFile *.md,*.tex setlocal spell endif - -" Import plugin configuration -source ~/.plugins.vimrc From a59911da682658551685854e70cd5c8072450e34 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 17 Aug 2017 21:04:05 +0200 Subject: [PATCH 162/532] Use nova color scheme for git --- git/.gitconfig | 75 ++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 11 deletions(-) diff --git a/git/.gitconfig b/git/.gitconfig index 7d228eed..a26ab9c5 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -1,17 +1,70 @@ [user] - email = tobias.fuhrimann@swisscom.com - name = Tobias Fuhrimann + name = Tobias Fuhrimann + email = tobias.fuhrimann@gmail.com +[github] + user = mastertinner [core] - excludesfile = ~/.gitignore_global - pager = diff-so-fancy | less --tabs=4 -RFX -[color] - ui = true - + editor = vim + excludesfile = ~/.gitignore_global + pager = diff-so-fancy | less --tabs=4 -RFX [diff] - tool = vimdiff + tool = vimdiff [difftool] - prompt = false + prompt = false [merge] - tool = vimdiff + tool = vimdiff [mergetool] - prompt = false + prompt = false + +; Use https://github.com/trevordmiller/nova-git +[color] + pager = true + ui = auto + status = auto + diff = auto + branch = auto + showBranch = auto + interactive = auto + grep = auto +[color "status"] + header = black bold + branch = cyan + nobranch = red + unmerged = red + untracked = cyan + added = green + changed = red bold +[color "diff"] + meta = red bold + frag = black bold + func = blue + old = red strike + new = green + commit = blue + whitespace = red + context = normal +[color "branch"] + current = cyan + local = blue + remote = magenta + upstream = magenta + plain = normal +[color "decorate"] + branch = blue + remoteBranch = magenta + tag = magenta + stash = cyan + HEAD = blue +[color "interactive"] + prompt = red + header = red bold + error = red + help = black bold +[color "grep"] + context = normal + match = cyan + filename = blue + function = blue + selected = normal + separator = red bold + linenumber = normal From 0a83ff077c4effe2294dca8821c293c3b3d5646a Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 21 Aug 2017 15:04:40 +0200 Subject: [PATCH 163/532] Use npm dedupe --- bash/.aliases | 2 +- update-js.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 0ef2b6e4..71b1f869 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -6,4 +6,4 @@ alias ..="cd .." alias ...="cd ../.." # npm update -alias npmu='npm install && npm update && npm prune && npm outdated' +alias npmu='npm install && npm update && npm prune && npm dedupe && npm outdated' diff --git a/update-js.sh b/update-js.sh index 2f3a1d74..5ac14c05 100755 --- a/update-js.sh +++ b/update-js.sh @@ -8,6 +8,6 @@ js_dir="${HOME}/js" if [ -d "${js_dir}" ]; then cd "${js_dir}" || exit for d in */ ; do - ( cd "$d" && git pull && npm update && npm prune && npm outdated ) + ( cd "$d" && git pull && npm update && npm prune && npm dedupe && npm outdated ) done fi From d8aafbfba5ce9dfa28c207d4a195fed4152c0906 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 29 Aug 2017 00:46:00 +0200 Subject: [PATCH 164/532] Add GraphQL schema support --- vim/.plugins.vimrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index ef72c3f7..45a205a7 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -106,5 +106,8 @@ Plug 'Quramy/tsuquyomi', { 'for': 'typescript' } Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } let g:jsx_ext_required = 0 +" GraphQL schema support +Plug 'jparise/vim-graphql', { 'for': 'graphql' } + " Initialize plugin system call plug#end() From 3850c3b0b3de41f326658e71ea2d2db1ab13f01e Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 29 Aug 2017 01:06:06 +0200 Subject: [PATCH 165/532] Use mharington/nvim-typescript for typescript --- vim/.plugins.vimrc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 45a205a7..a6a38846 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -99,8 +99,7 @@ endif " Typescript language support Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } -Plug 'Shougo/vimproc.vim', { 'do': 'make', 'for': 'typescript' } -Plug 'Quramy/tsuquyomi', { 'for': 'typescript' } +Plug 'mhartington/nvim-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } " JSX language support Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } From a1789a8bbf19447bb8ba462d9e2dfff736c754f6 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Thu, 7 Sep 2017 09:41:34 +0200 Subject: [PATCH 166/532] Remove crystal language support --- Brewfile | 1 - vim/.plugins.vimrc | 3 --- 2 files changed, 4 deletions(-) diff --git a/Brewfile b/Brewfile index 426ef9b9..030f24a1 100644 --- a/Brewfile +++ b/Brewfile @@ -8,7 +8,6 @@ tap "go-delve/delve" # Languages brew "go" brew "node" -brew "crystal-lang" brew "ruby" brew "python3" brew "sqlite" diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index a6a38846..dea58de7 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -76,9 +76,6 @@ endif " Detect indent settings Plug 'tpope/vim-sleuth' -" Crystal language support -Plug 'rhysd/vim-crystal', { 'for': 'crystal' } - " Go language support Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' ,'for': 'go' } let g:go_fmt_command = 'goimports' From 5bfac3bcdffcc27d0885eacdb672608f58e2eaea Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 19 Sep 2017 20:25:15 +0200 Subject: [PATCH 167/532] Add GraphiQL --- Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Brewfile b/Brewfile index 030f24a1..40a85412 100644 --- a/Brewfile +++ b/Brewfile @@ -50,6 +50,7 @@ cask 'appcleaner' cask 'docker' cask 'dropbox' cask 'google-chrome' +cask 'graphiql' cask 'imageoptim' cask 'iterm2' cask 'postman' From 3e8910e3928a4742cfd5d810a92ae2bec00fd8d7 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 25 Oct 2017 10:24:19 +0200 Subject: [PATCH 168/532] Use prezto instead of oh my zsh --- Brewfile | 6 ++++-- bash/.bash_profile | 22 +++++----------------- init.sh | 4 ++-- prompt_mastertinner_setup | 34 ++++++++++++++++++++++++++++++++++ vim/.plugins.vimrc | 34 +++++++++++++++++----------------- vim/.vimrc | 16 ++++++++-------- zsh/.zpreztorc | 35 +++++++++++++++++++++++++++++++++++ zsh/.zshrc | 34 ++++++---------------------------- 8 files changed, 111 insertions(+), 74 deletions(-) create mode 100644 prompt_mastertinner_setup create mode 100644 zsh/.zpreztorc diff --git a/Brewfile b/Brewfile index 40a85412..f74d3898 100644 --- a/Brewfile +++ b/Brewfile @@ -53,15 +53,17 @@ cask 'google-chrome' cask 'graphiql' cask 'imageoptim' cask 'iterm2' +cask 'mongodb-compass' cask 'postman' cask 'rambox' cask 'spotify' +cask 'sqlectron' cask 'virtualbox' mas "1Password", id: 443987910 +mas "Affinity Designer", id: 824171161 +mas "Affinity Photo", id:824183456 mas "BetterSnapTool", id: 417375580 mas "Caffeine", id: 411246225 -mas "Pixelmator", id: 407963104 mas "PopClip", id: 445189367 -mas "Sip", id: 507257563 mas "The Unarchiver", id: 425424353 diff --git a/bash/.bash_profile b/bash/.bash_profile index c72c96bc..2de51ada 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -21,27 +21,15 @@ done; # Add tab completion for many Bash commands if [ "$(uname)" == 'Darwin' ]; then - if which brew > /dev/null && [ -f "$(brew --prefix)/share/bash-completion/bash_completion" ]; then - source "$(brew --prefix)/share/bash-completion/bash_completion"; - elif [ -f /etc/bash_completion ]; then - source /etc/bash_completion; - fi; + if which brew > /dev/null && [ -f "$(brew --prefix)/share/bash-completion/bash_completion" ]; then + source "$(brew --prefix)/share/bash-completion/bash_completion"; + elif [ -f /etc/bash_completion ]; then + source /etc/bash_completion; + fi; fi; # Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards [ -e "$HOME/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | tr ' ' '\n')" scp sftp ssh; -# Detect which `ls` flavor is in use -if ls --color > /dev/null 2>&1; then # GNU `ls` - colorflag="--color" -else # OS X `ls` - colorflag="-G" -fi - -# Always use color output for `ls` -alias ls="command ls ${colorflag}" -export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.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:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:' - - # Autocompletions for fzf [ -f ~/.fzf.bash ] && source ~/.fzf.bash diff --git a/init.sh b/init.sh index 3739c7f0..76c15fa0 100755 --- a/init.sh +++ b/init.sh @@ -142,9 +142,9 @@ case "$(uname)" in fzf \ the_silver_searcher yaourt -Sy --noconfirm --needed \ - oh-my-zsh-git \ + prezto-git \ spotify \ - cloudfoundry-cli + cloudfoundry-cli \ # Change npm folder if [ -x "$(command -v npm)" ]; then diff --git a/prompt_mastertinner_setup b/prompt_mastertinner_setup new file mode 100644 index 00000000..6b1ec54e --- /dev/null +++ b/prompt_mastertinner_setup @@ -0,0 +1,34 @@ +function prompt_mastertinner_precmd { + git-info +} + +function prompt_mastertinner_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command + add-zsh-hook precmd prompt_mastertinner_precmd + + # Set git-info parameters + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:branch' format '%b' + zstyle ':prezto:module:git:info:position' format '%p' + zstyle ':prezto:module:git:info:commit' format '%.7c' + zstyle ':prezto:module:git:info:action' format '%F{yellow}[%s]%f' + zstyle ':prezto:module:git:info:dirty' format '%F{yellow}●%f' + zstyle ':prezto:module:git:info:added' format '%F{green}●%f' + zstyle ':prezto:module:git:info:behind' format '%F{yellow}⬇%f' + zstyle ':prezto:module:git:info:stashed' format '%F{yellow}✭%f' + zstyle ':prezto:module:git:info:keys' format \ + 'prompt' ' %F{cyan}[$(coalesce "%b" "%p" "%c")%f${(e)git_info[status]}%F{cyan}]%f%s' \ + 'status' '$(coalesce "%a" "%D")%B%S' \ + + # Define prompts + PROMPT='%F{magenta}%c%f${(e)git_info[prompt]} ' +} + +prompt_mastertinner_setup "$@" diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index dea58de7..3261bc42 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -12,20 +12,20 @@ let g:user_emmet_leader_key='' Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' if has("autocmd") - autocmd! User GoyoEnter nested call goyo_enter() - autocmd! User GoyoLeave nested call goyo_leave() + autocmd! User GoyoEnter nested call goyo_enter() + autocmd! User GoyoLeave nested call goyo_leave() endif function! s:goyo_enter() - set noshowcmd - set scrolloff=999 - ALEDisable - Limelight + set noshowcmd + set scrolloff=999 + ALEDisable + Limelight endfunction function! s:goyo_leave() - set showcmd - set scrolloff=3 - ALEEnable - Limelight! + set showcmd + set scrolloff=3 + ALEEnable + Limelight! endfunction " Git integration @@ -70,7 +70,7 @@ Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascri Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } if has('nvim') && has('python3') - let g:deoplete#enable_at_startup = 1 + let g:deoplete#enable_at_startup = 1 endif " Detect indent settings @@ -82,12 +82,12 @@ let g:go_fmt_command = 'goimports' let g:go_auto_type_info = 1 " run :GoBuild or :GoTestCompile based on the go file function! s:build_go_files() - let l:file = expand('%') - if l:file =~# '^\f\+_test\.go$' - call go#test#Test(0, 1) - elseif l:file =~# '^\f\+\.go$' - call go#cmd#Build(0) - endif + let l:file = expand('%') + if l:file =~# '^\f\+_test\.go$' + call go#test#Test(0, 1) + elseif l:file =~# '^\f\+\.go$' + call go#cmd#Build(0) + endif endfunction if has("autocmd") autocmd FileType go nmap b :call build_go_files() diff --git a/vim/.vimrc b/vim/.vimrc index 4a340b36..5adb2ea4 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -45,12 +45,12 @@ set spelllang=en_us " Automatic commands if has("autocmd") - " Enable file type detection - filetype on - " Strip trailing whitespaces on save - autocmd BufWritePre * %s/\s\+$//e - " Unify indentation on save - autocmd BufWritePre * retab - " Enable spell checking for certain files - autocmd BufRead,BufNewFile *.md,*.tex setlocal spell + " Enable file type detection + filetype on + " Strip trailing whitespaces on save + autocmd BufWritePre * %s/\s\+$//e + " Unify indentation on save + autocmd BufWritePre * retab + " Enable spell checking for certain files + autocmd BufRead,BufNewFile *.md,*.tex setlocal spell endif diff --git a/zsh/.zpreztorc b/zsh/.zpreztorc new file mode 100644 index 00000000..0232d635 --- /dev/null +++ b/zsh/.zpreztorc @@ -0,0 +1,35 @@ +fpath=( + ${HOME}/dotfiles + ${fpath} +) + +# Color output (auto set to 'no' on dumb terminals). +zstyle ':prezto:*:*' color 'yes' + +# Set the Zsh modules to load (man zshmodules). +# zstyle ':prezto:load' zmodule 'attr' 'stat' + +# Set the Zsh functions to load (man zshcontrib). +# zstyle ':prezto:load' zfunction 'zargs' 'zmv' + +# Set the Prezto modules to load (browse modules). +# The order matters. +zstyle ':prezto:load' pmodule \ + 'environment' \ + 'utility' \ + 'spectrum' \ + 'completion' \ + 'git' \ + 'tmux' \ + 'prompt' \ + 'history' \ + 'history-substring-search' \ + 'autosuggestions' \ + +# Set the prompt theme to load. +# Setting it to 'random' loads a random theme. +# Auto set to 'off' on dumb terminals. +zstyle ':prezto:module:prompt' theme 'mastertinner' + +# Auto load tmux when zsh starts +zstyle ':prezto:module:tmux:auto-start' local 'yes' diff --git a/zsh/.zshrc b/zsh/.zshrc index 067beda6..56da5076 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -1,28 +1,7 @@ -# Path to your oh-my-zsh installation. -case "$(uname)" in -'Linux') - export ZSH=/usr/share/oh-my-zsh - ;; -'Darwin') - export ZSH=$HOME/.oh-my-zsh - ;; -esac - -# 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="zhann" - -# 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) -# Add wisely, as too many plugins slow down shell startup. -plugins=(git) - -# update oh-my-zsh bi weekly and other useful helpers -source $ZSH/oh-my-zsh.sh +# Source Prezto. +if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then + source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" +fi # Autocompletions for fzf [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh @@ -31,6 +10,5 @@ source $ZSH/oh-my-zsh.sh # * ~/.path can be used to extend `$PATH`. # * ~/.extra can be used for other settings you don’t want to commit. for file in ~/.{path,exports,aliases,functions,extra}; do - [ -r "$file" ] && [ -f "$file" ] && source "$file"; -done; -unset file; + [ -r "$file" ] && [ -f "$file" ] && source "$file" +done From dd009b6697195fb2c7ad8880b9d78f2e25743076 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 28 Oct 2017 12:53:57 +0200 Subject: [PATCH 169/532] Add brew-cask-upgrade to updating process --- Brewfile | 2 ++ bash/.functions | 1 + 2 files changed, 3 insertions(+) diff --git a/Brewfile b/Brewfile index f74d3898..e32503cd 100644 --- a/Brewfile +++ b/Brewfile @@ -2,12 +2,14 @@ tap "homebrew/core" tap "caskroom/cask" tap "homebrew/bundle" +tap "buo/cask-upgrade" tap "cloudfoundry/tap" tap "go-delve/delve" # Languages brew "go" brew "node" + brew "icu4c" brew "ruby" brew "python3" brew "sqlite" diff --git a/bash/.functions b/bash/.functions index 875dd5be..23cb530a 100644 --- a/bash/.functions +++ b/bash/.functions @@ -103,6 +103,7 @@ function pacu() { brew update brew bundle --file=~/dotfiles/Brewfile brew bundle cleanup --force --file=~/dotfiles/Brewfile + brew cu --all --yes --cleanup brew cleanup fi wait "${mas_pid}" &> /dev/null From 5dfe3eb3bc14c1574d454eafdb7383804dda059a Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 3 Nov 2017 08:43:46 +0100 Subject: [PATCH 170/532] Add openssl@1.1 to brewfile --- Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Brewfile b/Brewfile index e32503cd..2d01e62c 100644 --- a/Brewfile +++ b/Brewfile @@ -29,6 +29,7 @@ brew "tmux" brew "openssl" brew "tmate" brew "wget" + brew "openssl@1.1" brew "zsh" brew "pcre" brew "cmake" From 1182cdd19ad74e2008e55d8257adcd988ea20fe1 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 11 Nov 2017 13:21:25 +0100 Subject: [PATCH 171/532] Add kubectl --- Brewfile | 68 ++++++++++++++++++++++++---------------------- vim/.plugins.vimrc | 3 ++ 2 files changed, 38 insertions(+), 33 deletions(-) diff --git a/Brewfile b/Brewfile index 2d01e62c..2390fd94 100644 --- a/Brewfile +++ b/Brewfile @@ -10,58 +10,60 @@ tap "go-delve/delve" brew "go" brew "node" brew "icu4c" -brew "ruby" +brew "python" brew "python3" brew "sqlite" -brew "python" +brew "ruby" # Tools -brew "fzf" +brew "cloudfoundry/tap/cf-cli" +brew "cmake" brew "dep" -brew "asciinema" +brew "fzf" brew "git" +brew "go-delve/delve/delve" brew "htop" +brew "jq" + brew "oniguruma" +brew "kubectl" brew "mas" +brew "mongodb" +brew "neovim" + brew "gettext" + brew "jemalloc" + brew "libtermkey" + brew "libuv" + brew "libvterm" + brew "msgpack" + brew "unibilium" brew "reattach-to-user-namespace" brew "shellcheck" brew "the_silver_searcher" +brew "tmate" brew "tmux" brew "openssl" -brew "tmate" brew "wget" brew "openssl@1.1" brew "zsh" brew "pcre" -brew "cmake" -brew "neovim" - brew "gettext" - brew "jemalloc" - brew "libtermkey" - brew "libuv" - brew "libvterm" - brew "msgpack" - brew "unibilium" -brew "cloudfoundry/tap/cf-cli" -brew "go-delve/delve/delve" -brew "mongodb" -brew "jq" - brew "oniguruma" # Desktop Applications -cask 'alfred' -cask 'appcleaner' -cask 'docker' -cask 'dropbox' -cask 'google-chrome' -cask 'graphiql' -cask 'imageoptim' -cask 'iterm2' -cask 'mongodb-compass' -cask 'postman' -cask 'rambox' -cask 'spotify' -cask 'sqlectron' -cask 'virtualbox' +cask "alfred" +cask "appcleaner" +cask "docker" +cask "dropbox" +cask "google-chrome" +cask "graphiql" +cask "imageoptim" +cask "iterm2" +cask "microsoft-office" +cask "mongodb-compass" +cask "postman" +cask "rambox" +cask "spotify" +cask "skype-for-business" +cask "sqlectron" +cask "virtualbox" mas "1Password", id: 443987910 mas "Affinity Designer", id: 824171161 diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 3261bc42..3cc7c3d6 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -76,6 +76,9 @@ endif " Detect indent settings Plug 'tpope/vim-sleuth' +" Time tracking +Plug 'wakatime/vim-wakatime' + " Go language support Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' ,'for': 'go' } let g:go_fmt_command = 'goimports' From 64a15bf87619f1d9d3cc2f68cc00aa591670fc9a Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 12 Nov 2017 23:43:47 +0100 Subject: [PATCH 172/532] Remove office and skype for business --- Brewfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Brewfile b/Brewfile index 2390fd94..d1528fd5 100644 --- a/Brewfile +++ b/Brewfile @@ -56,12 +56,10 @@ cask "google-chrome" cask "graphiql" cask "imageoptim" cask "iterm2" -cask "microsoft-office" cask "mongodb-compass" cask "postman" cask "rambox" cask "spotify" -cask "skype-for-business" cask "sqlectron" cask "virtualbox" From 079cfd19b7415fc6b23289bf079dd5f1cb1fef09 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 25 Nov 2017 17:18:12 +0100 Subject: [PATCH 173/532] Add zprezto-update command to pacu script --- bash/.functions | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/.functions b/bash/.functions index 23cb530a..3a32c113 100644 --- a/bash/.functions +++ b/bash/.functions @@ -106,6 +106,9 @@ function pacu() { brew cu --all --yes --cleanup brew cleanup fi + if [ -x "$(command -v zprezto-update)" ]; then + zprezto-update + fi wait "${mas_pid}" &> /dev/null ;; esac From 3d16aa8452a5efdcbee60165ecbd42499658c490 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 2 Dec 2017 11:52:54 +0100 Subject: [PATCH 174/532] Add Delve vim plugin --- vim/.plugins.vimrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 3cc7c3d6..4f9fd385 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -96,6 +96,8 @@ if has("autocmd") autocmd FileType go nmap b :call build_go_files() autocmd FileType go nmap t (go-test) endif +" Debugging +Plug 'sebdah/vim-delve', { 'for': 'go' } " Typescript language support Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } From 146b4860df0d98e2626a9c21cf2e4939d435fec3 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 2 Dec 2017 21:31:20 +0100 Subject: [PATCH 175/532] Use escape-time 0 in tmux --- tmux/.tmux.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index e7ab8b92..ee1904e5 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -9,6 +9,7 @@ set-window-option -g window-status-current-fg cyan set -wg mode-style 'bg=cyan,fg=black' set -g message-style 'bg=black,fg=cyan' set -g clock-mode-colour cyan +set -s escape-time 0 # Highlight active window more clearly set-window-option -g window-status-format " #I: #W " From 96d1920596d2b549bacdab5c333d7d57a876b048 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sat, 2 Dec 2017 21:50:13 +0100 Subject: [PATCH 176/532] Improve prompt colors to better represent git --- prompt_mastertinner_setup | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/prompt_mastertinner_setup b/prompt_mastertinner_setup index 6b1ec54e..e20df2bc 100644 --- a/prompt_mastertinner_setup +++ b/prompt_mastertinner_setup @@ -19,13 +19,16 @@ function prompt_mastertinner_setup { zstyle ':prezto:module:git:info:position' format '%p' zstyle ':prezto:module:git:info:commit' format '%.7c' zstyle ':prezto:module:git:info:action' format '%F{yellow}[%s]%f' - zstyle ':prezto:module:git:info:dirty' format '%F{yellow}●%f' + zstyle ':prezto:module:git:info:deleted' format '%F{yellow}●%f' + zstyle ':prezto:module:git:info:modified' format '%F{yellow}●%f' + zstyle ':prezto:module:git:info:renamed' format '%F{yellow}●%f' + zstyle ':prezto:module:git:info:untracked' format '%F{yellow}●%f' zstyle ':prezto:module:git:info:added' format '%F{green}●%f' - zstyle ':prezto:module:git:info:behind' format '%F{yellow}⬇%f' - zstyle ':prezto:module:git:info:stashed' format '%F{yellow}✭%f' + zstyle ':prezto:module:git:info:behind' format '%F{yellow} ⬇%f' + zstyle ':prezto:module:git:info:stashed' format '%F{yellow} ✭%f' zstyle ':prezto:module:git:info:keys' format \ 'prompt' ' %F{cyan}[$(coalesce "%b" "%p" "%c")%f${(e)git_info[status]}%F{cyan}]%f%s' \ - 'status' '$(coalesce "%a" "%D")%B%S' \ + 'status' '%a$(coalesce "%d" "%m" "%r" "%u")%B%S' \ # Define prompts PROMPT='%F{magenta}%c%f${(e)git_info[prompt]} ' From 18d45289338537fda8052798e778abae967df9e0 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 5 Dec 2017 15:23:54 +0100 Subject: [PATCH 177/532] Only open one terminal pane for ide command --- Brewfile | 1 + bash/.functions | 2 -- vim/.plugins.vimrc | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Brewfile b/Brewfile index d1528fd5..e9f66b5f 100644 --- a/Brewfile +++ b/Brewfile @@ -56,6 +56,7 @@ cask "google-chrome" cask "graphiql" cask "imageoptim" cask "iterm2" +cask "minikube" cask "mongodb-compass" cask "postman" cask "rambox" diff --git a/bash/.functions b/bash/.functions index 3a32c113..40769732 100644 --- a/bash/.functions +++ b/bash/.functions @@ -56,12 +56,10 @@ function ide() { if [ ! -n "${TMUX}" ]; then tmux new-session -d -s ide 'vim +NERDTree' tmux split-window -v -p 10 - tmux split-window -h tmux select-pane -t 0 tmux attach-session -d -t ide else tmux split-window -v -p 10 - tmux split-window -h tmux select-pane -t 0 vim +NERDTree fi diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 4f9fd385..109687d9 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -67,7 +67,7 @@ nnoremap :Files " Autocompletion Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } -Plug 'mhartington/deoplete-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } +Plug 'mhartington/deoplete-typescript', { 'do': ':UpdateRemotePlugins', 'for': 'typescript' } Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } if has('nvim') && has('python3') let g:deoplete#enable_at_startup = 1 From 5c7055b5aef05a033b73e6b813d4a8534df87196 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 8 Dec 2017 13:08:50 +0100 Subject: [PATCH 178/532] Add minio client to Brewfile --- Brewfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Brewfile b/Brewfile index e9f66b5f..7c1e96ad 100644 --- a/Brewfile +++ b/Brewfile @@ -5,6 +5,7 @@ tap "homebrew/bundle" tap "buo/cask-upgrade" tap "cloudfoundry/tap" tap "go-delve/delve" +tap "minio/stable" # Languages brew "go" @@ -27,6 +28,7 @@ brew "jq" brew "oniguruma" brew "kubectl" brew "mas" +brew "mc" brew "mongodb" brew "neovim" brew "gettext" From f8ed8ce340672cfad3cf276340bf439ea9bedc73 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 19 Dec 2017 15:46:48 +0100 Subject: [PATCH 179/532] Add depu command --- bash/.aliases | 3 --- bash/.functions | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 71b1f869..4fe05dcb 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -4,6 +4,3 @@ alias sudo='sudo ' # Easier navigation alias ..="cd .." alias ...="cd ../.." - -# npm update -alias npmu='npm install && npm update && npm prune && npm dedupe && npm outdated' diff --git a/bash/.functions b/bash/.functions index 40769732..6b17f17a 100644 --- a/bash/.functions +++ b/bash/.functions @@ -65,6 +65,30 @@ function ide() { fi } +# Update dependencies +funcion depu() { + + # npm + pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) + if [ "${pkg_count}" -gt 0 ]; then + echo "Updating npm dependencies...\n" + npm install + npm update + npm prune + npm outdated + fi + + # Go dep + pkg_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) + if [ "${pkg_count}" -gt 0 ]; then + echo "Updating Go dep dependencies...\n" + dep ensure + dep ensure -update + dep prune + fi + +} + # System update function pacu() { From c4040eb8aa4aacf4b878ce4e6b0fa44789c62f1d Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 19 Dec 2017 15:46:48 +0100 Subject: [PATCH 180/532] Add depu command --- bash/.aliases | 3 --- bash/.functions | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/bash/.aliases b/bash/.aliases index 71b1f869..4fe05dcb 100644 --- a/bash/.aliases +++ b/bash/.aliases @@ -4,6 +4,3 @@ alias sudo='sudo ' # Easier navigation alias ..="cd .." alias ...="cd ../.." - -# npm update -alias npmu='npm install && npm update && npm prune && npm dedupe && npm outdated' diff --git a/bash/.functions b/bash/.functions index 40769732..e3d995a9 100644 --- a/bash/.functions +++ b/bash/.functions @@ -65,6 +65,30 @@ function ide() { fi } +# Update dependencies +funcion depu() { + + # npm + pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) + if [ "${pkg_count}" -gt 0 ]; then + echo "Updating npm dependencies...\n" + npm install + npm update + npm prune + npm outdated + fi + + # Go dep + pkg_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) + if [ "${pkg_count}" -gt 0 ]; then + echo "Updating Dep dependencies...\n" + dep ensure + dep ensure -update + dep prune + fi + +} + # System update function pacu() { From ec78a326c5a32fbcb808fb6ac56ff0a70d20b498 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 1 Jan 2018 15:34:33 +0100 Subject: [PATCH 181/532] Clean up after pacman and optimize it --- bash/.functions | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/.functions b/bash/.functions index e3d995a9..f51b2819 100644 --- a/bash/.functions +++ b/bash/.functions @@ -103,6 +103,8 @@ function pacu() { if [ -x "$(command -v pacman)" ]; then sudo pacman -Syu --noconfirm sudo pacman -Rns $(pacman -Qtdq) --noconfirm + sudo pacman -Sc --noconfirm + sudo pacman-optimize fi if [ -x "$(command -v yaourt)" ]; then yaourt -Syua --noconfirm From 1e0ca02cc5bb20c11fc7f832461f3da02c9893cb Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 2 Jan 2018 20:13:36 +0100 Subject: [PATCH 182/532] Add gdbm to Brewfile --- Brewfile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Brewfile b/Brewfile index 7c1e96ad..91932861 100644 --- a/Brewfile +++ b/Brewfile @@ -14,6 +14,7 @@ brew "node" brew "python" brew "python3" brew "sqlite" + brew "gdbm" brew "ruby" # Tools @@ -29,6 +30,12 @@ brew "jq" brew "kubectl" brew "mas" brew "mc" + brew "pkg-config" + brew "libffi" + brew "glib" + brew "libpng" + brew "s-lang" + brew "libssh2" brew "mongodb" brew "neovim" brew "gettext" @@ -41,6 +48,7 @@ brew "neovim" brew "reattach-to-user-namespace" brew "shellcheck" brew "the_silver_searcher" +brew "tig" brew "tmate" brew "tmux" brew "openssl" @@ -58,10 +66,12 @@ cask "google-chrome" cask "graphiql" cask "imageoptim" cask "iterm2" +cask "microsoft-office" cask "minikube" cask "mongodb-compass" cask "postman" cask "rambox" +cask "skype-for-business" cask "spotify" cask "sqlectron" cask "virtualbox" From df5630aaec6feb0438ce22a88220526970d1470e Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 7 Jan 2018 13:24:24 +0100 Subject: [PATCH 183/532] Remove skype for business and microsoft office --- Brewfile | 3 +-- bash/.functions | 6 ++++-- tmux/.tmux.conf | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Brewfile b/Brewfile index 91932861..f03a7b5c 100644 --- a/Brewfile +++ b/Brewfile @@ -66,12 +66,11 @@ cask "google-chrome" cask "graphiql" cask "imageoptim" cask "iterm2" -cask "microsoft-office" +cask "lego-mindstorms-ev3" cask "minikube" cask "mongodb-compass" cask "postman" cask "rambox" -cask "skype-for-business" cask "spotify" cask "sqlectron" cask "virtualbox" diff --git a/bash/.functions b/bash/.functions index f51b2819..6b43e297 100644 --- a/bash/.functions +++ b/bash/.functions @@ -130,10 +130,12 @@ function pacu() { brew cu --all --yes --cleanup brew cleanup fi - if [ -x "$(command -v zprezto-update)" ]; then - zprezto-update + if typeset -f zprezto-update > /dev/null; then + zprezto-update & + zprezto_pid="$!" fi wait "${mas_pid}" &> /dev/null + wait "${zprezto_pid}" &> /dev/null ;; esac diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index ee1904e5..b442c843 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -1,5 +1,5 @@ # Use https://github.com/trevordmiller/nova-tmux -set -g default-terminal "xterm-256color" +set-option -g default-terminal "screen-256color" set -ga terminal-overrides ",xterm-256color:Tc" set -g pane-border-style 'bg=black,fg=#1E272C' set -g pane-active-border-style 'bg=black,fg=#1E272C' From a558b8866e9c15036ea88cb0682a2b39b0aef759 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Sun, 7 Jan 2018 14:07:14 +0100 Subject: [PATCH 184/532] Add status messages --- bash/.functions | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/bash/.functions b/bash/.functions index 6b43e297..9d107580 100644 --- a/bash/.functions +++ b/bash/.functions @@ -93,6 +93,7 @@ funcion depu() { function pacu() { # Dotfiles repo + echo "\e[1mUpdating dotfiles repo\e[0m" (cd "${HOME}/dotfiles" && git pull) # System tools @@ -101,16 +102,19 @@ function pacu() { 'Linux') # Arch Linux if [ -x "$(command -v pacman)" ]; then + echo "\e[1mUpdating pacman packages\e[0m" sudo pacman -Syu --noconfirm sudo pacman -Rns $(pacman -Qtdq) --noconfirm sudo pacman -Sc --noconfirm sudo pacman-optimize fi if [ -x "$(command -v yaourt)" ]; then + echo "\e[1mUpdating yaourt packages\e[0m" yaourt -Syua --noconfirm fi # Debian if [ -x "$(command -v apt-get)" ]; then + echo "\e[1mUpdating apt packages\e[0m" sudo apt-get update sudo apt-get upgrade -y sudo apt-get dist-upgrade -y @@ -120,10 +124,12 @@ function pacu() { # On macOS, use mas and Homebrew in parallel 'Darwin') if [ -x "$(command -v mas)" ]; then + echo "\e[1mUpdating Mac App Store apps\e[0m" (mas upgrade) & mas_pid="$!" fi if [ -x "$(command -v brew)" ]; then + echo "\e[1mUpdating Homebrew packages\e[0m" brew update brew bundle --file=~/dotfiles/Brewfile brew bundle cleanup --force --file=~/dotfiles/Brewfile @@ -131,6 +137,7 @@ function pacu() { brew cleanup fi if typeset -f zprezto-update > /dev/null; then + echo "\e[1mUpdating zprezto\e[0m" zprezto-update & zprezto_pid="$!" fi @@ -141,12 +148,14 @@ function pacu() { # Go if [ -x "$(command -v go)" ]; then + echo "\e[1mUpdating Go binaries\e[0m" ("${HOME}/dotfiles/update-go.sh") & go_pid="$!" fi # Node.js and npm if [ -x "$(command -v npm)" ]; then + echo "\e[1mUpdating globally installed npm packages\e[0m" (npm update -g) & npm_global_pid="$!" @@ -158,24 +167,33 @@ function pacu() { # Ruby if [ -x "$(command -v gem)" ]; then + echo "\e[1mUpdating Ruby gems\e[0m" (gem update --force && gem cleanup) & ruby_pid="$!" fi # Python if [ -x "$(command -v pip)" ]; then - (for pkg in $(pip list | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & + echo "\e[1mUpdating pip packages\e[0m" + (for pkg in $(pip list --outdated | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & + python_pid="$!" + fi + if [ -x "$(command -v pip2)" ]; then + echo "\e[1mUpdating pip2 packages\e[0m" + (for pkg in $(pip2 list --outdated | cut -d' ' -f1); do pip2 install --user --upgrade $pkg; done) & python_pid="$!" fi # Python3 if [ -x "$(command -v pip3)" ]; then - (for pkg in $(pip3 list | cut -d' ' -f1); do pip3 install --user --upgrade $pkg; done) & + echo "\e[1mUpdating pip3 packages\e[0m" + (for pkg in $(pip3 list --outdated | cut -d' ' -f1); do pip3 install --user --upgrade $pkg; done) & python3_pid="$!" fi # Vim if [ -x "$(command -v vim)" ]; then + echo "\e[1mUpdating vim plugins\e[0m" vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' fi @@ -186,5 +204,5 @@ function pacu() { wait "${python_pid}" &> /dev/null wait "${python3_pid}" &> /dev/null - echo 'System upgrade finished' + echo 'System update finished' } From 39ecb110832c0f7f5450b3a2eafcd7872ed199a3 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 8 Jan 2018 22:29:42 +0100 Subject: [PATCH 185/532] Simplify Homebrew setup --- .gitignore | 1 + Brewfile | 26 +------------------------- README.md | 10 +++++----- bash/.functions | 38 +++++++++++++++++++------------------- init.sh | 13 +------------ vim/.plugins.vimrc | 27 ++++++++++++++++++++++++--- 6 files changed, 51 insertions(+), 64 deletions(-) diff --git a/.gitignore b/.gitignore index 56f236c0..1a681b8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /bash/.extra +/Brewfile.extra diff --git a/Brewfile b/Brewfile index f03a7b5c..40a3444f 100644 --- a/Brewfile +++ b/Brewfile @@ -1,8 +1,5 @@ # Taps -tap "homebrew/core" tap "caskroom/cask" -tap "homebrew/bundle" -tap "buo/cask-upgrade" tap "cloudfoundry/tap" tap "go-delve/delve" tap "minio/stable" @@ -10,11 +7,8 @@ tap "minio/stable" # Languages brew "go" brew "node" - brew "icu4c" brew "python" brew "python3" - brew "sqlite" - brew "gdbm" brew "ruby" # Tools @@ -26,36 +20,19 @@ brew "git" brew "go-delve/delve/delve" brew "htop" brew "jq" - brew "oniguruma" brew "kubectl" brew "mas" -brew "mc" - brew "pkg-config" - brew "libffi" - brew "glib" - brew "libpng" - brew "s-lang" - brew "libssh2" +brew "minio/stable/mc" brew "mongodb" brew "neovim" - brew "gettext" - brew "jemalloc" - brew "libtermkey" - brew "libuv" - brew "libvterm" - brew "msgpack" - brew "unibilium" brew "reattach-to-user-namespace" brew "shellcheck" brew "the_silver_searcher" brew "tig" brew "tmate" brew "tmux" - brew "openssl" brew "wget" - brew "openssl@1.1" brew "zsh" - brew "pcre" # Desktop Applications cask "alfred" @@ -66,7 +43,6 @@ cask "google-chrome" cask "graphiql" cask "imageoptim" cask "iterm2" -cask "lego-mindstorms-ev3" cask "minikube" cask "mongodb-compass" cask "postman" diff --git a/README.md b/README.md index 890b7fcc..c0e8b9c0 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescrip 1. Run the following command: - **WARNING: This may install and/or remove software and change your configs!** + **WARNING: This may install and/or remove software and change your configs!** - ```shell - $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) - ``` + ```shell + $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) + ``` 1. Run command again if Xcode Command Line Tools needed to be installed @@ -30,6 +30,6 @@ I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescrip 1. Change `Brewfile` to your liking 1. If you have apps installed which you didn't install through `brew cask` but that you now added to `Brewfile` as `cask`, you need to remove the respective `.app` file from your applications folder. - Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. + Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. 1. Run the above installation command substituting the repo URL with your own diff --git a/bash/.functions b/bash/.functions index 9d107580..8f9c3cc5 100644 --- a/bash/.functions +++ b/bash/.functions @@ -71,7 +71,7 @@ funcion depu() { # npm pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) if [ "${pkg_count}" -gt 0 ]; then - echo "Updating npm dependencies...\n" + echo 'Updating npm dependencies...\n' npm install npm update npm prune @@ -81,7 +81,7 @@ funcion depu() { # Go dep pkg_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) if [ "${pkg_count}" -gt 0 ]; then - echo "Updating Dep dependencies...\n" + echo 'Updating Dep dependencies...\n' dep ensure dep ensure -update dep prune @@ -93,7 +93,7 @@ funcion depu() { function pacu() { # Dotfiles repo - echo "\e[1mUpdating dotfiles repo\e[0m" + echo '\e[1mUpdating dotfiles repo\e[0m' (cd "${HOME}/dotfiles" && git pull) # System tools @@ -102,19 +102,19 @@ function pacu() { 'Linux') # Arch Linux if [ -x "$(command -v pacman)" ]; then - echo "\e[1mUpdating pacman packages\e[0m" + echo '\e[1mUpdating pacman packages\e[0m' sudo pacman -Syu --noconfirm sudo pacman -Rns $(pacman -Qtdq) --noconfirm sudo pacman -Sc --noconfirm sudo pacman-optimize fi if [ -x "$(command -v yaourt)" ]; then - echo "\e[1mUpdating yaourt packages\e[0m" + echo '\e[1mUpdating yaourt packages\e[0m' yaourt -Syua --noconfirm fi # Debian if [ -x "$(command -v apt-get)" ]; then - echo "\e[1mUpdating apt packages\e[0m" + echo '\e[1mUpdating apt packages\e[0m' sudo apt-get update sudo apt-get upgrade -y sudo apt-get dist-upgrade -y @@ -124,16 +124,15 @@ function pacu() { # On macOS, use mas and Homebrew in parallel 'Darwin') if [ -x "$(command -v mas)" ]; then - echo "\e[1mUpdating Mac App Store apps\e[0m" + echo '\e[1mUpdating Mac App Store apps\e[0m' (mas upgrade) & mas_pid="$!" fi if [ -x "$(command -v brew)" ]; then - echo "\e[1mUpdating Homebrew packages\e[0m" + echo '\e[1mUpdating Homebrew packages\e[0m' brew update - brew bundle --file=~/dotfiles/Brewfile - brew bundle cleanup --force --file=~/dotfiles/Brewfile - brew cu --all --yes --cleanup + cat ~/dotfiles/Brewfile* | brew bundle --file=- + cat ~/dotfiles/Brewfile* | brew bundle cleanup --force --file=- brew cleanup fi if typeset -f zprezto-update > /dev/null; then @@ -148,52 +147,53 @@ function pacu() { # Go if [ -x "$(command -v go)" ]; then - echo "\e[1mUpdating Go binaries\e[0m" + echo '\e[1mUpdating Go binaries\e[0m' ("${HOME}/dotfiles/update-go.sh") & go_pid="$!" fi # Node.js and npm if [ -x "$(command -v npm)" ]; then - echo "\e[1mUpdating globally installed npm packages\e[0m" + echo '\e[1mUpdating globally installed npm packages\e[0m' (npm update -g) & npm_global_pid="$!" wait "${npm_global_pid}" npm outdated -g + echo '\e[1mUpdating Node.js projects\e[0m' ("${HOME}/dotfiles/update-js.sh") & npm_pid="$!" fi # Ruby if [ -x "$(command -v gem)" ]; then - echo "\e[1mUpdating Ruby gems\e[0m" + echo '\e[1mUpdating Ruby gems\e[0m' (gem update --force && gem cleanup) & ruby_pid="$!" fi # Python if [ -x "$(command -v pip)" ]; then - echo "\e[1mUpdating pip packages\e[0m" + echo '\e[1mUpdating pip packages\e[0m' (for pkg in $(pip list --outdated | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & python_pid="$!" fi if [ -x "$(command -v pip2)" ]; then - echo "\e[1mUpdating pip2 packages\e[0m" + echo '\e[1mUpdating pip2 packages\e[0m' (for pkg in $(pip2 list --outdated | cut -d' ' -f1); do pip2 install --user --upgrade $pkg; done) & python_pid="$!" fi # Python3 if [ -x "$(command -v pip3)" ]; then - echo "\e[1mUpdating pip3 packages\e[0m" + echo '\e[1mUpdating pip3 packages\e[0m' (for pkg in $(pip3 list --outdated | cut -d' ' -f1); do pip3 install --user --upgrade $pkg; done) & python3_pid="$!" fi # Vim if [ -x "$(command -v vim)" ]; then - echo "\e[1mUpdating vim plugins\e[0m" + echo '\e[1mUpdating vim plugins\e[0m' vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' fi @@ -204,5 +204,5 @@ function pacu() { wait "${python_pid}" &> /dev/null wait "${python3_pid}" &> /dev/null - echo 'System update finished' + echo '\e[1mSystem update finished\e[0m' } diff --git a/init.sh b/init.sh index 76c15fa0..a678c33b 100755 --- a/init.sh +++ b/init.sh @@ -26,9 +26,6 @@ case "$(uname)" in /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" fi - # Install Homebrew Bundle - brew tap Homebrew/bundle - # Install git if not installed if [ ! -x "$(command -v git)" ]; then brew install git @@ -68,11 +65,7 @@ case "$(uname)" in brew install python3 fi # Install the Python neovim package - pip3 install --upgrade --user neovim - - # Install vim-plug - curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ - https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + pip3 install neovim --upgrade --user neovim # Run full system upgrade source ~/dotfiles/bash/.path @@ -125,10 +118,6 @@ case "$(uname)" in stow --dir ~/dotfiles "$(basename "${dir}")" done - # Install vim-plug - curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ - https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - # Install tools sudo pacman -Syu --noconfirm --needed \ tmux \ diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 109687d9..279ed9e8 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -1,3 +1,10 @@ +" Install vim plug if not installed +if empty(glob('~/.vim/autoload/plug.vim')) + silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs + \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + autocmd VimEnter * PlugInstall --sync | source $MYVIMRC +endif + " Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) call plug#begin('~/.local/share/nvim/plugged') @@ -53,6 +60,15 @@ Plug 'jiangmiao/auto-pairs' " Syntax Highlighting Plug 'w0rp/ale' +let g:ale_fixers = {} +let g:ale_fixers['javascript'] = ['prettier'] +let g:ale_fixers['css'] = ['prettier'] +let g:ale_fixers['scss'] = ['prettier'] +let g:ale_fixers['less'] = ['prettier'] +let g:ale_fixers['graphql'] = ['prettier'] +let g:ale_fixers['markdown'] = ['prettier'] +let g:ale_fixers['typescript'] = ['prettier','tslint'] +let g:ale_fix_on_save = 1 nmap (ale_previous_wrap) nmap (ale_next_wrap) @@ -99,14 +115,19 @@ endif " Debugging Plug 'sebdah/vim-delve', { 'for': 'go' } -" Typescript language support -Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } -Plug 'mhartington/nvim-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } +" Improved JavaScript language support +Plug 'pangloss/vim-javascript' +let g:javascript_plugin_jsdoc = 1 +let g:javascript_plugin_flow = 1 " JSX language support Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } let g:jsx_ext_required = 0 +" Typescript language support +Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } +Plug 'mhartington/nvim-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } + " GraphQL schema support Plug 'jparise/vim-graphql', { 'for': 'graphql' } From 17dbd05706c4c68bb3d1947c75efb91e1c45a43c Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 9 Jan 2018 19:03:46 +0100 Subject: [PATCH 186/532] Add back brew cask upgrade --- Brewfile | 1 + bash/.functions | 1 + 2 files changed, 2 insertions(+) diff --git a/Brewfile b/Brewfile index 40a3444f..405ed2c8 100644 --- a/Brewfile +++ b/Brewfile @@ -3,6 +3,7 @@ tap "caskroom/cask" tap "cloudfoundry/tap" tap "go-delve/delve" tap "minio/stable" +tap "buo/cask-upgrade" # Languages brew "go" diff --git a/bash/.functions b/bash/.functions index 8f9c3cc5..be5a3347 100644 --- a/bash/.functions +++ b/bash/.functions @@ -133,6 +133,7 @@ function pacu() { brew update cat ~/dotfiles/Brewfile* | brew bundle --file=- cat ~/dotfiles/Brewfile* | brew bundle cleanup --force --file=- + brew cu --all --yes --cleanup brew cleanup fi if typeset -f zprezto-update > /dev/null; then From 6f395664efe342afa3f991da39e7ddba47f73e21 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 9 Jan 2018 21:39:36 +0100 Subject: [PATCH 187/532] Install diff-so-fancy with local package managers --- Brewfile | 1 + README.md | 8 ++++---- init.sh | 13 ++----------- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/Brewfile b/Brewfile index 405ed2c8..a0b67f8f 100644 --- a/Brewfile +++ b/Brewfile @@ -16,6 +16,7 @@ brew "ruby" brew "cloudfoundry/tap/cf-cli" brew "cmake" brew "dep" +brew "diff-so-fancy" brew "fzf" brew "git" brew "go-delve/delve/delve" diff --git a/README.md b/README.md index c0e8b9c0..fa4f53ad 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ My personal dotfiles -I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescriptlang.org/), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. +I mainly work with [Go](https://golang.org/), [JavaScript](https://en.wikipedia.org/wiki/JavaScript), [TypeScript](https://www.typescriptlang.org/), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. ## Installation @@ -19,7 +19,7 @@ I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescrip ## Usage * `pacu`: Installs and updates everything in `Brewfile` and removes everything else -* `nvim`: Starts neovim with all plugins +* `vim`: Starts Neovim with all plugins * and many more... ## Customize @@ -27,8 +27,8 @@ I mainly work with [Go](https://golang.org/), [TypeScript](https://www.typescrip 1. Fork this repo 1. Change the `git clone` command in `init.sh` to use your own repo 1. Change the name and email address in `git/.gitconfig` -1. Change `Brewfile` to your liking -1. If you have apps installed which you didn't install through `brew cask` but that you now added to `Brewfile` as `cask`, you need to remove the respective `.app` file from your applications folder. +1. Change `Brewfile` to your liking or add `Brewfile.extra` for independent packages per machine +1. If you have apps installed which you didn't install through `brew cask` but that you now added to `Brewfile` as `cask`, you need to reinstall them with `brew cask install --force` so `cask` knows it's supposed to manage these apps. Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. diff --git a/init.sh b/init.sh index a678c33b..9f3db892 100755 --- a/init.sh +++ b/init.sh @@ -77,11 +77,6 @@ case "$(uname)" in sudo ln -s /usr/local/bin/nvim /usr/local/bin/vim fi - # Install diff-so-fancy - if [ -x "$(command -v npm)" ]; then - npm install --global diff-so-fancy - fi - # Use zsh if [ -x "$(command -v zsh)" ]; then chsh -s "$(which zsh)" @@ -129,7 +124,8 @@ case "$(uname)" in nodejs \ npm \ fzf \ - the_silver_searcher + the_silver_searcher \ + diff-so-fancy yaourt -Sy --noconfirm --needed \ prezto-git \ spotify \ @@ -157,11 +153,6 @@ case "$(uname)" in sudo ln -s /usr/bin/nvim /usr/bin/vim fi - # Install diff-so-fancy - if [ -x "$(command -v npm)" ]; then - npm install --global diff-so-fancy - fi - # Use zsh if [ -x "$(command -v zsh)" ]; then chsh -s "$(which zsh)" From f209100fb13a5f8513b9b05d325e5812eef33772 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 9 Jan 2018 22:07:02 +0100 Subject: [PATCH 188/532] Fix typo --- bash/.functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.functions b/bash/.functions index be5a3347..39476957 100644 --- a/bash/.functions +++ b/bash/.functions @@ -66,7 +66,7 @@ function ide() { } # Update dependencies -funcion depu() { +function depu() { # npm pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) From fe622c9bf090bc63dc39c967387c58de032c8d37 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Tue, 9 Jan 2018 22:25:50 +0100 Subject: [PATCH 189/532] Add logs to init script --- bash/.functions | 36 ++++++++++++++++++------------------ init.sh | 26 +++++++++++++++++++++----- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/bash/.functions b/bash/.functions index 39476957..cd668697 100644 --- a/bash/.functions +++ b/bash/.functions @@ -71,7 +71,7 @@ function depu() { # npm pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) if [ "${pkg_count}" -gt 0 ]; then - echo 'Updating npm dependencies...\n' + printf 'Updating npm dependencies...\n\n' npm install npm update npm prune @@ -81,7 +81,7 @@ function depu() { # Go dep pkg_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) if [ "${pkg_count}" -gt 0 ]; then - echo 'Updating Dep dependencies...\n' + printf 'Updating Dep dependencies...\n\n' dep ensure dep ensure -update dep prune @@ -93,7 +93,7 @@ function depu() { function pacu() { # Dotfiles repo - echo '\e[1mUpdating dotfiles repo\e[0m' + printf '\e[1mUpdating dotfiles repo\e[0m\n' (cd "${HOME}/dotfiles" && git pull) # System tools @@ -102,19 +102,19 @@ function pacu() { 'Linux') # Arch Linux if [ -x "$(command -v pacman)" ]; then - echo '\e[1mUpdating pacman packages\e[0m' + printf '\e[1mUpdating pacman packages\e[0m\n' sudo pacman -Syu --noconfirm sudo pacman -Rns $(pacman -Qtdq) --noconfirm sudo pacman -Sc --noconfirm sudo pacman-optimize fi if [ -x "$(command -v yaourt)" ]; then - echo '\e[1mUpdating yaourt packages\e[0m' + printf '\e[1mUpdating yaourt packages\e[0m\n' yaourt -Syua --noconfirm fi # Debian if [ -x "$(command -v apt-get)" ]; then - echo '\e[1mUpdating apt packages\e[0m' + printf '\e[1mUpdating apt packages\e[0m\n' sudo apt-get update sudo apt-get upgrade -y sudo apt-get dist-upgrade -y @@ -124,12 +124,12 @@ function pacu() { # On macOS, use mas and Homebrew in parallel 'Darwin') if [ -x "$(command -v mas)" ]; then - echo '\e[1mUpdating Mac App Store apps\e[0m' + printf '\e[1mUpdating Mac App Store apps\e[0m\n' (mas upgrade) & mas_pid="$!" fi if [ -x "$(command -v brew)" ]; then - echo '\e[1mUpdating Homebrew packages\e[0m' + printf '\e[1mUpdating Homebrew packages\e[0m\n' brew update cat ~/dotfiles/Brewfile* | brew bundle --file=- cat ~/dotfiles/Brewfile* | brew bundle cleanup --force --file=- @@ -137,7 +137,7 @@ function pacu() { brew cleanup fi if typeset -f zprezto-update > /dev/null; then - echo "\e[1mUpdating zprezto\e[0m" + printf '\e[1mUpdating zprezto\e[0m\n' zprezto-update & zprezto_pid="$!" fi @@ -148,53 +148,53 @@ function pacu() { # Go if [ -x "$(command -v go)" ]; then - echo '\e[1mUpdating Go binaries\e[0m' + printf '\e[1mUpdating Go binaries\e[0m\n' ("${HOME}/dotfiles/update-go.sh") & go_pid="$!" fi # Node.js and npm if [ -x "$(command -v npm)" ]; then - echo '\e[1mUpdating globally installed npm packages\e[0m' + printf '\e[1mUpdating globally installed npm packages\e[0m\n' (npm update -g) & npm_global_pid="$!" wait "${npm_global_pid}" npm outdated -g - echo '\e[1mUpdating Node.js projects\e[0m' + printf '\e[1mUpdating Node.js projects\e[0m\n' ("${HOME}/dotfiles/update-js.sh") & npm_pid="$!" fi # Ruby if [ -x "$(command -v gem)" ]; then - echo '\e[1mUpdating Ruby gems\e[0m' + printf '\e[1mUpdating Ruby gems\e[0m\n' (gem update --force && gem cleanup) & ruby_pid="$!" fi # Python if [ -x "$(command -v pip)" ]; then - echo '\e[1mUpdating pip packages\e[0m' + printf '\e[1mUpdating pip packages\e[0m\n' (for pkg in $(pip list --outdated | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & python_pid="$!" fi if [ -x "$(command -v pip2)" ]; then - echo '\e[1mUpdating pip2 packages\e[0m' + printf '\e[1mUpdating pip2 packages\e[0m\n' (for pkg in $(pip2 list --outdated | cut -d' ' -f1); do pip2 install --user --upgrade $pkg; done) & python_pid="$!" fi # Python3 if [ -x "$(command -v pip3)" ]; then - echo '\e[1mUpdating pip3 packages\e[0m' + printf '\e[1mUpdating pip3 packages\e[0m\n' (for pkg in $(pip3 list --outdated | cut -d' ' -f1); do pip3 install --user --upgrade $pkg; done) & python3_pid="$!" fi # Vim if [ -x "$(command -v vim)" ]; then - echo '\e[1mUpdating vim plugins\e[0m' + printf '\e[1mUpdating vim plugins\e[0m\n' vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' fi @@ -205,5 +205,5 @@ function pacu() { wait "${python_pid}" &> /dev/null wait "${python3_pid}" &> /dev/null - echo '\e[1mSystem update finished\e[0m' + printf '\e[1mSystem update finished\e[0m\n' } diff --git a/init.sh b/init.sh index 9f3db892..d7caeb04 100755 --- a/init.sh +++ b/init.sh @@ -2,6 +2,8 @@ # This script installs these dotfiles. +printf '\e[1mInitializing dotfiles\e[0m\n' + case "$(uname)" in # On Linux, use the respective package manager @@ -23,21 +25,25 @@ case "$(uname)" in # Install Homebrew if not installed if [ ! -x "$(command -v brew)" ]; then + printf '\e[1mInstalling Homebrew\e[0m\n' /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" fi # Install git if not installed if [ ! -x "$(command -v git)" ]; then + printf '\e[1mInstalling Git\e[0m\n' brew install git fi # git clone these dotfiles if not done yet if [ ! -d ~/dotfiles ]; then + printf '\e[1mCloning dotfiles repo\e[0m\n' git clone git@github.com:mastertinner/dotfiles.git ~ fi # Install stow if not installed if [ ! -x "$(command -v stow)" ]; then + printf '\e[1mLinking dotfiles to your home directory\e[0m\n' brew install stow fi # Remove existing config files @@ -55,6 +61,7 @@ case "$(uname)" in # Use vimrc as Neovim config if [ -f ~/.config/nvim/init.vim ]; then + printf '\e[1mSetting up Neovim\e[0m\n' rm ~/.config/nvim/init.vim fi mkdir -p ~/.config/nvim @@ -79,27 +86,33 @@ case "$(uname)" in # Use zsh if [ -x "$(command -v zsh)" ]; then + printf '\e[1mChanging your shell to zsh\e[0m\n' chsh -s "$(which zsh)" fi - echo 'Dotfiles successfully initialized. Please reboot to finalize.' + printf '\e[1mDotfiles successfully initialized. Please reboot to finalize.\e[0m\n' ;; 'Linux') if [ ! -x "$(command -v pacman)" ]; then - echo 'Only Arch Linux is currently supported' + printf '\e[1mArch Linux is the only distro currently supported for automated setup\e[0m\n' exit 1 fi # Install git if not installed - sudo pacman -Syu git --noconfirm --needed + if [ ! -x "$(command -v git)" ]; then + printf '\e[1mInstalling Git\e[0m\n' + sudo pacman -Syu git --noconfirm + fi # git clone these dotfiles if not done yet if [ ! -d ~/dotfiles ]; then + printf '\e[1mCloning dotfiles repo\e[0m\n' git clone https://github.com/mastertinner/dotfiles.git fi # Install stow if not installed + printf '\e[1mLinking dotfiles to your home directory\e[0m\n' sudo pacman -Syu stow --noconfirm --needed # Remove existing config files if [ -f ~/.bashrc ]; then @@ -114,6 +127,7 @@ case "$(uname)" in done # Install tools + printf '\e[1mInstalling desired tools and apps\e[0m\n' sudo pacman -Syu --noconfirm --needed \ tmux \ neovim \ @@ -137,6 +151,7 @@ case "$(uname)" in fi # Use vimrc as Neovim config + printf '\e[1mSetting up Neovim\e[0m\n' if [ -f ~/.config/nvim/init.vim ]; then rm ~/.config/nvim/init.vim fi @@ -155,15 +170,16 @@ case "$(uname)" in # Use zsh if [ -x "$(command -v zsh)" ]; then + printf '\e[1mChanging your shell to zsh\e[0m\n' chsh -s "$(which zsh)" fi - echo 'Dotfiles successfully initialized. Please reboot to finalize.' + printf '\e[1mDotfiles successfully initialized. Please reboot to finalize.\e[0m\n' ;; # Default *) - echo "OS not supported. Please install manually." + printf '\e[1mOS not supported for automated setup. Please install manually.\e[0m\n' exit 1 ;; esac From 3183471b40e4230fbfaa51b1e563289d77343465 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Wed, 17 Jan 2018 12:44:45 +0100 Subject: [PATCH 190/532] Remove npm install from depu command --- bash/.functions | 1 - update-js.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/bash/.functions b/bash/.functions index cd668697..82e75410 100644 --- a/bash/.functions +++ b/bash/.functions @@ -72,7 +72,6 @@ function depu() { pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) if [ "${pkg_count}" -gt 0 ]; then printf 'Updating npm dependencies...\n\n' - npm install npm update npm prune npm outdated diff --git a/update-js.sh b/update-js.sh index 5ac14c05..84bea854 100755 --- a/update-js.sh +++ b/update-js.sh @@ -4,7 +4,6 @@ set -u js_dir="${HOME}/js" - if [ -d "${js_dir}" ]; then cd "${js_dir}" || exit for d in */ ; do From d017e7260a736adb929fb2f1eefcfb2c66167006 Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Fri, 19 Jan 2018 20:36:14 +0100 Subject: [PATCH 191/532] Add brew upgrade command to upgrade dependencies --- bash/.functions | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/.functions b/bash/.functions index 82e75410..2880e6e7 100644 --- a/bash/.functions +++ b/bash/.functions @@ -130,6 +130,7 @@ function pacu() { if [ -x "$(command -v brew)" ]; then printf '\e[1mUpdating Homebrew packages\e[0m\n' brew update + brew upgrade cat ~/dotfiles/Brewfile* | brew bundle --file=- cat ~/dotfiles/Brewfile* | brew bundle cleanup --force --file=- brew cu --all --yes --cleanup From 21c808d17108d8e7da3a1ebf74d21c9d53049c9a Mon Sep 17 00:00:00 2001 From: Tobias Fuhrimann Date: Mon, 22 Jan 2018 01:53:49 +0100 Subject: [PATCH 192/532] Remove dep prune from depu --- bash/.functions | 17 ++++++++--------- git/.gitconfig | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/bash/.functions b/bash/.functions index 2880e6e7..4212049d 100644 --- a/bash/.functions +++ b/bash/.functions @@ -83,7 +83,6 @@ function depu() { printf 'Updating Dep dependencies...\n\n' dep ensure dep ensure -update - dep prune fi } @@ -123,7 +122,7 @@ function pacu() { # On macOS, use mas and Homebrew in parallel 'Darwin') if [ -x "$(command -v mas)" ]; then - printf '\e[1mUpdating Mac App Store apps\e[0m\n' + printf '\e[1mUpdating App Store apps\e[0m\n' (mas upgrade) & mas_pid="$!" fi @@ -146,14 +145,14 @@ function pacu() { ;; esac -# Go + # Go if [ -x "$(command -v go)" ]; then printf '\e[1mUpdating Go binaries\e[0m\n' ("${HOME}/dotfiles/update-go.sh") & go_pid="$!" fi -# Node.js and npm + # Node.js and npm if [ -x "$(command -v npm)" ]; then printf '\e[1mUpdating globally installed npm packages\e[0m\n' (npm update -g) & @@ -166,14 +165,14 @@ function pacu() { npm_pid="$!" fi -# Ruby + # Ruby if [ -x "$(command -v gem)" ]; then printf '\e[1mUpdating Ruby gems\e[0m\n' (gem update --force && gem cleanup) & ruby_pid="$!" fi -# Python + # Python if [ -x "$(command -v pip)" ]; then printf '\e[1mUpdating pip packages\e[0m\n' (for pkg in $(pip list --outdated | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & @@ -185,20 +184,20 @@ function pacu() { python_pid="$!" fi -# Python3 + # Python3 if [ -x "$(command -v pip3)" ]; then printf '\e[1mUpdating pip3 packages\e[0m\n' (for pkg in $(pip3 list --outdated | cut -d' ' -f1); do pip3 install --user --upgrade $pkg; done) & python3_pid="$!" fi -# Vim + # Vim if [ -x "$(command -v vim)" ]; then printf '\e[1mUpdating vim plugins\e[0m\n' vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' fi -# Wait for all processes to finish + # Wait for all processes to finish wait "${npm_pid}" &> /dev/null wait "${go_pid}" &> /dev/null wait "${ruby_pid}" &> /dev/null diff --git a/git/.gitconfig b/git/.gitconfig index a26ab9c5..66ca8a7d 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -1,5 +1,5 @@ [user] - name = Tobias Fuhrimann + name = Tobi Fuhrimann email = tobias.fuhrimann@gmail.com [github] user = mastertinner From 7fbcbcf1ead8e80a55ce4528da4ad8b3dd73f9c5 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 27 Feb 2018 14:58:29 +0100 Subject: [PATCH 193/532] Add Yarn --- Brewfile | 1 + README.md | 29 +++++++++++++++-------------- bash/.functions | 33 +++++++++++++++++++++++++-------- init.sh | 12 +++--------- update-js.sh | 4 +++- 5 files changed, 47 insertions(+), 32 deletions(-) diff --git a/Brewfile b/Brewfile index a0b67f8f..a9a0d0b2 100644 --- a/Brewfile +++ b/Brewfile @@ -34,6 +34,7 @@ brew "tig" brew "tmate" brew "tmux" brew "wget" +brew "yarn" brew "zsh" # Desktop Applications diff --git a/README.md b/README.md index fa4f53ad..a5f863fe 100644 --- a/README.md +++ b/README.md @@ -6,30 +6,31 @@ I mainly work with [Go](https://golang.org/), [JavaScript](https://en.wikipedia. ## Installation -1. Run the following command: +1. Run the following command: - **WARNING: This may install and/or remove software and change your configs!** + **WARNING: This may install and/or remove software and change your configs!** - ```shell - $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) - ``` + ```shell + $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) + ``` -1. Run command again if Xcode Command Line Tools needed to be installed +1. Run command again if Xcode Command Line Tools needed to be installed ## Usage -* `pacu`: Installs and updates everything in `Brewfile` and removes everything else +* `pacu`: Updates and upgrades the whole system (using `Brewfile` on macOS) +* `depu`: Updates and upgrades the dependencies for the current project * `vim`: Starts Neovim with all plugins * and many more... ## Customize -1. Fork this repo -1. Change the `git clone` command in `init.sh` to use your own repo -1. Change the name and email address in `git/.gitconfig` -1. Change `Brewfile` to your liking or add `Brewfile.extra` for independent packages per machine -1. If you have apps installed which you didn't install through `brew cask` but that you now added to `Brewfile` as `cask`, you need to reinstall them with `brew cask install --force` so `cask` knows it's supposed to manage these apps. +1. Fork this repo +1. Change the `git clone` command in `init.sh` to use your own repo +1. Change the name and email address in `git/.gitconfig` +1. Change `Brewfile` to your liking or add `Brewfile.extra` for independent packages per machine +1. If you have apps installed which you didn't install through `brew cask` but that you now added to `Brewfile` as `cask`, you need to reinstall them with `brew cask install --force` so `cask` knows it's supposed to manage these apps. - Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. + Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. -1. Run the above installation command substituting the repo URL with your own +1. Run the above installation command substituting the repo URL with your own diff --git a/bash/.functions b/bash/.functions index 4212049d..1513f02c 100644 --- a/bash/.functions +++ b/bash/.functions @@ -69,20 +69,33 @@ function ide() { function depu() { # npm - pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) - if [ "${pkg_count}" -gt 0 ]; then - printf 'Updating npm dependencies...\n\n' + lock_count=$(ls -1 package-lock.json 2>/dev/null | wc -l) + if [ "${lock_count}" -gt 0 ]; then + printf "Updating npm dependencies for ${PWD##*/}...\n\n" npm update npm prune + npm dedupe npm outdated fi + # Yarn + pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) + lock_count=$(ls -1 yarn.json 2>/dev/null | wc -l) + if [ "${pkg_count}" -gt 0 ] && [ "${lock_count}" -gt 0 ]; then + printf "Updating Yarn dependencies for ${PWD##*/}...\n\n" + yarn upgrade > /dev/null + yarn prune + yarn dedupe + yarn outdated + fi + # Go dep pkg_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) if [ "${pkg_count}" -gt 0 ]; then - printf 'Updating Dep dependencies...\n\n' + printf "Updating Dep dependencies for ${PWD##*/}...\n\n" dep ensure dep ensure -update + # dep status -old fi } @@ -152,17 +165,21 @@ function pacu() { go_pid="$!" fi - # Node.js and npm + # Node.js, npm and Yarn if [ -x "$(command -v npm)" ]; then printf '\e[1mUpdating globally installed npm packages\e[0m\n' (npm update -g) & npm_global_pid="$!" + printf '\e[1mUpdating globally installed Yarn packages\e[0m\n' + (yarn global upgrade > /dev/null) & + yarn_global_pid="$!" + wait "${npm_global_pid}" - npm outdated -g + wait "${yarn_global_pid}" printf '\e[1mUpdating Node.js projects\e[0m\n' ("${HOME}/dotfiles/update-js.sh") & - npm_pid="$!" + yarn_pid="$!" fi # Ruby @@ -198,7 +215,7 @@ function pacu() { fi # Wait for all processes to finish - wait "${npm_pid}" &> /dev/null + wait "${yarn_pid}" &> /dev/null wait "${go_pid}" &> /dev/null wait "${ruby_pid}" &> /dev/null wait "${python_pid}" &> /dev/null diff --git a/init.sh b/init.sh index d7caeb04..af2a8c01 100755 --- a/init.sh +++ b/init.sh @@ -54,8 +54,7 @@ case "$(uname)" in rm ~/.bash_profile fi # Stow subdirectories of dotfiles - for dir in ~/dotfiles/*/ - do + for dir in ~/dotfiles/*/; do stow --dir ~/dotfiles "$(basename "${dir}")" done @@ -136,19 +135,14 @@ case "$(uname)" in go \ go-tools \ nodejs \ - npm \ + yarn \ fzf \ the_silver_searcher \ diff-so-fancy yaourt -Sy --noconfirm --needed \ prezto-git \ spotify \ - cloudfoundry-cli \ - - # Change npm folder - if [ -x "$(command -v npm)" ]; then - npm config set prefix ~ - fi + cloudfoundry-cli # Use vimrc as Neovim config printf '\e[1mSetting up Neovim\e[0m\n' diff --git a/update-js.sh b/update-js.sh index 84bea854..1c8d2c37 100755 --- a/update-js.sh +++ b/update-js.sh @@ -2,11 +2,13 @@ set -u +source ~/dotfiles/bash/.functions + js_dir="${HOME}/js" if [ -d "${js_dir}" ]; then cd "${js_dir}" || exit for d in */ ; do - ( cd "$d" && git pull && npm update && npm prune && npm dedupe && npm outdated ) + ( cd "$d" && git pull && depu ) done fi From c5aa2a018592589a6018b770e65c8c6078814a16 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 4 Mar 2018 11:32:10 +0100 Subject: [PATCH 194/532] Add missing software to arch init script --- Brewfile | 2 -- init.sh | 35 +++++++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/Brewfile b/Brewfile index a9a0d0b2..361eaf60 100644 --- a/Brewfile +++ b/Brewfile @@ -30,7 +30,6 @@ brew "neovim" brew "reattach-to-user-namespace" brew "shellcheck" brew "the_silver_searcher" -brew "tig" brew "tmate" brew "tmux" brew "wget" @@ -46,7 +45,6 @@ cask "google-chrome" cask "graphiql" cask "imageoptim" cask "iterm2" -cask "minikube" cask "mongodb-compass" cask "postman" cask "rambox" diff --git a/init.sh b/init.sh index af2a8c01..ddb5a581 100755 --- a/init.sh +++ b/init.sh @@ -128,21 +128,40 @@ case "$(uname)" in # Install tools printf '\e[1mInstalling desired tools and apps\e[0m\n' sudo pacman -Syu --noconfirm --needed \ - tmux \ - neovim \ - python-neovim \ - zsh \ go \ - go-tools \ nodejs \ - yarn \ + python2 \ + python \ + ruby \ + cmake \ + diff-so-fancy \ + docker \ fzf \ + git \ + go-tools \ + htop \ + jq \ + mongodb \ + neovim \ + python-neovim \ + shellcheck \ the_silver_searcher \ - diff-so-fancy + tmux \ + wget \ + yaourt \ + yarn \ + zsh yaourt -Sy --noconfirm --needed \ + cloudfoundry-cli \ + dep \ + delve \ + dropbox \ + graphiql-app \ + kubectl-bin \ + minio-client \ prezto-git \ spotify \ - cloudfoundry-cli + tmate # Use vimrc as Neovim config printf '\e[1mSetting up Neovim\e[0m\n' From df64223acc4987cc7dd0a3dbc4b5bbad0d5c73fc Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 4 Mar 2018 14:00:26 +0100 Subject: [PATCH 195/532] Use Neovim install command for vim-plug --- init.sh | 5 +++++ vim/.plugins.vimrc | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/init.sh b/init.sh index ddb5a581..b157811e 100755 --- a/init.sh +++ b/init.sh @@ -163,6 +163,11 @@ case "$(uname)" in spotify \ tmate + # Change npm folder + if [ -x "$(command -v npm)" ]; then + npm config set prefix ~ + fi + # Use vimrc as Neovim config printf '\e[1mSetting up Neovim\e[0m\n' if [ -f ~/.config/nvim/init.vim ]; then diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 279ed9e8..e54cf2fe 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -1,6 +1,6 @@ -" Install vim plug if not installed -if empty(glob('~/.vim/autoload/plug.vim')) - silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs +" Install vim-plug if not installed +if empty(glob('~/.local/share/nvim/site/autoload/plug.vim')) + silent !curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif From 5c207d4352de6ca512604d681a9438d218a922e6 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 5 Mar 2018 09:53:37 +0100 Subject: [PATCH 196/532] Enable Docker service on Arch Linux --- Brewfile | 1 - bash/.functions | 16 ++-------------- init.sh | 49 ++++++++++++++++++++++++------------------------- 3 files changed, 26 insertions(+), 40 deletions(-) diff --git a/Brewfile b/Brewfile index 361eaf60..70d0175c 100644 --- a/Brewfile +++ b/Brewfile @@ -9,7 +9,6 @@ tap "buo/cask-upgrade" brew "go" brew "node" brew "python" -brew "python3" brew "ruby" # Tools diff --git a/bash/.functions b/bash/.functions index 1513f02c..ab7bee44 100644 --- a/bash/.functions +++ b/bash/.functions @@ -47,7 +47,7 @@ function fshow() { FZF-EOF" } -# Open tmux and vim in an IDE like layout +# Open tmux and Vim in an IDE like layout function ide() { if [ ! -z "$1" ]; then cd "$1" || exit @@ -195,22 +195,10 @@ function pacu() { (for pkg in $(pip list --outdated | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & python_pid="$!" fi - if [ -x "$(command -v pip2)" ]; then - printf '\e[1mUpdating pip2 packages\e[0m\n' - (for pkg in $(pip2 list --outdated | cut -d' ' -f1); do pip2 install --user --upgrade $pkg; done) & - python_pid="$!" - fi - - # Python3 - if [ -x "$(command -v pip3)" ]; then - printf '\e[1mUpdating pip3 packages\e[0m\n' - (for pkg in $(pip3 list --outdated | cut -d' ' -f1); do pip3 install --user --upgrade $pkg; done) & - python3_pid="$!" - fi # Vim if [ -x "$(command -v vim)" ]; then - printf '\e[1mUpdating vim plugins\e[0m\n' + printf '\e[1mUpdating Vim plugins\e[0m\n' vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' fi diff --git a/init.sh b/init.sh index b157811e..0a4e6d56 100755 --- a/init.sh +++ b/init.sh @@ -66,30 +66,22 @@ case "$(uname)" in mkdir -p ~/.config/nvim ln -s ~/.vimrc ~/.config/nvim/init.vim - # Install Python3 and pip3 if not installed - if [ ! -x "$(command -v pip3)" ]; then - brew install python3 + # Install Python and pip if not installed + if [ ! -x "$(command -v pip)" ]; then + brew install python fi # Install the Python neovim package - pip3 install neovim --upgrade --user neovim + pip install --upgrade --user neovim # Run full system upgrade source ~/dotfiles/bash/.path source ~/dotfiles/bash/.functions pacu - # Symlink Neovim to vim if vim not installed + # Symlink nvim to vim if Vim not installed if [ ! -f /usr/local/bin/vim ]; then sudo ln -s /usr/local/bin/nvim /usr/local/bin/vim fi - - # Use zsh - if [ -x "$(command -v zsh)" ]; then - printf '\e[1mChanging your shell to zsh\e[0m\n' - chsh -s "$(which zsh)" - fi - - printf '\e[1mDotfiles successfully initialized. Please reboot to finalize.\e[0m\n' ;; 'Linux') @@ -110,7 +102,7 @@ case "$(uname)" in git clone https://github.com/mastertinner/dotfiles.git fi - # Install stow if not installed + # Install Stow if not installed printf '\e[1mLinking dotfiles to your home directory\e[0m\n' sudo pacman -Syu stow --noconfirm --needed # Remove existing config files @@ -124,14 +116,16 @@ case "$(uname)" in for dir in ~/dotfiles/*/; do stow --dir ~/dotfiles "$(basename "${dir}")" done + sudo pacman -Rns stow --noconfirm # Install tools printf '\e[1mInstalling desired tools and apps\e[0m\n' sudo pacman -Syu --noconfirm --needed \ go \ nodejs \ - python2 \ + npm \ python \ + python-pip \ ruby \ cmake \ diff-so-fancy \ @@ -143,7 +137,6 @@ case "$(uname)" in jq \ mongodb \ neovim \ - python-neovim \ shellcheck \ the_silver_searcher \ tmux \ @@ -163,6 +156,9 @@ case "$(uname)" in spotify \ tmate + # Enable docker service + sudo systemctl enable docker.service + # Change npm folder if [ -x "$(command -v npm)" ]; then npm config set prefix ~ @@ -176,23 +172,18 @@ case "$(uname)" in mkdir -p ~/.config/nvim ln -s ~/.vimrc ~/.config/nvim/init.vim + # Install the Python neovim package + pip install neovim --upgrade --user + # Run full system upgrade source ~/dotfiles/bash/.path source ~/dotfiles/bash/.functions pacu - # Symlink Neovim to vim if vim not installed + # Symlink nvim to vim if Vim not installed if [ ! -f /usr/bin/vim ]; then sudo ln -s /usr/bin/nvim /usr/bin/vim fi - - # Use zsh - if [ -x "$(command -v zsh)" ]; then - printf '\e[1mChanging your shell to zsh\e[0m\n' - chsh -s "$(which zsh)" - fi - - printf '\e[1mDotfiles successfully initialized. Please reboot to finalize.\e[0m\n' ;; # Default @@ -201,3 +192,11 @@ case "$(uname)" in exit 1 ;; esac + +# Use zsh +if [ -x "$(command -v zsh)" ]; then + printf '\e[1mChanging your shell to zsh\e[0m\n' + chsh -s "$(which zsh)" +fi + +printf '\e[1mDotfiles successfully initialized. Please reboot to finalize.\e[0m\n' From 77b7544e43e91ec29de330d2168a2a78893a90e6 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 5 Mar 2018 16:47:35 +0100 Subject: [PATCH 197/532] Add eopkg to pacu command --- bash/.functions | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bash/.functions b/bash/.functions index ab7bee44..995ddfcd 100644 --- a/bash/.functions +++ b/bash/.functions @@ -123,6 +123,11 @@ function pacu() { printf '\e[1mUpdating yaourt packages\e[0m\n' yaourt -Syua --noconfirm fi + # Solus + if [ -x "$(command -v eopkg)" ]; then + printf '\e[1mUpdating eopkg packages\e[0m\n' + sudo eopkg upgrade + fi # Debian if [ -x "$(command -v apt-get)" ]; then printf '\e[1mUpdating apt packages\e[0m\n' From 97c828415c12da0295caaea5147ce3cc8a04f861 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 5 Mar 2018 17:17:58 +0100 Subject: [PATCH 198/532] Allow users to run docker without sudo on Linux --- init.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/init.sh b/init.sh index 0a4e6d56..e24275d1 100755 --- a/init.sh +++ b/init.sh @@ -156,8 +156,10 @@ case "$(uname)" in spotify \ tmate - # Enable docker service + # Enable docker service and allow user to run it without sudo sudo systemctl enable docker.service + sudo groupadd docker + sudo usermod -aG docker "${USER}" # Change npm folder if [ -x "$(command -v npm)" ]; then From 058f94f9f572abdb69a160e5f7a0fabcdce02d19 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 8 Mar 2018 16:43:27 +0100 Subject: [PATCH 199/532] Directly use nova snippets --- bash/.functions | 4 +-- git/.gitconfig | 88 ++++++++++++++++++++++++------------------------- tmux/.tmux.conf | 14 ++++---- 3 files changed, 52 insertions(+), 54 deletions(-) diff --git a/bash/.functions b/bash/.functions index 995ddfcd..20d08a61 100644 --- a/bash/.functions +++ b/bash/.functions @@ -80,12 +80,10 @@ function depu() { # Yarn pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) - lock_count=$(ls -1 yarn.json 2>/dev/null | wc -l) + lock_count=$(ls -1 yarn.lock 2>/dev/null | wc -l) if [ "${pkg_count}" -gt 0 ] && [ "${lock_count}" -gt 0 ]; then printf "Updating Yarn dependencies for ${PWD##*/}...\n\n" yarn upgrade > /dev/null - yarn prune - yarn dedupe yarn outdated fi diff --git a/git/.gitconfig b/git/.gitconfig index 66ca8a7d..47400e12 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -18,53 +18,53 @@ ; Use https://github.com/trevordmiller/nova-git [color] - pager = true - ui = auto - status = auto - diff = auto - branch = auto - showBranch = auto - interactive = auto - grep = auto + pager = true + ui = auto + status = auto + diff = auto + branch = auto + showBranch = auto + interactive = auto + grep = auto [color "status"] - header = black bold - branch = cyan - nobranch = red - unmerged = red - untracked = cyan - added = green - changed = red bold + header = black bold + branch = cyan + nobranch = red + unmerged = red + untracked = cyan + added = green + changed = red bold [color "diff"] - meta = red bold - frag = black bold - func = blue - old = red strike - new = green - commit = blue - whitespace = red - context = normal + meta = red bold + frag = black bold + func = blue + old = red strike + new = green + commit = blue + whitespace = red + context = normal [color "branch"] - current = cyan - local = blue - remote = magenta - upstream = magenta - plain = normal + current = cyan + local = blue + remote = magenta + upstream = magenta + plain = normal [color "decorate"] - branch = blue - remoteBranch = magenta - tag = magenta - stash = cyan - HEAD = blue + branch = blue + remoteBranch = magenta + tag = magenta + stash = cyan + HEAD = blue [color "interactive"] - prompt = red - header = red bold - error = red - help = black bold + prompt = red + header = red bold + error = red + help = black bold [color "grep"] - context = normal - match = cyan - filename = blue - function = blue - selected = normal - separator = red bold - linenumber = normal + context = normal + match = cyan + filename = blue + function = blue + selected = normal + separator = red bold + linenumber = normal diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index b442c843..40bd18c3 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -1,14 +1,14 @@ # Use https://github.com/trevordmiller/nova-tmux -set-option -g default-terminal "screen-256color" set -ga terminal-overrides ",xterm-256color:Tc" -set -g pane-border-style 'bg=black,fg=#1E272C' -set -g pane-active-border-style 'bg=black,fg=#1E272C' +set -g default-terminal "xterm-256color" set -g status-style 'bg=#1E272C,fg=#6A7D89' -set-window-option -g window-status-current-bg '#1E272C' -set-window-option -g window-status-current-fg cyan -set -wg mode-style 'bg=cyan,fg=black' +set -g window-status-current-style 'fg=cyan' +set -g mode-style 'bg=cyan,fg=black' set -g message-style 'bg=black,fg=cyan' -set -g clock-mode-colour cyan +set -g pane-border-style 'bg=black,fg=#1E272C' +set -g pane-active-border-style 'bg=black,fg=#1E272C' + +# Set escape time to 0 for esc to work properly in Vim set -s escape-time 0 # Highlight active window more clearly From e962c2c5dcbda659b4e903bf04bd015aadf3b5f7 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 12 Mar 2018 22:46:33 +0100 Subject: [PATCH 200/532] Replace Rambox with native clients --- Brewfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Brewfile b/Brewfile index 70d0175c..b7914237 100644 --- a/Brewfile +++ b/Brewfile @@ -46,10 +46,12 @@ cask "imageoptim" cask "iterm2" cask "mongodb-compass" cask "postman" -cask "rambox" +cask "skype" +cask "slack" cask "spotify" cask "sqlectron" cask "virtualbox" +cask "whatsapp" mas "1Password", id: 443987910 mas "Affinity Designer", id: 824171161 From d6b393c3be74e0a7657ebc7e41a7f7c11ddad2dc Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 20 Mar 2018 21:50:41 +0100 Subject: [PATCH 201/532] Use commentary instead of nerdcommenter --- vim/.plugins.vimrc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index e54cf2fe..d0a02a0d 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -52,8 +52,7 @@ let NERDTreeIgnore = ['.DS_Store','.git$'] map :NERDTreeToggle " Toggle Comments -Plug 'scrooloose/nerdcommenter' -let g:NERDSpaceDelims = 1 +Plug 'tpope/vim-commentary' " Auto close braces Plug 'jiangmiao/auto-pairs' From 1ef55ce7d07364cb05a07ce1f6bda36a1659018f Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 26 Mar 2018 12:07:23 +0200 Subject: [PATCH 202/532] Unify shell config files --- bash/.bash_profile | 15 +++++++-------- zsh/.zpreztorc | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/bash/.bash_profile b/bash/.bash_profile index 2de51ada..e49c4f5c 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -1,11 +1,3 @@ -# Load the shell dotfiles, and then some: -# * ~/.path can be used to extend `$PATH`. -# * ~/.extra can be used for other settings you don’t want to commit. -for file in ~/.{path,exports,aliases,functions,extra}; do - [ -r "$file" ] && [ -f "$file" ] && source "$file"; -done; -unset file; - # Case-insensitive globbing (used in pathname expansion) shopt -s nocaseglob; @@ -33,3 +25,10 @@ fi; # Autocompletions for fzf [ -f ~/.fzf.bash ] && source ~/.fzf.bash + +# Load the shell dotfiles, and then some: +# * ~/.path can be used to extend `$PATH`. +# * ~/.extra can be used for other settings you don’t want to commit. +for file in ~/.{path,exports,aliases,functions,extra}; do + [ -r "$file" ] && [ -f "$file" ] && source "$file"; +done; diff --git a/zsh/.zpreztorc b/zsh/.zpreztorc index 0232d635..248adbb2 100644 --- a/zsh/.zpreztorc +++ b/zsh/.zpreztorc @@ -24,7 +24,7 @@ zstyle ':prezto:load' pmodule \ 'prompt' \ 'history' \ 'history-substring-search' \ - 'autosuggestions' \ + 'autosuggestions' # Set the prompt theme to load. # Setting it to 'random' loads a random theme. From c9ad150b82c2929124e14b79df13a32f59538807 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 3 Apr 2018 11:34:59 +0200 Subject: [PATCH 203/532] Use correct path to clone dotfiles repo --- init.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init.sh b/init.sh index e24275d1..6a23f5e1 100755 --- a/init.sh +++ b/init.sh @@ -38,7 +38,7 @@ case "$(uname)" in # git clone these dotfiles if not done yet if [ ! -d ~/dotfiles ]; then printf '\e[1mCloning dotfiles repo\e[0m\n' - git clone git@github.com:mastertinner/dotfiles.git ~ + git clone git@github.com:mastertinner/dotfiles.git ~/dotfiles fi # Install stow if not installed From ad6d52e18ab8579eee62a33df7537044098efdaa Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 3 Apr 2018 14:40:20 +0200 Subject: [PATCH 204/532] Install prezto for macOS --- init.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/init.sh b/init.sh index 6a23f5e1..720f17b5 100755 --- a/init.sh +++ b/init.sh @@ -78,6 +78,9 @@ case "$(uname)" in source ~/dotfiles/bash/.functions pacu + # Install prezto + git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" + # Symlink nvim to vim if Vim not installed if [ ! -f /usr/local/bin/vim ]; then sudo ln -s /usr/local/bin/nvim /usr/local/bin/vim From d6e8814ebe409be0f51b8ab96f2008e7dcb74d29 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 3 Apr 2018 23:16:43 +0200 Subject: [PATCH 205/532] Remove caffeine --- Brewfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Brewfile b/Brewfile index b7914237..52d58cf7 100644 --- a/Brewfile +++ b/Brewfile @@ -57,6 +57,5 @@ mas "1Password", id: 443987910 mas "Affinity Designer", id: 824171161 mas "Affinity Photo", id:824183456 mas "BetterSnapTool", id: 417375580 -mas "Caffeine", id: 411246225 mas "PopClip", id: 445189367 mas "The Unarchiver", id: 425424353 From 500599ac989f95759e91bdaf730571c47d9e4348 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 4 Apr 2018 08:08:30 +0200 Subject: [PATCH 206/532] Add support for HCL in Vim --- vim/.plugins.vimrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index d0a02a0d..1f33f017 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -130,5 +130,8 @@ Plug 'mhartington/nvim-typescript', { 'do': 'npm install -g typescript', 'for': " GraphQL schema support Plug 'jparise/vim-graphql', { 'for': 'graphql' } +" HCL support +Plug 'fatih/vim-hclfmt' + " Initialize plugin system call plug#end() From 4d58a6fbfca6f983934966812beff2b9709beb63 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 4 Apr 2018 08:21:15 +0200 Subject: [PATCH 207/532] Install vim-plug before running pacu --- init.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/init.sh b/init.sh index 720f17b5..52dac11d 100755 --- a/init.sh +++ b/init.sh @@ -73,13 +73,19 @@ case "$(uname)" in # Install the Python neovim package pip install --upgrade --user neovim + # Install vim-plug + curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + # Run full system upgrade source ~/dotfiles/bash/.path source ~/dotfiles/bash/.functions pacu # Install prezto - git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" + if [ ! -d ~/.zprezto ]; then + git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" + fi # Symlink nvim to vim if Vim not installed if [ ! -f /usr/local/bin/vim ]; then @@ -180,6 +186,10 @@ case "$(uname)" in # Install the Python neovim package pip install neovim --upgrade --user + # Install vim-plug + curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + # Run full system upgrade source ~/dotfiles/bash/.path source ~/dotfiles/bash/.functions From ba456fa0788a6a72b9263637d162c9882aa7e882 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 5 Apr 2018 08:48:23 +0200 Subject: [PATCH 208/532] Add Terraform --- Brewfile | 1 + init.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/Brewfile b/Brewfile index 52d58cf7..d07933f6 100644 --- a/Brewfile +++ b/Brewfile @@ -28,6 +28,7 @@ brew "mongodb" brew "neovim" brew "reattach-to-user-namespace" brew "shellcheck" +brew "terraform" brew "the_silver_searcher" brew "tmate" brew "tmux" diff --git a/init.sh b/init.sh index 52dac11d..3676df89 100755 --- a/init.sh +++ b/init.sh @@ -147,6 +147,7 @@ case "$(uname)" in mongodb \ neovim \ shellcheck \ + terraform \ the_silver_searcher \ tmux \ wget \ From 0c8f9c1cd3558a47bcdbe9cf9cf5f6e8548c96e0 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 11 Apr 2018 19:05:51 +0200 Subject: [PATCH 209/532] Use official vim plugin for Terraform --- vim/.plugins.vimrc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 1f33f017..a0193bdd 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -130,8 +130,9 @@ Plug 'mhartington/nvim-typescript', { 'do': 'npm install -g typescript', 'for': " GraphQL schema support Plug 'jparise/vim-graphql', { 'for': 'graphql' } -" HCL support -Plug 'fatih/vim-hclfmt' +" Terraform support +Plug 'hashivim/vim-terraform' +let g:terraform_fmt_on_save = 1 " Initialize plugin system call plug#end() From 6a9392b0db78b3fcd8084ebafe3bb9d63da0f9bc Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 18 Apr 2018 08:58:24 +0200 Subject: [PATCH 210/532] Re-arrange Vim plugins --- Brewfile | 2 +- bash/.functions | 19 ++++++-------- git/.gitignore_global | 1 - init.sh | 1 - vim/.plugins.vimrc | 60 ++++++++++++++++++++----------------------- 5 files changed, 37 insertions(+), 46 deletions(-) diff --git a/Brewfile b/Brewfile index d07933f6..495fd063 100644 --- a/Brewfile +++ b/Brewfile @@ -32,8 +32,8 @@ brew "terraform" brew "the_silver_searcher" brew "tmate" brew "tmux" +brew "watchman" brew "wget" -brew "yarn" brew "zsh" # Desktop Applications diff --git a/bash/.functions b/bash/.functions index 20d08a61..333976eb 100644 --- a/bash/.functions +++ b/bash/.functions @@ -168,21 +168,19 @@ function pacu() { go_pid="$!" fi - # Node.js, npm and Yarn + # npm if [ -x "$(command -v npm)" ]; then printf '\e[1mUpdating globally installed npm packages\e[0m\n' - (npm update -g) & - npm_global_pid="$!" - - printf '\e[1mUpdating globally installed Yarn packages\e[0m\n' - (yarn global upgrade > /dev/null) & - yarn_global_pid="$!" + npm update -g - wait "${npm_global_pid}" - wait "${yarn_global_pid}" printf '\e[1mUpdating Node.js projects\e[0m\n' ("${HOME}/dotfiles/update-js.sh") & - yarn_pid="$!" + fi + + # Yarn + if [ -x "$(command -v yarn)" ]; then + printf '\e[1mUpdating globally installed Yarn packages\e[0m\n' + yarn global upgrade > /dev/null fi # Ruby @@ -206,7 +204,6 @@ function pacu() { fi # Wait for all processes to finish - wait "${yarn_pid}" &> /dev/null wait "${go_pid}" &> /dev/null wait "${ruby_pid}" &> /dev/null wait "${python_pid}" &> /dev/null diff --git a/git/.gitignore_global b/git/.gitignore_global index 10f3bb97..f31b3e29 100644 --- a/git/.gitignore_global +++ b/git/.gitignore_global @@ -1,3 +1,2 @@ .DS_Store -npm-debug.log *.swp diff --git a/init.sh b/init.sh index 3676df89..5a6952e9 100755 --- a/init.sh +++ b/init.sh @@ -152,7 +152,6 @@ case "$(uname)" in tmux \ wget \ yaourt \ - yarn \ zsh yaourt -Sy --noconfirm --needed \ cloudfoundry-cli \ diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index a0193bdd..0c0c6321 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -11,10 +11,6 @@ call plug#begin('~/.local/share/nvim/plugged') " Color scheme Plug 'trevordmiller/nova-vim' -" Emmet for HTML editing -Plug 'mattn/emmet-vim', { 'for': ['html','xml'] } -let g:user_emmet_leader_key='' - " Goyo mode for focused writing Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' @@ -35,13 +31,27 @@ function! s:goyo_leave() Limelight! endfunction -" Git integration -Plug 'tpope/vim-fugitive' +" Fuzzy finder +Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } +Plug 'junegunn/fzf.vim' +nnoremap :Files + +" Time tracking +Plug 'wakatime/vim-wakatime' " Diff directories Plug 'will133/vim-dirdiff' let g:DirDiffExcludes = ".git,node_modules,vendor,dist,.DS_Store,.*.swp" +" Git integration +Plug 'tpope/vim-fugitive' + +" Show Git indicators with line numbers +Plug 'airblade/vim-gitgutter' + +" Detect indent settings +Plug 'tpope/vim-sleuth' + " Edit surrounds Plug 'tpope/vim-surround' @@ -71,30 +81,13 @@ let g:ale_fix_on_save = 1 nmap (ale_previous_wrap) nmap (ale_next_wrap) -" Show Git indicators with line numbers -Plug 'airblade/vim-gitgutter' - -" Fuzzy finder -Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } -Plug 'junegunn/fzf.vim' -nnoremap :Files - " Autocompletion Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } -Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } -Plug 'mhartington/deoplete-typescript', { 'do': ':UpdateRemotePlugins', 'for': 'typescript' } -Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } if has('nvim') && has('python3') let g:deoplete#enable_at_startup = 1 endif -" Detect indent settings -Plug 'tpope/vim-sleuth' - -" Time tracking -Plug 'wakatime/vim-wakatime' - -" Go language support +" Go Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' ,'for': 'go' } let g:go_fmt_command = 'goimports' let g:go_auto_type_info = 1 @@ -111,28 +104,31 @@ if has("autocmd") autocmd FileType go nmap b :call build_go_files() autocmd FileType go nmap t (go-test) endif -" Debugging +Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } Plug 'sebdah/vim-delve', { 'for': 'go' } -" Improved JavaScript language support +" JavaScript Plug 'pangloss/vim-javascript' +Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } let g:javascript_plugin_jsdoc = 1 let g:javascript_plugin_flow = 1 - -" JSX language support Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } let g:jsx_ext_required = 0 -" Typescript language support +" Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } Plug 'mhartington/nvim-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } +Plug 'mhartington/deoplete-typescript', { 'do': ':UpdateRemotePlugins', 'for': 'typescript' } -" GraphQL schema support +" GraphQL Plug 'jparise/vim-graphql', { 'for': 'graphql' } -" Terraform support -Plug 'hashivim/vim-terraform' +" Terraform +Plug 'hashivim/vim-terraform', { 'for': 'terraform' } let g:terraform_fmt_on_save = 1 +Plug 'juliosueiras/vim-terraform-completion', { 'for': 'terraform' } +let g:deoplete#omni_patterns = {} +let g:deoplete#omni_patterns.terraform = '[^ *\t"{=$]\w*' " Initialize plugin system call plug#end() From e7d76c23411d885b2f1800015f0a129acdf00f30 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 18 Apr 2018 17:51:20 +0200 Subject: [PATCH 211/532] Add autocompletion for Flow --- vim/.plugins.vimrc | 1 + 1 file changed, 1 insertion(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 0c0c6321..e3af47fe 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -114,6 +114,7 @@ let g:javascript_plugin_jsdoc = 1 let g:javascript_plugin_flow = 1 Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } let g:jsx_ext_required = 0 +Plug 'wokalski/autocomplete-flow', { 'for': 'javascript.jsx' } " Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } From df785262c0a2a0f1c6a4708b074d86f5a101b7d1 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 19 Apr 2018 11:37:35 +0200 Subject: [PATCH 212/532] Reverse order of IDE panes --- bash/.functions | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/bash/.functions b/bash/.functions index 333976eb..1ad184bd 100644 --- a/bash/.functions +++ b/bash/.functions @@ -54,14 +54,10 @@ function ide() { fi if [ ! -n "${TMUX}" ]; then - tmux new-session -d -s ide 'vim +NERDTree' - tmux split-window -v -p 10 - tmux select-pane -t 0 - tmux attach-session -d -t ide + tmux new-session -d -s ide + tmux split-window -v -p 90 'vim +NERDTree' else - tmux split-window -v -p 10 - tmux select-pane -t 0 - vim +NERDTree + tmux split-window -vb -p 90 'vim +NERDTree' fi } From baa81f44f4a6276c1b9688d1296830df7079488e Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 20 Apr 2018 20:02:14 +0200 Subject: [PATCH 213/532] Set dark mode for macOS --- init.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/init.sh b/init.sh index 5a6952e9..3a04a88a 100755 --- a/init.sh +++ b/init.sh @@ -23,6 +23,9 @@ case "$(uname)" in exit fi + # Set dark mode + sudo defaults delete /Library/Preferences/.GlobalPreferences AppleInterfaceTheme Dark + # Install Homebrew if not installed if [ ! -x "$(command -v brew)" ]; then printf '\e[1mInstalling Homebrew\e[0m\n' From f8780753415228a005ccbd9f087256f76b9af304 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sat, 21 Apr 2018 00:16:46 +0200 Subject: [PATCH 214/532] Fix IDE command --- bash/.functions | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bash/.functions b/bash/.functions index 1ad184bd..f03c0d77 100644 --- a/bash/.functions +++ b/bash/.functions @@ -55,9 +55,13 @@ function ide() { if [ ! -n "${TMUX}" ]; then tmux new-session -d -s ide - tmux split-window -v -p 90 'vim +NERDTree' + tmux split-window -vb -p 90 + tmux select-pane -t 0 + tmux send-keys 'vim +NERDTree' C-m else - tmux split-window -vb -p 90 'vim +NERDTree' + tmux split-window -vb -p 90 + tmux select-pane -t 0 + tmux send-keys 'vim +NERDTree' C-m fi } From 92894826d89a7431b2818bd44275e42e4299b264 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 24 Apr 2018 18:23:17 +0200 Subject: [PATCH 215/532] Use gobin instead of binstale --- update-go.sh | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/update-go.sh b/update-go.sh index 88f3b6cf..72468b5d 100755 --- a/update-go.sh +++ b/update-go.sh @@ -3,17 +3,9 @@ set -u if [ -x "$(command -v go)" ]; then - if [ ! -x "$(command -v binstale)" ]; then - go get -u github.com/shurcooL/binstale + if [ ! -x "$(command -v gobin)" ]; then + go get -u github.com/rjeczalik/bin/cmd/gobin fi - lines=$(binstale | grep 'stale: ') - - while read -r line; do - if [ ! -z "${line}" ]; then - uri=$(echo "${line}" | awk -F ' ' '{print $2}') - echo "Updating Go binary ${uri}" - go get -u "${uri}" - fi - done < <(echo "${lines}") + gobin -u fi From 9417d9ec17c66ef430117a3c880ebf8d9fac09a2 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 26 Apr 2018 00:46:39 +0200 Subject: [PATCH 216/532] Wait for npm processes to finish --- bash/.functions | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/.functions b/bash/.functions index f03c0d77..1a1775df 100644 --- a/bash/.functions +++ b/bash/.functions @@ -175,6 +175,7 @@ function pacu() { printf '\e[1mUpdating Node.js projects\e[0m\n' ("${HOME}/dotfiles/update-js.sh") & + npm_pid="$!" fi # Yarn @@ -205,6 +206,7 @@ function pacu() { # Wait for all processes to finish wait "${go_pid}" &> /dev/null + wait "${npm_pid}" &> /dev/null wait "${ruby_pid}" &> /dev/null wait "${python_pid}" &> /dev/null wait "${python3_pid}" &> /dev/null From 474cd2a32dff12788ae308b5a2655d5c3f4be5e2 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 30 Apr 2018 18:46:41 +0200 Subject: [PATCH 217/532] Remove unused software --- Brewfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Brewfile b/Brewfile index 495fd063..910753e0 100644 --- a/Brewfile +++ b/Brewfile @@ -2,7 +2,6 @@ tap "caskroom/cask" tap "cloudfoundry/tap" tap "go-delve/delve" -tap "minio/stable" tap "buo/cask-upgrade" # Languages @@ -21,9 +20,7 @@ brew "git" brew "go-delve/delve/delve" brew "htop" brew "jq" -brew "kubectl" brew "mas" -brew "minio/stable/mc" brew "mongodb" brew "neovim" brew "reattach-to-user-namespace" From ee5293205c0f91da508d32da4140bd152bb78d50 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sat, 5 May 2018 11:07:38 +0200 Subject: [PATCH 218/532] Add awscli to Brewfile --- Brewfile | 1 + bash/.functions | 36 ++++++++++++++++++------------------ bash/.path | 2 ++ init.sh | 46 +++++++++++++++++++++++++++++----------------- 4 files changed, 50 insertions(+), 35 deletions(-) diff --git a/Brewfile b/Brewfile index 910753e0..843f66a6 100644 --- a/Brewfile +++ b/Brewfile @@ -11,6 +11,7 @@ brew "python" brew "ruby" # Tools +brew "awscli" brew "cloudfoundry/tap/cf-cli" brew "cmake" brew "dep" diff --git a/bash/.functions b/bash/.functions index 1a1775df..6d29b074 100644 --- a/bash/.functions +++ b/bash/.functions @@ -100,6 +100,7 @@ function depu() { # System update function pacu() { + processes=() # Dotfiles repo printf '\e[1mUpdating dotfiles repo\e[0m\n' @@ -113,7 +114,10 @@ function pacu() { if [ -x "$(command -v pacman)" ]; then printf '\e[1mUpdating pacman packages\e[0m\n' sudo pacman -Syu --noconfirm - sudo pacman -Rns $(pacman -Qtdq) --noconfirm + orphans=$(sudo pacman -Qtdq) || orphans='' + if [ ! -z "${orphans}" ]; then + sudo pacman -Rns $orphans --noconfirm + fi sudo pacman -Sc --noconfirm sudo pacman-optimize fi @@ -139,8 +143,7 @@ function pacu() { 'Darwin') if [ -x "$(command -v mas)" ]; then printf '\e[1mUpdating App Store apps\e[0m\n' - (mas upgrade) & - mas_pid="$!" + mas upgrade fi if [ -x "$(command -v brew)" ]; then printf '\e[1mUpdating Homebrew packages\e[0m\n' @@ -154,10 +157,8 @@ function pacu() { if typeset -f zprezto-update > /dev/null; then printf '\e[1mUpdating zprezto\e[0m\n' zprezto-update & - zprezto_pid="$!" + processes+=("$!") fi - wait "${mas_pid}" &> /dev/null - wait "${zprezto_pid}" &> /dev/null ;; esac @@ -165,7 +166,7 @@ function pacu() { if [ -x "$(command -v go)" ]; then printf '\e[1mUpdating Go binaries\e[0m\n' ("${HOME}/dotfiles/update-go.sh") & - go_pid="$!" + processes+=("$!") fi # npm @@ -175,41 +176,40 @@ function pacu() { printf '\e[1mUpdating Node.js projects\e[0m\n' ("${HOME}/dotfiles/update-js.sh") & - npm_pid="$!" + processes+=("$!") fi # Yarn if [ -x "$(command -v yarn)" ]; then printf '\e[1mUpdating globally installed Yarn packages\e[0m\n' - yarn global upgrade > /dev/null + (yarn global upgrade > /dev/null) & + processes+=("$!") fi # Ruby if [ -x "$(command -v gem)" ]; then printf '\e[1mUpdating Ruby gems\e[0m\n' (gem update --force && gem cleanup) & - ruby_pid="$!" + processes+=("$!") fi # Python if [ -x "$(command -v pip)" ]; then printf '\e[1mUpdating pip packages\e[0m\n' (for pkg in $(pip list --outdated | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & - python_pid="$!" + processes+=("$!") fi # Vim - if [ -x "$(command -v vim)" ]; then + if [ -x "$(command -v nvim)" ]; then printf '\e[1mUpdating Vim plugins\e[0m\n' - vim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' + nvim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' fi # Wait for all processes to finish - wait "${go_pid}" &> /dev/null - wait "${npm_pid}" &> /dev/null - wait "${ruby_pid}" &> /dev/null - wait "${python_pid}" &> /dev/null - wait "${python3_pid}" &> /dev/null + for p in ${processes[*]}; do + wait "$p" + done printf '\e[1mSystem update finished\e[0m\n' } diff --git a/bash/.path b/bash/.path index 02af8332..a8315082 100644 --- a/bash/.path +++ b/bash/.path @@ -9,5 +9,7 @@ PATH="$PATH:$HOME/bin" GOPATH="$HOME/go" PATH="$PATH:$GOPATH/bin" +PATH="$PATH:$HOME/.node_modules/bin" + export GOPATH export PATH diff --git a/init.sh b/init.sh index 3a04a88a..bc85ee23 100755 --- a/init.sh +++ b/init.sh @@ -2,6 +2,8 @@ # This script installs these dotfiles. +set -e -u + printf '\e[1mInitializing dotfiles\e[0m\n' case "$(uname)" in @@ -13,7 +15,7 @@ case "$(uname)" in if ! xcode-select -p &> /dev/null; then read -p 'Xcode Command Line Tools not installed. You will have to run the script again after successfully installing them. Install now? (Y/n)' -r echo - if [[ ! $REPLY =~ ^[Nn]$ ]] + if [[ ! $REPLY =~ ^[Nn] ]] then xcode-select --install echo 'Please run the script again after the installation has finished' @@ -24,7 +26,7 @@ case "$(uname)" in fi # Set dark mode - sudo defaults delete /Library/Preferences/.GlobalPreferences AppleInterfaceTheme Dark + sudo defaults write /Library/Preferences/.GlobalPreferences AppleInterfaceTheme Dark # Install Homebrew if not installed if [ ! -x "$(command -v brew)" ]; then @@ -61,9 +63,15 @@ case "$(uname)" in stow --dir ~/dotfiles "$(basename "${dir}")" done + # Change npm folder + if [ -x "$(command -v npm)" ]; then + mkdir -p ~/.node_modules/lib + npm config set prefix ~/.node_modules + fi + # Use vimrc as Neovim config + printf '\e[1mSetting up Neovim\e[0m\n' if [ -f ~/.config/nvim/init.vim ]; then - printf '\e[1mSetting up Neovim\e[0m\n' rm ~/.config/nvim/init.vim fi mkdir -p ~/.config/nvim @@ -77,8 +85,8 @@ case "$(uname)" in pip install --upgrade --user neovim # Install vim-plug - curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ - https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # Run full system upgrade source ~/dotfiles/bash/.path @@ -102,10 +110,19 @@ case "$(uname)" in exit 1 fi + # Set colors for pacman + sudo sed -i 's/#Color/Color/' /etc/pacman.conf + + # Add Yaourt repo to pacman conf + grep -q -F "repo.archlinux.fr" /etc/pacman.conf || sudo sh -c 'echo '\'' +[archlinuxfr] +SigLevel = Never +Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' + # Install git if not installed if [ ! -x "$(command -v git)" ]; then printf '\e[1mInstalling Git\e[0m\n' - sudo pacman -Syu git --noconfirm + sudo pacman -Syu git --noconfirm --needed fi # git clone these dotfiles if not done yet @@ -139,6 +156,8 @@ case "$(uname)" in python \ python-pip \ ruby \ + aws-cli \ + chromium \ cmake \ diff-so-fancy \ docker \ @@ -161,23 +180,15 @@ case "$(uname)" in dep \ delve \ dropbox \ - graphiql-app \ - kubectl-bin \ - minio-client \ prezto-git \ spotify \ tmate # Enable docker service and allow user to run it without sudo sudo systemctl enable docker.service - sudo groupadd docker + getent group docker || groupadd docker sudo usermod -aG docker "${USER}" - # Change npm folder - if [ -x "$(command -v npm)" ]; then - npm config set prefix ~ - fi - # Use vimrc as Neovim config printf '\e[1mSetting up Neovim\e[0m\n' if [ -f ~/.config/nvim/init.vim ]; then @@ -190,8 +201,8 @@ case "$(uname)" in pip install neovim --upgrade --user # Install vim-plug - curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ - https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # Run full system upgrade source ~/dotfiles/bash/.path @@ -214,6 +225,7 @@ esac # Use zsh if [ -x "$(command -v zsh)" ]; then printf '\e[1mChanging your shell to zsh\e[0m\n' + grep -q -F "$(which zsh)" /etc/shells || sudo sh -c 'echo "$(which zsh)" >> /etc/shells' chsh -s "$(which zsh)" fi From 25fb674b5b52d4f1d7016e0bb2b308232e6a2c02 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 7 May 2018 08:43:08 +0200 Subject: [PATCH 219/532] Add hadolint --- Brewfile | 1 + init.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/Brewfile b/Brewfile index 843f66a6..ec0b7d9c 100644 --- a/Brewfile +++ b/Brewfile @@ -19,6 +19,7 @@ brew "diff-so-fancy" brew "fzf" brew "git" brew "go-delve/delve/delve" +brew "hadolint" brew "htop" brew "jq" brew "mas" diff --git a/init.sh b/init.sh index bc85ee23..c9184cd8 100755 --- a/init.sh +++ b/init.sh @@ -180,6 +180,7 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' dep \ delve \ dropbox \ + hadolint-git \ prezto-git \ spotify \ tmate From 22ce581b6127e03dbba7d67cb3ce0fb66f661f61 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 7 May 2018 10:02:56 +0200 Subject: [PATCH 220/532] Update go binaries when installing vim-go --- vim/.plugins.vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index e3af47fe..1f5675cc 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -88,7 +88,7 @@ if has('nvim') && has('python3') endif " Go -Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' ,'for': 'go' } +Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' ,'for': 'go' } let g:go_fmt_command = 'goimports' let g:go_auto_type_info = 1 " run :GoBuild or :GoTestCompile based on the go file From 7b7425731f5b320e6e51657a5ba46a9c9ee99f3a Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 9 May 2018 18:14:59 +0200 Subject: [PATCH 221/532] Run npm prune after npm dedepue --- bash/.functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.functions b/bash/.functions index 6d29b074..fdd42e0b 100644 --- a/bash/.functions +++ b/bash/.functions @@ -73,8 +73,8 @@ function depu() { if [ "${lock_count}" -gt 0 ]; then printf "Updating npm dependencies for ${PWD##*/}...\n\n" npm update - npm prune npm dedupe + npm prune npm outdated fi From a7eb032ca361080bdf61165ca81ebbf3d906786c Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 9 May 2018 21:21:52 +0200 Subject: [PATCH 222/532] Add zsh-completions --- Brewfile | 1 + init.sh | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Brewfile b/Brewfile index ec0b7d9c..017bea39 100644 --- a/Brewfile +++ b/Brewfile @@ -34,6 +34,7 @@ brew "tmux" brew "watchman" brew "wget" brew "zsh" +brew "zsh-completions" # Desktop Applications cask "alfred" diff --git a/init.sh b/init.sh index c9184cd8..4cf6562b 100755 --- a/init.sh +++ b/init.sh @@ -174,7 +174,8 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' tmux \ wget \ yaourt \ - zsh + zsh \ + zsh-completions yaourt -Sy --noconfirm --needed \ cloudfoundry-cli \ dep \ From b83bddab67c912c5e7770bf855a2c1c0c5b502b9 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sat, 12 May 2018 13:27:03 +0200 Subject: [PATCH 223/532] Add protobuf --- Brewfile | 1 + init.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/Brewfile b/Brewfile index 017bea39..c1060932 100644 --- a/Brewfile +++ b/Brewfile @@ -25,6 +25,7 @@ brew "jq" brew "mas" brew "mongodb" brew "neovim" +brew "protobuf" brew "reattach-to-user-namespace" brew "shellcheck" brew "terraform" diff --git a/init.sh b/init.sh index 4cf6562b..8044373e 100755 --- a/init.sh +++ b/init.sh @@ -168,6 +168,7 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' jq \ mongodb \ neovim \ + protobuf \ shellcheck \ terraform \ the_silver_searcher \ From ea9902edb4916bca7bb7d1dda35cefc75ee73908 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sat, 12 May 2018 13:39:48 +0200 Subject: [PATCH 224/532] Remove jsdoc support --- vim/.plugins.vimrc | 1 - 1 file changed, 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 1f5675cc..2d0e6e0d 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -110,7 +110,6 @@ Plug 'sebdah/vim-delve', { 'for': 'go' } " JavaScript Plug 'pangloss/vim-javascript' Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } -let g:javascript_plugin_jsdoc = 1 let g:javascript_plugin_flow = 1 Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } let g:jsx_ext_required = 0 From 7e7a8d08b8d89f78dbaa576c37ae814b7920ebed Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 14 May 2018 07:47:46 +0200 Subject: [PATCH 225/532] Add snippets --- vim/.plugins.vimrc | 19 +++++++++++++++++-- vim/.vimrc | 6 ++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 2d0e6e0d..2f401bb6 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -78,8 +78,6 @@ let g:ale_fixers['graphql'] = ['prettier'] let g:ale_fixers['markdown'] = ['prettier'] let g:ale_fixers['typescript'] = ['prettier','tslint'] let g:ale_fix_on_save = 1 -nmap (ale_previous_wrap) -nmap (ale_next_wrap) " Autocompletion Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } @@ -87,9 +85,26 @@ if has('nvim') && has('python3') let g:deoplete#enable_at_startup = 1 endif +" Snippets +Plug 'Shougo/neosnippet.vim' +Plug 'Shougo/neosnippet-snippets' +" Plugin key-mappings. +" Note: It must be "imap" and "smap". It uses mappings. +imap (neosnippet_expand_or_jump) +smap (neosnippet_expand_or_jump) +xmap (neosnippet_expand_target) +if has('conceal') + set conceallevel=2 concealcursor=niv +endif + " Go Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' ,'for': 'go' } let g:go_fmt_command = 'goimports' +let g:go_highlight_types = 1 +let g:go_highlight_functions = 1 +let g:go_highlight_methods = 1 +let g:go_highlight_operators = 1 +let g:go_highlight_extra_types = 1 let g:go_auto_type_info = 1 " run :GoBuild or :GoTestCompile based on the go file function! s:build_go_files() diff --git a/vim/.vimrc b/vim/.vimrc index 5adb2ea4..5f6791c7 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -4,6 +4,10 @@ source ~/.plugins.vimrc " Set color scheme colorscheme nova +set autoread +set autowrite +set autowriteall + " Make Vim more useful set nocompatible " Disable vim welcome message @@ -14,8 +18,6 @@ set termguicolors set clipboard=unnamed " Enhance command-line completion set wildmenu -" Allow backspace in insert mode -set backspace=indent,eol,start " Add the g flag to search/replace by default set gdefault " Change mapleader From 805aa4cb7edff4b48d6a66605165316d15a78b93 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 14 May 2018 23:18:10 +0200 Subject: [PATCH 226/532] Enable hard mode for Vim --- vim/.plugins.vimrc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 2f401bb6..33306241 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -11,6 +11,10 @@ call plug#begin('~/.local/share/nvim/plugged') " Color scheme Plug 'trevordmiller/nova-vim' +" Enable hard mode +Plug 'takac/vim-hardtime' +let g:hardtime_default_on = 1 + " Goyo mode for focused writing Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' @@ -93,9 +97,6 @@ Plug 'Shougo/neosnippet-snippets' imap (neosnippet_expand_or_jump) smap (neosnippet_expand_or_jump) xmap (neosnippet_expand_target) -if has('conceal') - set conceallevel=2 concealcursor=niv -endif " Go Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' ,'for': 'go' } From a7bbbb274cd69060948734bb044d9a74e221d606 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 17 May 2018 08:59:18 +0200 Subject: [PATCH 227/532] Ignore vendor folders for fzf --- bash/.exports | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.exports b/bash/.exports index 43604b8f..23533f48 100644 --- a/bash/.exports +++ b/bash/.exports @@ -10,4 +10,4 @@ export EDITOR="${VISUAL}"; export HISTCONTROL='ignoreboth'; # Don't search files which are gitignored in fzf -export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -g ""' +export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git --ignore vendor --ignore node_modules --filename-pattern ""' From b1dcff2d6d82db56f71dc213ef34af56bc8b8f19 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 27 May 2018 13:57:42 +0200 Subject: [PATCH 228/532] Add support for TOML in Vim --- vim/.plugins.vimrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 33306241..764d82a8 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -146,5 +146,8 @@ Plug 'juliosueiras/vim-terraform-completion', { 'for': 'terraform' } let g:deoplete#omni_patterns = {} let g:deoplete#omni_patterns.terraform = '[^ *\t"{=$]\w*' +" TOML +Plug 'cespare/vim-toml', { 'for': 'toml' } + " Initialize plugin system call plug#end() From 6c5c52469cc49ca7647cc810c186b501ebc4de7b Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 27 May 2018 23:06:26 +0200 Subject: [PATCH 229/532] Let Prettier format JSON --- vim/.plugins.vimrc | 1 + 1 file changed, 1 insertion(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 764d82a8..d218e56c 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -75,6 +75,7 @@ Plug 'jiangmiao/auto-pairs' Plug 'w0rp/ale' let g:ale_fixers = {} let g:ale_fixers['javascript'] = ['prettier'] +let g:ale_fixers['json'] = ['prettier'] let g:ale_fixers['css'] = ['prettier'] let g:ale_fixers['scss'] = ['prettier'] let g:ale_fixers['less'] = ['prettier'] From 0ccb8ab66dd8bc1ccfedaee8176b2428df076524 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 28 May 2018 23:37:11 +0200 Subject: [PATCH 230/532] Use official homebrew cask --- Brewfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Brewfile b/Brewfile index c1060932..6da33d58 100644 --- a/Brewfile +++ b/Brewfile @@ -1,5 +1,5 @@ # Taps -tap "caskroom/cask" +tap "homebrew/cask" tap "cloudfoundry/tap" tap "go-delve/delve" tap "buo/cask-upgrade" From 5f092fc3ba92f01209cc336b59172f1cfb94f682 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 29 May 2018 21:45:32 +0200 Subject: [PATCH 231/532] Add golangci-lint --- Brewfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Brewfile b/Brewfile index 6da33d58..7580c55e 100644 --- a/Brewfile +++ b/Brewfile @@ -1,5 +1,6 @@ # Taps tap "homebrew/cask" +tap "golangci/tap" tap "cloudfoundry/tap" tap "go-delve/delve" tap "buo/cask-upgrade" @@ -19,6 +20,7 @@ brew "diff-so-fancy" brew "fzf" brew "git" brew "go-delve/delve/delve" +brew "golangci/tap/golangci-lint" brew "hadolint" brew "htop" brew "jq" From 60e5f99c5ac0fe7e63dd8133a8c761b5c1c9a7dc Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 1 Jun 2018 16:44:41 +0200 Subject: [PATCH 232/532] Add autocomplete flow for all JavaScript files --- vim/.plugins.vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index d218e56c..40298d08 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -130,7 +130,7 @@ Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascri let g:javascript_plugin_flow = 1 Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } let g:jsx_ext_required = 0 -Plug 'wokalski/autocomplete-flow', { 'for': 'javascript.jsx' } +Plug 'wokalski/autocomplete-flow', { 'for': 'javascript' } " Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } From 65a22f9f8dd94c836d32737f46d124d83457ddd0 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 6 Jun 2018 11:15:56 +0200 Subject: [PATCH 233/532] Remove unneeded configs --- vim/.plugins.vimrc | 5 ++--- vim/.vimrc | 4 ---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 40298d08..b80d3013 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -71,7 +71,7 @@ Plug 'tpope/vim-commentary' " Auto close braces Plug 'jiangmiao/auto-pairs' -" Syntax Highlighting +" Linting and auto fixing Plug 'w0rp/ale' let g:ale_fixers = {} let g:ale_fixers['javascript'] = ['prettier'] @@ -128,9 +128,8 @@ Plug 'sebdah/vim-delve', { 'for': 'go' } Plug 'pangloss/vim-javascript' Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } let g:javascript_plugin_flow = 1 -Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } -let g:jsx_ext_required = 0 Plug 'wokalski/autocomplete-flow', { 'for': 'javascript' } +Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } " Typescript Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } diff --git a/vim/.vimrc b/vim/.vimrc index 5f6791c7..14b84774 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -4,10 +4,6 @@ source ~/.plugins.vimrc " Set color scheme colorscheme nova -set autoread -set autowrite -set autowriteall - " Make Vim more useful set nocompatible " Disable vim welcome message From 6a6ada02c8a3f83f624d58abb0dc573ee7210fff Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 12 Jun 2018 20:42:26 +0200 Subject: [PATCH 234/532] Run depu even if JS project is not a Git repo --- update-js.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update-js.sh b/update-js.sh index 1c8d2c37..70829f44 100755 --- a/update-js.sh +++ b/update-js.sh @@ -9,6 +9,6 @@ js_dir="${HOME}/js" if [ -d "${js_dir}" ]; then cd "${js_dir}" || exit for d in */ ; do - ( cd "$d" && git pull && depu ) + ( cd "$d" && git pull ; depu ) done fi From b38b49fbb912553b04ecd9773d1ee8fa6d65b76c Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 13 Jun 2018 08:20:01 +0200 Subject: [PATCH 235/532] Add support for NGINX files --- vim/.plugins.vimrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index b80d3013..0b5b6307 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -149,5 +149,8 @@ let g:deoplete#omni_patterns.terraform = '[^ *\t"{=$]\w*' " TOML Plug 'cespare/vim-toml', { 'for': 'toml' } +" NGINX +Plug 'chr4/nginx.vim', { 'for': 'nginx' } + " Initialize plugin system call plug#end() From b4bfc63a5bd87326c1b95dcf432f60121438cf51 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 24 Jul 2018 11:49:11 +0200 Subject: [PATCH 236/532] Use nicer error and warning signs for linting --- bash/.functions | 2 +- vim/.plugins.vimrc | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/bash/.functions b/bash/.functions index fdd42e0b..200f4ae4 100644 --- a/bash/.functions +++ b/bash/.functions @@ -203,7 +203,7 @@ function pacu() { # Vim if [ -x "$(command -v nvim)" ]; then printf '\e[1mUpdating Vim plugins\e[0m\n' - nvim -c 'PlugClean! | PlugUpgrade | PlugUpdate | qa' + nvim -c 'PlugClean! | PlugUpgrade | PlugUpdate --sync | qa' fi # Wait for all processes to finish diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 0b5b6307..bac2cb27 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -82,6 +82,8 @@ let g:ale_fixers['less'] = ['prettier'] let g:ale_fixers['graphql'] = ['prettier'] let g:ale_fixers['markdown'] = ['prettier'] let g:ale_fixers['typescript'] = ['prettier','tslint'] +let g:ale_sign_error = '🛑' +let g:ale_sign_warning = '⚠️' let g:ale_fix_on_save = 1 " Autocompletion From aef73eeafb9524d6a2fce487a96633e4d0857cdb Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 25 Jul 2018 13:51:13 +0200 Subject: [PATCH 237/532] Add grv --- Brewfile | 1 + init.sh | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Brewfile b/Brewfile index 7580c55e..3fb092a6 100644 --- a/Brewfile +++ b/Brewfile @@ -21,6 +21,7 @@ brew "fzf" brew "git" brew "go-delve/delve/delve" brew "golangci/tap/golangci-lint" +brew "grv" brew "hadolint" brew "htop" brew "jq" diff --git a/init.sh b/init.sh index 8044373e..e9bab47e 100755 --- a/init.sh +++ b/init.sh @@ -77,9 +77,9 @@ case "$(uname)" in mkdir -p ~/.config/nvim ln -s ~/.vimrc ~/.config/nvim/init.vim - # Install Python and pip if not installed + # Install pip if not installed if [ ! -x "$(command -v pip)" ]; then - brew install python + sudo easy_install pip fi # Install the Python neovim package pip install --upgrade --user neovim @@ -182,6 +182,7 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' dep \ delve \ dropbox \ + grv \ hadolint-git \ prezto-git \ spotify \ From 3410a0f92d7fde565bc2a0898af2ba10dcc88ebd Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 29 Jul 2018 15:38:39 +0200 Subject: [PATCH 238/532] Format YAML with prettier --- Brewfile | 1 + init.sh | 1 + vim/.plugins.vimrc | 1 + 3 files changed, 3 insertions(+) diff --git a/Brewfile b/Brewfile index 3fb092a6..c0a8d410 100644 --- a/Brewfile +++ b/Brewfile @@ -28,6 +28,7 @@ brew "jq" brew "mas" brew "mongodb" brew "neovim" +brew "prettier" brew "protobuf" brew "reattach-to-user-namespace" brew "shellcheck" diff --git a/init.sh b/init.sh index e9bab47e..d3f41123 100755 --- a/init.sh +++ b/init.sh @@ -155,6 +155,7 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' npm \ python \ python-pip \ + prettier \ ruby \ aws-cli \ chromium \ diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index bac2cb27..c74b815c 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -81,6 +81,7 @@ let g:ale_fixers['scss'] = ['prettier'] let g:ale_fixers['less'] = ['prettier'] let g:ale_fixers['graphql'] = ['prettier'] let g:ale_fixers['markdown'] = ['prettier'] +let g:ale_fixers['yaml'] = ['prettier'] let g:ale_fixers['typescript'] = ['prettier','tslint'] let g:ale_sign_error = '🛑' let g:ale_sign_warning = '⚠️' From bf8cc162b5f86aa5a86ad721b13d44402842b706 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 2 Aug 2018 13:33:20 +0200 Subject: [PATCH 239/532] Remove dep --- Brewfile | 1 - init.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/Brewfile b/Brewfile index c0a8d410..27331f70 100644 --- a/Brewfile +++ b/Brewfile @@ -15,7 +15,6 @@ brew "ruby" brew "awscli" brew "cloudfoundry/tap/cf-cli" brew "cmake" -brew "dep" brew "diff-so-fancy" brew "fzf" brew "git" diff --git a/init.sh b/init.sh index d3f41123..9ca1eda5 100755 --- a/init.sh +++ b/init.sh @@ -180,7 +180,6 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' zsh-completions yaourt -Sy --noconfirm --needed \ cloudfoundry-cli \ - dep \ delve \ dropbox \ grv \ From 0b2b5d9944cbbf259813053f1d19eca07ff47afd Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 3 Aug 2018 11:47:29 +0200 Subject: [PATCH 240/532] Remove automatic go type info This must be removed because it hides more useful information. --- vim/.plugins.vimrc | 1 - 1 file changed, 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index c74b815c..d369dc11 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -110,7 +110,6 @@ let g:go_highlight_functions = 1 let g:go_highlight_methods = 1 let g:go_highlight_operators = 1 let g:go_highlight_extra_types = 1 -let g:go_auto_type_info = 1 " run :GoBuild or :GoTestCompile based on the go file function! s:build_go_files() let l:file = expand('%') From c6555292895931fb7badc6b6a1e7bbcf0f865b59 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 8 Aug 2018 08:45:44 +0200 Subject: [PATCH 241/532] Use quantum colorscheme --- README.md | 10 +++++---- git/.gitconfig | 53 ---------------------------------------------- vim/.plugins.vimrc | 13 ++++++------ vim/.vimrc | 2 +- 4 files changed, 14 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index a5f863fe..83326c91 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ My personal dotfiles I mainly work with [Go](https://golang.org/), [JavaScript](https://en.wikipedia.org/wiki/JavaScript), [TypeScript](https://www.typescriptlang.org/), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. +On macOS, it is recommended to use these dotfiles with [iTerm2](https://www.iterm2.com/) and the [quantum](https://github.com/tyrannicaltoucan/vim-quantum/blob/master/term/iterm/quantum.itermcolors) color scheme. + ## Installation 1. Run the following command: @@ -18,10 +20,10 @@ I mainly work with [Go](https://golang.org/), [JavaScript](https://en.wikipedia. ## Usage -* `pacu`: Updates and upgrades the whole system (using `Brewfile` on macOS) -* `depu`: Updates and upgrades the dependencies for the current project -* `vim`: Starts Neovim with all plugins -* and many more... +- `pacu`: Updates and upgrades the whole system (using `Brewfile` on macOS) +- `depu`: Updates and upgrades the dependencies for the current project +- `vim`: Starts Neovim with all plugins +- and many more... ## Customize diff --git a/git/.gitconfig b/git/.gitconfig index 47400e12..b084d945 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -15,56 +15,3 @@ tool = vimdiff [mergetool] prompt = false - -; Use https://github.com/trevordmiller/nova-git -[color] - pager = true - ui = auto - status = auto - diff = auto - branch = auto - showBranch = auto - interactive = auto - grep = auto -[color "status"] - header = black bold - branch = cyan - nobranch = red - unmerged = red - untracked = cyan - added = green - changed = red bold -[color "diff"] - meta = red bold - frag = black bold - func = blue - old = red strike - new = green - commit = blue - whitespace = red - context = normal -[color "branch"] - current = cyan - local = blue - remote = magenta - upstream = magenta - plain = normal -[color "decorate"] - branch = blue - remoteBranch = magenta - tag = magenta - stash = cyan - HEAD = blue -[color "interactive"] - prompt = red - header = red bold - error = red - help = black bold -[color "grep"] - context = normal - match = cyan - filename = blue - function = blue - selected = normal - separator = red bold - linenumber = normal diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index d369dc11..6a8d2ba8 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -8,8 +8,8 @@ endif " Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) call plug#begin('~/.local/share/nvim/plugged') -" Color scheme -Plug 'trevordmiller/nova-vim' +" Colorscheme +Plug 'tyrannicaltoucan/vim-quantum' " Enable hard mode Plug 'takac/vim-hardtime' @@ -130,13 +130,14 @@ Plug 'sebdah/vim-delve', { 'for': 'go' } Plug 'pangloss/vim-javascript' Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } let g:javascript_plugin_flow = 1 -Plug 'wokalski/autocomplete-flow', { 'for': 'javascript' } Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } +" Flow +Plug 'wokalski/autocomplete-flow', { 'for': 'javascript' } + " Typescript -Plug 'leafgarland/typescript-vim', { 'for': 'typescript' } -Plug 'mhartington/nvim-typescript', { 'do': 'npm install -g typescript', 'for': 'typescript' } -Plug 'mhartington/deoplete-typescript', { 'do': ':UpdateRemotePlugins', 'for': 'typescript' } +Plug 'HerringtonDarkholme/yats.vim', { 'for': 'typescript' } +Plug 'mhartington/nvim-typescript', { 'do': './install.sh', 'for': 'typescript' } " GraphQL Plug 'jparise/vim-graphql', { 'for': 'graphql' } diff --git a/vim/.vimrc b/vim/.vimrc index 14b84774..a95e1f07 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -2,7 +2,7 @@ source ~/.plugins.vimrc " Set color scheme -colorscheme nova +colorscheme quantum " Make Vim more useful set nocompatible From fbab78c3db3dc8ca944b5658e687a4fcdff297ad Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 8 Aug 2018 11:02:58 +0200 Subject: [PATCH 242/532] Add UTF-8 characters for indicating errors --- vim/.plugins.vimrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 6a8d2ba8..dc8fae55 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -83,8 +83,8 @@ let g:ale_fixers['graphql'] = ['prettier'] let g:ale_fixers['markdown'] = ['prettier'] let g:ale_fixers['yaml'] = ['prettier'] let g:ale_fixers['typescript'] = ['prettier','tslint'] -let g:ale_sign_error = '🛑' -let g:ale_sign_warning = '⚠️' +let g:ale_sign_error = '●' +let g:ale_sign_warning = '●' let g:ale_fix_on_save = 1 " Autocompletion From aca2561aee848000c51f81e488cef67d7eeea676 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 8 Aug 2018 11:21:54 +0200 Subject: [PATCH 243/532] Beautify tmux pane borders --- tmux/.tmux.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 40bd18c3..f3f07349 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -5,8 +5,8 @@ set -g status-style 'bg=#1E272C,fg=#6A7D89' set -g window-status-current-style 'fg=cyan' set -g mode-style 'bg=cyan,fg=black' set -g message-style 'bg=black,fg=cyan' -set -g pane-border-style 'bg=black,fg=#1E272C' -set -g pane-active-border-style 'bg=black,fg=#1E272C' +set -g pane-border-style 'fg=colour238' +set -g pane-active-border-style 'fg=colour238' # Set escape time to 0 for esc to work properly in Vim set -s escape-time 0 From 497f5af08217a72c533c20a3061502d05b1d4dd1 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 8 Aug 2018 12:00:00 +0200 Subject: [PATCH 244/532] Fix flow --- vim/.plugins.vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index dc8fae55..7d09011c 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -133,7 +133,7 @@ let g:javascript_plugin_flow = 1 Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } " Flow -Plug 'wokalski/autocomplete-flow', { 'for': 'javascript' } +Plug 'wokalski/autocomplete-flow', { 'for': 'javascript.jsx' } " Typescript Plug 'HerringtonDarkholme/yats.vim', { 'for': 'typescript' } From 30b2bec8c25c3f1fd9c4749bfb838bd146179870 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 8 Aug 2018 21:53:31 +0200 Subject: [PATCH 245/532] Prepare for go 1.11 --- bash/.exports | 3 +++ bash/.functions | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/bash/.exports b/bash/.exports index 23533f48..326a5cf8 100644 --- a/bash/.exports +++ b/bash/.exports @@ -11,3 +11,6 @@ export HISTCONTROL='ignoreboth'; # Don't search files which are gitignored in fzf export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git --ignore vendor --ignore node_modules --filename-pattern ""' + +# Enable Go 1.11 module support everywhere +export GO111MODULE=on diff --git a/bash/.functions b/bash/.functions index 200f4ae4..2db50d1e 100644 --- a/bash/.functions +++ b/bash/.functions @@ -79,21 +79,26 @@ function depu() { fi # Yarn - pkg_count=$(ls -1 package.json 2>/dev/null | wc -l) lock_count=$(ls -1 yarn.lock 2>/dev/null | wc -l) - if [ "${pkg_count}" -gt 0 ] && [ "${lock_count}" -gt 0 ]; then + if [ "${lock_count}" -gt 0 ]; then printf "Updating Yarn dependencies for ${PWD##*/}...\n\n" yarn upgrade > /dev/null yarn outdated fi + # Go + pkg_count=$(ls -1 go.mod 2>/dev/null | wc -l) + if [ "${pkg_count}" -gt 0 ]; then + printf "Updating Go dependencies for ${PWD##*/}...\n\n" + go1.11beta3 get -u + fi + # Go dep pkg_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) if [ "${pkg_count}" -gt 0 ]; then printf "Updating Dep dependencies for ${PWD##*/}...\n\n" dep ensure dep ensure -update - # dep status -old fi } From 6ed71df12a04d26b85d395f853404f7f279021dc Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 10 Aug 2018 13:14:42 +0200 Subject: [PATCH 246/532] Install flow and typescript using Homebrew --- Brewfile | 2 ++ vim/.plugins.vimrc | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Brewfile b/Brewfile index 27331f70..cf86e808 100644 --- a/Brewfile +++ b/Brewfile @@ -16,6 +16,7 @@ brew "awscli" brew "cloudfoundry/tap/cf-cli" brew "cmake" brew "diff-so-fancy" +brew "flow" brew "fzf" brew "git" brew "go-delve/delve/delve" @@ -35,6 +36,7 @@ brew "terraform" brew "the_silver_searcher" brew "tmate" brew "tmux" +brew "typescript" brew "watchman" brew "wget" brew "zsh" diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 7d09011c..c085bd9b 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -73,6 +73,8 @@ Plug 'jiangmiao/auto-pairs' " Linting and auto fixing Plug 'w0rp/ale' +let g:ale_linters = {} +let g:ale_linters['javascript'] = ['eslint', 'flow'] let g:ale_fixers = {} let g:ale_fixers['javascript'] = ['prettier'] let g:ale_fixers['json'] = ['prettier'] From bcdd5137f60b95059fefdeb1a165672faa2261a9 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 12 Aug 2018 16:16:40 +0200 Subject: [PATCH 247/532] Upgrade pip2 and pip3 packages if present --- bash/.functions | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/bash/.functions b/bash/.functions index 2db50d1e..dc2c96ab 100644 --- a/bash/.functions +++ b/bash/.functions @@ -191,19 +191,29 @@ function pacu() { processes+=("$!") fi - # Ruby + # Ruby gems if [ -x "$(command -v gem)" ]; then printf '\e[1mUpdating Ruby gems\e[0m\n' (gem update --force && gem cleanup) & processes+=("$!") fi - # Python + # Python pip if [ -x "$(command -v pip)" ]; then printf '\e[1mUpdating pip packages\e[0m\n' (for pkg in $(pip list --outdated | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & processes+=("$!") fi + if [ -x "$(command -v pip2)" ]; then + printf '\e[1mUpdating pip2 packages\e[0m\n' + (for pkg in $(pip2 list --outdated | cut -d' ' -f1); do pip2 install --user --upgrade $pkg; done) & + processes+=("$!") + fi + if [ -x "$(command -v pip3)" ]; then + printf '\e[1mUpdating pip3 packages\e[0m\n' + (for pkg in $(pip3 list --outdated | cut -d' ' -f1); do pip3 install --user --upgrade $pkg; done) & + processes+=("$!") + fi # Vim if [ -x "$(command -v nvim)" ]; then From afcadac74207bd4a4e1c3b6cca9ef81c19ec4ebb Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 14 Aug 2018 22:08:26 +0200 Subject: [PATCH 248/532] Don't run prune and dedupe anymore for npm --- bash/.functions | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bash/.functions b/bash/.functions index dc2c96ab..3792ecd7 100644 --- a/bash/.functions +++ b/bash/.functions @@ -73,8 +73,6 @@ function depu() { if [ "${lock_count}" -gt 0 ]; then printf "Updating npm dependencies for ${PWD##*/}...\n\n" npm update - npm dedupe - npm prune npm outdated fi @@ -90,7 +88,8 @@ function depu() { pkg_count=$(ls -1 go.mod 2>/dev/null | wc -l) if [ "${pkg_count}" -gt 0 ]; then printf "Updating Go dependencies for ${PWD##*/}...\n\n" - go1.11beta3 get -u + go get -u + go mod tidy fi # Go dep @@ -201,17 +200,17 @@ function pacu() { # Python pip if [ -x "$(command -v pip)" ]; then printf '\e[1mUpdating pip packages\e[0m\n' - (for pkg in $(pip list --outdated | cut -d' ' -f1); do pip install --user --upgrade $pkg; done) & + (pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install --user --upgrade) & processes+=("$!") fi if [ -x "$(command -v pip2)" ]; then printf '\e[1mUpdating pip2 packages\e[0m\n' - (for pkg in $(pip2 list --outdated | cut -d' ' -f1); do pip2 install --user --upgrade $pkg; done) & + (pip2 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip2 install --user --upgrade) & processes+=("$!") fi if [ -x "$(command -v pip3)" ]; then printf '\e[1mUpdating pip3 packages\e[0m\n' - (for pkg in $(pip3 list --outdated | cut -d' ' -f1); do pip3 install --user --upgrade $pkg; done) & + (pip3 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip3 install --user --upgrade) & processes+=("$!") fi From 83a3f0946bd6dca521fb1a47b5c38e184521b258 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 10 Sep 2018 17:29:01 +0200 Subject: [PATCH 249/532] Improve Debian system upgrading --- bash/.exports | 2 +- bash/.functions | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/.exports b/bash/.exports index 326a5cf8..4ea2b176 100644 --- a/bash/.exports +++ b/bash/.exports @@ -13,4 +13,4 @@ export HISTCONTROL='ignoreboth'; export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git --ignore vendor --ignore node_modules --filename-pattern ""' # Enable Go 1.11 module support everywhere -export GO111MODULE=on +# export GO111MODULE=on diff --git a/bash/.functions b/bash/.functions index 3792ecd7..66380ee8 100644 --- a/bash/.functions +++ b/bash/.functions @@ -138,9 +138,9 @@ function pacu() { if [ -x "$(command -v apt-get)" ]; then printf '\e[1mUpdating apt packages\e[0m\n' sudo apt-get update - sudo apt-get upgrade -y sudo apt-get dist-upgrade -y sudo apt-get autoremove -y + sudo apt-get autoclean -y fi ;; # On macOS, use mas and Homebrew in parallel From dc2986481d9be8a06a03d4f2e91debc11c9add00 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 20 Sep 2018 09:43:13 +0200 Subject: [PATCH 250/532] Replace graphiql-app with graphql-playground --- Brewfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Brewfile b/Brewfile index cf86e808..cfea3f9d 100644 --- a/Brewfile +++ b/Brewfile @@ -48,7 +48,7 @@ cask "appcleaner" cask "docker" cask "dropbox" cask "google-chrome" -cask "graphiql" +cask "graphql-playground" cask "imageoptim" cask "iterm2" cask "mongodb-compass" From 607ea095966c772584c06b6c8c71c49676b0e9c7 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 20 Sep 2018 19:30:48 +0200 Subject: [PATCH 251/532] Remove deprecated go delve formula --- Brewfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Brewfile b/Brewfile index cfea3f9d..e597a3a3 100644 --- a/Brewfile +++ b/Brewfile @@ -2,7 +2,6 @@ tap "homebrew/cask" tap "golangci/tap" tap "cloudfoundry/tap" -tap "go-delve/delve" tap "buo/cask-upgrade" # Languages @@ -19,7 +18,6 @@ brew "diff-so-fancy" brew "flow" brew "fzf" brew "git" -brew "go-delve/delve/delve" brew "golangci/tap/golangci-lint" brew "grv" brew "hadolint" From b042e9b0b242a5b225ff4edb4e284e516a30ddb5 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 23 Oct 2018 10:28:43 +0200 Subject: [PATCH 252/532] Add fd --- Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Brewfile b/Brewfile index e597a3a3..9e74ba38 100644 --- a/Brewfile +++ b/Brewfile @@ -15,6 +15,7 @@ brew "awscli" brew "cloudfoundry/tap/cf-cli" brew "cmake" brew "diff-so-fancy" +brew "fd" brew "flow" brew "fzf" brew "git" From efc4f3dff2be058a42092f043942e8304ded032b Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 23 Oct 2018 13:33:19 +0200 Subject: [PATCH 253/532] Replace ag with rg --- Brewfile | 2 +- bash/.exports | 9 +++------ bash/.functions | 22 ++++++++++++++-------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Brewfile b/Brewfile index 9e74ba38..b7dc2068 100644 --- a/Brewfile +++ b/Brewfile @@ -30,9 +30,9 @@ brew "neovim" brew "prettier" brew "protobuf" brew "reattach-to-user-namespace" +brew "ripgrep" brew "shellcheck" brew "terraform" -brew "the_silver_searcher" brew "tmate" brew "tmux" brew "typescript" diff --git a/bash/.exports b/bash/.exports index 4ea2b176..1c4c904a 100644 --- a/bash/.exports +++ b/bash/.exports @@ -3,14 +3,11 @@ export LANG='en_US.UTF-8'; export LC_ALL='en_US.UTF-8'; # Make vim the default editor. -export VISUAL='vim' -export EDITOR="${VISUAL}"; +export EDITOR='vim'; +export VISUAL="${EDITOR}" # Omit duplicates and commands that begin with a space from history. export HISTCONTROL='ignoreboth'; # Don't search files which are gitignored in fzf -export FZF_DEFAULT_COMMAND='ag --hidden --ignore .git --ignore vendor --ignore node_modules --filename-pattern ""' - -# Enable Go 1.11 module support everywhere -# export GO111MODULE=on +export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.git/*" --glob "!vendor/*" --glob "!/node_modules/*" --glob "!.DS_Store"' diff --git a/bash/.functions b/bash/.functions index 66380ee8..b1502960 100644 --- a/bash/.functions +++ b/bash/.functions @@ -7,14 +7,15 @@ function mkcd() { function fcd() { local dir dir=$(find ${1:-.} -path '*/\.*' -prune \ - -o -type d -print 2> /dev/null | fzf +m) && + -o -type d -print 2> /dev/null | fzf +m) && cd "$dir" } # Checkout branches or tags with fzf function fco() { local tags branches target - tags=$(git tag | awk '{print "\x1b[31;1mtag\x1b[m\t" $1}') || return + tags=$( + git tag | awk '{print "\x1b[31;1mtag\x1b[m\t" $1}') || return branches=$( git branch --all | grep -v HEAD | sed "s/.* //" | sed "s#remotes/[^/]*/##" | @@ -28,10 +29,15 @@ function fco() { # fkill - kill process function fkill() { local pid - pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}') + if [ "$UID" != "0" ]; then + pid=$(ps -f -u $UID | sed 1d | fzf -m | awk '{print $2}') + else + pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}') + fi - if [ "x$pid" != "x" ]; then - echo $pid | xargs kill -${1:-9} + if [ "x$pid" != "x" ] + then + echo $pid | xargs kill -${1:-9} fi } @@ -41,9 +47,9 @@ function fshow() { --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" | fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \ --bind "ctrl-m:execute: - (grep -o '[a-f0-9]\{7\}' | head -1 | - xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF' - {} + (grep -o '[a-f0-9]\{7\}' | head -1 | + xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF' + {} FZF-EOF" } From 6613bb4b9dcc40ccac57f7c11a72ac24723a8273 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 23 Oct 2018 17:59:51 +0200 Subject: [PATCH 254/532] Remove grv --- Brewfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Brewfile b/Brewfile index b7dc2068..d319629c 100644 --- a/Brewfile +++ b/Brewfile @@ -20,7 +20,6 @@ brew "flow" brew "fzf" brew "git" brew "golangci/tap/golangci-lint" -brew "grv" brew "hadolint" brew "htop" brew "jq" From 8ae5870d1fcb31aa7aac5799b333016a742af45d Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 26 Oct 2018 11:56:26 +0200 Subject: [PATCH 255/532] Ignore .terraform files with FZF --- bash/.exports | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/.exports b/bash/.exports index 1c4c904a..7d6cc999 100644 --- a/bash/.exports +++ b/bash/.exports @@ -9,5 +9,5 @@ export VISUAL="${EDITOR}" # Omit duplicates and commands that begin with a space from history. export HISTCONTROL='ignoreboth'; -# Don't search files which are gitignored in fzf -export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.git/*" --glob "!vendor/*" --glob "!/node_modules/*" --glob "!.DS_Store"' +# Search only desired files with fzf +export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/"' From 663d15a494a61d3c8d1b0ce998cbf9497d551f7e Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 1 Nov 2018 20:13:26 +0100 Subject: [PATCH 256/532] Remove Flow due to CRA supporting TypeScript --- Brewfile | 1 - bash/.exports | 2 +- vim/.plugins.vimrc | 10 ++-------- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/Brewfile b/Brewfile index d319629c..7400aadb 100644 --- a/Brewfile +++ b/Brewfile @@ -16,7 +16,6 @@ brew "cloudfoundry/tap/cf-cli" brew "cmake" brew "diff-so-fancy" brew "fd" -brew "flow" brew "fzf" brew "git" brew "golangci/tap/golangci-lint" diff --git a/bash/.exports b/bash/.exports index 7d6cc999..8826e080 100644 --- a/bash/.exports +++ b/bash/.exports @@ -10,4 +10,4 @@ export VISUAL="${EDITOR}" export HISTCONTROL='ignoreboth'; # Search only desired files with fzf -export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/"' +export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/*"' diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index c085bd9b..cc4803af 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -73,18 +73,16 @@ Plug 'jiangmiao/auto-pairs' " Linting and auto fixing Plug 'w0rp/ale' -let g:ale_linters = {} -let g:ale_linters['javascript'] = ['eslint', 'flow'] let g:ale_fixers = {} let g:ale_fixers['javascript'] = ['prettier'] +let g:ale_fixers['typescript'] = ['prettier','tslint'] let g:ale_fixers['json'] = ['prettier'] let g:ale_fixers['css'] = ['prettier'] -let g:ale_fixers['scss'] = ['prettier'] let g:ale_fixers['less'] = ['prettier'] +let g:ale_fixers['scss'] = ['prettier'] let g:ale_fixers['graphql'] = ['prettier'] let g:ale_fixers['markdown'] = ['prettier'] let g:ale_fixers['yaml'] = ['prettier'] -let g:ale_fixers['typescript'] = ['prettier','tslint'] let g:ale_sign_error = '●' let g:ale_sign_warning = '●' let g:ale_fix_on_save = 1 @@ -131,12 +129,8 @@ Plug 'sebdah/vim-delve', { 'for': 'go' } " JavaScript Plug 'pangloss/vim-javascript' Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } -let g:javascript_plugin_flow = 1 Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } -" Flow -Plug 'wokalski/autocomplete-flow', { 'for': 'javascript.jsx' } - " Typescript Plug 'HerringtonDarkholme/yats.vim', { 'for': 'typescript' } Plug 'mhartington/nvim-typescript', { 'do': './install.sh', 'for': 'typescript' } From 74ec9c4d32ac8bbe239ed2cee89769848f53260e Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 7 Nov 2018 08:43:24 +0100 Subject: [PATCH 257/532] Use Prettier with HTML --- vim/.plugins.vimrc | 1 + 1 file changed, 1 insertion(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index cc4803af..66892f6d 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -77,6 +77,7 @@ let g:ale_fixers = {} let g:ale_fixers['javascript'] = ['prettier'] let g:ale_fixers['typescript'] = ['prettier','tslint'] let g:ale_fixers['json'] = ['prettier'] +let g:ale_fixers['html'] = ['prettier'] let g:ale_fixers['css'] = ['prettier'] let g:ale_fixers['less'] = ['prettier'] let g:ale_fixers['scss'] = ['prettier'] From f1192dba4d63b632b16ae20a41f97381c91ca53f Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 9 Nov 2018 11:07:41 +0100 Subject: [PATCH 258/532] Add tree --- Brewfile | 1 + bash/.exports | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Brewfile b/Brewfile index 7400aadb..65619b37 100644 --- a/Brewfile +++ b/Brewfile @@ -33,6 +33,7 @@ brew "shellcheck" brew "terraform" brew "tmate" brew "tmux" +brew "tree" brew "typescript" brew "watchman" brew "wget" diff --git a/bash/.exports b/bash/.exports index 8826e080..be2da18a 100644 --- a/bash/.exports +++ b/bash/.exports @@ -10,4 +10,4 @@ export VISUAL="${EDITOR}" export HISTCONTROL='ignoreboth'; # Search only desired files with fzf -export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/*"' +export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/*" --glob "!bin/*" --glob "!build/*" --glob "!coverage/*" --glob "!dist/*"' From ff42dd9a64d478ff6d8c7b0f7e1e4f7a03de6413 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 28 Nov 2018 14:25:34 +0100 Subject: [PATCH 259/532] Add vim-repeat plugin --- vim/.plugins.vimrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 66892f6d..9e7da76b 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -59,6 +59,9 @@ Plug 'tpope/vim-sleuth' " Edit surrounds Plug 'tpope/vim-surround' +" Repeat plugin commands +Plug 'tpope/vim-repeat' + " Source tree Plug 'scrooloose/nerdtree' let NERDTreeShowHidden = 1 From 4c1fc28e7b4d5d2d66fe8e5b89c8f9c5aa60e069 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 30 Nov 2018 14:36:28 +0100 Subject: [PATCH 260/532] Enable Go modules by default --- bash/.exports | 3 +++ bash/.functions | 23 +++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/bash/.exports b/bash/.exports index be2da18a..cf0e7e07 100644 --- a/bash/.exports +++ b/bash/.exports @@ -11,3 +11,6 @@ export HISTCONTROL='ignoreboth'; # Search only desired files with fzf export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/*" --glob "!bin/*" --glob "!build/*" --glob "!coverage/*" --glob "!dist/*"' + +# Enable Go modules by default +export GO111MODULE=on diff --git a/bash/.functions b/bash/.functions index b1502960..e571e1f7 100644 --- a/bash/.functions +++ b/bash/.functions @@ -75,37 +75,44 @@ function ide() { function depu() { # npm - lock_count=$(ls -1 package-lock.json 2>/dev/null | wc -l) - if [ "${lock_count}" -gt 0 ]; then + file_count=$(ls -1 package-lock.json 2>/dev/null | wc -l) + if [ "${file_count}" -gt 0 ]; then printf "Updating npm dependencies for ${PWD##*/}...\n\n" npm update npm outdated fi # Yarn - lock_count=$(ls -1 yarn.lock 2>/dev/null | wc -l) - if [ "${lock_count}" -gt 0 ]; then + file_count=$(ls -1 yarn.lock 2>/dev/null | wc -l) + if [ "${file_count}" -gt 0 ]; then printf "Updating Yarn dependencies for ${PWD##*/}...\n\n" yarn upgrade > /dev/null yarn outdated fi # Go - pkg_count=$(ls -1 go.mod 2>/dev/null | wc -l) - if [ "${pkg_count}" -gt 0 ]; then + file_count=$(ls -1 go.mod 2>/dev/null | wc -l) + if [ "${file_count}" -gt 0 ]; then printf "Updating Go dependencies for ${PWD##*/}...\n\n" go get -u go mod tidy fi # Go dep - pkg_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) - if [ "${pkg_count}" -gt 0 ]; then + file_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) + if [ "${file_count}" -gt 0 ]; then printf "Updating Dep dependencies for ${PWD##*/}...\n\n" dep ensure dep ensure -update fi + # Git submodules + file_count=$(ls -1 .gitmodules 2>/dev/null | wc -l) + if [ "${file_count}" -gt 0 ]; then + printf "Updating Git submodules for ${PWD##*/}...\n\n" + git submodule update --init + fi + } # System update From a9329d2e1f56fa1a3b68dbe49e6ddd3afc1b7d06 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 3 Dec 2018 22:30:16 +0100 Subject: [PATCH 261/532] Order taps alpbabetically --- Brewfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Brewfile b/Brewfile index 65619b37..a98714b7 100644 --- a/Brewfile +++ b/Brewfile @@ -1,8 +1,8 @@ # Taps -tap "homebrew/cask" -tap "golangci/tap" -tap "cloudfoundry/tap" tap "buo/cask-upgrade" +tap "cloudfoundry/tap" +tap "golangci/tap" +tap "homebrew/cask" # Languages brew "go" From 36c3e8794f649cf9b0bb8f64260adeb8a640b983 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 6 Dec 2018 08:09:24 +0100 Subject: [PATCH 262/532] Disable GO111MODULE for dep projects --- bash/.functions | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/.functions b/bash/.functions index e571e1f7..d0e0f77d 100644 --- a/bash/.functions +++ b/bash/.functions @@ -102,8 +102,8 @@ function depu() { file_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) if [ "${file_count}" -gt 0 ]; then printf "Updating Dep dependencies for ${PWD##*/}...\n\n" - dep ensure - dep ensure -update + GO111MODULE=off dep ensure + GO111MODULE=off dep ensure -update fi # Git submodules From bd161bd2f9336ba72f33d0142a46100b25fd189c Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 6 Dec 2018 13:09:33 +0100 Subject: [PATCH 263/532] Add support for Vue --- vim/.plugins.vimrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 9e7da76b..8590abf5 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -81,6 +81,7 @@ let g:ale_fixers['javascript'] = ['prettier'] let g:ale_fixers['typescript'] = ['prettier','tslint'] let g:ale_fixers['json'] = ['prettier'] let g:ale_fixers['html'] = ['prettier'] +let g:ale_fixers['vue'] = ['prettier'] let g:ale_fixers['css'] = ['prettier'] let g:ale_fixers['less'] = ['prettier'] let g:ale_fixers['scss'] = ['prettier'] @@ -134,6 +135,7 @@ Plug 'sebdah/vim-delve', { 'for': 'go' } Plug 'pangloss/vim-javascript' Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } +Plug 'posva/vim-vue', { 'for': 'vue' } " Typescript Plug 'HerringtonDarkholme/yats.vim', { 'for': 'typescript' } From 378871909832498006bcb77a735fe649a1c1b575 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 10 Dec 2018 21:09:02 +0100 Subject: [PATCH 264/532] Use vim-sensible --- vim/.plugins.vimrc | 3 +++ vim/.vimrc | 8 -------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 8590abf5..c5b11e17 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -8,6 +8,9 @@ endif " Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged) call plug#begin('~/.local/share/nvim/plugged') +" Sensible defaults everyone can agree on +Plug 'tpope/vim-sensible' + " Colorscheme Plug 'tyrannicaltoucan/vim-quantum' diff --git a/vim/.vimrc b/vim/.vimrc index a95e1f07..491f7ea5 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -12,8 +12,6 @@ set shortmess=I set termguicolors " Use the OS clipboard by default (on versions compiled with `+clipboard`) set clipboard=unnamed -" Enhance command-line completion -set wildmenu " Add the g flag to search/replace by default set gdefault " Change mapleader @@ -25,14 +23,10 @@ set number set hlsearch " Ignore case of searches set ignorecase -" Highlight dynamically as pattern is typed -set incsearch " Do not reset cursor to start of line when moving around set nostartofline " Show the (partial) command as it is being typed set showcmd -" Start scrolling three lines before the horizontal window border -set scrolloff=3 " More natural splitting of windows set splitbelow set splitright @@ -43,8 +37,6 @@ set spelllang=en_us " Automatic commands if has("autocmd") - " Enable file type detection - filetype on " Strip trailing whitespaces on save autocmd BufWritePre * %s/\s\+$//e " Unify indentation on save From af495b3e93137628b182f3166bb8668c1e8174da Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 21 Dec 2018 08:26:20 +0100 Subject: [PATCH 265/532] Disable go modules for update script --- update-go.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/update-go.sh b/update-go.sh index 72468b5d..6efc7d3a 100755 --- a/update-go.sh +++ b/update-go.sh @@ -2,6 +2,8 @@ set -u +export GO111MODULE=off + if [ -x "$(command -v go)" ]; then if [ ! -x "$(command -v gobin)" ]; then go get -u github.com/rjeczalik/bin/cmd/gobin From bf09bc28b88c8c83d9dafd5f48a6d20bd5adfafc Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 9 Jan 2019 23:56:34 +0100 Subject: [PATCH 266/532] Upgrade homebrew to 1.9 --- bash/.functions | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/bash/.functions b/bash/.functions index d0e0f77d..551b9880 100644 --- a/bash/.functions +++ b/bash/.functions @@ -98,12 +98,11 @@ function depu() { go mod tidy fi - # Go dep - file_count=$(ls -1 Gopkg.toml 2>/dev/null | wc -l) + # Rust + file_count=$(ls -1 Cargo.toml 2>/dev/null | wc -l) if [ "${file_count}" -gt 0 ]; then - printf "Updating Dep dependencies for ${PWD##*/}...\n\n" - GO111MODULE=off dep ensure - GO111MODULE=off dep ensure -update + printf "Updating Cargo dependencies for ${PWD##*/}...\n\n" + cargo update fi # Git submodules @@ -169,7 +168,7 @@ function pacu() { cat ~/dotfiles/Brewfile* | brew bundle --file=- cat ~/dotfiles/Brewfile* | brew bundle cleanup --force --file=- brew cu --all --yes --cleanup - brew cleanup + brew cleanup --prune 7 fi if typeset -f zprezto-update > /dev/null; then printf '\e[1mUpdating zprezto\e[0m\n' @@ -186,6 +185,13 @@ function pacu() { processes+=("$!") fi + # Rust + if [ -x "$(command -v rustup)" ]; then + printf '\e[1mUpdating rustup components\e[0m\n' + ("rustup update") & + processes+=("$!") + fi + # npm if [ -x "$(command -v npm)" ]; then printf '\e[1mUpdating globally installed npm packages\e[0m\n' From 3d739d35bb7381be0f4ad5f9312c6ef960391016 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 16 Jan 2019 22:41:29 +0100 Subject: [PATCH 267/532] Add OpenShift CLI --- Brewfile | 1 + bash/.exports | 2 +- bash/.path | 2 ++ vim/.plugins.vimrc | 4 ++++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Brewfile b/Brewfile index a98714b7..d8b5ad0f 100644 --- a/Brewfile +++ b/Brewfile @@ -25,6 +25,7 @@ brew "jq" brew "mas" brew "mongodb" brew "neovim" +brew "openshift-cli" brew "prettier" brew "protobuf" brew "reattach-to-user-namespace" diff --git a/bash/.exports b/bash/.exports index cf0e7e07..3e3f12b4 100644 --- a/bash/.exports +++ b/bash/.exports @@ -10,7 +10,7 @@ export VISUAL="${EDITOR}" export HISTCONTROL='ignoreboth'; # Search only desired files with fzf -export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/*" --glob "!bin/*" --glob "!build/*" --glob "!coverage/*" --glob "!dist/*"' +export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/*" --glob "!bin/*" --glob "!build/*" --glob "!coverage/*" --glob "!dist/*" --glob "!target/*"' # Enable Go modules by default export GO111MODULE=on diff --git a/bash/.path b/bash/.path index a8315082..870e7e08 100644 --- a/bash/.path +++ b/bash/.path @@ -9,6 +9,8 @@ PATH="$PATH:$HOME/bin" GOPATH="$HOME/go" PATH="$PATH:$GOPATH/bin" +PATH="$PATH:$HOME/.cargo/bin" + PATH="$PATH:$HOME/.node_modules/bin" export GOPATH diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index c5b11e17..39364027 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -134,6 +134,10 @@ endif Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } Plug 'sebdah/vim-delve', { 'for': 'go' } +" Rust +Plug 'rust-lang/rust.vim', { 'for': 'rust' } +let g:rustfmt_autosave = 1 + " JavaScript Plug 'pangloss/vim-javascript' Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } From 90918e1a5b8cedb3d588f12dd71332b88ab56b53 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 22 Jan 2019 08:49:20 +0100 Subject: [PATCH 268/532] Use javascript plugin only for js files --- README.md | 2 +- tmux/.tmux.conf | 2 +- vim/.plugins.vimrc | 4 ++-- vim/.vimrc | 5 +++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 83326c91..9ea4e255 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Dotfiles -My personal dotfiles +:unicorn: My personal dotfiles I mainly work with [Go](https://golang.org/), [JavaScript](https://en.wikipedia.org/wiki/JavaScript), [TypeScript](https://www.typescriptlang.org/), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index f3f07349..87f41d85 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -1,4 +1,4 @@ -# Use https://github.com/trevordmiller/nova-tmux +# Color scheme set -ga terminal-overrides ",xterm-256color:Tc" set -g default-terminal "xterm-256color" set -g status-style 'bg=#1E272C,fg=#6A7D89' diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 39364027..eca04646 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -139,7 +139,7 @@ Plug 'rust-lang/rust.vim', { 'for': 'rust' } let g:rustfmt_autosave = 1 " JavaScript -Plug 'pangloss/vim-javascript' +Plug 'pangloss/vim-javascript', { 'for': 'javascript' } Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } Plug 'posva/vim-vue', { 'for': 'vue' } @@ -161,7 +161,7 @@ let g:deoplete#omni_patterns.terraform = '[^ *\t"{=$]\w*' " TOML Plug 'cespare/vim-toml', { 'for': 'toml' } -" NGINX +" nginx Plug 'chr4/nginx.vim', { 'for': 'nginx' } " Initialize plugin system diff --git a/vim/.vimrc b/vim/.vimrc index 491f7ea5..68962bf9 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -1,6 +1,8 @@ " Import plugins source ~/.plugins.vimrc +" Many basic options are already set by the tpope/vim-sensible plugin + " Set color scheme colorscheme quantum @@ -35,12 +37,11 @@ set wrap linebreak " Set spell check language to en_us set spelllang=en_us -" Automatic commands if has("autocmd") " Strip trailing whitespaces on save autocmd BufWritePre * %s/\s\+$//e " Unify indentation on save autocmd BufWritePre * retab - " Enable spell checking for certain files + " Enable spell checking for certain file types autocmd BufRead,BufNewFile *.md,*.tex setlocal spell endif From 3979b962815f133d6f2b669493ac3fc0e4129d38 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 22 Jan 2019 22:09:47 +0100 Subject: [PATCH 269/532] Add git commit browser to Vim --- vim/.plugins.vimrc | 1 + 1 file changed, 1 insertion(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index eca04646..35c910d7 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -52,6 +52,7 @@ let g:DirDiffExcludes = ".git,node_modules,vendor,dist,.DS_Store,.*.swp" " Git integration Plug 'tpope/vim-fugitive' +Plug 'junegunn/gv.vim' " Show Git indicators with line numbers Plug 'airblade/vim-gitgutter' From 6717a2f2c9e5ea03355849fee636c4e3d4b9611b Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 8 Feb 2019 14:02:24 +0100 Subject: [PATCH 270/532] Add VimWiki --- vim/.plugins.vimrc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 35c910d7..c60c87e4 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -18,6 +18,10 @@ Plug 'tyrannicaltoucan/vim-quantum' Plug 'takac/vim-hardtime' let g:hardtime_default_on = 1 +" Personal Wiki +Plug 'vimwiki/vimwiki' +let g:vimwiki_list = [{ 'path': '~/Dropbox/wiki', 'syntax': 'markdown', 'ext': '.md' }] + " Goyo mode for focused writing Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' From 85aff06d46025ac5a1cf6030921d3aa32bd4110d Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 17 Feb 2019 15:17:41 +0100 Subject: [PATCH 271/532] Fix rustup update command --- bash/.functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.functions b/bash/.functions index 551b9880..3276b1eb 100644 --- a/bash/.functions +++ b/bash/.functions @@ -188,7 +188,7 @@ function pacu() { # Rust if [ -x "$(command -v rustup)" ]; then printf '\e[1mUpdating rustup components\e[0m\n' - ("rustup update") & + (rustup update) & processes+=("$!") fi From b000a00f74933a8e39c20beb0a3096487b68a411 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 24 Feb 2019 11:27:31 +0100 Subject: [PATCH 272/532] Clean up comments --- README.md | 39 +++++++++++++++++++-------------------- bash/.bash_profile | 4 ++-- bash/.exports | 6 +++--- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 9ea4e255..d9fa2bf9 100644 --- a/README.md +++ b/README.md @@ -6,18 +6,6 @@ I mainly work with [Go](https://golang.org/), [JavaScript](https://en.wikipedia. On macOS, it is recommended to use these dotfiles with [iTerm2](https://www.iterm2.com/) and the [quantum](https://github.com/tyrannicaltoucan/vim-quantum/blob/master/term/iterm/quantum.itermcolors) color scheme. -## Installation - -1. Run the following command: - - **WARNING: This may install and/or remove software and change your configs!** - - ```shell - $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) - ``` - -1. Run command again if Xcode Command Line Tools needed to be installed - ## Usage - `pacu`: Updates and upgrades the whole system (using `Brewfile` on macOS) @@ -25,14 +13,25 @@ On macOS, it is recommended to use these dotfiles with [iTerm2](https://www.iter - `vim`: Starts Neovim with all plugins - and many more... -## Customize +## Installation + +1. Clone this repo to `~/dotfiles` by running `git clone git@github.com:mastertinner/dotfiles.git ~/dotfiles` +1. Change the name and email address in `git/.gitconfig` +1. macOS only: Change `Brewfile` to your liking or add `Brewfile.extra` for independent packages per machine +1. macOS only: If you have apps installed which you didn't install through `brew cask` but that you now added to `Brewfile` as `cask`, you need to reinstall them with `brew cask install --force` so `cask` knows it's supposed to manage these apps. + + Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. -1. Fork this repo -1. Change the `git clone` command in `init.sh` to use your own repo -1. Change the name and email address in `git/.gitconfig` -1. Change `Brewfile` to your liking or add `Brewfile.extra` for independent packages per machine -1. If you have apps installed which you didn't install through `brew cask` but that you now added to `Brewfile` as `cask`, you need to reinstall them with `brew cask install --force` so `cask` knows it's supposed to manage these apps. +1. Run `~/dotfiles/init.sh` - Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. + **WARNING: This may install and/or remove software and change your configs!** + +## Quick Installation without customization (not recommended) + +1. Run the following command: -1. Run the above installation command substituting the repo URL with your own + **WARNING: This may install and/or remove software and change your configs!** + + ```shell + $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) + ``` diff --git a/bash/.bash_profile b/bash/.bash_profile index e49c4f5c..1d51553d 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -27,8 +27,8 @@ fi; [ -f ~/.fzf.bash ] && source ~/.fzf.bash # Load the shell dotfiles, and then some: -# * ~/.path can be used to extend `$PATH`. -# * ~/.extra can be used for other settings you don’t want to commit. +# * ~/.path can be used to extend `$PATH` +# * ~/.extra can be used for other settings you don’t want to commit for file in ~/.{path,exports,aliases,functions,extra}; do [ -r "$file" ] && [ -f "$file" ] && source "$file"; done; diff --git a/bash/.exports b/bash/.exports index 3e3f12b4..40b78c5b 100644 --- a/bash/.exports +++ b/bash/.exports @@ -1,12 +1,12 @@ -# Prefer US English and use UTF-8. +# Prefer US English and use UTF-8 export LANG='en_US.UTF-8'; export LC_ALL='en_US.UTF-8'; -# Make vim the default editor. +# Make vim the default editor export EDITOR='vim'; export VISUAL="${EDITOR}" -# Omit duplicates and commands that begin with a space from history. +# Omit duplicates and commands that begin with a space from history export HISTCONTROL='ignoreboth'; # Search only desired files with fzf From 9afa3fc63d32a30977c56f755f075bb6020ecab0 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 12 Mar 2019 14:55:25 +0100 Subject: [PATCH 273/532] Upgrade pip packages correctly --- bash/.functions | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bash/.functions b/bash/.functions index 3276b1eb..ae9367b1 100644 --- a/bash/.functions +++ b/bash/.functions @@ -219,17 +219,17 @@ function pacu() { # Python pip if [ -x "$(command -v pip)" ]; then printf '\e[1mUpdating pip packages\e[0m\n' - (pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install --user --upgrade) & + (pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install --upgrade) & processes+=("$!") fi if [ -x "$(command -v pip2)" ]; then printf '\e[1mUpdating pip2 packages\e[0m\n' - (pip2 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip2 install --user --upgrade) & + (pip2 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip2 install --upgrade) & processes+=("$!") fi if [ -x "$(command -v pip3)" ]; then printf '\e[1mUpdating pip3 packages\e[0m\n' - (pip3 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip3 install --user --upgrade) & + (pip3 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip3 install --upgrade) & processes+=("$!") fi From f8fc4b08c7b1c896b0b98916918b78acdec6ab77 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 17 Mar 2019 20:40:04 +0100 Subject: [PATCH 274/532] Remove vimwiki --- vim/.plugins.vimrc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index c60c87e4..35c910d7 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -18,10 +18,6 @@ Plug 'tyrannicaltoucan/vim-quantum' Plug 'takac/vim-hardtime' let g:hardtime_default_on = 1 -" Personal Wiki -Plug 'vimwiki/vimwiki' -let g:vimwiki_list = [{ 'path': '~/Dropbox/wiki', 'syntax': 'markdown', 'ext': '.md' }] - " Goyo mode for focused writing Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' From 1a7fa8caadc94e833dfe09771c8982dda03e4bcc Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 2 Apr 2019 20:10:31 +0200 Subject: [PATCH 275/532] Install awslogs --- Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Brewfile b/Brewfile index d8b5ad0f..5085476f 100644 --- a/Brewfile +++ b/Brewfile @@ -12,6 +12,7 @@ brew "ruby" # Tools brew "awscli" +brew "awslogs" brew "cloudfoundry/tap/cf-cli" brew "cmake" brew "diff-so-fancy" From 8768a1fe7a1f73c6383c7f0293a327c58723ec60 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 28 Apr 2019 23:13:34 +0200 Subject: [PATCH 276/532] Add MDX support for vim --- bash/.functions | 2 +- init.sh | 1 - vim/.plugins.vimrc | 14 +++++++------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/bash/.functions b/bash/.functions index ae9367b1..a09aea7c 100644 --- a/bash/.functions +++ b/bash/.functions @@ -236,7 +236,7 @@ function pacu() { # Vim if [ -x "$(command -v nvim)" ]; then printf '\e[1mUpdating Vim plugins\e[0m\n' - nvim -c 'PlugClean! | PlugUpgrade | PlugUpdate --sync | qa' + nvim -c 'PlugUpgrade | PlugClean! | PlugUpdate! | qa' fi # Wait for all processes to finish diff --git a/init.sh b/init.sh index 9ca1eda5..dd25b246 100755 --- a/init.sh +++ b/init.sh @@ -167,7 +167,6 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' go-tools \ htop \ jq \ - mongodb \ neovim \ protobuf \ shellcheck \ diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 35c910d7..6c493673 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -19,8 +19,8 @@ Plug 'takac/vim-hardtime' let g:hardtime_default_on = 1 " Goyo mode for focused writing -Plug 'junegunn/goyo.vim' -Plug 'junegunn/limelight.vim' +Plug 'junegunn/goyo.vim', { 'on': 'Goyo' } +Plug 'junegunn/limelight.vim', { 'on': 'Goyo' } if has("autocmd") autocmd! User GoyoEnter nested call goyo_enter() autocmd! User GoyoLeave nested call goyo_leave() @@ -43,11 +43,8 @@ Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } Plug 'junegunn/fzf.vim' nnoremap :Files -" Time tracking -Plug 'wakatime/vim-wakatime' - " Diff directories -Plug 'will133/vim-dirdiff' +Plug 'will133/vim-dirdiff', { 'on': 'DirDiff' } let g:DirDiffExcludes = ".git,node_modules,vendor,dist,.DS_Store,.*.swp" " Git integration @@ -67,7 +64,7 @@ Plug 'tpope/vim-surround' Plug 'tpope/vim-repeat' " Source tree -Plug 'scrooloose/nerdtree' +Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } let NERDTreeShowHidden = 1 let NERDTreeIgnore = ['.DS_Store','.git$'] map :NERDTreeToggle @@ -165,5 +162,8 @@ Plug 'cespare/vim-toml', { 'for': 'toml' } " nginx Plug 'chr4/nginx.vim', { 'for': 'nginx' } +" MDX +Plug 'jxnblk/vim-mdx-js', { 'for': 'markdown.mdx' } + " Initialize plugin system call plug#end() From ad8094fa945e9468c5e3cb3e1373629be6158258 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 29 Apr 2019 09:11:58 +0200 Subject: [PATCH 277/532] Add ansible --- Brewfile | 4 ++++ bash/.path | 21 ++++++++++----------- vim/.plugins.vimrc | 3 +++ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Brewfile b/Brewfile index 5085476f..66fc8f94 100644 --- a/Brewfile +++ b/Brewfile @@ -3,6 +3,7 @@ tap "buo/cask-upgrade" tap "cloudfoundry/tap" tap "golangci/tap" tap "homebrew/cask" +tap "wata727/tflint" # Languages brew "go" @@ -11,6 +12,8 @@ brew "python" brew "ruby" # Tools +brew "ansible" +brew "ansible-lint" brew "awscli" brew "awslogs" brew "cloudfoundry/tap/cf-cli" @@ -33,6 +36,7 @@ brew "reattach-to-user-namespace" brew "ripgrep" brew "shellcheck" brew "terraform" +brew "wata727/tflint/tflint" brew "tmate" brew "tmux" brew "tree" diff --git a/bash/.path b/bash/.path index 870e7e08..b3a9b8ff 100644 --- a/bash/.path +++ b/bash/.path @@ -1,17 +1,16 @@ -PATH="/usr/local/bin" -PATH="$PATH:/usr/bin" -PATH="$PATH:/bin" -PATH="$PATH:/usr/local/sbin" -PATH="$PATH:/usr/sbin" -PATH="$PATH:/sbin" -PATH="$PATH:$HOME/bin" +PATH="/sbin" +PATH="/bin:$PATH" +PATH="/usr/sbin:$PATH" +PATH="/usr/bin:$PATH" +PATH="/usr/local/sbin:$PATH" +PATH="/usr/local/bin:$PATH" -GOPATH="$HOME/go" -PATH="$PATH:$GOPATH/bin" +PATH="$HOME/.node_modules/bin:$PATH" -PATH="$PATH:$HOME/.cargo/bin" +PATH="$HOME/.cargo/bin:$PATH" -PATH="$PATH:$HOME/.node_modules/bin" +GOPATH="$HOME/go" +PATH="$GOPATH/bin:$PATH" export GOPATH export PATH diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 6c493673..e883ae36 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -111,6 +111,9 @@ xmap (neosnippet_expand_target) " Go Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' ,'for': 'go' } let g:go_fmt_command = 'goimports' +let g:go_def_mode='gopls' +let g:go_info_mode='gopls' +let g:go_metalinter_command='golangci-lint' let g:go_highlight_types = 1 let g:go_highlight_functions = 1 let g:go_highlight_methods = 1 From 582b5f62edc00bc43cea9ae154d96d48531347f1 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 8 May 2019 12:53:05 +0200 Subject: [PATCH 278/532] Use quantum-black theme --- vim/.plugins.vimrc | 1 + 1 file changed, 1 insertion(+) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index e883ae36..3be5f04f 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -13,6 +13,7 @@ Plug 'tpope/vim-sensible' " Colorscheme Plug 'tyrannicaltoucan/vim-quantum' +let g:quantum_black=1 " Enable hard mode Plug 'takac/vim-hardtime' From 36527f27947090c58a56602e537e30d3b7b44076 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 19 May 2019 21:46:21 +0200 Subject: [PATCH 279/532] Enable vim-go for gomod files --- vim/.plugins.vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 3be5f04f..de65a90f 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -110,7 +110,7 @@ smap (neosnippet_expand_or_jump) xmap (neosnippet_expand_target) " Go -Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' ,'for': 'go' } +Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' ,'for': ['go','gomod'] } let g:go_fmt_command = 'goimports' let g:go_def_mode='gopls' let g:go_info_mode='gopls' From 4cc4bf57230ad92b19edcf1a78229122e04c758a Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 23 May 2019 10:38:25 +0200 Subject: [PATCH 280/532] Remove unneeded packages --- Brewfile | 5 ----- vim/.vimrc | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Brewfile b/Brewfile index 66fc8f94..28bc065d 100644 --- a/Brewfile +++ b/Brewfile @@ -27,7 +27,6 @@ brew "hadolint" brew "htop" brew "jq" brew "mas" -brew "mongodb" brew "neovim" brew "openshift-cli" brew "prettier" @@ -55,12 +54,9 @@ cask "google-chrome" cask "graphql-playground" cask "imageoptim" cask "iterm2" -cask "mongodb-compass" -cask "postman" cask "skype" cask "slack" cask "spotify" -cask "sqlectron" cask "virtualbox" cask "whatsapp" @@ -69,4 +65,3 @@ mas "Affinity Designer", id: 824171161 mas "Affinity Photo", id:824183456 mas "BetterSnapTool", id: 417375580 mas "PopClip", id: 445189367 -mas "The Unarchiver", id: 425424353 diff --git a/vim/.vimrc b/vim/.vimrc index 68962bf9..736d8128 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -45,3 +45,8 @@ if has("autocmd") " Enable spell checking for certain file types autocmd BufRead,BufNewFile *.md,*.tex setlocal spell endif + +if has("nvim") + " Preview for find-replace command + set inccommand=split +endif From 6ede04126f5a98ccf5ffa8817abed2ba08ebd295 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 2 Jun 2019 16:55:32 +0200 Subject: [PATCH 281/532] Make scripts POSIX compliant --- bash/.functions | 2 +- init.sh | 22 +++++++++++----------- update-go.sh | 2 +- update-js.sh | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/bash/.functions b/bash/.functions index a09aea7c..fe1d5e04 100644 --- a/bash/.functions +++ b/bash/.functions @@ -170,7 +170,7 @@ function pacu() { brew cu --all --yes --cleanup brew cleanup --prune 7 fi - if typeset -f zprezto-update > /dev/null; then + if "$(command -v zprezto-update)"; then printf '\e[1mUpdating zprezto\e[0m\n' zprezto-update & processes+=("$!") diff --git a/init.sh b/init.sh index dd25b246..501841dc 100755 --- a/init.sh +++ b/init.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # This script installs these dotfiles. @@ -12,11 +12,11 @@ case "$(uname)" in 'Darwin') # Install Xcode Command Line Tools if not installed - if ! xcode-select -p &> /dev/null; then - read -p 'Xcode Command Line Tools not installed. You will have to run the script again after successfully installing them. Install now? (Y/n)' -r + if ! xcode-select -p > /dev/null; then + printf 'Xcode Command Line Tools not installed. You will have to run the script again after successfully installing them. Install now? (Y/n)' + read -r echo - if [[ ! $REPLY =~ ^[Nn] ]] - then + if ! "$REPLY" | grep -Eq '^[Nn]'; then xcode-select --install echo 'Please run the script again after the installation has finished' else @@ -89,8 +89,8 @@ case "$(uname)" in https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # Run full system upgrade - source ~/dotfiles/bash/.path - source ~/dotfiles/bash/.functions + . ~/dotfiles/bash/.path + . ~/dotfiles/bash/.functions pacu # Install prezto @@ -208,8 +208,8 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # Run full system upgrade - source ~/dotfiles/bash/.path - source ~/dotfiles/bash/.functions + . ~/dotfiles/bash/.path + . ~/dotfiles/bash/.functions pacu # Symlink nvim to vim if Vim not installed @@ -228,8 +228,8 @@ esac # Use zsh if [ -x "$(command -v zsh)" ]; then printf '\e[1mChanging your shell to zsh\e[0m\n' - grep -q -F "$(which zsh)" /etc/shells || sudo sh -c 'echo "$(which zsh)" >> /etc/shells' - chsh -s "$(which zsh)" + grep -q -F "$(command -v zsh)" /etc/shells || sudo sh -c 'echo "$(command -v zsh)" >> /etc/shells' + chsh -s "$(command -v zsh)" fi printf '\e[1mDotfiles successfully initialized. Please reboot to finalize.\e[0m\n' diff --git a/update-go.sh b/update-go.sh index 6efc7d3a..971074bf 100755 --- a/update-go.sh +++ b/update-go.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh set -u diff --git a/update-js.sh b/update-js.sh index 70829f44..9e2f5eab 100755 --- a/update-js.sh +++ b/update-js.sh @@ -1,8 +1,8 @@ -#!/bin/bash +#!/bin/sh set -u -source ~/dotfiles/bash/.functions +. ~/dotfiles/bash/.functions js_dir="${HOME}/js" From 80fe8dcb5b25f89b47ab9d1b6d6001f6fc99fbe4 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 3 Jun 2019 16:12:25 +0200 Subject: [PATCH 282/532] Make scripts more POSIX compliant --- bash/.bash_profile | 8 +++---- bash/.bashrc | 2 +- bash/.functions | 52 +++++++++++++++++++++++----------------------- 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/bash/.bash_profile b/bash/.bash_profile index 1d51553d..5057b021 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -13,10 +13,10 @@ done; # Add tab completion for many Bash commands if [ "$(uname)" == 'Darwin' ]; then - if which brew > /dev/null && [ -f "$(brew --prefix)/share/bash-completion/bash_completion" ]; then + if command -v brew > /dev/null && [ -f "$(brew --prefix)/share/bash-completion/bash_completion" ]; then source "$(brew --prefix)/share/bash-completion/bash_completion"; elif [ -f /etc/bash_completion ]; then - source /etc/bash_completion; + . /etc/bash_completion; fi; fi; @@ -24,11 +24,11 @@ fi; [ -e "$HOME/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | tr ' ' '\n')" scp sftp ssh; # Autocompletions for fzf -[ -f ~/.fzf.bash ] && source ~/.fzf.bash +[ -f ~/.fzf.bash ] && . ~/.fzf.bash # Load the shell dotfiles, and then some: # * ~/.path can be used to extend `$PATH` # * ~/.extra can be used for other settings you don’t want to commit for file in ~/.{path,exports,aliases,functions,extra}; do - [ -r "$file" ] && [ -f "$file" ] && source "$file"; + [ -r "$file" ] && [ -f "$file" ] && . "$file"; done; diff --git a/bash/.bashrc b/bash/.bashrc index 12570026..916ed17e 100644 --- a/bash/.bashrc +++ b/bash/.bashrc @@ -1 +1 @@ -[ -n "$PS1" ] && source ~/.bash_profile; +[ -n "$PS1" ] && . ~/.bash_profile; diff --git a/bash/.functions b/bash/.functions index fe1d5e04..83fb3633 100644 --- a/bash/.functions +++ b/bash/.functions @@ -1,18 +1,18 @@ # Create a new directory and enter it -function mkcd() { +mkcd() { mkdir -p "$@" && cd "$_" || exit; } # cd into directory with fzf -function fcd() { +fcd() { local dir - dir=$(find ${1:-.} -path '*/\.*' -prune \ + dir=$(find "${1:-.}" -path '*/\.*' -prune \ -o -type d -print 2> /dev/null | fzf +m) && - cd "$dir" + cd "$dir" || exit } # Checkout branches or tags with fzf -function fco() { +fco() { local tags branches target tags=$( git tag | awk '{print "\x1b[31;1mtag\x1b[m\t" $1}') || return @@ -23,11 +23,11 @@ function fco() { target=$( (echo "$tags"; echo "$branches") | fzf-tmux -l30 -- --no-hscroll --ansi +m -d "\t" -n 2) || return - git checkout $(echo "$target" | awk '{print $2}') + git checkout "$(echo "$target" | awk '{print $2}')" } # fkill - kill process -function fkill() { +fkill() { local pid if [ "$UID" != "0" ]; then pid=$(ps -f -u $UID | sed 1d | fzf -m | awk '{print $2}') @@ -37,12 +37,12 @@ function fkill() { if [ "x$pid" != "x" ] then - echo $pid | xargs kill -${1:-9} + echo "$pid" | xargs kill "-${1:-9}" fi } # fshow - git commit browser -function fshow() { +fshow() { git log --graph --color=always \ --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" | fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \ @@ -54,12 +54,12 @@ FZF-EOF" } # Open tmux and Vim in an IDE like layout -function ide() { - if [ ! -z "$1" ]; then +ide() { + if [ -n "$1" ]; then cd "$1" || exit fi - if [ ! -n "${TMUX}" ]; then + if [ -z "${TMUX}" ]; then tmux new-session -d -s ide tmux split-window -vb -p 90 tmux select-pane -t 0 @@ -72,50 +72,50 @@ function ide() { } # Update dependencies -function depu() { +depu() { # npm - file_count=$(ls -1 package-lock.json 2>/dev/null | wc -l) + file_count=$(find . -maxdepth 1 -name package-lock.json | wc -l) if [ "${file_count}" -gt 0 ]; then - printf "Updating npm dependencies for ${PWD##*/}...\n\n" + printf "Updating npm dependencies for %s...\n\n" "${PWD##*/}" npm update npm outdated fi # Yarn - file_count=$(ls -1 yarn.lock 2>/dev/null | wc -l) + file_count=$(find . -maxdepth 1 -name yarn.lock | wc -l) if [ "${file_count}" -gt 0 ]; then - printf "Updating Yarn dependencies for ${PWD##*/}...\n\n" + printf "Updating Yarn dependencies for %s...\n\n" "${PWD##*/}" yarn upgrade > /dev/null yarn outdated fi # Go - file_count=$(ls -1 go.mod 2>/dev/null | wc -l) + file_count=$(find . -maxdepth 1 -name go.mod | wc -l) if [ "${file_count}" -gt 0 ]; then - printf "Updating Go dependencies for ${PWD##*/}...\n\n" + printf "Updating Go dependencies for %s...\n\n" "${PWD##*/}" go get -u go mod tidy fi # Rust - file_count=$(ls -1 Cargo.toml 2>/dev/null | wc -l) + file_count=$(find . -maxdepth 1 -name Cargo.toml | wc -l) if [ "${file_count}" -gt 0 ]; then - printf "Updating Cargo dependencies for ${PWD##*/}...\n\n" + printf "Updating Cargo dependencies for %s...\n\n" "${PWD##*/}" cargo update fi # Git submodules - file_count=$(ls -1 .gitmodules 2>/dev/null | wc -l) + file_count=$(find . -maxdepth 1 -name .gitmodules | wc -l) if [ "${file_count}" -gt 0 ]; then - printf "Updating Git submodules for ${PWD##*/}...\n\n" + printf "Updating Git submodules for %s...\n\n" "${PWD##*/}" git submodule update --init fi } # System update -function pacu() { +pacu() { processes=() # Dotfiles repo @@ -131,7 +131,7 @@ function pacu() { printf '\e[1mUpdating pacman packages\e[0m\n' sudo pacman -Syu --noconfirm orphans=$(sudo pacman -Qtdq) || orphans='' - if [ ! -z "${orphans}" ]; then + if [ -n "${orphans}" ]; then sudo pacman -Rns $orphans --noconfirm fi sudo pacman -Sc --noconfirm @@ -170,7 +170,7 @@ function pacu() { brew cu --all --yes --cleanup brew cleanup --prune 7 fi - if "$(command -v zprezto-update)"; then + if [ -x "$(command -v zprezto-update)" ]; then printf '\e[1mUpdating zprezto\e[0m\n' zprezto-update & processes+=("$!") From 04c8f3bcdd234bb368c21722ae81ea4e16cc87f0 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 4 Jun 2019 22:45:22 +0200 Subject: [PATCH 283/532] Simplify init command --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d9fa2bf9..e01a4d05 100644 --- a/README.md +++ b/README.md @@ -33,5 +33,5 @@ On macOS, it is recommended to use these dotfiles with [iTerm2](https://www.iter **WARNING: This may install and/or remove software and change your configs!** ```shell - $ bash <(curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh) + $ curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh | bash ``` From 5f695ddbc1832b86126bc42d77e642510c06ef81 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 4 Jun 2019 23:31:03 +0200 Subject: [PATCH 284/532] Remove soon to be deprecated python-pip2 --- bash/.functions | 5 ----- 1 file changed, 5 deletions(-) diff --git a/bash/.functions b/bash/.functions index 83fb3633..f19d87d8 100644 --- a/bash/.functions +++ b/bash/.functions @@ -222,11 +222,6 @@ pacu() { (pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install --upgrade) & processes+=("$!") fi - if [ -x "$(command -v pip2)" ]; then - printf '\e[1mUpdating pip2 packages\e[0m\n' - (pip2 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip2 install --upgrade) & - processes+=("$!") - fi if [ -x "$(command -v pip3)" ]; then printf '\e[1mUpdating pip3 packages\e[0m\n' (pip3 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip3 install --upgrade) & From 3e01dc5036054100736294d88a10c194e51ca6af Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 18 Jun 2019 10:12:49 +0700 Subject: [PATCH 285/532] Prevent vim-plug from reinstalling deps every time --- bash/.functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.functions b/bash/.functions index f19d87d8..1179eac7 100644 --- a/bash/.functions +++ b/bash/.functions @@ -231,7 +231,7 @@ pacu() { # Vim if [ -x "$(command -v nvim)" ]; then printf '\e[1mUpdating Vim plugins\e[0m\n' - nvim -c 'PlugUpgrade | PlugClean! | PlugUpdate! | qa' + nvim -c 'PlugUpgrade | PlugClean! | PlugUpdate | qa' fi # Wait for all processes to finish From 1af66a933315f0ef60f87d172e0c94730caacd8d Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 23 Jun 2019 11:06:16 +0700 Subject: [PATCH 286/532] Use mac app store where possible --- Brewfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Brewfile b/Brewfile index 28bc065d..594d135a 100644 --- a/Brewfile +++ b/Brewfile @@ -55,13 +55,13 @@ cask "graphql-playground" cask "imageoptim" cask "iterm2" cask "skype" -cask "slack" cask "spotify" cask "virtualbox" -cask "whatsapp" mas "1Password", id: 443987910 mas "Affinity Designer", id: 824171161 mas "Affinity Photo", id:824183456 mas "BetterSnapTool", id: 417375580 mas "PopClip", id: 445189367 +mas "Slack", id: 803453959 +mas "WhatsApp", id: 1147396723 From ae0473bc99b8930dcb86b88754a6d924cd8b3aec Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 2 Jul 2019 23:26:28 +0200 Subject: [PATCH 287/532] Use firefox instead of chrome --- Brewfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Brewfile b/Brewfile index 594d135a..e172072e 100644 --- a/Brewfile +++ b/Brewfile @@ -50,7 +50,7 @@ cask "alfred" cask "appcleaner" cask "docker" cask "dropbox" -cask "google-chrome" +cask "firefox" cask "graphql-playground" cask "imageoptim" cask "iterm2" From 6168a733d08a301469d8f3df847741e0f06df722 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 11 Jul 2019 17:22:20 +0200 Subject: [PATCH 288/532] Add shortcut to search whole project --- vim/.vimrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vim/.vimrc b/vim/.vimrc index 736d8128..f63807e6 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -27,8 +27,6 @@ set hlsearch set ignorecase " Do not reset cursor to start of line when moving around set nostartofline -" Show the (partial) command as it is being typed -set showcmd " More natural splitting of windows set splitbelow set splitright @@ -36,6 +34,8 @@ set splitright set wrap linebreak " Set spell check language to en_us set spelllang=en_us +" Search whole project +nnoremap \ :Rg if has("autocmd") " Strip trailing whitespaces on save From 438f97efbaacc39d6ad725f768b8dbafbb07b342 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 18 Jul 2019 11:54:38 +0200 Subject: [PATCH 289/532] Refer to correct color scheme in README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e01a4d05..3f8ffec9 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ :unicorn: My personal dotfiles -I mainly work with [Go](https://golang.org/), [JavaScript](https://en.wikipedia.org/wiki/JavaScript), [TypeScript](https://www.typescriptlang.org/), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. +I mainly work with [Go](https://golang.org), [Rust](https://www.rust-lang.org), [JavaScript](https://en.wikipedia.org/wiki/JavaScript), [TypeScript](https://www.typescriptlang.org), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. -On macOS, it is recommended to use these dotfiles with [iTerm2](https://www.iterm2.com/) and the [quantum](https://github.com/tyrannicaltoucan/vim-quantum/blob/master/term/iterm/quantum.itermcolors) color scheme. +On macOS, it is recommended to use these dotfiles with [iTerm2](https://www.iterm2.com/) and the [quantum-black](https://github.com/tyrannicaltoucan/vim-quantum/blob/master/term/iterm/quantum-black.itermcolors) color scheme. ## Usage @@ -26,7 +26,7 @@ On macOS, it is recommended to use these dotfiles with [iTerm2](https://www.iter **WARNING: This may install and/or remove software and change your configs!** -## Quick Installation without customization (not recommended) +## Quick Installation without customization (not recommended unless you're the owner of this repo :wink:) 1. Run the following command: From f4966f9c8b0c5cb2905cd8911428cf437c7cfaf1 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 21 Jul 2019 15:49:50 +0200 Subject: [PATCH 290/532] Add vifm and sc-im --- Brewfile | 7 ++++--- bash/.functions | 24 +++++++++--------------- init.sh | 7 +++++++ quantum-black.vifm | 10 ++++++++++ 4 files changed, 30 insertions(+), 18 deletions(-) create mode 100644 quantum-black.vifm diff --git a/Brewfile b/Brewfile index e172072e..57ba97f3 100644 --- a/Brewfile +++ b/Brewfile @@ -3,13 +3,12 @@ tap "buo/cask-upgrade" tap "cloudfoundry/tap" tap "golangci/tap" tap "homebrew/cask" -tap "wata727/tflint" +tap "nickolasburr/pfa" # Languages brew "go" brew "node" brew "python" -brew "ruby" # Tools brew "ansible" @@ -33,13 +32,15 @@ brew "prettier" brew "protobuf" brew "reattach-to-user-namespace" brew "ripgrep" +brew "sc-im" brew "shellcheck" brew "terraform" -brew "wata727/tflint/tflint" +brew "tflint" brew "tmate" brew "tmux" brew "tree" brew "typescript" +brew "vifm" brew "watchman" brew "wget" brew "zsh" diff --git a/bash/.functions b/bash/.functions index 1179eac7..8b25967e 100644 --- a/bash/.functions +++ b/bash/.functions @@ -73,45 +73,38 @@ ide() { # Update dependencies depu() { - # npm - file_count=$(find . -maxdepth 1 -name package-lock.json | wc -l) - if [ "${file_count}" -gt 0 ]; then + if [ -e package-lock.json ]; then printf "Updating npm dependencies for %s...\n\n" "${PWD##*/}" npm update npm outdated fi # Yarn - file_count=$(find . -maxdepth 1 -name yarn.lock | wc -l) - if [ "${file_count}" -gt 0 ]; then + if [ -e yarn.lock ]; then printf "Updating Yarn dependencies for %s...\n\n" "${PWD##*/}" yarn upgrade > /dev/null yarn outdated fi # Go - file_count=$(find . -maxdepth 1 -name go.mod | wc -l) - if [ "${file_count}" -gt 0 ]; then + if [ -e go.mod ]; then printf "Updating Go dependencies for %s...\n\n" "${PWD##*/}" go get -u go mod tidy fi # Rust - file_count=$(find . -maxdepth 1 -name Cargo.toml | wc -l) - if [ "${file_count}" -gt 0 ]; then + if [ -e Cargo.toml ]; then printf "Updating Cargo dependencies for %s...\n\n" "${PWD##*/}" cargo update fi # Git submodules - file_count=$(find . -maxdepth 1 -name .gitmodules | wc -l) - if [ "${file_count}" -gt 0 ]; then + if [ -e .gitmodules ]; then printf "Updating Git submodules for %s...\n\n" "${PWD##*/}" git submodule update --init fi - } # System update @@ -155,7 +148,8 @@ pacu() { sudo apt-get autoclean -y fi ;; - # On macOS, use mas and Homebrew in parallel + + # On macOS, use mas and Homebrew 'Darwin') if [ -x "$(command -v mas)" ]; then printf '\e[1mUpdating App Store apps\e[0m\n' @@ -170,7 +164,7 @@ pacu() { brew cu --all --yes --cleanup brew cleanup --prune 7 fi - if [ -x "$(command -v zprezto-update)" ]; then + if typeset -f zprezto-update > /dev/null; then printf '\e[1mUpdating zprezto\e[0m\n' zprezto-update & processes+=("$!") @@ -212,7 +206,7 @@ pacu() { # Ruby gems if [ -x "$(command -v gem)" ]; then printf '\e[1mUpdating Ruby gems\e[0m\n' - (gem update --force && gem cleanup) & + (gem update --system --force && gem update --force && gem cleanup) & processes+=("$!") fi diff --git a/init.sh b/init.sh index 501841dc..09da48f3 100755 --- a/init.sh +++ b/init.sh @@ -225,6 +225,13 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' ;; esac +# Install custom vifm theme +if [ -x "$(command -v vifm)" ]; then + printf '\e[1mInstalling custom vifm theme\e[0m\n' + ln -f -s ~/dotfiles/quantum-black.vifm ~/.config/vifm/colors/quantum-black.vifm + sed -i '' 's/colorscheme Default/colorscheme quantum-black/' ~/.config/vifm/vifmrc +fi + # Use zsh if [ -x "$(command -v zsh)" ]; then printf '\e[1mChanging your shell to zsh\e[0m\n' diff --git a/quantum-black.vifm b/quantum-black.vifm new file mode 100644 index 00000000..cdf40112 --- /dev/null +++ b/quantum-black.vifm @@ -0,0 +1,10 @@ +highlight clear + +highlight Win cterm=none ctermfg=default ctermbg=none + +highlight TopLine cterm=none ctermfg=default ctermbg=black +highlight StatusLine cterm=bold ctermfg=default ctermbg=black +highlight Border cterm=none ctermfg=default ctermbg=black + +highlight Selected cterm=bold ctermfg=magenta ctermbg=default +highlight CurrLine cterm=bold ctermfg=236 ctermbg=magenta From 40c536b28efc54c7f2675f81549a3c96ef167493 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 21 Jul 2019 19:16:51 +0200 Subject: [PATCH 291/532] Improve Vim plugin handling --- vim/.plugins.vimrc | 22 ++++++++++++++-------- vim/.vimrc | 2 -- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index de65a90f..3c8790b6 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -50,7 +50,7 @@ let g:DirDiffExcludes = ".git,node_modules,vendor,dist,.DS_Store,.*.swp" " Git integration Plug 'tpope/vim-fugitive' -Plug 'junegunn/gv.vim' +Plug 'junegunn/gv.vim', { 'on': 'GV' } " Show Git indicators with line numbers Plug 'airblade/vim-gitgutter' @@ -61,7 +61,7 @@ Plug 'tpope/vim-sleuth' " Edit surrounds Plug 'tpope/vim-surround' -" Repeat plugin commands +" Allow to repeat plugin commands Plug 'tpope/vim-repeat' " Source tree @@ -79,8 +79,8 @@ Plug 'jiangmiao/auto-pairs' " Linting and auto fixing Plug 'w0rp/ale' let g:ale_fixers = {} -let g:ale_fixers['javascript'] = ['prettier'] -let g:ale_fixers['typescript'] = ['prettier','tslint'] +let g:ale_fixers['javascript'] = ['prettier','eslint'] +let g:ale_fixers['typescript'] = ['prettier','eslint'] let g:ale_fixers['json'] = ['prettier'] let g:ale_fixers['html'] = ['prettier'] let g:ale_fixers['vue'] = ['prettier'] @@ -95,10 +95,14 @@ let g:ale_sign_warning = '●' let g:ale_fix_on_save = 1 " Autocompletion -Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } -if has('nvim') && has('python3') - let g:deoplete#enable_at_startup = 1 +if has('nvim') + Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } +else + Plug 'Shougo/deoplete.nvim' + Plug 'roxma/nvim-yarp' + Plug 'roxma/vim-hug-neovim-rpc' endif +let g:deoplete#enable_at_startup = 1 " Snippets Plug 'Shougo/neosnippet.vim' @@ -148,7 +152,9 @@ Plug 'posva/vim-vue', { 'for': 'vue' } " Typescript Plug 'HerringtonDarkholme/yats.vim', { 'for': 'typescript' } -Plug 'mhartington/nvim-typescript', { 'do': './install.sh', 'for': 'typescript' } +if has('nvim') + Plug 'mhartington/nvim-typescript', { 'do': './install.sh', 'for': 'typescript' } +endif " GraphQL Plug 'jparise/vim-graphql', { 'for': 'graphql' } diff --git a/vim/.vimrc b/vim/.vimrc index f63807e6..32658fc0 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -14,8 +14,6 @@ set shortmess=I set termguicolors " Use the OS clipboard by default (on versions compiled with `+clipboard`) set clipboard=unnamed -" Add the g flag to search/replace by default -set gdefault " Change mapleader let mapleader="," " Enable relative line numbers From 1f6ccc02c20a58e7af689156dc7d0a7fe08b91af Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 25 Jul 2019 23:02:18 +0200 Subject: [PATCH 292/532] Use vi bindings in zsh --- prompt_mastertinner_setup | 4 +++- zsh/.zpreztorc | 10 +++++++--- zsh/.zshrc | 3 +++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/prompt_mastertinner_setup b/prompt_mastertinner_setup index e20df2bc..f711716e 100644 --- a/prompt_mastertinner_setup +++ b/prompt_mastertinner_setup @@ -1,5 +1,7 @@ function prompt_mastertinner_precmd { - git-info + if (( $+functions[git-info] )); then + git-info + fi } function prompt_mastertinner_setup { diff --git a/zsh/.zpreztorc b/zsh/.zpreztorc index 248adbb2..bded424c 100644 --- a/zsh/.zpreztorc +++ b/zsh/.zpreztorc @@ -24,12 +24,16 @@ zstyle ':prezto:load' pmodule \ 'prompt' \ 'history' \ 'history-substring-search' \ - 'autosuggestions' + 'autosuggestions' \ + 'editor' + +# Auto load tmux when zsh starts +zstyle ':prezto:module:tmux:auto-start' local 'yes' # Set the prompt theme to load. # Setting it to 'random' loads a random theme. # Auto set to 'off' on dumb terminals. zstyle ':prezto:module:prompt' theme 'mastertinner' -# Auto load tmux when zsh starts -zstyle ':prezto:module:tmux:auto-start' local 'yes' +# Use vi keybindings +zstyle ':prezto:module:editor' key-bindings 'vi' diff --git a/zsh/.zshrc b/zsh/.zshrc index 56da5076..41c4488a 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -6,6 +6,9 @@ fi # Autocompletions for fzf [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh +bindkey '^P' history-beginning-search-backward +bindkey '^N' history-beginning-search-forward + # Load the shell dotfiles, and then some: # * ~/.path can be used to extend `$PATH`. # * ~/.extra can be used for other settings you don’t want to commit. From db3b9bc6d8cd98e35e300729f82360e6f5a2bc0f Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 26 Jul 2019 08:51:55 +0200 Subject: [PATCH 293/532] Disable hard mode in Vim After years, I finally feel ready to do this :tada: --- prompt_mastertinner_setup | 6 +++++- vim/.plugins.vimrc | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/prompt_mastertinner_setup b/prompt_mastertinner_setup index f711716e..1d2d4086 100644 --- a/prompt_mastertinner_setup +++ b/prompt_mastertinner_setup @@ -7,7 +7,7 @@ function prompt_mastertinner_precmd { function prompt_mastertinner_setup { setopt LOCAL_OPTIONS unsetopt XTRACE KSH_ARRAYS - prompt_opts=(cr percent subst) + prompt_opts=(cr percent sp subst) # Load required functions autoload -Uz add-zsh-hook @@ -36,4 +36,8 @@ function prompt_mastertinner_setup { PROMPT='%F{magenta}%c%f${(e)git_info[prompt]} ' } +function prompt_mastertinner_help { + echo 'This prompt is as minimalist as possible and cannot be customized.' +} + prompt_mastertinner_setup "$@" diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 3c8790b6..7bce84c9 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -15,10 +15,6 @@ Plug 'tpope/vim-sensible' Plug 'tyrannicaltoucan/vim-quantum' let g:quantum_black=1 -" Enable hard mode -Plug 'takac/vim-hardtime' -let g:hardtime_default_on = 1 - " Goyo mode for focused writing Plug 'junegunn/goyo.vim', { 'on': 'Goyo' } Plug 'junegunn/limelight.vim', { 'on': 'Goyo' } From 13a12b65fb4d8d8ecdf2841a621cc12118887507 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 29 Jul 2019 22:08:20 +0200 Subject: [PATCH 294/532] Make zprezto prompt managed --- prompt_mastertinner_setup | 3 +++ 1 file changed, 3 insertions(+) diff --git a/prompt_mastertinner_setup b/prompt_mastertinner_setup index 1d2d4086..0ffad67c 100644 --- a/prompt_mastertinner_setup +++ b/prompt_mastertinner_setup @@ -15,6 +15,9 @@ function prompt_mastertinner_setup { # Add hook for calling git-info before each command add-zsh-hook precmd prompt_mastertinner_precmd + # Tell prezto we can manage this prompt + zstyle ':prezto:module:prompt' managed 'yes' + # Set git-info parameters zstyle ':prezto:module:git:info' verbose 'yes' zstyle ':prezto:module:git:info:branch' format '%b' From a1ded5cb87d53992bed7d5814330ab351c6e3070 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 2 Aug 2019 16:44:52 +0200 Subject: [PATCH 295/532] Only work with `--user` python libs --- bash/.functions | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/bash/.functions b/bash/.functions index 8b25967e..1c96ab81 100644 --- a/bash/.functions +++ b/bash/.functions @@ -213,12 +213,7 @@ pacu() { # Python pip if [ -x "$(command -v pip)" ]; then printf '\e[1mUpdating pip packages\e[0m\n' - (pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install --upgrade) & - processes+=("$!") - fi - if [ -x "$(command -v pip3)" ]; then - printf '\e[1mUpdating pip3 packages\e[0m\n' - (pip3 list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip3 install --upgrade) & + (pip list --user --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install --user --upgrade) & processes+=("$!") fi From d7b68e6aa7ce7e49cb3b62999f6cf06b5e2e1e84 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 4 Aug 2019 22:12:00 +0200 Subject: [PATCH 296/532] Use alacritty as main terminal emulator --- Brewfile | 2 +- README.md | 2 -- alacritty/.config/alacritty/alacritty.yml | 43 +++++++++++++++++++++++ bash/.bash_profile | 3 -- bash/.exports | 2 +- zsh/.zshrc | 19 +++++----- 6 files changed, 53 insertions(+), 18 deletions(-) create mode 100644 alacritty/.config/alacritty/alacritty.yml diff --git a/Brewfile b/Brewfile index 57ba97f3..ec3adc14 100644 --- a/Brewfile +++ b/Brewfile @@ -47,6 +47,7 @@ brew "zsh" brew "zsh-completions" # Desktop Applications +cask "alacritty" cask "alfred" cask "appcleaner" cask "docker" @@ -54,7 +55,6 @@ cask "dropbox" cask "firefox" cask "graphql-playground" cask "imageoptim" -cask "iterm2" cask "skype" cask "spotify" cask "virtualbox" diff --git a/README.md b/README.md index 3f8ffec9..bd6c330f 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ I mainly work with [Go](https://golang.org), [Rust](https://www.rust-lang.org), [JavaScript](https://en.wikipedia.org/wiki/JavaScript), [TypeScript](https://www.typescriptlang.org), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. -On macOS, it is recommended to use these dotfiles with [iTerm2](https://www.iterm2.com/) and the [quantum-black](https://github.com/tyrannicaltoucan/vim-quantum/blob/master/term/iterm/quantum-black.itermcolors) color scheme. - ## Usage - `pacu`: Updates and upgrades the whole system (using `Brewfile` on macOS) diff --git a/alacritty/.config/alacritty/alacritty.yml b/alacritty/.config/alacritty/alacritty.yml new file mode 100644 index 00000000..96eb61d7 --- /dev/null +++ b/alacritty/.config/alacritty/alacritty.yml @@ -0,0 +1,43 @@ +window: + padding: + x: 3 + y: 3 + decorations: none + startup_mode: Maximized + +font: + normal: + family: Monaco + size: 13 + offset: + x: 1 + y: 1 + +# The quantum-black color scheme +colors: + primary: + background: "0x212120" + foreground: "0xbbbebf" + normal: + black: "0x464545" + red: "0xd97084" + green: "0x87bb7c" + yellow: "0xd5b874" + blue: "0x6face4" + magenta: "0xa389dd" + cyan: "0x68c5cd" + white: "0xbbbebf" + bright: + black: "0x696b6b" + red: "0xed8499" + green: "0x97d589" + yellow: "0xe9cb87" + blue: "0x87bff5" + magenta: "0xb9a0ee" + cyan: "0x7bdbe4" + white: "0xd0d2d2" + +key_bindings: + - { key: Key0, mods: Command, action: ResetFontSize } + - { key: Add, mods: Command, action: IncreaseFontSize } + - { key: Minus, mods: Command, action: DecreaseFontSize } diff --git a/bash/.bash_profile b/bash/.bash_profile index 5057b021..73b0d739 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -23,9 +23,6 @@ fi; # Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards [ -e "$HOME/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | tr ' ' '\n')" scp sftp ssh; -# Autocompletions for fzf -[ -f ~/.fzf.bash ] && . ~/.fzf.bash - # Load the shell dotfiles, and then some: # * ~/.path can be used to extend `$PATH` # * ~/.extra can be used for other settings you don’t want to commit diff --git a/bash/.exports b/bash/.exports index 40b78c5b..d56d71ae 100644 --- a/bash/.exports +++ b/bash/.exports @@ -1,6 +1,6 @@ # Prefer US English and use UTF-8 -export LANG='en_US.UTF-8'; export LC_ALL='en_US.UTF-8'; +export LANG='en_US.UTF-8'; # Make vim the default editor export EDITOR='vim'; diff --git a/zsh/.zshrc b/zsh/.zshrc index 41c4488a..99fb085f 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -1,17 +1,14 @@ -# Source Prezto. -if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then - source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" -fi - -# Autocompletions for fzf -[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh - -bindkey '^P' history-beginning-search-backward -bindkey '^N' history-beginning-search-forward - # Load the shell dotfiles, and then some: # * ~/.path can be used to extend `$PATH`. # * ~/.extra can be used for other settings you don’t want to commit. for file in ~/.{path,exports,aliases,functions,extra}; do [ -r "$file" ] && [ -f "$file" ] && source "$file" done + +# Source Prezto +if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then + source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" +fi + +bindkey '^P' history-beginning-search-backward +bindkey '^N' history-beginning-search-forward From d733ba5b706f37edd049d7ff590eaaf4337facdf Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 4 Aug 2019 22:12:00 +0200 Subject: [PATCH 297/532] Use alacritty as main terminal emulator --- Brewfile | 2 +- README.md | 2 - alacritty/.config/alacritty/alacritty.yml | 43 + bash/.bash_profile | 3 - bash/.exports | 2 +- gopass/.config/gopass/config.yml | 20 + gopass/.config/gopass/gopass_wrapper.sh | 15 + vifm/.config/vifm/colors/quantum-black.vifm | 1 + vifm/.config/vifm/scripts/README | 6 + vifm/.config/vifm/vifm-help.txt | 6213 +++++++++++++++++++ vifm/.config/vifm/vifminfo | 7 + vifm/.config/vifm/vifmrc | 1 + zsh/.zshrc | 19 +- 13 files changed, 6316 insertions(+), 18 deletions(-) create mode 100644 alacritty/.config/alacritty/alacritty.yml create mode 100644 gopass/.config/gopass/config.yml create mode 100755 gopass/.config/gopass/gopass_wrapper.sh create mode 120000 vifm/.config/vifm/colors/quantum-black.vifm create mode 100644 vifm/.config/vifm/scripts/README create mode 100644 vifm/.config/vifm/vifm-help.txt create mode 100644 vifm/.config/vifm/vifminfo create mode 100644 vifm/.config/vifm/vifmrc diff --git a/Brewfile b/Brewfile index 57ba97f3..ec3adc14 100644 --- a/Brewfile +++ b/Brewfile @@ -47,6 +47,7 @@ brew "zsh" brew "zsh-completions" # Desktop Applications +cask "alacritty" cask "alfred" cask "appcleaner" cask "docker" @@ -54,7 +55,6 @@ cask "dropbox" cask "firefox" cask "graphql-playground" cask "imageoptim" -cask "iterm2" cask "skype" cask "spotify" cask "virtualbox" diff --git a/README.md b/README.md index 3f8ffec9..bd6c330f 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ I mainly work with [Go](https://golang.org), [Rust](https://www.rust-lang.org), [JavaScript](https://en.wikipedia.org/wiki/JavaScript), [TypeScript](https://www.typescriptlang.org), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. -On macOS, it is recommended to use these dotfiles with [iTerm2](https://www.iterm2.com/) and the [quantum-black](https://github.com/tyrannicaltoucan/vim-quantum/blob/master/term/iterm/quantum-black.itermcolors) color scheme. - ## Usage - `pacu`: Updates and upgrades the whole system (using `Brewfile` on macOS) diff --git a/alacritty/.config/alacritty/alacritty.yml b/alacritty/.config/alacritty/alacritty.yml new file mode 100644 index 00000000..f2642788 --- /dev/null +++ b/alacritty/.config/alacritty/alacritty.yml @@ -0,0 +1,43 @@ +window: + padding: + x: 3 + y: 3 + decorations: none + startup_mode: Maximized + +font: + normal: + family: Monaco + size: 12 + offset: + x: 1 + y: 1 + +# The quantum-black color scheme +colors: + primary: + background: "0x212120" + foreground: "0xbbbebf" + normal: + black: "0x464545" + red: "0xd97084" + green: "0x87bb7c" + yellow: "0xd5b874" + blue: "0x6face4" + magenta: "0xa389dd" + cyan: "0x68c5cd" + white: "0xbbbebf" + bright: + black: "0x696b6b" + red: "0xed8499" + green: "0x97d589" + yellow: "0xe9cb87" + blue: "0x87bff5" + magenta: "0xb9a0ee" + cyan: "0x7bdbe4" + white: "0xd0d2d2" + +key_bindings: + - { key: Key0, mods: Command, action: ResetFontSize } + - { key: Add, mods: Command, action: IncreaseFontSize } + - { key: Minus, mods: Command, action: DecreaseFontSize } diff --git a/bash/.bash_profile b/bash/.bash_profile index 5057b021..73b0d739 100644 --- a/bash/.bash_profile +++ b/bash/.bash_profile @@ -23,9 +23,6 @@ fi; # Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards [ -e "$HOME/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | tr ' ' '\n')" scp sftp ssh; -# Autocompletions for fzf -[ -f ~/.fzf.bash ] && . ~/.fzf.bash - # Load the shell dotfiles, and then some: # * ~/.path can be used to extend `$PATH` # * ~/.extra can be used for other settings you don’t want to commit diff --git a/bash/.exports b/bash/.exports index 40b78c5b..d56d71ae 100644 --- a/bash/.exports +++ b/bash/.exports @@ -1,6 +1,6 @@ # Prefer US English and use UTF-8 -export LANG='en_US.UTF-8'; export LC_ALL='en_US.UTF-8'; +export LANG='en_US.UTF-8'; # Make vim the default editor export EDITOR='vim'; diff --git a/gopass/.config/gopass/config.yml b/gopass/.config/gopass/config.yml new file mode 100644 index 00000000..8922279e --- /dev/null +++ b/gopass/.config/gopass/config.yml @@ -0,0 +1,20 @@ +root: + askformore: false + autoclip: true + autoprint: false + autoimport: true + autosync: true + check_recipient_hash: false + cliptimeout: 45 + concurrency: 1 + editrecipients: false + nocolor: false + noconfirm: true + nopager: false + notifications: false + path: gpgcli-gitcli-fs+file:///Users/tobi/.password-store + recipient_hash: + .gpg-id: 3078443836354333433239424536304446350aa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 + safecontent: true + usesymbols: true +mounts: {} diff --git a/gopass/.config/gopass/gopass_wrapper.sh b/gopass/.config/gopass/gopass_wrapper.sh new file mode 100755 index 00000000..9d8b0752 --- /dev/null +++ b/gopass/.config/gopass/gopass_wrapper.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +if [ -f ~/.gpg-agent-info ] && [ -n "$(pgrep gpg-agent)" ]; then + source ~/.gpg-agent-info + export GPG_AGENT_INFO +else + eval $(gpg-agent --daemon) +fi + +export PATH="$PATH:/usr/local/bin" # required on MacOS/brew +export GPG_TTY="$(tty)" + +/usr/local/bin/gopass jsonapi listen + +exit $? diff --git a/vifm/.config/vifm/colors/quantum-black.vifm b/vifm/.config/vifm/colors/quantum-black.vifm new file mode 120000 index 00000000..c55fc603 --- /dev/null +++ b/vifm/.config/vifm/colors/quantum-black.vifm @@ -0,0 +1 @@ +/Users/tobi/dotfiles/quantum-black.vifm \ No newline at end of file diff --git a/vifm/.config/vifm/scripts/README b/vifm/.config/vifm/scripts/README new file mode 100644 index 00000000..76949522 --- /dev/null +++ b/vifm/.config/vifm/scripts/README @@ -0,0 +1,6 @@ +This directory is dedicated for user-supplied scripts/executables. +vifm modifies its PATH environment variable to let user run those +scripts without specifying full path. All subdirectories are added +as well. File in a subdirectory overrules file with the same name +in parent directories. Restart might be needed to recognize files +in newly created or renamed subdirectories. \ No newline at end of file diff --git a/vifm/.config/vifm/vifm-help.txt b/vifm/.config/vifm/vifm-help.txt new file mode 100644 index 00000000..5bb61b4e --- /dev/null +++ b/vifm/.config/vifm/vifm-help.txt @@ -0,0 +1,6213 @@ +VIFM(1) VIFM(1) + + + +NAME + vifm - vi file manager + +SYNOPSIS + vifm [OPTION]... + vifm [OPTION]... path + vifm [OPTION]... path path + +DESCRIPTION + Vifm is an ncurses based file manager with vi like keybindings. If you + use vi, vifm gives you complete keyboard control over your files with- + out having to learn a new set of commands. + +OPTIONS + vifm starts in the current directory unless it is given a different + directory on the command line or 'vifminfo' option includes "savedirs" + (in which case last visited directories are used as defaults). + + - Read list of files from standard input stream and compose custom + view out of them (see "Custom views" section). Current working + directory is used as a base for relative paths. + + Starts Vifm in the specified path. + + + Starts Vifm in the specified paths. + + Specifying two directories triggers split view even when vifm was in + single-view mode on finishing previous session. To suppress this be- + haviour :only command can be put in the vifmrc file. + + When only one path argument is found on command-line, the left/top pane + is automatically set as the current view. + + Paths to files are also allowed in case you want vifm to start with + some archive opened. + + --select + Open parent directory of the given path and select specified + file in it. + + -f Makes vifm instead of opening files write selection to + $VIFM/vimfiles and quit. + + --choose-files |- + Sets output file to write selection into on exit instead of + opening files. "-" means standard output. Use empty value to + disable it. + + --choose-dir |- + Sets output file to write last visited directory into on exit. + "-" means standard output. Use empty value to disable it. + + --delimiter + Sets separator for list of file paths written out by vifm. + Empty value means null character. Default is new line charac- + ter. + + --on-choose + Sets command to be executed on selected files instead of opening + them. The command may use any of macros described in "Command + macros" section below. The command is executed once for whole + selection. + + --logging[=] + Log some operational details $VIFM/log. If the optional startup + log path is specified and permissions allow to open it for writ- + ing, then logging of early initialization (before value of $VIFM + is determined) is put there. + + --server-list + List available server names and exit. + + --server-name + Name of target or this instance (sequential numbers are appended + on name conflict). + + --remote + Sends the rest of the command line to another instance of vifm, + --server-name is treated just like any other argument and should + precede --remote on the command line. When there is no server, + quits silently. There is no limit on how many arguments can be + processed. One can combine --remote with -c or + to execute commands in already running instance of vifm. + See also "Client-Server" section below. + + --remote-expr + passes expression to vifm server and prints result. See also + "Client-Server" section below. + + -c or + + Run command-line mode on startup. Commands in such + arguments are executed in the order they appear in command line. + Commands with spaces or special symbols must be enclosed in dou- + ble or single quotes or all special symbols should be escaped + (the exact syntax strongly depends on shell). "+" argument is + equivalent to "$" and thus picks last item of of the view. + + --help, -h + Show a brief command summary and exit vifm. + + --version, -v + Show version information and quit. + + --no-configs + Skip reading vifmrc and vifminfo. + + + See "Startup" section below for the explanations on $VIFM. + +General keys + Ctrl-C or Escape + cancel most operations (see "Cancellation" section below), clear + all selected files. + + Ctrl-L clear and redraw the screen. + +Basic Movement + The basic vi key bindings are used to move through the files and pop-up + windows. + + k, gk, or Ctrl-P + move cursor up one line. + + j, gj or Ctrl-N + move cursor down one line. + + h when 'lsview' is off move up one directory (moves to parent + directory node in tree view), otherwise move left one file. + + l when 'lsview' is off move into a directory or launches a file, + otherwise move right one file. + + gg move to the first line of the file list. + + G move to the last line in the file list. + + gh go up one directory regardless of view representation (regular, + ls-like). Also can be used to leave custom views including tree + view. + + gl or Enter + enter directory or launch a file. + + H move to the first file in the window. + + M move to the file in the middle of the window. + + L move to the last file in the window. + + Ctrl-F or Page Down + move forward one page. + + Ctrl-B or Page Up + move back one page. + + Ctrl-D jump back one half page. + + Ctrl-U jump forward one half page. + + n% move to the file that is n percent from the top of the list (for + example 25%). + + 0 or ^ move cursor to the first column. See 'lsview' option descrip- + tion. + + $ move cursor to the last column. See 'lsview' option descrip- + tion. + + Space switch file lists. + + gt switch to the next tab (wrapping around). + + {n}gt switch to the tab number {n} (wrapping around). + + gT switch to the previous tab (wrapping around). + + {n}gT switch to {n}-th previous tab. + +Movement with Count + Most movement commands also accept a count, 12j would move down 12 + files. + + [count]% + move to percent of the file list. + + [count]j + move down [count] files. + + [count]k + move up [count] files. + + [count]G or [count]gg + move to list position [count]. + + [count]h + go up [count] directories. + +Scrolling panes + zt redraw pane with file in top of list. + + zz redraw pane with file in center of list. + + zb redraw pane with file in bottom of list. + + Ctrl-E scroll pane one line down. + + Ctrl-Y scroll pane one line up. + +Pane manipulation + Second character can be entered with or without Control key. + + Ctrl-W H + move the pane to the far left. + + Ctrl-W J + move the pane to the very bottom. + + Ctrl-W K + move the pane to the very top. + + Ctrl-W L + move the pane to the far right. + + + Ctrl-W h + switch to the left pane. + + Ctrl-W j + switch to the pane below. + + Ctrl-W k + switch to the pane above. + + Ctrl-W l + switch to the right pane. + + + Ctrl-W b + switch to bottom-right window. + + Ctrl-W t + switch to top-left window. + + + Ctrl-W p + switch to previous window. + + Ctrl-W w + switch to other pane. + + + Ctrl-W o + leave only one pane. + + Ctrl-W s + split window horizontally. + + Ctrl-W v + split window vertically. + + + Ctrl-W x + exchange panes. + + Ctrl-W z + quit preview pane or view modes. + + + Ctrl-W - + decrease size of the view by count. + + Ctrl-W + + increase size of the view by count. + + Ctrl-W < + decrease size of the view by count. + + Ctrl-W > + increase size of the view by count. + + + Ctrl-W | + set current view size to count. + + Ctrl-W _ + set current view size to count. + + Ctrl-W = + make size of two views equal. + + For Ctrl-W +, Ctrl-W -, Ctrl-W <, Ctrl-W >, Ctrl-W | and Ctrl-W _ com- + mands count can be given before and/or after Ctrl-W. The resulting + count is a multiplication of those two. So "2 Ctrl-W 2 -" decreases + window size by 4 lines or columns. + + Ctrl-W | and Ctrl-W _ maximise current view by default. + +Marks + Marks are set the same way as they are in vi. + + You can use these characters for marks [a-z][A-Z][0-9]. + + m[a-z][A-Z][0-9] + set a mark for the file at the current cursor position. + + '[a-z][A-Z][0-9] + navigate to the file set for the mark. + + + There are also several special marks that can't be set manually: + + - ' (single quote) - previously visited directory of the view, thus + hitting '' allows switching between two last locations + + - < - the first file of the last visually selected block + + - > - the last file of the last visually selected block + +Searching + /regular expression pattern + search for files matching regular expression in forward direc- + tion and advance cursor to next match. + + / perform forward search with top item of search pattern history. + + ?regular expression pattern + search for files matching regular expression in backward direc- + tion and advance cursor to previous match. + + ? perform backward search with top item of search pattern history. + + Trailing slash for directories is taken into account, so /\/ searches + for directories and symbolic links to directories. At the moment // + works too, but this can change in the future, so consider escaping the + slash if not typing pattern by hand. + + Matches are automatically selected if 'hlsearch' is set. Enabling + 'incsearch' makes search interactive. 'ignorecase' and 'smartcase' + options affect case sensitivity of search queries. + + + [count]n + go to the next file matching last search pattern. Takes last + search direction into account. + + [count]N + go to the previous file matching last search pattern. Takes + last search direction into account. + + If 'hlsearch' option is set, hitting n/N to perform search and go to + the first matching item resets current selection in normal mode. It is + not the case if search was already performed on files in the directory, + thus selection is not reset after clearing selection with escape key + and hitting n/N key again. + + Note: vifm uses extended regular expressions for / and ?. + + + [count]f[character] + search forward for file with [character] as first character in + name. Search wraps around the end of the list. + + [count]F[character] + search backward for file with [character] as first character in + name. Search wraps around the end of the list. + + [count]; + find the next match of f or F. + + [count], + find the previous match of f or F. + + Note: f, F, ; and , wrap around list beginning and end when they are + used alone and they don't wrap when they are used as selectors. + +File Filters + There are three basic file filters: + + - dot files filter (does not affect "." and ".." special directories, + whose appearance is controlled by the 'dotdirs' option), see 'dot- + files' option; + + - permanent filter; + + - local filter (see description of the "=" normal mode command). + + Permanent filter essentially allows defining a group of files names + which are not desirable to be seen by default, like temporary or backup + files, which might be created alongside normal ones. Just like you + don't usually need to see hidden dot files (files starting with a dot). + Local filter on the other hand is for temporary immediate filtering of + file list at hand, to get rid of uninterested files in the view or to + make it possible to use % range in a :command. + + For the purposes of more deterministic editing permanent filter is + split into two parts: + + - one edited explicitly via :filter command; + + - another one which is edited implicitly via zf shortcut. + + Files are tested against both parts and a match counts if at least one + of the parts matched. + + + Each file list has its own copy of each filter. + + Filtered files are not checked in / search or :commands. + + Files and directories are filtered separately. This is done by append- + ing a slash to a directory name before testing whether it matches the + filter. Examples: + + + " filter directories which names end with '.files' + :filter /^.*\.files\/$/ + + " filter files which names end with '.d' + :filter {*.d} + + " filter files and directories which names end with '.o' + :filter /^.*\.o\/?$/ + + Note: vifm uses extended regular expressions. + + The basic vim folding key bindings are used for managing filters. + + + za toggle visibility of dot files. + + zo show dot files. + + zm hide dot files. + + zf add selected files to permanent filter. + + zO reset permanent filter. + + zR save and reset all filters. + + zr clear local filter. + + zM restore all filters (undoes last zR). + + zd exclude selection or current file from a custom view. Does + nothing for regular view. For tree view excluding directory + excludes that sub-tree. For compare views zd hides group of + adjacent identical files, count can be specified as 1 to exclude + just single file or selected items instead. Files excluded this + way are not counted as filtered out and can't be returned unless + view is reloaded. + + =regular expression pattern + filter out files that don't match regular expression. Whether + view is updated as regular expression is changed depends on the + value of the 'incsearch' option. This kind of filter is auto- + matically reset when directory is changed. + +Other Normal Mode Keys + [count]: + enter command line mode. [count] generates range. + + q: open external editor to prompt for command-line command. See + "Command line editing" section for details. + + q/ open external editor to prompt for search pattern to be searched + in forward direction. See "Command line editing" section for + details. + + q? open external editor to prompt for search pattern to be searched + in backward direction. See "Command line editing" section for + details. + + q= open external editor to prompt for filter pattern. See "Command + line editing" section for details. Unlike other q{x} commands + this one doesn't work in Visual mode. + + [count]!! and [count]! + enter command line mode with entered ! command. [count] modi- + fies range. + + Ctrl-O go backwards through directory history of current view. Nonex- + istent directories are automatically skipped. + + Ctrl-I if 'cpoptions' contains "t" flag, and switch active + pane just like does, otherwise it goes forward through + directory history of current view. Nonexistent directories are + automatically skipped. + + Ctrl-G create a window showing detailed information about the current + file. + + Shift-Tab + enters view mode (works only after activating view pane with + :view command). + + ga calculate directory size. Uses cached directory sizes when pos- + sible for better performance. As a special case calculating + size of ".." entry results in calculation of size of current + directory. + + gA like ga, but force update. Ignores old values of directory + sizes. + + If file under cursor is selected, each selected item is processed, oth- + erwise only current file is updated. + + gf find link destination (like l with 'followlinks' off, but also + finds directories). + + gr only for MS-Windows + same as l key, but tries to run program with administrative + privileges. + + av go to visual mode into selection amending state preserving cur- + rent selection. + + gv go to visual mode restoring last selection. + + [reg]gs + when no register is specified, restore last t selection (similar + to what gv does for visual mode selection). If register is + present, then all files listed in that register and which are + visible in current view are selected. + + gu + make names of selected files lowercase. + + [count]guu and [count]gugu + make names of [count] files starting from the current one lower- + case. Without [count] only current file is affected. + + gU + make names of selected files uppercase. + + [count]gUU and [count]gUgU + make names of [count] files starting from the current one upper- + case. Without [count] only current file is affected. + + e explore file in the current pane. + + i handle file (even if it's an executable and 'runexec' option is + set). + + cw change word is used to rename a file or files. + + cW change WORD is used to change only name of file (without exten- + sion). + + cl change link target. + + co only for *nix + change file owner. + + cg only for *nix + change file group. + + [count]cp + change file attributes (permission on *nix and properties on + Windows). If [count] is specified, it's treated as numerical + argument for non-recursive `chmod` command (of the form + [0-7]{3,4}). + + [count]C + clone file [count] times. + + [count]dd or d[count]selector + move selected file or files to trash directory (if 'trash' + option is set, otherwise delete). See "Trash directory" section + below. + + [count]DD or D[count]selector + like dd and d, but omitting trash directory (even when + 'trash' option is set). + + Y, [count]yy or y[count]selector + yank selected files. + + p copy yanked files to the current directory or move the files to + the current directory if they were deleted with dd or :d[elete] + or if the files were yanked from trash directory. See "Trash + directory" section below. + + P move the last yanked files. The advantage of using P instead of + d followed by p is that P moves files only once. This isn't + important in case you're moving files in the same file system + where your home directory is, but using P to move files on some + other file system (or file systems, in case you want to move + files from fs1 to fs2 and your home is on fs3) can save your + time. + + al put symbolic links with absolute paths. + + rl put symbolic links with relative paths. + + t select or unselect (tag) the current file. + + u undo last change. + + Ctrl-R redo last change. + + dp in compare view of "ofboth grouppaths" kind, makes corresponding + entry of the other pane equal to the current one. The semantics + is as follows: + - nothing done for identical entries + - if file is missing in current view, its pair gets removed + - if file is missing or differs in other view, it's replaced + - file pairs are defined by matching relative paths + File removal obeys 'trash' option. When the option is enabled, + the operation can be undone/redone (although results won't be + visible automatically). + Unlike in Vim, this operation is performed on a single line + rather than a set of adjacent changes. + + do same as dp, but applies changes in the opposite direction. + + v or V enter visual mode, clears current selection. + + [count]Ctrl-A + increment first number in file name by [count] (1 by default). + + [count]Ctrl-X + decrement first number in file name by [count] (1 by default). + + ZQ same as :quit!. + + ZZ same as :quit. + + . repeat last command-line command (not normal mode command) of + this session (does nothing right after startup or :restart com- + mand). The command doesn't depend on command-line history and + can be used with completely disabled history. + + ( go to previous group. Groups are defined by primary sorting + key. For name and iname members of each group have same first + letter, for all other sorting keys vifm uses size, uid, ... + + ) go to next group. See ( key description above. + + { speeds up navigation to closest previous entry of the opposite + type by moving to the first file backwards when cursor is on a + directory and to the first directory backwards when cursor is on + a file. This is essentially a special case of ( that is locked + on "dirs". + + } same as {, but in forward direction. + + [c go to previous mismatched entry in directory comparison view or + do nothing. + + ]c go to next mismatched entry in directory comparison view or do + nothing. + + [d go to previous directory entry or do nothing. + + ]d go to next directory entry or do nothing. + + [r same as :siblprev. + + ]r same as :siblnext. + + [R same as :siblprev!. + + ]R same as :siblnext!. + + [s go to previous selected entry or do nothing. + + ]s go to next selected entry or do nothing. + + [z go to first sibling of current entry. + + ]z go to last sibling of current entry. + + zj go to next directory sibling of current entry or do nothing. + + zk go to previous directory sibling of current entry or do nothing. + +Using Count + You can use count with commands like yy. + + [count]yy + yank count files starting from current cursor position downward. + + Or you can use count with motions passed to y, d or D. + + d[count]j + delete (count + 1) files starting from current cursor position + upward. + +Registers + vifm supports multiple registers for temporary storing list of yanked + or deleted files. + + Registers should be specified by hitting double quote key followed by a + register name. Count is specified after register name. By default + commands use unnamed register, which has double quote as its name. + + Though all commands accept registers, most of commands ignores them + (for example H or Ctrl-U). Other commands can fill register or append + new files to it. + + Presently vifm supports ", _, a-z and A-Z characters as register names. + + As mentioned above " is unnamed register and has special meaning of the + default register. Every time when you use named registers (a-z and A- + Z) unnamed register is updated to contain same list of files as the + last used register. + + _ is black hole register. It can be used for writing, but its list is + always empty. + + Registers with names from a to z and from A to Z are named ones. Low- + ercase registers are cleared before adding new files, while uppercase + aren't and should be used to append new files to the existing file list + of appropriate lowercase register (A for a, B for b, ...). + + Registers can be changed on :empty command if they contain files under + trash directory (see "Trash directory" section below). + + Registers do not contain one file more than once. + + Example: + + "a2yy + + puts names of two files to register a (and to the unnamed register), + + "Ad + + removes one file and append its name to register a (and to the unnamed + register), + + p or "ap or "Ap + + inserts previously yanked and deleted files into current directory. + +Selectors + y, d, D, !, gu and gU commands accept selectors. You can combine them + with any of selectors below to quickly remove or yank several files. + + Most of selectors are like vi motions: j, k, gg, G, H, L, M, %, f, F, + ;, comma, ', ^, 0 and $. But there are some additional ones. + + a all files in current view. + + s selected files. + + S all files except selected. + + Examples: + + - dj - delete file under cursor and one below; + + - d2j - delete file under cursor and two below; + + - y6gg - yank all files from cursor position to 6th file in the list. + + When you pass a count to whole command and its selector they are multi- + plied. So: + + - 2d2j - delete file under cursor and four below; + + - 2dj - delete file under cursor and two below; + + - 2y6gg - yank all files from cursor position to 12th file in the + list. + +Visual Mode + Visual mode has to generic operating submodes: + + - plain selection as it is in Vim; + + - selection editing submode. + + Both modes select files in range from cursor position at which visual + mode was entered to current cursor position (let's call it "selection + region"). Each of two borders can be adjusted by swapping them via "o" + or "O" keys and updating cursor position with regular cursor motion + keys. Obviously, once initial cursor position is altered this way, + real start position becomes unavailable. + + Plain Vim-like visual mode starts with cleared selection, which is not + restored on rejecting selection ("Escape", "Ctrl-C", "v", "V"). Con- + trary to it, selection editing doesn't clear previously selected files + and restores them after reject. Accepting selection by performing an + operation on selected items (e.g. yanking them via "y") moves cursor to + the top of current selection region (not to the top most selected file + of the view). + + In turn, selection editing supports three types of editing (look at + statusbar to know which one is currently active): + + - append - amend selection by selecting elements in selection region; + + - remove - amend selection by deselecting elements in selection + region; + + - invert - amend selection by inverting selection of elements in + selection region. + + No matter how you activate selection editing it starts in "append". + One can switch type of operation (in the order given above) via "Ctrl- + G" key. + + Almost all normal mode keys work in visual mode, but instead of accept- + ing selectors they operate on selected items. + + Enter save selection and go back to normal mode not moving cursor. + + av leave visual mode if in amending mode (restores previous selec- + tion), otherwise switch to amending selection mode. + + gv restore previous visual selection. + + v, V, Ctrl-C or Escape + leave visual mode if not in amending mode, otherwise switch to + normal visual selection. + + Ctrl-G switch type of amending by round robin scheme: append -> remove + -> invert. + + : enter command line mode. Selection is cleared on leaving the + mode. + + o switch active selection bound. + + O switch active selection bound. + + gu, u make names of selected files lowercase. + + gU, U make names of selected files uppercase. + +View Mode + This mode tries to imitate the less program. List of builtin shortcuts + can be found below. Shortcuts can be customized using :qmap, :qnoremap + and :qunmap command-line commands. + + Shift-Tab, Tab, q, Q, ZZ + return to normal mode. + + [count]e, [count]Ctrl-E, [count]j, [count]Ctrl-N, [count]Enter + scroll forward one line (or [count] lines). + + [count]y, [count]Ctrl-Y, [count]k, [count]Ctrl-K, [count]Ctrl-P + scroll backward one line (or [count] lines). + + [count]f, [count]Ctrl-F, [count]Ctrl-V, [count]Space + scroll forward one window (or [count] lines). + + [count]b, [count]Ctrl-B, [count]Alt-V + scroll backward one window (or [count] lines). + + [count]z + scroll forward one window (and set window to [count]). + + [count]w + scroll backward one window (and set window to [count]). + + [count]Alt-Space + scroll forward one window, but don't stop at end-of-file. + + [count]d, [count]Ctrl-D + scroll forward one half-window (and set half-window to [count]). + + [count]u, [count]Ctrl-U + scroll backward one half-window (and set half-window to + [count]). + + r, Ctrl-R, Ctrl-L + repaint screen. + + R reload view preserving scroll position. + + F toggle automatic forwarding. Roughly equivalent to periodic + file reload and scrolling to the bottom. The behaviour is simi- + lar to `tail -F` or F key in less. + + [count]/pattern + search forward for ([count]-th) matching line. + + [count]?pattern + search backward for ([count]-th) matching line. + + [count]n + repeat previous search (for [count]-th occurrence). + + [count]N + repeat previous search in reverse direction (for [count]-th + occurrence). + + [count]g, [count]<, [count]Alt-< + scroll to the first line of the file (or line [count]). + + [count]G, [count]>, [count]Alt-> + scroll to the last line of the file (or line [count]). + + [count]p, [count]% + scroll to the beginning of the file (or N percent into file). + + v invoke an editor to edit the current file being viewed. The + command for editing is taken from the 'vicmd'/'vixcmd' option + value and extended with middle line number prepended by a plus + sign and name of the current file. + + All "Ctrl-W x" keys work the same was as in Normal mode. Active mode + is automatically changed on navigating among windows. When less-like + mode activated on file preview is left using one by "Ctrl-W x" keys, + its state is stored until another file is displayed using preview (it's + possible to leave the mode, hide preview pane, do something else, then + get back to the file and show preview pane again with previously stored + state in it). + +Command line Mode + These keys are available in all submodes of the command line mode: com- + mand, search, prompt and filtering. + + Down, Up, Left, Right, Home, End and Delete are extended keys and they + are not available if vifm is compiled with --disable-extended-keys + option. + + Esc, Ctrl-C + leave command line mode, cancels input. Cancelled input is + saved into appropriate history and can be recalled later. + + Ctrl-M, Enter + execute command and leave command line mode. + + Ctrl-I, Tab + complete command or its argument. + + Shift-Tab + complete in reverse order. + + Ctrl-_ stop completion and return original input. + + Ctrl-B, Left + move cursor to the left. + + Ctrl-F, Right + move cursor to the right. + + Ctrl-A, Home + go to line beginning. + + Ctrl-E, End + go to line end. + + Alt-B go to the beginning of previous word. + + Alt-F go to the end of next word. + + Ctrl-U remove characters from cursor position till the beginning of + line. + + Ctrl-K remove characters from cursor position till the end of line. + + Ctrl-H, Backspace + remove character before the cursor. + + Ctrl-D, Delete + remove character under the cursor. + + Ctrl-W remove characters from cursor position till the beginning of + previous word. + + Alt-D remove characters from cursor position till the beginning of + next word. + + Ctrl-T swap the order of current and previous character and move cursor + forward or, if cursor past the end of line, swap the order of + two last characters in the line. + + Alt-. insert last part of previous command to current cursor position. + Each next call will insert last part of older command. + + Ctrl-G edit command-line content in external editor. See "Command line + editing" section for details. + + Ctrl-N recall more recent command-line from history. + + Ctrl-P recall older command-line from history. + + Up recall more recent command-line from history, that begins as the + current command-line. + + Down recall older command-line from history, that begins as the cur- + rent command-line. + + Ctrl-] trigger abbreviation expansion. + +Pasting special values + The shortcuts listed below insert specified values into current cursor + position. Last key of every shortcut references value that it inserts: + - c - [c]urrent file + - d - [d]irectory path + - e - [e]xtension of a file name + - r - [r]oot part of a file name + - t - [t]ail part of directory path + + - a - [a]utomatic filter + - m - [m]anual filter + - = - local filter, which is bound to "=" in normal mode + + Values related to filelist in current pane are available through Ctrl-X + prefix, while values from the other pane have doubled Ctrl-X key as + their prefix (doubled Ctrl-X is presumably easier to type than upper- + case letters; it's still easy to remap the keys to correspond to names + of similar macros). + + Ctrl-X c + name of the current file of the active pane. + + Ctrl-X d + path to the current directory of the active pane. + + Ctrl-X e + extension of the current file of the active pane. + + Ctrl-X r + name root of current file of the active pane. + + Ctrl-X t + the last component of path to the current directory of the + active pane. + + Ctrl-X Ctrl-X c + name of the current file of the inactive pane. + + Ctrl-X Ctrl-X d + path to the current directory of the inactive pane. + + Ctrl-X Ctrl-X e + extension of the current file of the inactive pane. + + Ctrl-X Ctrl-X r + name root of current file of the inactive pane. + + Ctrl-X Ctrl-X t + the last component of path to the current directory of the inac- + tive pane. + + + Ctrl-X a + value of implicit permanent filter (old name "automatic") of the + active pane. + + Ctrl-X m + value of explicit permanent filter (old name "manual") of the + active pane. + + Ctrl-X = + value of local filter of the active pane. + + + Ctrl-X / + last pattern from search history. + +Command line editing + vifm provides a facility to edit several kinds of data, that is usually + edited in command-line mode, in external editor (using command speci- + fied by 'vicmd' or 'vixcmd' option). This has at least two advantages + over built-in command-line mode: + - one can use full power of Vim to edit text; + - finding and reusing history entries becomes possible. + + The facility is supported by four input submodes of the command-line: + - command; + - forward search; + - backward search; + - file rename (see description of cw and cW normal mode keys). + + Editing command-line using external editor is activated by the Ctrl-G + shortcut. It's also possible to do almost the same from Normal and + Visual modes using q:, q/ and q? commands. + + Temporary file created for the purpose of editing the line has the fol- + lowing structure: + + 1. First line, which is either empty or contains text already entered + in command-line. + + 2. 2nd and all other lines with history items starting with the most + recent one. Altering this lines in any way won't change history + items stored by vifm. + + After editing application is finished the first line of the file is + taken as the result of operation, when the application returns zero + exit code. If the application returns an error (see :cquit command in + Vim), all the edits made to the file are ignored, but the initial value + of the first line is saved in appropriate history. + +More Mode + This is the mode that appears when status bar content is so big that it + doesn't fit on the screen. One can identify the mode by "-- More --" + message at the bottom. + + The following keys are handled in this mode: + + + Enter, Ctrl-J, j or Down + scroll one line down. + + Backspace, k or Up + scroll one line up. + + + d scroll one page (half of a screen) down. + + u scroll one page (half of a screen) up. + + + Space, f or PageDown + scroll down a screen. + + b or PageUp + scroll up a screen. + + + G scroll to the bottom. + + g scroll to the top. + + + q, Escape or Ctrl-C + quit the mode. + + : switch to command-line mode. + +Commands + Commands are executed with :command_name + + Commented out lines should start with the double quote symbol ("), + which may be preceded by whitespace characters intermixed with colons. + Inline comments can be added at the end of the line after double quote + symbol, only last line of a multi-line command can contain such com- + ment. Not all commands support inline comments as their syntax con- + flicts with names of registers and fields where double quotes are + allowed. + + Most of the commands have two forms: complete and the short one. Exam- + ple: + + :noh[lsearch] + + This means the complete command is nohlsearch, and the short one is + noh. + + Most of command-line commands completely reset selection in the current + view. However, there are several exceptions: + + - `:invert s` most likely leaves some files selected; + + - :normal command (when it doesn't leave command-line mode); + + - :if and :else commands don't affect selection on successful execu- + tion. + + '|' can be used to separate commands, so you can give multiple commands + in one line. If you want to use '|' in an argument, precede it with + '\'. + + These commands see '|' as part of their arguments even when it's + escaped: + + :[range]! + :autocmd + :cabbrev + :cmap + :cnoreabbrev + :cnoremap + :command + :dmap + :dnoremap + :filetype + :fileviewer + :filextype + :map + :mmap + :mnoremap + :nmap + :nnoremap + :noremap + :normal + :qmap + :qnoremap + :vmap + :vnoremap + :wincmd + :windo + :winrun + + To be able to use another command after one of these, wrap it with the + :execute command. An example: + + if filetype('.') == 'reg' | execute '!!echo regular file' | endif + + :[count] + + :number + move to the file number. + :12 would move to the 12th file in the list. + :0 move to the top of the list. + :$ move to the bottom of the list. + + :[count]command + The only builtin :[count]command are :[count]d[elete] and + :[count]y[ank]. + + :d3 would delete three files starting at the current file position + moving down. + + :3d would delete one file at the third line in the list. + + :command [args] + + :[range]!program + execute command via shell. Accepts macros. + + :[range]!command & + + same as above, but the command is run in the background using vifm's + means. + + Programs that write to stdout like "ls" create an error message showing + partial output of the command. + + Note the space before ampersand symbol, if you omit it, command will be + run in the background using job control of your shell. + + Accepts macros. + + :!! + + :[range]!!command + same as :!, but pauses before returning. + + :!! repeat the last command. + + :alink + + :[range]alink[!?] + create absolute symbolic links to files in directory of inactive + view. With "?" prompts for destination file names in an edi- + tor. "!" forces overwrite. + + :[range]alink[!] path + create absolute symbolic links to files in directory specified + by the path (absolute or relative to directory of inactive + view). + + :[range]alink[!] name1 name2... + create absolute symbolic links of files in directory of other + view giving each next link a corresponding name from the argu- + ment list. + + :apropos + + :apropos keyword... + create a menu of items returned by the apropos command. Select- + ing an item in the menu opens corresponding man page. By + default the command relies on the external "apropos" utility, + which can be customized by altering value of the 'aproposprg' + option. + + :autocmd + + :au[tocmd] {event} {pat} {cmd} + register autocommand for the {event}, which can be: + - DirEnter - triggered after directory is changed + Event name is case insensitive. + + {pat} is a comma-separated list of modified globs patterns, + which can contain tilde or environment variables. All paths use + slash ('/') as directory separator. The pattern can start with + a '!', which negates it. Patterns that do not contain slashes + are matched against the last item of the path only (e.g. "dir" + in "/path/dir"). Literal comma can be entered by doubling it. + Two modifications to globs matching are as follows: + - * - never matches a slash (i.e., can signify single direc- + tory level) + - ** - matches any character (i.e., can match path of arbi- + trary depth) + + {cmd} is a :command or several of them separated with '|'. + + Examples of patterns: + - conf.d - matches conf.d directory anywhere + - *.d - matches directories ending with ".d" anywhere + - **.git - matches something.git, but not .git anywhere + - **/.git/** - matches /path/.git/objects, but not /path/.git + - **/.git/**/ - matches /path/.git/ only (because of trailing + slash) + - /etc/* - matches /etc/conf.d/, /etc/X11, but not + /etc/X11/fs + - /etc/**/*.d - matches /etc/conf.d, /etc/X11/conf.d, etc. + - /etc/**/* - matches /etc/ itself and any file below it + - /etc/**/** - matches /etc/ itself and any file below it + + :au[tocmd] [{event}] [{pat}] + list those autocommands that match given event-pattern combina- + tion. + {event} and {pat} can be omitted to list all autocommands. To + list any autocommands for specific pattern one can use * place- + holder in place of {event}. + + :au[tocmd]! [{event}] [{pat}] + remove autocommands that match given event-pattern combination. + Syntax is the same as for listing above. + + :apropos + repeat last :apropos command. + + :bmark + + :bmark tag1 [tag2 [tag3...]] + bookmark current directory with specified tags. + + :bmark! path tag1 [tag2 [tag3...]] + same as :bmark, but allows bookmarking specific path instead of + current directory. This is for use in vifmrc and for bookmark- + ing files. + + Path can contain macros that expand to single path (%c, %C, %d, + %D) or those that can expand to multiple paths, but contain only + one (%f, %F, %rx). The latter is done for convenience on using + the command interactively. Complex macros that include spaces + (e.g. "%c:gs/ /_") should be escaped. + + :bmarks + + :bmarks + display all bookmarks in a menu. + + :bmarks [tag1 [tag2...]] + display menu of bookmarks that include all of the specified + tags. + + :bmgo + + :bmgo [tag1 [tag2...]] + when there are more than one match acts exactly like :bmarks, + otherwise navigates to single match immediately (and fails if + there is no match). + + :cabbrev + + :ca[bbrev] + display menu of command-line mode abbreviations. + + :ca[bbrev] lhs-prefix + display command-line mode abbreviations which left-hand side + starts with specified prefix. + + :ca[bbrev] lhs rhs + register new or overwrites existing abbreviation for command- + line mode. rhs can contain spaces and any special sequences + accepted in rhs of mappings (see "Mappings" section below). + Abbreviations are expanded non-recursively. + + :cnoreabbrev + + :cnorea[bbrev] + display menu of command-line mode abbreviations. + + :cnorea[bbrev] lhs-prefix + display command-line mode abbreviations which left-hand side + starts with specified prefix. + + :cnorea[bbrev] lhs rhs + same as :cabbrev, but mappings in rhs are ignored during expan- + sion. + + :cd + + :cd or :cd ~ or :cd $HOME + change to home directory. + + :cd - go to the last visited directory. + + :cd ~/dir + change directory to ~/dir. + + :cd /curr/dir /other/dir + change directory of the current pane to /curr/dir and directory + of the other pane to /other/dir. Relative paths are assumed to + be relative to directory of current view. Command won't fail if + one of directories is invalid. All forms of the command accept + macros. + + :cd! /dir + same as :cd /dir /dir. + + :cds + + :cds[!] pattern string + navigate to path obtained by substituting first match in current + path. Arguments can include slashes, but starting first argu- + ment with a separator will activate below form of the command. + Specifying "!" changes directory of both panes. + + Available flags: + + - i - ignore case (the 'ignorecase' and 'smartcase' options are not + used) + + - I - don't ignore case (the 'ignorecase' and 'smartcase' options are + not used) + + :cds[!]/pattern/string/[flags] + same as above, but with :substitute-like syntax. Other punctua- + tion characters can be used as separators. + + :change + + :c[hange] + create a menu window to alter a files properties. + + :chmod + + :[range]chmod + display file attributes (permission on *nix and properties on + Windows) change dialog. + + :[range]chmod[!] arg... + only for *nix + change permissions for files. See `man 1 chmod` for arg format. + "!" means set permissions recursively. + + :chown + + :[range]chown + only for *nix + same as co key in normal mode. + + :[range]chown [user][:][group] + only for *nix + change owner and/or group of files. Operates on directories + recursively. + + :clone + + :[range]clone[!?] + clones files in current directory. With "?" vifm will open vi + to edit file names. "!" forces overwrite. Macros are expanded. + + :[range]clone[!] path + clones files to directory specified with the path (absolute or + relative to current directory). "!" forces overwrite. Macros + are expanded. + + :[range]clone[!] name1 name2... + clones files in current directory giving each next clone a cor- + responding name from the argument list. "!" forces overwrite. + Macros are expanded. + + :colorscheme + + :colo[rscheme]? + print current color scheme name on the status bar. + + :colo[rscheme] + display a menu with a list of available color schemes. You can + choose primary color scheme here. It is used for view if no + directory specific colorscheme fits current path. It's also + used to set border color (except view titles) and colors in + menus and dialogs. + + :colo[rscheme] color_scheme_name + change primary color scheme to color_scheme_name. In case of + errors (e.g. some colors are not supported by terminal) either + nothing is changed or color scheme is reset to builtin colors to + ensure that TUI is left in a usable state. + + :colo[rscheme] color_scheme_name directory + associate directory with the color scheme. The directory argu- + ment can be either absolute or relative path when :colorscheme + command is executed from command line, but mandatory should be + an absolute path when the command is executed in scripts loaded + at startup (until vifm is completely loaded). + + :colo[rscheme] color_scheme_name color_scheme_name... + loads the first color scheme in the order given that exists and + is supported by the terminal. If none matches, current one + remains unchanged. For example: + + " use a separate color scheme for panes which are inside FUSE + mounts + execute 'colorscheme in-fuse' &fusehome + + :comclear + + :comc[lear] + remove all user defined commands. + + :command + + :com[mand] + display a menu of user commands. + + :com[mand] beginning + display user defined commands that start with the beginning. + + :com[mand] name action + set a new user command. + Trying to use a reserved command name will result in an error + message. + Use :com[mand]! to overwrite a previously set command. + Unlike vim user commands do not have to start with a capital + letter. User commands are run in a shell by default. To run a + command in the background you must set it as a background com- + mand with & at the end of the commands action (:com rm rm %f &). + Command name cannot contain numbers or special symbols (except + '?' and '!'). + + :com[mand] name /pattern + set search pattern. + + :com[mand] name =pattern + set local filter value. + + :com[mand] name filter{:filter args} + set file name filter (see :filter command description). For + example: + + " display only audio files + :command onlyaudio fil- + ter/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i + " display everything except audio files + :command noaudio fil- + ter!/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i + + :com[mand] cmd :commands + set kind of an alias for internal command (like in a shell). + Passes range given to alias to an aliased command, so running + :%cp after + :command cp :copy %a + equals + :%copy + + :compare + + :compare [byname | bysize | bycontents | listall | listunique | + listdups | ofboth | ofone | groupids | grouppaths | skipempty]... + compare files in one or two views according the arguments. The + default is "bycontents listall ofboth grouppaths". See "Compare + views" section below for details. Tree structure is incompati- + ble with alternative representations, so values of 'lsview' and + 'millerview' options are ignored. + + :copen + + :cope[n] + opens menu with contents of the last displayed menu with naviga- + tion to files by default, if any. + + :copy + + :[range]co[py][!?][ &] + copy files to directory of other view. With "?" prompts for + destination file names in an editor. "!" forces overwrite. + + :[range]co[py][!] path[ &] + copy files to directory specified with the path (absolute or + relative to directory of other view). "!" forces overwrite. + + :[range]co[py][!] name1 name2...[ &] + copy files to directory of other view giving each next file a + corresponding name from the argument list. "!" forces over- + write. + + :cquit + + :cq[uit][!] + same as :quit, but also aborts directory choosing via + --choose-dir (empties output file) and returns non-zero exit + code. + + :cunabbrev + + :cuna[bbrev] lhs + unregister command-line mode abbreviation by its lhs. + + :cuna[bbrev] rhs + unregister command-line mode abbreviation by its rhs, so that + abbreviation could be removed even after expansion. + + :delbmarks + + :delbmarks + remove bookmarks from current directory. + + :delbmarks tag1 [tag2 [tag3...]] + remove set of bookmarks that include all of the specified tags. + + :delbmarks! + remove all bookmarks. + + :delbmarks! path1 [path2 [path3...]] + remove bookmarks of listed paths. + + :delcommand + + :delc[ommand] user_command + remove user defined command named user_command. + + :delete + + :[range]d[elete][!][ &] + delete selected file or files. "!" means complete removal + (omitting trash). + + :[range]d[elete][!] [reg] [count][ &] + delete selected or [count] files to the reg register. "!" means + complete removal (omitting trash). + + :delmarks + + :delm[arks]! + delete all marks. + + :delm[arks] marks ... + delete specified marks, each argument is treated as a set of + marks. + + :display + + :di[splay] + display menu with registers content. + + :di[splay] list ... + display the contents of the numbered and named registers that + are mentioned in list (for example "az to display "", "a and "z + content). + + :dirs + + :dirs display directory stack. + + :echo + + :ec[ho] [...] + evaluate each argument as an expression and output them sepa- + rated with a space. See help on :let command for a definition + of . + + :edit + + :[range]e[dit] [file...] + open selected or passed file(s) in editor. Macros and environ- + ment variables are expanded. + + :else + + :el[se] + execute commands until next matching :endif if all other condi- + tions didn't match. See also help on :if and :endif commands. + + :elseif + + :elsei[f] {expr1} + execute commands until next matching :elseif, :else or :endif if + conditions of previous :if and :elseif branches were evaluated + to zero. See also help on :if and :endif commands. + + :empty + + :empty permanently remove files from all existing non-empty trash + directories (see "Trash directory" section below). Trash direc- + tories which are specified via %r and/or %u also get deleted + completely. Also remove all operations from undolist that have + no sense after :empty and remove all records about files located + inside directories from all registers. Removal is performed as + background task with undetermined amount of work and can be + checked via :jobs menu. + + :endif + + :en[dif] + end conditional block. See also help on :if and :else commands. + + :execute + + :exe[cute] [...] + evaluate each argument as an expression and join results sepa- + rated by a space to get a single string which is then executed + as a command-line command. See help on :let command for a defi- + nition of . + + :exit + + :exi[t][!] + same as :quit. + + :file + + :f[ile][ &] + display menu of programs set for the file type of the current + file. " &" forces running associated program in background. + + :f[ile] arg[ &] + run associated command that begins with the arg skipping opening + menu. " &" forces running associated program in background. + + :filetype + + :filet[ype] pattern-list [{descr}]def_prog[ &],[{descr}]prog2[ &],... + associate given program list to each of the patterns. Associ- + ated program (command) is used by handlers of l and Enter keys + (and also in the :file menu). If you need to insert comma into + command just double it (",,"). Space followed by an ampersand + as two last characters of a command means running of the command + in the background. Optional description can be given to each + command to ease understanding of what command will do in the + :file menu. Vifm will try the rest of the programs for an asso- + ciation when the default isn't found. When program entry + doesn't contain any of vifm macros, name of current file is + appended as if program entry ended with %c macro on *nix and %"c + on Windows. On Windows path to executables containing spaces + can (and should be for correct work with such paths) be double + quoted. See "Patterns" section below for pattern definition. + See also "Automatic FUSE mounts" section below. Example for zip + archives and several actions: + + filetype *.zip,*.jar,*.war,*.ear + \ {Mount with fuse-zip} + \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, + \ {View contents} + \ zip -sf %c | less, + \ {Extract here} + \ tar -xf %c, + + Note that on OS X when `open` is used to call an app, vifm is + unable to check whether that app is actually available. So if + automatic skipping of programs that aren't there is desirable, + `open` should be replaced with an actual command. + + :filet[ype] filename + list (in menu mode) currently registered patterns that match + specified file name. Same as ":filextype filename". + + :filextype + + :filex[type] pattern-list [{ description }] def_program,program2,... + same as :filetype, but this command is ignored if not running in + X. In X :filextype is equal to :filetype. See "Patterns" sec- + tion below for pattern definition. See also "Automatic FUSE + mounts" section below. + + For example, consider the following settings (the order might + seem strange, but it's for the demonstration purpose): + + filetype *.html,*.htm + \ {View in lynx} + \ lynx + filextype *.html,*.htm + \ {Open with dwb} + \ dwb %f %i &, + filetype *.html,*.htm + \ {View in links} + \ links + filextype *.html,*.htm + \ {Open with firefox} + \ firefox %f &, + \ {Open with uzbl} + \ uzbl-browser %f %i &, + + If you're using vifm inside a terminal emulator that is running + in graphical environment (when X is used on *nix; always on Win- + dows), vifm attempts to run application in this order: + + 1. lynx + 2. dwb + 3. links + 4. firefox + 5. uzbl + + If there is no graphical environment (checked presence of $DIS- + PLAY environment variable on *nix; never happens on Windows), + the list will look like: + + 1. lynx + 2. links + + Just as if all :filextype commands were not there. + + The purpose of such differentiation is to allow comfortable use + of vifm with same settings in desktop environment/through remote + connection (SSH)/in native console. + + Note that on OS X $DISPLAY isn't defined unless you define it, + so :filextype should be used only if you set $DISPLAY in some + way. + + :filext[ype] filename + list (in menu mode) currently registered patterns that match + specified file name. Same as ":filetype filename". + + :fileviewer + + :filev[iewer] pattern-list command1,command2,... + register specified list of commands as viewers for each of the + patterns. Viewer is a command which output is captured and dis- + played in one of the panes of vifm after pressing "e" or running + :view command. When the command doesn't contain any of vifm + macros, name of current file is appended as if command ended + with %c macro. Comma escaping and missing commands processing + rules as for :filetype apply to this command. See "Patterns" + section below for pattern definition. + + Example for zip archives: + + fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c, echo "No zip to + preview:" + + :filev[iewer] filename + list (in menu mode) currently registered patterns that match + specified filename. + + :filter + + :filter[!] {pattern} + filter files matching the pattern out of directory listings. + '!' controls state of filter inversion after updating filter + value (see also 'cpoptions' description). Filter is matched + case sensitively on *nix and case insensitively on Windows. See + "File Filters" and "Patterns" sections. + + Example: + + " filter all files ending in .o from the filelist. + :filter /.o$/ + + + :filter[!] {empty-pattern} + same as above, but use last search pattern as pattern value. + + Example: + + :filter //I + + + :filter + reset filter (set it to an empty string) and show all files. + + :filter! + same as :invert. + + :filter? + show information on local, name and auto filters. + + :find + + :[range]fin[d] pattern + display results of find command in the menu. Searches among + selected files if any. Accepts macros. By default the command + relies on the external "find" utility, which can be customized + by altering value of the 'findprg' option. + + :[range]fin[d] -opt... + same as :find above, but user defines all find arguments. + Searches among selected files if any. + + :[range]fin[d] path -opt... + same as :find above, but user defines all find arguments. + Ignores selection and range. + + :[range]fin[d] + repeat last :find command. + + :finish + + :fini[sh] + stop sourcing a script. Can only be used in a vifm script file. + This is a quick way to skip the rest of the file. + + :goto + + :go[to] + change directory if necessary and put specified path under the + cursor. The path should be existing non-root path. Macros and + environment variables are expanded. + + :grep + + :[range]gr[ep][!] pattern + will show results of grep command in the menu. Add "!" to + request inversion of search (look for lines that do not match + pattern). Searches among selected files if any and no range + given. Ignores binary files by default. By default the command + relies on the external "grep" utility, which can be customized + by altering value of the 'grepprg' option. + + :[range]gr[ep][!] -opt... + same as :grep above, but user defines all grep arguments, which + are not escaped. Searches among selected files if any. + + :[range]gr[ep][!] + repeat last :grep command. "!" of this command inverts "!" in + repeated command. + + :help + + :h[elp] + show the help file. + + :h[elp] argument + is the same as using ':h argument' in vim. Use vifm- + to get help on vifm (tab completion works). This form of the + command doesn't work when 'vimhelp' option is off. + + :hideui + + :hideui + hide interface to show previous commands' output. + + :highlight + + :hi[ghlight] + display information about all highlight groups active at the + moment. + + :hi[ghlight] clear + reset all highlighting to builtin defaults and removed all file- + name-specific rules. + + :hi[ghlight] clear ( {pat1,pat2,...} | /regexp/ ) + remove specified rule. + + :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/ ) + display information on given highlight group or file name pat- + tern of color scheme used in the active view. + + :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/[iI] ) + cterm=style | ctermfg=color | ctermbg=color + set style (cterm), foreground (ctermfg) or/and background + (ctermbg) parameters of highlight group or file name pattern for + color scheme used in the active view. + + All style values as well as color names are case insensitive. + + Available style values (some of them can be combined): + - bold + - underline + - reverse or inverse + - standout + - italic (on unsupported systems becomes reverse) + - none + + Available group-name values: + - Win - color of all windows (views, dialogs, menus) and default color + for their content (e.g. regular files in views) + - AuxWin - color of auxiliary areas of windows + - OtherWin - color of inactive pane + - Border - color of vertical parts of the border + - TabLine - tab line color (for 'tabscope' set to "global") + - TabLineSel - color of the tip of selected tab (regardless of 'tab- + scope') + - TopLineSel - top line color of the current pane + - TopLine - top line color of the other pane + - CmdLine - the command line/status bar color + - ErrorMsg - color of error messages in the status bar + - StatusLine - color of the line above the status bar + - JobLine - color of job line that appears above the status line + - WildMenu - color of the wild menu items + - SuggestBox - color of key suggestion box + - CurrLine - line at cursor position in active view + - OtherLine - line at cursor position in inactive view + - Selected - color of selected files + - Directory - color of directories + - Link - color of symbolic links in the views + - BrokenLink - color of broken symbolic links + - Socket - color of sockets + - Device - color of block and character devices + - Executable - color of executable files + - Fifo - color of fifo pipes + - CmpMismatch - color of mismatched files in side-by-side comparison + by path + - User1..User9 - 9 colors which can be used via %* 'statusline' macro + + Available colors: + - -1 or default or none - default or transparent + - black and lightblack + - red and lightred + - green and lightgreen + - yellow and lightyellow + - blue and lightblue + - magenta and lightmagenta + - cyan and lightcyan + - white and lightwhite + - 0-255 - corresponding colors from 256-color palette + + Light versions of colors are regular colors with bold attribute set. + So order of arguments of :highlight command is important and it's bet- + ter to put "cterm" in front of others to prevent it from overwriting + attributes set by "ctermfg" or "ctermbg" arguments. + + For convenience of color scheme authors xterm-like names for 256 color + palette is also supported. The mapping is taken from + http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim Dupli- + cated entries were altered by adding an underscore followed by numeri- + cal suffix. + + 0 Black 86 Aquamarine1 172 Orange3 + 1 Red 87 DarkSlateGray2 173 LightSalmon3_2 + 2 Green 88 DarkRed_2 174 LightPink3 + 3 Yellow 89 DeepPink4_2 175 Pink3 + 4 Blue 90 DarkMagenta 176 Plum3 + 5 Magenta 91 DarkMagenta_2 177 Violet + 6 Cyan 92 DarkViolet 178 Gold3_2 + 7 White 93 Purple 179 LightGoldenrod3 + 8 LightBlack 94 Orange4_2 180 Tan + 9 LightRed 95 LightPink4 181 MistyRose3 + 10 LightGreen 96 Plum4 182 Thistle3 + 11 LightYellow 97 MediumPurple3 183 Plum2 + 12 LightBlue 98 MediumPurple3_2 184 Yellow3_2 + 13 LightMagenta 99 SlateBlue1 185 Khaki3 + 14 LightCyan 100 Yellow4 186 LightGoldenrod2 + 15 LightWhite 101 Wheat4 187 LightYellow3 + 16 Grey0 102 Grey53 188 Grey84 + 17 NavyBlue 103 LightSlateGrey 189 LightSteelBlue1 + 18 DarkBlue 104 MediumPurple 190 Yellow2 + 19 Blue3 105 LightSlateBlue 191 DarkOliveGreen1 + 20 Blue3_2 106 Yellow4_2 192 DarkOliveG- + reen1_2 + 21 Blue1 107 DarkOliveGreen3 193 DarkSeaGreen1_2 + 22 DarkGreen 108 DarkSeaGreen 194 Honeydew2 + 23 DeepSkyBlue4 109 LightSkyBlue3 195 LightCyan1 + 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1 + 25 DeepSkyBlue4_3 111 SkyBlue2 197 DeepPink2 + 26 DodgerBlue3 112 Chartreuse2_2 198 DeepPink1 + 27 DodgerBlue2 113 DarkOliveGreen3_2 199 DeepPink1_2 + 28 Green4 114 PaleGreen3_2 200 Magenta2_2 + 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1 + 30 Turquoise4 116 DarkSlateGray3 202 OrangeRed1 + 31 DeepSkyBlue3 117 SkyBlue1 203 IndianRed1 + 32 DeepSkyBlue3_2 118 Chartreuse1 204 IndianRed1_2 + 33 DodgerBlue1 119 LightGreen_2 205 HotPink + 34 Green3 120 LightGreen_3 206 HotPink_2 + 35 SpringGreen3 121 PaleGreen1 207 MediumOrchid1_2 + 36 DarkCyan 122 Aquamarine1_2 208 DarkOrange + 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1 + 38 DeepSkyBlue2 124 Red3 210 LightCoral + 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVioletRed1 + 40 Green3_2 126 MediumVioletRed 212 Orchid2 + 41 SpringGreen3_2 127 Magenta3 213 Orchid1 + 42 SpringGreen2 128 DarkViolet_2 214 Orange1 + 43 Cyan3 129 Purple_2 215 SandyBrown + 44 DarkTurquoise 130 DarkOrange3 216 LightSalmon1 + 45 Turquoise2 131 IndianRed 217 LightPink1 + 46 Green1 132 HotPink3 218 Pink1 + 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1 + 48 SpringGreen1 134 MediumOrchid 220 Gold1 + 49 MediumSpringGreen 135 MediumPurple2 221 LightGolden- + rod2_2 + 50 Cyan2 136 DarkGoldenrod 222 LightGolden- + rod2_3 + 51 Cyan1 137 LightSalmon3 223 NavajoWhite1 + 52 DarkRed 138 RosyBrown 224 MistyRose1 + 53 DeepPink4 139 Grey63 225 Thistle1 + 54 Purple4 140 MediumPurple2_2 226 Yellow1 + 55 Purple4_2 141 MediumPurple1 227 LightGoldenrod1 + 56 Purple3 142 Gold3 228 Khaki1 + 57 BlueViolet 143 DarkKhaki 229 Wheat1 + 58 Orange4 144 NavajoWhite3 230 Cornsilk1 + 59 Grey37 145 Grey69 231 Grey100 + 60 MediumPurple4 146 LightSteelBlue3 232 Grey3 + 61 SlateBlue3 147 LightSteelBlue 233 Grey7 + 62 SlateBlue3_2 148 Yellow3 234 Grey11 + 63 RoyalBlue1 149 DarkOliveGreen3_3 235 Grey15 + 64 Chartreuse4 150 DarkSeaGreen3_2 236 Grey19 + 65 DarkSeaGreen4 151 DarkSeaGreen2 237 Grey23 + 66 PaleTurquoise4 152 LightCyan3 238 Grey27 + 67 SteelBlue 153 LightSkyBlue1 239 Grey30 + 68 SteelBlue3 154 GreenYellow 240 Grey35 + 69 CornflowerBlue 155 DarkOliveGreen2 241 Grey39 + 70 Chartreuse3 156 PaleGreen1_2 242 Grey42 + 71 DarkSeaGreen4_2 157 DarkSeaGreen2_2 243 Grey46 + 72 CadetBlue 158 DarkSeaGreen1 244 Grey50 + 73 CadetBlue_2 159 PaleTurquoise1 245 Grey54 + 74 SkyBlue3 160 Red3_2 246 Grey58 + 75 SteelBlue1 161 DeepPink3 247 Grey62 + 76 Chartreuse3_2 162 DeepPink3_2 248 Grey66 + 77 PaleGreen3 163 Magenta3_2 249 Grey70 + 78 SeaGreen3 164 Magenta3_3 250 Grey74 + 79 Aquamarine3 165 Magenta2 251 Grey78 + 80 MediumTurquoise 166 DarkOrange3_2 252 Grey82 + 81 SteelBlue1_2 167 IndianRed_2 253 Grey85 + 82 Chartreuse2 168 HotPink3_2 254 Grey89 + 83 SeaGreen2 169 HotPink2 255 Grey93 + 84 SeaGreen1 170 Orchid + 85 SeaGreen1_2 171 MediumOrchid1 + + There are two colors (foreground and background) and only one bold + attribute. Thus single bold attribute affects both colors when + "reverse" attribute is used in vifm run inside terminal emulator. At + the same time linux native console can handle boldness of foreground + and background colors independently, but for consistency with terminal + emulators this is available only implicitly by using light versions of + colors. This behaviour might be changed in the future. + + Although vifm supports 256 colors in a sense they are supported by UI + drawing library, whether you will be able to use all of them highly + depends on your terminal. To set up terminal properly, make sure that + $TERM in the environment you run vifm is set to name of 256-color ter- + minal (on *nixes it can also be set via X resources), e.g. + xterm-256color. One can find list of available terminal names by list- + ing /usr/lib/terminfo/. Number of colors supported by terminal with + current settings can be checked via "tput colors" command. + + Here is the hierarchy of highlight groups, which you need to know for + using transparency: + JobLine + SuggestBox + StatusLine + WildMenu + User1..User9 + Border + CmdLine + ErrorMsg + Win + OtherWin + AuxWin + File name specific highlights + Directory + Link + BrokenLink + Socket + Device + Fifo + Executable + Selected + CurrLine + OtherLine + TopLine + TopLineSel + TabLineSel (for pane tabs) + TabLine + TabLineSel + + "none" means default terminal color for highlight groups at the first + level of the hierarchy and transparency for all others. + + Here file name specific highlights mean those configured via globs ({}) + or regular expressions (//). At most one of them is applied per file + entry, namely the first that matches file name, hence order of :high- + light commands might be important in certain cases. + + :history + + :his[tory] + creates a pop-up menu of directories visited. + + :his[tory] x + x can be: + d[ir] or . show directory history. + c[md] or : show command line history. + s[earch] or / show search history and search forward on l key. + f[search] or / show search history and search forward on l key. + b[search] or ? show search history and search backward on l key. + i[nput] or @ show prompt history (e.g. on one file renaming). + fi[lter] or = show filter history (see description of the "=" + normal mode command). + + :histnext + + :histnext + same as . The main use case for this command is to work + around the common pain point of and being the same + ASCII character: one could alter the terminal emulator settings + to emit, for example, the `F1` keycode when Ctrl-I is pressed, + then `:noremap :histnext` in vifm, add "t" flag to the + 'cpoptions', and thus have both and working as + expected. + + :histprev + + :histprev + same as . + + :if + + :if {expr1} + starts conditional block. Commands are executed until next + matching :elseif, :else or :endif command if {expr1} evaluates + to non-zero, otherwise they are ignored. See also help on :else + and :endif commands. + + Example: + + if $TERM == 'screen.linux' + highlight CurrLine ctermfg=lightwhite ctermbg=lightblack + elseif $TERM == 'tmux' + highlight CurrLine cterm=reverse ctermfg=black + ctermbg=white + else + highlight CurrLine cterm=bold,reverse ctermfg=black + ctermbg=white + endif + + :invert + + :invert [f] + invert file name filter. + + :invert? [f] + show current filter state. + + :invert s + invert selection. + + :invert o + invert sorting order of the primary sorting key. + + :invert? o + show sorting order of the primary sorting key. + + :jobs + + :jobs shows menu of current backgrounded processes. + + :let + + :let $ENV_VAR = + sets environment variable. Warning: setting environment vari- + able to an empty string on Windows removes it. + + :let $ENV_VAR .= + append value to environment variable. + + :let &[l:|g:]opt = + sets option value. + + :let &[l:|g:]opt .= + append value to string option. + + :let &[l:|g:]opt += + increasing option value, adding sub-values. + + :let &[l:|g:]opt -= + decreasing option value, removing sub-values. + + Where could be a single-quoted string, double-quoted string, an + environment variable, function call or a concatanation of any of them + in any order using the '.' operator. Any whitespace is ignored. + + :locate + + :locate filename + use "locate" command to create a menu of filenames. Selecting a + file from the menu will reload the current file list in vifm to + show the selected file. By default the command relies on the + external "locate" utility (it's assumed that its database is + already built), which can be customized by altering value of the + 'locateprg' option. + + :locate + repeats last :locate command. + + :ls + + :ls lists windows of active terminal multiplexer (only when terminal + multiplexer is used). This is achieved by issuing proper com- + mand for active terminal multiplexer, thus the list is not han- + dled by vifm. + + :lstrash + + :lstrash + displays a menu with list of files in trash. Each element of + the list is original path of a deleted file, thus the list can + contain duplicates. + + :mark + + :[range]ma[rk][?] x [/full/path] [filename] + Set mark x (a-zA-Z0-9) at /full/path and filename. By default + current directory is being used. If no filename was given and + /full/path is current directory then last file in [range] is + used. Using of macros is allowed. Question mark will stop com- + mand from overwriting existing marks. + + :marks + + :marks create a pop-up menu of marks. + + :marks list ... + display the contents of the marks that are mentioned in list. + + :media + + :media only for *nix + display media management menu. See also 'mediaprg' option. + + :messages + + :mes[sages] + shows previously given messages (up to 50). + + :mkdir + + :[line]mkdir[!] dir ... + create directories at specified paths. The [line] can be used + to pick node in a tree-view. "!" means make parent directories + as needed. Macros are expanded. + + :move + + :[range]m[ove][!?][ &] + move files to directory of other view. With "?" prompts for + destination file names in an editor. "!" forces overwrite. + + :[range]m[ove][!] path[ &] + move files to directory specified with the path (absolute or + relative to directory of other view). "!" forces overwrite. + + :[range]m[ove][!] name1 name2...[ &] + move files to directory of other view giving each next file a + corresponding name from the argument list. "!" forces over- + write. + + :nohlsearch + + :noh[lsearch] + clear selection in current pane. + + :normal + + :norm[al][!] commands + execute normal mode commands. If "!" is used, user defined map- + pings are ignored. Unfinished last command is aborted as if + or was typed. A ":" should be completed as well. + Commands can't start with a space, so put a count of 1 (one) + before it. + + :only + + :on[ly] + switch to a one window view. + + :popd + + :popd remove pane directories from stack. + + :pushd + + :pushd[!] /curr/dir [/other/dir] + add pane directories to stack and process arguments like :cd + command. + + :pushd exchange the top two items of the directory stack. + + :put + + :[line]pu[t][!] [reg] [ &] + puts files from specified register (" by default) into current + directory. The [line] can be used to pick node in a tree-view. + "!" moves files "!" moves files from their original location + instead of copying them. During this operation no confirmation + dialogs will be shown, all checks are performed beforehand. + + :pwd + + :pw[d] show the present working directory. + + :qall + + :qa[ll][!] + exit vifm (add ! to skip saving changes and checking for active + backgrounded commands). + + :quit + + :q[uit][!] + if there is more than one tab, close the current one, otherwise + exit vifm (add ! to skip saving changes and checking for active + backgrounded commands). + + :redraw + + :redr[aw] + redraw the screen immediately. + + :registers + + :reg[isters] + display menu with registers content. + + :reg[isters] list ... + display the contents of the numbered and named registers that + are mentioned in list (for example "az to display "", "a and "z + content). + + :regular + + :regular + + switch to regular view leaving custom view. + :rename + + :[range]rename[!] + rename files using vi to edit names. ! means go recursively + through directories. + + :[range]rename name1 name2... + rename each of selected files to a corresponding name. + + :restart + + :restart + free a lot of things (histories, commands, etc.), reread + vifminfo and vifmrc files and run startup commands passed in the + argument list, thus losing all unsaved changes (e.g. recent his- + tory or keys mapped in current session). + + While many things get reset, some basic UI state and current + locations are preserved, including tabs. + + :restore + + :[range]restore + restore file from trash directory, doesn't work outside one of + trash directories. See "Trash directory" section below. + + :rlink + + :[range]rlink[!?] + create relative symbolic links to files in directory of other + view. With "?" prompts for destination file names in an editor. + "!" forces overwrite. + + :[range]rlink[!] path + create relative symbolic links of files in directory specified + with the path (absolute or relative to directory of other view). + "!" forces overwrite. + + :[range]rlink[!] name1 name2... + create relative symbolic links of files in directory of other + view giving each next link a corresponding name from the argu- + ment list. "!" forces overwrite. + + :screen + + :screen + toggle whether to use the terminal multiplexer or not. + A terminal multiplexer uses pseudo terminals to allow multiple + windows to be used in the console or in a single xterm. Start- + ing vifm from terminal multiplexer with appropriate support + turned on will cause vifm to open a new terminal multiplexer + window for each new file edited or program launched from vifm. + This requires screen version 3.9.9 or newer for the screen -X + argument or tmux (1.8 version or newer is recommended). + + :screen! + enable integration with terminal multiplexers. + + :screen? + display whether integration with terminal multiplexers is + enabled. + + Note: the command is called screen for historical reasons (when tmux + wasn't yet supported) and might be changed in future releases, or get + an alias. + + :select + + :[range]select + select files in the given range (current file if no range is + given). + + :select {pattern} + select files that match specified pattern. Possible {pattern} + forms are described in "Patterns" section below. Trailing slash + for directories is taken into account, so `:select! */ | invert + s` selects only files. + + :select //[iI] + same as item above, but reuses last search pattern. + + :select !{external command} + select files from the list supplied by external command. Files + are matched by full paths, relative paths are converted to abso- + lute ones beforehand. + + :[range]select! [{pattern}] + same as above, but resets previously selected items before pro- + ceeding. + + :set + + :se[t] display all options that differ from their default value. + + :se[t] all + display all options. + + :se[t] opt1=val1 opt2='val2' opt3="val3" ... + sets given options. For local options both values are set. + You can use following syntax: + - for all options - option, option? and option& + - for boolean options - nooption, invoption and option! + - for integer options - option=x, option+=x and option-=x + - for string options - option=x and option+=x + - for string list options - option=x, option+=x, option-=x and + option^=x + - for enumeration options - option=x, option+=x and option-=x + - for set options - option=x, option+=x, option-=x and + option^=x + - for charset options - option=x, option+=x, option-=x and + option^=x + + the meaning: + - option - turn option on (for boolean) or print its value (for + all others) + - nooption - turn option off + - invoption - invert option state + - option! - invert option state + - option? - print option value + - option& - reset option to its default value + - option=x or option:x - set option to x + - option+=x - add/append x to option + - option-=x - remove (or subtract) x from option + - option^=x - toggle x presence among values of the option + + Option name can be prepended and appended by any number of + whitespace characters. + + :setglobal + + :setg[lobal] + display all global options that differ from their default value. + + :setg[lobal] all + display all global options. + + :setg[lobal] opt1=val1 opt2='val2' opt3="val3" ... + same as :set, but changes/prints only global options or global + values of local options. Changes to the latter might be not + visible until directory is changed. + + :setlocal + + :setl[ocal] + display all local options that differ from their default value. + + :setl[ocal] all + display all local options. + + :setl[ocal] opt1=val1 opt2='val2' opt3="val3" ... + same as :set, but changes/prints only local values of local + options. + + :shell + + :sh[ell][!] + start a shell in current directory. "!" suppresses spawning + dedicated window of terminal multiplexer for a shell. To make + vifm adaptive to environment it uses $SHELL if it's defined, + otherwise 'shell' value is used. + + + :siblnext + + :[count]siblnext[!] + + change directory to [count]th next sibling directory after cur- + rent path using value of global sort option of current pane. + "!" enables wrapping. + + For example, say, you're at /boot and root listing starts like + this: + + bin/ + boot/ + dev/ + ... + + Issuing :siblnext will navigate to /dev. + + + :siblprev + + :[count]siblprev[!] + same as :siblnext, but in the opposite direction. + + :sort + + :sor[t] + display dialog with different sorting methods, when one can + select primary sorting key. When 'viewcolumns' options is empty + and 'lsview' is off, changing primary sorting key will also + affect view look (in particular the second column of the view + will be changed). + + :source + + :so[urce] file + read command-line commands from the file. + + :split + + :sp[lit] + switch to a two window horizontal view. + + :sp[lit]! + toggle horizontal window splitting. + + :sp[lit] path + splits the window horizontally to show both file directories. + Also changes other pane to path (absolute or relative to current + directory of active pane). + + :substitute + + :[range]s[ubstitute]/pattern/string/[flags] + for each file in range replace a match of pattern with string. + + String can contain \0...\9 to link to capture groups (\0 - all match, + \1 - first group, etc.). + + Pattern is stored in search history. + + Available flags: + + - i - ignore case (the 'ignorecase' and 'smartcase' options are not + used) + + - I - don't ignore case (the 'ignorecase' and 'smartcase' options are + not used) + + - g - substitute all matches in each file name (each g toggles this) + + :[range]s[ubstitute]/pattern + substitute pattern with an empty string. + + :[range]s[ubstitute]//string/[flags] + use last pattern from search history. + + :[range]s[ubstitute] + repeat previous substitution command. + + :sync + + :sync [relative path] + change the other pane to the current pane directory or to some + path relative to the current directory. Using macros is + allowed. + + :sync! change the other pane to the current pane directory and synchro- + nize cursor position. If current pane displays custom list of + files, position before entering it is used (current one might + not make any sense). + + + :sync! [location | cursorpos | localopts | filters | filelist | tree | + all]... + change enumerated properties of the other pane to match corre- + sponding properties of the current pane. Arguments have the + following meanings: + + - location - current directory of the pane; + + - cursorpos - cursor position (doesn't make sense without + "location"); + + - localopts - all local options; + + - filters - all filters; + + - filelist - list of files for custom view (implies "loca- + tion"); + + - tree - tree structure for tree view (implies "location"); + + - all - all of the above. + + :tabclose + + :tabc[lose] + close current tab, unless it's the only one open at current + scope. + + :tabmove + + :tabm[ove] [N] + without the argument or with `$` as the argument, current tab + becomes the last tab. With the argument, current tab is moved + after the tab with the specified number. Argument of `0` moves + current tab to the first position. + + :tabname + + :tabname [name] + set, update or reset (when no argument is provided) name of the + current tab. + + :tabnew + + :tabnew [path] + create new tab. Accepts optional path for the new tab. Macros + and environment variables are expanded. + + :tabnext + + :tabn[ext] + switch to the next tab (wrapping around). + + :tabn[ext] {n} + go to the tab number {n}. Tab numeration starts with 1. + + :tabprevious + + :tabp[revious] + switch to the previous tab (wrapping around). + + :tabp[revious] {n} + go to the {n}-th previous tab. Note that :tabnext handles its + argument differently. + + :touch + + :[line]touch file... + create files at specified paths. Aborts on errors. Doesn't + update time of existing files. The [line] can be used to pick + node in a tree-view. Macros are expanded. + + :tr + + :[range]tr/pattern/string/ + for each file in range transliterate the characters which appear + in pattern to the corresponding character in string. When + string is shorter than pattern, it's padded with its last char- + acter. + + :trashes + + :trashes + lists all valid trash directories in a menu. Only non-empty and + writable trash directories are shown. This is exactly the list + of directories that are cleared when :empty command is executed. + + :trashes? + same as :trashes, but also displays size of each trash direc- + tory. + + :tree + + :tree turn pane into tree view with current directory as its root. + The tree view is implemented on top of a custom view, but is + automatically kept in sync with file system state and considers + all the filters. Thus the structure corresponds to what one + would see on visiting the directories manually. As a special + case for trees built out of custom view file-system tracking + isn't performed. + + To leave tree view go up from its root or use gh at any level of + the tree. Any command that changes directory will also do, in + particular, `:cd ..`. + + Tree structure is incompatible with alternative representations, + so values of 'lsview' and 'millerview' options are ignored. + + :tree! toggle current view in and out of tree mode. + + :undolist + + :undol[ist] + display list of latest changes. Use "!" to see actual commands. + + :unlet + + :unl[et][!] $ENV_VAR1 $ENV_VAR2 ... + remove environment variables. Add ! to omit displaying of warn- + ings about nonexistent variables. + + :unselect + + :[range]unselect + unselect files in the given range (current file if no range is + given). + + :unselect {pattern} + unselect files that match specified pattern. Possible {pattern} + forms are described in "Patterns" section below. Trailing slash + for directories is taken into account, so `:unselect */` unse- + lects directories. + + :unselect !{external command} + unselect files from the list supplied by external command. + Files are matched by full paths, relative paths are converted to + absolute ones beforehand. + + :unselect //[iI] + same as item above, but reuses last search pattern. + + :version + + :ve[rsion] + show menu with version information. + + :vifm + + :vifm same as :version. + + :view + + :vie[w] + toggle on and off the quick file view. See also 'quickview' + option. + + :vie[w]! + turn on quick file view if it's off. + + :volumes + + :volumes + only for MS-Windows + display menu with volume list. Hitting l (or Enter) key opens + appropriate volume in the current pane. + + :vsplit + + :vs[plit] + switch to a two window vertical view. + + :vs[plit]! + toggle window vertical splitting. + + :vs[plit] path + split the window vertically to show both file directories. And + changes other pane to path (absolute or relative to current + directory of active pane). + + :wincmd + + :[count]winc[md] {arg} + same as running Ctrl-W [count] {arg}. + + :windo + + :windo [command...] + execute command for each pane (same as :winrun % command). + + :winrun + + :winrun type [command...] + execute command for pane(s), which is determined by type argu- + ment: + - ^ - top-left pane + - $ - bottom-right pane + - % - all panes + - . - current pane + - , - other pane + + :write + + :w[rite] + write vifminfo file. + + :wq + + :wq[!] same as :quit, but ! only disables check of backgrounded com- + mands. :wqall + + :wqa[ll][!] + same as :qall, but ! only disables check of backgrounded com- + mands. + + :xall + + :xa[ll][!] + same as :qall. + + :xit + + :x[it][!] + same as :quit. + + :yank + + :[range]y[ank] [reg] [count] + will yank files to the reg register. + + :map lhs rhs + + :map lhs rhs + map lhs key sequence to rhs in normal and visual modes. + + :map! lhs rhs + map lhs key sequence to rhs in command line mode. + + + :cmap :dmap :mmap :nmap :qmap + :vmap + + :cm[ap] lhs rhs + map lhs to rhs in command line mode. + + :dm[ap] lhs rhs + map lhs to rhs in dialog modes. + + :mm[ap] lhs rhs + map lhs to rhs in menu mode. + + :nm[ap] lhs rhs + map lhs to rhs in normal mode. + + :qm[ap] lhs rhs + map lhs to rhs in view mode. + + :vm[ap] lhs rhs + map lhs to rhs in visual mode. + + + :*map + + :cm[ap] + list all maps in command line mode. + + :dm[ap] + list all maps in dialog modes. + + :mm[ap] + list all maps in menu mode. + + :nm[ap] + list all maps in normal mode. + + :qm[ap] + list all maps in view mode. + + :vm[ap] + list all maps in visual mode. + + :*map beginning + + :cm[ap] beginning + list all maps in command line mode that start with the begin- + ning. + + :dm[ap] beginning + list all maps in dialog modes that start with the beginning. + + :mm[ap] beginning + list all maps in menu mode that start with the beginning. + + :nm[ap] beginning + list all maps in normal mode that start with the beginning. + + :qm[ap] beginning + list all maps in view mode that start with the beginning. + + :vm[ap] beginning + list all maps in visual mode that start with the beginning. + + :noremap + + :no[remap] lhs rhs + map the key sequence lhs to rhs for normal and visual modes, but + disallow mapping of rhs. + + :no[remap]! lhs rhs + map the key sequence lhs to rhs for command line mode, but dis- + allow mapping of rhs. + + :cnoremap :dnoremap :mnoremap :nnoremap :qnoremap + :vnoremap + + :cno[remap] lhs rhs + map the key sequence lhs to rhs for command line mode, but dis- + allow mapping of rhs. + + :dn[oremap] lhs rhs + map the key sequence lhs to rhs for dialog modes, but disallow + mapping of rhs. + + :mn[oremap] lhs rhs + map the key sequence lhs to rhs for menu mode, but disallow map- + ping of rhs. + + :nn[oremap] lhs rhs + map the key sequence lhs to rhs for normal mode, but disallow + mapping of rhs. + + :qn[oremap] lhs rhs + map the key sequence lhs to rhs for view mode, but disallow map- + ping of rhs. + + :vn[oremap] lhs rhs + map the key sequence lhs to rhs for visual mode, but disallow + mapping of rhs. + + :unmap + + :unm[ap] lhs + remove user mapping of lhs from normal and visual modes. + + :unm[ap]! lhs + remove user mapping of lhs from command line mode. + + :cunmap :dunmap :munmap :nunmap :qunmap + :vunmap + + :cu[nmap] lhs + remove user mapping of lhs from command line mode. + + :du[nmap] lhs + remove user mapping of lhs from dialog modes. + + :mu[nmap] lhs + remove user mapping of lhs from menu mode. + + :nun[map] lhs + remove user mapping of lhs from normal mode. + + :qun[map] lhs + remove user mapping of lhs from view mode. + + :vu[nmap] lhs + remove user mapping of lhs from visual mode. + +Ranges + The ranges implemented include: + 2,3 - from second to third file in the list (including it) + % - the entire directory. + . - the current position in the filelist. + $ - the end of the filelist. + 't - the mark position t. + + Examples: + + :%delete + + would delete all files in the directory. + + :2,4delete + + would delete the files in the list positions 2 through 4. + + :.,$delete + + would delete the files from the current position to the end of the + filelist. + + :3delete4 + + would delete the files in the list positions 3, 4, 5, 6. + + If a backward range is given :4,2delete - an query message is given and + user can chose what to do next. + + The builtin commands that accept a range are :d[elete] and :y[ank]. + +Command macros + The command macros may be used in user commands. + + %a User arguments. When user arguments contain macros, they are + expanded before preforming substitution of %a. + + %c %"c The current file under the cursor. + + %C %"C The current file under the cursor in the other directory. + + %f %"f All of the selected files. + + %F %"F All of the selected files in the other directory list. + + %b %"b Same as %f %F. + + %d %"d Full path to current directory. + + %D %"D Full path to other file list directory. + + %rx %"rx + Full paths to files in the register {x}. In case of invalid + symbol in place of {x}, it's processed with the rest of the line + and default register is used. + + %m Show command output in a menu. + + %M Same as %m, but l (or Enter) key is handled like for :locate and + :find commands. + + %u Process command output as list of paths and compose custom view + out of it. + + %U Same as %u, but implies less list updates inside vifm, which is + absence of sorting at the moment. + + %Iu same as %u, but gives up terminal before running external com- + mand. + + %IU same as %U, but gives up terminal before running external com- + mand. + + %S Show command output in the status bar. + + %q redirect command output to quick view, which is activated if + disabled. + + %s Execute command in split window of active terminal multiplexer + (ignored if not running inside one). + + %n Forbid using of terminal multiplexer to run the command. + + %i Completely ignore command output. + + + %pc Marks the end of the main command and the beginning of the clear + command for graphical preview, which is invoked on closing pre- + view of a file. + + %pd Marks a preview command as one that directly communicates with + the terminal. Beware that this is for things like sixel which + are self-contained sequences that depend only on current cursor + position, using this with anything else is likely to mangle ter- + minal state. + + The following dimensions and coordinates are in characters: + + %px x coordinate of top-left corner of preview area. + + %py y coordinate of top-left corner of preview area. + + %pw width of preview area. + + %ph height of preview area. + + + Use %% if you need to put a percent sign in your command. + + Note that %m, %M, %s, %S, %i, %u and %U macros are mutually exclusive. + Only the last one of them on the command will take effect. + + You can use file name modifiers after %c, %C, %f, %F, %b, %d and %D + macros. Supported modifiers are: + + - :p - full path + + - :u - UNC name of path (e.g. "\\server" in + "\\server\share"), Windows only. Expands to current computer name + for not UNC paths. + + - :~ - relative to the home directory + + - :. - relative to current directory + + - :h - head of the file name + + - :t - tail of the file name + + - :r - root of the file name (without last extension) + + - :e - extension of the file name (last one) + + - :s?pat?sub? - substitute the first occurrence of pat with sub. + You can use any character for '?', but it must not occur in pat or + sub. + + - :gs?pat?sub? - like :s, but substitutes all occurrences of pat with + sub. + + See ':h filename-modifiers' in Vim's documentation for the detailed + description. + + Using %x means expand corresponding macro escaping all characters that + have special meaning. And %"x means using of double quotes and escape + only backslash and double quote characters, which is more useful on + Windows systems. + + Position and quantity (if there is any) of %m, %M, %S or %s macros in + the command is unimportant. All their occurrences are removed from the + resulting command. + + %c and %f macros are expanded to file names only, when %C and %F are + expanded to full paths. %f and %F follow this in %b too. + + :com move mv %f %D + set the :move command to move all of the files selected in the + current directory to the other directory. + + The %a macro is replaced with any arguments given to an alias command. + All arguments are considered optional. + :com lsl !!ls -l %a - set the lsl command to execute ls -l with + or without an argument. + + :lsl + will list the directory contents of the current directory. + + :lsl filename + will list only the given filename. + + The macros can also be used in directly executing commands. ":!mv %f + %D" would move the current directory selected files to the other direc- + tory. + + Appending & to the end of a command causes it to be executed in the + background. Typically you want to run two kinds of external commands + in the background: + + - GUI applications that doesn't fork thus block vifm (:!sxiv %f &); + + - console tools that do not work with terminal (:!mv %f %D &). + + You don't want to run terminal commands, which require terminal input + or output something in background because they will mess up vifm's TUI. + Anyway, if you did run such a command, you can use Ctrl-L key to update + vifm's TUI. + + Rewriting the example command with macros given above with background- + ing: + + %m, %M, %s, %S, %u and %U macros cannot be combined with background + mark (" &") as it doesn't make much sense. + +Command backgrounding + Copy and move operation can take a lot of time to proceed. That's why + vifm supports backgrounding of this two operations. To run :copy, + :move or :delete command in the background just add " &" at the end of + a command. + + For each background operation a new thread is created. Job cancella- + tion can be requested in the :jobs menu via dd shortcut. + + You can see if command is still running in the :jobs menu. Back- + grounded commands have progress instead of process id at the line + beginning. + + Background operations cannot be undone. + +Cancellation + Note that cancellation works somewhat different on Windows platform due + to different mechanism of break signal propagation. One also might + need to use Ctrl-Break shortcut instead of Ctrl-C. + + There are two types of operations that can be cancelled: + + - file system operations; + + - mounting with FUSE (but not unmounting as it can cause loss of + data); + + - calls of external applications. + + Note that vifm never terminates applications, it sends SIGINT signal + and lets the application quit normally. + + When one of set of operations is cancelled (e.g. copying of 5th file of + 10 files), further operations are cancelled too. In this case undo + history will contain only actually performed operations. + + Cancelled operations are indicated by "(cancelled)" suffix appended to + information message on statusbar. + + File system operations + + Currently the following commands can be cancelled: :alink, :chmod, + :chown, :clone, :copy, :delete, :mkdir, :move, :restore, :rlink, + :touch. File putting (on p/P key) can be cancelled as well. It's not + hard to see that these are mainly long-running operations. + + Cancelling commands when they are repeated for undo/redo operations is + allowed for convenience, but is not recommended as further undo/redo + operations might get blocked by side-effects of partially cancelled + group of operations. + + These commands can't be cancelled: :empty, :rename, :substitute, :tr. + + Mounting with FUSE + + It's not considered to be an error, so only notification on the status + bar is shown. + + External application calls + + Each of this operations can be cancelled: :apropos, :find, :grep, + :locate. + +Patterns + :highlight, :filetype, :filextype, :fileviewer commands and 'classify' + option support globs, regular expressions and mime types to match file + names or their paths. + + There are six possible ways to write a single pattern: + + 1. [!]{comma-separated-name-globs} + + 2. [!]{{comma-separated-path-globs}} + + 3. [!]/name-regular-expression/[iI] + + 4. [!]//path-regular-expression//[iI] + + 5. [!] + + 6. undecorated-pattern + + First five forms can include leading exclamation mark that negates pat- + tern matching. + + The last form is implicitly refers to one of others. :highlight does + not accept undecorated form, while :filetype, :filextype, :fileviewer, + :select, :unselect and 'classify' treat it as list of name globs. + + Path patterns receive absolute path of the file that includes its name + component as well. + + To combine several patterns (AND them), make sure you're using one of + the first five forms and write patterns one after another, like this: + {*.vifm} Mind that if you make a mistake the whole string + will be treated as the sixth form. + + :filetype, :filextype and :fileviewer commands accept comma-separated + list of patterns instead of a single pattern, thus effectively handling + OR operation on them: + {*.vifm},{*.pdf} Forms that accept + comma-separated lists of patterns also process them as lists of alter- + natives. + + Patterns with regular expressions + + Regular expression patterns are case insensitive by default, see + description of commands, which might override default behaviour. + + Flags of regular expressions mean the following: + - "i" makes filter case insensitive; + - "I" makes filter case sensitive. They can be repeated multiple + times, but the later one takes precedence (e.g. "iiiI" is equivalent + to "I" and "IiIi" is the same as "i"). + + There are no implicit `^` or `$`, so make sure to specify them explic- + itly if the pattern should match the whole name or path. + + Patterns with globs + + "Globs" section below provides short overview of globs and some impor- + tant points that one needs to know about them. + + Patterns with mime-types + + Mime type matching is essentially globs matching applied to mime type + of a file instead of its name/path. Note: mime types aren't detected + on Windows. + + Examples + + Associate `evince` to PDF-files only inside `/home/user/downloads/` + directory (excluding its subdirectories): + + :filextype //^/home/user/downloads/[^/]*.pdf$// evince %f + + +Globs + Globs are always case insensitive as it makes sense in general case. + + `*`, `?`, `[` and `]` are treated as special symbols in the pattern. + E.g. + + :filetype * less %c + + matches all files. One can use character classes for escaping, so + + :filetype [*] less %c + + matches only one file name, the one which contains only asterisk sym- + bol. + + `*` means any number of any characters (possibly an empty substring), + with one exception: asterisk at the pattern beginning doesn't match dot + in the first position. E.g. + + :fileviewer *.zip,*.jar zip -sf %c + + associates using of `zip` program to preview all files with `zip` or + `jar` extensions as listing of their content, but `.file.zip` won't be + matched. + + `?` means any character at this position. E.g. + + :fileviewer ?.out file %c + + calls `file` tool for all files which have exactly one character before + their extension (e.g. a.out, b.out). + + Square brackets designate character class, which means that whole char- + acter class matches against any of characters listed in it. For exam- + ple + + :fileviewer *.[ch] highlight -O xterm256 -s dante --syntax c %c + + makes vifm call `highlight` program to colorize source and header files + in C language for a 256-color terminal. Equal command would be + + :fileviewer *.c,*.h highlight -O xterm256 -s dante --syntax c %c + + + Inside square brackets `^` or `!` can be used for symbol class negotia- + tion and the `-` symbol to set a range. `^` and `!` should appear + right after the opening square bracket. For example + + :filetype *.[!d]/ inspect_dir + + associates `inspect_dir` as additional handler for all directories that + have one character extension unless it's "d" letter. And + + :filetype [0-9].jpg sxiv + + associates `sxiv` picture viewer only for JPEG-files that contain sin- + gle digit in their name. + +:set options + Local options + These are kind of options that are local to a specific view. So + you can set ascending sorting order for left pane and descending + order for right pane. + + In addition to being local to views, each such option also has + two values: + + - local to current directory (value associated with current + location); + + - global to current directory (value associated with the + pane). + + The idea is that current directory can be made a temporary + exception to regular configuration of the view, until directory + change. Use :setlocal for that. :setglobal changes view value + not affecting settings until directory change. :set applies + changes immediately to all values. + + + 'aproposprg' + type: string + default: "apropos %a" + Specifies format for an external command to be invoked by the + :apropos command. The format supports expanding of macros, spe- + cific for a particular *prg option, and %% sequence for insert- + ing percent sign literally. This option should include the %a + macro to specify placement of arguments passed to the :apropos + command. If the macro is not used, it will be implicitly added + after a space to the value of this option. + + 'autochpos' + type: boolean + default: true + When disabled vifm will set cursor to the first line in the view + after :cd and :pushd commands instead of saved cursor position. + Disabling this will also make vifm clear information about cur- + sor position in the view history on :cd and :pushd commands (and + on startup if 'autochpos' is disabled in the vifmrc). l key in + the ":history ." and ":trashes" menus are treated like :cd com- + mand. This option also affects marks so that navigating to a + mark doesn't restore cursor position. + + When this option is enabled, more fine grained control over cur- + sor position is available via 'histcursor' option. + + 'columns' 'co' + type: integer + default: terminal width on startup + Terminal width in characters. + + 'caseoptions' + type: charset + default: "" + This option gives additional control over case sensitivity by + allowing overriding default behaviour to either always be case + sensitive or always be case insensitive. Possible values form + pairs of lower and upper case letters that configure specific + aspect of behaviour: + p - always ignore case of paths during completion. + P - always match case of paths during completion. + g - always ignore case of characters for f/F/;/,. + G - always match case of characters for f/F/;/,. + + At most one item of each pair takes affect, if both or more are + present, only the last one matters. When none of pair's ele- + ments are present, the behaviour is default (depends on operat- + ing system for path completion and on values of 'ignorecase' and + 'smartcase' options for file navigation). + + 'cdpath' 'cd' + type: string list + default: value of $CDPATH with commas instead of colons + Specifies locations to check on changing directory with relative + path that doesn't start with "./" or "../". When non-empty, + current directory is examined after directories listed in the + option. + + This option doesn't affect completion of :cd command. + + Example: + + set cdpath=~ + + This way ":cd bin" will switch to "~/bin" even if directory + named "bin" exists in current directory, while ":cd ./bin" com- + mand will ignore value of 'cdpath'. + + 'chaselinks' + type: boolean + default: false + When enabled path of view is always resolved to real path (with + all symbolic links expanded). + + 'classify' + type: string list + default: ":dir:/" + Specifies file name prefixes and suffixes depending on file type + or name. The format is either of: + - [{prefix}]:{filetype}:[{suffix}] + - [{prefix}]::{pattern}::[{suffix}] + Possible {pattern} forms are described in "Patterns" section + above. + + Priority rules: + - file name patterns have priority over type patterns + - file name patterns are matched in left-to-right order of + their appearance in this option + + Either {prefix} or {suffix} or both can be omitted (which is the + default for all unspecified file types), this means empty {pre- + fix} and/or {suffix}. {prefix} and {suffix} should consist of + at most eight characters. Elements are separated by commas. + Neither prefixes nor suffixes are part of file names, so they + don't affect commands which operate on file names in any way. + Comma (',') character can be inserted by doubling it. List of + file type names can be found in the description of filetype() + function. + + 'confirm' 'cf' + type: set + default: delete,permdelete + Defines which operations require confirmation: + - delete - moving files to trash (on d or :delete); + - permdelete - permanent deletion of files (on D or :delete! + command or on undo/redo operation). + + 'cpoptions' 'cpo' + type: charset + default: "fst" + Contains a sequence of single-character flags. Each flag + enables behaviour of older versions of vifm. Flags: + - f - when included, running :filter command results in not + inverted (matching files are filtered out) and :filter! in + inverted (matching files are left) filter, when omitted, meaning + of the exclamation mark changes to the opposite; + - s - when included, yy, dd and DD normal mode commands act on + selection, otherwise they operate on current file only; + - t - when included, (thus ) behave as and + switches active pane, otherwise and go forward in + the view history. It's possible to make both and to + work as expected by setting up the terminal to emit a custom + sequence when is pressed; see :histnext for details. + + 'cvoptions' + type: set + default: + Specifies whether entering/leaving custom views triggers events + that normally happen on entering/leaving directories: + - autocmds - trigger autocommands on entering/leaving custom + views; + - localopts - reset local options on entering/leaving custom + views; + - localfilter - reset local filter on entering/leaving custom + views. + + 'deleteprg' + type: string + default: "" + Specifies program to run on files that are permanently removed. + When empty, files are removed as usual, otherwise this command + is invoked on each file by appending its name. If the command + doesn't remove files, they will remain on the file system. + + 'dirsize' + type: enumeration + default: size + Controls how size of directories is displayed in file views. + The following values are possible: + - size - size of directory (i.e., size used to store list of + files) + - nitems - number of entries in the directory (excluding . and + ..) + + Size obtained via ga/gA overwrites this setting so seeing count + of files and occasionally size of directories is possible. + + 'dotdirs' + type: set + default: nonrootparent + Controls displaying of dot directories. The following values + are possible: + - rootparent - show "../" in root directory of file system + - nonrootparent - show "../" in non-root directories of file + system + + Note that empty directories always contain "../" entry regard- + less of value of this option. "../" disappears at the moment at + least one file is created. + + 'dotfiles' + type: boolean + default: false + Whether dot files are shown in the view. Can be controlled with + z* bindings. + + 'fastrun' + type: boolean + default: false + With this option turned on you can run partially entered com- + mands with unambiguous beginning using :! (e.g. :!Te instead of + :!Terminal or :!Te). + + 'fillchars' 'fcs' + type: string list + default: "" + Sets characters used to fill borders. + + item default used for + vborder:c ' ' left, middle and right vertical bor- + ders + + If value is omitted, its default value is used. Example: + + set fillchars=vborder:. + + 'findprg' + type: string + default: "find %s %a -print , -type d \( ! -readable -o ! -exe- + cutable \) -prune" + Specifies format for an external command to be invoked by the + :find command. The format supports expansion of macros specific + for this particular option and %% sequence for inserting percent + sign literally. The macros are: + + macro value/meaning + %s literal arguments of :find or + list of paths to search in + + %A empty or + literal arguments of :find + %a empty or + literal arguments of :find or + predicate followed by escaped arguments of :find + %p empty or + literal arguments of :find or + escaped arguments (parameters) of :find + + %u redirect output to custom view instead of showing a + menu + %U redirect output to unsorted custom view instead of + showing a menu + + Predicate in %a is "-name" on *nix and "-iname" on Windows. + + If both %u and %U are specified, %U is chosen. + + Some macros can be added implicitly: + - if %s isn't present, it's appended + - if neither of %a, %A and %p is present, %a is appended + - if neither of %s, %a, %A and %p is present, %s and %a are + appended in this order + + The macros slightly change their meaning depending on format of + :find's arguments: + - if the first argument points to an existing directory, %s is + assigned all arguments while %a, %A and %p are left empty + - otherwise: + - %s is assigned a dot (".") meaning current directory or + list of selected file names, if any + - %a, %A and %p are assigned literal arguments when first + argument starts with a dash ("-"), otherwise %a gets an escaped + version of the arguments with a predicate and %p contains + escaped version of the arguments + + Starting with Windows Server 2003 a `where` command is avail- + able. One can configure vifm to use it in the following way: + + set findprg="where /R %s %A" + + As the syntax of this command is rather limited, one can't use + :find command with selection of more than one item because the + command ignores all directory paths except for the last one. + + When using find port on Windows, another option is to setup + 'findprg' like this: + + set findprg="find %s %a" + + + 'followlinks' + type: boolean + default: true + Follow links on l or Enter. That is navigate to destination + file instead of treating the link as if it were target file. + Doesn't affects links to directories, which are always entered + (use gf key for directories). + + 'fusehome' + type: string + default: "($XDG_DATA_HOME/.local/share | $VIFM)/fuse/" + Directory to be used as a root dir for FUSE mounts. Value of + the option can contain environment variables (in form + "$envname"), which will be expanded (prepend it with a slash to + prevent expansion). The value should expand to an absolute + path. + + If you change this option, vifm won't remount anything. It + affects future mounts only. See "Automatic FUSE mounts" section + below for more information. + + 'gdefault' 'gd' + type: boolean + default: false + When on, 'g' flag is on for :substitute by default. + + 'grepprg' + type: string + default: "grep -n -H -I -r %i %a %s" + Specifies format for an external command to be invoked by the + :grep command. The format supports expanding of macros, spe- + cific for a particular *prg option, and %% sequence for insert- + ing percent sign literally. This option should include the %i + macro to specify placement of "-v" string when inversion of + results is requested, %a or %A macro to specify placement of + arguments passed to the :grep command and the %s macro to spec- + ify placement of list of files to search in. If some of the + macros are not used, they will be implicitly added after a space + to the value of the 'grepprg' option in the following order: %i, + %a, %s. Note that when neither %a nor %A are specified, it's %a + which is added implicitly. + + Optional %u or %U macro could be used (if both specified %U is + chosen) to force redirection to custom or unsorted custom view + respectively. + + See 'findprg' option for description of difference between %a + and %A. + + Example of setup to use ack (http://beyondgrep.com/) instead of + grep: + + set grepprg='ack -H -r %i %a %s' + + or The Silver Searcher (https://github.com/ggreer/the_sil- + ver_searcher): + + set grepprg='ag --line-numbers %i %a %s' + + + + 'histcursor' + type: set + default: startup,dirmark,direnter + Defines situations when cursor should be moved according to + directory history: + - startup - on loading file lists during startup + - dirmark - after navigating to a mark that doesn't specify + file + - direnter - on opening directory from a file list + + This option has no effect when 'autochpos' is disabled. + + Note that the list is not exhaustive and there are other situa- + tions when cursor is positioned automatically. + + 'history' 'hi' + type: integer + default: 15 + Maximum number of stored items in all histories. + + 'hlsearch' 'hls' + type: boolean + default: true + Highlight all matches of search pattern. + + 'iec' type: boolean + default: false + Use KiB, MiB, ... suffixes instead of K, M, ... when printing + size in human-friendly format. + + 'ignorecase' 'ic' + type: boolean + default: false + Ignore case in search patterns (:substitute, / and ? commands) + and characters after f and F commands. It doesn't affect file + filtering. + + 'incsearch' 'is' + type: boolean + default: false + When this option is set, search and view update for local filter + is be performed starting from initial cursor position each time + search pattern is changed. + + 'iooptions' + type: set + default: + Controls details of file operations. The following values are + available: + - fastfilecloning - perform fast file cloning (copy-on-write), + when available + (available on Linux and btrfs file system). + + 'laststatus' 'ls' + type: boolean + default: true + Controls if status bar is visible. + + 'lines' + type: integer + default: terminal height on startup + Terminal height in lines. + + 'locateprg' + type: string + default: "locate %a" + Specifies format for an external command to be invoked by the + :locate command. The format supports expanding of macros, spe- + cific for a particular *prg option, and %% sequence for insert- + ing percent sign literally. This option should include the %a + macro to specify placement of arguments passed to the :locate + command. If the macro is not used, it will be implicitly added + after a space to the value of this option. + + Optional %u or %U macro could be used (if both specified %U is + chosen) to force redirection to custom or unsorted custom view + respectively. + + 'mediaprg' + type: string + default: path to bundled script that supports udevil, udisks and + udisks2 + (using udisks2 requires python with dbus module + installed) + OS X: path points to a python script that uses diskutil + {only for *nix} + Specifies command to be used to manage media devices. Used by + :media command. + + The command can be passed the following parameters: + - list -- list media + - mount {device} -- mount a device + - unmount {path} -- unmount given mount point + + The output of `list` subcommand is parsed in search of lines + that start with one of the following prefixes: + - device= - specifies device path (e.g., "/dev/sde") + - label= - specifies optional device label (e.g., "Memory + card") + - info= - specifies arbitrary text to display next to + device (by + default "[label]" is used, if label is pro- + vided) + - mount-point= - specifies a mount point (can be absent or + appear more than once) + + All other lines are ignored. Each `device=` starts a new sec- + tion describing a device which should include two other possible + prefixes. + + `list` subcommand is assumed to always succeed, while exit code + of `mount` and `unmount` is taken into account to determine + whether operation was performed successfully. + + 'lsoptions' + type: string list + default: "" + scope: local + + Configures ls-like view. + + item used for + transposed filling view grid by columns rather than by + lines + + + 'lsview' + type: boolean + default: false + scope: local + When this option is set, directory view will be displayed in + multiple columns with file names similar to output of `ls -x` + command. See "ls-like view" section below for format descrip- + tion. This option has no effect if 'millerview' is on. + + 'milleroptions' + type: string list + default: "lsize:1,csize:1,rsize:1,rpreview:dirs" + scope: local + + Configures miller view. + + item default used for + lsize:num 0 left column + csize:num 1 center column (can't be disabled) + rsize:num 0 right column + rpreview:str dirs right column + + *size specifies ratios of columns. Each ratio is in the range + from 0 to 100 and values are adjusted to fit the limits. Zero + disables a column, but central (main) column can't be disabled. + + rpreview specifies what file-system objects should be previewed + in the right column and can take two values: dirs (only directo- + ries) or all. Both options don't include parent directory + (".."). + + Example of two-column mode which is useful in combination with + :view command: + + set milleroptions=lsize:1,csize:2 + + + 'millerview' + type: boolean + default: false + scope: local + When this option is set, directory view will be displayed in + multiple cascading columns. Ignores 'lsview'. + + 'mintimeoutlen' + type: integer + default: 150 + The fracture of 'timeoutlen' in milliseconds that is waited + between subsequent input polls, which affects various asynchro- + nous operations (detecting changes made by external applica- + tions, monitoring background jobs, redrawing UI). There are no + strict guarantees, however the higher this value is, the less is + CPU load in idle mode. + + 'number' 'nu' + type: boolean + default: false + scope: local + Print line number in front of each file name when 'lsview' + option is turned off. Use 'numberwidth' to control width of + line number. Also see 'relativenumber'. + + 'numberwidth' 'nuw' + type: integer + default: 4 + scope: local + Minimal number of characters for line number field. + + 'previewprg' + type: string + default: "" + scope: local + + External command to be used instead of preview programs config- + ured via :fileviewer command. + + Example: + + " always show git log in preview of files inside some reposi- + tory + au DirEnter '~/git-repo/**/*' setl previewprg='git log --color + -- %c 2>&1' + + 'quickview' + type: boolean + default: false + Whether quick view (:view) is currently active or not. + + 'relativenumber' 'rnu' + type: boolean + default: false + scope: local + Print relative line number in front of each file name when + 'lsview' option is turned off. Use 'numberwidth' to control + width of line number. Various combinations of 'number' and + 'relativenumber' lead to such results: + + nonumber number + + norelativenumber | first | 1 first + | second | 2 second + | third | 3 third + + relativenumber | 1 first | 1 first + | 0 second |2 second + | 1 third | 1 third + + + 'rulerformat' 'ruf' + type: string + default: "%l/%S " + Determines the content of the ruler. Its minimal width is 13 + characters and it's right aligned. Following macros are sup- + ported: + %= - separation point between left and right aligned halves of + the line + %l - file number + %L - total number of files in view (including filtered out + ones) + %x - number of files excluded by filters + %0- - old name for %x macro + %S - number of displayed files + %= - separation point between left and right align items + %% - percent sign + %[ - designates beginning of an optional block + %] - designates end of an optional block + + Percent sign can be followed by optional minimum field width. + Add '-' before minimum field width if you want field to be right + aligned. + + Example: + + set rulerformat='%2l-%S%[ +%x%]' + + 'runexec' + type: boolean + default: false + Run executable file on Enter or l. + + 'scrollbind' 'scb' + type: boolean + default: false + When this option is set, vifm will try to keep difference of + scrolling positions of two windows constant. + + 'scrolloff' 'so' + type: integer + default: 0 + Minimal number of screen lines to keep above and below the cur- + sor. If you want cursor line to always be in the middle of the + view (except at the beginning or end of the file list), set this + option to some large value (e.g. 999). + + 'shell' 'sh' + type: string + default: $SHELL or "/bin/sh" or "cmd" (on MS-Windows) + Full path to the shell to use to run external commands. On *nix + a shell argument can be supplied. + + 'shellcmdflag' 'shcf' + type: string + default: "-c" or "/C" (for cmd.exe on MS-Windows) + Command-line option used to pass a command to 'shell'. It's + used in contexts where command comes from the user. + + 'shortmess' 'shm' + type: charset + default: "p" + Contains a sequence of single-character flags. Each flag + enables shortening of some message displayed by vifm in the TUI. + Flags: + - L - display only last directory in tab line instead of full + path. + - M - shorten titles in windows of terminal multiplexers cre- + ated by vifm down to file name instead of using full path. + - T - truncate status-bar messages in the middle if they are + too long to fit on the command line. "..." will appear in the + middle. + - p - use tilde shortening in view titles. + + + 'showtabline' 'stal' + type: enumeration + default: multiple + Specifies when tab line should be displayed. Possible values: + - never - never display tab line + - multiple - show tab line only when there are at least two + tabs + - always - display tab line always + + Alternatively 0, 1 and 2 Vim-like values are also accepted and + correspond to "never", "multiple" and "always" respectively. + + + 'sizefmt' + type: string list + default: "units:iec" + Configures the way size is formatted in human-friendly + way. + + item value meaning + units: iec Use 1024 byte units (K or + KiB, etc.). + See 'iec' option. + si Use 1000 byte units (KB, + etc.). + precision: i > 0 How many fraction digits + to consider. + {not set} Precision of 1 for inte- + ger part < 10, + 0 otherwise (provides old + behaviour). + space {present} Insert space before unit + symbols. + This is the default. + nospace {present} Do not insert space + before unit symbols. + + Numbers are rounded from zero. Trailing zeros are + dropped. + + Example: + + set sizefmt=units:iec,precision:2,nospace + + + 'slowfs' + type: string list + default: "" + only for *nix + A list of mounter fs name beginnings (first column in + /etc/mtab or /proc/mounts) or paths prefixes for + fs/directories that work too slow for you. This option + can be used to stop vifm from making some requests to + particular kinds of file systems that can slow down file + browsing. Currently this means don't check if directory + has changed, skip check if target of symbolic links + exists, assume that link target located on slow fs to be + a directory (allows entering directories and navigating + to files via gf). If you set the option to "*", it means + all the systems are considered slow (useful for cygwin, + where all the checks might render vifm very slow if there + are network mounts). + + Example for autofs root /mnt/autofs: + + set slowfs+=/mnt/autofs + + 'smartcase' 'scs' + type: boolean + default: false + Overrides the ignorecase option if the search pattern + contains at least one upper case character. Only used + when ignorecase option is enabled. It doesn't affect + file filtering. + + 'sort' type: string list + default: +name on *nix and +iname on Windows + scope: local + Sets list of sorting keys (first item is primary key, + second is secondary key, etc.): + [+-]ext - extension of files and directories + [+-]fileext - extension of files only + [+-]name - name (including extension) + [+-]iname - name (including extension, ignores case) + [+-]type - file type + (dir/reg/exe/link/char/block/sock/fifo) + [+-]dir - directory grouping (directory < file) + [+-]gid - group id (*nix only) + [+-]gname - group name (*nix only) + [+-]mode - file type derived from its mode (*nix + only) + [+-]perms - permissions string (*nix only) + [+-]uid - owner id (*nix only) + [+-]uname - owner name (*nix only) + [+-]nlinks - number of hard links (*nix only) + [+-]inode - inode number (*nix only) + [+-]size - size + [+-]nitems - number of items in a directory (zero for + files) + [+-]groups - groups extracted via regexps from 'sort- + groups' + [+-]target - symbolic link target (empty for other + file types) + [+-]atime - time accessed (e.g. read, executed) + [+-]ctime - time changed (changes in metadata, e.g. + mode) + [+-]mtime - time modified (when file contents is + changed) + + Note: look for st_atime, st_ctime and st_mtime in "man 2 + stat" for more information on time keys. + + '+' means ascending sort for this key, and '-' means + descending sort. + + "dir" key is somewhat similar in this regard but it's + added implicitly: when "dir" is not specified, sorting + behaves as if it was the first key in the list. That's + why if one wants sorting algorithm to mix directories and + files, "dir" should be appended to sorting option, for + example like this: + + set sort+=dir + + or + + set sort=-size,dir + + Value of the option is checked to include dir key and + default sorting key (name on *nix, iname on Windows). + Here is what happens if one of them is missing: + + - type key is added at the beginning; + + - default key is added at the end; + + all other keys are left untouched (at most they are + moved). + + This option also changes view columns according to pri- + mary sorting key set, unless 'viewcolumns' option is not + empty. + + 'sortnumbers' + type: boolean + default: false + scope: local + Natural sort of (version) numbers within text. + + 'sortgroups' + type: string + default: "" + scope: local + Sets comma-separated list of regular expressions to use + for group sorting, double comma is literal comma. Each + expression should contain at least one group or its value + will be considered to be always empty. Only first match + of each regular expression is considered. Groups are + considered from right to first similar to 'sort', first + group divides list of files into sub-groups, each of + which is sorted by the second group and so on. + + Example: + set sortgroups=-(done|todo).* this would put files + with "-done" in their names above all files with "-todo". + + 'sortorder' + type: enumeration + default: ascending + Sets sort order for primary key: ascending, descending. + + 'statusline' 'stl' + type: string + default: "" + Determines the content of the status line (the line right + above command-line). Empty string means use same format + like in previous versions. Following macros are sup- + ported: + + - %t - file name (considering value of the 'classify' + option) + + - %T - symbolic link target (empty for other filetypes) + + - %f - file name relative to current directory (considers + 'classify') + + - %A - file attributes (permissions on *nix or properties + on Windows) %u - user name or uid (if it cannot be + resolved) + + - %g - group name or gid (if it cannot be resolved) + + - %s - file size in human readable format + + - %E - size of selected files in human readable format, + same as %s when no files are selected, except that it + will never show size of ../ in visual mode, since it + cannot be selected + + - %d - file modification date (uses 'timefmt' option) + + - %D - path of the other pane for single-pane layout + + - %a - amount of free space available at current parti- + tion + + - %z - short tips/tricks/hints that chosen randomly after + one minute period + + - %{} - evaluate arbitrary vifm expression + '', e.g. '&sort' + + - %* - resets or applies one of User1..User9 highlight + groups; reset happens when width field is 0 or not + specified, one of groups gets picked when width field + is in the range from 1 to 9 + + - all 'rulerformat' macros + + Percent sign can be followed by optional minimum field + width. Add '-' before minimum field width if you want + field to be right aligned. + + On Windows file properties include the following flags + (upper case means flag is on): + A - archive + H - hidden + I - content isn't indexed + R - readonly + S - system + C - compressed + D - directory + E - encrypted + P - reparse point (e.g. symbolic link) + Z - sparse file + + Example without colors: + + set statusline=" %t%= %A %10u:%-7g %15s %20d %{&sort} + " + + Example with colors: + + highlight User1 ctermbg=yellow + highlight User2 ctermbg=blue ctermfg=white cterm=bold + set statusline="%1* %-26t %2* %= %1* %A %2* %7u:%-7g %1* + %-5s %2* %d " + + + 'suggestoptions' + type: string list + default: + Controls when, for what and how suggestions are dis- + played. The following values are available: + - normal - in normal mode; + - visual - in visual mode; + - view - in view mode; + - otherpane - use other pane to display sugges- + tions, when available; + - delay[:num] - display suggestions after a small + delay (to do not annoy if you just want to type a fast + shortcut consisting of multiple keys), num specifies the + delay in ms (500 by default), 'timeoutlen' at most; + - keys - include shortcuts (commands and + selectors); + - foldsubkeys - fold multiple keys with common pre- + fix; + - marks - include marks; + - registers[:num] - include registers, at most num files + (5 by default). + + 'syncregs' + type: string + default: + Specifies identifier of group of instances that share + registers between each other. When several instances of + vifm have this option set to identical value, they auto- + matically synchronize contents of their registers on + operations which use them. + + 'syscalls' + type: boolean + default: false + When disabled, vifm will rely on external applications to + perform file-system operations, otherwise system calls + are used instead (much faster and supports progress + tracking). The option should eventually be removed. + Mostly *nix-like systems are affected. + + 'tabscope' + type: enumeration + default: global + Picks style of tabs, which defines what a single tab con- + tains. Possible values: + - global - tab describes complete UI of two views and + how they are arranged + - pane - tab is located "inside" a pane and manages it + and quick view + + 'tabstop' 'ts' + type: integer + default: value from curses library + Number of spaces that a Tab in the file counts for. + + 'timefmt' + type: string + default: "%m/%d %H:%M" + Format of time in file list. See "man 1 date" or "man 3 + strftime" for details. + + 'timeoutlen' 'tm' + type: integer + default: 1000 + The time in milliseconds that is waited for a mapped key + in case of already typed key sequence is ambiguous. + + 'title' + type: boolean + default: true when title can be restored, false otherwise + When enabled, title of the terminal or terminal multi- + plexer's window is updated according to current location. + Because not all terminals support setting title, this + works only if `$TERM` value matches one of the following + conditions: + - equals "xterm" or starts with "xterm-" + - equals "rxvt" or starts with "rxvt-" + - equals "screen" or starts with "screen-" + - equals "aterm" + - equals "Eterm" + + 'trash' + type: boolean + default: true + Use trash directory. See "Trash directory" section + below. + + 'trashdir' + type: string + default: on *nix: + "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash" + or if $VIFM/Trash doesn't exist + "%r/.vifm-Trash-%u,$XDG_DATA_HOME/vifm/Trash,%r/.vifm- + Trash" + on Windows: + "%r/.vifm-Trash,$XDG_DATA_HOME/vifm/Trash" + List of trash directory path specifications, separated + with commas. Each list item either defines an absolute + path to trash directory or a path relative to a mount + point root when list element starts with "%r/". Value of + the option can contain environment variables (of form + "$envname"), which will be expanded (prepend $ with a + slash to prevent expansion). Environment variables are + expanded when the option is set. + + On *nix, if element ends with "%u", the mark is replaced + with real user ID and permissions are set so that only + that only owner is able to use it. + Note that even this setup is not completely secure when + combined with "%r/" and it's overall safer to keep files + in home directory, but that implies cost of copying files + between partitions. + + When new file gets cut (deleted) vifm traverses each ele- + ment of the option in the order of their appearance and + uses first trash directory that it was able to create or + that is already writable. + + Default value tries to use trash directory per mount + point and falls back to ~/.vifm/Trash on failure. + + Will attempt to create the directory if it does not + exist. See "Trash directory" section below. + + 'tuioptions' 'to' + type: charset + default: "ps" + Each flag configures some aspect of TUI appearance. The + flags are: + p - when included: + * file list inside a pane gets additional single char- + acter padding on left and right sides; + * quick view and view mode get single character pad- + ding. + s - when included, left and right borders (side borders, + hence "s" character) are visible. + u - use Unicode characters in the TUI (Unicode ellipsis + instead of "..."). + + 'undolevels' 'ul' + type: integer + default: 100 + Maximum number of changes that can be undone. Note that + here single file operation is used as a unit, not opera- + tion, i.e. deletion of 101 files will exceed default + limit. + + 'vicmd' + type: string + default: "vim" + Command used to edit files in various contexts. Amper- + sand sign at the end (regardless whether it's preceded by + space or not) means backgrounding of command. + + Background flag is ignored in certain context where vifm + waits for the editor to finish. Such contexts include + any command that spawns editor to change list of file + names or a command, with :rename being one example. `-f` + is also appended to prevent forking in such cases, so the + command needs to handle the flag. + + Additionally `+{num}` and `+'call cursor()'` arguments + are used to position cursor when location is known. + + 'viewcolumns' + type: string + default: "" + scope: local + Format string containing list of columns in the view. + When this option is empty, view columns to show are cho- + sen automatically using sorting keys (see 'sort') as a + base. Value of this option is ignored if 'lsview' is + set. See "Column view" section below for format descrip- + tion. + + An example of setting the options for both panes (note + :windo command): + + windo set viewcolumns=-{name}..,6{size},11{perms} + + 'vixcmd' + type: string + default: value of 'vicmd' + Same as 'vicmd', but takes precedence over it when run- + ning inside a graphical environment. + + 'vifminfo' + type: set + default: bookmarks,bmarks + Controls what will be saved in the $VIFM/vifminfo file. + + bmarks - named bookmarks + bookmarks - marks, except special ones like '< and '> + tui - state of the user interface (sorting, num- + ber of windows, quick + view state, active view) + dhistory - directory history + state - file name and dot filters and terminal + multiplexers integration + state + cs - primary color scheme + savedirs - save last visited directory (requires + dhistory) + chistory - command line history + shistory - search history (/ and ? commands) + phistory - prompt history + fhistory - history of local filter (see description + of the "=" normal mode + command) + dirstack - directory stack overwrites previous stack, + unless stack of + current session is empty + registers - registers content + options - all options that can be set with the :set + command (obsolete) + filetypes - associated programs and viewers (obsolete) + commands - user defined commands (see :command + description) (obsolete) + + 'vimhelp' + type: boolean + default: false + Use vim help format. + + 'wildmenu' 'wmnu' + type: boolean + default: false + Controls whether possible matches of completion will be + shown above the command line. + + 'wildstyle' + type: enumeration + default: bar + Picks presentation style of wild menu. Possible values: + - bar - one-line with left-to-right cursor + - popup - multi-line with top-to-bottom cursor + + 'wordchars' + type: string list + default: "1-8,14-31,33-255" (that is all non-whitespace + characters) + Specifies which characters in command-line mode should be + considered as part of a word. Value of the option is + comma-separated list of ranges. If both endpoints of a + range match, single endpoint is enough (e.g. "a" = "a- + a"). Both endpoints are inclusive. There are two + accepted forms: character representing itself or number + encoding character according to ASCII table. In case of + ambiguous characters (dash, comma, digit) use numeric + form. Accepted characters are in the range from 0 to + 255. Any Unicode character with code greater than 255 is + considered to be part of a word. + + The option affects Alt-D, Alt-B and Alt-F, but not Ctrl- + W. This is intentionally to allow two use cases: + + - Moving by WORDS and deletion by words. + - Moving by words and deletion by WORDS. + + To get the latter use the following mapping: + + cnoremap + + Also used for abbreviations. + + 'wrap' type: boolean + default: true + Controls whether to wrap text in quick view. + + 'wrapscan' 'ws' + type: boolean + default: true + Searches wrap around end of the list. + +Mappings + Map arguments + + LHS of mappings can be preceded by arguments which take the form + of special sequences: + + + Postpone UI updates until RHS is completely processed. + + In case of builtin mapping causing conflict for a user- + defined mapping (e.g., `t` builtin to a partially typed + `ta` user-defined mapping), ignore the builtin mapping + and wait for input indefinitely as opposed to default be- + haviour of triggering the builtin mapping after a delay + defined by 'timeoutlen'. Example: + + nnoremap tw :set wrap! + nnoremap tn :set number! + nnoremap tr :set relativenumber! + + + Special sequences + + Since it's not easy to enter special characters there are sev- + eral special sequences that can be used in place of them. They + are: + + Enter key. + + Escape key. + + + Space key. + + Less-than character (<). + + provides a way to disable a mapping (by mapping it to + ). + + Backspace key (see key conflict description below). + + + Tabulation and Shift+Tabulation keys. + + + Home/End. + + + Arrow keys. + + + PageUp/PageDown. + + + Delete key. and mean different codes, but + is more common. + + + Insert key. + + ,,...,,,,,, + Control + some key (see key conflict description below). + + only for *nix + Control + Space. + + ,,..., + ,,..., Alt + some key. + + ,,..., + ,,..., only for *nix + Alt + Ctrl + some key. + + - + Functional keys. + + - + only for MS-Windows + functional keys with Control key pressed. + + - + only for MS-Windows + functional keys with Alt key pressed. + + - + only for MS-Windows + functional keys with Shift key pressed. + + Note that due to the way terminals process their input, several + keyboard keys might be mapped to single key code, for example: + + - and ; + + - and ; + + - and ; + + - etc. + + Most of the time they are defined consistently and don't cause + surprises, but and are treated differently in differ- + ent environments (although they match each other all the time), + that's why they correspond to different keys in vifm. As a con- + sequence, if you map or be sure to repeat the mapping + with the other one so that it works in all environments. Alter- + natively, provide your mapping in one form and add one of the + following: + + " if mappings with in the LHS work + map + " if mappings with in the LHS work + map + + Whitespace + + vifm removes whitespace characters at the beginning and end of + commands. That's why you may want to use at the end of + rhs in mappings. For example: + + cmap man + + will put "man " in line when you hit the key in the command + line mode. + +Expression syntax + Supported expressions is a subset of what VimL provides. + + Expression syntax summary, from least to most significant: + + expr1 expr2 + expr2 || expr2 .. logical OR + + expr2 expr3 + expr3 && expr3 .. logical AND + + expr3 expr4 + expr4 == expr4 equal + expr4 != expr4 not equal + expr4 > expr4 greater than + expr4 >= expr4 greater than or equal + expr4 < expr4 smaller than + expr4 <= expr4 smaller than or equal + + expr4 expr5 + expr5 + expr5 .. number addition + expr5 - expr5 .. number subtraction + + expr5 expr6 + expr6 . expr6 .. string concatenation + + expr6 expr7 + - expr6 unary minus + + expr6 unary plus + ! expr6 logical NOT + + expr7 number number constant + "string" string constant, \ is special + 'string' string constant, ' is doubled + &option option value + $VAR environment variable + v:var builtin variable + function(expr1, ...) function call + (expr1) nested expression + + ".." indicates that the operations in this level can be concate- + nated. + + expr1 + ----- + expr2 || expr2 + + Arguments are converted to numbers before evaluation. + + Result is non-zero if at least one of arguments is non-zero. + + It's right associative and with short-circuiting, so sub-expres- + sions are evaluated from left to right until result of whole + expression is determined (i.e., until first non-zero) or end of + the expression. + + expr2 + ----- + expr3 && expr3 + + Arguments are converted to numbers before evaluation. + + Result is non-zero only if both arguments are non-zero. + + It's right associative and with short-circuiting, so sub-expres- + sions are evaluated from left to right until result of whole + expression is determined (i.e., until first zero) or end of the + expression. + + expr3 + ----- + expr4 {cmp} expr4 + + Compare two expr4 expressions, resulting in a 0 if it evaluates + to false or 1 if it evaluates to true. + + equal == + not equal != + greater than > + greater than or equal >= + smaller than < + smaller than or equal <= + + Examples: + + 'a' == 'a' == 1 + 'a' > 'b' == 1 + 'a' == 'b' == 0 + '2' > 'b' == 0 + 2 > 'b' == 1 + 2 > '1b' == 1 + 2 > '9b' == 0 + -1 == -'1' == 1 + 0 == '--1' == 1 + + expr4 + ----- + expr5 + expr5 .. number addition expr5 - expr5 .. number + subtraction + + Examples: + + 1 + 3 - 3 == 1 + 1 + '2' == 3 + + expr5 + ----- + expr6 . expr6 .. string concatenation + + Examples: + + 'a' . 'b' == 'ab' + 'aaa' . '' . 'c' == 'aaac' + + expr6 + ----- + + - expr6 unary minus + + expr6 unary plus + ! expr6 logical NOT + + For '-' the sign of the number is changed. + For '+' the number is unchanged. + For '!' non-zero becomes zero, zero becomes one. + + A String will be converted to a Number first. + + These operations can be repeated and mixed. Examples: + + --9 == 9 + ---9 == -9 + -+9 == 9 + !-9 == 0 + !'' == 1 + !'x' == 0 + !!9 == 1 + + expr7 + ----- + + number number constant + ----- + + Decimal number. Examples: + + 0 == 0 + 0000 == 0 + 01 == 1 + 123 == 123 + 10000 == 10000 + + string + ------ + "string" string constant + + Note that double quotes are used. + + A string constant accepts these special characters: + \b backspace + \e escape + \n newline + \r return + \t tab + \\ backslash + \" double quote + + Examples: + + "\"Hello,\tWorld!\"" + "Hi,\nthere!" + + literal-string + -------------- + 'string' string constant + + Note that single quotes are used. + + This string is taken as it is. No backslashes are removed or + have a special meaning. The only exception is that two quotes + stand for one quote. + + Examples: + + 'All\slashes\are\saved.' + 'This string contains doubled single quotes ''here''' + + option + ------ + &option option value (local one is preferred, if + exists) &g:option global option value &l:option + local option value + + Examples: + + echo 'Terminal size: '.&columns.'x'.&lines + if &columns > 100 + + Any valid option name can be used here (note that "all" in ":set + all" is a pseudo option). See ":set options" section above. + + environment variable + -------------------- + $VAR environment variable + + The String value of any environment variable. When it is not + defined, the result is an empty string. + + Examples: + + 'This is my $PATH env: ' . $PATH + 'vifmrc at ' . $MYVIFMRC . ' is used.' + + builtin variable + -------------------- + v:var builtin variable + + Information exposed by vifm for use in scripting. + + v:count + count passed to : command, 0 by default. Can be used in map- + pings to pass + count to a different command. + v:count1 + same as v:count, but 1 by default. + v:servername + See below. + + function call + ------------- + function(expr1, ...) function call + + See "Functions" section below. + + Examples: + + "'" . filetype('.') . "'" + filetype('.') == 'reg' + + expression nesting + ------------------ + (expr1) nested expression + + Groups any other expression of arbitrary complexity enforcing + order in which operators are applied. + + +Functions + USAGE RESULT DESCRIPTION + + chooseopt({opt}) String Queries choose parameters + passed on startup. + executable({expr}) Integer Checks whether {expr} command + available. + expand({expr}) String Expands special keywords in + {expr}. + extcached({cache}, {path}, {extcmd}) + String Caches output of {extcmd} per + {cache} and + {path} combination. + filetype({fnum} [, {resolve}]) + String Returns file type from posi- + tion. + fnameescape({expr}) String Escapes {expr} for use in a + :command. + getpanetype() String Returns type of current pane. + has({property}) Integer Checks whether instance has + {property}. + layoutis({type}) Integer Checks whether layout is of + type {type}. + paneisat({loc}) Integer Checks whether current pane is + at {loc}. + system({command}) String Executes shell command and + returns its output. + tabpagenr([{arg}]) Integer Returns number of current or + last tab. + term({command}) String Like system(), but for inter- + active commands. + + chooseopt({opt}) + + Retrieves values of options related to file choosing. {opt} can + be one of: + files returns argument of --choose-files or empty + string + dir returns argument of --choose-dir or empty string + cmd returns argument of --on-choose or empty string + delimiter returns argument of --delimiter or the default + one (\n) + + executable({expr}) + + If {expr} is absolute or relative path, checks whether path des- + tination exists and refers to an executable, otherwise checks + whether command named {expr} is present in directories listed in + $PATH. Checks for various executable extensions on Windows. + Returns boolean value describing result of the check. + + Example: + + " use custom default viewer script if it's available and + installed + " in predefined system directory, otherwise try to find it + elsewhere + if executable('/usr/local/bin/defviewer') + fileview * /usr/local/bin/defviewer %c + else + if executable('defviewer') + fileview * defviewer %c + endif + endif + + expand({expr}) + + Expands environment variables and macros in {expr} just like + it's done for command-line commands. Returns a string. See + "Command macros" section above. + + Examples: + + " percent sign + :echo expand('%%') + " the last part of directory name of the other pane + :echo expand('%D:t') + " $PATH environment variable (same as `:echo $PATH`) + :echo expand('$PATH') + + extcached({cache}, {path}, {extcmd}) + + Caches value of {extcmd} external command automatically updating + it as necessary based on monitoring change date of a {path}. + The cache is invalidated when file or its meta-data is updated. + A single path can have multiple caches associated with it. + + {path} value is normalized, but symbolic links in it aren't + resolved. + + Example: + + " display number and size of blocks actually used by a file or + directory + set statusline+=" Uses: %{ extcached('uses', + expand('%c'), + expand('stat --for- + mat=%%bx%%B %c')) }" + + filetype({fnum} [, {resolve}]) + + The result is a string, which represents file type and is one of + the list: + exe executables + reg regular files + link symbolic links + broken broken symbolic links (appears only when resolving) + dir directories + char character devices + block block devices + fifo pipes + sock *nix domain sockets + ? unknown file type (should not normally appear) + + The result can also be an empty string in case of invalid argu- + ment. + + Parameter {fnum} can have following values: + - '.' to get type of file under the cursor in the active + pane + - numerical value base 1 to get type of file on specified + line number + + Optional parameter {resolve} is treated as a boolean and speci- + fies whether symbolic links should be resolved. + + fnameescape({expr}) + + Escapes parameter to make it suitable for use as an argument of + a :command. List of escaped characters includes %, which is + doubled. + + Usage example: + + " navigate to most recently modified file in current directory + execute 'goto' fnameescape(system('ls -t | head -1')) + + getpanetype() + + Retrieves string describing type of current pane. Possible + return values: + regular regular file listing of some directory + custom custom file list (%u) + very-custom very custom file list (%U) + tree tree view + + has({property}) + + Allows examining internal parameters from scripts to e.g. figure + out environment in which application is running. Returns 1 if + property is true/present, otherwise 0 is returned. Currently + the following properties are supported (anything else will yield + 0): + unix runs in *nix-like environment (including Cygwin) + win runs on Windows + + Usage example: + + " skip user/group on Windows + if !has('win') + let $RIGHTS = '%10u:%-7g ' + endif + + execute 'set' 'statusline=" %t%= %A '.$RIGHTS.'%15E %20d "' + + layoutis({type}) + + Checks whether current interface layout is {type} or not, where + {type} can be: + only single-pane mode + split double-pane mode (either vertical or horizon split) + vsplit vertical split (left and right panes) + hsplit horizontal split (top and bottom panes) + + Usage example: + + " automatically split vertically before enabling preview + :nnoremap w :if layoutis('only') | vsplit | endif | view! + + paneisat({loc}) + + Checks whether position of active pane in current layout matches + one of the following locations: + top pane reaches top border + bottom pane reaches bottom border + left pane reaches left border + right pane reaches right border + + system({command}) + + Runs the command in shell and returns its output (joined stan- + dard output and standard error streams). All trailing newline + characters are stripped to allow easy appending to command out- + put. Ctrl-C should interrupt the command. + + Use this function to consume output of external commands that + don't require user interaction and term() for interactive com- + mands that make use of terminal and are capable of handling + stream redirection. + + Usage example: + + " command to enter .git/ directory of git-repository (when ran + inside one) + command! cdgit :execute 'cd' system('git rev-parse --git-dir') + + tabpagenr([{arg}]) + + When called without arguments returns number of current tab page + base one. + + When called with "$" as an argument returns number of the last + tab page base one, which is the same as number of tabs. + + term({command}) + + Same as system() function, but user interface is shutdown during + the execution of the command, which makes sure that external + interactive applications won't affect the way terminal is used + by vifm. + + Usage example: + + " command to change directory by picking it via fzf + command! fzfcd :execute 'cd' "'".term('find -type d | fzf 2> + /dev/tty')."'" + +Menus and dialogs + When navigating to some path from a menu there is a difference + in end location depending on whether path has trailing slash or + not. Files normally don't have trailing slashes so "file/" + won't work and one can only navigate to a file anyway. On the + other hand with directories there are two options: navigate to a + directory or inside of it. To allow both use cases, the first + one is used on paths like "dir" and the second one for "dir/". + + Commands + + :range navigate to a menu line. + + :exi[t][!] :q[uit][!] :x[it][!] + leave menu mode. + + :noh[lsearch] + reset search match highlighting. + + :w[rite] {dest} + write all menu lines into file specified by {dest}. + + General + + j, Ctrl-N - move down. + k, Ctrl-P - move up. + Enter, l - select and exit the menu. + Ctrl-L - redraw the menu. + + Escape, Ctrl-C, ZZ, ZQ, q - quit. + + In all menus + + The following set of keys has the same meaning as in normal + mode. + + Ctrl-B, Ctrl-F + Ctrl-D, Ctrl-U + Ctrl-E, Ctrl-Y + /, ? + n, N + [count]G, [count]gg + H, M, L + zb, zt, zz + + zh - scroll menu items [count] characters to the right. + zl - scroll menu items [count] characters to the left. + zH - scroll menu items half of screen width characters to the + right. + zL - scroll menu items half of screen width characters to the + left. + + : - enter command line mode for menus (currently only :exi[t], + :q[uit], :x[it] and :{range} are supported). + + b - interpret content of the menu as list of paths and use it to + create custom view in place of previously active pane. See + "Custom views" section below. + B - same as above, but creates unsorted view. + + v - load menu content into quickfix list of the editor (Vim com- + patible by assumption) or if list doesn't have separators after + file names (colons) open each line as a file name. + + + Below is description of additional commands and reaction on + selection in some menus and dialogs. + + Apropos menu + + Selecting menu item runs man on a given topic. Menu won't be + closed automatically to allow view several pages one by one. + + Command-line mode abbreviations menu + + Type dd on an abbreviation to remove it. + + c leaves menu preserving file selection and inserts right-hand + side of selected command into command-line. + + Color scheme menu + + Selecting name of a color scheme applies it the same way as if + ":colorscheme " was executed on the command-line. + + Commands menu + + Selecting command executes it with empty arguments (%a). + + dd on a command to remove. + + Marks menu + + Selecting mark navigates to it. + + dd on a mark to remove it. + + Bookmarks menu + + Selecting a bookmark navigates to it. + + Type dd on a bookmark to remove it. + + gf and e also work to make it more convenient to bookmark files. + + Trash (:lstrash) menu + + r on a file name to restore it from trash. + + dd deletes file under the cursor. + + Trashes menu + + dd empties selected trash in background. + + Directory history and Trashes menus + + Selecting directory name will change directory of the current + view as if :cd command was used. + + Directory stack menu + + Selecting directory name will rotate stack to put selected + directory pair at the top of the stack. + + Filetype menu + + Commands from vifmrc or typed in command-line are displayed + above empty line. All commands below empty line are from .desk- + top files. + + c leaves menu preserving file selection and inserts command + after :! in command-line mode. + + Grep, find, locate, bookmarks and user menu with navigation (%M + macro) + + gf - navigate previously active view to currently selected item. + Leaves menu mode except for grep menu. Pressing Enter key has + the same effect. + + e - open selected path in the editor, stays in menu mode. + + c - leave menu preserving file selection and insert file name + after :! in command-line mode. + + User menu without navigation (%m macro) + + c leaves menu preserving file selection and inserts whole line + after :! in command-line mode. + + Grep menu + + Selecting file (via Enter or l key) opens it in editor set by + 'vicmd' at given line number. Menu won't be closed automati- + cally to allow viewing more than one result. + + See above for "gf" and "e" keys description. + + Command-line history menu + + Selecting an item executes it as command-line command, search + query or local filter. + + c leaves menu preserving file selection and inserts line into + command-line of appropriate kind. + + Volumes menu + + Selecting a drive navigates previously active pane to the root + of that drive. + + Fileinfo dialog + + Enter, q - close dialog + + Sort dialog + + h, Space - switch ascending/descending. + q - close dialog + + One shortcut per sorting key (see the dialog). + + Attributes (permissions or properties) dialog + + h, Space - check/uncheck. + q - close dialog + + Item states: + + - * - checked flag. + + - X - means that it has different value for files in selection. + + - d (*nix only) - (only for execute flags) means u-x+X, g-x+X or + o-x+X argument for the chmod program. If you're not on OS X + and want to remove execute permission bit from all files, but + preserve it for directories, set all execute flags to 'd' and + check 'Set Recursively' flag. + + Jobs menu + + dd requests cancellation of job under cursor. The job won't be + removed from the list, but marked as being cancelled (if cancel- + lation was successfully requested). A message will pop up if + the job has already stopped. Note that on Windows cancelling + external programs like this might not work, because their parent + shell doesn't have any windows. + + e key displays errors of selected job if any were collected. + They are displayed in a new menu, but you can get back to jobs + menu by pressing h. + + + Undolist menu + + r - reset undo position to group under the cursor. + + + Media menu + + Selecting a device either mounts (if it wasn't mounted yet) or + navigates to its first mount point. + + Selecting a mount point navigates to it. + + Selecting "not mounted" line causes mounting. + + Selecting any other line does nothing. + + r - reload the list. + + m - mount/unmount device (cursor should be positioned on lines + under device information). + + [ - put cursor on the previous device. + + ] - put cursor on the next device. + + +Custom views + Definition + + Normally file views contain list of files from a single direc- + tory, but sometimes it's useful to populate them with list of + files that do not belong to the same directory, which is what + custom views are for. + + Presentation + + Custom views are still related to directory they were in before + custom list was loaded. Path to that directory (original direc- + tory) can be seen in the title of a custom view. + + Files in same directory have to be named differently, this + doesn't hold for custom views thus seeing just file names might + be rather confusing. In order to give an idea where files come + from and when possible, relative paths to original directory of + the view is displayed, otherwise full path is used instead. + + Custom views normally don't contain any inexistent files. + + Navigation + + Custom views have some differences related to navigation in reg- + ular views. + + gf - acts similar to gf on symbolic links and navigates to the + file at its real + location. + + h - go to closes parent node in tree view, otherwise return to + the original directory. + + gh - return to the original directory. + + Opening ".." entry also causes return to the original directory. + + History + + Custom list exists only while it's visible, once left one can't + return to it, so there is no appearances of it in any history. + + Filters + + Only local filter affects content of the view. This is inten- + tional, presumably if one loads list, precisely that list should + be displayed (except for inexistent paths, which are ignored). + + Search + + Although directory names are visible in listing, they are not + searchable. Only file names are taken into account (might be + changed in future, searching whole lines seems quite reason- + able). + + Sorting + + Contrary to search sorting by name works on whole visible part + of file path. + + Highlight + + Whole file name is highlighted as one entity, even if there are + directory elements. + + Updates + + Reloads can occur, though they are not automatic due to files + being scattered among different places. On a reload, inexistent + files are removed and meta-data of all other files is updated. + + Once custom view forgets about the file, it won't add it back + even if it's created again. So not seeing file previously + affected by an operation, which was undone is normal. + + Operations + + All operations that add files are forbidden for custom views. + For example, moving/copying/putting files into a custom view + doesn't work, because it doesn't make much sense. + + On the other hand, operations that use files of a custom view as + a source (e.g. yanking, copying, moving file from custom view, + deletion) and operations that modify names are all allowed. + +Compare views + Kinds + + :compare can produce four different results depending on argu- + ments: + - single compare view (ofone and either listall or listdups); + - single custom view (ofone and listunique); + - two compare views (ofboth and either listall or listdups); + - two custom views (ofboth and listunique). + + The first two display files of one file system tree. Here + duplicates are files that have at least one copy in the same + tree. The other two kinds of operation compare two trees, in + which duplicates are files that are found in both trees. + + Lists of unique files are presented in custom views because + there is no file grouping to preserve as all file ids are guar- + anteed to be distinct. + + Creation + + Arguments passed to :compare form four categories each with its + own prefix and is responsible for particular property of opera- + tion. + + Which files to compare: + - ofboth - compares files of two panes against each other; + - ofone - compares files of the same directory. + + How files are compared: + - byname - by their name only; + - bysize - only by their size; + - bycontents - by combination of size and hash of file con- + tents. + + Which files to display: + - listall - all files; + - listunique - unique files only; + - listdups - only duplicated files. + + How results are grouped (has no effect if "ofone" specified): + - groupids - files considered identical are always adjacent + in output; + - grouppaths - file system ordering is preferred (this also + enables displaying identically named files as mismatches). + + Which files to omit: + - skipempty - ignore empty files. + + Each argument can appear multiple times, the rightmost one of + the group is considered. Arguments alter default behaviour + instead of substituting it. + + Examples + + The defaults corresponds to probably the most common use case of + comparing files in two trees with grouping by paths, so the fol- + lowing are equivalent: + + :compare + :compare bycontents grouppaths + :compare bycontents listall ofboth grouppaths + + Another use case is to find duplicates in the current sub-tree: + + :compare listdups ofone + + The following command lists files that are unique to each pane: + + :compare listunique + + Look + + The view can't switch to ls-like view as it's unable to display + diff-like data. + + Comparison views have second column displaying id of the file, + files with same id are considered to be equal. The view columns + configuration is predefined. + + Behaviour + + When two views are being compared against each other the follow- + ing changes to the regular behaviour apply: + - views are scrolled synchronously (as if 'scrollbind' was + set); + - views' cursors are synchronized; + - local filtering is disabled (its results wouldn't be meaning- + ful); + - zd excludes groups of adjacent identical files, 1zd gives + usual behaviour; + - sorting is permanently disabled (ordering is fixed); + - removed files hide their counter pairs; + - exiting one of the views terminates the other immediately; + - renaming files isn't blocked, but isn't taken into account + and might require regeneration of comparison; + - entries which indicate absence of equivalent file have empty + names and can be matched as such; + - when unique files of both views are listed custom views can + be empty, this absence of unique files is stated clearly. + + One compare view has similar properties (those that are applica- + ble for single pane). + + Files are gathered in this way: + - recursively starting at current location of the view; + - dot files are excluded if view hides them at the moment of + comparison; + - directories are not taken into account; + - symbolic links to directories are ignored. + +Startup + On startup vifm determines several variables that are used dur- + ing the session. They are determined in the order they appear + below. + + On *nix systems $HOME is normally present and used as is. On + Windows systems vifm tries to find correct home directory in the + following order: + - $HOME variable; + - $USERPROFILE variable (on Windows only); + - a combination of $HOMEDRIVE and $HOMEPATH variables (on Win- + dows only). + + vifm tries to find correct configuration directory by checking + the following places: + - $VIFM variable; + - parent directory of the executable file (on Windows only); + - $HOME/.vifm directory; + - $APPDATA/Vifm directory (on Windows only); + - $XDG_CONFIG_HOME/vifm directory; + - $HOME/.config/vifm directory. + + vifm tries to find correct configuration file by checking the + following places: + - $MYVIFMRC variable; + - vifmrc in parent directory of the executable file (on Windows + only); + - $VIFM/vifmrc file. + +Configure + See "Startup" section above for the explanations on $VIFM and + $MYVIFMRC. + + The vifmrc file contains commands that will be executed on vifm + startup. There are two such files: global and local. Global + one is at {prefix}/etc/vifm/vifmrc, see $MYVIFMRC variable + description for the search algorithm used to find local vifmrc. + Global vifmrc is loaded before the local one, so that the later + one can redefine anything configured globally. + + Use vifmrc to set settings, mappings, filetypes etc. To use + multi line commands precede each next line with a slash (white- + space before slash is ignored, but all spaces at the end of the + lines are saved). For example: + + set + \smartcase + + equals "setsmartcase". When + + set + \ smartcase + + equals "set smartcase". + + The $VIFM/vifminfo file contains session settings. You may edit + it by hand to change the settings, but it's not recommended to + do that, edit vifmrc instead. You can control what settings + will be saved in vifminfo by setting 'vifminfo' option. Vifm + always writes this file on exit unless 'vifminfo' option is + empty. Marks, bookmarks, commands, histories, filetypes, file- + viewers and registers in the file are merged with vifm configu- + ration (which has bigger priority). + + Generally, runtime configuration has bigger priority during + merging, but there are some exceptions: + + - directory stack stored in the file is not overwritten unless + something is changed in vifm session that performs merge; + + - each mark or bookmark is marked with a timestamp, so that + newer value is not overwritten by older one, thus no matter + from where it comes, the newer one wins. + + The $VIFM/scripts directory can contain shell scripts. vifm + modifies its PATH environment variable to let user run those + scripts without specifying full path. All subdirectories of the + $VIFM/scripts will be added to PATH too. Script in a subdirec- + tory overlaps script with the same name in all its parent direc- + tories. + + The $VIFM/colors/ and {prefix}/etc/vifm/colors/ directories con- + tain color schemes. Available color schemes are searched in + that order, so on name conflict the one in $VIFM/colors/ wins. + + Each color scheme should have ".vifm" extension. This wasn't + the case before and for this reason the following rules apply + during lookup: + + - if there is no file with .vifm extension, all regular files + are listed; + + - otherwise only files with .vifm extension are listed (with + the extension being truncated). + +Automatic FUSE mounts + vifm has a builtin support of automated FUSE file system mounts. + It is implemented using file associations mechanism. To enable + automated mounts, one needs to use a specially formatted program + line in filetype or filextype commands. These use special + macros, which differ from macros in commands unrelated to FUSE. + Currently three formats are supported: + + 1) FUSE_MOUNT This format should be used in case when all infor- + mation needed for mounting all files of a particular type is the + same. E.g. mounting of tar files don't require any file spe- + cific options. + + Format line: + FUSE_MOUNT|mounter %SOURCE_FILE %DESTINATION_DIR [%FOREGROUND] + + Example filetype command: + + :filetype FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR + + 2) FUSE_MOUNT2 This format allows one to use specially formatted + files to perform mounting and is useful for mounting remotes, + for example remote file systems over ftp or ssh. + + Format line: + FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND] + + Example filetype command: + + :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR + + Example file content: + + root@127.0.0.1:/ + + 3) FUSE_MOUNT3 + + This format is equivalent to FUSE_MOUNT, but omits unmounting. + It is useful for cases, when unmounting isn't needed, like when + using AVFS. + + Example :filetype command: + + :filetype + *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.deb + \ {Mount with avfs} + \ FUSE_MOUNT3|mount-avfs %DESTINATION_DIR %SOURCE_FILE + + Example `mount-avfs` helper script: + + #!/bin/sh + + dest=$1 + file=$2 + + rmdir "$dest" + ln -s "$HOME/.avfs$file#/" "$dest" + + All % macros are expanded by vifm at runtime and have the fol- + lowing meaning: + - %SOURCE_FILE is replaced by full path to selected file; + - %DESTINATION_DIR is replaced by full path to mount direc- + tory, which is created by vifm basing on the value of 'fusehome' + option; + - %PARAM value is filled from the first line of file (whole + line), though in the future it can be changed to whole file con- + tent; + - %FOREGROUND means that you want to run mount command as a + regular command (required to be able to provide input for commu- + nication with mounter in interactive way). + + %FOREGROUND is an optional macro. Other macros are not manda- + tory, but mount commands likely won't work without them. + + %CLEAR is obsolete name of %FOREGROUND, which is still sup- + ported, but might be removed in future. Its use is discouraged. + + Unlike macros elsewhere, these are recognized only if they + appear at the end of a command or are followed by a space. + There is no way to escape % either. These are historical limi- + tations, which might be addressed in the future. + + The mounted FUSE file systems will be automatically unmounted in + two cases: + + - when vifm quits (with ZZ, :q, etc. or when killed by sig- + nal); + + - when you explicitly leave mount point going up to its parent + directory (with h, Enter on "../" or ":cd ..") and other + pane is not in the same directory or its child directories. + +View look + vifm supports displaying of file list view in two different + ways: + + - in a table mode, when multiple columns can be set using + 'viewcolumns' option (see "Column view" section below for + details); + + - in a multicolumn list manner which looks almost like `ls -x` + command output (see "ls-like view" section below for + details). + + The look is local for each view and can be chosen by changing + value of the 'lsview' boolean option. + + Depending on view look some of keys change their meaning to + allow more natural cursor moving. This concerns mainly h, j, k, + l and other similar navigation keys. + + Also some of options can be ignored if they don't affect view + displaying in selected look. For example value of 'viewcolumns' + when 'lsview' is set. + +ls-like view + When this view look is enabled by setting 'lsview' option on, + vifm will display files in multiple columns. Number of columns + depends on the length of the longest file name present in cur- + rent directory of the view. Whole file list is automatically + reflowed on directory change, terminal or view resize. + + View looks close to output of `ls -x` command, so files are + listed left to right in rows. + + In this mode file manipulation commands (e.g. d) don't work + line-wise like they do in Vim, since such operations would be + uncommon for file manipulation tasks. Thus, for example, dd + will remove only current file. + + By default the view is filled by lines, 'lsoptions' can be used + to get filling by columns. + + Note that tree-view and compare view inhibit ls-like view. + +Column view + View columns are described by a comma-separated list of column + descriptions, each of which has the following format + [ '-' ] [ fw ( [ '.' tw ] | '%' ) ] '{' type '}' '.'{0,3} + where fw stands for full width and tw stands for text width. + + So it basically consists of four parts: + 1. Optional alignment specifier + 2. Optional width specifier + 3. Mandatory column name + 4. Optional cropping specifier + + Alignment specifier + + It's an optional minus or asterisk sign as the first symbol of + the string. + + Specifies type of text alignment within a column. Three types + are supported: + + - left align + + set viewcolumns=-{name} + + - right align (default) + + set viewcolumns={name} + + - dynamic align + + It's like left alignment, but when the text is bigger than the + column, the alignment is made at the right (so the part of the + field is always visible). + + set viewcolumns=*{name} + + Width specifier + + It's a number followed by a percent sign, two numbers (second + one should be less than or equal to the first one) separated + with a dot or a single number. + + Specifies column width and its units. There are three size + types: + + - absolute size - column width is specified in characters + + set viewcolumns=-100{name},20.15{ext} + + results in two columns with lengths of 100 and 20 and a + reserved space of five characters on the left of second col- + umn. + + - relative (percent) size - column width is specified in per- + cents of view width + + set viewcolumns=-80%{name},15%{ext},5%{mtime} + + results in three columns with lengths of 80/100, 15/100 and + 5/100 of view width. + + - auto size (default) - column width is automatically determined + + set viewcolumns=-{name},{ext},{mtime} + + results in three columns with length of one third of view + width. There is no size adjustment to content, since it will + slow down rendering. + + Columns of different sizing types can be freely mixed in one + view. Though sometimes some of columns can be seen partly or be + completely invisible if there is not enough space to display + them. + + Column name + + This is just a sort key surrounded with curly braces or {root}, + e.g. + + {name},{ext},{mtime} + + {name} and {iname} keys are the same and present both for con- + sistency with 'sort' option. + + Following keys don't have corresponding sorting keys: + + - {root} - display name without extension (as a complement + for {ext}) + + - {fileroot} - display name without extension for anything + except for directories and symbolic links to directories (as + a complement for {fileext}) + + Empty curly braces ({}) are replaced with the default secondary + column for primary sort key. So after the next command view will + be displayed almost as if 'viewcolumns' is empty, but adding + ellipsis for long file names: + + set viewcolumns=-{name}..,6{}. + + Cropping specifier + + It's from one to three dots after closing curly brace in column + format. + + Specifies type of text truncation if it doesn't fit in the col- + umn. Currently three types are supported: + + - truncation - text is truncated + + set viewcolumns=-{name}. + + results in truncation of names that are too long too fit in + the view. + + - adding of ellipsis - ellipsis on the left or right are added + when needed + + set viewcolumns=-{name}.. + + results in that ellipsis are added at the end of too long + file names. + + - none (default) - text can pass column boundaries + + set viewcolumns=-{name}...,{ext} + + results in that long file names can partially be written on + the ext column. + +Color schemes + The color schemes in vifm can be applied in two different ways: + + - as the primary color scheme; + + - as local to a pane color scheme. + + Both types are set using :colorscheme command, but of different + forms: + + - :colorscheme color_scheme_name - for the primary color + scheme; + + - :colorscheme color_scheme_name directory - for local color + schemes. + + Look of different parts of the TUI (Text User Interface) is + determined in this way: + + - Border, TabLine, TabLineSel, TopLineSel, TopLine, CmdLine, + ErrorMsg, StatusLine, JobLine, SuggestBox and WildMenu are + always determined by the primary color scheme; + + - CurrLine, Selected, Directory, Link, BrokenLink, Socket, + Device, Executable, Fifo, CmpMismatch, Win, AuxWin and Oth- + erWin are determined by primary color scheme and a set of + local color schemes, which can be empty. + + There might be a set of local color schemes because they are + structured hierarchically according to file system structure. + For example, having the following piece of file system: + + ~ + `-- bin + | + `-- my + + Two color schemes: + + # ~/.vifm/colors/for_bin + highlight Win cterm=none ctermfg=white ctermbg=red + highlight CurrLine cterm=none ctermfg=red ctermbg=black + + # ~/.vifm/colors/for_bin_my + highlight CurrLine cterm=none ctermfg=green ctermbg=black + + And these three commands in the vifmrc file: + + colorscheme Default + colorscheme for_bin ~/bin + colorscheme for_bin_my ~/bin/my + + File list will look in the following way for each level: + + - ~/ - Default color scheme + black background + cursor with blue background + + - ~/bin/ - mix of Default and for_bin color schemes + red background + cursor with black background and red foreground + + - ~/bin/my/ - mix of Default, for_bin and for_bin_my color + schemes + red background + cursor with black background and green foreground + +Trash directory + vifm has support of trash directory, which is used as temporary + storage for deleted files or files that were cut. Using trash + is controlled by the 'trash' option, and exact path to the trash + can be set with 'trashdir' option. Trash directory in vifm dif- + fers from the system-wide one by default, because of possible + incompatibilities of storing deleted files among different file + managers. But one can set 'trashdir' to "~/.local/share/Trash" + to use a "standard" trash directory. + + There are two scenarios of using trash in vifm: + + 1. As a place for storing files that were cut by "d" and may + be inserted to some other place in file system. + + 2. As a storage of files, that are deleted but not purged yet. + + The first scenario uses deletion ("d") operations to put files + to trash and put ("p") operations to restore files from trash + directory. Note that such operations move files to and from + trash directory, which can be long term operations in case of + different partitions or remote drives mounted locally. + + The second scenario uses deletion ("d") operations for moving + files to trash directory and :empty command-line command to + purge all previously deleted files. + + Deletion and put operations depend on registers, which can point + to files in trash directory. Normally, there are no nonexistent + files in registers, but vifm doesn't keep track of modifications + under trash directory, so one shouldn't expect value of regis- + ters to be absolutely correct if trash directory was modified + not by operation that are meant for it. But this won't lead to + any issues with operations, since they ignore nonexistent files. + +Client-Server + vifm supports remote execution of command-line mode commands, + remote changing of directories and expression evaluation. This + is possible using --remote and --remote-expr command-line argu- + ments. + + To execute a command remotely combine --remote argument with -c + or +. For example: + + vifm --remote -c 'cd /' + vifm --remote '+cd /' + + To change directory not using command-line mode commands one can + specify paths right after --remote argument, like this: + + vifm --remote / + vifm --remote ~ + vifm --remote /usr/bin /tmp + + Evaluating expression remotely might be useful to query informa- + tion about an instance, for example its location: + + vifm --remote-expr 'expand("%d")' + + If there are several running instances, the target can be speci- + fied with --server-name option (otherwise, the first one lexico- + graphically is used): + + vifm --server-name work --remote ~/work/project + + List of names of running instances can be obtained via + --server-list option. Name of the current one is available via + v:servername. + + + v:servername + server name of the running vifm instance. Empty if + client-server feature is disabled. + +Plugin + Plugin for using vifm in vim as a file selector. + + Commands: + + :EditVifm select a file or files to open in the current + buffer. + :Vifm alias for :EditVifm. + :SplitVifm split buffer and select a file or files to open. + :VsplitVifm vertically split buffer and select a file or files + to open. + :DiffVifm select a file or files to compare to the current + file with + :vert diffsplit. + :TabVifm select a file or files to open in tabs. + + Each command accepts up to two arguments: left pane directory + and right pane directory. After arguments are checked, vifm + process is spawned in a special "file-picker" mode. To pick + files just open them either by pressing l, i or Enter keys, or + by running :edit command. If no files are selected, file under + the cursor is opened, otherwise whole selection is passed to the + plugin and opened in vim. + + The plugin have only two settings. It's a string variable named + g:vifm_term to let user specify command to run GUI terminal. By + default it's equal to 'xterm -e'. And another string variable + named g:vifm_exec, which equals "vifm" by default and specifies + path to vifm's executable. To pass arguments to vifm use + g:vifm_exec_args, which is empty by default. + + To use the plugin copy the vifm.vim file to either the system + wide vim/plugin directory or into ~/.vim/plugin. + + If you would prefer not to use the plugin and it is in the sys- + tem wide plugin directory add + + let loaded_vifm=1 + + to your ~/.vimrc file. + +Reserved + The following command names are reserved and shouldn't be used + for user commands. + + g[lobal] + v[global] + +ENVIRONMENT + VIFM Points to main configuration directory (usually + ~/.vifm/). + + MYVIFMRC + Points to main configuration file (usually + ~/.vifm/vifmrc). + + These environment variables are valid inside vifm and also can + be used to configure it by setting some of them before running + vifm. + + When $MYVIFMRC isn't set, it's made as $VIFM/vifmrc (exception + for Windows: vifmrc in the same directory as vifm.exe has higher + priority than $VIFM/vifmrc). + + See "Startup" section above for more details. + + VIFM_FUSE_FILE + On execution of external commands this variable is set to + the full path of file used to initiate FUSE mount of the + closes mount point from current pane directory up. It's + not set when outside FUSE mount point. When vifm is used + inside terminal multiplexer, it tries to set this vari- + able as well (it doesn't work this way on its own). + +SEE ALSO + vifm-convert-dircolors(1), vifm-pause(1) + + Website: https://vifm.info/ + Wiki: https://wiki.vifm.info/ + + Esperanto translation of the documentation by Sebastian Cyprych: + http://cyprych.neostrada.pl/tekstoj/komputiloj/vifm-help.eo.html + +AUTHOR + Vifm was written by ksteen + And currently is developed by xaizek + + + +vifm 0.10.1 July 29, 2019 VIFM(1) diff --git a/vifm/.config/vifm/vifminfo b/vifm/.config/vifm/vifminfo new file mode 100644 index 00000000..f36d177f --- /dev/null +++ b/vifm/.config/vifm/vifminfo @@ -0,0 +1,7 @@ +# You can edit this file by hand, but it's recommended not to do that. + +# Marks: + +# Bookmarks: + +# Trash content: diff --git a/vifm/.config/vifm/vifmrc b/vifm/.config/vifm/vifmrc new file mode 100644 index 00000000..624edc47 --- /dev/null +++ b/vifm/.config/vifm/vifmrc @@ -0,0 +1 @@ +colorscheme quantum-black diff --git a/zsh/.zshrc b/zsh/.zshrc index 41c4488a..99fb085f 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -1,17 +1,14 @@ -# Source Prezto. -if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then - source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" -fi - -# Autocompletions for fzf -[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh - -bindkey '^P' history-beginning-search-backward -bindkey '^N' history-beginning-search-forward - # Load the shell dotfiles, and then some: # * ~/.path can be used to extend `$PATH`. # * ~/.extra can be used for other settings you don’t want to commit. for file in ~/.{path,exports,aliases,functions,extra}; do [ -r "$file" ] && [ -f "$file" ] && source "$file" done + +# Source Prezto +if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then + source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" +fi + +bindkey '^P' history-beginning-search-backward +bindkey '^N' history-beginning-search-forward From 0cf459e35315138f068e31b800431141e8943c5f Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 5 Aug 2019 20:29:20 +0200 Subject: [PATCH 298/532] Set up gopass --- gopass/.config/gopass/config.yml | 2 +- gopass/.config/gopass/gopass_wrapper.sh | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gopass/.config/gopass/config.yml b/gopass/.config/gopass/config.yml index 8922279e..a0877e3d 100644 --- a/gopass/.config/gopass/config.yml +++ b/gopass/.config/gopass/config.yml @@ -14,7 +14,7 @@ root: notifications: false path: gpgcli-gitcli-fs+file:///Users/tobi/.password-store recipient_hash: - .gpg-id: 3078443836354333433239424536304446350aa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 + .gpg-id: 3078433830414639384438363635433537390aa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 safecontent: true usesymbols: true mounts: {} diff --git a/gopass/.config/gopass/gopass_wrapper.sh b/gopass/.config/gopass/gopass_wrapper.sh index 9d8b0752..ff5f60ea 100755 --- a/gopass/.config/gopass/gopass_wrapper.sh +++ b/gopass/.config/gopass/gopass_wrapper.sh @@ -1,14 +1,14 @@ #!/bin/sh if [ -f ~/.gpg-agent-info ] && [ -n "$(pgrep gpg-agent)" ]; then - source ~/.gpg-agent-info + . ~/.gpg-agent-info export GPG_AGENT_INFO else - eval $(gpg-agent --daemon) + eval "$(gpg-agent --daemon)" fi -export PATH="$PATH:/usr/local/bin" # required on MacOS/brew -export GPG_TTY="$(tty)" +GPG_TTY="$(tty)" +export GPG_TTY /usr/local/bin/gopass jsonapi listen From 6bcd8383d65d0a98b2f22b932e96be54adf41d71 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 5 Aug 2019 21:20:54 +0200 Subject: [PATCH 299/532] Add gopass and GPG --- Brewfile | 3 ++- bash/.exports | 3 +++ gopass/.config/gopass/gopass_wrapper.sh | 8 ++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Brewfile b/Brewfile index ec3adc14..9734a002 100644 --- a/Brewfile +++ b/Brewfile @@ -21,7 +21,9 @@ brew "diff-so-fancy" brew "fd" brew "fzf" brew "git" +brew "gnupg" brew "golangci/tap/golangci-lint" +brew "gopass" brew "hadolint" brew "htop" brew "jq" @@ -59,7 +61,6 @@ cask "skype" cask "spotify" cask "virtualbox" -mas "1Password", id: 443987910 mas "Affinity Designer", id: 824171161 mas "Affinity Photo", id:824183456 mas "BetterSnapTool", id: 417375580 diff --git a/bash/.exports b/bash/.exports index d56d71ae..09b856cc 100644 --- a/bash/.exports +++ b/bash/.exports @@ -14,3 +14,6 @@ export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follo # Enable Go modules by default export GO111MODULE=on + +# Set correct TTY for GPG +export GPG_TTY="$(tty)" diff --git a/gopass/.config/gopass/gopass_wrapper.sh b/gopass/.config/gopass/gopass_wrapper.sh index ff5f60ea..9d8b0752 100755 --- a/gopass/.config/gopass/gopass_wrapper.sh +++ b/gopass/.config/gopass/gopass_wrapper.sh @@ -1,14 +1,14 @@ #!/bin/sh if [ -f ~/.gpg-agent-info ] && [ -n "$(pgrep gpg-agent)" ]; then - . ~/.gpg-agent-info + source ~/.gpg-agent-info export GPG_AGENT_INFO else - eval "$(gpg-agent --daemon)" + eval $(gpg-agent --daemon) fi -GPG_TTY="$(tty)" -export GPG_TTY +export PATH="$PATH:/usr/local/bin" # required on MacOS/brew +export GPG_TTY="$(tty)" /usr/local/bin/gopass jsonapi listen From 6d7d8bbaa8634b41e6297e7444c4da06a182160d Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 14 Aug 2019 14:48:29 +0200 Subject: [PATCH 300/532] Remove unused software --- Brewfile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Brewfile b/Brewfile index 9734a002..e400f7ce 100644 --- a/Brewfile +++ b/Brewfile @@ -55,9 +55,8 @@ cask "appcleaner" cask "docker" cask "dropbox" cask "firefox" -cask "graphql-playground" cask "imageoptim" -cask "skype" +cask "signal" cask "spotify" cask "virtualbox" @@ -66,4 +65,3 @@ mas "Affinity Photo", id:824183456 mas "BetterSnapTool", id: 417375580 mas "PopClip", id: 445189367 mas "Slack", id: 803453959 -mas "WhatsApp", id: 1147396723 From e4a6467aff1dd0290976a69811976520a72bc397 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 18 Aug 2019 18:39:27 +0200 Subject: [PATCH 301/532] Remove unused vim config items --- vim/.plugins.vimrc | 3 --- 1 file changed, 3 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 7bce84c9..dc3b5b27 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -112,8 +112,6 @@ xmap (neosnippet_expand_target) " Go Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' ,'for': ['go','gomod'] } let g:go_fmt_command = 'goimports' -let g:go_def_mode='gopls' -let g:go_info_mode='gopls' let g:go_metalinter_command='golangci-lint' let g:go_highlight_types = 1 let g:go_highlight_functions = 1 @@ -134,7 +132,6 @@ if has("autocmd") autocmd FileType go nmap t (go-test) endif Plug 'zchee/deoplete-go', { 'do': 'make', 'for': 'go' } -Plug 'sebdah/vim-delve', { 'for': 'go' } " Rust Plug 'rust-lang/rust.vim', { 'for': 'rust' } From 7b4fbbf03c94f74aa913b851e6f365061bd6efa9 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 19 Aug 2019 18:23:50 +0200 Subject: [PATCH 302/532] Describe adding secret keys in README --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index bd6c330f..714c0762 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,9 @@ I mainly work with [Go](https://golang.org), [Rust](https://www.rust-lang.org), **WARNING: This may install and/or remove software and change your configs!** +1. Either import an existing PGP key pair by using `gpg --import my-key.asc` and `gpg --import my-key-pub.asc` or create a new one by following the [GitHub](https://help.github.com/en/articles/generating-a-new-gpg-key) guide. You need to use the same name and email address as an ID that you have configured in `git/.gitconfig` in order to correctly sign your commits. +1. Either import an existing SSH key pair by copying it to `~/.ssh/id_rsa` and `~/.ssh/id_rsa.pub` or create a new one by following the [GitHub](https://help.github.com/en/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) guide. + ## Quick Installation without customization (not recommended unless you're the owner of this repo :wink:) 1. Run the following command: From d3e291c7f44862c5fb23ab2039dec3788bca5cc3 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 22 Aug 2019 16:21:12 +0200 Subject: [PATCH 303/532] Install correct package for neovim python support --- gopass/.config/gopass/config.yml | 16 ---------------- init.sh | 4 ++-- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/gopass/.config/gopass/config.yml b/gopass/.config/gopass/config.yml index a0877e3d..2bfbc8fb 100644 --- a/gopass/.config/gopass/config.yml +++ b/gopass/.config/gopass/config.yml @@ -1,20 +1,4 @@ root: - askformore: false - autoclip: true - autoprint: false - autoimport: true autosync: true - check_recipient_hash: false - cliptimeout: 45 - concurrency: 1 - editrecipients: false - nocolor: false - noconfirm: true - nopager: false - notifications: false - path: gpgcli-gitcli-fs+file:///Users/tobi/.password-store - recipient_hash: - .gpg-id: 3078433830414639384438363635433537390aa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 safecontent: true usesymbols: true -mounts: {} diff --git a/init.sh b/init.sh index 09da48f3..2475b523 100755 --- a/init.sh +++ b/init.sh @@ -82,7 +82,7 @@ case "$(uname)" in sudo easy_install pip fi # Install the Python neovim package - pip install --upgrade --user neovim + pip install --upgrade --user pynvim # Install vim-plug curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ @@ -201,7 +201,7 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' ln -s ~/.vimrc ~/.config/nvim/init.vim # Install the Python neovim package - pip install neovim --upgrade --user + pip install --upgrade --user pynvim # Install vim-plug curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ From f64c74e88ae4756b646851413cbda5ee05e26ef4 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 23 Aug 2019 08:46:28 +0200 Subject: [PATCH 304/532] Use sudo to update rubygems --- bash/.functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/.functions b/bash/.functions index 1c96ab81..a119591d 100644 --- a/bash/.functions +++ b/bash/.functions @@ -206,7 +206,7 @@ pacu() { # Ruby gems if [ -x "$(command -v gem)" ]; then printf '\e[1mUpdating Ruby gems\e[0m\n' - (gem update --system --force && gem update --force && gem cleanup) & + (sudo gem update --system --force && gem update --force && gem cleanup) & processes+=("$!") fi From b164062fb2600e25ac0f92787d95ee27de2850b4 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 25 Aug 2019 00:25:59 +0200 Subject: [PATCH 305/532] Add lolcat --- Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Brewfile b/Brewfile index e400f7ce..93f27f23 100644 --- a/Brewfile +++ b/Brewfile @@ -27,6 +27,7 @@ brew "gopass" brew "hadolint" brew "htop" brew "jq" +brew "lolcat" brew "mas" brew "neovim" brew "openshift-cli" From c40bd1421b9ef3d6319586e35119b436f88ca224 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 5 Sep 2019 13:38:37 +0200 Subject: [PATCH 306/532] Upgrade Go to 1.13 --- bash/.exports | 3 --- bash/.functions | 3 ++- tmux/.tmux.conf | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/bash/.exports b/bash/.exports index 09b856cc..378fc298 100644 --- a/bash/.exports +++ b/bash/.exports @@ -12,8 +12,5 @@ export HISTCONTROL='ignoreboth'; # Search only desired files with fzf export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/*" --glob "!bin/*" --glob "!build/*" --glob "!coverage/*" --glob "!dist/*" --glob "!target/*"' -# Enable Go modules by default -export GO111MODULE=on - # Set correct TTY for GPG export GPG_TTY="$(tty)" diff --git a/bash/.functions b/bash/.functions index a119591d..7b1ecba2 100644 --- a/bash/.functions +++ b/bash/.functions @@ -76,6 +76,7 @@ depu() { # npm if [ -e package-lock.json ]; then printf "Updating npm dependencies for %s...\n\n" "${PWD##*/}" + npm install npm update npm outdated fi @@ -90,7 +91,7 @@ depu() { # Go if [ -e go.mod ]; then printf "Updating Go dependencies for %s...\n\n" "${PWD##*/}" - go get -u + go get -u -t all go mod tidy fi diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 87f41d85..a6f63014 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -1,6 +1,6 @@ # Color scheme -set -ga terminal-overrides ",xterm-256color:Tc" -set -g default-terminal "xterm-256color" +set -sa terminal-overrides ",xterm-256color:RGB" +set -g default-terminal "screen-256color" set -g status-style 'bg=#1E272C,fg=#6A7D89' set -g window-status-current-style 'fg=cyan' set -g mode-style 'bg=cyan,fg=black' From 51c66b2333a73d9c00301f264fce1c10aaef8ea2 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sat, 12 Oct 2019 00:20:38 +0200 Subject: [PATCH 307/532] Remove bash support (in favor of zsh) --- bash/.bash_profile | 31 ------------------------------ bash/.bashrc | 1 - bash/.inputrc | 34 --------------------------------- init.sh | 22 ++++++++------------- update-js.sh | 2 +- {bash => zsh/.zsh.d}/.aliases | 0 {bash => zsh/.zsh.d}/.exports | 0 {bash => zsh/.zsh.d}/.functions | 26 ++++++------------------- {bash => zsh/.zsh.d}/.path | 0 zsh/.zshrc | 12 ++++++------ 10 files changed, 21 insertions(+), 107 deletions(-) delete mode 100644 bash/.bash_profile delete mode 100644 bash/.bashrc delete mode 100644 bash/.inputrc rename {bash => zsh/.zsh.d}/.aliases (100%) rename {bash => zsh/.zsh.d}/.exports (100%) rename {bash => zsh/.zsh.d}/.functions (93%) rename {bash => zsh/.zsh.d}/.path (100%) diff --git a/bash/.bash_profile b/bash/.bash_profile deleted file mode 100644 index 73b0d739..00000000 --- a/bash/.bash_profile +++ /dev/null @@ -1,31 +0,0 @@ -# Case-insensitive globbing (used in pathname expansion) -shopt -s nocaseglob; - -# Autocorrect typos in path names when using `cd` -shopt -s cdspell; - -# Enable some Bash 4 features when possible: -# * `autocd`, e.g. `**/qux` will enter `./foo/bar/baz/qux` -# * Recursive globbing, e.g. `echo **/*.txt` -for option in autocd globstar; do - shopt -s "$option" 2> /dev/null; -done; - -# Add tab completion for many Bash commands -if [ "$(uname)" == 'Darwin' ]; then - if command -v brew > /dev/null && [ -f "$(brew --prefix)/share/bash-completion/bash_completion" ]; then - source "$(brew --prefix)/share/bash-completion/bash_completion"; - elif [ -f /etc/bash_completion ]; then - . /etc/bash_completion; - fi; -fi; - -# Add tab completion for SSH hostnames based on ~/.ssh/config, ignoring wildcards -[ -e "$HOME/.ssh/config" ] && complete -o "default" -o "nospace" -W "$(grep "^Host" ~/.ssh/config | grep -v "[?*]" | cut -d " " -f2- | tr ' ' '\n')" scp sftp ssh; - -# Load the shell dotfiles, and then some: -# * ~/.path can be used to extend `$PATH` -# * ~/.extra can be used for other settings you don’t want to commit -for file in ~/.{path,exports,aliases,functions,extra}; do - [ -r "$file" ] && [ -f "$file" ] && . "$file"; -done; diff --git a/bash/.bashrc b/bash/.bashrc deleted file mode 100644 index 916ed17e..00000000 --- a/bash/.bashrc +++ /dev/null @@ -1 +0,0 @@ -[ -n "$PS1" ] && . ~/.bash_profile; diff --git a/bash/.inputrc b/bash/.inputrc deleted file mode 100644 index 484900e3..00000000 --- a/bash/.inputrc +++ /dev/null @@ -1,34 +0,0 @@ -# Make Tab autocomplete regardless of filename case -set completion-ignore-case on - -# List all matches in case multiple possible completions are possible -set show-all-if-ambiguous on - -# Immediately add a trailing slash when autocompleting symlinks to directories -set mark-symlinked-directories on - -# Use the text that has already been typed as the prefix for searching through -# commands (i.e. more intelligent Up/Down behavior) -"\e[A": history-search-backward -"\e[B": history-search-forward - -# Show all autocomplete results at once -set page-completions off - -# If there are more than 200 possible completions for a word, ask to show them all -set completion-query-items 200 - -# Show extra file information when completing, like `ls -F` does -set visible-stats on - -# Be more intelligent when autocompleting by also looking at the text after -# the cursor. For example, when the current line is "cd ~/src/mozil", and -# the cursor is on the "z", pressing Tab will not autocomplete it to "cd -# ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the -# Readline used by Bash 4.) -set skip-completed-text on - -# Allow UTF-8 input and output, instead of showing stuff like $'\0123\0456' -set input-meta on -set output-meta on -set convert-meta off diff --git a/init.sh b/init.sh index 2475b523..66752863 100755 --- a/init.sh +++ b/init.sh @@ -52,11 +52,8 @@ case "$(uname)" in brew install stow fi # Remove existing config files - if [ -f ~/.bashrc ]; then - rm ~/.bashrc - fi - if [ -f ~/.bash_profile ]; then - rm ~/.bash_profile + if [ -f ~/.zshrc ]; then + rm ~/.zshrc fi # Stow subdirectories of dotfiles for dir in ~/dotfiles/*/; do @@ -89,8 +86,8 @@ case "$(uname)" in https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # Run full system upgrade - . ~/dotfiles/bash/.path - . ~/dotfiles/bash/.functions + . ~/dotfiles/zsh/.zsh.d/.path + . ~/dotfiles/zsh/.zsh.d/.functions pacu # Install prezto @@ -135,11 +132,8 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' printf '\e[1mLinking dotfiles to your home directory\e[0m\n' sudo pacman -Syu stow --noconfirm --needed # Remove existing config files - if [ -f ~/.bashrc ]; then - rm ~/.bashrc - fi - if [ -f ~/.bash_profile ]; then - rm ~/.bash_profile + if [ -f ~/.zshrc ]; then + rm ~/.zshrc fi # Stow subdirectories of dotfiles for dir in ~/dotfiles/*/; do @@ -208,8 +202,8 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # Run full system upgrade - . ~/dotfiles/bash/.path - . ~/dotfiles/bash/.functions + . ~/dotfiles/zsh/.zsh.d/.path + . ~/dotfiles/zsh/.zsh.d/.functions pacu # Symlink nvim to vim if Vim not installed diff --git a/update-js.sh b/update-js.sh index 9e2f5eab..2ad99f8d 100755 --- a/update-js.sh +++ b/update-js.sh @@ -2,7 +2,7 @@ set -u -. ~/dotfiles/bash/.functions +. ~/dotfiles/zsh/.zsh.d/.functions js_dir="${HOME}/js" diff --git a/bash/.aliases b/zsh/.zsh.d/.aliases similarity index 100% rename from bash/.aliases rename to zsh/.zsh.d/.aliases diff --git a/bash/.exports b/zsh/.zsh.d/.exports similarity index 100% rename from bash/.exports rename to zsh/.zsh.d/.exports diff --git a/bash/.functions b/zsh/.zsh.d/.functions similarity index 93% rename from bash/.functions rename to zsh/.zsh.d/.functions index 7b1ecba2..e67b87ef 100644 --- a/bash/.functions +++ b/zsh/.zsh.d/.functions @@ -73,6 +73,12 @@ ide() { # Update dependencies depu() { + # Git submodules + if [ -e .gitmodules ]; then + printf "Updating Git submodules for %s...\n\n" "${PWD##*/}" + git submodule update --init + fi + # npm if [ -e package-lock.json ]; then printf "Updating npm dependencies for %s...\n\n" "${PWD##*/}" @@ -81,13 +87,6 @@ depu() { npm outdated fi - # Yarn - if [ -e yarn.lock ]; then - printf "Updating Yarn dependencies for %s...\n\n" "${PWD##*/}" - yarn upgrade > /dev/null - yarn outdated - fi - # Go if [ -e go.mod ]; then printf "Updating Go dependencies for %s...\n\n" "${PWD##*/}" @@ -100,12 +99,6 @@ depu() { printf "Updating Cargo dependencies for %s...\n\n" "${PWD##*/}" cargo update fi - - # Git submodules - if [ -e .gitmodules ]; then - printf "Updating Git submodules for %s...\n\n" "${PWD##*/}" - git submodule update --init - fi } # System update @@ -204,13 +197,6 @@ pacu() { processes+=("$!") fi - # Ruby gems - if [ -x "$(command -v gem)" ]; then - printf '\e[1mUpdating Ruby gems\e[0m\n' - (sudo gem update --system --force && gem update --force && gem cleanup) & - processes+=("$!") - fi - # Python pip if [ -x "$(command -v pip)" ]; then printf '\e[1mUpdating pip packages\e[0m\n' diff --git a/bash/.path b/zsh/.zsh.d/.path similarity index 100% rename from bash/.path rename to zsh/.zsh.d/.path diff --git a/zsh/.zshrc b/zsh/.zshrc index 99fb085f..79944abc 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -1,13 +1,13 @@ -# Load the shell dotfiles, and then some: -# * ~/.path can be used to extend `$PATH`. -# * ~/.extra can be used for other settings you don’t want to commit. -for file in ~/.{path,exports,aliases,functions,extra}; do - [ -r "$file" ] && [ -f "$file" ] && source "$file" +# Load the shell dotfiles +# .path can be used to extend `$PATH`. +# .extra can be used for other settings you don’t want to commit. +for file in ~/.zsh.d/.{path,exports,aliases,functions,extra}; do + [ -r "$file" ] && [ -f "$file" ] && source "$file" done # Source Prezto if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then - source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" + source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" fi bindkey '^P' history-beginning-search-backward From ff13cc7b5fc803c5febffc1a001e15beea162275 Mon Sep 17 00:00:00 2001 From: Andrea Salvatori - IU6FZL Date: Sun, 20 Oct 2019 12:17:11 +0200 Subject: [PATCH 308/532] changed yaourt in favor of yay --- init.sh | 19 +++++++++++-------- zsh/.zsh.d/.functions | 6 +++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/init.sh b/init.sh index 66752863..aeb3612e 100755 --- a/init.sh +++ b/init.sh @@ -110,12 +110,6 @@ case "$(uname)" in # Set colors for pacman sudo sed -i 's/#Color/Color/' /etc/pacman.conf - # Add Yaourt repo to pacman conf - grep -q -F "repo.archlinux.fr" /etc/pacman.conf || sudo sh -c 'echo '\'' -[archlinuxfr] -SigLevel = Never -Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' - # Install git if not installed if [ ! -x "$(command -v git)" ]; then printf '\e[1mInstalling Git\e[0m\n' @@ -153,6 +147,7 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' ruby \ aws-cli \ chromium \ + base-devel \ cmake \ diff-so-fancy \ docker \ @@ -168,10 +163,18 @@ Server = http://repo.archlinux.fr/$arch'\'' >> /etc/pacman.conf' the_silver_searcher \ tmux \ wget \ - yaourt \ zsh \ zsh-completions - yaourt -Sy --noconfirm --needed \ + + # Install Yay if not installed + if [ ! -x "$(command -v yay)"]; then + printf '\e[1mInstalling Yay\e[0m\n' + git clone https://aur.archlinux.org/yay.git && cd yay + makepkg -si + cd .. && rm -rf yay/ + fi + + yay -Sy --noconfirm --needed \ cloudfoundry-cli \ delve \ dropbox \ diff --git a/zsh/.zsh.d/.functions b/zsh/.zsh.d/.functions index e67b87ef..cd61faf7 100644 --- a/zsh/.zsh.d/.functions +++ b/zsh/.zsh.d/.functions @@ -124,9 +124,9 @@ pacu() { sudo pacman -Sc --noconfirm sudo pacman-optimize fi - if [ -x "$(command -v yaourt)" ]; then - printf '\e[1mUpdating yaourt packages\e[0m\n' - yaourt -Syua --noconfirm + if [ -x "$(command -v yay)" ]; then + printf '\e[1mUpdating yay packages\e[0m\n' + yay -Syua --noconfirm fi # Solus if [ -x "$(command -v eopkg)" ]; then From 022d5d5c1c8f19e0b08dcad69c7847a5e9b4ef69 Mon Sep 17 00:00:00 2001 From: Andrea Salvatori - IU6FZL Date: Mon, 21 Oct 2019 09:51:02 +0200 Subject: [PATCH 309/532] Updated the 'Y' of yay in uppercase inside zsh functions --- zsh/.zsh.d/.functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zsh/.zsh.d/.functions b/zsh/.zsh.d/.functions index cd61faf7..47d48e28 100644 --- a/zsh/.zsh.d/.functions +++ b/zsh/.zsh.d/.functions @@ -125,7 +125,7 @@ pacu() { sudo pacman-optimize fi if [ -x "$(command -v yay)" ]; then - printf '\e[1mUpdating yay packages\e[0m\n' + printf '\e[1mUpdating Yay packages\e[0m\n' yay -Syua --noconfirm fi # Solus From 53dda88b8e7d3d5862c35ca8584d19e30c19b41d Mon Sep 17 00:00:00 2001 From: Andrea Salvatori - IU6FZL Date: Tue, 22 Oct 2019 13:08:25 +0200 Subject: [PATCH 310/532] Installing Yay from /tmp dir instead of manually having to remove it afterwards. --- init.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/init.sh b/init.sh index aeb3612e..e9ed152c 100755 --- a/init.sh +++ b/init.sh @@ -169,9 +169,8 @@ case "$(uname)" in # Install Yay if not installed if [ ! -x "$(command -v yay)"]; then printf '\e[1mInstalling Yay\e[0m\n' - git clone https://aur.archlinux.org/yay.git && cd yay - makepkg -si - cd .. && rm -rf yay/ + git clone https://aur.archlinux.org/yay.git /tmp/yay + (cd /tmp/yay && makepkg -si) fi yay -Sy --noconfirm --needed \ From d22c41d3b8ac116dc32ceb71ed9b529ab4db24d9 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 22 Oct 2019 15:14:40 +0200 Subject: [PATCH 311/532] Simplify prezto customizations --- gopass/.config/gopass/config.yml | 1 + tmux/.tmux.macos.conf | 2 +- zsh/.zpreztorc | 16 +++------------- zsh/.zsh.d/.aliases | 1 + zsh/.zsh.d/.functions | 2 +- 5 files changed, 7 insertions(+), 15 deletions(-) diff --git a/gopass/.config/gopass/config.yml b/gopass/.config/gopass/config.yml index 2bfbc8fb..d44a1c4a 100644 --- a/gopass/.config/gopass/config.yml +++ b/gopass/.config/gopass/config.yml @@ -1,4 +1,5 @@ root: autosync: true + noconfirm: true safecontent: true usesymbols: true diff --git a/tmux/.tmux.macos.conf b/tmux/.tmux.macos.conf index e10c33a7..a9f09693 100644 --- a/tmux/.tmux.macos.conf +++ b/tmux/.tmux.macos.conf @@ -1 +1 @@ -set -g default-command "reattach-to-user-namespace -l ${SHELL}" +set-option -g default-command "reattach-to-user-namespace -l $SHELL -l" diff --git a/zsh/.zpreztorc b/zsh/.zpreztorc index bded424c..8ed56b33 100644 --- a/zsh/.zpreztorc +++ b/zsh/.zpreztorc @@ -3,30 +3,20 @@ fpath=( ${fpath} ) -# Color output (auto set to 'no' on dumb terminals). -zstyle ':prezto:*:*' color 'yes' - -# Set the Zsh modules to load (man zshmodules). -# zstyle ':prezto:load' zmodule 'attr' 'stat' - -# Set the Zsh functions to load (man zshcontrib). -# zstyle ':prezto:load' zfunction 'zargs' 'zmv' - # Set the Prezto modules to load (browse modules). # The order matters. zstyle ':prezto:load' pmodule \ - 'environment' \ 'utility' \ - 'spectrum' \ 'completion' \ 'git' \ 'tmux' \ 'prompt' \ - 'history' \ - 'history-substring-search' \ 'autosuggestions' \ 'editor' +# Color output (auto set to 'no' on dumb terminals). +zstyle ':prezto:*:*' color 'yes' + # Auto load tmux when zsh starts zstyle ':prezto:module:tmux:auto-start' local 'yes' diff --git a/zsh/.zsh.d/.aliases b/zsh/.zsh.d/.aliases index 4fe05dcb..b5d4f763 100644 --- a/zsh/.zsh.d/.aliases +++ b/zsh/.zsh.d/.aliases @@ -4,3 +4,4 @@ alias sudo='sudo ' # Easier navigation alias ..="cd .." alias ...="cd ../.." +alias ....="cd ../../.." diff --git a/zsh/.zsh.d/.functions b/zsh/.zsh.d/.functions index 47d48e28..32dd3a70 100644 --- a/zsh/.zsh.d/.functions +++ b/zsh/.zsh.d/.functions @@ -71,7 +71,7 @@ ide() { fi } -# Update dependencies +# Update project dependencies depu() { # Git submodules if [ -e .gitmodules ]; then From 94ec9a050e95e09d276b3d79c57dcce5dc069840 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 22 Oct 2019 15:16:19 +0200 Subject: [PATCH 312/532] Fix typo --- init.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/init.sh b/init.sh index e9ed152c..ea778160 100755 --- a/init.sh +++ b/init.sh @@ -167,12 +167,12 @@ case "$(uname)" in zsh-completions # Install Yay if not installed - if [ ! -x "$(command -v yay)"]; then + if [ ! -x "$(command -v yay)" ]; then printf '\e[1mInstalling Yay\e[0m\n' git clone https://aur.archlinux.org/yay.git /tmp/yay (cd /tmp/yay && makepkg -si) fi - + yay -Sy --noconfirm --needed \ cloudfoundry-cli \ delve \ From 695c04ec61879a2c292d80398adf4e78603e27bd Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 23 Oct 2019 14:56:21 +0200 Subject: [PATCH 313/532] Add reference comments where code was imported --- tmux/.tmux.macos.conf | 3 ++- zsh/.zsh.d/.exports | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tmux/.tmux.macos.conf b/tmux/.tmux.macos.conf index a9f09693..200eb770 100644 --- a/tmux/.tmux.macos.conf +++ b/tmux/.tmux.macos.conf @@ -1 +1,2 @@ -set-option -g default-command "reattach-to-user-namespace -l $SHELL -l" +# https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard +set-option -g default-command "reattach-to-user-namespace -l $SHELL" diff --git a/zsh/.zsh.d/.exports b/zsh/.zsh.d/.exports index 378fc298..55d2f2d8 100644 --- a/zsh/.zsh.d/.exports +++ b/zsh/.zsh.d/.exports @@ -13,4 +13,5 @@ export HISTCONTROL='ignoreboth'; export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/*" --glob "!bin/*" --glob "!build/*" --glob "!coverage/*" --glob "!dist/*" --glob "!target/*"' # Set correct TTY for GPG +# https://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html export GPG_TTY="$(tty)" From 556528a9b6af71dd58364ad8447a73133c058823 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 24 Oct 2019 08:39:50 +0200 Subject: [PATCH 314/532] Specify where homebrew taps are used --- Brewfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Brewfile b/Brewfile index 93f27f23..8ce40da3 100644 --- a/Brewfile +++ b/Brewfile @@ -35,7 +35,7 @@ brew "prettier" brew "protobuf" brew "reattach-to-user-namespace" brew "ripgrep" -brew "sc-im" +brew "nickolasburr/pfa/sc-im" brew "shellcheck" brew "terraform" brew "tflint" From d3fd77e0c8a9cf04041273522f0abaa87657de37 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 7 Nov 2019 11:45:41 +0100 Subject: [PATCH 315/532] Add back history zsh module --- zsh/.zpreztorc | 1 + 1 file changed, 1 insertion(+) diff --git a/zsh/.zpreztorc b/zsh/.zpreztorc index 8ed56b33..c9a5b7c9 100644 --- a/zsh/.zpreztorc +++ b/zsh/.zpreztorc @@ -11,6 +11,7 @@ zstyle ':prezto:load' pmodule \ 'git' \ 'tmux' \ 'prompt' \ + 'history' \ 'autosuggestions' \ 'editor' From 57545ac9df08520d32da16c5498561f2b88b19ee Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 25 Nov 2019 11:45:31 +0100 Subject: [PATCH 316/532] Remove redundant zsh completions Because they are already handled by zprezto --- Brewfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Brewfile b/Brewfile index 8ce40da3..4e73030a 100644 --- a/Brewfile +++ b/Brewfile @@ -47,7 +47,6 @@ brew "vifm" brew "watchman" brew "wget" brew "zsh" -brew "zsh-completions" # Desktop Applications cask "alacritty" From fb373d3a12f28a720f77d4862418653fdff0f4fb Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 18 Dec 2019 11:55:44 +0100 Subject: [PATCH 317/532] Use quantum color scheme --- alacritty/.config/alacritty/alacritty.yml | 2 +- init.sh | 4 ++-- .../vifm/colors/{quantum-black.vifm => quantum.vifm} | 0 vifm/.config/vifm/vifmrc | 2 +- vim/.plugins.vimrc | 1 - zsh/.zpreztorc | 6 ++++++ 6 files changed, 10 insertions(+), 5 deletions(-) rename vifm/.config/vifm/colors/{quantum-black.vifm => quantum.vifm} (100%) diff --git a/alacritty/.config/alacritty/alacritty.yml b/alacritty/.config/alacritty/alacritty.yml index f2642788..2676ba10 100644 --- a/alacritty/.config/alacritty/alacritty.yml +++ b/alacritty/.config/alacritty/alacritty.yml @@ -16,7 +16,7 @@ font: # The quantum-black color scheme colors: primary: - background: "0x212120" + background: "0x263238" foreground: "0xbbbebf" normal: black: "0x464545" diff --git a/init.sh b/init.sh index ea778160..49f5bdc7 100755 --- a/init.sh +++ b/init.sh @@ -224,8 +224,8 @@ esac # Install custom vifm theme if [ -x "$(command -v vifm)" ]; then printf '\e[1mInstalling custom vifm theme\e[0m\n' - ln -f -s ~/dotfiles/quantum-black.vifm ~/.config/vifm/colors/quantum-black.vifm - sed -i '' 's/colorscheme Default/colorscheme quantum-black/' ~/.config/vifm/vifmrc + ln -f -s ~/dotfiles/quantum.vifm ~/.config/vifm/colors/quantum.vifm + sed -i '' 's/colorscheme Default/colorscheme quantum/' ~/.config/vifm/vifmrc fi # Use zsh diff --git a/vifm/.config/vifm/colors/quantum-black.vifm b/vifm/.config/vifm/colors/quantum.vifm similarity index 100% rename from vifm/.config/vifm/colors/quantum-black.vifm rename to vifm/.config/vifm/colors/quantum.vifm diff --git a/vifm/.config/vifm/vifmrc b/vifm/.config/vifm/vifmrc index 624edc47..c98fe957 100644 --- a/vifm/.config/vifm/vifmrc +++ b/vifm/.config/vifm/vifmrc @@ -1 +1 @@ -colorscheme quantum-black +colorscheme quantum diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index dc3b5b27..fa9197ee 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -13,7 +13,6 @@ Plug 'tpope/vim-sensible' " Colorscheme Plug 'tyrannicaltoucan/vim-quantum' -let g:quantum_black=1 " Goyo mode for focused writing Plug 'junegunn/goyo.vim', { 'on': 'Goyo' } diff --git a/zsh/.zpreztorc b/zsh/.zpreztorc index c9a5b7c9..a9b91924 100644 --- a/zsh/.zpreztorc +++ b/zsh/.zpreztorc @@ -10,6 +10,8 @@ zstyle ':prezto:load' pmodule \ 'completion' \ 'git' \ 'tmux' \ + 'syntax-highlighting' \ + 'history-substring-search' \ 'prompt' \ 'history' \ 'autosuggestions' \ @@ -21,6 +23,10 @@ zstyle ':prezto:*:*' color 'yes' # Auto load tmux when zsh starts zstyle ':prezto:module:tmux:auto-start' local 'yes' +zstyle ':prezto:module:syntax-highlighting' highlighters \ + 'main' \ + 'brackets' \ + # Set the prompt theme to load. # Setting it to 'random' loads a random theme. # Auto set to 'off' on dumb terminals. From 6507fd3dd2de7df49d764420a51cbc919eec3e4d Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 24 Dec 2019 15:19:52 +0100 Subject: [PATCH 318/532] Use new reference to ALE Vim plugin Fixes https://github.com/mastertinner/dotfiles/issues/2 --- vim/.plugins.vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index fa9197ee..ad1e67f4 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -72,7 +72,7 @@ Plug 'tpope/vim-commentary' Plug 'jiangmiao/auto-pairs' " Linting and auto fixing -Plug 'w0rp/ale' +Plug 'dense-analysis/ale' let g:ale_fixers = {} let g:ale_fixers['javascript'] = ['prettier','eslint'] let g:ale_fixers['typescript'] = ['prettier','eslint'] From f51ed3cef42c65e544a40d940788adfd4c05a5dd Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 3 Jan 2020 10:14:55 +0100 Subject: [PATCH 319/532] Use sh instead of bash where possible --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 714c0762..365735d8 100644 --- a/README.md +++ b/README.md @@ -34,5 +34,5 @@ I mainly work with [Go](https://golang.org), [Rust](https://www.rust-lang.org), **WARNING: This may install and/or remove software and change your configs!** ```shell - $ curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh | bash + $ curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh | sh ``` From 33f32e7f2bc02760b67f821e4eacd69940b1331c Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Mon, 6 Jan 2020 09:27:16 +0100 Subject: [PATCH 320/532] Use apt instead of apt-get for Debian systems --- zsh/.zsh.d/.functions | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/zsh/.zsh.d/.functions b/zsh/.zsh.d/.functions index 32dd3a70..0d5fd157 100644 --- a/zsh/.zsh.d/.functions +++ b/zsh/.zsh.d/.functions @@ -134,12 +134,11 @@ pacu() { sudo eopkg upgrade fi # Debian - if [ -x "$(command -v apt-get)" ]; then + if [ -x "$(command -v apt)" ]; then printf '\e[1mUpdating apt packages\e[0m\n' - sudo apt-get update - sudo apt-get dist-upgrade -y - sudo apt-get autoremove -y - sudo apt-get autoclean -y + sudo apt update + sudo apt full-upgrade -y + sudo apt autoremove -y fi ;; From 66873034d4ff76f0c2c8af313a687cffd387205a Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 12 Jan 2020 15:09:14 +0100 Subject: [PATCH 321/532] Update Arch Linux init script --- init.sh | 57 +++++++++++++++++++++++++------------------ zsh/.zsh.d/.functions | 1 - 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/init.sh b/init.sh index 49f5bdc7..96fafcea 100755 --- a/init.sh +++ b/init.sh @@ -90,11 +90,6 @@ case "$(uname)" in . ~/dotfiles/zsh/.zsh.d/.functions pacu - # Install prezto - if [ ! -d ~/.zprezto ]; then - git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" - fi - # Symlink nvim to vim if Vim not installed if [ ! -f /usr/local/bin/vim ]; then sudo ln -s /usr/local/bin/nvim /usr/local/bin/vim @@ -138,33 +133,46 @@ case "$(uname)" in # Install tools printf '\e[1mInstalling desired tools and apps\e[0m\n' sudo pacman -Syu --noconfirm --needed \ + base-devel \ go \ nodejs \ npm \ python \ python-pip \ - prettier \ ruby \ + ansible \ + ansible-lint \ aws-cli \ - chromium \ - base-devel \ cmake \ + curl \ diff-so-fancy \ - docker \ + fd \ fzf \ git \ - go-tools \ + gnupg \ htop \ jq \ + lolcat \ neovim \ + nitrogen \ + prettier \ protobuf \ + ripgrep \ shellcheck \ + sxiv \ terraform \ - the_silver_searcher \ + tmate \ tmux \ + tree \ + typescript \ + vifm \ wget \ + zathura \ + zathura-pdf-poppler \ zsh \ - zsh-completions + alacritty \ + docker \ + firefox # Install Yay if not installed if [ ! -x "$(command -v yay)" ]; then @@ -173,15 +181,18 @@ case "$(uname)" in (cd /tmp/yay && makepkg -si) fi - yay -Sy --noconfirm --needed \ + yay -Syu --noconfirm --needed \ + awslogs \ cloudfoundry-cli \ - delve \ + golangci-lint \ + gopass \ + sc-im \ + tflint \ dropbox \ - grv \ - hadolint-git \ - prezto-git \ - spotify \ - tmate + slack-desktop \ + spotify + # hadolint \ + # origin-client \ # Enable docker service and allow user to run it without sudo sudo systemctl enable docker.service @@ -221,11 +232,9 @@ case "$(uname)" in ;; esac -# Install custom vifm theme -if [ -x "$(command -v vifm)" ]; then - printf '\e[1mInstalling custom vifm theme\e[0m\n' - ln -f -s ~/dotfiles/quantum.vifm ~/.config/vifm/colors/quantum.vifm - sed -i '' 's/colorscheme Default/colorscheme quantum/' ~/.config/vifm/vifmrc +# Install prezto +if [ ! -d ~/.zprezto ]; then + git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" fi # Use zsh diff --git a/zsh/.zsh.d/.functions b/zsh/.zsh.d/.functions index 0d5fd157..f9d5906c 100644 --- a/zsh/.zsh.d/.functions +++ b/zsh/.zsh.d/.functions @@ -122,7 +122,6 @@ pacu() { sudo pacman -Rns $orphans --noconfirm fi sudo pacman -Sc --noconfirm - sudo pacman-optimize fi if [ -x "$(command -v yay)" ]; then printf '\e[1mUpdating Yay packages\e[0m\n' From 820a34a4cf83e8beadea382fc898e68932400809 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 16 Jan 2020 14:52:08 +0100 Subject: [PATCH 322/532] Use headless neovim to update plugins --- vim/.plugins.vimrc | 2 +- zsh/.zsh.d/.functions | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index ad1e67f4..5ef88953 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -138,7 +138,7 @@ let g:rustfmt_autosave = 1 " JavaScript Plug 'pangloss/vim-javascript', { 'for': 'javascript' } -Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install -g tern', 'for': 'javascript' } +Plug 'carlitux/deoplete-ternjs', { 'do': 'npm install --global tern', 'for': 'javascript' } Plug 'mxw/vim-jsx', { 'for': 'javascript.jsx' } Plug 'posva/vim-vue', { 'for': 'vue' } diff --git a/zsh/.zsh.d/.functions b/zsh/.zsh.d/.functions index f9d5906c..0ea571f5 100644 --- a/zsh/.zsh.d/.functions +++ b/zsh/.zsh.d/.functions @@ -136,8 +136,8 @@ pacu() { if [ -x "$(command -v apt)" ]; then printf '\e[1mUpdating apt packages\e[0m\n' sudo apt update - sudo apt full-upgrade -y - sudo apt autoremove -y + sudo apt full-upgrade --yes + sudo apt autoremove --yes fi ;; @@ -205,7 +205,7 @@ pacu() { # Vim if [ -x "$(command -v nvim)" ]; then printf '\e[1mUpdating Vim plugins\e[0m\n' - nvim -c 'PlugUpgrade | PlugClean! | PlugUpdate | qa' + nvim --headless -c 'PlugUpgrade | PlugClean! | PlugUpdate | UpdateRemotePlugins | qa' fi # Wait for all processes to finish From 596d564c656c1dae434e5d5912ef522af03abb86 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sun, 19 Jan 2020 13:38:59 +0100 Subject: [PATCH 323/532] Simplify Alacritty color scheme --- alacritty/.config/alacritty/alacritty.yml | 23 +++++------------ init.sh | 31 ++++++++++++++--------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/alacritty/.config/alacritty/alacritty.yml b/alacritty/.config/alacritty/alacritty.yml index 2676ba10..d12eabc4 100644 --- a/alacritty/.config/alacritty/alacritty.yml +++ b/alacritty/.config/alacritty/alacritty.yml @@ -13,29 +13,20 @@ font: x: 1 y: 1 -# The quantum-black color scheme +# The quantum color scheme colors: primary: background: "0x263238" - foreground: "0xbbbebf" + foreground: "0xaebbc5" normal: black: "0x464545" - red: "0xd97084" + red: "0xdd7186" green: "0x87bb7c" - yellow: "0xd5b874" - blue: "0x6face4" - magenta: "0xa389dd" - cyan: "0x68c5cd" + yellow: "0xd5b875" + blue: "0x70ace5" + magenta: "0xa48add" + cyan: "0x69c5ce" white: "0xbbbebf" - bright: - black: "0x696b6b" - red: "0xed8499" - green: "0x97d589" - yellow: "0xe9cb87" - blue: "0x87bff5" - magenta: "0xb9a0ee" - cyan: "0x7bdbe4" - white: "0xd0d2d2" key_bindings: - { key: Key0, mods: Command, action: ResetFontSize } diff --git a/init.sh b/init.sh index 96fafcea..001e51d9 100755 --- a/init.sh +++ b/init.sh @@ -133,12 +133,10 @@ case "$(uname)" in # Install tools printf '\e[1mInstalling desired tools and apps\e[0m\n' sudo pacman -Syu --noconfirm --needed \ + alacritty \ base-devel \ - go \ - nodejs \ - npm \ - python \ - python-pip \ + docker \ + firefox ruby \ ansible \ ansible-lint \ @@ -150,13 +148,19 @@ case "$(uname)" in fzf \ git \ gnupg \ + go \ htop \ jq \ lolcat \ + man-db \ neovim \ nitrogen \ + nodejs \ + npm \ prettier \ protobuf \ + python \ + python-pip \ ripgrep \ shellcheck \ sxiv \ @@ -169,10 +173,7 @@ case "$(uname)" in wget \ zathura \ zathura-pdf-poppler \ - zsh \ - alacritty \ - docker \ - firefox + zsh # Install Yay if not installed if [ ! -x "$(command -v yay)" ]; then @@ -184,13 +185,16 @@ case "$(uname)" in yay -Syu --noconfirm --needed \ awslogs \ cloudfoundry-cli \ + dropbox \ golangci-lint \ gopass \ + polybar \ + slack-desktop \ sc-im \ + siji-git \ + spotify \ tflint \ - dropbox \ - slack-desktop \ - spotify + ttf-monaco # hadolint \ # origin-client \ @@ -244,4 +248,7 @@ if [ -x "$(command -v zsh)" ]; then chsh -s "$(command -v zsh)" fi +# Remove existing bash config files +rm -f ~/.bash* + printf '\e[1mDotfiles successfully initialized. Please reboot to finalize.\e[0m\n' From 27c256380892503bff4d0611b93b601d93249862 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Wed, 22 Jan 2020 21:11:41 +0100 Subject: [PATCH 324/532] Add Rust to init script --- .gitignore | 3 +-- README.md | 26 ++++++++++++++++++++------ init.sh | 15 +++++++++++---- prompt_mastertinner_setup | 2 ++ zsh/.zpreztorc | 2 ++ zsh/.zsh.d/.functions | 4 ++-- 6 files changed, 38 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index df025570..58b10932 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -/bash/.extra -/Brewfile.extra +/extra.Brewfile # Vifm creates additional files which need to be ignored vifm/.config/vifm/ diff --git a/README.md b/README.md index 365735d8..97763b66 100644 --- a/README.md +++ b/README.md @@ -4,18 +4,32 @@ I mainly work with [Go](https://golang.org), [Rust](https://www.rust-lang.org), [JavaScript](https://en.wikipedia.org/wiki/JavaScript), [TypeScript](https://www.typescriptlang.org), [Markdown](https://en.wikipedia.org/wiki/Markdown) and [shell scripts](https://en.wikipedia.org/wiki/Shell_script) so my setup is geared towards working with these technologies. -## Usage +Automated setup is supported for macOS and Arch Linux (and its derivates). Other Linux distributions should work but have to be set up manually. -- `pacu`: Updates and upgrades the whole system (using `Brewfile` on macOS) -- `depu`: Updates and upgrades the dependencies for the current project -- `vim`: Starts Neovim with all plugins -- and many more... +## Features and Usage + +### Terminal + +This setup uses a powerful combination of [Alacritty](https://github.com/jwilm/alacritty), [tmux](https://github.com/tmux/tmux) and [zsh](https://www.zsh.org/) with a very minimalistic prompt. + +- `pacu`: Update and upgrade the whole system (using `Brewfile` on macOS) +- `depu`: Update and upgrade the dependencies for the current project +- `ctrl + n` and `crtl + p`: Cycle through the last used commands filtering by what was already typed +- `gopass`: Trigger the password manager + +### IDE + +[NeoVim](https://neovim.io/) configured to be an IDE. The whole setup with all plugins can also be run as a [Docker Container](https://github.com/mastertinner/vide). + +- `vim`: Start Neovim with all plugins +- `ctrl + p`: Fussy search across whole project +- `ctrl + n`: Visual file explorer ## Installation 1. Clone this repo to `~/dotfiles` by running `git clone git@github.com:mastertinner/dotfiles.git ~/dotfiles` 1. Change the name and email address in `git/.gitconfig` -1. macOS only: Change `Brewfile` to your liking or add `Brewfile.extra` for independent packages per machine +1. macOS only: Change `Brewfile` to your liking or add `extra.Brewfile` for independent packages per machine 1. macOS only: If you have apps installed which you didn't install through `brew cask` but that you now added to `Brewfile` as `cask`, you need to reinstall them with `brew cask install --force` so `cask` knows it's supposed to manage these apps. Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. diff --git a/init.sh b/init.sh index 001e51d9..b1a67bc2 100755 --- a/init.sh +++ b/init.sh @@ -134,17 +134,16 @@ case "$(uname)" in printf '\e[1mInstalling desired tools and apps\e[0m\n' sudo pacman -Syu --noconfirm --needed \ alacritty \ - base-devel \ - docker \ - firefox - ruby \ ansible \ ansible-lint \ aws-cli \ + base-devel \ cmake \ curl \ diff-so-fancy \ + docker \ fd \ + firefox \ fzf \ git \ gnupg \ @@ -157,11 +156,13 @@ case "$(uname)" in nitrogen \ nodejs \ npm \ + openssh \ prettier \ protobuf \ python \ python-pip \ ripgrep \ + ruby \ shellcheck \ sxiv \ terraform \ @@ -236,6 +237,12 @@ case "$(uname)" in ;; esac +# Install rustup +if [ ! -x "$(command -v rustup)" ]; then + printf '\e[1mInstalling Rust\e[0m\n' + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +fi + # Install prezto if [ ! -d ~/.zprezto ]; then git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto" diff --git a/prompt_mastertinner_setup b/prompt_mastertinner_setup index 0ffad67c..4c922e2f 100644 --- a/prompt_mastertinner_setup +++ b/prompt_mastertinner_setup @@ -1,3 +1,5 @@ +# vim: ft=zsh + function prompt_mastertinner_precmd { if (( $+functions[git-info] )); then git-info diff --git a/zsh/.zpreztorc b/zsh/.zpreztorc index a9b91924..473b70f6 100644 --- a/zsh/.zpreztorc +++ b/zsh/.zpreztorc @@ -1,3 +1,5 @@ +# vim: ft=zsh + fpath=( ${HOME}/dotfiles ${fpath} diff --git a/zsh/.zsh.d/.functions b/zsh/.zsh.d/.functions index 0ea571f5..c917c2d3 100644 --- a/zsh/.zsh.d/.functions +++ b/zsh/.zsh.d/.functions @@ -151,8 +151,8 @@ pacu() { printf '\e[1mUpdating Homebrew packages\e[0m\n' brew update brew upgrade - cat ~/dotfiles/Brewfile* | brew bundle --file=- - cat ~/dotfiles/Brewfile* | brew bundle cleanup --force --file=- + cat ~/dotfiles/*Brewfile | brew bundle --file=- + cat ~/dotfiles/*Brewfile | brew bundle cleanup --force --file=- brew cu --all --yes --cleanup brew cleanup --prune 7 fi From 9187cfa42112af1bb959b1fcd00fd4b58545dfc8 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Thu, 23 Jan 2020 08:57:43 +0100 Subject: [PATCH 325/532] Rename init.sh to install.sh --- README.md | 4 ++-- init.sh => install.sh | 4 ++-- zsh/.zsh.d/.aliases | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) rename init.sh => install.sh (98%) diff --git a/README.md b/README.md index 97763b66..4822830c 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ This setup uses a powerful combination of [Alacritty](https://github.com/jwilm/a Note: This won't delete any of your data. The app will just be reinstalled with `brew cask` and everything will be back to normal once the installation script has run. -1. Run `~/dotfiles/init.sh` +1. Run `~/dotfiles/install.sh` **WARNING: This may install and/or remove software and change your configs!** @@ -48,5 +48,5 @@ This setup uses a powerful combination of [Alacritty](https://github.com/jwilm/a **WARNING: This may install and/or remove software and change your configs!** ```shell - $ curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/init.sh | sh + $ curl -s https://raw.githubusercontent.com/mastertinner/dotfiles/master/install.sh | sh ``` diff --git a/init.sh b/install.sh similarity index 98% rename from init.sh rename to install.sh index b1a67bc2..9ae51a6d 100755 --- a/init.sh +++ b/install.sh @@ -4,7 +4,7 @@ set -e -u -printf '\e[1mInitializing dotfiles\e[0m\n' +printf '\e[1mInstalling dotfiles\e[0m\n' case "$(uname)" in @@ -258,4 +258,4 @@ fi # Remove existing bash config files rm -f ~/.bash* -printf '\e[1mDotfiles successfully initialized. Please reboot to finalize.\e[0m\n' +printf '\e[1mDotfiles successfully installed. Please reboot to finalize.\e[0m\n' diff --git a/zsh/.zsh.d/.aliases b/zsh/.zsh.d/.aliases index b5d4f763..befe4f51 100644 --- a/zsh/.zsh.d/.aliases +++ b/zsh/.zsh.d/.aliases @@ -2,6 +2,6 @@ alias sudo='sudo ' # Easier navigation -alias ..="cd .." -alias ...="cd ../.." -alias ....="cd ../../.." +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' From 46a4fd5073e9b2f906bbedcd3583f1054c5a1eec Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 24 Jan 2020 09:30:01 +0100 Subject: [PATCH 326/532] Add watch to macOS --- Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Brewfile b/Brewfile index 4e73030a..61391e3e 100644 --- a/Brewfile +++ b/Brewfile @@ -44,6 +44,7 @@ brew "tmux" brew "tree" brew "typescript" brew "vifm" +brew "watch" brew "watchman" brew "wget" brew "zsh" From 57bedcc53b096a3867cbda2dc461f9c091b26441 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Fri, 24 Jan 2020 15:13:44 +0100 Subject: [PATCH 327/532] Fix quantum color scheme for alacritty --- alacritty/.config/alacritty/alacritty.yml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/alacritty/.config/alacritty/alacritty.yml b/alacritty/.config/alacritty/alacritty.yml index d12eabc4..d0ee56d2 100644 --- a/alacritty/.config/alacritty/alacritty.yml +++ b/alacritty/.config/alacritty/alacritty.yml @@ -14,19 +14,31 @@ font: y: 1 # The quantum color scheme +# Copied from https://github.com/tyrannicaltoucan/vim-quantum/blob/master/term/xresources/quantum.xresources colors: primary: background: "0x263238" foreground: "0xaebbc5" + cursor: + cursor: "0xc5ced5" normal: - black: "0x464545" + black: "0x425762" red: "0xdd7186" green: "0x87bb7c" yellow: "0xd5b875" blue: "0x70ace5" magenta: "0xa48add" cyan: "0x69c5ce" - white: "0xbbbebf" + white: "0xaebbc5" + bright: + black: "0x658494" + red: "0xed8499" + green: "0x97d589" + yellow: "0xe9cb88" + blue: "0x87bff5" + magenta: "0xb9a0ef" + cyan: "0x7bdbe4" + white: "0xc5ced5" key_bindings: - { key: Key0, mods: Command, action: ResetFontSize } From 2c2be18e80f70deded90547631cf2f816b2fb32d Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sat, 25 Jan 2020 10:08:34 +0100 Subject: [PATCH 328/532] Set default programs as env variables --- alacritty/.config/alacritty/alacritty.yml | 38 +++++++++++------------ zsh/.zpreztorc | 24 +++++++------- zsh/.zsh.d/.exports | 9 +++--- 3 files changed, 35 insertions(+), 36 deletions(-) diff --git a/alacritty/.config/alacritty/alacritty.yml b/alacritty/.config/alacritty/alacritty.yml index d0ee56d2..f8a1e2ae 100644 --- a/alacritty/.config/alacritty/alacritty.yml +++ b/alacritty/.config/alacritty/alacritty.yml @@ -17,28 +17,28 @@ font: # Copied from https://github.com/tyrannicaltoucan/vim-quantum/blob/master/term/xresources/quantum.xresources colors: primary: - background: "0x263238" - foreground: "0xaebbc5" + background: "#263238" + foreground: "#aebbc5" cursor: - cursor: "0xc5ced5" + cursor: "#c5ced5" normal: - black: "0x425762" - red: "0xdd7186" - green: "0x87bb7c" - yellow: "0xd5b875" - blue: "0x70ace5" - magenta: "0xa48add" - cyan: "0x69c5ce" - white: "0xaebbc5" + black: "#425762" + red: "#dd7186" + green: "#87bb7c" + yellow: "#d5b875" + blue: "#70ace5" + magenta: "#a48add" + cyan: "#69c5ce" + white: "#aebbc5" bright: - black: "0x658494" - red: "0xed8499" - green: "0x97d589" - yellow: "0xe9cb88" - blue: "0x87bff5" - magenta: "0xb9a0ef" - cyan: "0x7bdbe4" - white: "0xc5ced5" + black: "#658494" + red: "#ed8499" + green: "#97d589" + yellow: "#e9cb88" + blue: "#87bff5" + magenta: "#b9a0ef" + cyan: "#7bdbe4" + white: "#c5ced5" key_bindings: - { key: Key0, mods: Command, action: ResetFontSize } diff --git a/zsh/.zpreztorc b/zsh/.zpreztorc index 473b70f6..a3308c0a 100644 --- a/zsh/.zpreztorc +++ b/zsh/.zpreztorc @@ -1,23 +1,23 @@ # vim: ft=zsh fpath=( - ${HOME}/dotfiles - ${fpath} + ${HOME}/dotfiles + ${fpath} ) # Set the Prezto modules to load (browse modules). # The order matters. zstyle ':prezto:load' pmodule \ - 'utility' \ - 'completion' \ - 'git' \ - 'tmux' \ - 'syntax-highlighting' \ - 'history-substring-search' \ - 'prompt' \ - 'history' \ - 'autosuggestions' \ - 'editor' + 'utility' \ + 'completion' \ + 'git' \ + 'tmux' \ + 'syntax-highlighting' \ + 'history-substring-search' \ + 'prompt' \ + 'history' \ + 'autosuggestions' \ + 'editor' # Color output (auto set to 'no' on dumb terminals). zstyle ':prezto:*:*' color 'yes' diff --git a/zsh/.zsh.d/.exports b/zsh/.zsh.d/.exports index 55d2f2d8..ace4e73d 100644 --- a/zsh/.zsh.d/.exports +++ b/zsh/.zsh.d/.exports @@ -2,13 +2,12 @@ export LC_ALL='en_US.UTF-8'; export LANG='en_US.UTF-8'; -# Make vim the default editor -export EDITOR='vim'; +# Set default programs +export TERMINAL='alacritty' +export BROWSER='firefox' +export EDITOR='nvim'; export VISUAL="${EDITOR}" -# Omit duplicates and commands that begin with a space from history -export HISTCONTROL='ignoreboth'; - # Search only desired files with fzf export FZF_DEFAULT_COMMAND='rg --smart-case --files --no-ignore --hidden --follow --glob "!.DS_Store" --glob "!.git/*" --glob "!vendor/*" --glob "!node_modules/*" --glob "!.terraform/*" --glob "!bin/*" --glob "!build/*" --glob "!coverage/*" --glob "!dist/*" --glob "!target/*"' From 1d103a56c5aaa276e14b80b51f800699369d4942 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sat, 25 Jan 2020 16:05:42 +0100 Subject: [PATCH 329/532] Add v alias for NeoVim --- vim/.vimrc | 2 +- zsh/.zsh.d/.aliases | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/vim/.vimrc b/vim/.vimrc index 32658fc0..20704ad8 100644 --- a/vim/.vimrc +++ b/vim/.vimrc @@ -8,7 +8,7 @@ colorscheme quantum " Make Vim more useful set nocompatible -" Disable vim welcome message +" Disable Vim welcome message set shortmess=I " Set true terminal colors set termguicolors diff --git a/zsh/.zsh.d/.aliases b/zsh/.zsh.d/.aliases index befe4f51..46ded788 100644 --- a/zsh/.zsh.d/.aliases +++ b/zsh/.zsh.d/.aliases @@ -1,6 +1,9 @@ # Enable aliases to be sudo-ed alias sudo='sudo ' +# Run NeoVim +alias v='nvim' + # Easier navigation alias ..='cd ..' alias ...='cd ../..' From 0ffe5c505db4defcd3cb43f8427d224efd95a503 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Sat, 25 Jan 2020 23:06:09 +0100 Subject: [PATCH 330/532] Simplify install script --- README.md | 2 +- install.sh | 86 +++++++++++++++------------------------------ vim/.plugins.vimrc | 6 ++-- zsh/.zsh.d/.exports | 4 +-- 4 files changed, 36 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index 4822830c..6831d394 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ This setup uses a powerful combination of [Alacritty](https://github.com/jwilm/a [NeoVim](https://neovim.io/) configured to be an IDE. The whole setup with all plugins can also be run as a [Docker Container](https://github.com/mastertinner/vide). -- `vim`: Start Neovim with all plugins +- `v`: Start Neovim with all plugins - `ctrl + p`: Fussy search across whole project - `ctrl + n`: Visual file explorer diff --git a/install.sh b/install.sh index 9ae51a6d..bae6dcdf 100755 --- a/install.sh +++ b/install.sh @@ -25,9 +25,6 @@ case "$(uname)" in exit fi - # Set dark mode - sudo defaults write /Library/Preferences/.GlobalPreferences AppleInterfaceTheme Dark - # Install Homebrew if not installed if [ ! -x "$(command -v brew)" ]; then printf '\e[1mInstalling Homebrew\e[0m\n' @@ -46,7 +43,7 @@ case "$(uname)" in git clone git@github.com:mastertinner/dotfiles.git ~/dotfiles fi - # Install stow if not installed + # Install Stow if not installed if [ ! -x "$(command -v stow)" ]; then printf '\e[1mLinking dotfiles to your home directory\e[0m\n' brew install stow @@ -66,34 +63,13 @@ case "$(uname)" in npm config set prefix ~/.node_modules fi - # Use vimrc as Neovim config - printf '\e[1mSetting up Neovim\e[0m\n' - if [ -f ~/.config/nvim/init.vim ]; then - rm ~/.config/nvim/init.vim - fi - mkdir -p ~/.config/nvim - ln -s ~/.vimrc ~/.config/nvim/init.vim - # Install pip if not installed if [ ! -x "$(command -v pip)" ]; then sudo easy_install pip fi - # Install the Python neovim package - pip install --upgrade --user pynvim - - # Install vim-plug - curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ - https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - - # Run full system upgrade - . ~/dotfiles/zsh/.zsh.d/.path - . ~/dotfiles/zsh/.zsh.d/.functions - pacu - # Symlink nvim to vim if Vim not installed - if [ ! -f /usr/local/bin/vim ]; then - sudo ln -s /usr/local/bin/nvim /usr/local/bin/vim - fi + # Set dark mode + sudo defaults write /Library/Preferences/.GlobalPreferences AppleInterfaceTheme Dark ;; 'Linux') @@ -102,10 +78,7 @@ case "$(uname)" in exit 1 fi - # Set colors for pacman - sudo sed -i 's/#Color/Color/' /etc/pacman.conf - - # Install git if not installed + # Install Git if not installed if [ ! -x "$(command -v git)" ]; then printf '\e[1mInstalling Git\e[0m\n' sudo pacman -Syu git --noconfirm --needed @@ -114,7 +87,7 @@ case "$(uname)" in # git clone these dotfiles if not done yet if [ ! -d ~/dotfiles ]; then printf '\e[1mCloning dotfiles repo\e[0m\n' - git clone https://github.com/mastertinner/dotfiles.git + git clone git@github.com:mastertinner/dotfiles.git ~/dotfiles fi # Install Stow if not installed @@ -172,6 +145,7 @@ case "$(uname)" in typescript \ vifm \ wget \ + xclip \ zathura \ zathura-pdf-poppler \ zsh @@ -204,30 +178,8 @@ case "$(uname)" in getent group docker || groupadd docker sudo usermod -aG docker "${USER}" - # Use vimrc as Neovim config - printf '\e[1mSetting up Neovim\e[0m\n' - if [ -f ~/.config/nvim/init.vim ]; then - rm ~/.config/nvim/init.vim - fi - mkdir -p ~/.config/nvim - ln -s ~/.vimrc ~/.config/nvim/init.vim - - # Install the Python neovim package - pip install --upgrade --user pynvim - - # Install vim-plug - curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ - https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - - # Run full system upgrade - . ~/dotfiles/zsh/.zsh.d/.path - . ~/dotfiles/zsh/.zsh.d/.functions - pacu - - # Symlink nvim to vim if Vim not installed - if [ ! -f /usr/bin/vim ]; then - sudo ln -s /usr/bin/nvim /usr/bin/vim - fi + # Set colors for pacman + sudo sed -i 's/#Color/Color/' /etc/pacman.conf ;; # Default @@ -237,6 +189,21 @@ case "$(uname)" in ;; esac +# Use vimrc as Neovim config +printf '\e[1mSetting up NeoVim\e[0m\n' +if [ -f ~/.config/nvim/init.vim ]; then + rm ~/.config/nvim/init.vim +fi +mkdir -p ~/.config/nvim +ln -s ~/.vimrc ~/.config/nvim/init.vim + +# Install the Python NeoVim package +pip install --upgrade --user pynvim + +# Install vim-plug +curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ + https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + # Install rustup if [ ! -x "$(command -v rustup)" ]; then printf '\e[1mInstalling Rust\e[0m\n' @@ -256,6 +223,11 @@ if [ -x "$(command -v zsh)" ]; then fi # Remove existing bash config files -rm -f ~/.bash* +rm -rf ~/.bash* + +# Run full system upgrade +. ~/dotfiles/zsh/.zsh.d/.path +. ~/dotfiles/zsh/.zsh.d/.functions +pacu printf '\e[1mDotfiles successfully installed. Please reboot to finalize.\e[0m\n' diff --git a/vim/.plugins.vimrc b/vim/.plugins.vimrc index 5ef88953..73433f47 100644 --- a/vim/.plugins.vimrc +++ b/vim/.plugins.vimrc @@ -22,16 +22,18 @@ if has("autocmd") autocmd! User GoyoLeave nested call goyo_leave() endif function! s:goyo_enter() + set noshowmode set noshowcmd set scrolloff=999 - ALEDisable Limelight + ALEDisable endfunction function! s:goyo_leave() + set showmode set showcmd set scrolloff=3 - ALEEnable Limelight! + ALEEnable endfunction " Fuzzy finder diff --git a/zsh/.zsh.d/.exports b/zsh/.zsh.d/.exports index ace4e73d..ed2632e7 100644 --- a/zsh/.zsh.d/.exports +++ b/zsh/.zsh.d/.exports @@ -1,6 +1,6 @@ # Prefer US English and use UTF-8 -export LC_ALL='en_US.UTF-8'; -export LANG='en_US.UTF-8'; +export LC_ALL='en_US.UTF-8' +export LANG='en_US.UTF-8' # Set default programs export TERMINAL='alacritty' From 9674e1875e3ff39de26a4697963a0b74a6f373f9 Mon Sep 17 00:00:00 2001 From: Tobi Fuhrimann Date: Tue, 28 Jan 2020 09:29:53 +0100 Subject: [PATCH 331/532] Add desktop wallpapers --- wallpapers/.config/wallpapers/bespinian.png | Bin 0 -> 8519 bytes .../.config/wallpapers/small-memory.jpg | Bin 0 -> 2292155 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 wallpapers/.config/wallpapers/bespinian.png create mode 100644 wallpapers/.config/wallpapers/small-memory.jpg diff --git a/wallpapers/.config/wallpapers/bespinian.png b/wallpapers/.config/wallpapers/bespinian.png new file mode 100644 index 0000000000000000000000000000000000000000..79c39ea530dcf97e1e1905eba9c8feb37868f333 GIT binary patch literal 8519 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 literal 0 HcmV?d00001 diff --git a/wallpapers/.config/wallpapers/small-memory.jpg b/wallpapers/.config/wallpapers/small-memory.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1e2044e52be8305149124420a3d59c39c88b28fa GIT binary patch literal 2292155 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ᒃ$0Tu2)-Z4Q6^%BquY*h#X@D))OF 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 I;FQ9LqR2heLz& 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

    %Ab<|e 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 z

U$j~!^$4!^A*?|nXg%m3kBvhKpx+qUfH{vBx? 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⪚e7v3aDu5T5y~^MX6#& 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%0DQ2p=0~FE@L7w?^8GiD1>;%nhUs3`|5PlNT!r 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